С выходом версии 1С:Зарплата и управление персоналом 3.1.9 пользователи столкнулись с существенными изменениями в «движке» программы. Разработчики представили новый алгоритм оптимизации расчета зарплаты, который должен был ускорить работу с большими документами. Однако на практике это привело к ряду критических ошибок: от пустых строк в документах начисления до некорректного расчета НДФЛ и среднего заработка. Рассмотрим, как временно обойти эти проблемы и вернуть стабильность расчетным процессам.
Новый механизм оптимизации задумывался как способ минимизировать количество обращений к базе данных за счет активного кэширования данных в оперативной памяти. Проблема заключается в том, что при определенных условиях (например, сложная иерархия начислений или наличие зависимых показателей) программа нарушает последовательность расчета. В результате показатели, которые должны рассчитываться на основании уже вычисленных сумм, получают нулевые значения или используют неактуальные данные.
Разберем основные симптомы, сигнализирующие о необходимости вмешательства:
НачислениеЗарплаты заполняется не полностью или выбрасывает синтаксические ошибки.Увольнение не подтягиваются данные по сдельной оплате или не отрабатывает удержание за использованный авансом отпуск.Для оперативного исправления ситуации разработчики 1С добавили специальный «переключатель», который возвращает программу к алгоритмам расчета, использовавшимся в версии 3.1.8. Проанализируем, как активировать эту возможность.
Пошаговая инструкция по включению режима без оптимизации:
Рассмотрим ситуацию, когда эта галка жизненно необходима. Например, если в организации практикуется сложный расчет сверхурочных. Как показывает практика, без этой настройки часы по начислениям Сверхурочные и СверхурочныеВКомандировке могут складываться ошибочно, дублируя суммы в обеих строках. Установка флажка возвращает корректное разделение периодов и сумм.
Если включение настройки по каким-то причинам не помогает или требуется точечное исправление в расширении (например, для сохранения скорости расчета на больших объемах данных), проанализируем техническую причину сбоя. Выясним причину: в новом коде объекты ИдентификаторСтроки стали передаваться как структуры, в то время как некоторые процедуры все еще ожидают простое числовое значение индекса.
Разберем пример исправления в модуле расчета. Если документ НачислениеЗарплаты не заполняется или выдает ошибку индекса, найдем строку кода:
СтрокаНабора = СтрокиНабораНачисленияПоИдентфикаторам[ИдентификаторСтроки];
И заменим её на обращение к свойству структуры:
СтрокаНабора = СтрокиНабораНачисленияПоИдентфикаторам[ИдентификаторСтроки.ИдентификаторСтроки];
Аналогичную правку следует применить в процедуре РассчитатьЗначениеПоказателяРасчетнаяБазаНачислений. Посмотрим на фрагмент кода, который часто вызывает «зависание» или обнуление расчетной базы:
// Было:
СтрокаНабора = СтрокиНабора[ИдентификаторСтроки];
СтрокаТаблицыНачисления = СтрокиПоИдентфикаторам[ИдентификаторСтроки];
// Должно быть:
СтрокаНабора = СтрокиНабора[ИдентификаторСтроки.ИдентификаторСтроки];
СтрокаТаблицыНачисления = СтрокиПоИдентфикаторам[ИдентификаторСтроки.ИдентификаторСтроки];
Эти правки позволяют программе корректно сопоставлять данные в табличных частях документа даже при включенном механизме оптимизации. Однако помните, что внесение изменений непосредственно в конфигурацию крайне не рекомендуется — используйте механизм расширений.
Рассмотрим подробнее ситуацию с увольнением сотрудников. В версии 3.1.9 часто наблюдается проблема: удержание за неотработанные дни отпуска не начисляется, если в базе нет фактического документа Отпуск (например, данные перенесены из старой базы остатками). Программа пытается найти связь с конкретным регистратором, и новый алгоритм «оптимизации» блокирует создание строки сторно или удержания.
Как действовать в этом случае:
Сторно и ссылкой на исправляемый документ. При отсутствии документа-основания в текущей базе механизм может давать сбой.Проанализируем стратегию работы с версией 3.1.9. Данная версия признана экспертами переходной и достаточно нестабильной в плане алгоритмов производительности. Если ваша база содержит тысячи сотрудников и сложные формулы расчета (например, с использованием РасчетнаяБаза за разные периоды), рекомендуется:
Недостаточно памяти, так как кэш данных не всегда очищается своевременно.Таким образом, использование флажка Выполнять расчет зарплаты без оптимизации — это не признак «устаревания», а необходимая мера безопасности для сохранения корректности учета в периоды обновлений. Совместными усилиями бухгалтера и программиста можно минимизировать риски, используя этот рычаг управления движком 1С.