Как настроить автоматическую установку цен номенклатуры из документов поступления

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

В процессе работы с конфигурацией «1С:Управление торговлей 11.4» (и аналогичными решениями на этой базе, такими как ERP или Комплексная автоматизация) пользователи часто сталкиваются с необходимостью оперативного обновления цен продажи сразу после оформления закупки. Ручное создание документа Установка цен номенклатуры для каждой накладной отнимает много времени, особенно если поток документов исчисляется сотнями.

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

Способ 1. Настройка автоматического расчета через «Виды цен»

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

  1. Перейдем в раздел CRM и маркетинг — Настройки и справочники — Виды цен.
  2. Создадим новый вид цены (например, «Розничная») или откроем существующий.
  3. В поле «Способ задания цены» выберем «Наценка на другой вид цен» или «Произвольная формула от других видов цен».
  4. В качестве базового вида цены укажем «Цена поступления» (это предопределенный вид цен, который подтягивает данные из документов закупки).
  5. Важный момент: Нажмем на гиперссылку «Использовать расширенные возможности». В появившихся настройках установим флаг «При изменении базовых цен» в блоке правил обновления.

При такой настройке система будет «понимать», что при изменении входящей цены поставщика ваша розничная цена также требует актуализации. Однако стоит учитывать, что сам физический документ Установка цен номенклатуры может не создаваться мгновенно в момент проведения накладной — система скорее подготовит данные для актуализации при обращении к ценам.

Способ 2. Регистрация цен поставщика как обязательное условие

Выясним причину, по которой автоматика может не срабатывать. Чтобы любые формулы, зависящие от закупки, работали корректно, система должна «увидеть» новую входящую цену. Для этого в документе Приобретение товаров и услуг на вкладке «Дополнительно» обязательно должен быть установлен флаг «Регистрировать цены поставщика по документу».

Если этот флаг не установлен, данные не попадут в регистр сведений Цены номенклатуры поставщиков, и база для расчета ваших продажных цен не обновится. Рассмотрим вариант массовой установки: если у вас уже есть 300 проведенных документов без этой галочки, их придется перепровести с включенным флагом (например, через групповое изменение реквизитов).

Способ 3. Массовая установка цен по нескольким поступлениям

Проанализируем ситуацию, описанную в сообщениях форума: что делать, если нужно обработать сразу 300 документов поступления? Создавать 300 документов установки цен вручную неэффективно. Вместо этого воспользуемся рабочим местом «Цены номенклатуры»:

  1. Зайдем в CRM и маркетинг — Цены номенклатуры.
  2. Нажмем кнопку «Сформировать».
  3. В появившемся окне перейдем на вкладку «Настройки» и выберем нужные виды цен.
  4. Нажмем «Изменить цены» — «Установить по данным информационной базы».
  5. В схеме компоновки данных выберем «Цены поступления». Система предложит выбрать документы или период.
  6. Выберем все 300 документов поступления. Программа автоматически соберет всю номенклатуру, рассчитает новые цены согласно вашим правилам и создаст один общий документ Установка цен номенклатуры.

Способ 4. Программная автоматизация через расширение (для программистов)

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

Разберем пример кода, который можно разместить в модуле расширения, создав подписку на событие ОбработкаПроведения документа ПриобретениеТоваровУслуг:


&После("ОбработкаПроведения")
Процедура ПриобретениеТоваровУслуг_ПослеОбработкиПроведения(Источник, Отказ, РежимПроведения)
    
    // Если документ проведен и нет отказа
    Если Отказ ИЛИ РежимПроведения <> РежимПроведенияДанныхФормы.Проведение Тогда
        Возврат;
    КонецЕсли;

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

    // Переносим товары из поступления
    Для Каждого СтрокаТовара Из Источник.Товары Цикл
        НоваяСтрока = УстановкаЦен.Товары.Добавить();
        НоваяСтрока.Номенклатура = СтрокаТовара.Номенклатура;
        НоваяСтрока.Характеристика = СтрокаТовара.Характеристика;
        
        // Здесь должна быть логика расчета цены (например, +20% к цене поступления)
        НоваяСтрока.Цена = СтрокаТовара.Цена * 1.2; 
    КонецЦикла;

    Попытка
        УстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ЗаписьЖурналаРегистрации("АвтоУстановкаЦен", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Важные замечания к программному коду:

Нюансы работы с характеристиками и упаковками

Проанализируем типовую ошибку: часто при автоматизации забывают, что цена в 1С привязывается к единице хранения. Если в документе Приобретение товаров и услуг указана цена за упаковку (например, 10 шт. в коробке), то при автоматическом создании документа Установка цен номенклатуры программный код или штатный механизм должен разделить эту цену на количество в упаковке. Типовое рабочее место «Цены номенклатуры» делает это корректно, а при написании собственного кода об этом нужно позаботиться отдельно, используя реквизиты Коэффициент объекта Упаковка.

Таким образом, мы рассмотрели все основные варианты решения задачи. Для небольших магазинов оптимально использовать Способ 1 с динамическими формулами. Для крупных оптовых компаний с периодическими закупками лучше подходит Способ 3 (массовая обработка). А программный Способ 4 стоит внедрять только тогда, когда штатных инструментов недостаточно для реализации специфики бизнеса.

← На главную