Как правильно программно создать и провести документ Установка цен номенклатуры в 1С:УТ 11?

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

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

Основные причины отсутствия цен в документе

При работе с документом УстановкаЦенНоменклатуры в УТ 11 необходимо учитывать несколько архитектурных особенностей:

  1. Заполнение табличной части ВидыЦен: В этой конфигурации документ имеет отдельную табличную часть для видов цен. Если она не заполнена, система не понимает, для каких именно видов цен производится установка, и не формирует движения по регистрам сведений.
  2. Установка статуса документа: В отличие от старых версий, УТ 11 активно использует перечисление СтатусыУстановокЦенНоменклатуры. Документ в статусе, отличном от Согласован, может не выполнять запись цен в регистры.
  3. Флаг ручного изменения: Чтобы цена корректно записалась и не была пересчитана типовыми алгоритмами при записи, необходимо явно указывать, что цена была изменена вручную.

Пример корректного алгоритма создания документа

Рассмотрим, как правильно сформировать документ, чтобы все данные были корректно обработаны системой. Мы будем использовать объект ДокументОбъект.УстановкаЦенНоменклатуры.


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

// Устанавливаем статус, необходимый для проведения
Док.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;

// Заполняем табличную часть ВидыЦен (критически важно для УТ 11!)
СтрокаВидЦены = Док.ВидыЦен.Добавить();
СтрокаВидЦены.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Основная цена").Ссылка;

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

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

Рекомендации по оптимизации

При работе с большими объемами данных важно следить за производительностью. Рассмотрим несколько полезных советов:

Если после выполнения вышеуказанных действий документ все равно не проводит цены, проверьте, не включена ли в вашей конфигурации дополнительная логика согласования или проверки заполнения реквизитов (например, Организация или Валюта), которые могут быть обязательными в конкретной настройке УТ 11.

Анализируя ситуацию, важно понимать, что УстановкаЦенНоменклатуры — это не просто запись в справочник, а сложный механизм, поэтому внимательное заполнение всех табличных частей является залогом успешной работы вашего алгоритма.

← На главную