При работе в конфигурации «1С:Зарплата и Управление Персоналом 2.5» пользователи часто сталкиваются с необходимостью зарегистрировать специфический вид отсутствия (например, суммированные дни отдыха, дополнительные дни за особые условия труда или специальные отпуска). Однако при попытке выбрать причину отсутствия в документе Отпуска организаций список выбора оказывается ограничен стандартными значениями.
Выясним причину такого поведения системы и разберем два способа решения задачи: штатный (в режиме «1С:Предприятие») и программный (с доработкой в режиме «Конфигуратор»).
Проанализируем структуру хранения данных. Поле «Причина отсутствия» в кадровом документе Отпуска организаций жестко типизировано системным перечислением ПричиныОтсутствияНаРаботеВОрганизации. В отличие от более поздних версий программы, где список видов отпусков хранится в динамическом пользовательском справочнике, в версии 2.5 это перечисление глубоко зашито в архитектуру конфигурации. Оно задействовано в следующих подсистемах:
Рассмотрим стандартный механизм, позволяющий обойтись без снятия базы с поддержки и редактирования программного кода. Если сотруднику необходимо предоставить специфический оплачиваемый отпуск, оптимально использовать механизм дополнительных отпусков.
Разберем по шагам порядок действий в режиме «1С:Предприятие»:
Основные начисления организаций. Создаем новый вид расчета путем копирования предопределенного элемента «Дополнительный оплачиваемый отпуск». На вкладке «Использование» указываем признак «Является отпуском» и выбираем нужный вид ежегодного дополнительного отпуска. На вкладке «Время» задаем буквенный код для классификатора использования рабочего времени, а на вкладке «Бухучет» — способ отражения расходов.Отпуска организаций выбираем сотрудника и стандартную причину отсутствия Отпуск ежегодный. При этом колонки основного отпуска оставляем незаполненными, а данные вносим исключительно в группу колонок «Дополнительный отпуск», выбрав только что созданный вид начисления.Начисление отпуска работникам организаций, в котором автоматически рассчитывается средний заработок по созданному виду расчета.Если требуется добавить абсолютно новую причину отсутствия (например, СуммированныеДниОтдыха), которая должна отображаться отдельной строкой в списке выбора, потребуется доработка конфигурации.
Разберем по шагам места в коде, которые необходимо изменить.
Конфигуратор, находим перечисление ПричиныОтсутствияНаРаботеВОрганизации и добавляем в него новое значение — СуммированныеДниОтдыха.ПроцедурыУправленияПерсоналом, находим процедуру заполнения доступных способов и добавляем новое значение:
СписокСпособов.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохраненияЗарплаты);
СписокСпособов.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.СуммированныеДниОтдыха);
НевыходыВОрганизациях в процедуре ОбработкаЗаполнения дополняем текст запроса и параметры для связки с планом видов расчета:
// Добавляем параметр запроса
Запрос.УстановитьПараметр(
"ОсновноеНачислениеСуммированныеДни",
ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Суммированные дни")
);
// В тексте запроса расширяем конструкцию ВЫБОР:
// | КОГДА ТЧРаботникиОрганизации.ПричинаОтсутствия = ЗНАЧЕНИЕ(Перечисление.ПричиныОтсутствияНаРаботеВОрганизации.СуммированныеДниОтдыха)
// | ТОГДА &ОсновноеНачислениеСуммированныеДни
ОтпускаОрганизаций в процедуре ПроверитьЗаполнениеСтрокиРаботникаОрганизации добавляем условие проверки:
И ПричинаОтсутствия <> Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.СуммированныеДниОтдыха
ОтпускаОрганизаций в процедуре РаботникиОрганизацииПриПолученииДанных прописываем логику доступности дат рабочего года:
ЯвляетсяСуммированнымиДнями = (ОформлениеСтроки.ДанныеСтроки.ПричинаОтсутствия = Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.СуммированныеДниОтдыха);
Если Элемент.Колонки.РабочийГодС.Видимость Тогда
ОформлениеСтроки.Ячейки.РабочийГодС.ТолькоПросмотр = ((Не ЯвляетсяЕжегоднымОтпуском) И (Не ЯвляетсяСуммированнымиДнями));
КонецЕсли;
Если Элемент.Колонки.РабочийГодПо.Видимость Тогда
ОформлениеСтроки.Ячейки.РабочийГодПо.ТолькоПросмотр = ((Не ЯвляетсяЕжегоднымОтпуском) И (Не ЯвляетсяСуммированнымиДнями));
КонецЕсли;
При внесении правок в перечисление важно не ограничиться экранными формами документа, а доработать сопутствующие механизмы:
УчетРабочегоВремени проверьте соответствие нового значения коду классификатора рабочего времени для корректного автозаполнения формы Т-13.