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