Значение в строку внутреннюю для сложных типов: как работает платформа или немного о декодировании base64 в текст через двоичные данные

Публикация № 617021 28.04.17

Разработка - Механизмы платформы 1С

ДвоичныеДанные base64 ЗначениеИзСтрокуиВнутр

Интересная особенность работы платформы со сложными типами при использовании метода ЗначениеВСтрокуВнутр, двоичные данные и новые методы платформы...

Добрый день всем!

Вот столкнулся с такой штукой, как "сериализация" фильтра компоновки данных с помощью метода "ЗначениеВСтрокуВнутр" платформы. Суть в том, что платформа сначала сериализует данный объект в XML, а затем этот XML кодирует в base64 и помещает в некий JSON-контейнер с типом и данными. Тип - это некий идентификатор, а данные - это тот самый закодированный в base64 сериализованный XML.

Рассуждать на тему того, почему 1С решили сделать таким образом, особого смысла нет - сделали - и слава Богу!* Но вот решил я все-таки декодировать base64-строку в текст и не нашел соответствующего метода платформы. В двоичные данные - пожалуйста, а в текст - нет. Но в последних релизах платформы объект "ДвоичныеДанные" оброс знатным функционалом, что просто не могло не обрадовать многих специалистов по 1С. В итоге родился такой вот замечательный код:

// Данные - это что-то, что было сериализовано с помощью "ЗначениеВСтрокуВнутр"
Поз = СтрНайти(Данные, "#base64");
ПС = Сред(Данные, поз+8);
Поз2 = СтрНайти(ПС, "}");
ПС = Лев(ПС, Поз2-1);
ЧД = Новый ЧтениеДанных(Base64Значение(ПС));
СтрокаXML = ЧД.ПрочитатьСимволы();

У нас тут есть, допустим, какие-то данные, которые мы откуда-то взяли. Например:

Данные = ЗначениеВСтрокуВнутр(ОтборКомпоновкиДанных);

В итоге у нас получилась какая-то такая строка:

{"#",f6841c6b-6c71-4c82-ae9e-d08b49db326c,
{#base64:77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxGaWx0
ZXIgeG1sbnM9Imh0dHA6Ly92OC4xYy5ydS84LjEvZGF0YS1jb21wb3NpdGlvbi1z
eXN0ZW0vc2V0dGluZ3MiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hN
TFNjaGVtYS1pbnN0YW5jZSI+DQoJPGl0ZW0geHNpOnR5cGU9IkZpbHRlckl0ZW1H
cm91cCI+DQoJCTxncm91cFR5cGU+QW5kR3JvdXA8L2dyb3VwVHlwZT4NCgkJPGl0
ZW0geHNpOnR5cGU9IkZpbHRlckl0ZW1Db21wYXJpc29uIj4NCgkJCTxsZWZ0IHht
bG5zOmRjc2Nvcj0iaHR0cDovL3Y4LjFjLnJ1LzguMS9kYXRhLWNvbXBvc2l0aW9u
LXN5c3RlbS9jb3JlIiB4c2k6dHlwZT0iZGNzY29yOkZpZWxkIj7QodGH0LXRgtCU
0YIu0JrQvtC0PC9sZWZ0Pg0KCQkJPGNvbXBhcmlzb25UeXBlPkNvbnRhaW5zPC9j
b21wYXJpc29uVHlwZT4NCgkJCTxyaWdodCB4c2k6dHlwZT0ieHM6c3RyaW5nIj4x
MDYuMDE8L3JpZ2h0Pg0KCQk8L2l0ZW0+DQoJCTxpdGVtIHhzaTp0eXBlPSJGaWx0
ZXJJdGVtQ29tcGFyaXNvbiI+DQoJCQk8bGVmdCB4bWxuczpkY3Njb3I9Imh0dHA6
Ly92OC4xYy5ydS84LjEvZGF0YS1jb21wb3NpdGlvbi1zeXN0ZW0vY29yZSIgeHNp
OnR5cGU9ImRjc2NvcjpGaWVsZCI+0KHRg9Cx0LrQvtC90YLQvtCU0YIxLlvQodC4
0LzQstC+0Lsg0J7QpNCgKyDQktC40LTRiyDQvdC+0LzQtdC90LrQu9Cw0YLRg9GA
0YsgXTwvbGVmdD4NCgkJCTxjb21wYXJpc29uVHlwZT5FcXVhbDwvY29tcGFyaXNv
blR5cGU+DQoJCQk8cmlnaHQgeG1sbnM6ZDRwMT0iaHR0cDovL3Y4LjFjLnJ1Lzgu
MS9kYXRhL2VudGVycHJpc2UvY3VycmVudC1jb25maWciIHhzaTp0eXBlPSJkNHAx
OkNhdGFsb2dSZWYu0L3RhNC+X9CX0L3QsNGH0LXQvdC40Y/QkNC90LDQu9C40YLQ
uNC60LgiPmE1Yzg2MjQwLWRmOTMtMTFlNS05NDU2LTAwMWU2NzU0ODlmNDwvcmln
aHQ+DQoJCTwvaXRlbT4NCgk8L2l0ZW0+DQo8L0ZpbHRlcj4=}
}

