Имя: Пароль:
1C
1С v8
Программное заполнение контактной инф. в УНФ
0 PinkiBosh
 
09.04.15
14:21
Здравствуйте.
Понятно, что:

    
    Клиент = Справочники.Контрагенты.СоздатьЭлемент();

    Контакт = Клиент.КонтактнаяИнформация.Добавить();
    Контакт.Вид = Справочники.ВидыКонтактнойИнформации.АдресДоставкиКонтрагета;
    Контакт.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    Контакт.Представление = "тут типо пишется типо адрес";

Вопрос: как заполнить поля (Город, улица...) по отдельности??

З.ы. я работаю в УНФ и в ней ОТСУТСТВУЕТ РегистрСведений.КонтактнаяИнформация.
1 Ganiev
 
09.04.15
14:39
К сожалению не помню УНФ, посмотри как хоронится адрес в строке или может просто по другому регистр называется, если в строке, то скорее всего через разделитель пишется!
2 PinkiBosh
 
09.04.15
19:28
Спасибо!!

С разделителями сработало!
Вот:

Контакт = Клиент.КонтактнаяИнформация.Добавить();
    Контакт.Вид = Справочники.ВидыКонтактнойИнформации.АдресДоставкиКонтрагета;
    Контакт.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    Контакт.ЗначенияПолей = "Город = Томск" + Символы.ПС +
                "Улица = Кирова" + Символы.ПС +
                "Дом = 10" + Символы.ПС +
                "Квартира = 7";

А так же нарыл ещё пару вариантов:
1)
Контакт = Клиент.КонтактнаяИнформация.Добавить();
    Контакт.Вид = Справочники.ВидыКонтактнойИнформации.АдресДоставкиКонтрагета;
    Контакт.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    Контакт.ЗначенияПолей = "<КонтактнаяИнформация xmlns=""http://www.v8.1c.ru/ssl/contactinfo""; xmlns:xs=""http://www.w3.org/2001/XMLSchema""; xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""; Представление="""+лАдрес+"""><Комментарий/><Состав xsi:type=""Адрес"" Страна=""РОССИЯ""><Состав xsi:type=""АдресРФ""><СубъектРФ></СубъектРФ><СвРайМО><Район/></СвРайМО><Город>Томск</Город><НаселПункт/><Улица>Кирова</Улица><ДопАдрЭл><Номер Тип=""2020"" Значение=""1""/></ДопАдрЭл><ДопАдрЭл><Номер Тип=""1060"" Значение=""2""/></ДопАдрЭл><ДопАдрЭл><Номер Тип=""1010"" Значение=""4А""/></ДопАдрЭл><ДопАдрЭл ТипАдрЭл=""10100000"" Значение=""""/></Состав></Состав></КонтактнаяИнформация>";


2)
   Если ЮрЛицо Тогда
        ЗаполнитьКонтактнуюИнформациюАдрес(Партнер.КонтактнаяИнформация,ЮрОбласть,ЮрГород,
        ЮрУлица,ЮрНомерДома,ЮрНомерПомещения,ЮрПочтовыйИндекс,
        Справочники.ВидыКонтактнойИнформации.АдресПартнера);
    Иначе
        ЗаполнитьКонтактнуюИнформациюАдрес(Партнер.КонтактнаяИнформация,Область,Город,
        Улица,НомерДома,НомерПомещения,ПочтовыйИндекс,
        Справочники.ВидыКонтактнойИнформации.АдресПартнера);
    КонецЕсли;
    
    Если ЗначениеЗаполнено(НомерТелефона) Тогда
        ЗаполнитьКонтактнуюИнформациюТелефонИЛИEmail(Партнер.КонтактнаяИнформация,НомерТелефона,
        Справочники.ВидыКонтактнойИнформации.ТелефонПартнера);
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ЭлектронныйАдрес) Тогда
        ЗаполнитьКонтактнуюИнформациюТелефонИЛИEmail(Партнер.КонтактнаяИнформация,ЭлектронныйАдрес,
        Справочники.ВидыКонтактнойИнформации.EmailПартнера);        
    КонецЕсли;
    
    Попытка
        Если НЕ ПартнерНайден Тогда
            Партнер.УстановитьНовыйКод();        
        КонецЕсли;
        Партнер.Записать();
    Исключение
        Ошибка = ИнформацияОбОшибке();
        Возврат 0;
    КонецПопытки;
    
    Результат = СоздатьПодчененногоКонтрагента(Партнер.Ссылка,Имя,Фамилия,Отчество,НомерТелефона,
    ЭлектронныйАдрес,Область,Город,Улица,НомерДома,НомерПомещения,ПочтовыйИндекс,ЮрЛицо,НаименованиеКомпании,
    ЮрОбласть,ЮрГород,ЮрУлица,ЮрНомерДома,ЮрНомерПомещения,ЮрПочтовыйИндекс,
    КПП,БИК,ИНН,РасчетныйСчет,ПартнерНайден);    
        
    
    Возврат Результат;
    
