Механизм контроля минимальных цен в 1С:ERP Управление предприятием 2.5 (а также в 1С:УТ 11 и 1С:КА 2) является критически важным для соблюдения маржинальности продаж. Однако часто возникают ситуации, когда, несмотря на все настройки, система позволяет менеджеру провести Заказ клиенту с ценой ниже допустимого порога. В этой статье мы подробно разберем, как работает этот механизм, проанализируем причины его "молчания" и научимся правильно настраивать систему контроля. Для анализа и проверки фактических цен продажи с учетом скидок по менеджерам и документам пригодится отчет для анализа изменений цен продажи.
Для начала проанализируем, как 1С:ERP понимает, что цена в документе является недопустимой. В системе нет единой "глобальной" настройки минимальной цены, которая применяется ко всем продажам без исключения. Вместо этого используется иерархическая связка. Посмотрим на этот процесс по шагам:
Виды цен создается специальный вид цены (например, "Минимальная цена продажи").Заказ клиенту система проверяет цену в строке товара и сравнивает ее со значением, установленным в регистре для того вида цены, который назначен "минимальным" для используемого в документе вида цен.Если эта цепочка разрывается на любом этапе, контроль не сработает. Рассмотрим подробнее основные причины возникновения проблем.
Выясним одну из самых распространенных организационных ошибок. В системе 1С:ERP существует роль Отклонение от условий продаж. Проанализируем её влияние на процесс проведения документа:
Согласован, что полностью снимает дальнейший контроль.Рассмотрим ситуацию: если вы настраиваете контроль для обычного менеджера, убедитесь, что у него снята галочка в профиле доступа напротив роли Отклонение от условий продаж.
Проанализируем программный код и логику работы общих модулей. В типовых конфигурациях проверка часто завязана на статус документа. Посмотрим на пример кода, который встречается в общем модуле ПродажиСервер в процедуре ПроверитьКорректностьЗаполненияДокументаПродажи:
НужноСогласовать = Не (ВсеСтрокиОтменены ИЛИ ОтклонениеОтУсловийПродаж ИЛИ ДокументПродажи.Согласован ИЛИ СогласованВ1СДокументооборот);
Если НужноСогласовать И (ДокументПродажи.Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован) Тогда
// Здесь происходит вызов проверки цен
КонецЕсли;
Как мы видим, переменная НужноСогласовать становится Ложь, если у пользователя есть право на отклонение или если документ уже имеет статус Согласован. В этом случае проверка просто игнорируется. Если вы тестируете функционал, всегда создавайте новый документ с чистого листа, так как при изменении прав старые документы могут сохранять статус согласования в скрытых реквизитах.
Рассмотрим детально настройку справочника Виды цен. Довольно часто пользователи полагают, что достаточно установить галочку "При оптовой и розничной продаже" в виде минимальных цен. Однако этого недостаточно.
Разберем алгоритм правильной настройки:
Если в основном виде цены это поле пустое, система не будет знать, с чем сравнивать цену в заказе, и пропустит любую скидку.
Проанализируем ситуацию в регистрах. Система контроля сравнивает цену в документе с данными в регистре сведений Цены номенклатуры. Рассмотрим типичный сценарий: вид цены создан, связки настроены, но документ Установка цен номенклатуры для минимального вида цен не проведен. Для автоматического формирования таких документов по правилам можно использовать обработку для создания установок цен номенклатуры.
В этом случае система видит "пустое" значение (ноль). С точки зрения логики программы любая цена больше нуля является допустимой. Всегда проверяйте наличие актуальных записей в регистре цен на дату документа!
В некоторых случаях, когда видов цен очень много, стандартная настройка для каждого отдельного вида может быть трудозатратной. Рассмотрим пример (на основе обсуждения на форуме), как можно модифицировать запрос проверки в общем модуле ЦенообразованиеКлиентСервер, чтобы система проверяла цену по списку из определенного регистра, а не только по константе:
// Пример модификации условия в функции ТекстЗапросаРегистрСведенийЦеныНоменклатуры
ТекстЗаменыУсловиеВидЦены1 =
"ВидЦены В (
| ВЫБРАТЬ
| ВидМинимальноДопустимыхЦенПродажСписок.ВидыЦен КАК ВидЦены
| ИЗ
| РегистрСведений.ВидМинимальноДопустимыхЦенПродажСписок КАК ВидМинимальноДопустимыхЦенПродажСписок)";
Однако, прежде чем прибегать к кодингу, мы настоятельно рекомендуем проверить стандартные настройки, так как типовой функционал ERP 2.5 достаточно гибок.
Подведем итог и составим план действий для проверки работоспособности механизма:
Отклонение от условий продаж и Ценообразование без контроля ограничений.Установка цен номенклатуры для минимального вида цен.Соглашении с клиентом жестко зафиксирован вид цены, убеждаемся, что именно для него настроены ограничения.Заказ клиенту в статусе На согласовании (или Не согласован) и пробуем установить цену ниже минимума.Используя этот системный подход, мы гарантированно добьемся срабатывания контроля и исключим человеческий фактор при назначении скидок в 1С:ERP.