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

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

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

Понимание архитектуры системы

В 1С:УТ 11 нет единого справочника «Прайс-лист». Цены номенклатуры — это данные, которые хранятся в Регистре сведений «Цены номенклатуры». Однако обращаться напрямую к регистру записи крайне не рекомендуется. Почему? Потому что система требует выполнения сложной логики: проверки видов цен, пересчета зависимых цен (наценок), соблюдения статусов и контроля корректности данных.

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

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

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

Сначала нам нужно создать объект документа:


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

Заполнение табличных частей

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

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


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

Завершение работы с документом

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

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

  1. Не создавайте документ на каждую строку. Если в вашем Excel-файле тысячи строк, правильнее сформировать один или несколько крупных документов. Это существенно ускорит процесс загрузки.
  2. Используйте фоновое создание. Если вы пишете обработку, старайтесь выносить логику создания документа в серверные процедуры. Это позволит системе корректно обрабатывать транзакции.
  3. Анализируйте типовой код. Чтобы глубже понять логику, откройте в Конфигураторе модуль объекта Документ.УстановкаЦенНоменклатуры и изучите процедуру ОбработкаПроведения. Это даст вам лучшее представление о том, как система обрабатывает цены.

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

← На главную