Как реализовать и настроить свои внешние скидки в 1С:Управление торговлей 11.2?

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

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

Архитектура внешних скидок и условий

Механизм автоматических скидок интегрирован со стандартной подсистемой БСП ДополнительныеОтчетыИОбработки. Для реализации нестандартных алгоритмов предусмотрено два специализированных вида внешних обработок:

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

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

Структура модуля внешней обработки для расчета скидки

Рассмотрим программный интерфейс, который необходимо объявить в модуле объекта внешней обработки для расчета скидки.

1. Функция регистрации в БСП СведенияОВнешнейОбработке() должна возвращать вид обработки РасчетСкидкиНаценки:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.РасчетСкидкиНаценки;
    ПараметрыРегистрации.Наименование = "Расчет индивидуальной скидки";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    ПараметрыРегистрации.Информация = "Пример внешней обработки расчета скидки";

    Возврат ПараметрыРегистрации;

КонецФункции

2. Определение момента применения скидки в функции СпособПрименения():


Функция СпособПрименения() Экспорт

    Возврат Перечисления.СпособыПримененияСкидокНаценок.ПрименитьВМоментРасчетаСкидокНаценок;

КонецФункции

3. Основная процедура расчета Рассчитать():


Функция Рассчитать(СкидкаНаценка, Настройки, Товары, ПараметрыРасчета) Экспорт

    // Таблица "Товары" содержит строки документа продажи
    // Создаем результирующую таблицу скидок на основе переданных строк
    ТаблицаСкидок = СкидкиНаценкиСервер.СоздатьТаблицуСкидок();

    Для Каждого СтрокаТовара Из Товары Цикл
        НоваяСтрока = ТаблицаСкидок.Добавить();
        НоваяСтрока.КлючСтроки = СтрокаТовара.КлючСтроки;
        НоваяСтрока.СкидкаНаценка = СкидкаНаценка;
        
        // Пример простого расчета: 5% от суммы строки
        НоваяСтрока.Сумма = Окр(СтрокаТовара.Сумма * 0.05, 2);
    КонецЦикла;

    Возврат ТаблицаСкидок;

КонецФункции

Структура модуля обработки для проверки условия

Если требуется разработать нестандартное условие (например, проверка суммарного объема закупок клиента за прошлый квартал), используется вид обработки ПроверкаУсловияПредоставленияСкидкиНаценки.

В модуле объекта реализуется экспортная функция ПроверитьУсловие():


Функция ПроверитьУсловие(УсловиеПредоставления, Настройки, ПараметрыРасчета, Товары) Экспорт

    // Проверяем произвольное условие над строками документа или параметрами партнера
    УсловиеВыполнено = Ложь;

    Если Товары.Итог("Сумма") > 50000 Тогда
        УсловиеВыполнено = Истина;
    КонецЕсли;

    Возврат УсловиеВыполнено;

КонецФункции

Работа с пользовательскими настройками скидки

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

Особенности применения в оптовых и розничных продажах

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

  1. Единый расчетный механизм: одинаково обрабатывает как розничные документы (Чек ККМ, Отчет о розничных продажах), так и оптовые (Заказ клиента, Реализация товаров и услуг, Коммерческое предложение).
  2. Различие только в назначении:
    • В оптовой торговле действие скидки назначается в типовых и индивидуальных соглашениях с клиентами, конкретным клиентам, сегментам клиентов или договорам.
    • В розничной торговле скидки назначаются конкретным складам (магазинам) или в рамках маркетинговых акций.

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

Практические рекомендации

  1. Изучение демонстрационной базы: В комплекте поставки и в демонстрационной базе УТ 11.2 присутствуют готовые шаблоны внешних обработок скидок, которые можно использовать в качестве основы для своей разработки.
  2. Безопасный режим: Если алгоритму скидки требуется доступ к сторонним COM-объектам или файловой системе сервера, в карточке подключения обработки необходимо отключить безопасный режим.
  3. Оптимизация: Поскольку расчет скидок вызывается при любых модификациях строк табличной части документа, запросы внутри функции Рассчитать() должны быть максимально оптимизированы во избежание замедления работы пользователей.
← На главную