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