В статье рассматриваются двоичные данные, способы их хранения в 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 кодов, ключей шифрования, картинок, или при декодировании формата обмена с торговым оборудованием.
На этом все, надеюсь, статья структурировала ваше представлении о двоичных данных, и была хоть немного полезна.