1с записати двійкові дані у файл. Робота із двійковими даними. Що може система

Реалізовано у версії 8.3.10.2168.

Ми поступово збільшуємо функціональність роботи з двійковими даними. На це є кілька причин. По-перше, ми реалізували не все з того, що ми задумали. А по-друге, у процесі обговорення нових можливостей ми отримали від вас низку побажань, які ми також вирішили реалізувати.

Нові функції для перетворення двійкових даних у різні формати

У глобальний контекст ми додали багато нових функцій для перетворення двійкових даних. Так, наприклад, ви можете виконувати пряме та зворотне перетворення двійкових даних у звичайний рядок, рядок формату Base64та рядок формату BinHex. Крім цього самі двійкові дані ви можете перетворити на формати Base64, BinHexі назад.

Аналогічні перетворення підтримуються і типу БуферДвійковихДаних. Крім цього буфер двійкових даних ви можете перетворювати на двійкові дані і назад.

Крім цього, дві нові функції дозволяють розділити двійкові дані на кілька частин, і навпаки, об'єднати кілька об'єктів типу ДвійковіДанів один. При цьому новий об'єкт міститиме дані всіх частин у порядку, який ви вкажете.

Ці функції за своїм змістом аналогічні поділу та поєднання файлів, але в багатьох випадках вони більш ефективні. Тому що не потрібно попередньо зберігати двійкові дані у файлі, і тому, що при розділенні відсутнє зайве копіювання даних.

Додавання можливості роботи з потоками об'єктам, які працюють з файлами

Оскільки використання двійкових даних багато в чому пов'язане з файловими операціями, ми вважають цілком логічним і природним додати роботу з потоками в ті об'єкти, які зараз читають і пишуть файли.

В результаті тепер ви можете відкривати потоки для читання та запису під час використання таких об'єктів як:

  • ЧитанняТекстуі ЗаписТексту;
  • ЧитанняFastInfoSetі ЗаписFastInfoSet;
  • ЧитанняHtmlі ЗаписHtml;
  • ЧитанняJSONі ЗаписJSON;
  • ЧитанняXMLі ЗаписXML;
  • ЧитанняZipФайлуі ЗаписZipФайлу.

Ви можете отримувати тіло як потік, коли працюєте з HTTP:

  • HTTPЗапиті HTTPВідповідь;
  • HTTPСервісЗапиті HTTPСервісВідповідь.
  • Текстовий документ;
  • ТабличнийДокумент;
  • Форматований документ;
  • Географічна схема;
  • Графічна схема;
  • FTPЗ'єднання.

Запис у потік доступний тепер при роботі з типами Картинкаі ПеретворенняККанонічномуXML. Крім цього робота з потоками підтримується тепер у різних методах, які є у типів ПеретворенняXSL, МенеджерКриптографії, СертифікатКриптографіїі ХешуванняДаних.

Ефективне копіювання за допомогою читання та запису даних

Інструменти для роботи з двійковими даними, які ми реалізували, дозволяли копіювати потоки. Але великих обсягах даних ця операція виконувалася дуже ефективно.

Тому у типу Читання данихми реалізували новий метод Копіювати(). Він не лише усуває цю проблему, а й спрощує текст, роблячи його більш зрозумілим.

Наприклад, раніше можна було отримати двійкові дані з одного потоку і записати їх в інший потік.

Тепер немає потреби отримувати двійкові дані, копіювання виконується ще на етапі читання даних.

Приємним моментом є те, що копіювати можна не лише в потік, а й в об'єкт ЗаписДаних. Цей варіант зручний тоді, коли, крім даних із вихідного потоку, вам потрібно записати у вихідний потік якісь свої дані.

Побітові логічні операції з буфером двійкових даних

Тепер ви можете використовувати побітові логічні операції під час роботи з буферами двійкових даних. В результаті цих операцій у вихідний буфер буде записано результат побитового об'єднання вихідних байтів та байтів у заданому буфері за правилами обраної логічної операції. Ми реалізували такі операції:

  • ЗаписатиПобітовеІ();
  • ЗаписатиПобітовеАбо();
  • ЗаписатиПобітовеВинятковеАбо();
  • ЗаписатиПобітовеІні();
  • Інвертувати().

