Как настроить расчет скидок в 1С:Рознице 3.0 и 1С:УНФ 3.0 после перехода от внешних обработок к расширениям?

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

При переходе на новые версии программных продуктов фирмы «1С», таких как 1С:Розница 3.0 и 1С:УНФ 3.0, многие пользователи сталкиваются с изменением привычных механизмов работы. Одним из таких существенных изменений является подход к расчету скидок и наценок. Если в предыдущих версиях, например, в 1С:Рознице 2.3, мы активно использовали дополнительные внешние обработки для реализации произвольных алгоритмов скидок, то в версиях 3.0 этот механизм претерпел кардинальные изменения. При попытке добавить старую обработку в новую конфигурацию, мы получаем ошибку: "невозможно подключить дополнительную обработку из файла возможно она не подходит метод не обнаружен ПараметрыРегистрацииВнешнейОбработкиСкидкиНаценки". Эта ошибка является прямым указанием на то, что прежний подход больше не актуален.

Суть проблемы: изменение архитектуры расчета скидок

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

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

Новый подход: использование расширений для расчета скидок

Вместо внешних обработок, которые были отдельными файлами с кодом, теперь для настройки сложных условий скидок необходимо использовать расширения конфигурации. Фирма «1С» предусмотрела такую возможность и реализовала ее по аналогии с расширениями для расчета цен и показателей «Анализа бизнеса». Это позволяет нам, программистам и продвинутым пользователям, создавать собственные алгоритмы скидок, интегрируя их непосредственно в логику программы, не снимая конфигурацию с поддержки.

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

Пошаговая настройка скидок с использованием расширений

1. Подготовка и получение каркасного расширения

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

Для получения каркасного расширения, предназначенного для скидок, мы можем воспользоваться встроенной функциональностью программы. В версиях 1С:Розницы 3.0.5 и 1С:УНФ 3.0.5 и выше, при создании новой автоматической скидки появляется возможность выбора ее типа. Один из вариантов – это использование расширения. При выборе такого типа система предложит нам скачать шаблон расширения, который уже содержит необходимую структуру для реализации алгоритмов скидок.

Если мы предпочитаем работать с нуля или уже имеем опыт разработки расширений, мы можем создать пустое расширение в режиме «Конфигуратор» и самостоятельно реализовать требуемые методы.

2. Доработка расширения в «Конфигураторе»

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

  1. Определение условий скидки: Мы должны запрограммировать условия, при которых скидка будет активироваться. Например, скидка может зависеть от:
    • Покупки определенного количества товаров.
    • Достижения определенной суммы в чеке.
    • Принадлежности товаров к конкретной категории, бренду или ценовой группе.
    • Наличия у покупателя определенной карты лояльности или статуса, а также настроенное начисление бонусов за вид оплаты.
    • Времени суток или дня недели.

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

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

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


// Примерный код в модуле расширения для расчета скидки
// Обычно такая процедура вызывается системой при определении скидок
// и получает параметры текущего расчета.
// (Эта процедура является каркасом, ее фактическое название и параметры
// могут отличаться в зависимости от версии конфигурации и платформы).

