Прошу помочь разобраться. Хотелось бы при программном создании физлица в справочнике физлиц заполнить программно данные его адреса в формате ФИАС. Даже не представляю, как это сделать. Релиз 1С.Документооборот КОРП (2.1.25.5).
(5) Курите модули РаботаСАдресами и УправлениеКонтактнойИнформацией. Сохраняется обычно в ТЧ Контактная информация справочника.
Я бы на вашем месте руками записал адрес у физлица и запросом к этой ТЧ посмотрел в каком виде там все хранится.
(5)Например см. УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению() - из строки во внутренний JSON преобразует, а потом УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию() - добавляет контактную информацию из JSON объекту
Немного разобрался, но не совсем. Получилось программно добавить контактный телефон физлица. Однако после открытия формы этого физлица, поле с номером телефона пусто!
Смотрю в отладчике:
При открытии вызывается метод УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект) и далее ПриЧтенииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация").
Находясь в теле ПриЧтенииНаСервере смотрю Объект.КонтактнаяИнформация и Форма.Объект.КонтактнаяИнформация. Там всё заполнено, то есть контакты существуют.
В самом начале ПриЧтенииНаСервере идет такой код:
СписокРеквизитовФормы = Форма.ПолучитьРеквизиты();
ПервыйЗапуск = Истина;
Для Каждого Реквизит Из СписокРеквизитовФормы Цикл
Если Реквизит.Имя = "ПараметрыКонтактнойИнформации" И ТипЗнч(Форма.ПараметрыКонтактнойИнформации) = Тип("Структура") Тогда
ПервыйЗапуск = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПервыйЗапуск Тогда
Возврат;
КонецЕсли;
Параметры = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
Показать
СписокРеквизитовФормы почему-то не содержит контактной информации -- "ПараметрыКонтактнойИнформации". Поэтому происходит выход из процедуры. И наверное поэтому параметры формы не заполняются при её открытии.
Не понимаю, как открыть форму с заполненными полями контактов?
(9) А у справочника вызываются при создании формы методы из этих общих модулей?
Например вот ЗУП 3.1, там все реквизиты работы с контактной информацией создаются программно в ПриСозданииНаСервере():
(12) давно тоже загружала контактные данные, в частности адреса... там какая-то особенность есть...
ХML правильно заполнен? Если открыть, нажав на три точки - там все корректно отображается? Важно правильно заполнить - чтобы соответствовало структуре.
Заполните руками кому-нибудь телефон/адрес и посмотрите как программа заполнит эти поля/реквизиты.
Не знаю. Может я что-то сделал не так или недоделал, когда создавал новый элемент справочника физлиц. Посмотрите. Как я уже писал выше, потом при открытии формы, контакты можно найти в Объект.КонтактнаяИнформация и Форма.Объект.КонтактнаяИнформация. И там вроде всё корректно (в xml и json строках). Однако в самой форме данных нет, то есть поля формы пустые.
newФЛ = Справочники.ФизическиеЛица.СоздатьЭлемент();
newФЛ.Наименование = s_FIO;
newФЛ.ГруппаДоступа = Cправочники.ГруппыДоступаФизическихЛиц.НайтиПоНаименованию("Контрагенты");
newФЛ.Записать(); //записываем сейчас, чтобы получить Ссылку
////////////////////////////////////////
//START работа с контактной информацией
////////////////////////////////////////
//добавление телефона в контакты
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-95");
ТелефонСтруктура.Вставить("Комментарий", "тестовый номер 2");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-95");
ТелефонXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ТелефонСтруктура,"", Перечисления.ТипыКонтактнойИнформации.Телефон);
ТелефонJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ТелефонXML);
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(newФЛ.Ссылка, ТелефонJSON, Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента, ТекущаяДата(), Ложь);
(16) Отлично) Только совсем маленькое замечание по коду для оптимизации, ДобавитьКонтактнуюИнформацию в качестве первого параметра может принимать как ссылку, так и объект, я бы передавал туда объект newФЛ, а после этого уже newФЛ.Записать(); иначе получается запись объекта 2 раза происходит)
(17) Правильно понимаю, что достаточно передать в качестве параметра newФЛ и тогда уже не надо вообще строки newФЛ.Записать(). Вроде бы ДобавитьКонтактнуюИнформацию содержит внутри запись объекта. Так?
(17) Еще такой вопрос. Если добавлять подобным способом сведения об адресе, то оказывается, что он будет введен в свободной форме. Его нельзя будет проверить по кнопке "Проверить заполнение". А нужно, чтобы осуществлялась проверка на соответствие адреса формату ФИАС. Как быть в этом случае?
(22) В том и дело, что у Вас показан пример ввода адреса в свободной форме, а не в фиксированном формате ФИАС.
В Вашем примере адрес будет введен в общее поле. При нажатии на кнопку "Проверить заполнение" будет информационное окно о невозможности провести проверку. Это говорит о том, что предложенным способом адрес введен не корректно, согласно ФИАС. См. скрин 1.
Корректный же адрес будет отображаться в форме по другому (все данные адреса -- город, улица, дом и т.д. будут в отдельных полях). И такой адрес пройдет проверку. См. скрин 2.
Видите разницу?
Мне как раз то и нужно сделать по второму варианту, т.е. ввести корректный адрес.
(23) Если есть подписка ИТС и подключен веб-сервис проверки адресов, можно попробовать поработать через Обработки.РасширенныйВводКонтактнойИнформации.СписокАвтоподбораНаселенногоПункта()
Для адреса выше он возвращает 2 варианта(муниципальный и административный). Муниципальный после этого проверку почему-то не проходит, а административный вроде работает нормально, но для адреса
194292, Санкт-Петербург г, 1-й Верхний пер, дом 10
например там несколько десятков вариантов подходящих.
Правда, судя по всему, наиболее подходящий всегда идет первым.