Как правильно реализовать вывод юридического или фактического адреса в печатную форму 1С

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

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

Основы работы с параметрами макета

Прежде чем переходить к сложной логике выбора адреса, разберем базовый механизм вывода данных в табличный документ. Любая печатная форма строится на основе макета, разделенного на области. Для вывода динамических данных в ячейках макета используются параметры. Рассмотрим, как инициализировать область и передать в неё значение:


ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
// Присвоение значения параметру напрямую
ОбластьМакета.Параметры.АдресОрганизации = "г. Москва, ул. Центральная, д. 1";

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


Если ЗначениеЗаполнено(ЮридическийАдрес) Тогда
    ОбластьМакета.Параметры.АдресОрганизации = ЮридическийАдрес;
Иначе
    ОбластьМакета.Параметры.АдресОрганизации = ФактическийАдрес;
КонецЕсли;

Использование функций БСП для получения адресов

В современных конфигурациях (таких как «Бухгалтерия предприятия 3.0», «ERP» или «Управление торговлей 11») контактная информация хранится в специальных табличных частях. Напрямую обращаться к полям объекта не совсем корректно. Для получения представления адреса рекомендуется использовать программный интерфейс БСП — общий модуль УправлениеКонтактнойИнформацией. Выясним, как правильно получить данные по конкретному виду информации.

Рассмотрим пример получения юридического и фактического адресов для организации:


// Получаем юридический адрес
АдресЮридический = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
    ОрганизацияСсылка, 
    Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации, 
    ТекущаяДатаСеанса(), 
    Истина
);

// Получаем фактический адрес
АдресФактический = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
    ОрганизацияСсылка, 
    Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации, 
    ТекущаяДатаСеанса(), 
    Истина
);

В данном коде четвертый параметр Истина означает, что функция вернет текстовое представление адреса в виде строки. Это именно то, что нам нужно для печатной формы.

Реализация логики выбора «Если — Иначе»

Теперь объединим получение данных и логику их вывода. Важно помнить, что функция получения контактной информации может вернуть пустую строку, если адрес не задан. Для проверки на пустоту в 1С лучше всего использовать универсальную функцию ЗначениеЗаполнено(). Она корректно отрабатывает со строками, ссылками и другими типами данных.

Разберем итоговый фрагмент кода, который решает поставленную задачу:


ОбластьМакета = Макет.ПолучитьОбласть("ДанныеОрганизации");

// Получаем оба варианта адреса
ЮрАдрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Стр.Организация, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
ФактАдрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Стр.Организация, Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации);

// Проверяем заполненность юридического адреса
Если ЗначениеЗаполнено(ЮрАдрес) Тогда
    // Если юридический адрес есть, выводим его
    ОбластьМакета.Параметры.Адрес = ЮрАдрес;
Иначе
    // Если юридического нет, выводим фактический (даже если он пустой)
    ОбластьМакета.Параметры.Адрес = ФактАдрес;
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьМакета);

Типичные ошибки при реализации

Проанализируем ситуации, с которыми часто сталкиваются начинающие разработчики при работе с адресами в макетах:

  1. Проверка на Неопределено: Иногда разработчики пишут Если Адрес <> Неопределено Тогда. Это ошибка, так как функции получения контактной информации БСП чаще всего возвращают пустую строку "", а не Неопределено. Проверка ЗначениеЗаполнено() является наиболее надежной.
  2. Отсутствие параметров в макете: Если в коде вы обращаетесь к ОбластьМакета.Параметры.Адрес, убедитесь, что в самом макете в нужной ячейке свойство «Заполнение» установлено в значение «Параметр», а имя параметра совпадает с кодом (в данном случае — Адрес).
  3. Использование устаревших методов: Не стоит пытаться получить адрес через запрос к табличной части КонтактнаяИнформация вручную, если в конфигурации есть БСП. Стандартные функции учитывают историю изменений адресов и корректно формируют строковое представление.

Оптимизация: Пакетное получение данных

Если ваша печатная форма выводит список документов (например, реестр счетов), вызывать функцию получения адреса в цикле для каждой строки — плохая практика. Это создаст большую нагрузку на сервер. Посмотрим, как можно оптимизировать этот процесс:

В БСП существует метод УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформациюОбъектов(). Он позволяет передать массив ссылок на организации и получить все виды адресов за один запрос к базе данных. Это значительно ускоряет формирование отчетов и печатных форм.

Отладка и поиск проблем

Если адрес все равно не выводится, выполним следующие шаги по поиску причины:

Таким образом, комбинируя стандартные возможности платформы 1С и функции БСП, можно создать гибкий и отказоустойчивый механизм вывода данных, который будет корректно отображать информацию даже при частичном заполнении карточки организации.

← На главную