К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как записать данные в документ 1С

Как записать данные в документ 1С: проведение, программная запись, режимы проведения, проверка результата и типичные ошибки. Практическое руководство с примерами кода.

Запись данных в документ 1С — базовая операция, но она имеет несколько принципиально разных сценариев: интерактивная запись через форму, проведение документа и программная запись из кода. От выбора сценария зависит, будут ли сформированы проводки и движения по регистрам, сработают ли проверки заполнения и не останется ли документ в «незавершённом» состоянии, который исказит отчёты.

Главное различие, которое нужно понять сразу: простая запись сохраняет данные документа в базе, а проведение дополнительно формирует движения по регистрам (бухгалтерским, накопления, сведений). Если документ записан, но не проведён, он виден в журнале, однако в отчётах и остатках его данных не будет. Именно это чаще всего путают начинающие пользователи и разработчики.

Ниже разобраны оба подхода: работа через интерфейс и программная запись на встроенном языке 1С. Каждый способ сопровождается проверкой результата и типичными ошибками.

Чем запись отличается от проведения

У документа в 1С есть три ключевых состояния: записан, проведён и помечен на удаление. Запись фиксирует реквизиты документа в базе данных и присваивает ему номер, если он ещё не присвоен. Проведение запускает обработчик проведения, в котором формируются движения по регистрам: бухгалтерские проводки, остатки товаров, взаиморасчёты и другие учётные данные.

Команда «Провести и закрыть» в форме выполняет сразу две операции: запись и проведение. Если в конфигурации для документа не предусмотрено проведение (документ не является регистратором ни одного регистра), кнопка проведения будет недоступна, и достаточно простой записи.

Признак проведённого документа в списке — отсутствие серой «непроведённой» иконки: проведённые документы обычно отображаются обычным значком, записанные без проведения — серым, помеченные на удаление — с красным крестом.

Как записать документ через интерфейс

В пользовательском режиме запись выполняется из формы документа. Порядок действий одинаков для большинства типовых конфигураций.

Порядок записи документа в форме
  1. 1
    Откройте документ или создайте новый через кнопку «Создать» в журнале документов
  2. 2
    Заполните обязательные реквизиты: дату, организацию, контрагента, табличные части
  3. 3
    Нажмите «Записать», чтобы сохранить без проведения, или «Провести» — чтобы сформировать движения
  4. 4
    Убедитесь, что в заголовке формы нет пометки «не проведён», а в журнале документ отображается как проведённый

Если при записи появляется сообщение о незаполненных реквизитах, система подсвечивает проблемные поля. Заполните их и повторите запись. Отказ в проведении с текстом ошибки (например, «не хватает остатка на складе») означает, что контроль в обработчике проведения не пройден — документ при этом может остаться записанным, но не проведённым.

Обратите внимание на дату документа: если период закрыт (установлена дата запрета изменения данных), запись будет отклонена. В этом случае нужно либо изменить дату документа, либо обратиться к администратору для временного открытия периода.

Программная запись: создание нового документа

Программно документ создаётся через менеджер документов: вызывается метод СоздатьДокумент(), заполняются реквизиты и табличные части, затем вызывается метод Записать() с нужным режимом.

bsl
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДатаСеанса();
НовыйДок.Организация = Организация;
НовыйДок.Контрагент = Контрагент;

НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = 2;
НоваяСтрока.Цена = 1500;

НовыйДок.Записать(РежимЗаписиДокумента.Проведение);

Метод Записать() принимает параметр режима записи: РежимЗаписиДокумента.Запись — только сохранение, РежимЗаписиДокумента.Проведение — запись с проведением, РежимЗаписиДокумента.ОтменаПроведения — снятие с проведения. Если режим не указан, выполняется простая запись.

Код, выполняющий запись, должен находиться на сервере (в серверной процедуре, модуле объекта или фоновом задании). В клиентском контексте объектная модель документа недоступна — там работают только данные формы.

Программная запись: изменение существующего документа

Чтобы изменить уже существующий документ, сначала получают объект по ссылке, затем меняют реквизиты и записывают. Работа идёт именно с объектом, а не со ссылкой: ссылка — это только идентификатор, изменять её реквизиты напрямую нельзя.

bsl
ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокОбъект.Комментарий = "Скорректировано автоматически";
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

Если документ проведён и нужно изменить его данные, обычно записывают снова в режиме проведения — старые движения при этом автоматически заменяются новыми. Записывать проведённый документ в режиме простой записи допустимо, но следует учитывать, что поведение зависит от настроек конфигурации: в ряде случаев система потребует перепроведения.

При массовой обработке документов (например, в обработке перепроведения) важно оборачивать запись в попытку-исключение и фиксировать ошибки по каждому документу, иначе одна проблемная запись прервёт всю пакетную операцию.

Проверка результата записи

