Как обойти ошибки нового алгоритма расчета и правильно использовать настройку оптимизации в ЗУП 3.1.9?

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

С выходом версии 1С:Зарплата и управление персоналом 3.1.9 пользователи столкнулись с существенными изменениями в «движке» программы. Разработчики представили новый алгоритм оптимизации расчета зарплаты, который должен был ускорить работу с большими документами. Однако на практике это привело к ряду критических ошибок: от пустых строк в документах начисления до некорректного расчета НДФЛ и среднего заработка. Рассмотрим, как временно обойти эти проблемы и вернуть стабильность расчетным процессам.

Суть проблемы: что не так с оптимизацией в версии 3.1.9

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

Разберем основные симптомы, сигнализирующие о необходимости вмешательства:

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

Способ 1. Использование штатной настройки «Выполнять расчет зарплаты без оптимизации»

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

Пошаговая инструкция по включению режима без оптимизации:

  1. Перейдем в раздел Настройка и выберем пункт Расчет зарплаты.
  2. В открывшемся окне найдем флажок Выполнять расчет зарплаты без оптимизации.
  3. Установим данную настройку. Важно: это изменение вступает в силу немедленно и будет применяться ко всем последующим расчетам во всех документах базы.

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

Способ 2. Техническое исправление кода для программистов

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

Разберем пример исправления в модуле расчета. Если документ НачислениеЗарплаты не заполняется или выдает ошибку индекса, найдем строку кода:

СтрокаНабора = СтрокиНабораНачисленияПоИдентфикаторам[ИдентификаторСтроки];

И заменим её на обращение к свойству структуры:


СтрокаНабора = СтрокиНабораНачисленияПоИдентфикаторам[ИдентификаторСтроки.ИдентификаторСтроки];

Аналогичную правку следует применить в процедуре РассчитатьЗначениеПоказателяРасчетнаяБазаНачислений. Посмотрим на фрагмент кода, который часто вызывает «зависание» или обнуление расчетной базы:


// Было:
СтрокаНабора = СтрокиНабора[ИдентификаторСтроки];
СтрокаТаблицыНачисления = СтрокиПоИдентфикаторам[ИдентификаторСтроки];

// Должно быть:
СтрокаНабора = СтрокиНабора[ИдентификаторСтроки.ИдентификаторСтроки];
СтрокаТаблицыНачисления = СтрокиПоИдентфикаторам[ИдентификаторСтроки.ИдентификаторСтроки];

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

Особенности расчета среднего заработка и удержаний при увольнении

Рассмотрим подробнее ситуацию с увольнением сотрудников. В версии 3.1.9 часто наблюдается проблема: удержание за неотработанные дни отпуска не начисляется, если в базе нет фактического документа Отпуск (например, данные перенесены из старой базы остатками). Программа пытается найти связь с конкретным регистратором, и новый алгоритм «оптимизации» блокирует создание строки сторно или удержания.

Как действовать в этом случае:

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

Рекомендации по переходу на последующие версии

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

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

← На главную