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

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

Сколько контактную информацию не внедряй, а все равно забудешь.

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

Рекомендации
  1. Принять решение по поводу состава объектов – владельцев контактной информации и видов контактной информации у каждого такого объекта. Например, у справочника Контактные лица необходимо разместить телефон и адрес, а у справочника Контрагент – адрес электронной почты.
  2. Добавить ссылки на объекты-владельцы (кроме документов) в состав определяемого типа ВладелецКонтактнойИнформации.
  3. Добавить ссылки на документы-владельцы в подписку на событие ЗаполнитьКонтактнуюИнформациюДокумента.
  4. Добавить описание видов контактной информации в процедуру ПриНачальномЗаполненииЭлементов общего модуля УправлениеКонтактнойИнформациейПереопределяемый.
    • На первом уровне вводятся группы: для каждого вида объекта – владельца контактной информации – своя группа. У группы должно быть задано имя в формате Справочник<ИмяСправочника> или Документ<ИмяДокумента>. Например, для справочника контактные лиц – СправочникКонтактныеЛица. Наименование группы рекомендуется задавать в виде: Контактная информация справочника «Контактные лица».
    • На втором уровне вводятся элементы – виды контактной информации, список которых определяет разработчик конфигурации. На втором уровне могут быть также заведены группы, если предполагается хранение контактной информации для табличной части объекта. В этом случае у группы должно быть задано имя в формате Документ<ИмяСправочника><ИмяТабличнойЧасти>.
    • На третьем уровне вводятся элементы – виды контактной информации для табличной части объекта. Список видов контактной информации определяет ответственный за конфигурацию.

Я поступил так, создал обработку, в которой на форме одна кнопка по нажатию на которой выполняется следующий код:

&НаСервере
Процедура ОбновлениеИнформационнойБазыНаСервере()
	// Вставить содержимое обработчика.
	ОбновлениеИнформационнойБазыМариадент.СоздатьВидыКонтактнойИнформации();
	ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновление();	
КонецПроцедуры

&НаКлиенте
Процедура ОбновлениеИнформационнойБазы(Команда)
	ОбновлениеИнформационнойБазыНаСервере();
КонецПроцедуры

Тут ОбновлениеИнформационнойБазыМариадент это общий модуль который создается при внедрении БСП. Код самой процедуры программно создает виды контактной информации. Мне очень хотелось пойти простым путем и создать предопределенные элементы в конфигураторе как я это делал для БСП2, но почему то у меня такой подход в БСП3 не сработал, и элементы справочника пришлось создавать программно.

ОбновлениеИнформационнойБазыМариадент.СоздатьВидыКонтактнойИнформации()
Процедура СоздатьВидыКонтактнойИнформации() Экспорт
	#Область Сотрудники
	// Контактная информация справочника "Сотрудники"
	ГруппаКонтактнойИнформации     = УправлениеКонтактнойИнформацией.ПараметрыГруппыВидаКонтактнойИнформации();
	ГруппаКонтактнойИнформации.Имя = "СправочникСотрудники";
	ГруппаКонтактнойИнформации.Наименование =  НСтр("ru = 'Контактная информация справочника ""Сотрудники""'");
	
	Группа = УправлениеКонтактнойИнформацией.УстановитьСвойстваГруппыВидаКонтактнойИнформации(ГруппаКонтактнойИнформации);

	Вид = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон);
	Вид.Имя          = "ТелефонСотрудника";
	Вид.Наименование = НСтр("ru = 'Телефон Сотрудника'");
	Вид.Группа     = Группа;
	Вид.МожноИзменятьСпособРедактирования = Истина;
	Вид.ОтображатьВсегда                  = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(Вид);	
	
	
	Вид = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	Вид.Имя          = "EmailСотрудника";
	Вид.Наименование = НСтр("ru = 'Электронная почта сотрудника'");
	Вид.Группа     = Группа;
	Вид.МожноИзменятьСпособРедактирования = Истина;
	Вид.РазрешитьВводНесколькихЗначений   = Истина;
	Вид.ОтображатьВсегда                  = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(Вид);	
	#КонецОбласти
	
	#Область Клиники
	// Контактная информация справочника "Клиники"
	ГруппаКонтактнойИнформации     = УправлениеКонтактнойИнформацией.ПараметрыГруппыВидаКонтактнойИнформации();
	ГруппаКонтактнойИнформации.Имя = "СправочникКлиники";
	ГруппаКонтактнойИнформации.Наименование =  НСтр("ru = 'Контактная информация справочника ""Клиники""'");
	
	Группа = УправлениеКонтактнойИнформацией.УстановитьСвойстваГруппыВидаКонтактнойИнформации(ГруппаКонтактнойИнформации);

	Вид = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон);
	Вид.Имя          = "ТелефонКлиники";
	Вид.Наименование = НСтр("ru = 'Телефон клиники'");
	Вид.Группа     = Группа;
	Вид.МожноИзменятьСпособРедактирования = Истина;
	Вид.ОтображатьВсегда                  = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(Вид);	
	
	Вид = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес);
	Вид.Имя          = "АдресКлиники";
	Вид.Наименование = НСтр("ru = 'Адрес клиники'");
	Вид.Группа     = Группа;
	Вид.МожноИзменятьСпособРедактирования = Истина;
	Вид.ОтображатьВсегда                  = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(Вид);
	
	Вид = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	Вид.Имя          = "Emailклиники";
	Вид.Наименование = НСтр("ru = 'Электронная почта клиники'");
	Вид.Группа     = Группа;
	Вид.МожноИзменятьСпособРедактирования = Истина;
	Вид.РазрешитьВводНесколькихЗначений   = Истина;
	Вид.ОтображатьВсегда                  = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(Вид);		
	#КонецОбласти
	
