При работе в программе 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с тем, что в табличной части документа Табель отображается только ФИО сотрудника, но отсутствует его должность. Это создает неудобства при заполнении и проверке данных, особенно в крупных организациях, где работают однофамильцы или сотрудники на разных позициях. Давайте разберемся, почему этой колонки нет в стандартном интерфейсе и какими способами мы можем её добавить.
Первое, что пытается сделать опытный пользователь — это нажать кнопку «Еще — Изменить форму». Однако в списке доступных полей для таблицы ДанныеОВремени поле «Должность» отсутствует. Проанализируем причину такого поведения системы.
Дело в том, что в архитектуре 1С:ЗУП 3.1 данные оптимизированы для высокой производительности. Должность сотрудника не является его статичным свойством (как, например, ИНН или дата рождения). Это периодический параметр, который хранится в регистре сведений КадроваяИсторияСотрудников. Поскольку документ Табель создается за месяц, сотрудник в течение этого периода может сменить должность (кадровый перевод). Если бы программа пыталась «на лету» вычислять должность для каждой строки при каждом открытии документа, это привело бы к значительным задержкам в работе интерфейса, особенно если в табеле несколько сотен человек.
Если должность вам нужна не для ввода данных, а для оперативной проверки того, кто включен в документ, мы можем воспользоваться встроенным инструментом системы. Разберем по шагам, как настроить отображение должностей рядом с данными табеля без программирования:
Документ.Табель, а в качестве таблицы укажем Данные о времени.Сотрудник -> Текущая должность (или Работа.Должность).Это наиболее корректный технический путь, который позволяет изменить интерфейс документа, не снимая программу с поддержки. Рассмотрим, как программист может реализовать эту задачу. Нам потребуется создать расширение и модифицировать форму документа Табель.
Шаг 1. Добавление реквизита в форму
В расширении для таблицы ДанныеОВремени создаем новый реквизит (путь к данным не заполняем, так как это будет вычисляемое поле) с типом Строка или СправочникСсылка.Должности. Выносим его на форму документа.
Шаг 2. Написание кода для заполнения данных
Нам необходимо перехватить процедуру заполнения или чтения данных. Рассмотрим пример кода, который подтягивает должности при открытии документа или после его заполнения. Мы будем использовать метод, обращающийся к кадровым данным.
&НаСервере
Процедура Расш1_ПриЧтенииНаСервереПосле(ТекущийОбъект)
// Цикл по строкам таблицы данных о времени
Для Каждого СтрокаТЧ Из Объект.ДанныеОВремени Цикл
// Получаем актуальную должность на дату документа или конец месяца
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Сотрудник", СтрокаТЧ.Сотрудник);
// Вызываем типовой механизм получения кадровых данных
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СтрокаТЧ.Сотрудник, "Должность", Объект.Дата);
Если КадровыеДанные.Количество() > 0 Тогда
СтрокаТЧ.ДолжностьТекст = КадровыеДанные[0].Должность;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный нюанс: при использовании такого метода нужно помнить о производительности. Если в документе 1000 строк, запрос в цикле будет работать медленно. Правильнее будет собрать всех сотрудников в массив и получить должности одним запросом к регистру сведений КадроваяИсторияСотрудников.СрезПоследних.
Если вмешательство в конфигурацию нежелательно, проанализируем вариант с внешними обработками. Существуют готовые решения, которые подключаются через механизм Дополнительные отчеты и обработки.
Такая обработка может заменять стандартную форму документа на свою, где программно уже добавлена колонка с должностью. Плюс этого метода в том, что при обновлении типовой конфигурации ваше решение не «слетит» и не будет мешать процессу обновления.
Также не забываем про стандартную печатную форму Т-13 или 0504421. Как справедливо отмечено в обсуждении, в печатных формах должность присутствует всегда. Если бухгалтеру нужно просто увидеть должность для визуальной сверки перед печатью, можно воспользоваться кнопкой Печать — Табель учета рабочего времени (Т-13).
Разберем ситуацию, когда сотрудник сменил должность в середине месяца (например, 15-го числа). В документе Табель для такого сотрудника автоматически создаются две строки (если включена соответствующая настройка разбиения).
При реализации собственной колонки важно прописать логику так, чтобы в первой строке (до 15-го числа) отображалась старая должность, а во второй (после 15-го) — новая. Для этого при запросе кадровых данных в расширении нужно передавать не дату документа, а дату начала соответствующего периода строки табеля. Это позволит избежать путаницы и обеспечит точность учета.
Выясним основные выводы из нашего разбора:
Таким образом, хотя задача и кажется сложной на первый взгляд, она имеет несколько вариантов решения в зависимости от ваших технических навыков и потребностей бизнеса.