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

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

При настройке программы «1С:Зарплата и управление персоналом 3.1» (ЗУП) пользователи часто сталкиваются с ситуацией, когда для нового начисления с назначением «Отпуск без оплаты» на вкладке «Учет времени» задается собственный буквенный код (вид времени), но в печатной форме табеля учета рабочего времени Т-13 программа упорно выводит стандартный код «ДБ» (или «ДО», «ОЗ»).

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

---

Выясняем причину: почему 1С:ЗУП игнорирует настройки начисления?

Для того чтобы понять логику программы, проанализируем, как система ЗУП 3.1 собирает данные для табеля. Программа ориентируется не на само начисление, указанное в кадровом документе, а на состояние сотрудника. Это состояние регистрируется в специальном регистре сведений Данные состояний сотрудников при проведении документов (например, «Отпуск без сохранения оплаты»).

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

Поскольку в регистре сведений Данные состояний сотрудников стандартный кадровый документ оставляет поле вида времени пустым, программа инициализирует его по жестко прописанному алгоритму. Ваши настройки внутри вида начисления на вкладке «Учет времени» в данном случае просто игнорируются.

Разберем по шагам, как мы можем обойти это ограничение.

---

Способ 1. Принудительное связывание через «Групповое изменение реквизитов» (Без программирования)

Этот способ является наиболее красивым и простым, так как он не требует изменения конфигурации и позволяет использовать стандартные документы «Отпуск без сохранения оплаты».

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

Пошаговый алгоритм действий:

  1. Перейдем в меню Настройка — Виды отпусков и создадим свой вид отпуска (например, «Отпуск за свой счет по соглашению сторон»).
  2. Перейдем в классификатор видов использования времени (Настройка — Виды рабочего времени) и создадим там наш уникальный буквенный код (например, «СП»).
  3. Откроем обработку «Групповое изменение реквизитов» (она находится в разделе Администрирование — Обслуживание — Корректировка данных).
  4. В поле «Изменять объект» выберем справочник Виды отпусков.
  5. Нажмем ссылку «Добавить условие отбора» и укажем наш вновь созданный вид отпуска, чтобы случайно не изменить настройки других отпусков.
  6. В списке доступных реквизитов найдем поле «Обозначение в табеле учета рабочего времени» (в метаданных это реквизит ВидВремени).
  7. В колонке «Новое значение» выберем созданный нами ранее вид времени (код «СП»).
  8. Нажмем кнопку «Изменить реквизиты».

После проведения этой несложной процедуры при регистрации документа «Отпуск без сохранения оплаты» с указанием этого вида отпуска программа запишет в регистр состояний именно ваш вид времени. В табеле Т-13 отобразится нужный вам буквенный код.

---

Способ 2. Обходной маневр через документ «Отсутствие с сохранением оплаты»

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

Реализуем этот метод по шагам:

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

Этот способ позволяет гарантированно увидеть ваш код в табеле без изменения программного кода 1С.

---

Способ 3. Использование механизма расширений (Для программистов)

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

Проанализируем программный код. Нам необходимо перехватить формирование движений по регистру сведений Данные состояний сотрудников при проведении кадрового документа.

Создадим расширение конфигурации и добавим в него обработку проведения документа ОтпускБезСохраненияОплаты. Переопределим заполнение ресурса ВидВремени в регистре состояний.

Рассмотрим пример кода, который можно применить в модуле менеджера или в обработчике проведения в расширении:


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

Важное примечание: Как только в регистре сведений Данные состояний сотрудников в поле ВидВремени окажется заполненное значение конкретного вида времени, общий модуль УчетРабочегоВремениРасширенный не будет применять стандартные жесткие правила подмены на «ДБ» или «ДО», а возьмет значение непосредственно из регистра и выведет его в табель.

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

← На главную