Дальше мы из этой строки получаем данные base64, которые обрамлены символами "{#base64:" и "}". Т.е. получаем все, что между этими символами.

После этого мы декодируем строку base64 в двоичные данные давно известной функцией. И вот из этих двоичных данных получить строку не так-то просто. Раньше можно было записать файл и потом прочитать его в виде текста. Но операции ввода-вывода достаточно затратны. В новой платформе (у меня 8.3.10.2168) появились функции работы с потоками двоичных данных. Мы здесь используем объект "ЧтениеДанных", который можно создать на основании двоичных данных, полученных с помощью функции "Base64Значение". У объекта "ЧтениеДанных" есть метод "ПрочитатьСимволы()", который без параметров просто возвращает нам в кодировке по-умолчению все символы из двоичных данных. Таким образом, в переменной "СтрокаXML" будет находиться следующее значение:

<?xml version="1.0" encoding="UTF-8"?>
<Filter xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <item xsi:type="FilterItemGroup">
        <groupType>AndGroup</groupType>
        <item xsi:type="FilterItemComparison">
            <left xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xsi:type="dcscor:Field">СчетДт.Код</left>
            <comparisonType>Contains</comparisonType>
            <right xsi:type="xs:string">106.01</right>
        </item>
        <item xsi:type="FilterItemComparison">
            <left xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xsi:type="dcscor:Field">СубконтоДт1.[Символ ОФР+ Виды номенклатуры ]</left>
            <comparisonType>Equal</comparisonType>
            <right xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config" xsi:type="d4p1:CatalogRef.нфо_ЗначенияАналитики">a5c86240-df93-11e5-9456-001e675489f4</right>
        </item>
    </item>
</Filter>

Надеюсь, новый функционал платформы может быть полезен для оптимизации различных операций для работы со строками, находящимися в объекте ДвоичныеДанные.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mxm2 1245 03.05.17 07:38 Сейчас в теме
Для старых версий платформ работает это: Base64 преобразование туда и обратно без файловых операций (Управляемое приложение). Ваш вариант работает быстрее. Вообще в 8.3.10 много "вкусного" из того, что давно требовалось при разработке.
alevnev; swiss-garant; +2 Ответить
2. rus128 2 03.05.17 12:28 Сейчас в теме
Опечатка: "по-умолчению"
3. starik-2005 2829 11.05.17 17:37 Сейчас в теме
Оставьте свое сообщение

См. также

Программные перечисления, ч.2: приемы кэширования при разработке

Универсальные функции Механизмы платформы 1С Запросы Платформа 1С v8.3 Бесплатно (free)

Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход... Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".

30.10.2017    31715    unichkin    18    

93

Использование классов .Net в 1С для новичков

Механизмы платформы 1С Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    91540    Serginio    116    

183

Вспомогательные инструкции в коде 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    40789    tormozit    107    

125

Как прикрутить ГУИД к регистру сведений

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    25089    m-rv    18    

29

Метод формирования движений в типовых регистрах нетиповыми регистраторами

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    32303    itriot11    34    

35

Ускоряем 1С: модули с повторным использованием возвращаемых значений

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

По роду своей деятельности, мне часто приходится обсуждать с программистами детали реализации той или иной функциональности. Очень часто, разговаривая даже с квалифицированными специалистами я сталкиваюсь с незнанием сути платформенной функциональности Повторного использования возвращаемых значений общих модулей. В данной статье я постараюсь дать краткий обзор и основные особенности этой функциональности.

04.09.2017    65333    m-rv    64    

170

