После очередного обновления программного комплекса 1С:Предприятие многие системные администраторы и программисты сталкиваются со странным поведением типовых отчетов. В частности, в конфигурации «Зарплата и управление персоналом» (ЗУП) редакции 3.1 при формировании отчета «Анализ зарплаты по сотрудникам» (а также «Анализ начислений и удержаний») система выдает ошибку: «Не удалось сформировать отчет (пустой результат)». При этом использование стандартных настроек отчета не решает проблему.
Давайте подробно проанализируем эту ситуацию, разберем технические причины возникновения сбоя на платформе версии 8.3.27.2130 и найдем действенные способы устранения неполадки.
В ходе анализа обращений пользователей и логов системного администрирования вырисовывается весьма специфическое поведение системы. Проанализируем ключевые особенности проявления ошибки:
8.3.27.2130) и полностью отсутствует на более старых ветках, например, на платформе 8.3.25.1546.Эти косвенные признаки указывают на то, что проблема кроется не в самих данных информационной базы и не в коде макета компоновки данных (СКД), а в механизмах взаимодействия платформы с сервером приложений при выполнении тяжелых запросов.
Для того чтобы понять, где именно происходит сбой, обратимся к конфигуратору. В общем модуле отчетов Библиотеки Стандартных Подсистем (БСП) за вывод данного предупреждения отвечает специализированная процедура. Посмотрим на этот участок кода:
&НаСервере
Процедура ЗагрузитьРезультатФормированияОтчета()
Если Не ЭтоАдресВременногоХранилища(ФоновоеЗаданиеАдресХранилища) Тогда
ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет'"));
Возврат;
КонецЕсли;
Результат = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
ФоновоеЗаданиеАдресХранилища = Неопределено;
Если Результат = Неопределено Тогда
ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет (пустой результат)'"));
Возврат;
КонецЕсли;
КонецПроцедуры
Как мы видим, адрес временного хранилища существует и определяется корректно. Однако при попытке извлечь из него данные с помощью функции ПолучитьИзВременногоХранилища система возвращает значение Неопределено. Это означает, что фоновое задание, которое должно было рассчитать данные отчета и записать их во временное хранилище, аварийно завершило свою работу или не смогло передать результат основному сеансу.
В БСП реализована оптимизация: если отчет строится по небольшому количеству данных (например, по одному сотруднику), система формирует его синхронно в контексте клиентского сеанса. Но если требуется обработать большой массив информации (весь штат сотрудников с детализацией по начислениям), выполнение переводится в асинхронный фоновый режим с использованием объекта ФоновыеЗадания. Именно в этот момент и происходит сбой.
Для подтверждения гипотезы о сбое фонового выполнения проведем простой технический эксперимент. Заставим систему выполнять формирование отчета непосредственно в основном сеансе, минуя запуск фоновых задач.
Выполним следующие шаги:
РежимОтладки.При активации этого параметра БСП принудительно отключает запуск фоновых заданий для формирования отчетов. Запустим наш проблемный отчет «Анализ зарплаты по сотрудникам» со всеми включенными флагами детализации. В результате отчет успешно формируется и выводит корректные цифры! Если же мы уберем этот параметр запуска — ошибка вернется.
Этот эксперимент со 100%-й уверенностью подтверждает: проблема заключается в некорректной работе механизма фоновых заданий платформы 1С:Предприятие.
Почему же ломаются фоновые задания на платформе 8.3.27.2130? Причина кроется во встроенной системе безопасности и авторизации сеансов.
В линейке платформы 8.3.27 разработчики ужесточили правила проверки прав доступа при программном создании фоновых процессов от лица текущего пользователя. Если в вашей компании настроена аутентификация операционной системы (Active Directory / Windows Domain) и при этом у пользователя в справочнике «Пользователи» (или в конфигураторе) **не задан пароль для аутентификации 1С:Предприятия**, платформа при попытке делегирования прав новому фоновому сеансу выдает ошибку безопасности. Фоновое задание аварийно завершается, не успев записать результат компоновки в хранилище.
Аналогичная проблема на этой платформе может блокировать и другие важные механизмы: полнотекстовый поиск, фоновое обновление классификаторов, загрузку валют и групповое проведение документов.
Рассмотрим способы исправления ситуации от самого надежного к временным обходным путям.
Поскольку проблема носит системный характер и вызвана багом релиза платформы, компания 1С оперативно выпустила исправление. Ошибка авторизации фоновых сеансов полностью устранена в последующих сборках.
Для исправления ошибки обновите платформу 1С:Предприятие на сервере приложений и рабочих станциях клиентов до версии 8.3.27.2170 или более новой (например, актуальных релизов веток 8.3.27.x или 8.5.x).
Если оперативно обновить платформу на сервере не представляется возможным, вы можете решить проблему на уровне администрирования пользователей информационной базы. Для этого выполните следующие действия:
В качестве экстренной меры для ключевых пользователей (например, главного бухгалтера или расчетчика зарплаты), которым необходимо срочно сдать отчетность, можно прописать параметр запуска индивидуально в настройках запуска базы в окне запуска 1С.
Для этого в свойствах информационной базы в поле Дополнительные параметры запуска добавьте строку:
/C РежимОтладки
После этого отчеты у данного пользователя начнут формироваться без использования фоновых заданий, напрямую на клиенте/сервере, что позволит временно обойти технический сбой платформы до планового обновления всей системы.