Хорошим прикладом використання побітових логічних операційє завданням декодування формату обміну з торговим обладнанням. Наприклад, формат обміну з торговим обладнанням описується полем завдовжки 1 байт. Це поле містить набір ознак, що описують номенклатуру товару:

  • Біти 0-2: податкова ставка;
  • Біт 3: 0 – штучний товар, 1 – ваговий товар;
  • Біт 4: 0 - дозволити продаж; 1 - заборонити продаж;
  • Біт 5: 0 – дозволити підрахунок кількості, 1 – заборонити підрахунок кількості;
  • Біт 6: 0 - одиночний продаж заборонено, 1 - одиночний продаж дозволено;
  • Біт 7: зарезервовано.

Тоді код, який отримує цю інформацію, і представляє її у вигляді, зручному для подальшої обробки, може виглядати так.

Отримання числа з шістнадцяткових та двійкових літералів

  • ЧислоЗШістнадцятковійРядки();
  • ЧислоЗ ДвійковогоРядка().

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

Натомість набагато зручніше використовувати двійкові літерали. При цьому код стає наочнішим і ймовірність помилки значно зменшується.

Шістнадцяткові літерали зручно використовувати при розборі технічних форматів: формати зображення, звуку, відео.

Зміни в технології зовнішніх компонентів NativeAPI

Раніше при передачі двійкових даних між 1С:Підприємством та зовнішньою компонентою існував ряд обмежень. Наприклад, передати двійкові дані у зовнішню компоненту було неможливо, а під час роботи у веб-клієнті обмін двійковими даними взагалі неможливий.

Тепер ми прибираємо всі ці обмеження. Обмін двоичними даними можна здійснювати в обидві сторони і навіть у веб-клієнті.

На роботі існуючих зовнішніх компонентів це ніяк не позначиться. Вони працюватимуть, як і раніше. А ось у новостворених компонентах ви зможете тепер як параметри передавати об'єкти ДвійковіДані.

Друк (Ctrl+P)

16.3. Робота з двійковими даними

16.3.1. Загальна інформація

