Как настроить автоматическое создание документа «Установка цен номенклатуры» при проведении «Приобретения товаров и услуг» в 1С:УТ 11.4

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

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

Постановка задачи и выбор стратегии

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

Рассмотрим подробнее три основных способа решения этой задачи:

  1. Использование расширения конфигурации (программная доработка).
  2. Применение типового рабочего места «Цены (прайс-лист)» (без программирования).
  3. Настройка регламентного задания для групповой обработки (оптимально для высокой нагрузки).

Решение 1: Автоматизация через расширение конфигурации

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

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

  1. Проверить, включена ли опция автоматической регистрации цен в настройках.
  2. Найти существующий документ установки цен, созданный на основании текущего приобретения.
  3. Если документ найден — пометить его на удаление или очистить, если нет — создать новый.
  4. Заполнить табличную часть документа данными из текущего поступления.
  5. Провести созданный документ.

Пример программной реализации в модуле расширения может выглядеть следующим образом:


&После("ПослеПриПроведении")
Процедура Расш1_ПослеПриПроведении(Отказ, РежимПроведения)
    
    // Предотвращаем рекурсию и проверяем режим проведения
    Если Отказ Или РежимПроведения <> РежимПроведенияДокумента.Оперативный Тогда
        Возврат;
    КонецЕсли;

    // Вызываем серверный метод для создания установки цен
    Расш1_СерверныеВызовы.СоздатьУстановкуЦенНаОсновании(ЭтотОбъект.Ссылка);
    
КонецПроцедуры

В серверном модуле Расш1_СерверныеВызовы мы прописываем основную логику заполнения. Важно использовать типовые механизмы конфигурации, такие как ОбработкаЗаполнения, чтобы правильно инициализировать структуру документа.


Процедура СоздатьУстановкуЦенНаОсновании(ДокументОснование) Экспорт
    
    // Ищем уже существующий документ, чтобы не плодить дубли
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	УстановкаЦенНоменклатуры.Ссылка КАК Ссылка
        |ИЗ
        |	Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
        |ГДЕ
        |	УстановкаЦенНоменклатуры.ДокументОснование = &Основание
        |	И НЕ УстановкаЦенНоменклатуры.ПометкаУдаления";
    
    Запрос.УстановитьПараметр("Основание", ДокументОснование);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        УстановкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    Иначе
        УстановкаОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
        УстановкаОбъект.Дата = ТекущаяДата();
        УстановкаОбъект.ДокументОснование = ДокументОснование;
    КонецЕсли;
    
    // Используем типовой механизм заполнения на основании
    УстановкаОбъект.Заполнить(ДокументОснование);
    
    // Дополнительная настройка вида цен (например, Закупочная)
    // Здесь можно программно отобрать только нужные виды цен
    
    Попытка
        УстановкаОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ЗаписьЖурналаРегистрации("АвтоматическаяУстановкаЦен", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    КонецПопытки;

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

Решение 2: Использование типового функционала «Прайс-лист»

Выясним, всегда ли нужно писать код. В 1С:УТ 11.4 существует мощное рабочее место Цены (прайс-лист), которое находится в разделе CRM и маркетинг. Рассмотрим, как использовать его для массового создания документов установки цен:

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

Этот метод безопаснее, так как позволяет визуально проконтролировать корректность цен (например, если поставщик ошибся или применил разовую скидку, которую не нужно фиксировать как основную цену закупок).

Решение 3: Оптимизация через фоновые задания

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

Более профессиональным подходом будет создание регламентного задания. Разберем по шагам, как это работает:

  1. Создается регистр сведений (или используется дополнительный реквизит документа), где фиксируется факт проведения приобретения, требующего обработки цен.
  2. Раз в 10-15 минут запускается фоновое задание.
  3. Оно собирает все необработанные поступления и создает один или несколько документов Установка цен номенклатуры.

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

Важные нюансы и риски автоматизации

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

1. Цены поставщиков vs Цены компании. Помните, что флаг Регистрировать цены поставщика в документе приобретения заполняет только регистр Цены номенклатуры поставщиков. Для работы внутренних отчетов и расчета розничных цен (наценкой) нужен именно документ Установка цен номенклатуры, который пишет данные в регистр Цены номенклатуры.

2. Порог изменения цены. Рекомендуем добавить в алгоритм проверку «порога существенности». Например, если новая цена отличается от старой менее чем на 0.5%, создавать новый документ установки цен может быть нецелесообразно, чтобы не забивать базу лишними записями из-за копеечных округлений в УПД.

3. Скидки в поступлении. Если поставщик предоставил разовую скидку в документе Приобретение товаров и услуг, автоматика зафиксирует эту заниженную цену как основную закупочную. В дальнейшем это может привести к неверному расчету розничных цен и потере прибыли. Выясним заранее, готовы ли ваши менеджеры контролировать такие случаи вручную.

4. Ошибки ввода. Если оператор ошибся в цене при заведении приобретения, а затем исправил её — автоматика должна уметь «откатывать» или перезаписывать созданные документы установки цен. В нашем примере кода это реализовано через поиск документа-основания.

Заключение

Мы рассмотрели различные подходы к автоматизации регистрации цен в 1С:УТ 11.4. Для небольших компаний с небольшим объемом поступлений вполне подойдет расширение с обработчиком ПослеПриПроведении. Для крупных торговых сетей лучше использовать регламентные задания или штатное рабочее место «Прайс-лист», чтобы сохранить высокую производительность системы и обеспечить качественный контроль входящих цен.

← На главную