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