|
Как сериализовать ссылку в XML? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
22.01.21
✎
07:40
|
Ну что то типа Справочник.Номенклатура.Гуид?
|
|||
1
Ненавижу 1С
гуру
22.01.21
✎
07:41
|
Гений уже не торт
|
|||
2
ДенисЧ
22.01.21
✎
07:42
|
Мдя...
Продам СП. Очень дорого. Вылечу от мании величия. Очень-очень дорого. |
|||
3
Mankubus
22.01.21
✎
07:47
|
xmlСтрока(Ссылка)
УникальныйИдентификатор() |
|||
4
Гений 1С
гуру
22.01.21
✎
07:56
|
(3) а обратно, товарищ Богачев?
|
|||
5
Гений 1С
гуру
22.01.21
✎
07:56
|
(1) ты зато смотрю всё калорийнее!
|
|||
6
Гений 1С
гуру
22.01.21
✎
08:01
|
XMLЗначение(<Тип>, <СтрокаXML>) - требует Тип, зачем?
Это мне надо вручную тип определить? А еще пишут: "Выполняет действие обратное действию метода XMLСтрока." |
|||
7
Mankubus
22.01.21
✎
08:17
|
(4) ууу я подумал что гуид нужен
если сериализация то читай про СериализаторXDTO |
|||
8
Гений 1С
гуру
22.01.21
✎
08:47
|
(7) ты лучше за XMLЗначение ответь
|
|||
9
Кирпич
22.01.21
✎
09:01
|
ЗначениеВСтрокуВнутр()
|
|||
10
Гений 1С
гуру
22.01.21
✎
09:03
|
(9) я про XML
|
|||
11
Кирпич
22.01.21
✎
09:05
|
(10) А XML это не строка что ли?
|
|||
12
Гений 1С
гуру
22.01.21
✎
09:29
|
(11) не юродствуй, это не строка в формате ЗначениеВСтрокуВнутр.
|
|||
13
Кирпич
22.01.21
✎
09:34
|
(12) Тупой чтоли
|
|||
14
Гений 1С
гуру
22.01.21
✎
09:36
|
(13) истину ищу
|
|||
15
Kassern
22.01.21
✎
09:38
|
(12) Онли фо ю
Синтаксис: ЗначениеВСтрокуВнутр(<Значение>) Параметры: <Значение> (обязательный) Тип: Произвольный. Преобразуемое значение. Возвращаемое значение: Тип: Строка. Системное представление значения в информационной базе. Описание: Получает системное строковое представление переданного значения. |
|||
16
Гений 1С
гуру
22.01.21
✎
09:40
|
(13)(15)
ЗначениеВСтрокуВнутр(xmlСтрока(Справочники.Валюты.НайтиПоНаименованию("Руб"))) - на юг |
|||
17
Кирпич
22.01.21
✎
09:43
|
Точно тупой
|
|||
18
Кирпич
22.01.21
✎
09:44
|
xmlСтрока(ЗначениеВСтрокуВнутр(Справочники.Валюты.НайтиПоНаименованию("Руб")))
или так ЗначениеВСтрокуВнутр(Справочники.Валюты.НайтиПоНаименованию("Руб")) |
|||
19
GANR
22.01.21
✎
10:00
|
(0) легко) не верю что ты это не сумеешь
|
|||
20
Leonardo1c
22.01.21
✎
10:07
|
(0) умею
скидывай 12тр |
|||
21
ДенисЧ
22.01.21
✎
10:14
|
(20) Откуда у него такие деньги?
|
|||
22
Кирпич
22.01.21
✎
10:15
|
(21) Стартмани продаст
|
|||
23
Гений 1С
гуру
22.01.21
✎
10:19
|
(19) в строку умею. из строки не умею вот так сразу. Можно как-то через фабрику или тупо разбор строки по точкам, но ведь есть же XMLЗначение, какого хуанхэ оно не работает без типа?
|
|||
24
Гений 1С
гуру
22.01.21
✎
10:19
|
(20) если 100500 раз предложить, то старания окупятся, глядишь кто-то рубль за тыщу и купит, да?
|
|||
25
Stephen Ordo
22.01.21
✎
10:23
|
Внешнюю компоненту смотрю уже не предлагают? На си шарпе...
|
|||
26
Кирпич
22.01.21
✎
10:30
|
(23) "какого хуанхэ оно не работает без типа?"
потому что в XML всё представлено строками. Как 1с догадается, что у тебя там не просто строка, а ссылка? Вон тебе придумали умные люди сериализацию. Пользуйся. https://1c-programmer-blog.ru/programmirovanie/xdto-serializaciya-v-1s.html |
|||
27
Leonardo1c
22.01.21
✎
10:31
|
(24) сколько за последние 2 года было куплено курсов у коучей? а сколько книжек по 1с прочитано и курсов пройдено?
|
|||
28
Leonardo1c
22.01.21
✎
10:33
|
(26) это очень сложно для него
надо хотя бы видео где это ему зачтет радислав гандапас |
|||
29
Ненавижу 1С
гуру
22.01.21
✎
10:39
|
(28) а также Зимбицкий
|
|||
30
Leonardo1c
22.01.21
✎
10:45
|
(29) это тот кто научил гения 1с переливать из пустого в порожнее..
в сериализации строк он не силен.. |
|||
31
Kassern
22.01.21
✎
10:51
|
(23) Показываю на пальцах, чтобы было понятно на примере из СП. Вот ты решил выгрузить дату в xml и такой пишешь ЗаписьXML.ЗаписатьТекст(XMLСтрока(ДатаПлатежа)); Крутяк, а дальше берешь в базе приемнике пишешь Дата = XMLЗначение(Тип("Дата"), ЧтениеXML.Значение); А все почему? Потому что в файлике у тебя <date>2021-01-22T10:49:47</date> к примеру. Откуда базе приемнику знать, что строка "2021-01-22T10:49:47" это дата пришла, а не гуид номенклатуры к примеру? Теперь понятней?)
|
|||
32
Leonardo1c
22.01.21
✎
10:59
|
(26) круто - статью писал такой же гений
"На самом деле, я не знаю, как выполнить эту задачу при помощи объекта «СериализаторXDTO», я пользуюсь только фабрикой, но продолжаю считать этот процесс XDTO-сериализацией. Если Вы знаете более правильный способ, то я с удовольствием его изучу." |
|||
33
Ненавижу 1С
гуру
22.01.21
✎
11:19
|
Значение = МояСсылка;
ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(СтрокаXML); Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); Сообщить(Значение); |
|||
34
Leonardo1c
22.01.21
✎
11:22
|
(33) работает тока в одной и той же базе
|
|||
35
Ненавижу 1С
гуру
22.01.21
✎
11:23
|
(34) поверь мне, ему это и надо
|
|||
36
Гений 1С
гуру
22.01.21
✎
11:36
|
(34) в смысле, почему в одной и той же базе. Там разве тип объекта не строкой задается?
|
|||
37
Гений 1С
гуру
22.01.21
✎
11:37
|
(31) читать умеем? У меня произвольная ссылка, я ее тип не знаю.
|
|||
38
Kassern
22.01.21
✎
11:39
|
(37) Я как раз таки умею читать и на вопрос "но ведь есть же XMLЗначение, какого хуанхэ оно не работает без типа?" дал тебе подробный ответ
|
|||
39
Гений 1С
гуру
22.01.21
✎
11:42
|
Погонял код:
Значение = МояСсылка; Сообщить(XMLСтрока(Значение)); ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(СтрокаXML); Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); Сообщить(Значение); Вы будете смеяться, но результаты такие: 95a99866-6c6d-11de-b4b4-00195b6993ba <CatalogRef.Номенклатура xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">95a99866-6c6d-11de-b4b4-00195b6993ba</CatalogRef.Номенклатура> Бейсболка То бишь XMLстрока просто сериализирует в GUID, это пушной зверек, друзья мои. |
|||
40
Гений 1С
гуру
22.01.21
✎
11:44
|
Ну ладно, Решение нашлось благодаря ненавижну, только с Сериализатором он перемудрил, старый буквоед. Все проще:
Значение = МояСсылка; ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); ЗаписатьXML(ЗаписьXML, Значение); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(СтрокаXML); Значение = ПрочитатьXML(ЧтениеXML); Сообщить(Значение); <CatalogRef.Номенклатура>95a99866-6c6d-11de-b4b4-00195b6993ba</CatalogRef.Номенклатура> Бейсболка |
|||
41
Вафель
22.01.21
✎
11:44
|
может тебе таки объект нужен?
|
|||
42
Гений 1С
гуру
22.01.21
✎
11:45
|
Хотя все же жаль, что нет компактного преобразования в CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba
Хоть самому пиши, будет лишнее место засираться в базе (41) нет, ссылка. |
|||
43
Вафель
22.01.21
✎
11:46
|
обычно тип как атрибут идет
|
|||
44
Вафель
22.01.21
✎
11:47
|
<Номенклатура type="CatalogRef.Номенклатура">95a99866-6c6d-11de-b4b4-00195b6993ba</Номенклатура >
|
|||
45
Leonardo1c
22.01.21
✎
11:48
|
с сайта что ли номенклатуру в базе ищешь?
|
|||
46
Гений 1С
гуру
22.01.21
✎
11:49
|
(43) обычно это где?
я сам сериализирую в регистре. (44) Шах и мат, господа: Значение = МояСсылка; ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); ЗаписатьXML(ЗаписьXML, Значение); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML); СтрокаСЖ = СтрокаXML; СтрокаСЖ = СтрЗаменить(СтрокаСЖ, "<", ""); СтрокаСЖ = СтрЗаменить(СтрокаСЖ, ">", "."); Поз = Найти(СтрокаСЖ, "/"); СтрокаСЖ = Лев(СтрокаСЖ, Поз-1); Сообщить(СтрокаСЖ); ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(СтрокаXML); Значение = ПрочитатьXML(ЧтениеXML); Сообщить(Значение); CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba <CatalogRef.Номенклатура>95a99866-6c6d-11de-b4b4-00195b6993ba</CatalogRef.Номенклатура> Бейсболка |
|||
47
Гений 1С
гуру
22.01.21
✎
11:50
|
ну осталось еще раскодировку написать, но это мелочи.
Поисковая обработка быстрее операций с метаданными, наверное |
|||
48
Вафель
22.01.21
✎
11:50
|
(46) выгрузка загрузка xml, когда реквизит составного типа
|
|||
49
Вафель
22.01.21
✎
11:51
|
CatalogRef.Номенклатура можно и попроще получить
|
|||
50
Гений 1С
гуру
22.01.21
✎
11:53
|
(49) как? (без сарказма, рили скоро кодить это дело буду)
|
|||
51
Кирпич
22.01.21
✎
11:56
|
XMLТипЗнч(Значение).ИмяТипа
|
|||
52
Fragster
гуру
22.01.21
✎
12:00
|
если ползоваться сериализатором xdto, то он сам атрибут с типом подставит при сериализации и десериализации
|
|||
53
DrShad
22.01.21
✎
12:00
|
(50) с = XMLСтрока(Ссылка);
т = XMLТипЗнч(Ссылка); тСтр = т.ИмяТипа; |
|||
54
Fragster
гуру
22.01.21
✎
12:01
|
главное, чтобы в пакете в импорте был http://v8.1c.ru/8.1/data/current-config
|
|||
55
Кирпич
22.01.21
✎
12:24
|
(54) Да ему это не надо. Он просто не знал как сделать строку типа "CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba", а наплел про сериализацию и XML.
Какой коуч ему внушил, что 1С должна всё делать как, как он только что придумал? Не нужно искать какой то подвох или глубинный смысл в его вопросах. Если мысленно заменить "Гений" на "Дятел", то суть вопроса проясняется быстрее. |
|||
56
Гений 1С
гуру
22.01.21
✎
12:31
|
(53) Бро, спаасибо от души:
Значение = МояСсылка; ТипXML = XMLТипЗнч(Значение); Сообщить(ТипXML.ИмяТипа + "." + Значение.УникальныйИдентификатор()); Но вот вопрос, как это добро обратно десериализовывать? |
|||
57
DrShad
22.01.21
✎
12:33
|
(56) XMLЗначение
|
|||
58
Вафель
22.01.21
✎
12:34
|
XMLЗначение(<Тип>, <СтрокаXML>)
|
|||
59
DrShad
22.01.21
✎
12:42
|
XMLЗначение(Тип(ТипXML), XMLСтрока(Значение))
|
|||
60
Кирпич
22.01.21
✎
12:44
|
(56) "Но вот вопрос, как это добро обратно десериализовывать?"
Видимо, найти точку в тексте |
|||
61
Leonardo1c
22.01.21
✎
12:46
|
(60) написать компоненту на C#
|
|||
62
DrShad
22.01.21
✎
12:46
|
(61) толстый троллинг
|
|||
63
mikecool
22.01.21
✎
12:49
|
все не читал, с сабжем разобрались? а то у меня аналогичная проблема
|
|||
64
Кирпич
22.01.21
✎
12:52
|
(63) в (40) всё готово
|
|||
65
Гений 1С
гуру
22.01.21
✎
13:22
|
(58) (59) (60) Вот именно, что надо искать вторую точку, иначе никак.
|
|||
66
Гений 1С
гуру
22.01.21
✎
13:23
|
(64) не вполне, значение из ссылки как оптимально выковыривать, не понятно. только с поиском точки.
|
|||
67
DrShad
22.01.21
✎
13:23
|
(65) не ищи, разложи строку в массив подстрок и работай с ним
|
|||
68
Гений 1С
гуру
22.01.21
✎
13:25
|
(67) нет проблема даже в другом: нужна обратная для XMLТипЗнч функция.
то бишь из строки CatalogRef.Номенклатура как получить тип СправочникСсылка.Номенклатура? |
|||
69
Leonardo1c
22.01.21
✎
13:29
|
(68) СтрРазделить() если компоненту писать не хочешь
|
|||
70
Гений 1С
гуру
22.01.21
✎
13:30
|
(69) да проблема не в разделителе, а в восстановлении типа. 1С опять не написала обратной функции для XMLТипЗнч
|
|||
71
DrShad
22.01.21
✎
13:41
|
(68) Тип(ТипXML)
|
|||
72
Кирпич
22.01.21
✎
14:02
|
(66) Так у тебя же в (40) Бейсболку выдает
|
|||
73
Leonardo1c
22.01.21
✎
14:04
|
(72) СтрокаСЖ = СтрокаXML;
СтрокаСЖ = СтрЗаменить(СтрокаСЖ, "<", ""); СтрокаСЖ = СтрЗаменить(СтрокаСЖ, ">", "."); Поз = Найти(СтрокаСЖ, "/"); СтрокаСЖ = Лев(СтрокаСЖ, Поз-1); Сообщить(СтрокаСЖ); у него конвертиться в строку - а обратно не хочет |
|||
74
Гений 1С
гуру
22.01.21
✎
14:13
|
(72) посмотри внимательнее. обратно можно через ЖО, т.е. через ЧтениеXML с плясками и бубнами
|
|||
75
Кирпич
22.01.21
✎
14:31
|
(74) Не знаю. У меня бейсболка.
|
|||
76
Кирпич
22.01.21
✎
14:32
|
(73) Так не надо так делать. Надо делать как в (40)
|
|||
77
Кирпич
22.01.21
✎
14:41
|
Ну или просто ЗначениеВСтрокуВнутр вместо изпальцавысосанного "CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba"
|
|||
78
Гений 1С
гуру
22.01.21
✎
14:55
|
(77) там внутренние ID объекта используются, как-то не комильфо и нечитаемо
|
|||
79
Гений 1С
гуру
22.01.21
✎
14:56
|
(76) Не, ну в принципе CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba можно превратить в:
<CatalogRef.Номенклатура>95a99866-6c6d-11de-b4b4-00195b6993ba</CatalogRef.Номенклатура> А далее уже через ЧтениеXML. В принципе, решаемо. |
|||
80
Гений 1С
гуру
22.01.21
✎
14:57
|
Но твою ж мать, почему функции 1С не замкнуты, почему нет обратной функции к XMLТипЗнч ?
(глас вопиющего в пустыне) |
|||
81
Ненавижу 1С
гуру
22.01.21
✎
15:00
|
(80) ИзXMLТипа
|
|||
82
Ненавижу 1С
гуру
22.01.21
✎
15:02
|
+(81) конечно это необратная функция, потому что здесь нет биекции
|
|||
83
Кирпич
22.01.21
✎
15:04
|
(78) Ну читать ты вряд ли будешь, а быстродействие не помешает
|
|||
84
Вафель
22.01.21
✎
15:06
|
(82) пример можно когда не биекция?
|
|||
85
Гений 1С
гуру
22.01.21
✎
15:06
|
(82) не выражайся. если есть преобразование в XML типа то и обратное должно быть.
(83) не, там не критично. обмен по API с другой системой, HTTP на порядок тормознутее 1с-базы |
|||
86
DrShad
22.01.21
✎
15:09
|
(80) чем тебе не подходит (71)?
|
|||
87
Кирпич
22.01.21
✎
15:11
|
(80) Тебе же писали уже
Тип("CatalogRef.Номенклатура") |
|||
88
Кирпич
22.01.21
✎
15:17
|
Осталось научиться откусить от строки 36 символов с конца. А то и правда начнет точку искать
|
|||
89
mikecool
22.01.21
✎
15:21
|
(42) подсмотри, как TormozIT в ИР это делает
|
|||
90
Гений 1С
гуру
22.01.21
✎
15:21
|
(87) гм, пропустил, реально работает.
|
|||
91
Кирпич
22.01.21
✎
15:32
|
(90) В 1с дофига функций, которые работают
|
|||
92
DrShad
22.01.21
✎
15:38
|
(91) еще больше, которые не работают, если их неверно применять или не знать о них )))
|
|||
93
Гений 1С
гуру
26.01.21
✎
10:53
|
Может кому пригодится, выкладываю:
Функция СсылкаВXML(Ссылка) Экспорт //Сериализирует ссылку в формат вида: //CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba Если НЕ ЗначениеЗаполнено(Ссылка) Тогда Возврат ""; КонецЕсли; Возврат XMLТипЗнч(Ссылка).ИмяТипа + "." + XMLСтрока(Ссылка); КонецФункции Функция СсылкаИзXML(XML) Экспорт Если XML = "" Тогда Возврат Неопределено; КонецЕсли; //Десериализирует в ссылку из формат вида: //CatalogRef.Номенклатура.95a99866-6c6d-11de-b4b4-00195b6993ba Поз = Найти(XML, "."); Ч1 = Лев(XML, Поз - 1); Ч2 = Сред(XML, Поз + 1); Поз = Найти(Ч2, "."); Ч3 = Сред(Ч2, Поз + 1); Ч2 = Лев(Ч2, Поз - 1); Возврат XMLЗначение(Тип(Ч1 + "." + Ч2), Ч3); КонецФункции |
|||
94
dangerouscoder
26.01.21
✎
15:10
|
(93) А так
Возврат Справочники[Ч2].ПолучитьСсылку(Новый УникальныйИдентификатор(Ч3))); |
|||
95
DrShad
26.01.21
✎
15:21
|
(94) а если это будет не справочник?
|
|||
96
Salimbek
26.01.21
✎
15:22
|
(0) Я игрался со всем этим, когда Шаблонизатор писал. Тут: http://catalog.mista.ru/public/1260777/
Кстати, недавно выяснил, что он и Хранилище тоже в код превращает, только там что-то типа Base64-строки получается. |
|||
97
Kassern
26.01.21
✎
15:39
|
(93) Зачем такая портянка, когда есть СтрРазделить(XML,".")?
|
|||
98
Гений 1С
гуру
26.01.21
✎
16:37
|
(97) для общности, не во всех релизах
|
|||
99
Гений 1С
гуру
26.01.21
✎
16:37
|
(95) гыгыгы
|
|||
100
acht
26.01.21
✎
17:56
|
(98) СтрПолучитьСтроку, Геня. И Символы.ПС вместо второй точки при "сериализации".
Гыгыгыгы. |
|||
101
Кирпич
26.01.21
✎
18:51
|
|
|||
102
Кирпич
26.01.21
✎
18:52
|
Гыгыгыгы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |