Почему в 1С:ЗКГУ и ЗУП 3.1.9 возникают фантомные долги прошлых лет перед сотрудниками и как это исправить?

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

Переход на новые версии конфигураций 1С:Зарплата и управление персоналом (ЗУП) и 1С:Зарплата и кадры государственного учреждения (ЗКГУ) — это всегда ответственный шаг, который может преподнести неприятные сюрпризы расчетчикам. Одним из наиболее частых и сложных сбоев при переходе на ветку релизов 3.1.9 (в частности, на релиз 3.1.9.159) стало внезапное появление «фантомных» долгов организации перед сотрудниками или наоборот. В расчетных листках за текущий месяц неожиданно начинают отображаться миллионные долги, тянущиеся из давно закрытых периодов прошлых лет (например, начала 2018 или даже 2017 года), хотя фактически все выплаты тогда были произведены вовремя и в полном объеме.

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

---

Часть 1. Почему возникают «фантомные» долги? Анализ причин

При переходе на новые редакции программы расчетчики часто сталкиваются с ситуацией, когда «плывут» остатки по взаиморасчетам. Давайте разберем три основные причины, почему это происходит именно при обновлении на версию 3.1.9:

  1. Самопроизвольное «воскрешение» прекращенных плановых начислений. При обновлении конфигурации на редакцию 3.1.9 запускаются внутренние обработчики обновления данных. Из-за архитектурных изменений в структуре хранения плановых начислений программа может некорректно интерпретировать исторические данные. В результате доплаты, надбавки или плановые начисления, которые были окончательно прекращены или сняты еще в прошлых годах, внезапно снова становятся «активными». Программа считает, что сотруднику полагалась выплата, которая не была начислена, и инициирует автоматический процесс перерасчета.
  2. Скрытый механизм автоматической регистрации перерасчетов. В решениях 1С:ЗУП и 1С:ЗКГУ редакции 3 реализован механизм отслеживания изменений «задним числом». Если программа зафиксировала изменение планового начисления сотрудника в прошлом периоде (даже если это произошло из-за ошибки обновления), она автоматически делает запись в служебную таблицу перерасчетов. При расчете зарплаты за текущий месяц система видит эти записи и принудительно пытается доначислить или сторнировать суммы за прошлые закрытые периоды. Это приводит к тому, что в текущем документе НачислениеЗарплатыИВзносов на вкладке «Доначисления, перерасчеты» появляются строки за прошлые годы, которые и формируют фантомные долги.
  3. Ошибки нового оптимизированного алгоритма расчетов в 3.1.9. Начиная с ветки 3.1.9, разработчики внедрили кардинально новый оптимизированный алгоритм расчета НДФЛ и учета взаиморасчетов, призванный ускорить проведение документов в крупных базах. Однако на начальных релизах (включая 3.1.9.159) этот алгоритм содержал критические ошибки, из-за которых в расчетных листках двоилось сальдо. Временным решением от разработчиков была настройка «Выполнять расчет зарплаты без оптимизации», но полноценно алгоритм стабилизировали только в последующих обновлениях.
  4. Аналитическая «пересортица» в регистрах накопления. Взаиморасчеты с сотрудниками в программе ведутся одновременно в нескольких регистрах накопления:
    • ВзаиморасчетыССотрудниками
    • БухгалтерскиеВзаиморасчетыССотрудниками
    • ЗарплатаКВыплате
    Если в прошлых периодах при начислении и выплате зарплаты возникло несовпадение хотя бы по одному аналитическому разрезу (например, по Статье финансирования (ИФ), Статье расходов (КОСГУ), Подразделению или Месяцу взаиморасчетов), то старый алгоритм мог это «прощать» и показывать нулевое сальдо. Новый алгоритм в 3.1.9 стал более жестко сопоставлять эти аналитики, выведя скрытые расхождения наружу в виде активных долгов.

---

Часть 2. Как обнаружить и локализовать проблему

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

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

Шаг 2. Проверка Журнала регистрации. Перейдите в раздел Администрирование — Обслуживание — Журнал регистрации. Настройте отбор по метаданным, выбрав документ НачислениеЗарплатыИВзносов за подозрительный месяц и посмотрите, кто и когда производил его изменение или перепроведение. Это позволит исключить фактор «шаловливых ручек» пользователей.

Шаг 3. Поиск аналитической пересортицы. Для выявления расхождений по аналитике воспользуемся техническим средством платформы — напишем запрос или настроим Универсальный отчет по регистру накопления ВзаиморасчетыССотрудниками. Нам нужно вывести остатки в разрезе сотрудников, статей финансирования и статей расходов.

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


ВЫБРАТЬ
    Взаиморасчеты.Сотрудник КАК Сотрудник,
    Взаиморасчеты.СтатьяФинансирования КАК СтатьяФинансирования,
    Взаиморасчеты.СтатьяРасходов КАК СтатьяРасходов,
    Взаиморасчеты.ПериодВзаиморасчетов КАК МесяцПериода,
    СУММА(Взаиморасчеты.СуммаВзаиморасчетовОстаток) КАК ОстатокДолга
ИЗ
    РегистрНакопления.ВзаиморасчетыССотрудниками.Остатки(&Период, ) КАК Взаиморасчеты
