Сколько контактную информацию не внедряй, а все равно забудешь.
Имеено так у меня происходит, и каждый раз приходится кучу времени проводить, за чтением не самой понятной документации БСП, и ковырять исходники демо базы БСП.
Потому запишу небольшую заметки по внедрению контактной информации для конфигурации основанной на БСП.
После выполнения всех шагов указанных в документации.
Рекомендации
- Принять решение по поводу состава объектов – владельцев контактной информации и видов контактной информации у каждого такого объекта. Например, у справочника Контактные лица необходимо разместить телефон и адрес, а у справочника Контрагент – адрес электронной почты.
- Добавить ссылки на объекты-владельцы (кроме документов) в состав определяемого типа
ВладелецКонтактнойИнформации. - Добавить ссылки на документы-владельцы в подписку на событие
ЗаполнитьКонтактнуюИнформациюДокумента. - Добавить описание видов контактной информации в процедуру
ПриНачальномЗаполненииЭлементовобщего модуляУправлениеКонтактнойИнформациейПереопределяемый.- На первом уровне вводятся группы: для каждого вида объекта – владельца контактной информации – своя группа. У группы должно быть задано имя в формате
Справочник<ИмяСправочника>илиДокумент<ИмяДокумента>. Например, для справочника контактные лиц –СправочникКонтактныеЛица. Наименование группы рекомендуется задавать в виде: Контактная информация справочника «Контактные лица». - На втором уровне вводятся элементы – виды контактной информации, список которых определяет разработчик конфигурации. На втором уровне могут быть также заведены группы, если предполагается хранение контактной информации для табличной части объекта. В этом случае у группы должно быть задано имя в формате
Документ<ИмяСправочника><ИмяТабличнойЧасти>. - На третьем уровне вводятся элементы – виды контактной информации для табличной части объекта. Список видов контактной информации определяет ответственный за конфигурацию.
- На первом уровне вводятся группы: для каждого вида объекта – владельца контактной информации – своя группа. У группы должно быть задано имя в формате
Я поступил так, создал обработку, в которой на форме одна кнопка по нажатию на которой выполняется следующий код:
&НаСервере Процедура ОбновлениеИнформационнойБазыНаСервере() // Вставить содержимое обработчика. ОбновлениеИнформационнойБазыМариадент.СоздатьВидыКонтактнойИнформации(); ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновление(); КонецПроцедуры &НаКлиенте Процедура ОбновлениеИнформационнойБазы(Команда) ОбновлениеИнформационнойБазыНаСервере(); КонецПроцедуры
Тут ОбновлениеИнформационнойБазыМариадент это общий модуль который создается при внедрении БСП. Код самой процедуры программно создает виды контактной информации. Мне очень хотелось пойти простым путем и создать предопределенные элементы в конфигураторе как я это делал для БСП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с предприятия и вызвать наши обработчики из нашей обработки.
