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

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

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

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

Архитектурное отличие УТ 11 от УТ 10.3: куда исчезли динамические цены?

Для начала проанализируем ситуацию и выясним причину такого поведения программы. В редакции 10.3 существовало понятие «Динамический тип цен». Такие цены рассчитывались буквально «на лету» в момент подбора товаров в документы или при формировании отчетов. Система обращалась к базовой цене (например, цене поставщика), применяла наценку и выводила результат без физической записи в базу данных.

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

  1. Динамических цен больше нет. Любая цена, используемая при продаже или планировании (включая закупочную, оптовую или розничную), должна быть физически записана в регистр сведений ЦеныНоменклатуры.
  2. Необходим документ-регистратор. Запись в этот регистр может быть произведена только специализированным документом — УстановкаЦенНоменклатуры. Проведение документа закупки ПриобретениеТоваровУслуг (даже с включенным флагом «Регистрировать цены поставщика») делает записи только в регистр цен поставщиков, но никак не влияет на ваши внутренние цены номенклатуры.

Таким образом, чтобы обновить ваши закупочные цены, система обязательно должна создать и провести документ УстановкаЦенНоменклатуры.

Шаг 1. Правильная настройка вида цен «Закупочная»

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

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

Шаг 2. Штатный способ массового обновления через «Прайс-лист»

Если документов поступления в течение дня оформляется много, ручной ввод на основании каждого поступления (команда «Создать на основании» — «Установка цен номенклатуры») становится трудоемким процессом. Рассмотрим более удобный штатный способ массового расчета цен без программирования:

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

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

Шаг 3. Полная автоматизация с помощью регламентного задания

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

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


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

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

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

← На главную