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

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

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

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

Архитектура учета рабочего времени в ЗУП 3.1

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

  1. Регистр сведений «Данные состояний сотрудников». Это ключевой технический регистр. Сюда записываются периоды отсутствий (отпуска, больничные, командировки). Если мы хотим понять, почему в табеле проставился код «Б» или «ОТ», нам нужно смотреть именно сюда.
  2. Регистр сведений «Состояния сотрудников». Вспомогательный регистр, который хранит текущий статус работника. Записи в нем часто коррелируют с данными предыдущего регистра.
  3. Регистр накопления «Данные оперативного учета рабочего времени сотрудников». Здесь фиксируются фактические данные, введенные документами-отклонениями и кадровыми приказами. Программа обращается к нему для формирования «картины дня».
  4. Регистр сведений «Графики работы по видам времени». В этом регистре хранится плановая информация. Если сотруднику назначен график, в котором предусмотрена «Явка» и «Ночные», система возьмет эти виды времени из данного регистра.

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

Проблема использования документа Табель при массовом учете

Проанализируем методический аспект. Профессиональное сообщество и методологи 1С рекомендуют по возможности избегать массового использования документа Табель. Рассмотрим почему:

Документ Табель в ЗУП 3.1 имеет «вытесняющий» характер. Если он проведен, то любые изменения, внесенные позже (например, пришел запоздалый больничный лист), не изменят расчет зарплаты автоматически. Бухгалтеру придется перепроводить или исправлять Табель. Для компании с 1000+ сотрудников это создает огромные риски ошибок.

Рекомендация: используйте специализированные документы для ввода «нестандартного» времени, а также может применяться внешняя печатная форма "Табель Т-13 (с итогами)" по документу "Индивидуальный график".

Способ 1: Использование документа «Данные для расчета зарплаты»

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

Разберем по шагам, как это настроить:

  1. Перейдем в раздел Настройка — Шаблоны ввода данных.
  2. Создадим новый шаблон, в котором на закладке «Виды времени» отметим нужные нам коды (например, «Ремонт» или «Обучение»).
  3. В настройках шаблона укажем, что данные вводятся списком сотрудников за период.
  4. Теперь кадровик может использовать документ Данные для расчета зарплаты, в который удобно реализовать загрузку показателей сотрудников из файла, вместо того чтобы копировать данные вручную.

После проведения такого документа, при заполнении итогового Табеля, система автоматически подтянет эти виды времени, основываясь на данных регистра накопления Данные оперативного учета рабочего времени.

Способ 2: Программная автоматизация заполнения Табеля

Если бизнес-процесс все же требует обязательного наличия документа Табель и его специфического заполнения из внешних систем (например, системы контроля управления доступом или отраслевых судовых журналов), нам как разработчикам нужно вмешаться в код.

Выясним, как программно вызвать механизм заполнения. Вся основная логика сосредоточена в модуле менеджера документа Табель. Не пытайтесь написать свой запрос к регистрам с нуля — он крайне сложен из-за учета приоритетов и вытеснений. Вместо этого используйте экспортные методы конфигурации.

Рассмотрим пример кода для программного заполнения данных в документе:


// Пример программного заполнения документа Табель
ОбъектДокумент = Документы.ТабельУчетаРабочегоВремени.СоздатьДокумент();
ОбъектДокумент.Дата = ТекущаяДата();
ОбъектДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Компания");
ОбъектДокумент.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
ОбъектДокумент.НачалоПериода = НачалоМесяца(ТекущаяДата());
ОбъектДокумент.ОкончаниеПериода = КонецМесяца(ТекущаяДата());

// Вызываем стандартную процедуру заполнения из модуля менеджера
ПараметрыЗаполнения = Документы.ТабельУчетаРабочегоВремени.ПараметрыЗаполнения();
ПараметрыЗаполнения.Организация = ОбъектДокумент.Organizatция;
// ... заполнение других параметров ...

Документы.ТабельУчетаРабочегоВремени.ЗаполнитьДанныеТабеля(ОбъектДокумент, ПараметрыЗаполнения);

// Теперь мы можем пройтись по табличной части и внести свои корректировки
Для Каждого СтрокаВремени Из ОбъектДокумент.ДанныеУчетаВремени Цикл
    // Например, если у нас есть внешние данные о ремонте
    Если НужноЗаменитьНаРемонт(СтрокаВремени.Сотрудник, СтрокаВремени.Дата) Тогда
        СтрокаВремени.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоКоду("Р");
    КонецЕсли;
КонецЦикла;

ОбъектДокумент.Записать(РежимЗаписиДокумента.Проведение);

Обратите внимание, что структура хранения данных в Табеле версии 3.1 отличается от 2.5. Данные хранятся в нескольких связанных табличных частях (основная информация и детализация по дням). При программном обходе важно сохранять целостность этих связей.

Важные нюансы работы с регистрами состояний

Проанализируем ситуацию из сообщения №9 на форуме: почему при установке состояния «Работа» в табеле все равно ставится «Я»?

Это происходит потому, что состояние в регистре Данные состояний сотрудников и вид времени в табеле — это разные сущности. Состояние управляет тем, занят сотрудник или нет для целей кадрового учета и СЗВ-СТАЖ. А вид времени берется из настроек графика или документов оплаты.

Если вы хотите, чтобы вместо «Я» (Явка) проставлялся ваш код, выполните следующие действия:

Итоги и рекомендации

Подведем итог нашему исследованию. Для автоматизации табеля на 1000+ человек в ЗУП 3.1:

  1. Не используйте ручной ввод в форму табеля. Это неэффективно и ведет к ошибкам.
  2. Используйте регистрацию отклонений. Обучите кадровиков вовремя вводить больничные и отпуска — они сами «прилетят» в табель.
  3. Внедрите шаблоны ввода данных. Для специфических работ (ремонт, обучение) создайте шаблоны, которые позволят загружать данные из внешних файлов или заполнять их списком.
  4. Для программистов: при реализации загрузки из внешних систем используйте метод ЗаполнитьДанныеТабеля модуля менеджера, а затем модифицируйте полученную коллекцию данных перед записью объекта.

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

← На главную