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

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

Программное создание документа Установка цен номенклатуры в современных конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация 2, существенно отличается от аналогичной задачи в старых версиях (например, УТ 10.3), что особенно заметно при сквозном переносе истории цен между конфигурациями. Основная сложность заключается в изменении структуры метаданных и логики хранения цен. Теперь цены хранятся в разрезе видов цен, а сам документ имеет специфические табличные части, которые должны быть заполнены строго определенным образом для корректного проведения и отражения в регистре сведения ЦеныНоменклатуры — для предотвращения дублирования записей пригодится обработка удаления дублей в регистрах цен для УТ, КА, ERP.

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

Понимание структуры документа и объектной модели

Прежде чем приступать к написанию кода, выясним причину сложности. В УТ 11 документ УстановкаЦенНоменклатуры выступает в роли регистратора для регистра сведений ЦеныНоменклатуры. Основные данные распределены по нескольким табличным частям:

  1. ВидыЦен — здесь указывается список всех видов цен (колонок), которые мы планируем установить данным документом.
  2. Товары — основная таблица, содержащая номенклатуру, характеристики и значения цен.
  3. НаборыЗначенийДоступа — служебная таблица для разграничения прав доступа (заполняется автоматически при проведении).

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

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

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


НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
НовыйДокумент.Ответственный = Пользователи.ТекущийПользователь();
НовыйДокумент.Комментарий = "Создано программно из внешней обработки " + ТекущаяДата();

Обратите внимание, что использование ТекущаяДата() подходит для оперативного ввода, но если вы загружаете исторические данные, следует передавать дату из источника.

Шаг 2: Заполнение видов цен

Разберем, как добавить виды цен. Это критически важный этап: если вид цены не будет добавлен в таблицу ВидыЦен, то значения в основной таблице Товары для этого вида цены будут проигнорированы системой.


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

НоваяСтрокаВид = НовыйДокумент.ВидыЦен.Добавить();
НоваяСтрокаВид.ВидЦены = СсылкаНаВидЦены;

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

Шаг 3: Заполнение товарного состава и цен

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


// Пример заполнения строки товара
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = СсылкаНаНоменклатуру;
НоваяСтрока.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
НоваяСтрока.ВидЦены = СсылкаНаВидЦены;
НоваяСтрока.Цена = 1500; // Ваша цена
НоваяСтрока.Валюта = СсылкаНаВидЦены.ВалютаЦены; // Обычно берется из настроек вида цены

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

Шаг 4: Особенности работы с характеристиками

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


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

Шаг 5: Проведение документа

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


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

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

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

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

Проанализировав ситуацию, можно сделать вывод, что программное управление ценами в 1С 8.3 — это гибкий инструмент, требующий однако четкого понимания структуры метаданных. Следуя приведенным шагам, вы сможете автоматизировать процесс обновления прайс-листов, например, используя готовые решения для загрузки из Excel, настроить интеграцию с интернет-магазинами или устанавливать цены на основании документов поступления — для этого подойдёт обработка установки цен по документам поступления.

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

← На главную