Как разрешить ввод произвольной цены для товаров без прайса в 1С:УТ 11.5 при ограничении прав продавца?

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

В типовых конфигурациях 1С, таких как «Управление торговлей 11.5», «ERP» или «Комплексная автоматизация», часто возникает конфликт между безопасностью и производственной необходимостью. Руководство хочет запретить менеджерам менять цены на «ходовые» товары, но при этом оставляет возможность продавать услуги или позиции с неопределенной стоимостью (например, доставка, подъем на этаж или сложные изделия с характеристиками). Рассмотрим детально, как решить ситуацию, когда у пользователя снята галочка «Отклонение от условий продаж», но ему все же нужно вводить цену вручную для определенных позиций.

Проблема: механизм контроля отклонений в 1С

Прежде всего, проанализируем ситуацию. Когда в профиле групп доступа пользователя отключена роль «Отклонение от условий продаж», система при проведении документа «Заказ клиента» или «Реализация товаров и услуг» жестко сверяет цену в строке с ценой в прайс-листе (регистре сведений «Цены номенклатуры»). Если цена в документе отличается хотя бы на копейку или если в прайсе цена вовсе не установлена (равна нулю), система блокирует проведение. Выясним причину: программа воспринимает «пустую» цену как нулевую, и любое число, введенное менеджером, считается отклонением в большую сторону, которое также требует специальных прав.

Способ 1: Использование типовых и индивидуальных соглашений

Разберем, как можно решить задачу без программирования, используя механизм соглашений. В 1С:УТ 11 настройки прав на цены тесно связаны с условиями продаж, прописанными в соглашениях.

  1. Перейдем в раздел CRM и маркетинг — Типовые соглашения с клиентами.
  2. Создадим отдельное соглашение, например, с наименованием «Продажи по произвольным ценам (услуги)».
  3. На вкладке «Условия продаж» найдем флаг «Допускается отклонение от условий продаж». Если мы включим этот флаг в самом соглашении, то правила, заданные в нем, будут иметь приоритет для этого конкретного случая.
  4. В поле «Вид цены» выберем «Произвольная».

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

Способ 2: Настройка вида цены «Заполняется вручную»

Проанализируем настройки справочника «Виды цен». В 1С есть возможность создать вид цены, который по своей сути не является «отклонением», так как его способ задания — ручной ввод.

  1. Зайдем в CRM и маркетинг — Настройки и справочники — Виды цен.
  2. Создадим новый вид цены, назовем его «Цена по договоренности».
  3. В поле «Способ задания цены» выберем значение «Заполняется вручную».
  4. Для номенклатуры, у которой нет постоянной цены (например, «Доставка»), в карточке товара или через документ «Установка цен номенклатуры» нужно один раз зафиксировать этот вид цены, даже с нулевым значением.

Если в заказе клиента выбрать этот вид цены, система может быть более лояльна. Однако в последних релизах 11.5 этот механизм все равно часто упирается в проверку роли отклонений. Поэтому рассмотрим более гибкий метод.

Способ 3: Механизм минимально допустимых цен

Рассмотрим вариант, при котором мы не запрещаем отклонение полностью, а ограничиваем его снизу. Это один из самых изящных способов настройки в 1С:УТ 11.

  1. В настройках параметров системы (НСИ и администрирование — Настройка НСИ и разделов — CRM и маркетинг) включим использование «Ценовых групп» и «Минимальных цен продажи».
  2. Создадим вид цены «Минимальная цена» (например, расчетная: Цена розничная минус 99%).
  3. В настройках маркетинга назначим этот вид цены как «Минимально допустимый».
  4. В правах пользователя разрешим роль «Отклонение от условий продаж», но запретим роль «Продажа ниже минимальных цен».

В этом случае, если для услуги или товара цена в прайсе не установлена (равна 0), любая цена, введенная менеджером (например, 100 рублей), будет выше минимальной (которая равна 0). Программа позволит провести документ. А для обычных товаров, где минимальная цена установлена (например, 500 рублей), менеджер не сможет поставить цену 400, так как сработает контроль минимально допустимых цен.

Способ 4: Программное решение через Расширение (для программиста)

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

Нам необходимо перехватить проверку в модуле, отвечающем за расчет отклонений (обычно это процедуры в модулях ЦенообразованиеВызовСервера или ПродажиСервер). Логика должна быть следующей:


&После("ПроверитьВозможностьОтклоненияОтУсловийПродаж")
Процедура Ист_ПроверитьВозможностьОтклонения(ПараметрыПроверки, РезультатПроверки)
    Для Каждого СтрокаТЧ Из ПараметрыПроверки.СтрокиДокумента Цикл
        // Проверяем, установлена ли базовая цена в прайс-листе
        Если Не ЗначениеЗаполнено(СтрокаТЧ.ЦенаИзПрайса) Или СтрокаТЧ.ЦенаИзПрайса = 0 Тогда
            // Если цены в прайсе нет, принудительно разрешаем проведение для этой строки
            СтрокаТЧ.ОтклонениеДопустимо = Истина;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

Способ 5: Применение ручных скидок вместо изменения цены

Выясним еще один организационный момент. Если менеджеру нужно изменить цену, иногда проще установить в прайсе максимально возможную цену, а менеджеру дать право на «Ручные скидки».

В настройках прав можно указать «Максимальный процент ручной скидки» (например, 10%). Если для товара цена не определена, можно установить ее в прайсе как 1 000 000, и менеджер скидкой доведет ее до нужной. Конечно, это звучит как «костыль», но для ряда компаний, занимающихся услугами, такой подход позволяет жестко контролировать границы дозволенного через механизм скидок, который в 1С реализован очень детально (можно настроить скидки по ценовым группам или даже по конкретным менеджерам).

Резюмируем: для быстрого решения без кода попробуйте метод с Минимальными ценами (Способ 3). Если же требуется идеальная точность, лучшим выбором будет создание Расширения (Способ 4), которое автоматически будет определять наличие цены в прайсе и давать права на редактирование только в случае её отсутствия.

← На главную