Почему в списке командировок в 1С:ЗУП нельзя просто добавить подразделение и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

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

Анализ структуры метаданных: почему «Больничный» и «Командировка» работают по-разному

Для начала проанализируем, почему платформа 1С ведет себя неодинаково с этими документами. Разберем техническую сторону вопроса. В системе 1С данные в списках отображаются с помощью объекта Динамический список. Этот объект работает на основе SQL-запроса к базе данных.

В документе БольничныйЛист реквизит Подразделение является **явным реквизитом** самого объекта. Он физически существует в таблице документа. Это необходимо для корректного отражения расходов по выплате пособий за счет работодателя в бухгалтерском учете. Поскольку поле есть в таблице, динамический список видит его и позволяет пользователю добавить его в форму через меню «Изменить форму».

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

Способ 1. Использование группировки в настройках списка

Рассмотрим первый способ, который не требует программирования и позволяет организовать работу в текущем списке. Вместо добавления колонки мы воспользуемся механизмом группировки. Проанализируем, как это сделать:

  1. Откроем список документов «Командировки».
  2. Нажмем кнопку «Еще» в правой части командной панели и выберем пункт «Настроить список».
  3. Перейдем на вкладку «Группировка».
  4. Нажмем кнопку «Добавить» и в дереве доступных полей найдем путь: Сотрудник -> [+] -> Текущее подразделение (или Подразделение на дату).
  5. Завершим настройку.

В результате список документов будет визуально разделен на блоки по подразделениям. Это не добавляет отдельную колонку, но позволяет быстро ориентироваться в документах разных отделов и использовать стандартный поиск.

Способ 2. Дополнительные сведения (без программирования)

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

Этот метод позволяет «приклеить» к документу любое поле без изменения конфигурации. Перейдем в раздел «Администрирование» — «Общие настройки» — «Дополнительные реквизиты и сведения». Найдем в списке объект «Командировка» и добавим новое сведения с типом СправочникСсылка.ПодразделенияОрганизаций.

После этого в самом документе появится кнопка (обычно в виде знака вопроса или через меню «Еще — Дополнительные сведения»), где можно будет указать подразделение. Теперь в форме списка через «Изменить форму» можно будет добавить это дополнительное сведения в общую таблицу.

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

Способ 3. Создание расширения для динамического списка (для программистов)

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

Разберем логику изменений. Нам нужно выполнить «Левое соединение» основной таблицы документов с регистром сведений КадроваяИсторияСотрудников. Рассмотрим пример кода запроса, который необходимо поместить в динамический список формы в расширении:


ВЫБРАТЬ
    ДокументКомандировка.Ссылка КАК Ссылка,
    ДокументКомандировка.Дата КАК Дата,
    ДокументКомандировка.Номер КАК Номер,
    ДокументКомандировка.Сотрудник КАК Сотрудник,
    КадроваяИстория.Подразделение КАК Подразделение
ИЗ
    Документ.Командировка КАК ДокументКомандировка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ) КАК КадроваяИстория
        ПО ДокументКомандировка.Сотрудник = КадроваяИстория.Сотрудник

Однако стоит помнить о производительности. В реальных условиях 1С:ЗУП запрос в динамическом списке гораздо сложнее и включает проверку прав доступа (RLS). Поэтому правильнее будет в расширении не переписывать запрос полностью, а добавить в Схему компоновки данных, на которой строится список, новое вычисляемое поле. Это позволит избежать замедления работы системы при больших объемах данных.

Способ 4. Использование кадровых отчетов

Зачастую пользователи пытаются использовать форму списка как инструмент отчетности. Посмотрим на ситуацию с другой стороны: если цель — получить перечень командированных по конкретному отделу для печати или анализа, правильнее использовать специализированный отчет.

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

Резюме и выводы

Мы выяснили, что отсутствие поля Подразделение в списке командировок — это не ошибка, а следствие архитектуры системы. В отличие от больничных листов, в командировках информация о месте работы сотрудника не дублируется в шапку документа для экономии места в базе данных и нормализации данных.

Подведем итог:

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

Выбор метода зависит от ваших полномочий в системе и того, насколько критична автоматизация этого процесса. Для большинства задач штатного отчета оказывается более чем достаточно.

← На главную