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