В процессе работы с конфигурацией 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются со специфической ошибкой при попытке автоматической рассылки расчетных листков. Проблема проявляется внезапно: отчеты, которые ранее успешно уходили сотрудникам, перестают формироваться, а в журнале регистрации или в окне сообщений появляется критическая ошибка. Текст ошибки обычно ссылается на общий модуль ВариантыОтчетов.Модуль(1736) и метод СкомпоноватьРезультат, указывая на невозможность преобразования значения к типу Булево.
Давайте проанализируем ситуацию, выясним причины возникновения данного сбоя и рассмотрим пошаговые методы его устранения, от простых манипуляций в пользовательском режиме до глубокой очистки настроек системы.
Проанализируем ситуацию: почему система выдает ошибку именно при рассылке «каждому получателю свой отчет», в то время как обычное формирование отчета в пользовательском режиме проходит без нареканий? Ошибка кроется в механизмах динамической модификации настроек компоновки данных.
Когда вы запускаете рассылку, система не просто копирует настройки отчета, а пытается на лету внедрить в них отборы по конкретному физическому лицу или сотруднику. В общем модуле ЗарплатаКадрыОтчеты происходит проверка структуры параметров. Если в настройках отчета (или варианта отчета) какой-то флаг (например, Выводить справочную информацию или Группировать по подразделениям) был изменен пользователем, а затем возвращен в исходное состояние, система может записать в хранилище значение Неопределено или пустую ссылку вместо ожидаемого логического Истина или Ложь.
При выполнении метода ОтчетОбъект.СкомпоноватьРезультат платформа пытается сопоставить эти значения, и когда код ожидает получить Булево для выполнения логического условия, но получает некорректный тип, происходит аварийное завершение процесса.
Рассмотрим наиболее эффективный способ, найденный практикующими специалистами. Этот метод позволяет «принудительно» обновить структуру настроек в базе данных без программирования. Разберем его по шагам:
Если манипуляции с флажками не помогли, проанализируем состояние системного хранилища настроек. Часто «битые» записи кэшируются для конкретного пользователя, от имени которого запускается регламентное задание рассылки. Выполним глубокую очистку:
Расчетный листок и объектом Рассылка отчетов.Иногда повреждается сама структура варианта отчета, выбранного в рассылке. Посмотрим на пример того, как можно обойти эту проблему через пересоздание объекта:
Этот метод принудительно инициирует создание новой записи в таблицах базы данных с актуальными идентификаторами типов, что устраняет ошибку Преобразование к типу Булево.
Если вышеуказанные способы не помогают, следует проанализировать техническое окружение. Ошибка может проявляться только в фоновом режиме на сервере. Рассмотрим алгоритм действий для администратора:
Очистка серверного кэша:
Необходимо остановить службу 1C:Enterprise Server Administration и очистить содержимое папок в каталоге профиля пользователя, под которым запущена служба (обычно это папки внутри Local Settings\Application Data\1C\1cv8 на сервере). Это удалит скомпилированные модули, в которых может «зависнуть» старая логика обработки параметров.
Анализ расширений конфигурации:
Даже если ваша база считается типовой, в ней могут быть активны расширения. Проанализируем их влияние. Расширения могут перехватывать работу модуля ЗарплатаКадрыОтчеты или добавлять свои поля в схему компоновки расчетного листка. Если тип добавляемого поля не определен явно, это вызовет ошибку при попытке обращения к нему в коде. Попробуйте временно отключить расширения и выполнить рассылку в тестовом режиме.
Для тех, кто хочет понять, как это выглядит в коде, приведем пример участка, где обычно происходит сбой. В модуле ВариантыОтчетов при вызове:
// Вызов стандартного метода компоновки
ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
Система переходит в процедуру ПриКомпоновкеРезультата модуля объекта отчета. Там выполняется код, аналогичный следующему:
Если ПараметрыДанных.ВыводитьСправочнуюИнформацию.Значение Тогда
// Если здесь вместо Истина/Ложь пришло Неопределено,
// возникнет ошибка преобразования к Булево
КонецЕсли;
Именно поэтому ручное переключение настроек в Нет и обратно в Да «лечит» систему — оно инициализирует корректное булевское значение в структуре настроек компоновки данных (DataCompositionSettings).
Используя данные методы, вы сможете быстро восстановить работоспособность рассылки расчетных листков и избежать претензий со стороны сотрудников и контролирующих органов.