Имя: Пароль:
1C
 
сериализация контактной информации
, ,
0 Горогуля
 
20.08.16
11:52
ситуация. имеется контрагент с юридическим адресом "190000, Санкт-Петербург г, Добровольцев ул, дом № 1", это Представление. вышло так, что в ТЧ оказался не заполнен реквизит ЗначенияПолей. БСП туда какой-то чёрной магией пишет сериализованный адрес. Вопрос: как бы мне теперь сериализовать представление для записи в Значения полей?

гугл предлагает так: ОбъектXDTOКИ = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(...);
ЗначенияПолей = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(ОбъектXDTOКИ);
но это код, годный для БСП более старшей версии, теперь модуль называется УправлениеКонтактнойИнформациейСлужебный и СериализацияКонтактнойИнформации() в нём отсутствует, глобальный поиск молчит, как партизан
1 Mauser
 
20.08.16
11:55
Версия БСП какая?
2 Горогуля
 
20.08.16
11:58
(1) а хз, всё на работе, а сегодня выходной ;)
что-то навроде бухии 3.42..
3 Горогуля
 
20.08.16
12:00
на рознице 2.2.2.20 воспроизводится. где там версию БСП подсмотреть?
4 Mauser
 
20.08.16
12:01
В общем модуле обновления иб бсп, там есть экспортное, которое версию возвращает
5 Горогуля
 
20.08.16
12:03
СтандартныеПодсистемыСервер.ВерсияБиблиотеки()=2.3.2.33
6 Mauser
 
20.08.16
12:03
А попробуй, кстати, "грязный хак"

Запиши в значения полей строку в древнем формате "ключ=значение", потом открой форму адреса, добавь-удали для модифицированности и сохрани =)
7 Mauser
 
20.08.16
12:04
(5) Оок, через некоторое время скажу =)
8 Горогуля
 
20.08.16
12:05
(6) там вроде как Символы.ПС как разделитель пар требуется. не вводится многострочная строка
9 Mauser
 
20.08.16
12:07
(8) а откуда многострочное?
Или тебя надо представление автоматом на части разобрать?
10 Mauser
 
20.08.16
12:08
А для многострочных там ПС+Таб работало как перенос.
11 Горогуля
 
20.08.16
12:08
>Запиши в значения полей строку в древнем формате "ключ=значение"

что между "ключ1=значение1" и "ключ2=значение2"?
12 Горогуля
 
20.08.16
12:09
да и не буду ж я тысячи контрагентов руками пересохранять
13 pnamik
 
20.08.16
12:11
"Видала я такую чепуху, по сравнению с которой эта чепуха — толковый словарь!"
14 Горогуля
 
20.08.16
12:12
(13) Алиса. угадал?
15 Mauser
 
20.08.16
12:12
(11) Перенос строки. Если в значении многострочная строка, то перенос строки в ней меняется на ПС+Таб
16 Mauser
 
20.08.16
12:13
(14) Нет. Алиса - это Кинчев.
17 pnamik
 
20.08.16
12:13
(14) может Мэгги Тейлор?
18 pnamik
 
20.08.16
12:15
(12) обратись к Lexey_. по заполнению он спец.
19 Горогуля
 
20.08.16
12:19
ТекКИ.ЗначенияПолей=
"Индекс=190000
|Город=Санкт-Петербург г
|Улица=Добровольцев ул,
|Дом=1";
ТекКИ.Представление="190000, Санкт-Петербург г, Добровольцев ул, дом № 1";

однако, взлетело. никаких пересохранений, форма выбора адреса открывается заполненной. но в значениях полей так и лежит несериализованное.
Спасибо, товарищ Маузер.
вопрос остаётся уже для саморазвития. как сериализовать? ;)
20 Mauser
 
20.08.16
12:20
(19) Вот если ты что-то поменяещь и запишешь, оно сериализуется. Это хвост от обмена, когда из старых баз грузились старые адреса.
21 Mauser
 
20.08.16
12:21
Там в каких-то БСП программный интерфейс допилили, сейчас доеду, найду скажу =)
22 Горогуля
 
20.08.16
12:21
(20) точно. ой, как неохота лезть отладчиком и искать, что оно там делает при записи...
23 Горогуля
 
20.08.16
13:59
ничо не понимаю.
сохраняю руками из формы
УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
там
ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС);
смотрю в Объект.КонтактнаяИнформация[0].ЗначенияПолей - вижу желанное.

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

в спр.КонтактнаяИнформация[0].ЗначенияПолей ничего не меняется. что не так?
24 Горогуля
 
20.08.16
14:08
вот так взлетело:

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


правда, дорисовало новую строчку в ТЧ, но это уже мелочи
25 Mauser
 
20.08.16
15:16
Ну, лучше поздно, чем =)

Ближайшая под руками оказалась только 2.3.1.84. Там для низкого уровня есть вполне себе программный интерфейс УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML. Не думаю, что в новых его оторвали.
В новых БСП есть интерфейс работы с параметрами - объектами, там тонкие случаи хранения владельцев КИ в табличной части учитываются и пр.

Но это уж до понедельника...
26 Горогуля
 
20.08.16
15:31
ВидИнформации=Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
    Представление="190000, Санкт-Петербург г, Добровольцев ул, дом № 1";
    Сообщить(УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ЗначенияПолей, Представление, ВидИнформации));


а неплохо так. заполнить СЗ как надо и вперёд. спасибо ещё раз
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.