В процессе автоматизации ценообразования в 1С:Комплексная автоматизация 2.5 часто возникает задача оптимизации регламентных процессов. Стандартный механизм обновления цен предполагает обработку всей номенклатуры, однако в бизнес-практике нередко требуется рассчитывать цены только для тех товаров, которые фигурируют в определенных документах, зафиксированных, например, в специализированном РегистрСведений. Рассмотрим, как вклиниться в типовой процесс с помощью механизма расширений, не нарушая целостность конфигурации.
Для начала работы разберем структуру регламентного задания. Автоматическое обновление цен запускается процедурой ВыполнитьОбновлениеЦен, которая принимает на вход параметры обновления и массив видов цен. Основная сложность заключается в том, что типовой алгоритм собирает данные для документов УстановкаЦенНоменклатуры, перебирая широкий спектр номенклатурных позиций. Чтобы изменить это поведение, нам необходимо:
РегистрСведений.Для решения задачи мы будем использовать Расширение конфигурации. Это позволяет сохранить возможность обновления типовой конфигурации без потери внесенных изменений. Рекомендуется использовать аннотацию &Вместо для перехвата процедур, отвечающих за сбор номенклатуры, или &После для корректировки результирующих структур данных.
Важно: работа с ценообразованием версии 2.5 требует глубокого понимания того, как система формирует Структура данных для создания документов. Мы не меняем логику расчета, мы лишь ограничиваем ТабличнаяЧасть или массив элементов, передаваемых в процедуру создания документов УстановкаЦенНоменклатуры.
Разберем подробнее, как организовать взаимодействие с пользовательским регистром:
Номенклатура, присутствующей в документах ПриобретениеТоваровУслуг.&Вместо, чтобы подменить стандартный выбор на наш запрос.
// Пример логики в расширении
Процедура ВыполнитьОбновлениеЦен(ВидыЦен, ПараметрыОбновленияЦен)
// Получаем список номенклатуры из нашего регистра
СписокТоваров = ПолучитьСписокНоменклатурыИзРегистра();
// Вызываем типовой метод, но с отфильтрованным списком
ПродолжитьВыполнение(ВидыЦен, ПараметрыОбновленияЦен, СписокТоваров);
КонецПроцедуры
Опытные разработчики часто используют ПодпискиНаСобытия при работе с документами УстановкаЦенНоменклатуры. Это позволяет вклиниться в процесс непосредственно перед записью документа в базу данных. Если регламентное задание уже создало документ, мы можем через подписку на событие ПриЗаписи проверить состав табличной части и удалить лишние строки, если номенклатура не соответствует критериям, заданным в РегистрСведений.
При выполнении данной задачи помните о следующих принципах:
Номенклатура.Данный подход обеспечивает чистоту кода и надежность системы. Помните, что ключ к успеху — в понимании того, что регламентное задание — это лишь триггер, а основной процесс формирования данных спрятан в общих модулях ценообразования. Изучение этих модулей и использование возможностей расширений позволит решить поставленную задачу максимально эффективно.