Как в 1С:Управление торговлей 11.5 автоматически подставлять менеджера из договора или контрагента в заказ клиента?

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

При оформлении оптовых продаж пользователи нередко сталкиваются с ситуацией, когда при создании документа Заказ клиента в поля Автор и Менеджер автоматически подставляется текущий пользователь системы. Если с автором все логично — фиксируется сотрудник, физически создавший документ в базе, — то в поле Менеджер бизнес-логика часто требует видеть ответственного менеджера, закрепленного за контрагентом, договором или партнером. Разберем, почему программа ведет себя именно так и какими способами можно реализовать требуемое поведение.

Почему типовая конфигурация не подставляет менеджера из договора

Проанализируем механику работы типовой конфигурации «1С:Управление торговлей 11.5». Поведение обусловлено следующими архитектурными особенностями:

  1. Момент инициализации документа: когда пользователь создает новый документ, срабатывает процедура ОбработкаЗаполнения. На этом этапе ни партнер, ни контрагент, ни договор еще не выбраны пользователем. Система инициализирует реквизит Менеджер значением текущего авторизованного пользователя.
  2. Защита введенных данных: когда оператор впоследствии выбирает партнера или договор, типовые обработчики формы не перезаписывают реквизит Менеджер, так как он уже не пустой. Это сделано намеренно разработчиками конфигурации, чтобы не затереть ручные корректировки пользователя.
  3. Отсутствие пользовательских переключателей: в разделах «НСИ и администрирование» штатный флаг для принудительного перезаполнения менеджера из договора при смене клиента отсутствует. Начиная с релизов 11.5.21+, система пытается использовать механизм автоподстановки на основе накопленной статистики (в связке: Автор, Партнер, Соглашение, Договор, Организация), но при отсутствии истории все равно подставляет текущего пользователя.

Вариант 1. Программная корректировка через расширение конфигурации

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

В типовом коде вызов выглядит следующим образом:

ОтветственныеЛицаСервер.ЗаполнитьМенеджера(Объект);

Если мы обратимся к определению процедуры ЗаполнитьМенеджера, то увидим второй параметр с именем Перезаполнять, который по умолчанию равен Ложь. Передав в процедуру значение Истина, мы заставим систему принудительно обновить менеджера:

ОтветственныеЛицаСервер.ЗаполнитьМенеджера(Объект, Истина);

Реализуем это поведение через расширение по шагам:

  1. Создаем расширение конфигурации с назначением «Адаптация» или «Дополнение».
  2. Добавляем в расширение форму документа ЗаказКлиента.
  3. Перехватываем события ПослеИзмененияРеквизита или ПриИзменении для полей выбора договора и партнера с помощью аннотации &После.
  4. Вызываем перезаполнение менеджера на сервере, передавая флаг принудительной перезаписи.

Посмотрим на пример обработчика изменения договора в форме:


&НаКлиенте
Процедура Расш1_ДоговорПриИзмененииПосле(Элемент)
    Расш1_ОбновитьОтветственногоНаСервере();
КонецПроцедуры

&НаСервере
Процедура Расш1_ОбновитьОтветственногоНаСервере()
    Если ЗначениеЗаполнено(Объект.Договор) И ЗначениеЗаполнено(Объект.Договор.Менеджер) Тогда
        Объект.Менеджер = Объект.Договор.Менеджер;
    Иначе
        ОтветственныеЛицаСервер.ЗаполнитьМенеджера(Объект, Истина);
    КонецЕсли;
КонецПроцедуры

Вариант 2. Ввод на основании предшествующих документов

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

  1. Менеджер ведет клиента в рамках справочника Сделки с клиентами либо оформляет первичное Коммерческое предложение.
  2. Оператор или помощник формирует документ Заказ клиента путем ввода на основании документа сделки или коммерческого предложения.
  3. При создании вводом на основании реквизит Менеджер корректно транслируется из документа-основания, а текущий пользователь фиксируется в реквизите Автор.

Ограничения и риски принудительной подстановки менеджера

Прежде чем внедрять доработку, обязательно проанализируем возможные побочные эффекты:

  1. Ограничение прав на уровне записей (RLS): если в информационной базе включен RLS по группам доступа партнеров или ответственным менеджерам, подстановка чужого менеджера приведет к ошибке прав. Сотрудник, создавший заказ, сразу после записи документа потеряет права на его дальнейшее чтение и проведение.
  2. Замещение и отпуска: если основной менеджер находится на больничном или в отпуске, а заказы оформляет замещающий сотрудник, жесткая привязка будет указывать отсутствующего сотрудника. Это приведет к спорам при расчете ключевых показателей и мотивации.
  3. Разделение понятий «Партнер» и «Контрагент»: в архитектуре 1С:УТ 11 управленческий контур строится вокруг справочника Партнеры, где закрепляется основной менеджер. Договоры же заключаются от лица юридических лиц справочника Контрагенты. При программном заполнении важно четко определить приоритет: откуда брать менеджера в первую очередь — из карточки партнера, из индивидуального соглашения или непосредственно из договора.
← На главную