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

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

При автоматизации процессов в 1С:Управление торговлей 11 (и других конфигурациях, построенных на базе Библиотеки стандартных подсистем — БСП) часто возникает задача программного создания документов. Простой записи реквизитов документа недостаточно: система требует выполнения сложной цепочки расчетов (цены, суммы, НДС, скидки, этапы оплаты), которые в интерфейсе происходят автоматически при изменении данных в форме. Давайте разберем, как правильно реализовать этот процесс, чтобы документ проводился без ошибок.

Основные принципы программного заполнения

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

Ключевой подход заключается в использовании структур действий. Вы формируете Структуру, в которой ключами задаете команды (например, "ЗаполнитьЦенуПродажи", "ПересчитатьСумму"), а значениями передаете параметры, требуемые системой для выполнения данных операций.

Пошаговое заполнение документа

Рассмотрим процесс создания документа по этапам:

  1. Создание документа и заполнение «шапки»: Указываем контрагента, соглашение, склад и валюту. Важно корректно установить ХозяйственнаяОперация и НалогообложениеНДС, так как от них зависят все последующие расчеты.
  2. Заполнение табличной части: В цикле обхода ваших данных добавляем строки в Товары. На этом этапе необходимо заполнить ключевые поля: Номенклатура, Количество, ВидЦены.
  3. Обработка строк: Для каждой добавленной строки вызываем процедуру ОбработатьСтрокуТЧ, передавая структуру действий для расчета цены.
  4. Финализация (расчет сумм): После того как все строки добавлены, вызываем глобальный пересчет документа. Это критический этап, так как именно здесь система рассчитывает итоги по НДС, скидкам и заполняет суммы в валюте взаиморасчетов.

Пример программного кода

Давайте посмотрим, как может выглядеть структура заполнения документа. Этот код иллюстрирует правильную последовательность вызовов:


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

лКэшированныеЗначения = Неопределено;

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

// После заполнения всех строк выполняем пересчет итогов
СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(НовыйДокумент);
// ... формирование структуры действий для финального пересчета ...
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(НовыйДокумент.Товары, СтруктураДействий, Неопределено);

Заполнение графиков оплаты

Многие сталкиваются с тем, что документ не проводится из-за незаполненных данных об оплате. В УТ 11 это критичный момент для подсистемы взаиморасчетов. Вам необходимо не только заполнить реквизит ПорядокОплаты, но и корректно заполнить табличную часть ЭтапыГрафикаОплаты. Если у вас есть соглашение, рекомендуем использовать вызов ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи, чтобы не заполнять этапы вручную, опираясь на логику системы.

Советы по отладке

Поскольку логика пересчетов может меняться в зависимости от релиза платформы 1С, используйте эталонный метод:

Важное замечание: избегайте вызова глобальных пересчетов внутри цикла заполнения. Это не только замедляет работу кода, но и может приводить к ошибкам из-за неполных данных на промежуточных этапах. Сначала заполните всю табличную часть, затем один раз выполните пересчет итогов. Для анализа влияния механизмов БСП на скорость работы при массовой обработке документов пригодится статья об исследовании производительности БСП в УТ 11.4.

← На главную