Внедрение контактной информации из БСП

В процессе написания  конфигурации с нуля, обнаружил, что во многих справочниках и документах присутствует некая контактная  информация.  Мы знаем, что лучший принцип программиста DRY (Don’t repeat yourself), — это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования.

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

К сожалению нормальной документации по внедрению подсистем БСП я не нашел, и пришлось по крупицам, методом проб и ошибок пройти путь внедрения. Этим путем я и хочу поделиться в этой статье.

Итак разобьем весь процесс на этапы.

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

    Тут собственно ничего необычного,  В начале идут обработчики ПриСозданииНаСервере, ПриЧтенииНаСервере, ОбработкаПроверкиЗаполненияНаСервере, ПередЗаписьюНаСервере в которых прописывается код подключения подсистемы.

    Далее же идут подключаемые модули. Отмечу что приведенный мною код, актуален для БСП версии 3. Для БСП 2.4 код модулей будет немного другим.

  4. Ну и последний шаг, для того, что все  это добро заработало нам нужно, добавить на форму элемент формы ГруппаКонтактнаяИнформация в которую и будет инициализироваться контактная информация.
  5. Ну и последний шаг это первичная инициализация всего этого добра. Для этого  я создал внешнюю обработку с одной кнопкой. При нажатии кнопки  происходит инициализация подсистемы.
    Код следующий.

    &НаСервере
    Процедура ОбновитьКМНаСервере()
    	КМ_Организации = Справочники.ВидыКонтактнойИнформации.СправочникПациенты.ПолучитьОбъект();
    	КМ_Организации.Используется = Истина;
    	ОбновлениеИнформационнойБазы.ЗаписатьДанные(КМ_Организации);
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПациента;
    	//ПараметрыВида.Подсказка = "Телефон";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 1;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
    
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.АдресПациента;
    	//ПараметрыВида.Подсказка = "Фактический адрес";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 2;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации;
    	//ПараметрыВида.Подсказка = "Юридический адрес";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 3;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации;
    	//ПараметрыВида.Подсказка = "Почтовый адрес организации";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 4;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.EmailПациента;
    	//ПараметрыВида.Подсказка = "Электронный адрес организации";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 3;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
    	
    	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.ВебСтраница);
    	ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.СайтОрганизации;
    	//ПараметрыВида.Подсказка = "Сайт";
    	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
    	ПараметрыВида.Порядок = 6;
    	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);	
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ОбновитьКМ(Команда)
    	ОбновитьКМНаСервере();
    КонецПроцедуры

    Для БСП версии 2.4 есть хорошее тематическое видео

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика