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

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

При разработке печатных форм, таких как "Коммерческое предложение", "Счет" или "Акт", начинающие разработчики часто сталкиваются с трудностью: обычные реквизиты организации (ИНН, КПП, Наименование) выводятся легко, а телефон и адрес электронной почты упорно не появляются в макете. Разберем детально, почему так происходит и как правильно получить эти данные.

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

Проанализируем структуру справочника Организации. В отличие от ИНН, который является простым реквизитом (строкой или числом), контактная информация — это коллекция данных. У одной организации может быть несколько телефонов (рабочий, мобильный, факс) и несколько адресов электронной почты. Поэтому в платформе 1С данные хранятся либо в табличной части КонтактнаяИнформация самого справочника, либо в специальном регистре сведений (в современных конфигурациях на базе БСП).

Посмотрим на типичную ошибку: попытку обратиться к телефону напрямую через точку от ссылки на организацию, например, СсылкаНаОрганизацию.Телефон. Такого поля в основной таблице просто не существует, что и вызывает ошибку при выполнении кода.

Метод 1: Использование запроса к табличной части

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

Важно понимать различие между Типом и Видом контактной информации:

  1. Тип — это системное перечисление (Телефон, Адрес, Электронная почта).
  2. Вид — это конкретный элемент справочника ВидыКонтактнойИнформации (например, "Юридический адрес" или "Телефон организации").

Проанализируем пример кода для получения телефона:


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

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

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

Аналогичным образом мы можем получить и Email. Для этого достаточно изменить условие по типу в запросе на ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты).

Метод 2: Использование механизмов БСП (рекомендуемый)

Если вы работаете в современной конфигурации (например, Бухгалтерия предприятия 3.0, Управление торговлей 11 или ERP), ручное написание запросов к табличным частям считается "плохим тоном". Разберем, как использовать программный интерфейс Библиотеки Стандартных Подсистем (БСП).

Для этих целей существует общий модуль УправлениеКонтактнойИнформацией. Рассмотрим использование функции КонтактнаяИнформацияОбъекта, которая возвращает готовую структуру или таблицу с данными.

Посмотрим на пример кода, который возвращает сразу все виды контактной информации организации:


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

// Пройдемся по результату и найдем нужные нам поля
Для Каждого СтрокаКИ Из ДанныеКИ Цикл
    Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
        ОбластьМакета.Параметры.Телефон = СтрокаКИ.Представление;
    ИначеЕсли СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
        ОбластьМакета.Параметры.Email = СтрокаКИ.Представление;
    КонецЕсли;
КонецЦикла;

Этот метод хорош тем, что он автоматически учитывает, где именно хранятся данные в вашей версии программы — в табличной части справочника или в независимом регистре сведений.

Метод 3: Использование специализированных функций конфигурации

Часто в типовых решениях есть еще более простые способы. Проанализируем возможности модуля ОбщегоНазначенияБП (для Бухгалтерии) или аналогичных. Там часто встречаются функции, подготавливающие данные специально для печатных форм.

Например, функция СведенияОЮрФизЛице возвращает структуру, в которой уже собраны все основные реквизиты организации, включая адрес и телефон в отформатированном виде. Рассмотрим, как это упрощает жизнь разработчику:


// Получаем сведения об организации на конкретную дату
Сведения = ОбщегоНазначенияБП.СведенияОЮрФизЛице(СсылкаНаОрганизацию, ТекущаяДата());

// Теперь все данные доступны через точку
ОбластьМакета.Параметры.ПредставлениеОрганизации = Сведения.ПолноеНаименование;
ОбластьМакета.Параметры.Телефон = Сведения.Телефоны;
ОбластьМакета.Параметры.Email = Сведения.АдресЭлектроннойПочты;

Нюансы вывода и форматирования

Выясним важные технические моменты, которые помогут сделать печатную форму профессиональной:

  1. Обработка пустых значений. Всегда проверяйте, заполнены ли данные. Если телефон не указан, в параметрах макета лучше оставить пустую строку или вывести прочерк, чтобы пользователь не видел пустых скобок или странных символов.
  2. Поле Представление vs НомерТелефона. В базе данных телефон может храниться в двух видах. Представление — это то, как пользователь ввел строку вручную. НомерТелефона — это очищенная последовательность цифр. Для печатных форм всегда используйте Представление, так как оно содержит привычные скобки и тире.
  3. Тип параметра в макете. Убедитесь, что в ячейке макета установлен тип "Параметр", а не "Текст". Только в этом случае код ОбластьМакета.Параметры.Телефон = ... сработает корректно.

Заключение

Мы проанализировали три способа решения задачи. Для старых самописных конфигураций оптимальным будет прямой запрос к табличной части. Для современных типовых решений лучше всего использовать функции БСП или готовые процедуры получения сведений об организации. Выбор метода зависит от архитектуры вашей конфигурации, но принцип всегда один: контактная информация — это подчиненная сущность, которую нужно запрашивать отдельно от основных реквизитов.

← На главную