
В процессе написания конфигурации с нуля, обнаружил, что во многих справочниках и документах присутствует некая контактная информация. Мы знаем, что лучший принцип программиста DRY (Don’t repeat yourself), — это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования.
Собственно последовав этому принципу я принял решение использовать уже существующую в моей конфигурации, подсистему контактной информации. К слову, всегда при написании новой конфигурации я начинаю с внедрения в нее Библиотек Стандартных Подсистем (БСП).
К сожалению нормальной документации по внедрению подсистем БСП я не нашел, и пришлось по крупицам, методом проб и ошибок пройти путь внедрения. Этим путем я и хочу поделиться в этой статье.
Итак разобьем весь процесс на этапы.
- В конфигураторе находим определяемый тип ВладелецКонтактнойИнформации, и указываем составной тип, отметив галочками, все справочники и документы в которые мы хотим внедрить Контактную информацию.
- Находим Справочник ВидыКонтактнойИнформации. Откроем его предопределенные данные. Там вы увидите примерно следующее.
Нам нужно добавить сюда свой справочник по аналогии с тем что имеется. Например для справочника организации добавляем группу СправочникОрганизации, и затем уже добавляем в него необходимые нам элементы контактной информации. (телефон, сайт, email, адрес и т.д.)
- На следующем этапе открываем модуль формы справочника и прописываем в него следующий код.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Стандартнвя подсистема Управление контактной информацией УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, "ГруппаКонтактнаяИнформация", ПоложениеЗаголовкаЭлементаФормы.Лево); //Конец Стандартнвя подсистема Управление контактной информацией КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) //Стандартнвя подсистема Управление контактной информацией УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); //Конец Стандартнвя подсистема Управление контактной информацией КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) //Стандартнвя подсистема Управление контактной информацией УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); //Конец Стандартнвя подсистема Управление контактной информацией КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) //Стандартнвя подсистема Управление контактной информацией УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); //Конец Стандартнвя подсистема Управление контактной информацией КонецПроцедуры #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ПОДСИСТЕМЫ "КОНТАКТНАЯ ИНФОРМАЦИЯ" &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, ,СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, ,СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент, ,СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры &НаСервере Процедура КонтактнаяИнформацияПриСменеСтраницы() УправлениеКонтактнойИнформацией.ВыполнитьОтложеннуюИнициализацию(ЭтотОбъект, Объект); КонецПроцедуры #КонецОбласти
Тут собственно ничего необычного, В начале идут обработчики ПриСозданииНаСервере, ПриЧтенииНаСервере, ОбработкаПроверкиЗаполненияНаСервере, ПередЗаписьюНаСервере в которых прописывается код подключения подсистемы.
Далее же идут подключаемые модули. Отмечу что приведенный мною код, актуален для БСП версии 3. Для БСП 2.4 код модулей будет немного другим.
- Ну и последний шаг, для того, что все это добро заработало нам нужно, добавить на форму элемент формы ГруппаКонтактнаяИнформация в которую и будет инициализироваться контактная информация.
- Ну и последний шаг это первичная инициализация всего этого добра. Для этого я создал внешнюю обработку с одной кнопкой. При нажатии кнопки происходит инициализация подсистемы.
Код следующий.&НаСервере Процедура ОбновитьКМНаСервере() КМ_Организации = Справочники.ВидыКонтактнойИнформации.СправочникПациенты.ПолучитьОбъект(); КМ_Организации.Используется = Истина; ОбновлениеИнформационнойБазы.ЗаписатьДанные(КМ_Организации); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПациента; //ПараметрыВида.Подсказка = "Телефон"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 1; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.АдресПациента; //ПараметрыВида.Подсказка = "Фактический адрес"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 2; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации; //ПараметрыВида.Подсказка = "Юридический адрес"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 3; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации; //ПараметрыВида.Подсказка = "Почтовый адрес организации"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 4; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.EmailПациента; //ПараметрыВида.Подсказка = "Электронный адрес организации"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 3; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.ВебСтраница); ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.СайтОрганизации; //ПараметрыВида.Подсказка = "Сайт"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.Порядок = 6; УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); КонецПроцедуры &НаКлиенте Процедура ОбновитьКМ(Команда) ОбновитьКМНаСервере(); КонецПроцедуры
Для БСП версии 2.4 есть хорошее тематическое видео