КонецПроцедуры

Далее нам нужно в процедуре общего модуля УправлениеКонтактнойИнформациейПереопределяемый в обработчике ПриНачальномЗаполненииЭлементов вызвать обработчик ПриНачальномЗаполненииВидовКонтактнойИнформации.

Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт

	ОбновлениеИнформационнойБазыМариадент.ПриНачальномЗаполненииВидовКонтактнойИнформации(КодыЯзыков, Элементы, ТабличныеЧасти);	
	
КонецПроцедуры

Код обработчика следующий

ОбновлениеИнформационнойБазыМариадент.ПриНачальномЗаполненииВидовКонтактнойИнформации
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов
//
// Параметры:
//  КодыЯзыков - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.КодыЯзыков
//  Элементы   - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.Элементы
//  ТабличныеЧасти - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.ТабличныеЧасти
//
Процедура ПриНачальномЗаполненииВидовКонтактнойИнформации(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт

	#Область Сотрудники
		
	// Сотрудники
	Элемент = Элементы.Добавить(); 
	Элемент.ИмяПредопределенногоВида = "СправочникСотрудники";	
	Элемент.ЭтоГруппа = Истина;
	Элемент.Наименование = НСтр("ru = 'Контактная информация справочника ""Сотрудники""'",
		ОбщегоНазначения.КодОсновногоЯзыка());
	
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенногоВида = "ТелефонСотрудника";
	Элемент.Родитель = "СправочникСотрудники";
	Элемент.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
	Элемент.ИдентификаторДляФормул       = "ТелефонСотрудника";
	Элемент.МожноИзменятьСпособРедактирования = Истина;
	Элемент.РазрешитьВводНесколькихЗначений   = Ложь;
	Элемент.ТелефонСДобавочнымНомером         = Истина;
	Элемент.ОтображатьВсегда                  = Истина;
	Элемент.РеквизитДопУпорядочивания         = 2;
	Элемент.Наименование = НСтр("ru = 'Телефон'", ОбщегоНазначения.КодОсновногоЯзыка());
	
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенногоВида = "EmailСотрудника";
	Элемент.Родитель = "СправочникСотрудники";
	Элемент.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
	Элемент.ИдентификаторДляФормул       = "EmailСотрудника";
	Элемент.МожноИзменятьСпособРедактирования = Истина;
	Элемент.РазрешитьВводНесколькихЗначений   = Ложь;
	Элемент.ОтображатьВсегда                  = Истина;
	Элемент.РеквизитДопУпорядочивания         = 3;
	Элемент.Наименование = НСтр("ru = 'Email'", ОбщегоНазначения.КодОсновногоЯзыка());

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

Ну и на последнем этапе все что нам нужно сделать это войти в пользовательский режим 1с предприятия и вызвать наши обработчики из нашей обработки.


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

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

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

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