Регулярные выражения без внешних компонент? Легко!

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Сложный способ организовать проверку строки с помощью регулярного выражения в 1С. При этом ни одна внешняя компонента не пострадала. Ну и от платформы (Linux, MustDie) - не зависит.

04.03.2016    80923    starik-2005    111    

414

Методика переопределения и вызова обработчиков событий обычной формы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Каждый из нас хотя бы раз задумывался над тем, как было бы удобно, если бы мы могли переопределять обработчики событий формы, сохраняя возможность вызова старого обработчика независимо от его имени. В этой статье изложен метод, который позволяет реализовать эту возможность.

24.06.2007    92867    tormozit    32    

215

Отладка подключаемых обработок

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На самом деле для этого не нужно ни изменять конфигурацию, ни пользоваться вспомогательной обработкой-отладчиком.. Все просто :)

04.01.2017    93542    unichkin    121    

330

Недокументированное использование стандартных обработок из меню "Все функции".

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).

19.06.2015    129911    ekaruk    148    

1067

Простая и быстрая эмуляция операций с битовыми строками

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Битовые строки могли бы упростить реализацию некоторых алгоритмов на языке платформы «1С: Предприятие 8». Но пока в платформе операций с битовыми строками нет. В то же время уже сделанные попытки смоделировать эти операции преобразованиями над числами опираются на циклы обработки отдельных битов, что плохо сказывается на скорости их работы. Предлагается новое простое решение, основанное на представлении битовых строк строками символов «0» и «1». Приводится примеры кода выполнения основных логических операций AND, OR, XOR, NO без использования циклов. В качестве прикладной задачи рассмотрено получение последовательных значений кода Грэя, который можно использовать для ускорения перебора вариантов.

22.06.2016    31428    ildarovich    14    

74

Расширения конфигурации. Полезные советы для разработки

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

12.01.2016    382268    mrXoxot    209    

1064

Как устроена регламентированная отчетность в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бухгалтерский учет Бесплатно (free)

Регламентированная отчетность - это универсальный механизм конфигураций 1С. Принцип её работы во всех конфигурациях идентичен, различаются только источники данных для заполнения. Поэтому, раз познакомившись, Вы сможете использовать эти знания в любых конфигурациях.

30.11.2015    88304    mrXoxot    36    

333

Правильная индикация прогресса цикла на клиенте

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Работу некоторых циклов с большим количеством проходов разумно сопровождать индикацией прогресса. Но зачастую сама эта индикация и становится главным тормозом процесса. Так как частенько на практике встречаю подобные огрехи, решил опубликовать пример правильной индикации. Речь идет про выполнение кода на клиенте.

08.08.2008    60723    tormozit    62    

175

XDTO - это просто

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    368163    Evil Beaver    193    

1121

Многопоточность как способ ускорения некоторых процедур

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Платформа 1С:Предприятие 8 обладает необходимыми инструментами для обеспечения многопоточности, но на практике про эти инструменты незаслуженно забывают.

09.04.2013    71715    Aleksey.Bochkov    77    

256

Что на самом деле делает свойство «БлокироватьДляИзменения»

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мотивацией к написанию данной статьи, послужило большое количество заблуждений касаемо свойства «БлокироватьДляИзменения». Большая часть материалов в сети, посвящена либо управляемым блокировкам, либо режиму разделения итогов, свойство «БлокироватьДляИзменения» затрагивается лишь частично без конкретики, в итоге у многих возникают вопросы при его использовании. Цель данной статьи заполнить этот пробел. Прошу сначала прочитать статью полностью и только после этого делать выводы. Надеюсь, данный материал будет кому-то полезен.

04.08.2013    64636    Andreynikus    152    

246

Динамический состав реквизитов

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Решим не стандартную задачу. Нам необходимо добавить к документам некие реквизиты, которые появляются у объектов в зависимости от настроек (значений реквизитов документа).

14.12.2012    26555    Infostart    7    

20

Сортировка строк формы, с сохранением второго порядка

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Более удобная чем стандартная сортировка строк табличной части формы обычного приложения 8.х Идея очень простая: пользователю удобно что если таблицу обработки отсортировать по галочке, сортировка по Номенлатуре / контрагенту внутри одниаковых галочек осталось прежней.

14.04.2012    20430    i132    2    

11

Управление индексами и секциями в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Одним из основных факторов производительности 1С: Предприятие 8 является верная структура индексов СУБД - это аксиома. Но также существует одно из заблуждений - что это все сложно. В Ei разработан не имеющий аналогов инструмент позволяющий вывести работы с индексами и секциями на новый визуальный (интерактивный) уровень, позволяющий забыть о длинных инструкциях по созданию изменению индексов.

