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