В процессе разработки и автоматизации бизнес-процессов в системе 1С:Предприятие часто возникает необходимость программного формирования документов. Одной из самых востребованных операций является создание документа РеализацияТоваровУслуг. В рамках данной статьи мы подробно разберем, как правильно инициализировать объект документа, заполнить основные реквизиты шапки и данные в табличной части, а также выполнить процедуру проведения с проверкой на ошибки.
Для начала работы нам необходимо создать новый экземпляр документа. Мы используем менеджер документа для вызова метода СоздатьДокумент(). Проанализируем базовый алгоритм начала работы с новым объектом:
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.УстановитьНовыйНомер();
Важно помнить, что метод УстановитьНовыйНомер() следует вызывать только в том случае, если вам необходимо получить номер до момента записи документа. В противном случае платформа 1С присвоит номер автоматически при вызове метода Записать().
Рассмотрим подробнее заполнение ключевых полей, таких как Организация, Контрагент, Договор и Склад. При заполнении программно важно учитывать, что значениями должны выступать ссылки на соответствующие справочники. Разберем пример кода:
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7701234567");
НовыйДокумент.Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор", Ложь, , НовыйДокумент.Контрагент);
НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
НовыйДокумент.ВалютаДокумента = Константы.ВалютаРегламентированногоУчета.Получить();
Совет: Всегда проверяйте заполненность ссылочных полей. Если объект не будет найден (метод вернет ПустаяСсылка), документ может не провестись из-за нехватки данных для формирования движений по регистрам.
Теперь проанализируем ситуацию, когда нам нужно добавить строки в табличную часть Товары. Процесс состоит из обхода коллекции строк (например, из массива или таблицы значений) и заполнения каждой колонки. Посмотрим на практический пример:
// Добавляем новую строку в табличную часть
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00001");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 1500;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
// Заполнение параметров учета (Ставка НДС, Единица измерения)
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * 20 / 120; // Пример расчета НДС сверху
Выясним причину, по которой иногда данные в табличной части не соответствуют ожиданиям. Часто это связано с тем, что не вызываются обработчики изменения реквизитов, которые обычно срабатывают в форме. При программном заполнении всю логику пересчета сумм и налогов программист должен реализовать самостоятельно или вызвать соответствующие процедуры из общих модулей, если это предусмотрено конфигурацией (например, функции из модуля ОбработкаТабличныхЧастей в УПП или ERP).
В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) существуют механизмы автоматического заполнения. Разберем по шагам, как можно упростить процесс с помощью вызова процедур пересчета:
ЗаполнитьЗначенияСвойств для копирования данных из цен номенклатуры.Финальным этапом является запись документа в базу данных. В 1С существует несколько режимов записи. Рассмотрим два основных:
1. Запись без проведения: используется, если документ нужно просто сохранить как черновик.
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
2. Запись с проведением: система попытается создать движения по регистрам бухгалтерии и накопления.
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ успешно проведен: " + НовыйДокумент.Ссылка);
Исключение
Инфо = ИнформацияОбОшибке();
Сообщить("Ошибка при проведении: " + Инфо.Описание);
КонецПопытки;
Использование конструкции Попытка ... Исключение крайне важно, так как при проведении могут возникнуть блокировки, нехватка остатков на складах или ошибки прав доступа. Без обработки исключений выполнение всего кода (например, в регламентном задании) будет прервано критической ошибкой.
Проанализируем еще несколько важных аспектов. При программном создании документа в 1С:ERP или 1С:Комплексная автоматизация, обязательно учитывайте настройки Хозяйственной операции. Это поле определяет, какие проводки сформирует документ.
Также рекомендуется проверять актуальность итогов. В некоторых случаях может потребоваться исправление ключей аналитики учета номенклатуры и видов запасов. После программного создания большого количества документов может потребоваться процедура пересчета итогов, хотя современная платформа 8.3 делает это в большинстве случаев автоматически.
Таким образом, мы рассмотрели полный цикл программного создания документа Реализация товаров и услуг. Мы научились создавать объект, заполнять его шапку и табличные части, а также безопасно проводить его в информационной базе. Следуя этой структуре, вы сможете автоматизировать загрузку данных из внешних систем или создавать документы на основании других объектов системы.