В торговых компаниях часто возникает задача жесткого контроля цен при отгрузке товаров. Менеджеры по продажам не должны иметь возможности предоставить скидку, которая уведет конечную стоимость товара ниже определенного лимита (например, ниже закупочной цены, себестоимости или минимальной розничной цены). В классических конфигурациях 1С, таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» и «Комплексная автоматизация 1.1», за этот функционал отвечает дополнительное право пользователя «Не отпускать товар с ценой ниже определенного типа».
В этой статье мы подробно разберем, где именно в коде документа РеализацияТоваровУслуг (РН / РТУ) выполняется эта проверка, как работает данный механизм «под капотом» и как правильно настроить его в пользовательском режиме.
Для того чтобы кастомизировать или просто детально проанализировать алгоритм проверки, нам необходимо обратиться к конфигуратору. Вся основная логика контроля цен сосредоточена в модуле объекта документа продажи.
Давайте пошагово разберем путь выполнения программы при проведении документа:
РеализацияТоваровУслуг и найдем предопределенную процедуру ОбработкаПроведения.ЗаполнениеДокументов или УправлениеПродажами). Название этой процедуры может незначительно отличаться в зависимости от релиза конфигурации, но чаще всего это ПроверитьМинимальныеЦеныНоменклатуры.Рассмотрим примерную программную логику, которая выполняется внутри общего модуля при вызове проверки:
// Схематичный пример извлечения настроек и проверки цен
Функция ПроверитьМинимальныеЦеныНоменклатуры(ДокументОбъект, Отказ, Заголовок) Экспорт
// Шаг 1. Получаем текущего пользователя и проверяем, включено ли у него ограничение
ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
ТипЦенКонтроля = УправлениеПользователями.ПолучитьЗначениеДополнительногоПрава(
ПланыВидовХарактеристик.ПраваПользователей.НеОтпускатьТоварСЦенойНижеОпределенногоТипа,
ТекущийПользователь
);
// Если тип цен для контроля не задан, проверку выполнять не нужно
Если Не ЗначениеЗаполнено(ТипЦенКонтроля) Тогда
Возврат Истина;
КонецЕсли;
// Шаг 2. Получаем пороговые цены из регистра сведений "ЦеныНоменклатуры"
ТаблицаТоваров = ДокументОбъект.Товары.Выгрузить();
// Формируем запрос для получения цен порогового типа на дату документа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Номенклатура КАК Номенклатура,
| Цены.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| Цены.Цена КАК ПороговаяЦена,
| Цены.Валюта КАК ВалютаПорога
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦенКонтроля) КАК Цены
|ГДЕ
| Цены.Номенклатура В (&СписокНоменклатуры)";
Запрос.УстановитьПараметр("Период", ДокументОбъект.Дата);
Запрос.УстановитьПараметр("ТипЦенКонтроля", ТипЦенКонтроля);
Запрос.УстановитьПараметр("СписокНоменклатуры", ТаблицаТоваров.ВыгрузитьКолонку("Номенклатура"));
// ... Выполняется запрос и сопоставление цен из табличной части с пороговыми ...
КонецФункции
При сопоставлении цен программа выполняет автоматический пересчет валют, если валюта документа отличается от валюты, в которой задана контролируемая цена в регистре сведений ЦеныНоменклатуры. Также учитывается коэффициент единицы измерения (если товар продается в коробках, а цена в регистре задана за штуку).
Если в процессе обхода строк табличной части Товары выясняется, что конечная цена (с учетом ручных и автоматических скидок) ниже установленного лимита, система выполняет следующие действия:
Отказ = Истина, что полностью блокирует проведение документа и перевод его в статус проведенного.Для того чтобы этот механизм заработал на практике, администратору системы необходимо выполнить несколько последовательных шагов в пользовательском интерфейсе:
Важно: Для того чтобы система знала, какую цену считать недопустимой, для каждого продаваемого товара обязательно должен быть введен и проведен документ Установка цен номенклатуры по выбранному контролируемому типу цен.
Разберем несколько важных нюансов функционирования данного контроля в «Управлении торговлей 10.3» и подобных конфигурациях, о которых часто забывают администраторы и разработчики:
Если вы планируете переход на современные конфигурации на управляемых формах, полезно знать, что классический механизм «дополнительных прав пользователей» там упразднен. Однако сама бизнес-задача контроля минимальных цен решается еще более гибко и удобно.
В решениях на платформе 1С:ERP 2, 1С:Комплексная автоматизация 2 и 1С:Управление торговлей 11 данный механизм устроен следующим образом:
Виды цен. В правилах расчета или вводе цен можно явно указать диапазон допустимых цен продаж.Отклонение от условий продаж. Пользователи без этой роли физически не смогут провести документ реализации с ценами ниже установленного порога.В небольших решениях, таких как 1С:УНФ 3.0 и 1С:Розница 3.0, функционал реализован через опцию Минимальные цены в настройках раздела «Продажи». При активации опции программа динамически подсвечивает красным цветом строки в табличной части документа, если итоговая цена опускается ниже лимита, а также автоматически корректирует ручные скидки менеджера до допустимого максимума.