Как исправить ошибку с лишним рабочим днем при расчете среднего заработка и сбой ОбработкаПолученияДанныхПодразделенийОрганизаций в 1С:ЗУП 3.1?

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

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

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

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

---

Часть 1. Проблема «1 лишнего рабочего дня» в расчете среднего заработка

Рассмотрим детально классический сценарий. В апреле у сотрудника оформлен отпуск в середине месяца. До отпуска и после отпуска в календаре сотрудника стоят оплачиваемые нерабочие дни (ОНД). Логическая цепочка состояний сотрудника выглядит следующим образом:

  1. Начало месяца: Оплачиваемые нерабочие дни (код времени в табеле — «ОН»).
  2. Середина месяца: Ежегодный оплачиваемый отпуск (код времени в табеле — «ОТ»).
  3. Конец месяца: Снова оплачиваемые нерабочие дни («ОН»).

Согласно разъяснениям Министерства труда РФ (в частности, письму № 14-1/В-585), периоды оплачиваемых нерабочих дней и начисленные за них суммы должны полностью исключаться из расчета среднего заработка. В программе 1С:ЗУП 3.1 для выполнения этого требования в настройках расчета зарплаты активируется опция «Учитывать оплачиваемое нерабочее время и суммы в среднем заработке» (флаг должен быть снят).

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

Однако при проведении документа НачислениеЗарплаты программа делает запись в регистр накопления Данные о времени для расчета среднего (общий), в которой для этого сотрудника фигурирует 1 рабочий день. Это грубая ошибка, которая искусственно завышает количество дней в знаменателе формулы расчета среднего и, как следствие, занижает будущие выплаты (отпускные, командировочные).

Выясняем причину программного сбоя

Проанализируем логику работы конфигурации. При проведении расчетов система обращается к специализированной процедуре ИсключитьОплачиваемыеНерабочиеДни, которая отвечает за фильтрацию и вычитание периодов ОНД из общего фонда рабочего времени для среднего заработка. Алгоритм сопоставляет периоды различных видов начислений и отсутствий.

При переходе границ между вытесняющими периодами в коде запроса (при стыковке интервалов «ОНД $\rightarrow$ Отпуск» и «Отпуск $\rightarrow$ ОНД») возникает логическая ошибка. Программа некорректно обрабатывает границу стыка периодов. Из-за этого первый календарный день оплачиваемых нерабочих дней, следующих сразу за датой окончания отпуска, ошибочно воспринимается системой как обычный рабочий день. Алгоритм просто «теряет» этот стыковой день, в результате чего он записывается в регистр накопления как отработанный.

---

Способы исправления ошибки с лишним днем

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

Способ А. Ручная корректировка в калькуляторе расчета среднего заработка

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

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

Способ Б. Использование документа «Перенос данных» для системного исправления

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

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

Способ В. Перепроведение документов и обновление данных среднего заработка

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

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

Способ Г. Программная корректировка через расширение конфигурации (для разработчиков)

Если в вашей организации есть штатный программист или обслуживающий специалист, оптимальным решением будет создание небольшого расширения. Это позволит исправить некорректное сопоставление периодов в процедуре ИсключитьОплачиваемыеНерабочиеДни общего модуля УчетСреднегоЗаработка.

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


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

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

---

Часть 2. Ошибка «ОбработкаПолученияДанныхПодразделенийОрганизаций» при открытии начислений

Вторая проблема, которая часто шла рука об руку с расчетами в релизе 3.1.14.97 — это аварийное завершение работы программы при попытке открыть или провести документ НачислениеЗарплаты. Программа вываливалась со следующей ошибкой:

Метод объекта не обнаружен: ОбработкаПолученияДанныхПодразделенийОрганизаций

Выясняем причину программного сбоя

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

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

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

---

Способы обхода и устранения ошибки подразделений

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

  1. Переход на Тонкий клиент. Закройте программу и измените настройки запуска информационной базы в окне запуска 1С. В поле «Режим запуска» установите значение «Тонкий клиент» вместо «Толстый клиент». Это самое быстрое решение, не требующее обновлений или изменения программного кода.
  2. Использование x64 платформы. Установите на рабочие станции пользователей клиентское приложение платформы 1С:Предприятие x86-64 (64-битная версия). Это повысит общую стабильность системы и полностью исключит проявление этой ошибки.
  3. Установка официальных исправлений (патчей) или обновление конфигурации. Фирма 1С оперативно выпустила соответствующий патч для релиза 3.1.14.97, а в последующих релизах линейки (начиная с 3.1.14.110) данный баг был устранен на уровне исходного кода конфигурации. Обновите программу до актуального стабильного релиза.

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

← На главную