Получить консультацию

Двоичные данные в 1С

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

Содержание

Что хранится в двоичных данных?

Если совсем кратко — все что угодно. Картинки, внешние обработки, документы, внешние компоненты, и т.д. Платформа «не знает», что содержится в двоичном файле, и реализация логики ложится на плечи разработчика — он сам должен решить, как эти данные обрабатывать, и что они из себя представляют в каждом случае.

Где хранить двоичные данные в базе 1С?

Двоичные данные можно хранить несколькими способами.

В макетах с типом «Двоичные данные», в объектах конфигурации. В этом случае запись двоичных данных в макет производится еще на этапе разработки конфигурации.

В реквизитах с типом ХранилищеЗначения, в объектах базы данных, например, в справочниках, регистрах сведений, документах.

В реквизитах типа строка, в формате base64, в Base 16 (Hex), либо в виде строки в указанной кодировке. Рассмотрим пример. Допустим, у нас есть текстовый файл с содержимым «Тест тест тест», который мы прочитали в виде двоичных данных в переменную ДД. Платформа предусматривает несколько методов получения строки из двоичных данных, каждому из которых соответствует обратный метод — формирование двоичных данных из строки того или иного формата.

Метод/Обратный метод

Результат

Base64Строка(ДД)

Base64Значение

0KLQtdGB0YIg0YLQtdGB0YIg0YLQtdGB0YI=

XMLСтрока(ДД)

XMLЗначение

0KLQtdGB0YIg0YLQtdGB0YIg0YLQtdGB0YI=

ЗначениеВСтрокуВнутр(ДД)

ЗначениеИзСтрокиВнутр

{"#",87126200-3e98-44e0-b931-ccb1d7edc497,

{1,

{#base64:0KLQtdGB0YIg0YLQtdGB0YIg0YLQtdGB0YI=}

}

}

ПолучитьСтрокуИзДвоичныхДанных(ДД)

ПолучитьДвоичныеДанныеИзСтроки

Тест тест тест

ПолучитьHexСтрокуИзДвоичныхДанных(ДД)

ПолучитьДвоичныеДанныеИзHexСтроки

D0A2D0B5D181D18220D182D0B5D181D18220D182D0B5D181D182

Где применяются двоичные данные в 1С?

Чаще всего, двоичные данные в 1С используются в следующих случаях:

  • Внешние компоненты — для подключения торгового оборудования, или для решения задач, которые средствами платформы сложно или вовсе невозможно решить;
  • Хранение файлов внешних отчетов и обработок;
  • Вывод изображений на форму (на экран) или в печатный документ;
  • Прикрепленные файлы — любые файлы, имеющие отношение к конкретным объектам базы — например, сканы договоров, презентации, документы, и т.д.
  • вложения электронных писем или html-документов
  • шифрование и использование криптографии, в частности, электронные подписи
  • получение файлов по сети, например при помощи http-сервисов
  • Хранение xml-файлов — например, настроек обмена, xml-схем, и т.д.

Как работать с двоичными данными в 1С?

При работе с двоичными данными в 1С, следует понимать, что это промежуточное «агрегатное состояние» данных. Сами они нигде не хранятся, а размещаются полностью или частично в оперативной памяти. Получить двоичные данные можно множеством способов. Вот лишь некоторые:

  • получить из строки (см. выше)
  • прочитать из реквизита с типом ХранилищеЗначения:
    НужнаяНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(«Нужная номенклатура»);
    ДвоичныеДанные = НужнаяНоменклатура.ХранилищеДвоичныхДанных.Получить();
  • Получить как тело ответа http-сервиса:
    //HTTPОтвет = результат выполнения http-запроса.
    HTTPОтвет.ПолучитьТелоКакДвоичныеДанные()
  • Получить как данные почтового вложения
    ПочтовоеВложение.Данные
  • Получить как исходные данные интернет почтового сообщения
    ИнтернетПочтовоеСообщение.ПолучитьИсходныеДанные

Следующее, что чаще всего делают с двоичными данными — это либо записывают в базу, либо сохраняют в файл.
Записать в базу можно в реквизит с типом ХранилищеЗначения:

дд = Новый ДвоичныеДанные(ПутьКФайлу);
СпрКартинка = Справочники.Картинки.Картинка;  //Картинка — реквизит с типом ХранилищеЗначения
Об = СпрКартинка.ПолучитьОбъект();
Об.Картинка = Новый ХранилищеЗначения(дд);
Об.Записать();


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

  • Записать — стандартный синхронный метод, который записывает двоичные данные в файл. При этом платформа будет ожидать окончания выполнения записи, прежде чем продолжить выполнение кода.
  • НачатьЗапись — асинхронная процедура, которая не блокирует выполнение кода. При этом по завершении записи в файл, будет вызвана процедура-обработчик.
  • ЗаписатьАсинх — новый вариант асинхронной записи, появившийся в версии 8.3.18.

Потоки и побитовые операции с двоичными данными в 1С.

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

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

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

тринадцать + 13 =

К НАЧАЛУ