При работе в программе «1С:Зарплата и управление персоналом» (редакция 3.1) расчетчики периодически сталкиваются со следующей ситуацией: в прошлых периодах сотруднику была оформлена командировка, однако возникла необходимость ее скорректировать (например, изменились даты поездки или количество дней). При вводе документа-исправления на вкладке «Начисления» автоматически заполняется только сам скорректированный период командировки, но показатели продолжительности (дни и часы) остаются пустыми. Следовательно, программа не производит автоматический расчет среднего заработка, хотя сторнирование прошлого периода отражается верно.
В этой статье мы подробно разберем, как устроена система учета времени в программе, почему возникает данный сбой при исправлении кадровых документов-отклонений и какими методами можно решить эту проблему без ручного вмешательства в системные регистры сведений и накопления.
Для того чтобы понять природу возникновения проблемы, проанализируем внутренние механизмы программы. В «1С:ЗУП 3.1» реализовано два принципиальных подхода к учету отработанного времени:
Табель. Рабочее время сотрудников жестко фиксируется в этом документе, и все расчеты опираются на него.Табель в этом случае не требуется. Программа рассчитывает фактически отработанное время динамически «на лету», сопоставляя назначенный сотруднику График работы (или Индивидуальный график) с зарегистрированными кадровыми отклонениями (документами Командировка, Больничный лист, Отпуск и другими).При проведении любых документов-отклонений система автоматически делает записи в служебные регистры накопления и сведений, в числе которых ключевыми являются:
Данные табельного учета рабочего времени сотрудников (регистр накопления);Параметры зарегистрированных данных учета времени сотрудников (регистр сведений).Когда мы создаем документ-исправление для командировки прошлого периода, система пытается одновременно сторнировать прошлые записи по этим регистрам и записать новые данные. В этот момент может произойти конфликт блокировок или наложение периодов времени, из-за чего новые строки начислений «не видят» норму времени и остаются пустыми.
---
Выясним основные причины, которые приводят к «зависанию» строк начислений в исправляемом документе:
Если в вашей организации принято вести учет методом отклонений (то есть документы Табель не создаются), расчетчик мог случайно создать или провести данный документ за прошлый месяц (например, для проверки или при выгрузке данных). Документ Табель имеет наивысший приоритет в системе. Если за исправляемый период существует проведенный табель, программа при расчете новой командировки будет брать данные исключительно из него, игнорируя новые плановые отклонения. В результате исправление командировки не может определить свои рабочие дни.
Рассмотрим ситуацию, когда период командировки захватывает выходные дни (например, субботу и воскресенье). По умолчанию, согласно трудовому законодательству, выходные дни в командировке не оплачиваются по среднему заработку, если сотрудник в эти дни фактически не работал. Программа автоматически исключает их из расчета среднего заработка. Если исправляемый период изменился так, что он полностью или частично приходится на выходные дни по графику сотрудника, начисления по ним не будут автоматически заполнены на вкладке Начисления без наличия специального приказа на работу в выходные дни.
При обновлениях конфигурации иногда могут сбиваться настройки видов начислений. Перейдем в меню Настройка — Начисления, откроем начисление Командировка и проанализируем вкладку «Приоритет». В списке «Вытесняющие начисления» должны быть правильно указаны виды расчетов, которые могут перекрывать командировку. Если настройки приоритетов нарушены, программа не сможет корректно рассчитать фактически пришедшиеся на период командировки дни, так как они будут заблокированы основным начислением (например, Оплата по окладу).
В форме документа-исправления на вкладке «Главное» присутствует опция «Доначислить зарплату при необходимости» (или аналогичные настройки перерасчета в зависимости от версии релиза). В некоторых релизах ветки 3.1.9–3.1.12 наблюдалась программная ошибка: при установленном флаге перерасчета оклада система конфликтовала при расчете среднего заработка, оставляя табличную часть пустой. При снятии этого флага начисления по среднему заработку сразу же рассчитывались корректно.
---
Рассмотрим последовательность действий, которые помогут восстановить корректный расчет без рискованного ручного редактирования системных регистров сведений.
Даже если вы уверены, что табели в компании не ведутся, обязательно проверьте их фактическое отсутствие в базе за исправляемый период:
Табель.Убедитесь, что за прошлый период, в котором происходит исправление, полностью заполнен Производственный календарь и индивидуальный или общий График работы сотрудника. Если в результате системного сбоя норма времени по графику обнулилась, программа не сможет рассчитать командировочные дни.
Попробуйте временно отключить автоматическое доначисление зарплаты внутри самой командировки:
Доначисление, перерасчет.---
В крайних случаях, когда стандартные методы не помогают из-за повреждения структуры данных в старых релизах (как в случае с релизом 3.1.9.205), можно воспользоваться опытом решения проблемы через корректировку регистров накопления.
Если в компании категорически не используются табели, но расчет требует жесткой привязки отработанного времени, можно программно или с помощью документа Перенос данных внести корректирующие записи в регистр накопления Данные табельного учета рабочего времени сотрудников.
Ниже приведен пример концептуального кода на встроенном языке 1С, который иллюстрирует, как система регистрирует рабочие дни в данном регистре (данный код может быть использован разработчиками для создания внешней обработки восстановления учета времени):
// Создаем набор записей для регистра накопления данных табельного учета
НаборЗаписей = РегистрыНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(ВыбранныйСотрудник);
НаборЗаписей.Отбор.Период.Установить(ДатаНачалаКомандировки);
// Формируем новую запись для регистрации времени командировки
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ДатаНачалаКомандировки;
НоваяЗапись.Сотрудник = ВыбранныйСотрудник;
НоваяЗапись.Организация = ВыбраннаяОрганизация;
НоваяЗапись.ВидИспользованияВремени = Справочники.ВидыИспользованияРабочегоВремени.Командировка;
НоваяЗапись.Дней = КоличествоДнейКомандировки;
НоваяЗапись.Часов = КоличествоЧасовКомандировки;
// Записываем данные в информационную базу
Попытка
НаборЗаписей.Записать();
Исключение
ВызватьИсключение "Ошибка при записи данных табельного учета: " + ОписаниеОшибки();
КонецПопытки;
Важное предупреждение: Ручная правка регистров накопления через документ Перенос данных или программный код является крайней мерой. Использование таких обходов может привести к расхождениям при последующем заполнении регламентированной отчетности по труду (например, формы П-4) и расчете среднего заработка для будущих отпусков и больничных листов. Поэтому всегда отдавайте приоритет стандартным методам исправления кадровых документов.