После записи полезно убедиться, что документ действительно сохранён и проведён. Программно это проверяется свойствами ссылки: Проведен, ПометкаУдаления и Пустая().

Контрольные точки

Как проверить результат

Свойство Проведен у ссылки документа
Норма

Истина — движения сформированы

Тревожный признак

Ложь — документ записан, но в отчётах его нет

Отчёт по движениям документа (кнопка «Движения документа» в форме)
Норма

Есть строки по ожидаемым регистрам

Тревожный признак

Список пуст — проведение не выполнено или отменено

Журнал документов
Норма

Документ без серой пометки и без креста удаления

Тревожный признак

Серый значок — не проведён, красный крест — помечен на удаление

Дополнительная программная проверка — обращение к набору движений документа и чтение количества записей по нужному регистру. Если проведение прошло без ошибок, но движений нет, вероятно, обработчик проведения в конфигурации не формирует записи при таких условиях (например, пустая табличная часть).

Типичные ошибки при записи документов

Типичные ошибки
01
Запись без проведения: документ есть в журнале, но отсутствует в отчётах и остатках — используйте режим Проведение
02
Изменение реквизитов через ссылку вместо объекта: изменения не сохраняются — получайте объект через ПолучитьОбъект()
03
Игнорирование исключений при массовой записи: один ошибочный документ прерывает всю обработку — оборачивайте Записать() в Попытка/Исключение
04
Запись в закрытом периоде: система отклоняет операцию с ошибкой даты запрета — проверяйте дату документа заранее
05
Заполнение обязательных реквизитов не полностью: проверка заполнения отклоняет запись — заполняйте все поля, отмеченные как обязательные

Отдельная распространённая ситуация — обмен данными. Если документ записывается в режиме загрузки (ОбменДанными.Загрузка = Истина), обработчики проведения и проверки не выполняются. Это осознанный механизм для обменов, но случайная установка этого флага в обычном коде приведёт к тому, что документ сохранится без контроля корректности и без движений.

Выбор способа записи под задачу

Маршрут решения

Как выбрать действие

Нужно разово внести документ вручнуюИспользуйте форму документа и кнопку «Провести и закрыть»
Нужно создать документ автоматически из другой системы или обработкиИспользуйте СоздатьДокумент() с заполнением реквизитов и Записать(РежимЗаписиДокумента.Проведение)
Нужно исправить реквизит без изменения учётных данныхПолучите объект и запишите в режиме Запись, если конфигурация это позволяет
Нужно перепровести партию документовИспользуйте штатную обработку перепроведения или пакетный цикл с обработкой исключений на копии базы

Для интеграций через внешние системы (HTTP-сервисы, файловая загрузка) применяется тот же объектный подход: данные разбираются, создаётся объект документа, выполняется запись с проведением, а результат и ошибки возвращаются вызывающей стороне. Принципиальной разницы с локальной обработкой нет.

Итог

Что важно запомнить

Запись сохраняет документ, проведение формирует учётные движения. В интерфейсе используйте «Провести», в коде — Записать(РежимЗаписиДокумента.Проведение). Перед массовыми операциями делайте копию базы и проверяйте результат по движениям документа.

Частые вопросы

Почему документ записан, но его нет в отчёте?

Отчёты строятся по данным регистров, а движения формируются только при проведении. Откройте документ и нажмите «Провести» либо проверьте свойство Проведен у ссылки. Также убедитесь, что документ не помечен на удаление — помеченные документы исключаются из учёта.

Чем Записать() отличается от Провести в коде?

Отдельного метода «Провести» у объекта документа нет. Проведение выполняется тем же методом Записать() с параметром РежимЗаписиДокумента.Проведение. Без параметра выполняется простая запись без формирования движений.

Можно ли записать документ задним числом?

Можно, если период не закрыт датой запрета редактирования и у пользователя есть права. Учтите, что проведение задним числом может изменить последовательность документов и остатки на дату, поэтому после такой записи часто требуется перепроведение более поздних документов.

Что делать, если при проведении возникает ошибка контроля остатков?

Ошибка означает, что по регистру недостаточно остатка (например, товара на складе). Проверьте остатки на дату документа, корректность склада и наличие более поздних документов, которые могли «съесть» остаток. После исправления данных повторите проведение.

Как записать документ без проверки заполнения?

Штатный безопасный способ — заполнить все обязательные реквизиты. Технически проверки можно обойти установкой ОбменДанными.Загрузка = Истина, но это отключает и все контрольные механизмы, что приводит к некорректным данным. Такой приём допустим только в механизмах обмена.

Нужно ли перепроводить документ после изменения реквизита, не влияющего на учёт?

Если изменён, например, только комментарий, достаточно записи в режиме Запись — движения не изменятся. Если изменены суммы, количество или ключевые реквизиты, документ следует перепровести, чтобы движения соответствовали актуальным данным.