Как исправить ошибку «Не удалось определить значение параметра организации» в печатной форме 1С?

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

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

В этой статье мы подробно разберем технические причины возникновения этой проблемы, выясним, почему отладчик «молчит», и пошагово исправим код внешней обработки, чтобы навсегда избавиться от назойливого сообщения.

Почему возникает ошибка и почему печать продолжает работать?

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

Эта функция принимает на вход структуру со сведениями об организации и строковую переменную, содержащую список нужных реквизитов, разделенных запятыми (например, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес"). Затем алгоритм разбивает эту строку на отдельные параметры и пытается получить их значения из структуры сведений с помощью метода Свойство().

Логика работы этого участка кода выглядит следующим образом:


Попытка
    СтрокаДополнения = "";
    СписокСведений.Свойство(ИмяПараметра, СтрокаДополнения);
    // Дальнейшая обработка полученного значения...
Исключение
    ТекстСообщения = "Не удалось определить значение параметра организации: " + ИмяПараметра;
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПопытки;

Разберем детально два важных следствия такой реализации:

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

Выясняем причину: почему имя параметра пустое?

Обратим внимание на ключевую деталь: в сообщении об ошибке после двоеточия нет никакого имени параметра (пустота). Это происходит из-за некорректного заполнения списка запрашиваемых полей в модуле нашей дополнительной печатной формы. Рассмотрим типичные ошибки разработчиков при формировании строки параметров:

  1. Лишняя запятая в конце строки. Если строка параметров передается в функцию как "ПолноеНаименование,ИНН,КПП,", то при разделении строки по символу запятой последним элементом массива станет пустая строка "".
  2. Пробелы после запятых. Если разработчик написал "ИНН, КПП" (с пробелом перед КПП), функция выделяет параметр с ведущим пробелом: " КПП".
  3. Двойные запятые внутри строки. Например, строка "ИНН,,КПП" приводит к образованию пустого параметра "" между ними.

Когда платформа выполняет метод СписокСведений.Свойство(ИмяПараметра, ...) и в качестве переменной ИмяПараметра передается пустая строка "" или строка с недопустимыми символами (например, ведущими пробелами), метод вызывает системную ошибку «Недопустимое значение параметра». Имена свойств в структурах 1С должны строго соответствовать правилам именования переменных (не могут начинаться с пробела, цифры или быть пустыми). Блок Исключение перехватывает этот сбой и выводит текст предупреждения с пустым именем параметра.

Пошаговый алгоритм исправления ошибки

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

Шаг 1. Локализация вызова функции в коде

Откроем внешнюю обработку в Конфигураторе. Нам необходимо найти место, где формируются сведения об организации. Нажмем комбинацию клавиш Ctrl + Shift + F (глобальный поиск) или Ctrl + F (поиск в текущем модуле) и найдем все упоминания функции ОписаниеОрганизации или обращения к реквизитам организации.

Обычно проблемная строка выглядит так:


СведенияОбОрганизации = ФормированиеПечатныхФорм.СведенияОбОрганизации(Шапка.Организация, Период);
ПараметрыАдреса = "ПолноеНаименование, ИНН, КПП, ";
СтрокаОрганизации = ОписаниеОрганизации(СведенияОбОрганизации, ПараметрыАдреса);

Шаг 2. Исправление строки параметров

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

Неправильный вариант:

"ПолноеНаименование, ИНН, КПП, "

Правильный вариант:

"ПолноеНаименование,ИНН,КПП"

Перепишем данный участок кода следующим образом:


СведенияОбОрганизации = ФормированиеПечатныхФорм.СведенияОбОрганизации(Шапка.Организация, Период);
// Убираем лишние пробелы и запятую на конце
ПараметрыАдреса = "ПолноеНаименование,ИНН,КПП"; 
СтрокаОрганизации = ОписаниеОрганизации(СведенияОбОрганизации, ПараметрыАдреса);

Шаг 3. Как проверить исправление в отладчике?

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

  1. В главном меню выберите пункт Отладка — Настройка отладки.
  2. Перейдите на вкладку Останавливаться по ошибке.
  3. Установите флажок Останавливаться по ошибке и обязательно поставьте галочку напротив пункта Исключение.
  4. Запустите сеанс «1С:Предприятие» в режиме отладки и отправьте документ на печать.

Теперь при попытке обработать некорректный параметр система остановит выполнение кода на строке СписокСведений.Свойство() внутри общего модуля, и вы сможете в табло вычислить значение переменной ИмяПараметра, чтобы наглядно увидеть лишний пробел или пустую строку.

Шаг 4. Обновление обработки в информационной базе

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

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

Проверим результат работы: при повторном выводе документа на печать предупреждение больше не появится, а макет заполнится корректными данными организации.

← На главную