КонецФункции

&НаСервере
Процедура ЗаполнитьКонтактнуюИнформациюАдрес(КонтактнаяИнформация,Область,Город,
    Улица,НомерДома,НомерПомещения,ПочтовыйИндекс,Вид);
    
    НСКонтактнойИнформации = КонтактнаяИнформация.Добавить();
    
    НСКонтактнойИнформации.Тип = Вид.Тип;
    НСКонтактнойИнформации.Вид = Вид;
    НСКонтактнойИнформации.ЗначенияПолей = ПолучитьЗначениеПолейКонтактнойИнформации(ПочтовыйИндекс,Область,Город,
    Улица,НомерДома,НомерПомещения,Вид);
    
    СтруктураАдреса = ПолучитьСтруктуруАдреса(ПочтовыйИндекс,Область,Город,Улица,НомерДома,НомерПомещения);
    
    СформироватьПредставлениеКонтактнойИнформации("кв.",НСКонтактнойИнформации.Представление,СтруктураАдреса);
    
    НСКонтактнойИнформации.Представление = СтрЗаменить(НСКонтактнойИнформации.Представление,"РОССИЯ,","");
    НСКонтактнойИнформации.Страна= "РОССИЯ";
    НСКонтактнойИнформации.Регион = Область;
    НСКонтактнойИнформации.Город =  Город;
    
КонецПроцедуры

&НаСервере
Функция ПолучитьЗначениеПолейКонтактнойИнформации(ПочтовыйИндекс,Область,Город,
    Улица,НомерДома,НомерПомещения,Вид)
    СтрокаПолей =  "Индекс="+ПочтовыйИндекс+"
    |Регион= "+Область+"
    |Город="+Город+"
    |Улица="+Улица+"
    |Дом="+НомерДома+"
    |Квартира="+НомерПомещения+"
    |Страна=РОССИЯ
    |КодСтраны=643
    |ТипДома=дом
    |ТипКвартиры=кв.";
    
    Структура = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(СтрокаПолей,Вид);
    Данные = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(СтрокаПолей);
    Пред = "";
    Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(Структура,Пред,Строка(Вид));
    
    Данные.Представление = Пред;
    ЗначениеПолей = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(Данные);
    
    Возврат ЗначениеПолей;
КонецФункции

&НаСервере
Функция ПолучитьЗначениеПолейДляТелефона(СтрокаПолей,Вид)
    
    Структура = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(СтрокаПолей,Вид);
    Данные = КонтактнаяИнформацияСлужебный.ДесериализацияТелефона(СтрокаПолей);
    Пред = "";
    Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(Структура.КодСтраны,Структура.КодГорода,Структура.НомерТелефона,Структура.Добавочный,Структура.Комментарий);
    
    Данные.Представление = Структура.НомерТелефона;
    ЗначениеПолей = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(Данные);
    
    Возврат ЗначениеПолей;        
КонецФункции