17.11.2011    23609    German    33    

72

Практика регулярных выражений в 1С или "парсим неудобные форматы"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В продолжение статьи Использование регулярных выражений (RegExp) в 1С8.х. Углубляемся в практику использования регулярных выражений в 1С. Основы работы с регулярными выражениями хорошо описаны в указанной публикации. А я попробую ответить на вопрос "почему именно регулярные выражения?" на примере конкретной рабочей задачи.

26.10.2011    31402    1cspecialist    33    

95

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье рассмотрим типовую подсистему "Варианты отчетов" БСП на примере применения в универсальном отчете любой современной конфигурации.

сегодня в 13:00    726    quazare    2    

30

О цикле обратном замолвите слово...

Механизмы платформы 1С Языки и среды Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

Однажды, написав статью, расписывающую достоинства 1С, я упомянул среди недостатков - мне не хватает "обратного цикла". При этом, столкнулся с непониманием - "а зачем тебе обратный цикл". Сегодня я отвечу на этот вопрос.

08.09.2022    6469    DrAku1a    71    

31

Эволюция расширения конфигурации

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    22578    Xershi    50    

193

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    5838    dsdred    37    

125

Самодельный обработчик ПослеЗаписи объекта

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Иногда при записи объекта хочется обработчик ПослеЗаписи, который бы выполнялся всегда после успешного завершения транзакции записи объекта. Статья описывает способ реализации такого обработчика.

03.04.2023    2819    tormozit    63    

39

Снова об использовании ТекущаяДата() на клиенте и на сервере и о работе в разных часовых поясах

БСП (Библиотека стандартных подсистем) Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Можно ли применять ТекущаяДата() вопреки требованиям стандартов 1С? Безопасно ли использование функции ОбщегоНазначенияКлиент.ДатаСеанса() из БСП? Как правильно поступать при работе пользователей в разных часовых поясах?

24.04.2023    4031    Alxby    26    

40

Золотые костыли

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Немного о программировании.

23.08.2018    12303    vasilev2015    39    

43

Создаем периодические реквизиты или привет из 1С 7.7

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Конечно же, платформа 1С:Предприятие 8 не поддерживает периодические реквизиты, в статье описано использование типовой методики периодических сведений в коробочных решениях от 1С.

26.10.2022    1306    morin    4    

26

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    4189    SeiOkami    9    

121

Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С

HighLoad оптимизация Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

1С работает с СУБД Postgres более 10 лет, а сейчас это единственный легальный вариант для инсталляций в России. Много ли мы потеряем в производительности по сравнению с MS SQL? Выдержит ли Postgres 15.2 жесткий Highload со стороны 1С? Цель этой статьи - ответить на данные вопросы, с цифрами, которые можно использовать при расчете архитектуры.

23.03.2023    1644    1CUnlimited    9    

28

Оператор GOTO в 1С - табу или волшебная палочка?

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В ежедневной практике программирования на платформе 1С оператор Goto (Перейти) практически не встречается. Не удивительно, что половина специалистов даже не подозревает о существовании данного оператора. Ну, а знающим он внушает ужас, и его стараются избегать. Так что же это за редкий оператор, и для чего он нужен?

19.02.2023    5693    Dementor    72    

43

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    12918    dsdred    15    

68

Маленькие хитрости большой платформы (часть 1)

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Ничего сверхсекретного, просто несколько полезных приёмов, как упростить себе жизнь и ускорить разработку: от банальных советов до неочевидных, на первый взгляд, приёмов.

29.12.2022    4223    zeltyr    25    

41

Практическая шпаргалка по новым возможностям языка запросов 1С

Механизмы платформы 1С Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

В предлагаемой статье решил привести примеры применения новых возможностей языка запросов 1С, начиная с версии платформы 8.3.20.

21.11.2022    16326    quazare    34    

113

Асинхронное нечто, или так, как раньше!

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все же знают, что раньше было лучше! Возврат к истокам и погружение в детали...

23.10.2022    4772    starik-2005    38    

40

Использование Стека вызовов в качестве условия оператора Если [...] Тогда

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Делюсь интересным приёмом, позволяющим использовать данные стека исполнения кода 1С в качестве условия, накладываемого на выполнение кода.

12.07.2020    13678    sapervodichka    65    

93