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

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

В практике разработчика 1С часто возникает задача автоматизации создания документов. Одной из самых востребованных операций является программное формирование документа «Реализация товаров и услуг». Это необходимо при интеграции с внешними системами, массовом оформлении продаж по выгрузкам Excel или CSV или при создании документов на основании других объектов. В этой статье мы подробно разберем, как реализовать этот процесс правильно, соблюдая логику типовых конфигураций (таких как УТ 11, ERP 2.0 или КА 2).

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

Первым делом нам необходимо создать новый экземпляр объекта документа. Для этого мы обращаемся к менеджеру документа РеализацияТоваровУслуг. Проанализируем, как это выглядит в коде:


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

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

Шаг 2: Заполнение основных реквизитов («Шапки») документа

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

Выясним, как правильно заполнить эти данные, используя поиск ссылок в базе:


НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша организация");
НовыйДокумент.Партнер = Справочники.Партнеры.НайтиПоНаименованию("Клиент ООО");
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Клиент ООО");
НовыйДокумент.Склад = Справочники.Склады.НайтиПоКоду("00001");

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

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

Шаг 3: Заполнение табличной части «Товары»

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


НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоАртикулу("ART-100");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 1500;
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;

// Автоматический расчет суммы
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

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

Шаг 4: Использование типовых обработчиков заполнения

Чтобы документ вел себя «как родной», желательно вызвать процедуру ЗаполнитьЗначенияСвойств или специализированные методы инициализации. В многих конфигурациях существует метод ОбработкаЗаполнения(), который можно вызвать программно, передав в него основание (например, Заказ клиента).

Проанализируем пример использования метода Заполнить():


Основание = Документы.ЗаказКлиента.НайтиПоНомеру("ЗК-001");
НовыйДокумент.Заполнить(Основание);

При таком подходе система сама перенесет товары, цены, скидки и настройки налогообложения из заказа в реализацию. Это наиболее безопасный способ программного создания объектов. На базе заказов также можно реализовать создание чеков ККМ и чеков коррекции или настроить пакетное создание возвратов от клиента на основании заявок, что значительно ускоряет работу оператора.

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

После того как все данные заполнены, документ необходимо сохранить в базе данных. Существует три режима записи:

  1. Запись — просто сохраняет объект без проверки итогов и формирования проводок.
  2. Проведение — выполняет проверки и формирует движения в регистрах накопления и бухгалтерии.
  3. Отмена проведения — снимает движения документа.

Разберем, как правильно оформить финализацию создания документа с обработкой возможных ошибок:


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

Использование конструкции Попытка...Исключение критически важно. Проведение может не выполниться из-за отсутствия остатков на складе или не заполненных аналитик. Если возникают проблемы с распределением товаров, можно применить автоматическое исправление видов запасов по данным регистров остатков, чтобы привести документ в соответствие с учетными данными.

Практические советы по оптимизации

Разберем несколько важных моментов, которые помогут сделать ваш код более профессиональным:

  1. Использование транзакций: Если вы создаете несколько связанных документов, оберните их в одну транзакцию. Это актуально, если планируется пакетное создание актов выполненных работ или других связанных цепочек документов.
  2. Поиск объектов: Избегайте поиска ссылок по наименованию (НайтиПоНаименованию) внутри циклов. Лучше заранее подготовить соответствие или кэш ссылок, чтобы не нагружать базу данных лишними запросами.
  3. Проверка на пустые ссылки: Перед присвоением значения реквизиту (например, Номенклатура), убедитесь, что объект найден.

Выясним причину, почему документ может не проводиться даже при заполненных данных. Часто это связано с параметрами указания серий или характеристик. Если в программе ведется учет по характеристикам, поле Характеристика в табличной части становится обязательным для заполнения, иначе проведение будет отклонено системой контроля остатков.

Таким образом, мы рассмотрели полный цикл программного создания документа «Реализация товаров и услуг». Следуя этой структуре, вы сможете автоматизировать складской и торговый учет в любой конфигурации на платформе 1С:Предприятие 8.3.

← На главную