Процедура ОпределитьПользовательскиеСкидки(ПараметрыРасчетаСкидки) Экспорт
    // ПараметрыРасчетаСкидки - это структура, которая содержит всю
    // необходимую информацию о текущем документе (чек, заказ),
    // табличной части с товарами, клиенте, уже рассчитанных скидках и т.д.
    // А также позволяет добавлять новые скидки.

    // Пример: Предоставление дополнительной скидки 5% на все товары,
    // если клиент является VIP и сумма документа превышает 10000 руб.

    // 1. Получаем необходимые данные из ПараметрыРасчетаСкидки
    ПеременнаяСуммаДокумента = ПараметрыРасчетаСкидки.СуммаПоДокументуБезСкидок;
    ПеременнаяКлиент = ПараметрыРасчетаСкидки.Клиент; // Предполагается наличие поля Клиент

    Если ПеременнаяКлиент.ЭтоГруппаVIPКлиентов И ПеременнаяСуммаДокумента > 10000 Тогда

        // 2. Создаем объект новой скидки через метод ПараметрыРасчетаСкидки
        НоваяПользовательскаяСкидка = ПараметрыРасчетаСкидки.ДобавитьСкидку();

        // 3. Устанавливаем параметры новой скидки
        НоваяПользовательскаяСкидка.Наименование = "VIP-скидка по расширению";
        НоваяПользовательскаяСкидка.Процент = 5;
        НоваяПользовательскаяСкидка.ТипПрименения = "НаВесьДокумент"; // Применяем на весь документ
        НоваяПользовательскаяСкидка.Приоритет = 100; // Устанавливаем высокий приоритет
        НоваяПользовательскаяСкидка.Комментарий = "Дополнительная скидка для VIP-клиентов";

        // Если нужно применить к конкретным строкам:
        // Для Каждого СтрокаТЧ Из ПараметрыРасчетаСкидки.ТабличнаяЧасть Цикл
        //    Если СтрокаТЧ.Номенклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("00001") Тогда
        //        НоваяПользовательскаяСкидка.ТипПрименения = "НастроитьДляСтроки";
        //        НоваяПользовательскаяСкидка.СтрокаТабличнойЧасти = СтрокаТЧ;
        //        // Здесь же можно указать количество, на которое действует скидка в этой строке
        //        // НоваяПользовательскаяСкидка.Количество = СтрокаТЧ.Количество;
        //        Прервать; // Применяем только на первую подходящую строку для примера
        //    КонецЕсли;
        // КонецЦикла;

    КонецЕсли;

    // Мы также можем модифицировать или отменять типовые скидки,
    // которые уже были рассчитаны до вызова нашего расширения.
    // Например, если расширение должно отменить все скидки, кроме своих:
    // Для Каждого Скидка Из ПараметрыРасчетаСкидки.Скидки Цикл
    //    Если Не Скидка.Наименование = "VIP-скидка по расширению" Тогда
    //        Скидка.Отменить = Истина;
    //    КонецЕсли;
    // КонецЦикла;

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

Для корректной работы с такими процедурами нам следует обращаться к официальной документации на сайте ИТС, где подробно описаны API для разработки расширений в контексте различных подсистем, включая расчет скидок.

3. Подключение расширения к информационной базе

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

  1. Через режим предприятия:
    • Перейдите в раздел «Настройки» в главном меню программы.
    • Выберите пункт «Печатные формы, отчеты и обработки».
    • Перейдите в подраздел «Расширения».
    • Нажмите кнопку «Добавить из файла...» и выберите файл расширения (обычно имеет расширение .cfe или .cfa), который мы сохранили из «Конфигуратора».
    • После успешного добавления расширения, система запросит перезапуск программы, чтобы изменения вступили в силу. Важно убедиться, что для расширения установлен или снят флаг «Безопасный режим» в зависимости от требований расширения (например, если оно обращается к внешним ресурсам, возможно, потребуется снять безопасный режим, но это должно быть обосновано и осознанно).
  2. Через конфигуратор:
    • Откройте информационную базу в режиме «Конфигуратор».
    • В меню «Конфигурация» выберите пункт «Расширения конфигурации».
    • Добавьте новое расширение или загрузите существующее из файла.
    • После добавления и настройки (при необходимости), сохраните конфигурацию базы данных (F7 или «Обновить конфигурацию базы данных»).

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

Гибкость автоматических скидок в 1С:Рознице 3.0 и 1С:УНФ 3.0

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

