При подготовке и выгрузке расчета 4-ФСС пользователи и программисты нередко сталкиваются с ситуацией, когда процесс формирования электронного файла внезапно прерывается сообщением: «Не удалось сформировать тексты выгрузки! Для исправления ошибок используйте окно навигации по ошибкам. Ошибок в отчете: 1. Выгрузка прервана». При этом окно навигации по ошибкам остается пустым, и программа не указывает на конкретную ячейку или реквизит, вызвавший сбой.
Разберем детально, почему возникает данная ситуация, как локализовать место падения с помощью встроенных инструментов платформы и какими способами устранить ошибку.
Проанализируем архитектуру подсистемы регламентированной отчетности. Процедура формирования выгрузки в формате XML инициируется через документ ВыгрузкаРегламентированныхОтчетов или специализированные экспортные процедуры модуля формы отчета. Формирование узлов XML-документа помещено в блок перехвата исключений:
Попытка
// Алгоритм сбора данных и формирования структуры выгрузки
Исключение
// Фиксация факта прерывания выгрузки без расшифровки пользователю
Отказ = Истина;
Сообщить("Выгрузка прервана");
КонецПопытки;
Если внутри этого блока происходит критический сбой (например, обращение к несуществующему реквизиту, синтаксическая ошибка конкатенации строк, деление на ноль или передача некорректного параметра в строковые функции платформы), типовой механизм не выводит стандартное окно с описанием ошибки. Вместо этого он лишь сигнализирует пользователю, что выгрузка не удалась. Поэтому для нахождения истинной причины необходимо заглянуть внутрь процесса.
Рассмотрим два основных метода, которые позволяют точно узнать строку и причину сбоя, не гадая по косвенным признакам:
Поскольку ошибка возникает внутри блока Попытка ... Исключение, стандартный запуск отладки ничего не покажет. Выполним следующие действия в Конфигураторе:
Перейдем в главное меню: Отладка -> Остановка по ошибке...
Установим флаг Останавливаться по ошибке. Обязательно снимем ограничение «Только по необрабатываемым исключениям» (необходимо включить перехват всех ошибок, включая обрабатываемые).
Запустим программу в режиме отладки и повторим выгрузку 4-ФСС. Платформа остановит выполнение программы именно на той строке исходного кода, где происходит исключение, до перехода в ветку Исключение.
Откроем Журнал регистрации в рабочей или тестовой информационной базе. Установим фильтр по времени выгрузки и уровню событий Ошибка. В ряде релизов типовых конфигураций перед завершением процедуры выгрузки полное описание системного сбоя записывается в лог.
В некоторых релизах конфигураций (в частности, в ветке 1С:ЗУП 2.5 при смене форматов отчетности) ошибка крылась непосредственно в типовом коде обработки титульного листа отчета. При парсинге адреса организации с помощью функции СтрЧислоВхождений в строке конкатенации разработчиками был допущен синтаксический огрех — наличие лишнего оператора сложения (знака +) либо некорректно переданный параметр разделителя.
Если отладчик остановился в модуле регламентированного отчета на блоке разбора контактной информации, проверим корректность строковых выражений:
// Пример проблемного участка при сборке параметров адреса
СтрокаАдреса = СокрЛП(ПараметрыТитула.Адрес) + ; // Лишний оператор сложения вызывает ошибку синтаксиса/исполнения
КоличествоРазделителей = СтрЧислоВхождений(ТитулАдрес, ",");
Удалим лишние символы сложения в строке формирования реквизита и проверим правильность вызова функций подсчета вхождений.
Если конфигурация находится на поддержке без возможности изменения кода или ошибка вызвана некорректным разбором строки, выясним причину в учетных данных. Функции типовой выгрузки при заполнении XML опираются на строго определенный формат адреса с заданным количеством запятых:
СтрЧислоВхождений по запятым дает неверное количество составляющих, из-за чего последующее обращение по индексу массива вызывает ошибку платформы «Индекс находится за границами массива».Посмотрим на дополнительные параметры, отсутствие которых приводит к падению формирования XML-документа:
Если регламентированные сроки сдачи отчета подходят к концу, а возможность исправить конфигурацию в режиме программиста отсутствует, воспользуемся следующими практическими путями:
.erf. Загрузим актуальный внешний отчет через справочник Регламентированные отчеты без полного обновления конфигурации.