Как настроить автоматическую подстановку подразделения в заказе покупателя в 1С:УНФ?

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

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

Анализ причин стандартного поведения системы

Для начала проанализируем ситуацию и выясним, почему поведение системы различается для разных ролей. В 1С:УНФ механизм автозаполнения реквизитов опирается на несколько факторов:

  1. Персональные настройки пользователя: У каждого пользователя в разделе Настройки — Персональные настройки можно указать основное подразделение. Оно будет подставляться автоматически при создании нового документа.
  2. Ограничение прав на уровне записей (RLS): Если у менеджера настроены права таким образом, что он «видит» только документы своего подразделения, система при создании нового заказа методом исключения подставляет единственный доступный вариант.
  3. Полные права: Администратор (пользователь с полными правами) имеет доступ ко всем подразделениям. Поэтому система не «рискует» выбирать за него, предоставляя полный список для выбора, если в персональных настройках администратора не зафиксировано конкретное значение.

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

Решение 1: Использование персональных настроек (без программирования)

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

  1. Перейдем в раздел Настройки, далее выберем пункт Персональные настройки.
  2. Найдем поле Основное подразделение.
  3. Выберем нужное значение из справочника Структурные единицы.

Важно: Это значение будет подставляться во все новые документы, создаваемые этим пользователем. Если администратору нужно, чтобы подразделение «подтягивалось» именно из карточки менеджера, этот способ будет неэффективен, так как придется постоянно переключать настройки или менять поле вручную.

Решение 2: Программная доработка через расширение конфигурации

Для реализации автоматической смены подразделения при выборе ответственного нам потребуется внести изменения в логику работы формы документа. Поскольку мы рассматриваем современные версии (включая облачные, такие как 1С:Фреш), наиболее правильным методом будет использование расширений конфигурации. Это позволит сохранить программу на поддержке.

Разберем по шагам логику, которую необходимо внедрить:

При изменении реквизита Ответственный на форме документа ЗаказПокупателя, система должна найти сотрудника, связанного с этим пользователем, определить его текущее подразделение и установить его в поле Подразделение документа.

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


&НаКлиенте
Процедура Расш1_ОтветственныйПриИзмененииПосле(Элемент)
    // Вызываем серверную функцию для получения подразделения сотрудника
    СтруктураДанных = ПолучитьДанныеМенеджераНаСервере(Объект.Ответственный);
    
    Если СтруктураДанных.ПодразделениеЗаполнено Тогда
        Объект.Подразделение = СтруктураДанных.Подразделение;
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьДанныеМенеджераНаСервере(Знач Менеджер)
    Результат = Новый Структура("ПодразделениеЗаполнено, Подразделение", Ложь, Справочники.СтруктурныеЕдиницы.ПустаяСсылка());
    
    Если ЗначениеЗаполнено(Менеджер) Тогда
        // В УНФ Подразделение часто привязано к сотруднику
        Сотрудник = Сапрвочники.Сотрудники.НайтиПоНаименованию(Менеджер.Наименование); // Пример упрощенного поиска
        // Более правильный путь - через кадровые данные или ЗначениеНастроекПовтИсп
        ПодразделениеПользователя = ЗначениеНастроекПовтИсп.ПодразделениеПользователя(Менеджер);
        
        Если ЗначениеЗаполнено(ПодразделениеПользователя) Тогда
            Результат.Подразделение = ПодразделениеПользователя;
            Результат.ПодразделениеЗаполнено = Истина;
        КонецЕсли;
    КонецЕсли;
    
    Возвращает Результат;
КонецФункции

Проанализируем этот код. Мы используем встроенную функцию ЗначениеНастроекПовтИсп.ПодразделениеПользователя, которая является частью типовых механизмов 1С:УНФ. Она позволяет быстро получить настройки конкретного пользователя, даже если текущий сеанс запущен под правами администратора.

Решение 3: Массовое изменение объектов (обходной путь)

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

  1. Откроем список заказов покупателей.
  2. Выделим документы, созданные за определенный период или по конкретному менеджеру (используя Расширенный поиск или Фильтры).
  3. Нажмем правую кнопку мыши и выберем пункт Изменить выделенные....
  4. В появившемся окне найдем реквизит Подразделение, установим флажок и выберем нужное значение.
  5. Нажмем Изменить реквизиты.

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

Рекомендации по настройке справочников

Чтобы автоматизация работала корректно, проверим связь Пользователь — Сотрудник. В 1С:УНФ это критически важно:

Во-первых, убедимся, что для каждого менеджера создана карточка в справочнике Сотрудники. Во-вторых, в карточке сотрудника на закладке «Текущая работа» должно быть указано актуальное Подразделение. Именно на эти данные опираются многие алгоритмы автозаполнения.

Также стоит помнить о настройках Групп доступа. Если вы хотите, чтобы администратор видел только те подразделения, которые относятся к конкретным менеджерам (иерархически), можно попробовать настроить профили групп доступа с ограничением по подразделениям, но для «Полных прав» это обычно не применяется, так как администратор по определению должен видеть всё.

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

← На главную