Почему в 1С:ЗУП отчет «Анализ зарплаты по сотрудникам» выдает пустой результат и как это исправить?

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

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

Давайте подробно проанализируем эту ситуацию, разберем технические причины возникновения сбоя на платформе версии 8.3.27.2130 и найдем действенные способы устранения неполадки.

Симптомы и особенности проявления проблемы

В ходе анализа обращений пользователей и логов системного администрирования вырисовывается весьма специфическое поведение системы. Проанализируем ключевые особенности проявления ошибки:

  1. Зависимость от детализации данных: Если в настройках отчета снять флажок «Разворачивать по начислениям и удержаниям» или «Формировать по сотрудникам», то отчет успешно формируется и выводит данные.
  2. Зависимость от объема выборки: При установке жесткого отбора по одному конкретному сотруднику отчет также работает без сбоев. Но стоит запустить его по всей организации — система моментально возвращает пустой результат.
  3. Влияние версии платформы: Ошибка воспроизводится только на определенных релизах платформы (в частности, на 8.3.27.2130) и полностью отсутствует на более старых ветках, например, на платформе 8.3.25.1546.

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

Технический анализ кода в конфигураторе

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


&НаСервере
Процедура ЗагрузитьРезультатФормированияОтчета()
    Если Не ЭтоАдресВременногоХранилища(ФоновоеЗаданиеАдресХранилища) Тогда
        ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет'"));
        Возврат;
    КонецЕсли;
    
    Результат = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
    УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
    ФоновоеЗаданиеАдресХранилища = Неопределено;
    
    Если Результат = Неопределено Тогда
        ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет (пустой результат)'"));
        Возврат;
    КонецЕсли;
КонецПроцедуры

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

В БСП реализована оптимизация: если отчет строится по небольшому количеству данных (например, по одному сотруднику), система формирует его синхронно в контексте клиентского сеанса. Но если требуется обработать большой массив информации (весь штат сотрудников с детализацией по начислениям), выполнение переводится в асинхронный фоновый режим с использованием объекта ФоновыеЗадания. Именно в этот момент и происходит сбой.

Пошаговая диагностика с помощью «Режима отладки»

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

Выполним следующие шаги:

  1. Откроем Конфигуратор нашей базы данных.
  2. В главном меню перейдем по пути: Сервис — Параметры.
  3. Перейдем на вкладку Запуск 1С:Предприятия, а затем на вкладку Основные.
  4. В поле Параметр запуска впишем строковое значение РежимОтладки.
  5. Запустим сеанс «1С:Предприятие» в режиме отладки (клавиша F5).

При активации этого параметра БСП принудительно отключает запуск фоновых заданий для формирования отчетов. Запустим наш проблемный отчет «Анализ зарплаты по сотрудникам» со всеми включенными флагами детализации. В результате отчет успешно формируется и выводит корректные цифры! Если же мы уберем этот параметр запуска — ошибка вернется.

Этот эксперимент со 100%-й уверенностью подтверждает: проблема заключается в некорректной работе механизма фоновых заданий платформы 1С:Предприятие.

Истинная причина сбоя платформы 8.3.27

Почему же ломаются фоновые задания на платформе 8.3.27.2130? Причина кроется во встроенной системе безопасности и авторизации сеансов.

В линейке платформы 8.3.27 разработчики ужесточили правила проверки прав доступа при программном создании фоновых процессов от лица текущего пользователя. Если в вашей компании настроена аутентификация операционной системы (Active Directory / Windows Domain) и при этом у пользователя в справочнике «Пользователи» (или в конфигураторе) **не задан пароль для аутентификации 1С:Предприятия**, платформа при попытке делегирования прав новому фоновому сеансу выдает ошибку безопасности. Фоновое задание аварийно завершается, не успев записать результат компоновки в хранилище.

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

Варианты решения проблемы

Рассмотрим способы исправления ситуации от самого надежного к временным обходным путям.

Способ 1. Обновление платформы (Рекомендуемый)

Поскольку проблема носит системный характер и вызвана багом релиза платформы, компания 1С оперативно выпустила исправление. Ошибка авторизации фоновых сеансов полностью устранена в последующих сборках.

Для исправления ошибки обновите платформу 1С:Предприятие на сервере приложений и рабочих станциях клиентов до версии 8.3.27.2170 или более новой (например, актуальных релизов веток 8.3.27.x или 8.5.x).

Способ 2. Установка паролей пользователям (Временный обход)

Если оперативно обновить платформу на сервере не представляется возможным, вы можете решить проблему на уровне администрирования пользователей информационной базы. Для этого выполните следующие действия:

  1. Перейдите в раздел Администрирование — Настройки пользователей и прав — Пользователи.
  2. Для каждого активного сотрудника откройте карточку пользователя.
  3. Убедитесь, что помимо флага «Аутентификация операционной системы» также установлен флаг «Аутентификация 1С:Предприятия».
  4. Задайте пользователю пароль (даже если он продолжает беспрепятственно входить под своей учетной записью Windows). Наличие пароля в базе позволит платформе корректно авторизовать фоновые сеансы.

Способ 3. Использование параметра запуска для отдельных рабочих мест

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

Для этого в свойствах информационной базы в поле Дополнительные параметры запуска добавьте строку:

/C РежимОтладки

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

← На главную