За реалізації прикладних рішень можливі ситуації, коли необхідно аналізувати різні двійкові дані. Наприклад, потрібно по сигнатурі визначити тип файлу або виконати маніпуляції з картинкою. Для роботи з бінарними даними «1С:Підприємство» надає спеціальні програмні інтерфейси. Далі будуть розглянуті можливості роботи з двійковими даними.
Вся робота з двійковими даними базується на понятті потоку. Потік– це логічне узагальнення довільного (загалом) джерела даних (об'єкт Потік ). Система не дозволяє створити самостійний об'єкт Потік , який не пов'язаний з будь-яким джерелом. Але існують похідні об'єкти, які можна створити - це потік, пов'язаний з файлом на диску (об'єкт Файловий Потік) або потік, створений у пам'яті (об'єкт Поток). Потік дозволяє читати дані, так і записувати їх. Для визначення можливості виконання тих чи інших операцій у потоку (і похідних об'єктів) існують спеціальні методи, що дозволяють визначити, які
операції доступні з цим потоком (методи ДоступнаЗапис(), ДоступноЧитання(), ДоступноЗмінаПозиції()).
Якщо необхідно працювати з потоком на вищому рівні, зокрема, читати/записувати такі дані, як число (різної розрядності) або рядок, то для цього призначені об'єкти ЧитанняДаних/ЗаписДаних. За допомогою цих об'єктів є можливість більш структуровано підходити до двійкових даних, які розташовані в потоці. Так, наприклад, знаючи формат будь-якого файлу, можна досить комфортно виконувати читання такого файлу, отримуючи із заголовків потрібні дані (які, як правило, представлені типами число та рядок), пропускаючи не потрібні блоки даних та завантажуючи для обробки потрібні.
Загальну схему роботи з двійковими даними можна подати так:

  1. Виконується отримання потоку
  2. Створюється об'єкт Читання даних або Запис даних.
  3. За допомогою об'єкта, створеного у п.2, виконуються необхідні дії.
  4. Закривається об'єкт, створений у п.2.
  5. Якщо ніяких операцій більше виконувати не потрібно, то закривається потік, отриманий у п.1.
  6. Якщо потрібно продовжити роботу з потоком, можна виконати встановлення нової позиції в потоці (якщо ця операція підтримується) і продовжити роботу, починаючи з п.2.

Є можливість об'єднати пп.1 і 2. Іншими словами, система надає можливість створення об'єктів Читання даних/запис даниходночасно з, наприклад, об'єкта ДвійковіДані .
Для виконання різних операцій з двійковими даними система надає можливість отримати деяку частину потоку як відокремлений фрагмент з довільним (побайтовим) доступом (об'єкт БуферДвійковихДаних). Розмір буфера визначається при створенні і не може бути змінений надалі. При роботі з буфером двійкових даних є можливість працювати з числами різної розрядності як з
єдиним цілим. При цьому є можливість вказівки порядку байтів у словах: «молодший-старший» (little endian) або «старший-молодший» (big endian). Також є можливість розбиття одного буфера на кілька та об'єднання кількох буферів двійкових даних в один результуючий буфер.
Важливо, що з буфером двійкових даних дозволяє істотно спростити реалізацію у разі, якщо робота з двійковими даними реалізується за клієнтського додатка в асинхронному режимі. У цьому випадку читання даних буфер буде виконуватися асинхронною операцією, а робота з даними буфера є синхронною.
Робота з двійковими даними доступна на стороні клієнтського (включаючи веб-клієнт) програми та на стороні сервера, а також у синхронній та асинхронній схемах роботи. Подальші приклади використовуватимуть синхронну схему роботи.

16.3.2. Читання двійкових даних

Як приклад для читання двійкових даних буде розглянуто завдання визначення коректного формату файлу, який вибрали в системі для подальшого використання. В ролі файлу, що перевіряється, буде використовуватися.wav-файл з аудіо-даними. Для зберігання.wav-файлів використовується Resource Interchange File Format (RIFF), опис якого наведено за посиланням:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (англійською мовою). Для прикладу читання будуть використовуватись такі дані про формат:
1. перші 4 байти файлу містять ідентифікатор формату: RIFF.
2. Наступні 4 байти містять обсяг власне аудіо даних з системою проходження байт little-endian.
3. наступні 4 байти містять текстовий тип використовуваних даних: WAVE.
Для виконання цих дій буде потрібно наступний код вбудованою мовою:

Читання = Новий ЧитанняДаних(Ім'яФайлу, ПорядокБайтів.LittleEndian);
ФорматФайла = Читання.ПрочитатиСимволи(4);
Розмір Даних = Читання.();
ТипФайла = Читання.ПрочитатиСимволи(4);
Якщо ФорматФайлу<>“RIFF” Тоді
Повідомити(“Це не файл формату RIFF”);
Повернення;
КінецьЯкщо ;
Якщо ТипФайлу = “WAVE” Тоді
Повідомити (“Це WAV-файл з даними, розміром ” + Розмір Даних + ” байт”);
Інакше
Повідомити (“Це не WAV-файл”);
Повернення;
КінецьЯкщо;

Розглянемо приклад докладніше.
Спочатку відкривається файл, ім'я якого міститься в змінній Ім'яФайлу, файл відкривається для читання ( РежимВідкриттяФайла.Відкрити), з файлу тільки читати ( ДоступКФайлу.Читання) і для читання використовуватиметься буфер розміром 16 байт.
Потім формується потік, призначений для читання даних, який матиме порядок проходження байтів «молодший-старший» для даних типу Число. Потім з потоку, що вийшов, зчитується 4 символи, 32-розрядне ціле і ще 4 символи. Дані аналізуються і за результатами аналізу приймається рішення про те, є обраний файл.wav-файлом чи ні.

16.3.3. Запис двійкових даних

Запис двійкових даних у файл, у найпростішому випадку, виконується так:

Запис = Новий ЗаписДаних(Ім'яФайлу);
Для Індекс = 0 По 255 Цикл
Записати. Записати Байт (Індекс);
КінецьЦикл;
Запис.Закрити() ;

Даний приклад виконує запис у файл послідовності байтів від 0 до 255 (0xFF у 16-річній системі). Це найпростіший варіант запису.
Також можна використовувати спосіб, аналогічний способу читання, розглянутому в попередньому прикладі, коли виходить файловий потік і цей файловий потік виконується запис даних.

16.3.4. Робота з буфером двійкових даних

Як було зазначено вище, буфер двійкових даних надає зручний спосіб маніпуляції фрагментами двійкових даних.
Підтримується як читання даних, а й запис.
Як приклад буде розглянуто аналіз заголовка RIFF-файлу з прикладу читання даних (див. тут). Для побудови прикладу будуть використані та сама інформація про формат файлу. Таким чином, необхідно прочитати з вихідного файлубуфер розміром із заголовок файлу. Заголовок складається з трьох 4-байтових полів. Таким чином, необхідно прочитати 12 байт.

Буфер = Новий БуферДвійковихДаних(12);
Файл = Файлові Потоки. Відкрити (Каталог Тимчасових Файлів() + “Windows Logon.wav”, РежимВідкриттяФайла.Відкрити, ДоступКФайлу.Читання);
Прочитати (Буфер, 0, 12);
Розмір = Буфер.ПрочитатиЦіле32(4);
ПотокРядки = Новий ПотокВПам'яті (Буфер);
ПотікРядки.Перейти(0, Позиція У Потоці. Початок);

ФорматФайлу = ЧитанняРядки.ПрочитатиСимволи(4, "windows-1251");
ЧитанняРядки.Закрити();
ПотікРядки.Перейти(8, Позиція У Потоці. Початок);
ЧитанняРядки = Новий ЧитанняДаних (ПотокРядки );
ТипФайлу = ЧитанняРядки.ПрочитатиСимволи( 4, "windows-1251");
ЧитанняРядки.Закрити();

Процес отримання даних у буфер двійкових даних не є нічого особливого. Подальші операції потребують деяких коментарів. Читання чисел будь-якої підтримуваної розрядності можливе з будь-якої позиції буфера. У даному прикладі Буфер.ПрочитатиЦіле32(4); означає читання 32-розрядного цілого числа, починаючи з 4 байти буфера. Таким чином, якщо потрібно прочитати кілька чисел, розташованих у різних місцях буфера, це можна зробити без прямого позиціонування цього буфера.
Проте читання рядка не підтримується буфером двійкових даних. Тому слід скористатися об'єктом, який дозволяє зробити: Читання Даних . Об'єкт Читання даних не може бути створений на підставі буфера двійкових даних. Але на підставі буфера двійкових даних можна створити потік, що є універсальним посередником між фізичним місцем зберігання інформації (файл, буфер двійкових даних) та високорівневим об'єктом, що дозволяє працювати з цими даними.
Коли створюється об'єкт Читання даних на підставі будь-якого потоку, він починає читати дані з тієї позиції, яка в даний моментвстановлена ​​в потоці. Тому в прикладі спочатку відбувається встановлення позиції в потоці, а потім створюється об'єкт читання даних і виконується читання потрібної кількостісимволів. Докладний описрізниці між числом байтів та символів під час читання рядків див. наступний розділ 16.3.5

16.3.5. Особливості використання

При використанні двійкових даних слід враховувати особливості роботи з даними типу Рядок. Особливість полягає в тому, що довжина рядка, який повертає функція глобального контексту СтрДліна(), вимірюється у символах. У символах слід вказувати розміри читаних/записуваних даних у методах запису/читання рядків в об'єктах роботи з двійковими даними ( ПрочитатиСимволи(),
ПрочитатиРядок(), ЗаписатиСимволи(), ЗаписатиРядок()). При цьому не існує однозначного варіанта перетворення довжини рядка в символах на аналогічний параметр в байтах. Залежно від вмісту рядка та кодування, це співвідношення буде різним. Тому під час роботи з будь-якими структурами даних, до складу яких входять рядки змінної довжини, слід чітко розуміти, у яких одиницях виражені довжини рядків.
Якщо в наявних даних довжина рядка вказана в байтах, і рядок вказана в багатобайтовому кодуванні змінної довжини (наприклад, UTF-8), то за допомогою об'єктів роботи з двійковими даними прочитати таку структуру з файлу в дані типу Рядок – у загальному випадку неможливо.
Зате в такому випадку можна легко змінювати позицію читання/запису у файловому потоці. Якщо довжина рядка буде вказана в символах, з'являється можливість вважати такий рядок у дані типу Рядок, але стає неможливо виконувати зміну позиції читання/запису в такому потоці.
Для отримання довжини рядка в байтах можна скористатися наступною функцією для перетворення рядка в об'єкт ДвійковіДані :

Функція ОтриматиДвійковіДаніІншіРядки(Знач СтрПараметр , Значення Кодування = “UTF-8”)
ПотікПам'ять = Новий ПотікВПам'яті;
Письменник = Новий ЗаписДаних(ПотокПам'ять);
Письменник.(СтрПараметр, Кодування);
Письменник.();
Повернення ПотокПам'ять.ЗакритиІОтримати ДвійковіДані();
КінецьФункції

Власне розмір у байтах можна отримати за допомогою виклику функції Розмір() у об'єкта ДвійковіДані, який виходить в результаті роботи функції.
Не рекомендується одночасне використання об'єктів Читання даних/запис данихта потокових об'єктів. Якщо між двома послідовними операціями читання з Читання даних або двома послідовними операціями запису в запис даних відбувається зміна позиції в потоці, з яким працюють об'єкти Ч теніє Даних/ЗаписДаних– генерується виняток. Так, наступний приклад демонструє коректна змінапозиції в потоці при записі даних у потік:

Потік = Новий ПотікПам'яті ();

Запис Даних. Записати Рядок("Привіт світ!");
ЗаписДаних.();
Потік.Перейти (0, Позиція У Потоці. Початок);
ЗаписДаних = Новий ЗаписДаних (Потік);
Запис Даних. Записати Рядок("Поки що!");
ЗаписДаних.();
Наступний приклад привіт до виникнення винятку:

Потік = Новий ПотікПам'яті();

Запис Даних. Записати Рядок ("Привіт, мир!");
Потік.Перейти(0, ПозиціяУПотоку.Початок);
// У наступному рядку буде згенеровано виняток
Запис Даних. Записати Рядок ( "Поки!");
У той же час, можливі ситуації, коли поведінка системи буде некоректною, але жодних помилок формуватися не буде:

Потік = ОтриматиПотік();
Читання Даних = Новий Читання Даних (Потік);
ТестоваРядок = Читання Даних.
ВихіднаПозиція = Потік.ПоточнаПозиція();
ЗаписДаних = Новий ЗаписДаних(Потік);
Запис Даних. Записати Рядок (“Несподіваний рядок”);
ЗаписДаних.Закрити();
Потік.Перейти(ВихіднаПозиція, ПозиціяУПотоку.Початок);
// У загальному випадку неможливо визначити, яке значення буде поміщено в змінну.
ТестоваРядок2 = Читання Даних.

Описана в цьому розділі поведінка викликана тим, що про об'єкти Читання даних / Запис даних використовують власні буфера при роботі з потоком. В результаті фактична позиція потоку відрізняється від логічної позиції, яка сформована як наслідок скоєних операцій.
Також не підтримується одночасне використання об'єктів Читання даних і запис даних, які використовують для своєї роботи один потік.

Технологічна платформа 1С:Підприємство 8 дозволяє зберігати в інформаційної базидовільні файли, отримувати їх звідти та використовувати у різний спосіб. Розглянемо ці операції з прикладах.

Перед виконанням завантаження файлу в інформаційну базу 1С необхідно отримати повну адресу файлу на диску. Робота з діалогами вибору файлів описана у .

Для зберігання файлів використовується реквізит (або ресурс регістру) з типом СховищеЗначення.

Завантаження довільного файлу до інформаційної бази 1С

Будь-який файл можна подати у вигляді двійкових даних і завантажити в СховищеЗначень.

При перетворенні двійкових даних на об'єкт СховищеЗначеннявикористовується конструкція новийСховищеЗначення(Дані,Стиск)з двома параметрами:

  1. Дані- Двійкові дані, які потрібно помістити в сховище
  2. Стиснення- Ступінь стиснення алгоритму Deflation. Ціле число у діапазоні -1…9. -1 - Ступінь стиснення за замовчуванням. 0 - ніякого стиснення, 9 - максимальний ступінь стиснення. Значення за промовчанням: -1. Параметр необов'язковий, якщо не вказано, стиснення не використовується.

//Перетворимо файл у двійкові дані
Файл = Новий ДвійковіДані(Шлях) ;

//Створюємо новий об'єкт СховищеЗначення

СховищеДаних = Новий СховищеЗначення(Файл, Новий СтисненняДаних(9 ) ) ;

Збереження довільного файлу з інформаційної бази 1С на диск

Для збереження файлу з бази 1С на диск необхідно визначити шлях та ім'я файлу. І тому існує діалог збереження файлів, робота з яким описана в .

//Отримуємо двійкові дані зі сховища
//СховищеДаних - реквізит об'єкта з типом СховищеЗначення

//Записуємо отримані дані на диск
//У змінній Шлях знаходиться повна адреса файлу на диску
Дані Записати(Шлях) ;

Перегляд файлу, що знаходиться в інформаційній базі 1С

Для перегляду збереженого в базі файлу необхідно, щоб на комп'ютері було встановлено програму, яка відкриває файл.

//Отримуємо ім'я тимчасового файлу з необхідним розширенням
//У змінну Розширення потрібно помістити розширення файлу, наприклад "pdf"
Шлях= ОтриматиІм'яТимчасовогоФайлу(Розширення) ;

//Отримуємо дані зі сховища
//СховищеДаних - реквізит об'єкта з типом СховищеЗначення
Дані = Сховище Даних. Отримати() ;

//Записуємо дані до тимчасового файлу
Дані Записати(Шлях) ;

//Намагаємося відкрити файл у призначеному для нього додатку
//Якщо програма не знайдена, з'явиться системний діалог "Відкрити за допомогою..."
ЗапуститиДодаток(Шлях) ;

Двійкові дані 1С призначені для зберігання фалів довільного формату. З їх допомогою можна:

  • Організувати взаємодію за двійковим протоколом з різними пристроями;
  • Зберігати у вигляді реквізиту об'єкта метаданих файли будь-яких форматів;
  • Конвертувати текстові дані в бінарні (найчастіше використовується для надсилання звітів);
  • Працювати з двійковими даними у пам'яті.

Що може система

Працюючи з двійковими даними платформа 8.3 вміє виконувати такі действия:

  1. Виконувати читання та запис двійкових даних;
  2. Переміщувати дані з клієнта на сервер та назад з використанням тимчасового сховища;
  3. Ініціалізувати за допомогою бінарних файлів об'єкт типу «Малюнок»;
  4. Зчитувати їх з всесвітньої мережіз використанням об'єктів «ПоштовеВкладення», «НТТРЗ'єднання» тощо.
  5. Використовувати криптографічні засоби для шифрування та підпису важливих вкладень;
  6. За допомогою об'єкта «ХешуванняДаних» обчислювати хеш-функцію.

Збереження даних у реквізит

Наприклад створимо в тестової конфігураціїдовідник.

Насправді, використовувати той самий довідник для зберігання інформації про номенклатуру та бінарних даних картинок трохи неправильно. При досить великих обсягах даних та великовагових файлах великого розміру можуть виникнути небажані простої та «гальма» у роботі системи. Набагато коректніше з точки зору системи організуватиме окремий довідник «Картинки», посилання на який ми могли б поставити як тип реквізиту.


Важливо, що через те, що реквізити типу «СховищеЗначення», що містять двійкові дані недоступні в режимі керованого додатка, звернення до них можливе лише з використанням методу РеквізитФормиЗначення.


У полі повідомлення представлено запис двійкових даних сховища значень.

Читання даних із реквізиту

Створимо обробку, яка буде виводити файл, що зберігається в бінарному вигляді в нашій конфігурації, в табличний документ (це потрібно, допустимо для виведення на друк логотипу фірми).


В принципі це весь код, який нам потрібен. За допомогою оператора Отримати() ми читаємо двійкові дані, що зберігаються у відповідному реквізиті довідника і передаємо їх в об'єкт «Картинка», який і буде показаний у верхньому лівому осередку табличного документаформи (Рис.9).

Рис.9

Перетворення даних

Нечасто, але буває, що при роботі з нестандартними обмінами із зовнішніми системами потрібна конвертація даних із двійкового формату у формат Base64 або назад.

У більшості випадків платформа самостійно перетворює дані, якщо цього не відбувається, необхідно скористатися глобальними функціями перекладу:

  1. Base64Рядок – переводить задане значення у рядок відповідного кодування;
  2. Base64Значення - робить зворотне перетворення.

Оптимізація наведеного вище коду

Код, представлений на Рис.4, безумовно, працює, але з однією істотною застереженням: якщо властивості конфігурації встановлено прапорець «Режим використання модальності» (Рис.10). В іншому випадку його використання викликає помилку.
Рис.10

Для того, щоб цього не відбувалося, перебуваючи в модулі форми елемента довідника, зайти в меню Текст->Рефакторинг->Нерекомендовані синхронні дзвінки->Перетворити дзвінки модуля.

Через деякий час синхронні дзвінки автоматично будуть перетворені на асинхронні, а код набуде вигляду (Рис.11)

Рис.11

2021 wisemotors.ru. Як це працює. Залізо. Майнінг. Криптовалюта.