Оперируем бинарными файлами в 1С:Предприятие 7.7

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

Но решение этой задачи есть, например, через системный COM-объект ADODB.Stream, в котором возможно выполнение vbs-скрипта в среде, где работа с бинарными потоками предусмотрена.

Запись бинарных файлов

Запись бинарных файлов на платформе 1С реализована в функции СохранитьБинарныйФайл, которая генерирует и выполняет скрипт для VBS.

  • строковый параметр данные содержит строку десятичных значений, разделенных запятой и заключенную в круглые скобки
  • строковый параметр путьФайла содержит полный путь файла сохраняемых бинарных данных
Функция СохранитьБинарныйФайл (данные, путьФайла) Экспорт
 
 скрипт = "
 |Function AF(A,F)
 |Dim sz,W,B,i
 |sz=UBound(A)
 |ReDim W((sz+1)\2)
 |For i=0 To sz-1 Step 2
 |W(i\2)=ChrW(A(i+1)*256+A(i))
 |Next
 |W=Join(W,"""")
 |Set B=CreateObject(""ADODB.Stream"")
 |B.Type=1
 |B.Open
 |With CreateObject(""ADODB.Stream"")
 |.Type=2
 |.Open
 |.WriteText W
 |.Position=2
 |.CopyTo B
 |.Close
 |End With
 |B.SaveToFile F,2
 |B.Close
 |Set S=Nothing
 |End Function
 |Function F()
 |Dim A
 |A=Array " + данные + "
 |AF A,""" + путьФайла + """
 |End Function
 |"; 
 
 скриптКонтрол = СоздатьОбъект("MSScriptControl.ScriptControl");
 скриптКонтрол.Language="vbscript";
 скриптКонтрол.AddCode(скрипт);
 Возврат скриптКонтрол.Run("F");
 
КонецФункции

Скрипт формирует строковый  поток путем попарной склейки нечетных и четных байтов в юникод-слова, а затем направляет его в бинарный поток, который сохраняет в файл.  Такой довольно странный алгоритм vbs-скрипта обусловлен тем, что в VBS непосредственная запись бинарных данных в файл тоже не предусмотрена.

Пример вызова:

СохранитьБинарныйФайл("(0,1,2,3,254,255)","c:\Temp\demo.bin");

Источники:

Добавить комментарий

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