При переходе на новые версии программных продуктов фирмы «1С», таких как 1С:Розница 3.0 и 1С:УНФ 3.0, многие пользователи сталкиваются с изменением привычных механизмов работы. Одним из таких существенных изменений является подход к расчету скидок и наценок. Если в предыдущих версиях, например, в 1С:Рознице 2.3, мы активно использовали дополнительные внешние обработки для реализации произвольных алгоритмов скидок, то в версиях 3.0 этот механизм претерпел кардинальные изменения. При попытке добавить старую обработку в новую конфигурацию, мы получаем ошибку: "невозможно подключить дополнительную обработку из файла возможно она не подходит метод не обнаружен ПараметрыРегистрацииВнешнейОбработкиСкидкиНаценки". Эта ошибка является прямым указанием на то, что прежний подход больше не актуален.
Основная причина возникновения указанной ошибки заключается в том, что в 1С:Рознице 3.0 и 1С:УНФ 3.0 фирма «1С» изменила архитектуру подсистемы скидок. Если ранее мы могли подключать внешние обработки, которые реализовывали определенные интерфейсы и методы, такие как ПараметрыРегистрацииВнешнейОбработкиСкидкиНаценки, то теперь для решения задач, требующих вмешательства в код или реализации сложных пользовательских условий скидок, используется механизм расширений конфигурации.
Это изменение является частью общей тенденции в развитии платформы 1С:Предприятие 8.3 к использованию расширений для доработки типовых конфигураций без изменения их исходного кода. Расширения предоставляют более гибкий и безопасный способ адаптации системы под уникальные потребности бизнеса, позволяя сохранять типовую конфигурацию на поддержке и легко обновлять ее. Именно поэтому при попытке добавить старую внешнюю обработку система не обнаруживает ожидаемый метод регистрации, что приводит к ошибке.
Вместо внешних обработок, которые были отдельными файлами с кодом, теперь для настройки сложных условий скидок необходимо использовать расширения конфигурации. Фирма «1С» предусмотрела такую возможность и реализовала ее по аналогии с расширениями для расчета цен и показателей «Анализа бизнеса». Это позволяет нам, программистам и продвинутым пользователям, создавать собственные алгоритмы скидок, интегрируя их непосредственно в логику программы, не снимая конфигурацию с поддержки.
Для упрощения процесса разработки, в системе реализована подсказка, позволяющая скачать каркасное расширение. Это каркасное расширение является заготовкой, которую мы можем доработать под требуемые цели, добавив в нее необходимый функционал для расчета скидок. Таким образом, мы получаем стартовую точку для создания собственного, уникального механизма расчета скидок, соответствующего специфике нашего бизнеса.
Прежде чем приступить к созданию и подключению расширения, нам необходимо убедиться, что у нас есть соответствующие права доступа в информационной базе. Для работы с расширениями в режиме предприятия обычно требуются полные административные права.
Для получения каркасного расширения, предназначенного для скидок, мы можем воспользоваться встроенной функциональностью программы. В версиях 1С:Розницы 3.0.5 и 1С:УНФ 3.0.5 и выше, при создании новой автоматической скидки появляется возможность выбора ее типа. Один из вариантов – это использование расширения. При выборе такого типа система предложит нам скачать шаблон расширения, который уже содержит необходимую структуру для реализации алгоритмов скидок.
Если мы предпочитаем работать с нуля или уже имеем опыт разработки расширений, мы можем создать пустое расширение в режиме «Конфигуратор» и самостоятельно реализовать требуемые методы.
После получения каркасного расширения или создания нового, нам предстоит его доработать в среде «Конфигуратора». Здесь мы будем реализовывать специфическую логику расчета скидок, которая не предусмотрена типовым функционалом. Этот процесс включает в себя несколько ключевых этапов:
Для этого в расширении будут доступны данные о текущем документе продажи (чек, заказ), составе товаров, их ценах, а также информация о клиенте.
Важно помнить, что для взаимодействия с механизмом скидок в расширении необходимо использовать определенные интерфейсы и объекты, предоставляемые платформой 1С. Обычно это специальные процедуры и функции, которые вызываются типовой подсистемой скидок и ожидают возврата определенных структур данных. Примерная структура кода внутри модуля расширения для расчета скидки может выглядеть следующим образом:
// Примерный код в модуле расширения для расчета скидки
// Обычно такая процедура вызывается системой при определении скидок
// и получает параметры текущего расчета.
// (Эта процедура является каркасом, ее фактическое название и параметры
// могут отличаться в зависимости от версии конфигурации и платформы).
Процедура ОпределитьПользовательскиеСкидки(ПараметрыРасчетаСкидки) Экспорт
// ПараметрыРасчетаСкидки - это структура, которая содержит всю
// необходимую информацию о текущем документе (чек, заказ),
// табличной части с товарами, клиенте, уже рассчитанных скидках и т.д.
// А также позволяет добавлять новые скидки.
// Пример: Предоставление дополнительной скидки 5% на все товары,
// если клиент является VIP и сумма документа превышает 10000 руб.
// 1. Получаем необходимые данные из ПараметрыРасчетаСкидки
ПеременнаяСуммаДокумента = ПараметрыРасчетаСкидки.СуммаПоДокументуБезСкидок;
ПеременнаяКлиент = ПараметрыРасчетаСкидки.Клиент; // Предполагается наличие поля Клиент
Если ПеременнаяКлиент.ЭтоГруппаVIPКлиентов И ПеременнаяСуммаДокумента > 10000 Тогда
// 2. Создаем объект новой скидки через метод ПараметрыРасчетаСкидки
НоваяПользовательскаяСкидка = ПараметрыРасчетаСкидки.ДобавитьСкидку();
// 3. Устанавливаем параметры новой скидки
НоваяПользовательскаяСкидка.Наименование = "VIP-скидка по расширению";
НоваяПользовательскаяСкидка.Процент = 5;
НоваяПользовательскаяСкидка.ТипПрименения = "НаВесьДокумент"; // Применяем на весь документ
НоваяПользовательскаяСкидка.Приоритет = 100; // Устанавливаем высокий приоритет
НоваяПользовательскаяСкидка.Комментарий = "Дополнительная скидка для VIP-клиентов";
// Если нужно применить к конкретным строкам:
// Для Каждого СтрокаТЧ Из ПараметрыРасчетаСкидки.ТабличнаяЧасть Цикл
// Если СтрокаТЧ.Номенклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("00001") Тогда
// НоваяПользовательскаяСкидка.ТипПрименения = "НастроитьДляСтроки";
// НоваяПользовательскаяСкидка.СтрокаТабличнойЧасти = СтрокаТЧ;
// // Здесь же можно указать количество, на которое действует скидка в этой строке
// // НоваяПользовательскаяСкидка.Количество = СтрокаТЧ.Количество;
// Прервать; // Применяем только на первую подходящую строку для примера
// КонецЕсли;
// КонецЦикла;
КонецЕсли;
// Мы также можем модифицировать или отменять типовые скидки,
// которые уже были рассчитаны до вызова нашего расширения.
// Например, если расширение должно отменить все скидки, кроме своих:
// Для Каждого Скидка Из ПараметрыРасчетаСкидки.Скидки Цикл
// Если Не Скидка.Наименование = "VIP-скидка по расширению" Тогда
// Скидка.Отменить = Истина;
// КонецЕсли;
// КонецЦикла;
КонецПроцедуры
Для корректной работы с такими процедурами нам следует обращаться к официальной документации на сайте ИТС, где подробно описаны API для разработки расширений в контексте различных подсистем, включая расчет скидок.
После завершения разработки и тестирования расширения его необходимо подключить к рабочей информационной базе. Это можно сделать одним из двух основных способов:
.cfe или .cfa), который мы сохранили из «Конфигуратора».После подключения расширения, настроенная скидка, использующая его, будет отображаться в списке автоматических скидок со специальным значком, который указывает на ее реализацию через расширение. Это помогает визуально отличить пользовательские скидки от типовых.
Помимо возможности использования расширений для создания уникальных алгоритмов, новые версии 1С:УНФ и 1С:Розница версии 3.0 предоставляют мощные встроенные инструменты для настройки как ручных, так и автоматических скидок, которые не требуют написания кода. Эти механизмы позволяют нам задавать правила, по которым скидки будут предоставляться покупателям, в большинстве случаев без привлечения программистов.
Давайте рассмотрим подробнее возможности настройки автоматических скидок:
Для настройки автоматических скидок, не требующих программного кода, выполним следующие шаги:
Несмотря на мощный и гибкий функционал типовых автоматических скидок, расширения остаются незаменимыми для решения специфических и нестандартных задач. Мы можем использовать расширения для:
Изменение механизма расчета скидок в 1С:Рознице 3.0 и 1С:УНФ 3.0 с внешних обработок на расширения является значительным шагом в развитии платформы 1С:Предприятие. Хотя это требует переосмысления подхода к настройке пользовательских скидок и освоения новых инструментов, использование расширений предлагает большую гибкость, безопасность и удобство при обновлении типовой конфигурации. Мы подробно рассмотрели, как работать с этим новым механизмом, начиная от понимания причин ошибки до пошагового подключения и доработки расширений. Также мы ознакомились с богатым функционалом типовых автоматических скидок, который во многих случаях позволяет обойтись без программных доработок. Теперь у нас есть четкое понимание, как эффективно управлять скидками в современных версиях программ 1С.