В процессе ведения кадрового учета и расчета заработной платы в программе 1С:Зарплата и управление персоналом (редакция 3.1) пользователи часто сталкиваются со следующей проблемой: при попытке провести документ Табель за месяц система выдает ошибку, если ранее уже был проведен аналогичный документ за первую половину месяца (аванс). Программа жестко контролирует пересечение периодов регистрации и блокирует проведение перекрывающихся документов по одному и тому же сотруднику.
В этой статье мы подробно разберем техническое устройство данного контроля на уровне архитектуры регистров 1С, проанализируем критические последствия, к которым приведет программное отключение этой проверки, а также рассмотрим методически верные сценарии обхода ограничения как для бухгалтеров, так и для разработчиков.
Для того чтобы понять логику разработчиков фирмы 1С, нам необходимо заглянуть во внутреннюю структуру конфигурации. Документ Табель в 1С:ЗУП 3.1 — это не просто инструмент для формирования печатной формы Т-13. Он является ключевым регистратором, который делает движения по следующим важным регистрам накопления:
Данные оперативного учета рабочего времени сотрудниковДанные табельного учета рабочего времени сотрудниковГлавная техническая сложность кроется в понятии «Период регистрации». В отличие от управленческих программ, где движения регистрируются датой документа, в 1С:ЗУП 3.1 период регистрации всегда жестко привязан к первому числу расчетного месяца (например, для любого табеля за ноябрь периодом регистрации в регистре запишется 01.11.202X).
Когда расчетчик пытается провести два документа по одному сотруднику в рамках одного расчетного месяца (например, Табель за первую половину месяца с 1 по 15 число и Табель за весь месяц с 1 по 30 число), в регистрах оперативного учета времени возникает конфликт. Программа видит, что на одну и ту же ключевую запись периода регистрации претендуют два независимых документа-регистратора. Чтобы избежать хаоса и задвоения движений, в модуле проведения документа срабатывает встроенный контроль пересечения периодов.
Некоторые программисты и системные администраторы, поддавшись уговорам пользователей, пытаются обойти этот контроль через расширение конфигурации или снятие типового запрета в коде. Давайте детально проанализируем риски, к которым это приведет:
Риск 1. Задвоение отработанных часов и сумм начислений. Если в базе одновременно провести половинный и полный табели, данные о времени сложатся в регистрах накопления. В итоге документ Начисление зарплаты и взносов применит некорректно завышенное количество отработанных дней и часов. Это спровоцирует колоссальные переплаты сотрудникам.
Риск 2. Искажение расчета среднего заработка. Расчет среднего заработка для отпусков, командировок и больничных листов напрямую считывает информацию из регистров учета времени за предыдущие 12 месяцев. Если данные о времени в каком-то месяце задвоились, то при расчете отпуска в будущем программа поделит начисления на нереальное количество дней. В результате средний заработок сотрудника будет сильно занижен, что повлечет за собой штрафы от трудовой инспекции за недоплату.
Риск 3. Проблемы с учетом НДФЛ и автоматическими перерасчетами. С введением новых правил расчета НДФЛ при каждой выплате (включая аванс), любые изменения в учете времени задним числом вызывают моментальный пересчет налога. Задвоение или некорректное изменение табеля за первую половину месяца приведет к появлению отрицательного НДФЛ («красноты») в ведомостях на выплату и искажению регламентированного отчета 6-НДФЛ.
Риск 4. Лавинообразный рост таблиц перерасчетов. Механизм Доначисления, перерасчеты при любом изменении времени регистрирует необходимость пересчитать зарплату сотрудника. Снятие контроля приведет к тому, что база данных будет перегружена миллионами фоновых записей перерасчетов. Это вызовет зависание системы при проведении итоговых документов расчета заработной платы.
Для корректной работы в рамках типовой методологии 1С рекомендуется использовать один из четырех проверенных сценариев.
Сценарий А. Своевременный ввод документов отклонений
Большинство проблем с табелем возникает из-за того, что сотрудники уходят на больничный или в отпуск «неожиданно» в середине месяца, а табельщик уже проставил им «Явки». Правильный подход заключается в следующем: всякий раз при отсутствии сотрудника на рабочем месте вводится документ Отсутствие (болезнь, прогул, неявка) с признаком «Причина не выяснена». В конце месяца, когда сотрудник приносит больничный лист, кадровик вводит документ Больничный лист на основании этого отсутствия. В этом случае вытеснение видов времени в регистрах отработает корректно автоматически, и пересчитывать табель вручную не придется.
Сценарий Б. Разделение табелей на первую и вторую половину месяца
Чтобы документы не пересекались по периодам, разделите учет времени на два неперекрывающихся интервала:
Табель вводится за период с 1 по 15 число (выбирается режим «За первую половину месяца»).Табель вводится за период с 16 по последнее число месяца (выбирается режим «За вторую половину месяца»).При такой схеме даты проведения документов не пересекаются, контроли не срабатывают, а расчетчик получает точные данные по каждому этапу выплат.
Сценарий В. Временное снятие первого табеля с проведения
Если руководству или бухгалтерии для отчетности критически важно иметь один сводный документ Табель за весь месяц целиком, используйте следующую последовательность действий:
Табель за весь месяц (с 1 по 30 число). Расчет аванса при этом не пострадает, так как он уже зафиксирован выплаченными ведомостями, а итоговый расчет пройдет корректно.Сценарий Г. Отказ от документа «Табель» в пользу отчетов
Разработчики 1С:ЗУП 3.1 позиционируют документ Табель как крайнее средство, предназначенное только для сложных случаев (например, когда нужно разделить часы явки по различным проектам, видам работ или источникам финансирования). Если у ваших сотрудников простые графики (пятидневка, сменные графики), вводить документ Табель вообще не нужно. Программа прекрасно рассчитывает время на основании графиков сотрудников и введенных документов отклонений (отпусков, больничных, командировок). Для получения печатной формы Т-13 в таком случае используется одноименный отчет Табель учета рабочего времени.
Если специфика вашего предприятия требует обязательного наличия обоих документов в системе и ручные манипуляции со снятием проведения недопустимы, можно разработать расширение конфигурации. Оно автоматизирует временное распроведение предыдущего документа.
Рассмотрим пример программной логики в расширении. При проведении общего табеля за месяц мы можем программно находить и временно распроводить табель за первую половину месяца, чтобы избежать конфликта транзакций.
Пример кода для обработчика проведения в расширении:
&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
// Проверяем, что записывается итоговый табель за полный месяц
Если ЭтотОбъект.СпособЗаполненияОтработанногоВремени = Перечисления.СпособыВводаДанныхОРабочемВремени.ЗаМесяц Тогда
// Поиск проведенного табеля за первую половину этого же месяца
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Табель.Ссылка КАК Ссылка
|ИЗ
| Документ.Табель КАК Табель
|ГДЕ
| Табель.ПериодРегистрации = &ПериодРегистрации
| И Табель.СпособЗаполненияОтработанногоВремени = &СпособЗаПрошлыйПериод
| И Табель.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("ПериодРегистрации", ЭтотОбъект.ПериодРегистрации);
Запрос.УстановитьПараметр("СпособЗаПрошлыйПериод", Перечисления.СпособыВводаДанныхОРабочемВремени.ЗаПервуюПоловинуМесяца);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Программно снимаем с проведения табель за первую половину
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Кроме того, отличным решением для сохранения истории (чтобы бухгалтерия всегда видела, на основании каких данных изначально рассчитывался аванс) является использование типового механизма Версионирования объектов. Для этого выполните следующие настройки в программе:
Хранить историю изменений.Табель учета рабочего времени укажите режим хранения истории «При проведении» или «Всегда».После включения этой настройки вы всегда сможете открыть итоговый табель и через отчет по версиям посмотреть, кто, когда и какие именно часы корректировал в течение расчетного месяца.
Также помните о смежном контроле соответствия планового времени фактическому. Если в вашей организации часто возникают ситуации, когда фактический табель расходится с графиками и программа выдает ошибки, вы можете отключить этот контроль в пользовательском режиме:
Проверять соответствие фактического времени плановому.Это позволит проводить ручные корректировки видов времени непосредственно в документе Табель, не вызывая конфликтов с плановыми графиками работы.
Подведем итог: отключать контроль пересечения периодов регистрации программным путем «в лоб» категорически запрещено из-за критического риска порчи данных по среднему заработку и учету НДФЛ. Наиболее надежный путь — это переход на методику ввода отклонений либо использование сценария с временным снятием с проведения табелей за первую половину месяца при расчете окончательной зарплаты.