&НаСервере
Функция ПолучитьЗначениеПолейДляЕмайл(СтрокаПолей,Вид)
    
    Данные = КонтактнаяИнформацияСлужебный.ДесериализацияПрочейКонтактнойИнформации(СтрокаПолей,СтрокаПолей,Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
    
    Данные.Представление = СтрокаПолей;
    ЗначениеПолей = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(Данные);
    
    Возврат ЗначениеПолей;        
КонецФункции

&НаСервере
Функция ПолучитьСтруктуруАдреса(Индекс,Регион,Город,Улица,Дом,Квартира)
    Район = "";
    НаселенныйПункт = "";
    Корпус = "";
    СтруктураАдреса = Новый Структура();
    СтруктураАдреса.Вставить("Индекс", Индекс);
    СтруктураАдреса.Вставить("Регион", Регион);
    СтруктураАдреса.Вставить("Район", Район);
    СтруктураАдреса.Вставить("Город", Город);
    СтруктураАдреса.Вставить("НаселенныйПункт", НаселенныйПункт);
    СтруктураАдреса.Вставить("Улица", Улица);
    СтруктураАдреса.Вставить("Дом", Дом);
    СтруктураАдреса.Вставить("Корпус", Корпус);
    СтруктураАдреса.Вставить("Квартира", Квартира);
    Возврат СтруктураАдреса;
    
КонецФункции

&НаСервере
Процедура СформироватьПредставлениеКонтактнойИнформации(ТипКвартиры,Представление,СтруктураАдреса)
    Представление = "";
    НаименованиеСтраны = "РОССИЯ";
    НаименованиеВида = "Адрес";
    СтруктураАдреса.Вставить("Страна", Справочники.СтраныМира.НайтиПоНаименованию("РОССИЯ"));
    СтруктураАдреса.Вставить("НаименованиеСтраны", НаименованиеСтраны);
    СтруктураАдреса.Вставить("ТипДома",    "дом");
    СтруктураАдреса.Вставить("ТипКорпуса",    "");
    СтруктураАдреса.Вставить("ТипКвартиры",    ТипКвартиры);
    СтруктураАдреса.Вставить("НаименованиеВида", "Адрес");
    СтруктураАдреса.Вставить("Представление", Представление);
    
    ПредставлениеСВидом = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(СтруктураАдреса
    , Представление, НаименованиеВида);
    
КонецПроцедуры
    
&НаСервере
Процедура ЗаполнитьКонтактнуюИнформациюТелефонИЛИEmail(КонтактнаяИнформация,Данные,Вид)
    
    НСКонтактнойИнформации = КонтактнаяИнформация.Добавить();
    НСКонтактнойИнформации.Тип = Вид.Тип;
    НСКонтактнойИнформации.Вид = Вид;
    
    Если НСКонтактнойИнформации.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда
        НСКонтактнойИнформации.Представление = СокрЛП(Данные);
        НСКонтактнойИнформации.ЗначенияПолей = "НомерТелефона="+СокрЛП(Данные);
        
        НСКонтактнойИнформации.ЗначенияПолей = ПолучитьЗначениеПолейДляТелефона(НСКонтактнойИнформации.ЗначенияПолей,Вид);
        
        НСКонтактнойИнформации.НомерТелефона = СокрЛП(Данные);
        НСКонтактнойИнформации.НомерТелефонаБезКодов = СокрЛП(Данные);        
    Иначе
        НСКонтактнойИнформации.Представление = СокрЛП(Данные);
        НСКонтактнойИнформации.ЗначенияПолей = "ЭлектроннаяПочта="+СокрЛП(Данные);
        
        НСКонтактнойИнформации.ЗначенияПолей = ПолучитьЗначениеПолейДляЕмайл(Данные,Вид);
        
        НСКонтактнойИнформации.АдресЭП = СокрЛП(Данные);    
    КонецЕсли;
    
КонецПроцедуры


вариант №2 не проверял!!

З.ы. по-моему вариант с разделителями самый приятный, надеюсь в дальнейшем не выйдет из-за него проблем!!)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.