Исходные данные: 1С Бухгалтерия 3.0.75.100, платформа 8.3.16.1063
В одной из задач, понадобилось вбивать валидный адрес (на основе КЛАДР) в одно из полей документа. Было принято решения использовать для этого стандартный функционал 1С.
Результат работы будет выглядеть как-то так:
Итак, последовательность работ:
1) В справочнике «Виды контактной информации», добавляем предопределенный значения «ДокументАбоненты» и «АдресТочкиПодключения». Собственно первое, это название документа в котором будет отображаться форма, и второе — что именно мы храним:
2) В документе создаем табличную часть «Контактная информация» (можно скопировать например из справочника «Торговые точки»)
3) На форме документа располагаем пустую группу с именем «ГруппаКонтактнаяИнформация»
4) В модуль формы копируем:
// СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент, , СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаСервере Процедура ОбновитьКонтактнуюИнформацию(Результат) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПродолжитьОбновлениеКонтактнойИнформации(Результат, ДополнительныеПараметры) Экспорт ОбновитьКонтактнуюИнформацию(Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодборАдреса(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) КонецПроцедуры &НаСервере Процедура ПриЗакрытииНаСервере() Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Объект.Ссылка,Справочники.ВидыКонтактнойИнформации.АдресТочкиПодключения); если Адрес<>"" тогда об=Документы.Абоненты.НайтиПоНомеру(объект.Номер).ПолучитьОбъект(); об.АдресПодключения=Адрес; об.Записать(); объект.АдресПодключения=Адрес; конецесли; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) ПриЗакрытииНаСервере(); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация