Здравствуйте, подскажите пожалуйста. Требуется в свой документ добавить поле адреса с полным функционалом адресного классификатора из БСП. Тем много но какого то окончательного решения нет. В типовой конфигурации все виды контактной информации заблокированы и связанные объекты, и в ручную не добавляются. Как это обойти?
Неужели в 1С не предусмотрено заполнение адресов ни где кроме стандартных справочников? Я пока что не вижу решения, кроме как полностью дублировать подсистему адресного классификатора.
Есть какие то варианты чтобы просто добавить свой документ в вид контактной информации?
(1) Поле с контактной информацией - это строка. Добавляешь строку в документ. Добавляешь кнопку для изменения и вызываешь команду заполнения контактной информации как в стандартных справочниках.
Там же вроде обработка вызывается для заполнения и редактирования информации адреса (контактной информации), работающая с адресным классификатором, её и вызывайте из своего документа (РедактированиеКонтактнойИнформации)
Да, но все в итоге в любом случае завязывается на справочник Виды Контактной Информации
Вот эти товарищи делают так Ссылка1 и здесь Ссылка2 Но их функционал основан на том что они добавляют свои элементы в справочник Виды Контактной Информации
Так у меня тоже работает в тестовой копии базы.
А если все эти справочники на "замке"?
Там же вроде обработка вызывается для заполнения
Да обработка есть. Но она запрещена для вызова вне функционала адресного классификатора.
А если ее запускать обходными функциями, добавляя свои структуры со значениями, то в итоге при записи объекта идет его поиск в списке видов контактной информации.
И на этом месте у меня ступор.
Создадим новую внешнюю обработку
Добавим два реквизита: Представление и Адрес
На Форме обработки разместим Адрес с видом "Надпись" и поставим флаг "Гиперссылка"
&НаКлиенте
Процедура АдресНажатие(Элемент)
ВидАдреса = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица");
РедактироватьАдрес(Элемент, ВидАдреса);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьАдрес(Элемент, ВидАдреса)
ОписаниеОповещения = Новый ОписаниеОповещения(
"АдресНажатие_Завершение",
ЭтотОбъект,
Элемент);
ПараметрыОткрытия = УправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации(ВидАдреса, ЭтотОбъект[Элемент.Имя]);
ПараметрыОткрытия.Вставить("ТолькоПросмотр", Ложь);
УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытия, , ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура АдресНажатие_Завершение(Результат, Элемент) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Адрес = Результат.КонтактнаяИнформация;
Представление = Результат.Представление;
Элемент.Заголовок = Представление;
ЭтотОбъект[Элемент.Имя] = Результат.КонтактнаяИнформация;
// Расскоменнтировать если нужно сохранять настройку
//Сохранить();
КонецПроцедуры
Показать
Ну и в случае если нам нужно где то сохранять и загружать адрес, задействуем обработчик ПриСозданииНаСервере и расскоментировать //Сохранить()
&НаСервере
Процедура Сохранить()
КлючОбъекта = "ОбработкаВводаАдреса";
КлючНастроек = "ВводАдреса";
Настройки = Новый Структура("Адрес,Представление", Адрес,Представление);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки,,ИмяПользователя());
КонецПроцедуры
&НаСервере
Процедура Восстановить()
СтруктураОбщихПараметров = Неопределено;
СтруктураОбщихПараметров = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбработкаВводаАдреса", "ВводАдреса", , , ИмяПользователя());
Если ТипЗнч(СтруктураОбщихПараметров) = Тип("Структура") Тогда
Если СтруктураОбщихПараметров.Свойство("Адрес") Тогда
Адрес = СтруктураОбщихПараметров.Адрес;
Если СтруктураОбщихПараметров.Свойство("Представление") Тогда
Представление = СтруктураОбщихПараметров.Представление;
Элементы.Адрес.Заголовок = Представление;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Восстановить();
КонецПроцедуры