Как программно создать и заполнить документ Реализация товаров и услуг в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

В процессе разработки и автоматизации бизнес-процессов в системе 1С:Предприятие часто возникает необходимость программного формирования документов. Одной из самых востребованных операций является создание документа РеализацияТоваровУслуг. В рамках данной статьи мы подробно разберем, как правильно инициализировать объект документа, заполнить основные реквизиты шапки и данные в табличной части, а также выполнить процедуру проведения с проверкой на ошибки.

Инициализация нового объекта документа

Для начала работы нам необходимо создать новый экземпляр документа. Мы используем менеджер документа для вызова метода СоздатьДокумент(). Проанализируем базовый алгоритм начала работы с новым объектом:


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

Важно помнить, что метод УстановитьНовыйНомер() следует вызывать только в том случае, если вам необходимо получить номер до момента записи документа. В противном случае платформа 1С присвоит номер автоматически при вызове метода Записать().

Заполнение реквизитов шапки документа

Рассмотрим подробнее заполнение ключевых полей, таких как Организация, Контрагент, Договор и Склад. При заполнении программно важно учитывать, что значениями должны выступать ссылки на соответствующие справочники. Разберем пример кода:


НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
НовыйДокумент.Контрагент  = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7701234567");
НовыйДокумент.Договор     = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор", Ложь, , НовыйДокумент.Контрагент);
НовыйДокумент.Склад       = Справочники.Склады.НайтиПоНаименованию("Основной склад");
НовыйДокумент.ВалютаДокумента = Константы.ВалютаРегламентированногоУчета.Получить();

Совет: Всегда проверяйте заполненность ссылочных полей. Если объект не будет найден (метод вернет ПустаяСсылка), документ может не провестись из-за нехватки данных для формирования движений по регистрам.

Работа с табличной частью Товары

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


// Добавляем новую строку в табличную часть
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00001");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 1500;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

// Заполнение параметров учета (Ставка НДС, Единица измерения)
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * 20 / 120; // Пример расчета НДС сверху

Выясним причину, по которой иногда данные в табличной части не соответствуют ожиданиям. Часто это связано с тем, что не вызываются обработчики изменения реквизитов, которые обычно срабатывают в форме. При программном заполнении всю логику пересчета сумм и налогов программист должен реализовать самостоятельно или вызвать соответствующие процедуры из общих модулей, если это предусмотрено конфигурацией (например, функции из модуля ОбработкаТабличныхЧастей в УПП или ERP).

Автоматический пересчет сумм в документах ERP и КА

В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) существуют механизмы автоматического заполнения. Разберем по шагам, как можно упростить процесс с помощью вызова процедур пересчета:

  1. Заполните основную номенклатуру и количество.
  2. Используйте метод ЗаполнитьЗначенияСвойств для копирования данных из цен номенклатуры.
  3. Вызовите экспортную процедуру пересчета сумм из модуля менеджера или объекта документа (если она доступна), предварительно выполнив анализ конфигурации на наличие ошибок.

Запись и проведение документа

Финальным этапом является запись документа в базу данных. В 1С существует несколько режимов записи. Рассмотрим два основных:

1. Запись без проведения: используется, если документ нужно просто сохранить как черновик.


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

2. Запись с проведением: система попытается создать движения по регистрам бухгалтерии и накопления.


Попытка
    НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("Документ успешно проведен: " + НовыйДокумент.Ссылка);
Исключение
    Инфо = ИнформацияОбОшибке();
    Сообщить("Ошибка при проведении: " + Инфо.Описание);
КонецПопытки;

Использование конструкции Попытка ... Исключение крайне важно, так как при проведении могут возникнуть блокировки, нехватка остатков на складах или ошибки прав доступа. Без обработки исключений выполнение всего кода (например, в регламентном задании) будет прервано критической ошибкой.

Дополнительные проверки и рекомендации

Проанализируем еще несколько важных аспектов. При программном создании документа в 1С:ERP или 1С:Комплексная автоматизация, обязательно учитывайте настройки Хозяйственной операции. Это поле определяет, какие проводки сформирует документ.

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

Таким образом, мы рассмотрели полный цикл программного создания документа Реализация товаров и услуг. Мы научились создавать объект, заполнять его шапку и табличные части, а также безопасно проводить его в информационной базе. Следуя этой структуре, вы сможете автоматизировать загрузку данных из внешних систем или создавать документы на основании других объектов системы.

← На главную