При разработке внешних печатных форм в среде 1С:Предприятие часто возникают ситуации, когда параметры макета, казалось бы, должны заполняться корректно, но при печати мы видим пустые поля или неполную информацию. Давайте разберем, почему конструкция СсылкаНаОбъект.Контрагент.ИНН часто приводит к ошибкам и как написать этот код профессионально.
В ходе разработки мы часто соблазняемся возможностью «разыменования» через точку, как в примере СсылкаНаОбъект.Контрагент.ИНН. На первый взгляд это выглядит просто, но на практике это несет скрытые угрозы:
ИНН и КПП не заполнены, результатом будет неопределенное значение. При попытке преобразования в строку такое значение превращается в пустоту.Чтобы избежать пустых полей в печатной форме, самым надежным и профессиональным методом является использование Запрос. Вместо того чтобы «дергать» объект через точку, мы выбираем все необходимые данные одним махом.
Рассмотрим, как это реализовать на практике:
// Создаем запрос для получения данных
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Контрагент.Наименование КАК НаименованиеКонтрагента,
| Реализация.Контрагент.ИНН КАК ИНН,
| Реализация.Контрагент.КПП КАК КПП
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
// Заполняем параметры области
ОбластьМакета.Параметры.ПредставлениеКонтрагента =
"" + Выборка.НаименованиеКонтрагента + " ИНН/КПП " + Выборка.ИНН + "/" + Выборка.КПП + ".";
КонецЕсли;
В некоторых случаях начинающие разработчики пытаются решить проблему методом ПолучитьОбъект(). Давайте разберем, почему это не рекомендуется:
ПолучитьОбъект() считывает в оперативную память весь объект со всеми его табличными частями, движениями и реквизитами. Для простого вывода данных в печатную форму это чрезмерная нагрузка на сервер.Запрос по ссылке, как показано в примере выше — это быстрее и безопаснее.Вернемся к строке из вашего примера:
ОбластьМакета.Параметры.ПредставлениеКонтрагента = ""+ СсылкаНаОбъект.Контрагент + " ИНН/КПП "+ СсылкаНаОбъект.Контрагент.ИНН+ "/" +СсылкаНаОбъект.Контрагент.КПП + ".";
Обратите внимание, что при конкатенации строк в 1С использование лишних кавычек или неправильное приведение типов может привести к «обрезанию» данных. Лучше всего использовать функцию СокрЛП() (сократить лишние пробелы слева и справа), чтобы визуально данные выглядели аккуратно:
// Пример правильной сборки строки
Представление = СокрЛП(Выборка.НаименованиеКонтрагента) +
" ИНН/КПП " +
СокрЛП(Выборка.ИНН) + "/" +
СокрЛП(Выборка.КПП);
СсылкаНаОбъект действительно передана и не является пустой ссылкой с помощью функции ЗначениеЗаполнено(СсылкаНаОбъект).Запрос, так как это дает актуальные данные из базы данных.Соблюдение этих простых правил поможет вам создавать надежные и быстрые печатные формы, которые не будут подводить в самый ответственный момент.