Давайте рассмотрим подробнее возможности настройки автоматических скидок:

  1. Условия предоставления скидки: Мы можем установить разнообразные условия для активации скидки:
    • По сумме покупки: Скидка срабатывает, если общая сумма чека превышает установленный порог.
    • По количеству товаров: Скидка применяется при покупке заданного количества единиц одного или нескольких товаров, включая автоматические скидки для наборов в УНФ.
    • По категориям или ценовым группам: Скидка действует только на товары, принадлежащие к определенной категории или входящие в конкретную ценовую группу.
    • По расписанию: Мы можем настроить активацию скидки только в определенные дни недели, часы или праздничные дни.
    • За разовый объем продаж: Условие, ориентированное на общий объем продаж в рамках одной торговой операции.
    • Сложные комбинированные условия: Типовой механизм позволяет комбинировать несколько условий для создания более тонких правил.
  2. Способ предоставления скидки: Мы определяем, как будет рассчитываться размер скидки:
    • Процент: Скидка рассчитывается как определенный процент от суммы или стоимости товара.
    • Сумма: Предоставляется фиксированная сумма скидки, которая уменьшает итоговую сумму чека или стоимость товара.
  3. Правила совместного применения нескольких скидок: В случае, если на один и тот же товар или чек могут одновременно действовать несколько скидок, система предоставляет нам гибкие правила их взаимодействия:
    • Минимум: Применяется наименьшая из возможных скидок. Это правило выгодно продавцу.
    • Максимум: Применяется наибольшая скидка, что, как правило, выгоднее покупателю.
    • Сложение: Все применимые скидки суммируются, предоставляя общую скидку.
    • Последовательное применение: Каждая последующая скидка рассчитывается от суммы, оставшейся после применения предыдущей скидки (так называемая «скидка на скидку»).
    • Вытеснение: Применяется только одна скидка с наибольшим приоритетом, полностью отменяя действие всех остальных скидок.

Шаги для работы с типовыми автоматическими скидками (без расширений)

Для настройки автоматических скидок, не требующих программного кода, выполним следующие шаги:

  1. Включите функцию автоматических скидок: Перейдем в раздел «Настройки продаж» (обычно находится в меню «Настройки» или «Администрирование») и убедимся, что соответствующая функциональная опция для автоматических скидок активирована.
  2. Проверьте права пользователей: Удостоверимся, что у пользователей, которые будут создавать и изменять скидки, есть необходимые права доступа к справочнику «Автоматические скидки» и связанным с ним объектам.
  3. Создайте новые виды автоматических скидок:
    • Откроем список автоматических скидок. Обычно это можно найти через раздел «Продажи» или «Настройки» в подсистеме управления продажами.
    • Нажмем кнопку «Создать». В открывшейся форме мы сможем выбрать тип скидки (например, процентная или суммовая, на весь документ или на отдельные позиции).
    • Зададим наименование скидки, укажем период ее действия и приоритет (если несколько скидок могут применяться одновременно).
    • На вкладке «Условия предоставления» детально настроим условия срабатывания скидки, используя предложенные системой варианты (например, минимальная сумма чека, определенный список товаров, тип покупателя и т.д.).
    • На вкладке «Действие скидки» укажем, как и к чему будет применяться скидка (например, на все товары в чеке, на самые дорогие товары, на товары определенной категории).
    • Сохраним настроенную скидку. Она автоматически начнет действовать в соответствии с заданными условиями.

Примеры практического применения расширений для скидок

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

Заключение

Изменение механизма расчета скидок в 1С:Рознице 3.0 и 1С:УНФ 3.0 с внешних обработок на расширения является значительным шагом в развитии платформы 1С:Предприятие. Хотя это требует переосмысления подхода к настройке пользовательских скидок и освоения новых инструментов, использование расширений предлагает большую гибкость, безопасность и удобство при обновлении типовой конфигурации. Мы подробно рассмотрели, как работать с этим новым механизмом, начиная от понимания причин ошибки до пошагового подключения и доработки расширений. Также мы ознакомились с богатым функционалом типовых автоматических скидок, который во многих случаях позволяет обойтись без программных доработок. Теперь у нас есть четкое понимание, как эффективно управлять скидками в современных версиях программ 1С.

← На главную