Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке
Плохо искали. Ищите по термину сериализация.
Да, метод иногда полезный. Сам ним пользуюсь для передачи данных через web-сервисы между базами. На это есть по-крайней мере 2 веские причины:
1. После преобразования ЗначениеВСтрокуВнутр() занимает гораздо меньший объем, чем обычный XML
2. Не нужно строить никаких схем. На одном конце загнал в строку, на другом получил из строки уже готовый объект (при сходной, но не абсолютно одинаковой, структуре данных). И это, действительно всего парой строк кода!
Одно огорчает, что данный метод не доступен в мобильных приложениях. XML — это может быть и хорошо, но слишком уж много места занимает. При обмене большими объемами данных выжирает много трафика. А как запихнуть некий подобный механизм (с минимальным размером данных) в мобильное приложение — пока не знаю.
Ну и к тому же еще настораживает оговорка СП: Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется. В связи с чем? -Загадка.
(1) DitriX, спасибо за информацию, обязательно поищу.
P.S. Пользуясь случаем, огромное вам спасибо за ваши статьи и уроки по мобильной платформе. Они шикарны.).
(2) kentavr27, тут основная фишка не в использовании связки «ЗначениеИзСтрокиВнутр» <-> «ЗначениеВСтрокуВнутр» а именно XLS преобразование не наших xml-фалов в объекты 1С. Удобно и быстро. Вообще, пришлось воспользоваться когда нужно было загружать данные от http-сервиса, возвращающего xml-ку с большим объемом данных, где полезных для меня было минимум. Через ЧтениеXML было лениво загружать, писать кучу условий….вот и «придумал». )))
Хорошее решение для простых случаев.
https://gist.github.com/WorldException/de7199f8dc9659656336
Я написал одно время модуль для таблиц и списков на python
Позволяет делать так
А так же для 7-ки
https://gist.github.com/WorldException/cdfce52e9da29437d724
https://github.com/WorldException/v7py
Или совсем прямой доступ sql к базе через парсинг конфигурации
Было бы здорово иметь такую обработку и для обычных форм!
(6) b-dm, есть и для обычных форм вариант. Вечером доберусь до домашнего компьютера и добавлю в публикацию.
Как по мне, так XSL штука еще более богомерзкая, чем XML. Сталкивался с ней лет 10 назад, когда еще 1С не занимался.
П.С. Но за идею плюсую.
(6) b-dm, выложил обработку для обычных форм со строкой преобразования для 8.2.
Я помню в семерке методы «ЗначениеВСтрокуВнутр» и «ЗначениеИзСтрокиВнутр» жрали очень много оперативной памяти и падали с нехваткой памяти на боле менее больших данных. Я на их основе делал распределенку в 7.7, (в стандартном РИБе нельзя было фильтровать данные), совал элемент БД в список значений (структур в 7.7 не было), списки значений пихал в общий список значений и это чудо в «ЗначениеВСтрокуВнутр», получалось очень круто и на халяву, никакой зависимости от структуры БД. Но когда применил этот метод на более менее больших базах, сразу уперся в нехватку памяти. примерно пропорции, если правильно помню, были такие, если выходной текстовик 10Mb то оперативы сжиралось в момент преобразования почти 1Gb.
Но это в момент преобразования в строку, при обратном все происходило мгновенно и без лишних затыков
Выдержка из Синтакс-помощника для методов ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр:
Забавный способ. За идею плюсую.
А обратно в исходный XML преобразовать можно?
тут
По поводу шаблонов преобразования: можно тестить онлайн, например
(13) AlexiyI, можно, но зачем? Если нужно объект преобразовать в xml, есть типовая сериализация.
Да таких сайтов полно. Во вложенных обработках можно сразу увидеть результат в виде таблицы значений, кроме того же самого функционала по онлайн-преобразованию.
(14) если мы можем XML быстро преобразовать по шаблону в строку, а затем в таблицу, то думаю, было бы полезно так же преобразовать таблицу в строку и обратно в XML. Но похоже, метода обратного преобразования у ПреобразованиеXSL нет.
(15) AlexiyI,
?
Зачем нам этот лишний этап? Можно сразу из таблицы получить XML:
Показать
И все. На выходе XML. А уж его, если сильно хочется, преобразуйте как душе угодно.
Я ранее поднимал эту же тему на форуме, в том числе показал, как получать из XML с помощью XSL-преобразования XDTO соответствующий таблиые значений.
Читаем XML, хочется получить ТаблицаЗначений через XDTO и сравните
Пожалуйста посмотрите
(18) tarassov, именно так я и хотел сделать сначала :), но не знаю правил преобразования Сериализатора XDTO. А со ЗначениеВСтрокуВнутр() понять логику преобразования методом проб и ошибок проще, и можно обойтись без документации.
По ссылке кидает непонятно куда так что оставлю здесь .
Знал бы к чему преобразовывать, пошел бы и я этим путем, но преобразовывать в таблицу, думаю, не совсем по феншую, т.к. структура XML может быть очень разнообразной, с глубокой вложенностью — в таблице без дублирования данных не обойтись. Я так понимаю, тема с сериализатором XDTO до конца не раскрыта?
Ах да, я сравнил… Мой шаблон преобразует любую XML с любой вложенностью, а не только «плоскую» и с одними атрибутами. Ну, не совсем любую: если тег <phones> будет в одном месте массивом, в другом структурой, в третьем строкой, то не сработает. Мой метод лучше :), ничего личного, просто бизнес :).
Код не такой в стрзаменить() 🙂 . При отправке комментария символы «больше» и «меньше» заменились на обратные.
Т.е. в стрзаменить меняем «[амперсант]lt;» на «<«, а «[амперсант]gt;» на «>».
(17) AlexiyI, Сильно не тестил, но работа видимо немаленькая проделана. )) Соберите эти правила для преобразования по типовым объектам, какой символ в строковом представлении объекта за что отвечает. Только учитывайте, что на разных платформах, немного по разному выглядят сериализованные строки. Было бы интересено взглянуть на такое. Мини-документация. )
(23) я использую всего 3 типа: массив, структура и строка. Структура xml для сериализатора XDTO оказалась проще, чем структура строки внутр.
1. Строковое значение: <Value xsi:type=»xs:string»>строка значения</Value>.
2. Структура: <Value xsi:type=»Structure»> элементы структуры</Value>.
3. Элемент структуры: <Property name=»ИмяКлюча»> <Value xsi:type=»любой_тип»>значение элемента структуры</Value> </Property>.
4. Массив: <Value xsi:type=»Array»> элементы массива </Value>. Элементы массива выглядят так: <Value/><Value/><Value/><Value/>… Значения <Value/> могут описываться как написано в п. 1, 2, 4, т.е. строка, структура и массив могут выступать в качестве элементов массива.
Пара нюансов:
1. В выложенном мной тексте шаблона символы «[амперсант]lt;» и «[амперсант]gt;» автоматически заменились на «<» и «>«. Т.е. перед применением данного шаблона в тегах <xsl:text> нужно заменить «<» и «>» на «[амперсант]lt;» и «[амперсант]gt;«.
2. Я совсем забыл про возможные атрибуты тегов xml. Думаю, некоторой доработкой шаблона можно каждое значение тега дополнять структурой с предопределенным именем, например «tag_attributes«, и заполнять его всеми атрибутами.
(24) AlexiyI,
Интересно. Надо будет посмотреть.
Будет время, попробую заняться.
Полезный материал. Надо внимательно все просмотреть и проверить в конфигураторе.
Автор, поделись пожалуйста источником, прочитав который я смогу расшифровать твою строку преобразования, и нарисовать свою строку под свою задачу. Если не трудно) И ведь есть еще некий XPath, он ведь тоже решает аналогичные задачи, да?
(27) slawanix, смотрел курсы по XML и XSLT. Думаю полно таких в интернете. )
(10)
1Сv8 в этом отношении радует — память уже не расходуется. Так что можно опять применить этот приём.
Ок. Спасибо)