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