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

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

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

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

Как 1С:ЗУП 3.1 работает с рабочим временем

Для того чтобы понять природу возникновения проблемы, проанализируем внутренние механизмы программы. В «1С:ЗУП 3.1» реализовано два принципиальных подхода к учету отработанного времени:

  1. Метод сплошной регистрации. При данном подходе в программе обязательно создается и проводится документ Табель. Рабочее время сотрудников жестко фиксируется в этом документе, и все расчеты опираются на него.
  2. Метод отклонений. Это рекомендуемый разработчиками «1С» вариант. Ввод документа Табель в этом случае не требуется. Программа рассчитывает фактически отработанное время динамически «на лету», сопоставляя назначенный сотруднику График работы (или Индивидуальный график) с зарегистрированными кадровыми отклонениями (документами Командировка, Больничный лист, Отпуск и другими).

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

Когда мы создаем документ-исправление для командировки прошлого периода, система пытается одновременно сторнировать прошлые записи по этим регистрам и записать новые данные. В этот момент может произойти конфликт блокировок или наложение периодов времени, из-за чего новые строки начислений «не видят» норму времени и остаются пустыми.

---

Основные причины, по которым не заполняется продолжительность командировки

Выясним основные причины, которые приводят к «зависанию» строк начислений в исправляемом документе:

1. Наличие скрытого или ошибочно проведенного документа «Табель»

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

2. Выходные дни в периоде командировки

Рассмотрим ситуацию, когда период командировки захватывает выходные дни (например, субботу и воскресенье). По умолчанию, согласно трудовому законодательству, выходные дни в командировке не оплачиваются по среднему заработку, если сотрудник в эти дни фактически не работал. Программа автоматически исключает их из расчета среднего заработка. Если исправляемый период изменился так, что он полностью или частично приходится на выходные дни по графику сотрудника, начисления по ним не будут автоматически заполнены на вкладке Начисления без наличия специального приказа на работу в выходные дни.

3. Ошибки в настройках приоритетов и вытеснения начислений

При обновлениях конфигурации иногда могут сбиваться настройки видов начислений. Перейдем в меню Настройка — Начисления, откроем начисление Командировка и проанализируем вкладку «Приоритет». В списке «Вытесняющие начисления» должны быть правильно указаны виды расчетов, которые могут перекрывать командировку. Если настройки приоритетов нарушены, программа не сможет корректно рассчитать фактически пришедшиеся на период командировки дни, так как они будут заблокированы основным начислением (например, Оплата по окладу).

4. Влияние флага «Доначислить зарплату при необходимости»

В форме документа-исправления на вкладке «Главное» присутствует опция «Доначислить зарплату при необходимости» (или аналогичные настройки перерасчета в зависимости от версии релиза). В некоторых релизах ветки 3.1.9–3.1.12 наблюдалась программная ошибка: при установленном флаге перерасчета оклада система конфликтовала при расчете среднего заработка, оставляя табличную часть пустой. При снятии этого флага начисления по среднему заработку сразу же рассчитывались корректно.

---

Пошаговые способы решения проблемы

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

Шаг 1. Поиск и распроведение скрытых табелей

Даже если вы уверены, что табели в компании не ведутся, обязательно проверьте их фактическое отсутствие в базе за исправляемый период:

  1. Перейдите в меню Администрирование — Обслуживание — Функции для технического специалиста (или «Все функции» в старых релизах).
  2. В списке документов найдите документ Табель.
  3. Установите отбор по проблемному сотруднику и исправляемому месяцу.
  4. Если документ найден, отмените его проведение и попробуйте заново пересчитать документ-исправление командировки.

Шаг 2. Проверка заполнения графиков работы и производственного календаря

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

Шаг 3. Использование механизма перерасчетов

Попробуйте временно отключить автоматическое доначисление зарплаты внутри самой командировки:

  1. В документе-исправлении снимите флаг «Доначислить зарплату при необходимости».
  2. Нажмите кнопку «Пересчитать сотрудника» на панели документа.
  3. Проверьте, заполнились ли дни и суммы на вкладке «Начисления». Если расчет прошел успешно, корректировку оклада за прошлый период можно будет провести отдельным документом Доначисление, перерасчет.

---

Альтернативное решение: Прямое заполнение данных учета времени (для опытных пользователей)

В крайних случаях, когда стандартные методы не помогают из-за повреждения структуры данных в старых релизах (как в случае с релизом 3.1.9.205), можно воспользоваться опытом решения проблемы через корректировку регистров накопления.

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

Ниже приведен пример концептуального кода на встроенном языке 1С, который иллюстрирует, как система регистрирует рабочие дни в данном регистре (данный код может быть использован разработчиками для создания внешней обработки восстановления учета времени):


// Создаем набор записей для регистра накопления данных табельного учета
НаборЗаписей = РегистрыНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(ВыбранныйСотрудник);
НаборЗаписей.Отбор.Период.Установить(ДатаНачалаКомандировки);

// Формируем новую запись для регистрации времени командировки
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ДатаНачалаКомандировки;
НоваяЗапись.Сотрудник = ВыбранныйСотрудник;
НоваяЗапись.Организация = ВыбраннаяОрганизация;
НоваяЗапись.ВидИспользованияВремени = Справочники.ВидыИспользованияРабочегоВремени.Командировка;
НоваяЗапись.Дней = КоличествоДнейКомандировки;
НоваяЗапись.Часов = КоличествоЧасовКомандировки;

// Записываем данные в информационную базу
Попытка
    НаборЗаписей.Записать();
Исключение
    ВызватьИсключение "Ошибка при записи данных табельного учета: " + ОписаниеОшибки();
КонецПопытки;

Важное предупреждение: Ручная правка регистров накопления через документ Перенос данных или программный код является крайней мерой. Использование таких обходов может привести к расхождениям при последующем заполнении регламентированной отчетности по труду (например, формы П-4) и расчете среднего заработка для будущих отпусков и больничных листов. Поэтому всегда отдавайте приоритет стандартным методам исправления кадровых документов.

← На главную