При работе с дополнительными печатными формами в типовых конфигурациях 1С (таких как «Бухгалтерия предприятия», «Управление торговлей», «ERP Управление предприятием» и других) пользователи часто сталкиваются с предупреждением: «Не удалось определить значение параметра организации:». Примечательно, что после двоеточия в тексте ошибки обычно ничего не указано, а сама печатная форма при этом успешно формируется и выводится на экран. В Конфигураторе при обычном запуске отладки эта ошибка также никак себя не проявляет.
В этой статье мы подробно разберем технические причины возникновения этой проблемы, выясним, почему отладчик «молчит», и пошагово исправим код внешней обработки, чтобы навсегда избавиться от назойливого сообщения.
Для начала проанализируем поведение системы и выясним, как устроен этот механизм изнутри. Данное предупреждение генерируется внутри типовых общих модулей конфигурации, которые отвечают за форматирование сведений о контрагентах и организациях (например, в общем модуле ОбщегоНазначенияБПВызовСервера или ФормированиеПечатныхФорм в функции ОписаниеОрганизации()).
Эта функция принимает на вход структуру со сведениями об организации и строковую переменную, содержащую список нужных реквизитов, разделенных запятыми (например, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес"). Затем алгоритм разбивает эту строку на отдельные параметры и пытается получить их значения из структуры сведений с помощью метода Свойство().
Логика работы этого участка кода выглядит следующим образом:
Попытка
СтрокаДополнения = "";
СписокСведений.Свойство(ИмяПараметра, СтрокаДополнения);
// Дальнейшая обработка полученного значения...
Исключение
ТекстСообщения = "Не удалось определить значение параметра организации: " + ИмяПараметра;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПопытки;
Разберем детально два важных следствия такой реализации:
Попытка ... Исключение. Когда платформа сталкивается со сбойной ситуацией, выполнение программы не прерывается аварийно. Система просто перехватывает исключение, выводит предупреждающее сообщение в окно сообщений пользователя и продолжает формировать печатную форму дальше.Исключение. Чтобы отладчик среагировал на это событие, необходимо явно настроить остановку по ошибке. Кроме того, внешние печатные формы часто выполняются в фоновом задании на стороне сервера, что требует дополнительной настройки серверной отладки.Обратим внимание на ключевую деталь: в сообщении об ошибке после двоеточия нет никакого имени параметра (пустота). Это происходит из-за некорректного заполнения списка запрашиваемых полей в модуле нашей дополнительной печатной формы. Рассмотрим типичные ошибки разработчиков при формировании строки параметров:
"ПолноеНаименование,ИНН,КПП,", то при разделении строки по символу запятой последним элементом массива станет пустая строка ""."ИНН, КПП" (с пробелом перед КПП), функция выделяет параметр с ведущим пробелом: " КПП"."ИНН,,КПП" приводит к образованию пустого параметра "" между ними.Когда платформа выполняет метод СписокСведений.Свойство(ИмяПараметра, ...) и в качестве переменной ИмяПараметра передается пустая строка "" или строка с недопустимыми символами (например, ведущими пробелами), метод вызывает системную ошибку «Недопустимое значение параметра». Имена свойств в структурах 1С должны строго соответствовать правилам именования переменных (не могут начинаться с пробела, цифры или быть пустыми). Блок Исключение перехватывает этот сбой и выводит текст предупреждения с пустым именем параметра.
Для устранения этой проблемы нам потребуется отредактировать код внешней печатной формы в Конфигураторе. Выполним следующие шаги:
Откроем внешнюю обработку в Конфигураторе. Нам необходимо найти место, где формируются сведения об организации. Нажмем комбинацию клавиш Ctrl + Shift + F (глобальный поиск) или Ctrl + F (поиск в текущем модуле) и найдем все упоминания функции ОписаниеОрганизации или обращения к реквизитам организации.
Обычно проблемная строка выглядит так:
СведенияОбОрганизации = ФормированиеПечатныхФорм.СведенияОбОрганизации(Шапка.Организация, Период);
ПараметрыАдреса = "ПолноеНаименование, ИНН, КПП, ";
СтрокаОрганизации = ОписаниеОрганизации(СведенияОбОрганизации, ПараметрыАдреса);
Проанализируем переменную, содержащую список параметров. Нам необходимо привести ее к правильному формату: удалить все пробелы после запятых и избавиться от закрывающей запятой в конце строки.
Неправильный вариант:
"ПолноеНаименование, ИНН, КПП, "
Правильный вариант:
"ПолноеНаименование,ИНН,КПП"
Перепишем данный участок кода следующим образом:
СведенияОбОрганизации = ФормированиеПечатныхФорм.СведенияОбОрганизации(Шапка.Организация, Период);
// Убираем лишние пробелы и запятую на конце
ПараметрыАдреса = "ПолноеНаименование,ИНН,КПП";
СтрокаОрганизации = ОписаниеОрганизации(СведенияОбОрганизации, ПараметрыАдреса);
Если вы хотите лично убедиться в том, где именно происходил сбой, выполните следующие действия в Конфигураторе перед запуском отладки:
Теперь при попытке обработать некорректный параметр система остановит выполнение кода на строке СписокСведений.Свойство() внутри общего модуля, и вы сможете в табло вычислить значение переменной ИмяПараметра, чтобы наглядно увидеть лишний пробел или пустую строку.
После того как изменения в коде внешней обработки успешно сохранены, ее необходимо обновить в самой базе 1С:
Проверим результат работы: при повторном выводе документа на печать предупреждение больше не появится, а макет заполнится корректными данными организации.