Как вывести данные из справочников и контактную информацию во внешнюю печатную форму 1С?

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

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

Почему данные не выводятся?

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

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

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

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


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	Организации.Наименование КАК Организация,
|	Организации.ИНН КАК ИНН,
|	Организации.КПП КАК КПП,
|	ОрганизацииКонтактнаяИнформацияЮрАдрес.Представление КАК ЮрАдрес,
|	ОрганизацииКонтактнаяИнформацияФактАдрес.Представление КАК ФактАдрес,
|	ОрганизацииКонтактнаяИнформацияТелефон.Представление КАК КТ,
|	ОрганизацииКонтактнаяИнформацияEmail.Представление КАК ЭП
|ИЗ
|	Справочник.Организации КАК Организации
|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформацияФактАдрес
|		ПО (ОрганизацииКонтактнаяИнформацияФактАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресОрганизации)
|			И Организации.Ссылка = ОрганизацииКонтактнаяИнформацияФактАдрес.Ссылка)
|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформацияЮрАдрес
|		ПО (ОрганизацииКонтактнаяИнформацияЮрАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации)
|			И Организации.Ссылка = ОрганизацииКонтактнаяИнформацияЮрАдрес.Ссылка)
|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформацияТелефон
|		ПО (ОрганизацииКонтактнаяИнформацияТелефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонОрганизации)
|			И Организации.Ссылка = ОрганизацииКонтактнаяИнформацияТелефон.Ссылка)
|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформацияEmail
|		ПО (ОрганизацииКонтактнаяИнформацияEmail.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailОрганизации)
|			И Организации.Ссылка = ОрганизацииКонтактнаяИнформацияEmail.Ссылка)
|ГДЕ
|	Организации.Ссылка = &Ссылка";

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

Если Выборка.Следующий() Тогда
    ОбластьСтроки.Параметры.Заполнить(Выборка);
    ТабличныйДокумент.Вывести(ОбластьСтроки);
КонецЕсли;

Важные советы при работе с запросами

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

Как быть с контактными лицами?

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

Работа с печатными формами — это навык, требующий внимательности к структуре метаданных. Используйте предложенный подход с ЛЕВЫМИ СОЕДИНЕНИЯМИ, и вы сможете вывести любые данные из 1С в вашу форму!

← На главную