СГРУППИРОВАТЬ ПО
    Взаиморасчеты.Сотрудник,
    Взаиморасчеты.СтатьяФинансирования,
    Взаиморасчеты.СтатьяРасходов,
    Взаиморасчеты.ПериодВзаиморасчетов
ИМЕЮЩИЕ
    СУММА(Взаиморасчеты.СуммаВзаиморасчетовОстаток) <> 0

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

---

Часть 3. Пошаговые сценарии исправления фантомных долгов

Ни в коем случае не пытайтесь перепроводить или пересчитывать документы прошлых лет непосредственно в рабочей базе данных! Это неизбежно приведет к искажению сданной регламентированной отчетности по НДФЛ (6-НДФЛ) и страховым взносам (РСВ). Рассмотрим безопасные и корректные варианты исправления ситуации.

Сценарий А. Очистка зарегистрированных перерасчетов

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

  1. Перейдите в раздел Зарплата — блок Сервис — пункт Перерасчеты.
  2. В открывшейся форме вы увидите список сотрудников, по которым система зарегистрировала необходимость пересчитать прошлые периоды.
  3. Проанализируйте колонку «Период» и «Причина». Если вы видите там записи за прошлые годы (например, за 2017–2018 гг.), выделите эти строки.
  4. Нажмите кнопку Отменить (или удалите строки физически клавишей Del). Данное действие сообщает программе, что перерасчет производить не требуется, и текущие начисления не будут искажены старыми корректировками.

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


// Пример программной очистки зарегистрированных перерасчетов
НаборЗаписей = РегистрыСведений.ОчередьПерерасчетов.СоздатьНаборЗаписей();
// В реальном сценарии можно установить отбор по конкретному сотруднику или периоду
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
    ТаблицаЗаписей = НаборЗаписей.Выгрузить();
    // Удаляем только старые записи (например, старше начала текущего года)
    ГраницаДаты = НачалоГода(ТекущаяДата());
    Индекс = ТаблицаЗаписей.Количество() - 1;
    Пока Индекс >= 0 Цикл
        Строка = ТаблицаЗаписей[Индекс];
        Если Строка.Период < ГраницаДаты Тогда
            ТаблицаЗаписей.Удалить(Строка);
        КонецЕсли;
        Индекс = Индекс - 1;
    КонецЦикла;
    НаборЗаписей.Загрузить(ТаблицаЗаписей);
    НаборЗаписей.Записать();
    Сообщить("Успешно очищены старые записи очереди перерасчетов.");
КонецЕсли;

---

Сценарий Б. Схлопывание пересортицы остатков через «Перенос данных»

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

  1. Перейдите в раздел Администрирование — Перенос данных.
  2. Создайте новый документ. Номер и дату документа установите текущим числом.
  3. Нажмите кнопку Настройка состава регистров на панели документа.
  4. В появившемся окне перейдите на вкладку «Регистры накопления» и отметьте галочками три ключевых регистра взаиморасчетов:
    • Взаиморасчеты с сотрудниками
    • Бухгалтерские взаиморасчеты с сотрудниками
    • Зарплата к выплате
  5. Заполните таблицы движений регистров корректирующими записями:
    • Для закрытия пересортицы необходимо ввести парные записи: одну с видом движения «Приход» по неверной аналитике (для уменьшения положительного остатка), вторую с видом движения «Расход» (или наоборот, в зависимости от знака остатка по регистру), чтобы взаимно компенсировать расхождения.
    • Сумма по документу в целом по сотруднику должна быть равна нулю. Таким образом мы убираем разрывы в разрезе КБК/КОСГУ/Подразделений, не меняя итоговый баланс расчетов.
  6. Запишите и проведите документ. Проверьте расчетный листок сотрудника за текущий месяц — фантомный долг должен исчезнуть.

---

Сценарий В. Использование технической «нулевой» ведомости

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

  1. Создайте новый документ Ведомость в кассу (или Ведомость в банк, в зависимости от того, как обычно выплачивается зарплата сотруднику).
  2. В качестве месяца выплаты укажите текущий расчетный месяц.
  3. Нажмите кнопку Подобрать и выберите проблемного сотрудника, у которого тянутся старые долги.
  4. Программа автоматически заполнит ведомость строками. Поскольку реального долга нет, итоговая сумма к выплате в физической ведомости должна быть равна 0.
  5. Дважды кликните по сумме сотрудника в колонке «К выплате», чтобы открыть детальное окно расшифровки платежа.
  6. В открывшемся окне расшифровки вы увидите, что программа подобрала строки за разные прошлые периоды или по разным КБК: со знаком «плюс» (например, долг за организацией 15 000 руб. по ИФ 1) и со знаком «минус» (долг за сотрудником -15 000 руб. по ИФ 2).
  7. Убедитесь, что суммарный итог по расшифровке равен нулю. Проведите данную ведомость.
  8. Благодаря проведению этой «нулевой» ведомости система внутри регистров накопления произведет зачет («схлопывание») положительных и отрицательных остатков по разным аналитическим разрезам. Фантомные долги будут аннулированы, и расчетные листки станут чистыми.

---

Резюме и рекомендации по предотвращению ошибок

Для минимизации рисков возникновения подобных сбоев при последующих обновлениях баз 1С:ЗУП и 1С:ЗКГУ рекомендуем придерживаться следующих правил:

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

← На главную