Почему не выводятся данные контрагента в печатной форме 1С?

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

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

Анализируем причину ошибки

В ходе разработки мы часто соблазняемся возможностью «разыменования» через точку, как в примере СсылкаНаОбъект.Контрагент.ИНН. На первый взгляд это выглядит просто, но на практике это несет скрытые угрозы:

Правильный подход: использование запроса

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

Рассмотрим, как это реализовать на практике:


// Создаем запрос для получения данных
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Реализация.Контрагент.Наименование КАК НаименованиеКонтрагента,
    |    Реализация.Контрагент.ИНН КАК ИНН,
    |    Реализация.Контрагент.КПП КАК КПП
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК Реализация
    |ГДЕ
    |    Реализация.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();

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

Почему не стоит использовать ПолучитьОбъект()

В некоторых случаях начинающие разработчики пытаются решить проблему методом ПолучитьОбъект(). Давайте разберем, почему это не рекомендуется:

Исправление синтаксических ошибок

Вернемся к строке из вашего примера:

ОбластьМакета.Параметры.ПредставлениеКонтрагента = ""+ СсылкаНаОбъект.Контрагент + " ИНН/КПП "+ СсылкаНаОбъект.Контрагент.ИНН+ "/" +СсылкаНаОбъект.Контрагент.КПП + ".";

Обратите внимание, что при конкатенации строк в 1С использование лишних кавычек или неправильное приведение типов может привести к «обрезанию» данных. Лучше всего использовать функцию СокрЛП() (сократить лишние пробелы слева и справа), чтобы визуально данные выглядели аккуратно:


// Пример правильной сборки строки
Представление = СокрЛП(Выборка.НаименованиеКонтрагента) + 
                " ИНН/КПП " + 
                СокрЛП(Выборка.ИНН) + "/" + 
                СокрЛП(Выборка.КПП);

Заключение: чек-лист для разработчика

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

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

← На главную