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