Программное создание документов в современных конфигурациях, таких как Управление торговлей 11, требует соблюдения строгой логики заполнения данных. Простого добавления строк в табличную часть Товары зачастую недостаточно, так как архитектура документа опирается на дополнительные табличные части и статусы. Давайте разберем по шагам, как решить проблему, когда созданный программно документ не проводит цены или оставляет их пустыми.
При работе с документом УстановкаЦенНоменклатуры в УТ 11 необходимо учитывать несколько архитектурных особенностей:
ВидыЦен: В этой конфигурации документ имеет отдельную табличную часть для видов цен. Если она не заполнена, система не понимает, для каких именно видов цен производится установка, и не формирует движения по регистрам сведений.УТ 11 активно использует перечисление СтатусыУстановокЦенНоменклатуры. Документ в статусе, отличном от Согласован, может не выполнять запись цен в регистры.Рассмотрим, как правильно сформировать документ, чтобы все данные были корректно обработаны системой. Мы будем использовать объект ДокументОбъект.УстановкаЦенНоменклатуры.
// Создаем новый документ
Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Ответственный = Пользователи.ТекущийПользователь();
// Устанавливаем статус, необходимый для проведения
Док.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
// Заполняем табличную часть ВидыЦен (критически важно для УТ 11!)
СтрокаВидЦены = Док.ВидыЦен.Добавить();
СтрокаВидЦены.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Основная цена").Ссылка;
// Заполняем товары
Для Каждого СтрокаТЗ из ТЗ Цикл
НоваяЦена = Док.Товары.Добавить();
НоваяЦена.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", СтрокаТЗ.Артикул).Ссылка;
НоваяЦена.ВидЦены = СтрокаВидЦены.ВидЦены; // Должен совпадать с ТЧ ВидыЦен
НоваяЦена.Цена = СтрокаТЗ.Цена;
// Устанавливаем признак ручного ввода
НоваяЦена.ЦенаИзмененаВручную = Истина;
КонецЦикла;
// Записываем документ
Док.Записать(РежимЗаписиДокумента.Проведение);
При работе с большими объемами данных важно следить за производительностью. Рассмотрим несколько полезных советов:
Док.Товары.Свернуть(...). Это исключит дублирование записей, если в исходной таблице значений один и тот же товар встречается несколько раз с одним и тем же видом цены.НайтиПоРеквизиту возвращает пустую ссылку, документ может быть записан с ошибками или не проведен.Записать с режимом проведения вызывает пересчет регистров.Если после выполнения вышеуказанных действий документ все равно не проводит цены, проверьте, не включена ли в вашей конфигурации дополнительная логика согласования или проверки заполнения реквизитов (например, Организация или Валюта), которые могут быть обязательными в конкретной настройке УТ 11.
Анализируя ситуацию, важно понимать, что УстановкаЦенНоменклатуры — это не просто запись в справочник, а сложный механизм, поэтому внимательное заполнение всех табличных частей является залогом успешной работы вашего алгоритма.