В крупных организациях с численностью сотрудников более 1000 человек ручное заполнение документа Табель становится невозможным. Ситуация осложняется, когда у сотрудников, например, работающих во флоте или на производстве, возникают специфические виды времени: ремонт, обучение, вахта или дежурство. В 1С:ЗУП 3.1 механизмы учета времени значительно отличаются от предыдущих версий, и для эффективной автоматизации нам необходимо разобраться в архитектуре регистров и правильной методике работы с программой.
В этой статье мы подробно рассмотрим, как система собирает данные для табеля, какие регистры за это отвечают и как программно реализовать автоматическое заполнение, чтобы кадровикам не приходилось вводить данные вручную.
Для начала проанализируем, откуда программа черпает информацию при нажатии кнопки Заполнить в документе Табель. В отличие от версии 2.5, где табель был основным источником данных для расчета, в версии 3.1 приоритет отдан методу отклонений. Рассмотрим основные регистры, которые участвуют в этом процессе:
Разберем ситуацию, когда нам нужно добавить свой вид времени, например, «Время ремонта». Если мы просто создадим вид времени в справочнике, программа не узнает, когда его подставлять. Для этого необходимо либо настроить график работы, либо ввести документ, фиксирующий это время.
Проанализируем методический аспект. Профессиональное сообщество и методологи 1С рекомендуют по возможности избегать массового использования документа Табель. Рассмотрим почему:
Документ Табель в ЗУП 3.1 имеет «вытесняющий» характер. Если он проведен, то любые изменения, внесенные позже (например, пришел запоздалый больничный лист), не изменят расчет зарплаты автоматически. Бухгалтеру придется перепроводить или исправлять Табель. Для компании с 1000+ сотрудников это создает огромные риски ошибок.
Рекомендация: используйте специализированные документы для ввода «нестандартного» времени, а также может применяться внешняя печатная форма "Табель Т-13 (с итогами)" по документу "Индивидуальный график".
Если кадровики не хотят заполнять табель вручную, мы можем предложить им альтернативный и более гибкий механизм — Шаблоны ввода данных. Этот метод позволяет вводить только те виды времени, которые являются дополнительными.
Разберем по шагам, как это настроить:
После проведения такого документа, при заполнении итогового Табеля, система автоматически подтянет эти виды времени, основываясь на данных регистра накопления Данные оперативного учета рабочего времени.
Если бизнес-процесс все же требует обязательного наличия документа Табель и его специфического заполнения из внешних систем (например, системы контроля управления доступом или отраслевых судовых журналов), нам как разработчикам нужно вмешаться в код.
Выясним, как программно вызвать механизм заполнения. Вся основная логика сосредоточена в модуле менеджера документа Табель. Не пытайтесь написать свой запрос к регистрам с нуля — он крайне сложен из-за учета приоритетов и вытеснений. Вместо этого используйте экспортные методы конфигурации.
Рассмотрим пример кода для программного заполнения данных в документе:
// Пример программного заполнения документа Табель
ОбъектДокумент = Документы.ТабельУчетаРабочегоВремени.СоздатьДокумент();
ОбъектДокумент.Дата = ТекущаяДата();
ОбъектДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Компания");
ОбъектДокумент.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
ОбъектДокумент.НачалоПериода = НачалоМесяца(ТекущаяДата());
ОбъектДокумент.ОкончаниеПериода = КонецМесяца(ТекущаяДата());
// Вызываем стандартную процедуру заполнения из модуля менеджера
ПараметрыЗаполнения = Документы.ТабельУчетаРабочегоВремени.ПараметрыЗаполнения();
ПараметрыЗаполнения.Организация = ОбъектДокумент.Organizatция;
// ... заполнение других параметров ...
Документы.ТабельУчетаРабочегоВремени.ЗаполнитьДанныеТабеля(ОбъектДокумент, ПараметрыЗаполнения);
// Теперь мы можем пройтись по табличной части и внести свои корректировки
Для Каждого СтрокаВремени Из ОбъектДокумент.ДанныеУчетаВремени Цикл
// Например, если у нас есть внешние данные о ремонте
Если НужноЗаменитьНаРемонт(СтрокаВремени.Сотрудник, СтрокаВремени.Дата) Тогда
СтрокаВремени.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоКоду("Р");
КонецЕсли;
КонецЦикла;
ОбъектДокумент.Записать(РежимЗаписиДокумента.Проведение);
Обратите внимание, что структура хранения данных в Табеле версии 3.1 отличается от 2.5. Данные хранятся в нескольких связанных табличных частях (основная информация и детализация по дням). При программном обходе важно сохранять целостность этих связей.
Проанализируем ситуацию из сообщения №9 на форуме: почему при установке состояния «Работа» в табеле все равно ставится «Я»?
Это происходит потому, что состояние в регистре Данные состояний сотрудников и вид времени в табеле — это разные сущности. Состояние управляет тем, занят сотрудник или нет для целей кадрового учета и СЗВ-СТАЖ. А вид времени берется из настроек графика или документов оплаты.
Если вы хотите, чтобы вместо «Я» (Явка) проставлялся ваш код, выполните следующие действия:
Данные для расчета зарплаты.Подведем итог нашему исследованию. Для автоматизации табеля на 1000+ человек в ЗУП 3.1:
ЗаполнитьДанныеТабеля модуля менеджера, а затем модифицируйте полученную коллекцию данных перед записью объекта.Помните, что Табель — это лишь отражение данных, накопленных в регистрах за месяц. Правильная настройка первичных документов избавит вас от необходимости «воевать» с автоматическим заполнением итогового документа.