В типовых конфигурациях 1С, таких как «Управление торговлей 11.5», «ERP» или «Комплексная автоматизация», часто возникает конфликт между безопасностью и производственной необходимостью. Руководство хочет запретить менеджерам менять цены на «ходовые» товары, но при этом оставляет возможность продавать услуги или позиции с неопределенной стоимостью (например, доставка, подъем на этаж или сложные изделия с характеристиками). Рассмотрим детально, как решить ситуацию, когда у пользователя снята галочка «Отклонение от условий продаж», но ему все же нужно вводить цену вручную для определенных позиций.
Прежде всего, проанализируем ситуацию. Когда в профиле групп доступа пользователя отключена роль «Отклонение от условий продаж», система при проведении документа «Заказ клиента» или «Реализация товаров и услуг» жестко сверяет цену в строке с ценой в прайс-листе (регистре сведений «Цены номенклатуры»). Если цена в документе отличается хотя бы на копейку или если в прайсе цена вовсе не установлена (равна нулю), система блокирует проведение. Выясним причину: программа воспринимает «пустую» цену как нулевую, и любое число, введенное менеджером, считается отклонением в большую сторону, которое также требует специальных прав.
Разберем, как можно решить задачу без программирования, используя механизм соглашений. В 1С:УТ 11 настройки прав на цены тесно связаны с условиями продаж, прописанными в соглашениях.
Теперь менеджер при оформлении заказа на услугу сможет выбрать это специфическое соглашение. Система позволит провести документ, так как само соглашение разрешает отклонение, даже если у пользователя в общих правах это запрещено. Однако помните, что этот способ требует дисциплины от продавца: он должен выбирать правильное соглашение только для нужных позиций.
Проанализируем настройки справочника «Виды цен». В 1С есть возможность создать вид цены, который по своей сути не является «отклонением», так как его способ задания — ручной ввод.
Если в заказе клиента выбрать этот вид цены, система может быть более лояльна. Однако в последних релизах 11.5 этот механизм все равно часто упирается в проверку роли отклонений. Поэтому рассмотрим более гибкий метод.
Рассмотрим вариант, при котором мы не запрещаем отклонение полностью, а ограничиваем его снизу. Это один из самых изящных способов настройки в 1С:УТ 11.
В этом случае, если для услуги или товара цена в прайсе не установлена (равна 0), любая цена, введенная менеджером (например, 100 рублей), будет выше минимальной (которая равна 0). Программа позволит провести документ. А для обычных товаров, где минимальная цена установлена (например, 500 рублей), менеджер не сможет поставить цену 400, так как сработает контроль минимально допустимых цен.
Если типовые настройки не подходят и нам нужно четкое условие: «Если цены в базе нет, то менеджер может вводить ее сам, а если цена есть — менять нельзя», нам поможет создание небольшого расширения. Рассмотрим пример логики, которую нужно внедрить в процедуру проверки цен.
Нам необходимо перехватить проверку в модуле, отвечающем за расчет отклонений (обычно это процедуры в модулях ЦенообразованиеВызовСервера или ПродажиСервер). Логика должна быть следующей:
&После("ПроверитьВозможностьОтклоненияОтУсловийПродаж")
Процедура Ист_ПроверитьВозможностьОтклонения(ПараметрыПроверки, РезультатПроверки)
Для Каждого СтрокаТЧ Из ПараметрыПроверки.СтрокиДокумента Цикл
// Проверяем, установлена ли базовая цена в прайс-листе
Если Не ЗначениеЗаполнено(СтрокаТЧ.ЦенаИзПрайса) Или СтрокаТЧ.ЦенаИзПрайса = 0 Тогда
// Если цены в прайсе нет, принудительно разрешаем проведение для этой строки
СтрокаТЧ.ОтклонениеДопустимо = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Используя такое расширение, мы сохраняем типовую логику для всех товаров с установленными ценами, но даем «зеленый свет» для услуг и новых позиций. Это самый надежный технический путь, который не требует от пользователей менять соглашения в каждом заказе.
Выясним еще один организационный момент. Если менеджеру нужно изменить цену, иногда проще установить в прайсе максимально возможную цену, а менеджеру дать право на «Ручные скидки».
В настройках прав можно указать «Максимальный процент ручной скидки» (например, 10%). Если для товара цена не определена, можно установить ее в прайсе как 1 000 000, и менеджер скидкой доведет ее до нужной. Конечно, это звучит как «костыль», но для ряда компаний, занимающихся услугами, такой подход позволяет жестко контролировать границы дозволенного через механизм скидок, который в 1С реализован очень детально (можно настроить скидки по ценовым группам или даже по конкретным менеджерам).
Резюмируем: для быстрого решения без кода попробуйте метод с Минимальными ценами (Способ 3). Если же требуется идеальная точность, лучшим выбором будет создание Расширения (Способ 4), которое автоматически будет определять наличие цены в прайсе и давать права на редактирование только в случае её отсутствия.