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

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

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

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

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

Почему в табеле появляются пустые ячейки при сторнировании?

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

Однако, когда пользователь решает применить операцию «Сторнировать» в еще не закрытом периоде, логика программы нарушается по следующим причинам:

  1. Назначение механизма сторнирования. В методологии 1С операция сторно предназначена строго для исправления ошибок прошлых, уже закрытых и рассчитанных периодов. Когда месяц уже закрыт, выплаты произведены, и отчетность сдана, мы не имеем права изменять исходные документы. Только тогда мы вводим документ-исправление или документ Сторнирование начислений. Если же текущий месяц еще не закрыт и расчет зарплаты не завершен, использование сторнирования является методологической ошибкой.
  2. Зацикливание движений в регистрах. При проведении сторнирующего документа в открытом периоде система пытается одновременно учесть и сторно-записи, и восстановить исходные плановые данные. В результате в регистрах учета времени (таких как регистр накопления Данные оперативного учета рабочего времени сотрудников) возникают взаимоисключающие записи с показателями «1» и «-1». Это приводит к тому, что система «теряет» информацию о том, какой график работы должен действовать в эти дни, и оставляет ячейки в табеле пустыми.
  3. Проблема независимых регистров сведений. При проведении документов отклонений подписка на события анализирует движения и делает записи в независимый регистр сведений Параметры зарегистрированных данных учета времени сотрудников. Поскольку этот регистр является независимым, при выполнении некорректной операции сторнирования его записи могут не очиститься автоматически. Табель ориентируется на этот регистр и выдает пустые строки.
  4. Зарегистрированная ошибка платформы. В некоторых релизах ЗУП 3.1 присутствует зарегистрированный баг (например, связанный с ошибкой 30161029). Он проявляется в случаях, когда для командировок настроена доплата до оклада. При сторнировании или исправлении таких командировок программа некорректно обрабатывает плановые дни, оставляя пустые ячейки в табеле учета рабочего времени.

Ниже мы подробно разберем алгоритмы устранения этой проблемы в зависимости от конкретной ситуации на вашем предприятии.

Решение №1: Методологически корректный вариант (для открытого периода)

Если расчетный период (текущий месяц) еще не закрыт, зарплата окончательно не рассчитана и выплаты по командировке не производились в межрасчетный период, то использовать операцию «Сторнировать» категорически не рекомендуется.

Рассмотрим правильный порядок действий по шагам:

  1. Полностью удалите (или пометьте на удаление) созданный ранее документ-сторнирование командировки.
  2. Перейдите к исходному документу Командировка и просто отмените его проведение.
  3. Если бухгалтер или кадровик настаивают на том, что документ должен оставаться в базе для истории (например, под него уже были куплены билеты, забронирована гостиница и велся предварительный учет расходов), то лучшим решением будет оставить документ помеченным на удаление, а в специальном поле Комментарий написать подробное пояснение (например: «Командировка отменена в связи с производственной необходимостью, билеты возвращены»).
  4. Помните, что документы кадрового учета и расчета из ЗУП в бухгалтерскую программу («1С:Бухгалтерия предприятия») в виде документов командировок все равно не переносятся. Туда передаются только сводные данные по проводкам начисления зарплаты. Поэтому «хранить» проведенную, но фактически не состоявшуюся командировку в зарплатной базе нет никакого практического смысла.
  5. После отмены проведения исходной командировки откройте документ Табель (если вы его используете) и нажмите кнопку «Перезаполнить». Вы увидите, что дни с 23.10 по 25.10 автоматически заполнятся стандартным кодом «Я8».
  6. Пересчитайте сотрудника в документе Начисление зарплаты и взносов — плановое время и сумма оклада за эти дни начислятся в полном объеме.

Решение №2: Что делать, если командировка уже была выплачена?

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

Проанализируем корректный алгоритм действий:

  1. Полностью удалите текущий документ Табель, в котором образовались пустые ячейки. Обратите внимание: его нужно именно удалить из списка документов, а не просто очистить или перезаполнить.
  2. Проведите документ-исправление (или документ Сторнирование начислений) по проблемной командировке. Программа зафиксирует сторнирование сумм среднего заработка.
  3. Создайте новый документ Табель «с нуля» за этот месяц и заполните его по сотруднику. За счет того, что старый табель был удален, система заново обратится к плановым графикам работы и корректно заполнит дни явкой «Я8», проигнорировав конфликтные записи.
  4. Откройте или создайте документ Начисление зарплаты и взносов. Выполните расчет сотрудника. Программа начислит оклад за весь месяц (включая дни отмененной командировки) и одновременно учтет сторно начислений по среднему заработку в качестве удержания или перерасчета.

Решение №3: Техническое исправление регистров (для администраторов и программистов)

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

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

Рассмотрим пошагово техническое решение проблемы:

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

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

НаборЗаписей.Записать(); // Записываем пустой набор, тем самым очищая движения по отбору
  1. После успешной очистки независимого регистра сведений вернитесь в пользовательский режим программы.
  2. Заново перезаполните и проведите документ Табель. Пустые клетки исчезнут, и система заполнит рабочие дни кодом «Я8».
  3. Пересчитайте документ Начисление зарплаты и взносов.

Резюме и рекомендации

Подводя итоги, дадим несколько важных советов по работе с отклонениями в 1С:ЗУП 3.1, которые помогут вам избежать подобных проблем в будущем:

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

← На главную