Почему в 1С:ЗУП 3.1 нельзя проводить несколько табелей за один период и к чему приведет отключение этого контроля?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет
← На главную

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

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

1. Техническая суть ограничения: как устроена архитектура регистров

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

Главная техническая сложность кроется в понятии «Период регистрации». В отличие от управленческих программ, где движения регистрируются датой документа, в 1С:ЗУП 3.1 период регистрации всегда жестко привязан к первому числу расчетного месяца (например, для любого табеля за ноябрь периодом регистрации в регистре запишется 01.11.202X).

Когда расчетчик пытается провести два документа по одному сотруднику в рамках одного расчетного месяца (например, Табель за первую половину месяца с 1 по 15 число и Табель за весь месяц с 1 по 30 число), в регистрах оперативного учета времени возникает конфликт. Программа видит, что на одну и ту же ключевую запись периода регистрации претендуют два независимых документа-регистратора. Чтобы избежать хаоса и задвоения движений, в модуле проведения документа срабатывает встроенный контроль пересечения периодов.

2. Последствия отключения контроля: чем рискует предприятие

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

Риск 1. Задвоение отработанных часов и сумм начислений. Если в базе одновременно провести половинный и полный табели, данные о времени сложатся в регистрах накопления. В итоге документ Начисление зарплаты и взносов применит некорректно завышенное количество отработанных дней и часов. Это спровоцирует колоссальные переплаты сотрудникам.

Риск 2. Искажение расчета среднего заработка. Расчет среднего заработка для отпусков, командировок и больничных листов напрямую считывает информацию из регистров учета времени за предыдущие 12 месяцев. Если данные о времени в каком-то месяце задвоились, то при расчете отпуска в будущем программа поделит начисления на нереальное количество дней. В результате средний заработок сотрудника будет сильно занижен, что повлечет за собой штрафы от трудовой инспекции за недоплату.

Риск 3. Проблемы с учетом НДФЛ и автоматическими перерасчетами. С введением новых правил расчета НДФЛ при каждой выплате (включая аванс), любые изменения в учете времени задним числом вызывают моментальный пересчет налога. Задвоение или некорректное изменение табеля за первую половину месяца приведет к появлению отрицательного НДФЛ («красноты») в ведомостях на выплату и искажению регламентированного отчета 6-НДФЛ.

Риск 4. Лавинообразный рост таблиц перерасчетов. Механизм Доначисления, перерасчеты при любом изменении времени регистрирует необходимость пересчитать зарплату сотрудника. Снятие контроля приведет к тому, что база данных будет перегружена миллионами фоновых записей перерасчетов. Это вызовет зависание системы при проведении итоговых документов расчета заработной платы.

3. Методически верные решения проблемы (без изменения кода)

Для корректной работы в рамках типовой методологии 1С рекомендуется использовать один из четырех проверенных сценариев.

Сценарий А. Своевременный ввод документов отклонений
Большинство проблем с табелем возникает из-за того, что сотрудники уходят на больничный или в отпуск «неожиданно» в середине месяца, а табельщик уже проставил им «Явки». Правильный подход заключается в следующем: всякий раз при отсутствии сотрудника на рабочем месте вводится документ Отсутствие (болезнь, прогул, неявка) с признаком «Причина не выяснена». В конце месяца, когда сотрудник приносит больничный лист, кадровик вводит документ Больничный лист на основании этого отсутствия. В этом случае вытеснение видов времени в регистрах отработает корректно автоматически, и пересчитывать табель вручную не придется.

Сценарий Б. Разделение табелей на первую и вторую половину месяца
Чтобы документы не пересекались по периодам, разделите учет времени на два неперекрывающихся интервала:

  1. Первый документ Табель вводится за период с 1 по 15 число (выбирается режим «За первую половину месяца»).
  2. Второй документ Табель вводится за период с 16 по последнее число месяца (выбирается режим «За вторую половину месяца»).

При такой схеме даты проведения документов не пересекаются, контроли не срабатывают, а расчетчик получает точные данные по каждому этапу выплат.

Сценарий В. Временное снятие первого табеля с проведения
Если руководству или бухгалтерии для отчетности критически важно иметь один сводный документ Табель за весь месяц целиком, используйте следующую последовательность действий:

  1. Проведите табель за первую половину месяца и рассчитайте аванс.
  2. В конце месяца перед расчетом окончательной зарплаты полностью распроведите (снимите с проведения) половинный табель.
  3. Введите и проведите итоговый Табель за весь месяц (с 1 по 30 число). Расчет аванса при этом не пострадает, так как он уже зафиксирован выплаченными ведомостями, а итоговый расчет пройдет корректно.

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

4. Технические решения для разработчиков: как автоматизировать процесс

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

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

Пример кода для обработчика проведения в расширении:


&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
        // Проверяем, что записывается итоговый табель за полный месяц
        Если ЭтотОбъект.СпособЗаполненияОтработанногоВремени = Перечисления.СпособыВводаДанныхОРабочемВремени.ЗаМесяц Тогда
            
            // Поиск проведенного табеля за первую половину этого же месяца
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ
                |	Табель.Ссылка КАК Ссылка
                |ИЗ
                |	Документ.Табель КАК Табель
                |ГДЕ
                |	Табель.ПериодРегистрации = &ПериодРегистрации
                |	И Табель.СпособЗаполненияОтработанногоВремени = &СпособЗаПрошлыйПериод
                |	И Табель.Проведен = ИСТИНА";
            
            Запрос.УстановитьПараметр("ПериодРегистрации", ЭтотОбъект.ПериодРегистрации);
            Запрос.УстановитьПараметр("СпособЗаПрошлыйПериод", Перечисления.СпособыВводаДанныхОРабочемВремени.ЗаПервуюПоловинуМесяца);
            
            РезультатЗапроса = Запрос.Выполнить();
            Если Не РезультатЗапроса.Пустой() Тогда
                Выборка = РезультатЗапроса.Выбрать();
                Пока Выборка.Следующий() Цикл
                    // Программно снимаем с проведения табель за первую половину
                    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
                    ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
                КонецЦикла;
            КонецЕсли;
            
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Кроме того, отличным решением для сохранения истории (чтобы бухгалтерия всегда видела, на основании каких данных изначально рассчитывался аванс) является использование типового механизма Версионирования объектов. Для этого выполните следующие настройки в программе:

  1. Перейдите в раздел Администрирование — Общие настройки — История изменений.
  2. Установите флаг Хранить историю изменений.
  3. Для документа Табель учета рабочего времени укажите режим хранения истории «При проведении» или «Всегда».

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

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

Это позволит проводить ручные корректировки видов времени непосредственно в документе Табель, не вызывая конфликтов с плановыми графиками работы.

Подведем итог: отключать контроль пересечения периодов регистрации программным путем «в лоб» категорически запрещено из-за критического риска порчи данных по среднему заработку и учету НДФЛ. Наиболее надежный путь — это переход на методику ввода отклонений либо использование сценария с временным снятием с проведения табелей за первую половину месяца при расчете окончательной зарплаты.

← На главную