ExtService. Передача бинарных файлов из базы 1С на КПК

Если требуется передать на КПК дополнительные данные, например файлы изображений, документы (в формате Word,Excel), дополнительные утилиты в виде исполняемых файлов (exe),  можно воспользоваться методом внешней компоненты «РаскодироватьВФайл», описание:

DecodeInFile,РаскодироватьВФайл

Синтаксис:  РаскодироватьВФайл(Текст64,ПутьКФайлу)

Параметры Текст64 – тип: Строка, закодированная по алгоритму Base64

                 ПутьКФайлу – тип: Строка, путь к файлу, в который будет записан результат раскодирования.

Возвращает:  Истина, – если раскодирование произошло успешно, ложь в противном случае.

Описание:  Позволяет раскодировать строку по  алгоритму Base64, и сохранить результат в файл.

Метод реализован в компоненте версии 1.0.1.61. В данной статье приводится пример обновления внешней компоненты «ExtService», используя обмен с КПК через сервер мобильных приложений. 


  1. В редакторе мобильных приложений создаем новый объект «ExtService_DLL» в группе «Произвольно хранимые данные». Тип значения – строка неограниченной длины.

base64_1 

base64_2

Если требуется передача нескольких бинарных объектов можно, например, использовать дополнительный регистр сведений, у которого измерением может быть идентификатор файла (имя), а ресурс – строка неограниченной длины. 

  1. В процедуре выгрузки данных, в секцию «PersistentDataList» добавляем новый элемент:

//Демонстрационная конфигурация “Управление мобильными приложениями”, общий модуль “ОбменСКПК”

//процедура “ЗаписатьИнформациюОбОбъектахБезРегистрацииИзменений”

//…

// Запишем таблицу остатков

ЗаписьXML.ЗаписатьНачалоЭлемента(“PersistentDataList”);    

XMLСтрокаТаблицыостатков = ПолучитьОстаткиВВидеТЗ();    

ЗаписьXML.ЗаписатьНачалоЭлемента(“ТаблицаОстатковНоменклатуры”);    

ЗаписьXML.ЗаписатьТекст(XMLСтрокаТаблицыостатков);

ЗаписьXML.ЗаписатьКонецЭлемента();// ТаблицаОстатковНоменклатуры    

//начало изменений

//файл внешней компоненты, закодированный по base64

ЗаписьXML.ЗаписатьНачалоЭлемента(“ExtService_DLL”);

ДанныеDLL =Новый ДвоичныеДанные(c:ExtService.dll”);

СтрокаДанных = Base64Строка(ДанныеDLL);

//символов перевода строки быть не должно

СтрокаДанных = СтрЗаменить(СтрокаДанных, Символы.ВК,“”);

СтрокаДанных = СтрЗаменить(СтрокаДанных, Символы.ПС ,“”);

ЗаписьXML.ЗаписатьТекст(СтрокаДанных);

ЗаписьXML.ЗаписатьКонецЭлемента();

//… конец изменений

ЗаписьXML.ЗаписатьКонецЭлемента();// PersistentDataList

Файл внешней компоненты читается из файла, двоичные данные переводятся в строку (кодируются по алгоритму base64) и полученная строка записывается как значение для элемента «ExtService_DLL».

Обратите внимание, что перед записью строки в формате base64 из нее удаляются служебные символы перевода строки и возврата каретки.

Стандартный метод 1С «Base64Строка» зачем-то добавляет эти символы, а метод внешней компоненты «РаскодироватьВФайл» не учитывает данный нюанс и вернет ошибку, если эти символы встречаются в закодированной строке. 

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

    //Имя файла

    ИмяФайла =“ExtService.dll”;

    ДанныеBase64 = ПроизвольныеХранимыеДанные.ExtService_DLL.Получить();

    ЕслиНе ПустаяСтрока(ДанныеBase64)Тогда

        Если ВК.РаскодироватьВФайл(ДанныеBase64,ИмяФайла)Тогда

            Предупреждение(“Раскодировали в файл: “+ ИмяФайла );

        Иначе

            Предупреждение(“Ошибка!”); 

        КонецЕсли;

    КонецЕсли;

Примечание:

Сразу заменить файл «ExtService.dll» не получится т.к. он используется, необходимо сначала выгрузить внешнюю компоненту, а затем, используя штатный метод «КопироватьФайл» поместить его в каталог с установленной программой «1С: Предприятие 8. Расширение для КПК»;

Плюсы:

  • Нет необходимости подключать КПК к компьютеру через ActiveSync, возможно централизованное обновление;
  • Оперативная передача информации любого типа на КПК.

Минусы:

  • Увеличивается объем передаваемых данных, критично при использовании обмена по средствам GPRS. 

Надеюсь, в последующих версиях 1C для КПК добавят метод «Записать» для объекта «ДвоичныеДанные».

Процедура загрузки внешней компоненты в данном примере не показана, более подробно описание доступных методов смотрите в разделе «Документация».

В данном примере использовались:

Марка, модель КПК

Версия  ОС

Версия 1С

Версия ExtService

Symbol MC 7004

WM 5

8.1.6.21

1.0.1.61

(коммуникатор без GPS)


Похожие записи: