Ошибка разбора манифеста внешней компоненты

Представлена компонента для получения широковещательных оповещений и управления буфером обмена в ОС Андроид.

Широковещательные оповещения

Продолжение статьи автора о внешних компонентах для мобильных приложений, в которой представлен развернутый пример компоненты получения широковещательных оповещений в андроиде (broadcasts). Идею ее создания подсказала работа //infostart.ru/public/587908/, в которой был предложен универсальный получатель сообщений от сканеров, но решение выполнено через сервис, хотя ничто не мешает оформить его в виде компоненты. Архитектурный выигрыш несомненный, но главные удобства получает пользователь, которому нужно будет установить только приложение 1С без дополнительного ПО.

Для подключения компоненты используем стандартный код:

// Component - имя макета, в котором находится компонента

ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");

Так как решение полностью выполнена по стандарту 1С (устройство ввода), установка параметров выполняется методом «УстановитьПараметр», включение и выключение — «Подключить» и «Отключить» соответственно. Параметр, который обязательно нужно установить — «FilterName«, это имя оповещения. Для сканеров его необходимо взять из документации. Также можно использовать любые системные броадкасты, например отсюда. В примере конфигурации к статье представлен способ получения информации о батарее устройства. Следующий важный параметр — «CaptureData«. В него следует передать XML строку с описанием извлекаемых дополнительных данных оповещения. Для удобства ее можно получить, вызвав метод «ПолучитьШаблонОписанияДанных», который возвращает строку:

<?xml version="1.0" encoding="utf-8"?>
<dataExtra name="%1" arrayToString="%2" dataType="%3" />

Она содержит три параметра в формате %n, чтобы ее было удобно использовать в методе «ПодставитьПараметрыВСтроку» из БСП. Первый параметр — имя дополнительных данных. Второй должен иметь значения true или false и используется только для обработки массива байт или символов (см. ниже). Третий параметр — число, тип извлекаемых данных в соответствии с таблицей:

Значение параметра Тип данных
0 строка
1 массив строк
2 short
3 массив типов short
4 long
5 массив типов long
6 int
7 массив типов int
8 float
9 массив типов float
10 double
11 массив типов double
12 символ
13 массив символов
14 байт
15 массив байтов
16 булево
17

массив типов булево

18

неподдерживаемый тип данных

19

Пустые данные (null)

(Типы последних двух строк могут возвращаться, если параметр CaptureData не задан, об этом режиме работы см. ниже).

Для массивов типов байт или символ параметр attayToString может быть установлен в true. В этом случает при получении дополнительных значений, они будут преобразовываться в строку. Это может пригодится для работы с некоторыми сканерами, которые возвращают результат в виде набора байтов. Покажем код установки параметров перед включением компоненты:

ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
health = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"health",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",health);
tech = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"technology",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",tech);
present = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"present",XMLСтрока(Ложь),XMLСтрока(16));
Компонента.УстановитьПараметр("CaptureData",present);
level = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"level",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",level);

Какие данные необходимо получить мы определяем последовательными вызовами установки параметра CaptureData. Удалить или изменить этот набор после установки невозможно, для этого необходимо пересоздать объект компоненты.

Параметр «Category» позволяет добавить к намерению отбор по категориям. Его также можно устанавливать перед стартом отслеживания броадкастов несколько раз, если требуется отбор по нескольким категориям. Очистка набора категорий возможна только при пересоздании объекта компоненты.

После включения компонента, как и любое устройство ввода, возвращает данные через внешнее событие 1С. Первый параметр события — серийный номер устройства, второй параметр имеет значение «UniversalBroadcastEvent», а третий — текст в формате XML примерно такого вида:

<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData">Значение дополнительных данных</FilterData>
<FilterData name="имя очередного параметра CaptureData">
<ArrayValue>элемент 1 массива данных</ArrayValue>
<ArrayValue>элемент 2 массива данных</ArrayValue>
</FilterData>
</MessageData>

Как можно догадаться из примера, значения одиночных дополнительных данных возвращаются в тексте элемента <FilterData>, а массивов элементами <ArrayValue>.

Начиная с релиза 1.1.4 компонента поддерживает автоматическое определение всех возможных фильтров и возвращаемых типов данных. Чтобы включить такой режим, необходимо оставить параметр CaptureData пустым. При возникновении события xml тэг MessageData не будет возвращать значений, но будет включать числовой атрибут datatype в соответствии с приведенной выше таблицей. Если событие будет иметь данные с пустым значением, тип которого невозможно определить, атрибут будет равен 19. Сложным типам, необрабатываемым компонентой, будет присвоен индекс 18.

<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData" datatype="число - индекс типа из таблицы"/>
<!-- любое число тэгов FilterData -->
</MessageData>

Приведем пример xml, возвращаемого батареей (android.intent.action.BATTERY_CHANGED) в режиме определения фильтров:

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

Буфер обмена

В версии 1.1 компоненты добавлена работа с буфером обмена Андроида (clipboard). Буфер позволяет выполнять операции вставки и извлечения (Copy/Paste) и может содержать данные типов текст, гиперссылка и намерение. Свойство СодержимоеБуфера возвращает их в текстовом представлении. Метод УстановитьСодержимое передает в буфер любой текст. Компонента также в состоянии передать в 1С оповещение об изменении буфера любой программой или службой.

Подключение объекта буфера:

КомпонентаБуфер = Новый("AddIn.Broadcasts.Clipboard");

Объект Clipboard тоже реализован по стандарту устройства ввода. Соответственно, имеет методы Подключить и Отключить. После подключения компонента передает в 1С внешнее событие с именем ClipboardEvent при изменении содержимого буфера. Третий параметр внешнего события содержит текстовое представление данных или пустой, если буфер очищен. Независимо от подключения, разработчик может использовать свойство компоненты СодержимоеБуфера (ClipboardContent) доступное только для чтения, которое возвращает содержимое буфера обмена и метод УстановитьСодержимое (SetContent) с двумя параметрами (данные и метка — строки) для его модификации.

Примечание: Если компонента буфера подключена методом Подключить, помещение данных через УстановитьСодержимое породит внешнее событие ClipboardEvent, неотличимое от любого другого изменения. Нужно либо отключать компоненту перед изменением буфера либо фильтровать такие события по данным, если стоит задача их проигнорировать.

О примере

Макет компоненты из конфигурации, прилагаемой, к статье не содержит дополнительных разрешений (permissioms). Если они требуются для получения конкретных оповещений, их можно добавить в архив макета компоненты (включить файл android_manifest_permissions.xml) и собрать приложение.

Конфигурация и внешняя компонента предназначены для работы с релизом мобильной платформы не ниже 8.3.15.59.  Допускается также работа с релизами, начиная с 13-го, но для этого необходимо вручную отредактировать манифест компоненты в архиве и удалить поддержку 64-битный платформ.

  1. 30.09.2011, 06:41

    #1

    VDIGIT вне форума


    Пришел за помощью


    Exclamation Ошибка внешней компоненты ПРИ ПЕЧАТИ ШТРИХ-КОДА

    Доброго времени суток !
    Имеется 1С:Предприятие 8.2 (8.2.13.219) Конфигурация Управление торговлей, редакция 11.0 (11.0.6.9)
    Проблемы заключается в следующем: Необходимо распечатать этикетку со штрих-кодом. И при печати появляется «ошибка внешней компоненты» если кликнуть подробно то появлется сие сообщение:
    {Обработка.ПечатьЭтикетокИ Ценников.МодульМенеджера(24 5)}: Ошибка при установке значения атрибута контекста (РазмерШрифта)
    ВнешняяКомпонента.РазмерШ� �ифта = ПараметрыШтрихкода.Размер� �рифта;
    по причине:
    Ошибка внешней компоненты

    Вот такие дела. Кто с таким сталкивался и как победил ? Заранее спасибо !

    Последний раз редактировалось VDIGIT; 30.09.2011 в 06:41.

    Причина: Опечатка


  2. 07.10.2011, 19:59

    #2

    AVS300 вне форума


    Помогает людям


    По умолчанию

    А компонента 1С: Печать штрихкода установлена? если нет, то такая есть на диске ИТС


  3. 10.10.2011, 06:33

    #3

    VDIGIT вне форума


    Пришел за помощью


    По умолчанию

    Цитата Сообщение от AVS300
    Посмотреть сообщение

    А компонента 1С: Печать штрихкода установлена? если нет, то такая есть на диске ИТС

    Установлена (причем вариантов компоненты немерено было переставлено). «Ошибка» в самой конфигурации, а точнее в размере шрифта. Слегка изменил саму конфигурацию (и само формирование и печать) и все заработало как надо ! Только надо немного доделать, чтобы было на «автоматическом» уровне, а то лезть и править конфигурацию не есть гут ! как сделаю выложу !


  4. 29.01.2012, 19:46

    #4

    161a вне форума


    Гость форума


    По умолчанию

    Цитата Сообщение от VDIGIT
    Посмотреть сообщение

    Установлена (причем вариантов компоненты немерено было переставлено). «Ошибка» в самой конфигурации, а точнее в размере шрифта. Слегка изменил саму конфигурацию (и само формирование и печать) и все заработало как надо ! Только надо немного доделать, чтобы было на «автоматическом» уровне, а то лезть и править конфигурацию не есть гут ! как сделаю выложу !

    блин! будь другом! подскажи как вышел из ситуёвины!… клинит напроч что-то…


  5. 09.04.2012, 06:36

    #5

    RatiborNorilsk вне форума


    Гость форума


    По умолчанию Сабж

    Столкнулись с такой же проблемой: при печати созданного в 1С Розница 8.2 штрихкода выводилось сообщение: . При переходе в конфигуратор выдавалось более подробное описание:

    Ошибка времени выполнения:
    {Обработка.ПечатьЭтикетокИ Ценников(256)}: Ошибка при установке значения атрибута контекста (РазмерШрифта) в модуле Обработка.ПечатьЭтикетокИ� �енников, строка 256.

    .
    При этом созданная «этикетка по умолчанию», содержащая шрихкод, прекрасно выводилась на печать до тех пор пока не изменялся ее размер. Изменение параметров штрихкода-картинки («растянуть», «реальный размер», «пропорционально») никакого эффекта не давали.
    Победить проблему не удалось, зато удалось ее «замаскировать»:
    1. В конфигураторе был задействован режим отладки: меню Отладка Остановка по ошибке ставим галочку в пункт Останавливаться по ошибке и сохраняемся (Сделайте бекап базы и/или конфигурации на всякий пожарный случай)
    2. Запускаем одновременно с конфигуратором (можно прямо из него) 1С и повторяем событие ошибки.
    3. Нас перебрасывает в конфигуратор на нужную нам строку в которой как-раз и стоит параметр «размер шрифта»
    4. Закомментируем (то есть «спрячем» от исполнения программой) эту строку кода: перед строкой впереди поставим два слэша — (строка поменяет цвет текста на зеленый)
    5. Сохраняем конфигурацию и перезапускаем 1С
    6. В 1Ске делаем следующее: открываем шаблон нашей этикетки и видим, что рядом с надписью: «Тип кода (выборка) EAN13» чуть правее стоит галочка в пункте «Отображать текст». Снимаем галочку.
    7. Теперь сформированный штрихкод будет отображаться просто как штрихкод, без записи его значения в цифровом отображении (с размером шрифта этих цифр и происходит сбой при выводе на печать).
    8. Создаем свою этикетку, правим ее, вставляем штрихкод и растягиваем его как нам нужно.
    9. Если кроме штрихкода вам нужны еще и цифры составляющие его, то ниже/выше/рядом со штрихкодом вставьте еще один, но уже в текстовом виде (при вставке штриха 1С вас спросит – вставить ли его как картинку – откажитесь и получите штрихкод в цифровом символьном виде) и отредактируйте что бы оба штриха были у вас рядом и выглядели так как вам нужно.
    Это конечно не решение проблемы, но это поможет вам сделать этикетку на печати нужного вам вида и размера.

    P.S. Для тех кто мучается с выводом текста этикетки на печать (этикетка печатается со смещением от края/ распечатывается кусками на 4-6 наклеек/ печатается криво и не позволяет менять размер шрифта и пр.): не забудьте что в 1С 8.2 есть в верхнем левом углу меню Файл Параметры страницы так же отвечающие за вывод текста на печать (а так же есть настройки отображения при печати в самом драйвере принтера – щелкните по принтеру правой клавишей мыши и настройте).

    Всем удачи.


I have an apk that installs fine on all my devices except on an old Samsung Galaxy J5 (and on a Huawei Y3).

I had copy the APK on the device via USB and try to install it with the «my files» app. The log is as follows:

02-08 11:36:56.226 1647-1674/? D/ActivityManager:  Launching com.google.android.packageinstaller, updated priority
02-08 11:36:56.226 1647-1647/? D/GameManagerService: NotifyRunnable. pkg: com.google.android.packageinstaller, type: 4, isMinimized: false, isTunableApp: false
02-08 11:36:56.226 1647-1647/? D/GameManagerService: unexpected mPrevNotiType: -1
02-08 11:36:56.246 1647-1836/? W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:843 com.android.server.policy.PhoneWindowManager.notifyToSSRM:9071 com.android.server.policy.PhoneWindowManager.access$2100:330 com.android.server.policy.PhoneWindowManager$PolicyHandler.handleMessage:1268 android.os.Handler.dispatchMessage:102 
02-08 11:36:56.246 19954-19954/? W/PackageInstaller: Parse error when parsing manifest. Discontinuing installation

Did anybody come across something like that as well?
I´ve checked the option that I can install APK from unknown sources so that can´t be the problem. And I´ve tried to install it from SD-card or internal memory with no success.


Компонента 1С для мобильной платформы Андроид

 

Вышла 14-я по счету ревизия, которая сертифицирована в 1С. Она написана по требованиям мобильного БПО.

Здесь

новость с сайта 1С.

Ссылка

на саму компоненту.
В состав входит:
ScancodeBarcodeScannerCPT_A_x_x_x_x.zip — сам драйвер версии x_x_x_x
SCANCODE.KeyService.apk — сервис, необходимый для работы с аппаратной клавиатурой
Описание SCANCODE.KeyService.pdf — описание установки сервиса SCANCODE.KeyService
1C_MobileDriver_A.pdf — описание методов драйвера
1C_MobileDriver_A.cf — демо конфигурация 1С, пример использования методов драйвера.
1C_MobileDriver_A.apk — установочный комплект демоконфигурации. Работает только на мобильной платформе 8.3.12 и выше.
Для более старых необходимо собрать установщиком под свою версию из файла 1C_MobileDriver_A.cf

Для работы необходимо установить Генератор Приложений не ниже 1.0.5.9 (до версии компоненты 1.0.1.0)

В этой ветке будем обсуждать все связанное с этой компонентой.

 

Вышла версия 1.0.0.17.
Начинаем набирать статистику. На разных версиях платформ, как мобильных, так и настольных возникают проблемы. Замечено, что на настольной платформе 8.3.12.1685 и 8.3.13.1576 при попытке выгрузить конфигурацию для сборщика возникает ошибка «Ошибка разбора манифеста внешней компоненты ДрайверMobileDriver: отсутствует обязательный атрибут name».
Если у кого проблемы с другими версиями, пишите сюда, будем проверять и выкладывать как нежелательные к использованию.

 

Олег Шуберт

Пользователь

Сообщений: 4
Регистрация: 30.01.2017

Платформа 8.2.12.1714, Ошибка разбора манифеста внешней компоненты ДрайверMobileDriver: отсутствует обязательный атрибут name.

На какой версии, этой ошибки нет?

 

Это ошибка платформы. Мы работаем на таких версиях:
платформа ПК — 8.3.12.1685; 8.3.13.1513
платформа мобильная — 8.3.12.93; 8.3.12.67; 8.3.11.57
конфигурация «Сборщик мобильных приложений» — 2.0.7.54

 

Олег Шуберт

Пользователь

Сообщений: 4
Регистрация: 30.01.2017

Спасибо. Собрал приложение.

Во время подключения AddIn.ScancodeBarcodeScannerCPT.ScancodeBarcodeScannerCPT возникает событие «Нет разрешений для работы NFC».

А во время сканирования, вместо значения штрихкода, пишет «not licensed».

Сканер RS-31. 1C Мобильная платформа 8.3.12.46, 8.3.12.93

Изменено: Олег Шуберт22.02.2019 14:26:09
(опробовал на другой версии.)

 

Олег Плюснин

Администратор

Сообщений: 4455
Регистрация: 30.01.2017

#6

0

22.02.2019 15:46:33

Цитата
Олег Шуберт написал:
возникает событие «Нет разрешений для работы NFC».

В файле 1cema.xml дайте разрешение
<requiredPermission>
<permission>NFC</permission>
<use>true</use>
</requiredPermission>
Пересоберите.

Цитата
Олег Шуберт написал:
А во время сканирования, вместо значения штрихкода, пишет «not licensed».

ГП установлен? Он лицензирован? Если нет, укажите серийный номер ТСД.

 

На данный момент компонента умеет:
• Работать с разными моделями ТСД (список ниже).
• Поддерживает физическую клавиатуру.
• Поддерживает работу с NFC.
• Поддерживает работу с FTP.
• Мониторинг состояния каталога (файла).
• Работа с RFID метками (по одной метке умеет читатьписать). Модель ТСД Newland SD60RT.
• Генератор голоса (проговаривает текст).
• Получен сертификат 1С:Совместимо

Поддерживает терминалы сбора данных:
• CipherLAB RS30, RS31, RS50, RS51, RK25, 9700A
• GlobalPOS GP-C5000, GP-C6000
• Honeywell EDA50/EDA50K, EDA60/EDA60K, EDA70
• Newland NLS-MT65W, NSL-MT90, SD60RT, KT40H

Компонента не зависит от Генератора Приложений, но для работы требуется установка SCANCODE.GeneralService

 

Добрый день.
ТСД GP-C5000 (серийный номер C5L01011501F922778).

Из архива «1C_mobileDriver_A_1_0_1_3.rar»:
1. Установил на ТСД установочный комплект демоконфигурации — «1C_MobileDriver_A.apk» — работает корректно.
2. Собрал сборщиком свой .apk из файла демо конфигурации «1C_MobileDriver_A.cf» — выдает ошибку «Ошибка подключения внешней компоненты»:
рез = ПодключитьВнешнююКомпоненту(«ОбщийМакет.ДрайверMobileDriver», «ScancodeBarcodeScannerCPT», ТипВнешнейКомпоненты.Native);
Соответственно рез = Ложь.

Платформа 8.3.13.1513.
Мобильная платформа 8.3.15.59
Сборщик 2.0.10.55

 

С мобильной платформой 8.3.12.93 удалось собрать apk без ошибок.

 

Евгений

Пользователь

Сообщений: 1
Регистрация: 02.11.2019

#10

0

02.11.2019 09:12:58

Добрый день. Модель RK25, Серийный номер : FJ118BA003996.
Установил последний комплект 1C_mobileDriver_A_1_0_1_5.
Проблема следующая: При сканировании штрих кода пишет ошибку not licensed.

Добрый день.

Попробуйте очистить базу данных на ТСД и перезагрузить данные, проверить, что выгружается по неверно выгруженным товарам, на ТСД проблем нет, здесь проблема скорее всего с Вашей базой.

Добрый день.

Пока через обработку данные не выгружаются, доработаем в ближайшее время.

Попробуйте выгрузить данные через стандартную кнопку «Выгрузить на ТСД» в документе, подключив ТСД через библиотеку подключаемого оборудования.

В мобильной торговле документ из учетной системы выгружается на ТСД, обрабатывается и загружается обратно.

Вот пример работы:

Добрый день.

Объясните подробнее, какое приложение Вы используете?

Добрый день.

Для работы МРМ  с УТ мы меняли следующие модули:

Web-сервис WMSMobileClientExchange

XDTO-пакет WMSMobileClientExchange;

общий модуль РабочееМестоРаботникаСкладаXDTO;

общий модуль РабочееМестоРаботникаСкладаПрограммныйИнтерфейс;

Добрый день.

Для работы МРМ  с УТ мы меняли следующие модули:

Web-сервис WMSMobileClientExchange

XDTO-пакет WMSMobileClientExchange;

общий модуль РабочееМестоРаботникаСкладаXDTO;

общий модуль РабочееМестоРаботникаСкладаПрограммныйИнтерфейс;

Вот ссылка на конфигурацию УТ https://yadi.sk/d/ogjLkXEM3aCB9C

Содержание

  1. Общее описание
  2. Порядок создания и подключения внешней компоненты
  3. Создание внешней компоненты
  4. Подключение внешней компоненты
  5. Порядок тестирования и отладки
  6. Варианты работы компоненты
  7. 1. Что такое внешняя компонента. Подключение компоненты 1С
  8. 2. Установка компонент 1С. Подключение внешней компоненты.

Общее описание

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

К таким задачам можно отнести:

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

Внешние компоненты в системе «1С:Предприятие» используются как для сервера (Windows и Linux, 32 или 64 бит), так и для клиента («тонкий» и веб-клиент).

Порядок создания и подключения внешней компоненты

Создание внешней компоненты

Создание внешней компоненты выполняется в программе Microsoft Visual Studio. В качестве примера рассмотрим создание компоненты, которая вырезает часть изображения для распознавания.
Скачать шаблон внешней компоненты (шаблон разработан для сервера Windows, 32 бит).

Самый простой способ создания компоненты — это заменить нижеперечисленные функции в готовом шаблоне внешней компоненты:

  1. Присвоить классу C1CGetImageFragment новое имя, например MyAddIn .
  2. Также пеименовать файлы, например 1CGetImageFragment.h на MyAddIn.h и 1CGetImageFragment.cpp на MyAddIn.cpp .
  3. В файле MyAddIn.h в перечислении enum Methods указать свои имена перечисления (помимо eVersion). Копировать в буфер обмена
  4. В массивах строк g_MethodNames и g_MethodNamesRu указать названия своих функций на английском и русском языках. Рекомендуется оставить функцию Версия , в дальнейшем она пригодится для поддержки работы компоненты.
  5. В строковом литерале g_kClassNames указать свое имя класса, например MyAddIn .
  6. В функции GetNParams указать число аргументов для своих методов.
  7. При необходимости в функции GetParamDefValue указать аргументы по умолчанию для своих методов.
  8. В функции HasRetVal указать, возвращает ли ваша функция значение. Например: Копировать в буфер обмена
  9. В функции CallAsFunc добавить код одной или нескольких новых функций.

После замены функций необходимо выполнить следующие шаги:

Шаг 1. Скомпилировать компоненту в Release-варианте и получить файл в виде dll-библиотеки, например MyAddIn.dll . Этот файл необходимо разместить рядом с файлом Manifest.xml .

Шаг 2. В файл Manifest.xml необходимо внести следующие изменения:

  • вписать название компоненты в поле path=» MyAddIn.dll» ;
  • при необходимости изменить разрядность в поле arch=»i386″ , значение по умолчанию — 32 бит;
  • указать операционную систему в поле os=»Windows» .

Шаг 3. Файлы MyAddIn.dll и Manifest.xml поместить в zip-архив с произвольным именем, например MyAddIn.zip .

Подключение внешней компоненты

Подключение внешней компоненты выполняется в конфигураторе и состоит из следующих шагов:

Шаг 1. Добавить общий макет с типом ДвоичныеДанные и назвать его, например МойМакет . Далее загрузить в макет файлы из подготовленного архива с внешней компонентой с помощью команды карточки макета Загрузить из файла — MyAddIn.zip .

Шаг 2. Если компонента еще не установлена (метод ПодключитьВнешнююКомпоненту возвращает Ложь ),нужно приступить к установке. Для этого предусмотрен вызов:

После установки компоненты не обходимо перейти к ее подключению.

Шаг 3. Подключение внешней компоненты выполняется в том месте конфигурации, где ее планируется использовать. Пример подключения внешней компоненты можно посмотреть в модуле РаботаСКартинкамиКлиент типовой конфигурации. Пример кода подключения:

Текст МойМакетAddIn — произвольный. Единственное условие — он должен совпадать в приведенных выше вызовах.
Строка AddInNativeExtension — уже указана в шаблоне компоненты ( RegisterExtensionAs ), ее не надо менять.
Переменную МояКомпонен та рекомендуется описать в мод уле управляемого и обычного приложения как Перем МояКомпонента Экспорт .

Шаг 4. Вызов кода внешней компоненты.

Скачать пример внешней компоненты в архиве 1CGetImageFragment.zip . Компонента вырезает часть изображения с заданными координатами и размером и предназначена только для работы в 32-разрядном Windows, в тонком клиенте.

Порядок тестирования и отладки

При написании внешней компоненты как правило возникает необходимость отладки. Самый простой способ отладки – это логирование в текстовый файл.
Более продвинутый способ – отладка в программе Microsoft Visual Studio. Для отладки в Microsoft Visual Studio необходимо:

  1. Создать компоненту в Debug-варианте, например MyAddIn.pdb .
  2. Расположить pdb-файл в каталог установки внешних компонент вида C:UsersИмя пользователяAppDataRoaming1C1Cv82ExtCompT ;
  3. В режиме конфигуратора запустить «тонкий» клиент «1С:Предприятия»( 1cv8c.exe );
  4. Поставить в конфигураторе точку останова перед вызовом МояКомпонента.МояФункция и дождаться ее срабатывания.
  5. В Microsoft Visual Studio подключиться отладчиком к 1cv8c.exe .
  6. В Microsoft Visual Studio создать точку останова.
  7. В «1С:Предприятии» выполнить вызов МояКомпонента.МояФункция , при этом в Microsoft Visual Studio должна сработать точка останова.
  8. В Microsoft Visual Studio отладить работу компоненты.

Важно: при перекомпиляции внешней компоненты, нужно не только заново подготовить zip-файл ( dll компоненты + manifest.xml ) и загрузить его в общий макет, но и стереть закешированную компоненту dll в каталоге вида C:UsersИмя пользователяAppDataRoaming1C1Cv82ExtCompT .

Варианты работы компоненты

При разработке внешней компоненты необходимо решить, в каких вариантах она будет работать: Windows/Linux, 32/64 бита, сервер/тонкий клиент/веб-клиент (разные браузеры).

Чтобы компонента работала на сервере, необходимо решить, будет ли она предназначена только для вашей организации или будет использоваться как тиражируемое решение. Для разработки тиражируемого решения необходимо предусмотреть четыре варианта работы – Windows 32бит, Windows 64бит, Linux 32бит, Linux 64бит. Подробнее .

Чтобы компонента работала на клиенте, необходимо решить, будет ли она предназначена только для вашей организации или будет использоваться как тиражируемое решение. Для разработки тиражируемого решения необходимо предусмотреть четыре варианта работы – Windows 32бит, Linux 32бит, Linux 64бит, сборки для разных веб-браузеров. Подробнее .

По заданию руководства интегрировал софтофон в базу на основе известной CH-Com1S. Сервер Windows 2012 (64). На тонком клиенте (32) в RDP работает прекрасно, но появилось задание перенести на компьютер пользователя(Windows XP 32). Для этого настроили IIS и опубликовали базу. Подцепили не из браузера, а по тонкому клиенту. База запускается и все работает кроме софтофона. Вот кусок кода:

т.е. компонента устанавливается и подключается, но оъект не создается. Эта проблема только на компьютере пользователя. Если подключиться по RDP к серверу и адрес базы указать как localhost, то все работает.

Почему так? Как иправить? Где копать? Я думаю, что это где-то в настройках IIS, но не знаю где.

Перед тем как подключить внешнюю компоненту 1С, давайте рассмотрим, что же она собой представляет в плане теории.

1. Что такое внешняя компонента. Подключение компоненты 1С

Ни для кого не секрет, что 1С является очень динамичной платформой для работы с основными технологиями, к которым мы можем получить доступ из конфигурации. Явным примером этого является Ole, COM, web сервисы, обмен данными через xml и т.д. Имея навыки программирования можно легко настроить подключение и/или обмен данными с любой cms системой в сети интернет либо той, которая имеет api функционал. Но иногда появляется необходимость в расширении функционала, которого мы не можем добиться, используя язык 1С. В этом плане на помощь нам приходят внешние компоненты. Говоря простым языком, внешние компоненты — это в 1С стандартные библиотеки с наборами функций, скомпилированные (собранные) для работы с внешней программой. Для работы с внешними компонентами нам в первую очередь нужно их подключить, это можно делать либо динамически (подключить в конкретном куске кода для выполнения некоторого функционала, нужно лишь в этот момент), либо зарегистрировать ее в системе.

Наиболее оптимально хранить компоненты как макеты в конфигурации. Это дает возможность не зависеть от конкретного «железа», а также программного обеспечения. Для такого хранения нам подойдет макет с типом «Двоичные данные»:

2. Установка компонент 1С. Подключение внешней компоненты.

Хранение компоненты мы организовали. Далее нам надо рассмотреть, как подключить компоненту. Если внешняя компонента используется впервые, перед подключением ее нужно установить. Пример установки и подключения компоненты приведен ниже:

Для вызова функций нашей компоненты нам нужно ее использовать как переменную. Пример вызова функции:

В данном примере мы рассмотрели, как подключить компоненту, и что собой представляет внешняя компонента 1С.

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

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

Представлена компонента для получения широковещательных оповещений и управления буфером обмена в ОС Андроид.

Широковещательные оповещения

Продолжение статьи автора о внешних компонентах для мобильных приложений, в которой представлен развернутый пример компоненты получения широковещательных оповещений в андроиде (broadcasts). Идею ее создания подсказала работа //infostart.ru/public/587908/, в которой был предложен универсальный получатель сообщений от сканеров, но решение выполнено через сервис, хотя ничто не мешает оформить его в виде компоненты. Архитектурный выигрыш несомненный, но главные удобства получает пользователь, которому нужно будет установить только приложение 1С без дополнительного ПО.

Для подключения компоненты используем стандартный код:

// Component - имя макета, в котором находится компонента

ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");

Так как решение полностью выполнена по стандарту 1С (устройство ввода), установка параметров выполняется методом «УстановитьПараметр», включение и выключение — «Подключить» и «Отключить» соответственно. Параметр, который обязательно нужно установить — «FilterName«, это имя оповещения. Для сканеров его необходимо взять из документации. Также можно использовать любые системные броадкасты, например отсюда. В примере конфигурации к статье представлен способ получения информации о батарее устройства. Следующий важный параметр — «CaptureData«. В него следует передать XML строку с описанием извлекаемых дополнительных данных оповещения. Для удобства ее можно получить, вызвав метод «ПолучитьШаблонОписанияДанных», который возвращает строку:

<?xml version="1.0" encoding="utf-8"?>
<dataExtra name="%1" arrayToString="%2" dataType="%3" />

Она содержит три параметра в формате %n, чтобы ее было удобно использовать в методе «ПодставитьПараметрыВСтроку» из БСП. Первый параметр — имя дополнительных данных. Второй должен иметь значения true или false и используется только для обработки массива байт или символов (см. ниже). Третий параметр — число, тип извлекаемых данных в соответствии с таблицей:

Значение параметра Тип данных
0 строка
1 массив строк
2 short
3 массив типов short
4 long
5 массив типов long
6 int
7 массив типов int
8 float
9 массив типов float
10 double
11 массив типов double
12 символ
13 массив символов
14 байт
15 массив байтов
16 булево
17

массив типов булево

18

неподдерживаемый тип данных

19

Пустые данные (null)

(Типы последних двух строк могут возвращаться, если параметр CaptureData не задан, об этом режиме работы см. ниже).

Для массивов типов байт или символ параметр attayToString может быть установлен в true. В этом случает при получении дополнительных значений, они будут преобразовываться в строку. Это может пригодится для работы с некоторыми сканерами, которые возвращают результат в виде набора байтов. Покажем код установки параметров перед включением компоненты:

ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
health = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"health",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",health);
tech = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"technology",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",tech);
present = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"present",XMLСтрока(Ложь),XMLСтрока(16));
Компонента.УстановитьПараметр("CaptureData",present);
level = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"level",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",level);

Какие данные необходимо получить мы определяем последовательными вызовами установки параметра CaptureData. Удалить или изменить этот набор после установки невозможно, для этого необходимо пересоздать объект компоненты.

Параметр «Category» позволяет добавить к намерению отбор по категориям. Его также можно устанавливать перед стартом отслеживания броадкастов несколько раз, если требуется отбор по нескольким категориям. Очистка набора категорий возможна только при пересоздании объекта компоненты.

После включения компонента, как и любое устройство ввода, возвращает данные через внешнее событие 1С. Первый параметр события — серийный номер устройства, второй параметр имеет значение «UniversalBroadcastEvent», а третий — текст в формате XML примерно такого вида:

<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData">Значение дополнительных данных</FilterData>
<FilterData name="имя очередного параметра CaptureData">
<ArrayValue>элемент 1 массива данных</ArrayValue>
<ArrayValue>элемент 2 массива данных</ArrayValue>
</FilterData>
</MessageData>

Как можно догадаться из примера, значения одиночных дополнительных данных возвращаются в тексте элемента <FilterData>, а массивов элементами <ArrayValue>.

Начиная с релиза 1.1.4 компонента поддерживает автоматическое определение всех возможных фильтров и возвращаемых типов данных. Чтобы включить такой режим, необходимо оставить параметр CaptureData пустым. При возникновении события xml тэг MessageData не будет возвращать значений, но будет включать числовой атрибут datatype в соответствии с приведенной выше таблицей. Если событие будет иметь данные с пустым значением, тип которого невозможно определить, атрибут будет равен 19. Сложным типам, необрабатываемым компонентой, будет присвоен индекс 18.

<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData" datatype="число - индекс типа из таблицы"/>
<!-- любое число тэгов FilterData -->
</MessageData>

Приведем пример xml, возвращаемого батареей (android.intent.action.BATTERY_CHANGED) в режиме определения фильтров:

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

Буфер обмена

В версии 1.1 компоненты добавлена работа с буфером обмена Андроида (clipboard). Буфер позволяет выполнять операции вставки и извлечения (Copy/Paste) и может содержать данные типов текст, гиперссылка и намерение. Свойство СодержимоеБуфера возвращает их в текстовом представлении. Метод УстановитьСодержимое передает в буфер любой текст. Компонента также в состоянии передать в 1С оповещение об изменении буфера любой программой или службой.

Подключение объекта буфера:

КомпонентаБуфер = Новый("AddIn.Broadcasts.Clipboard");

Объект Clipboard тоже реализован по стандарту устройства ввода. Соответственно, имеет методы Подключить и Отключить. После подключения компонента передает в 1С внешнее событие с именем ClipboardEvent при изменении содержимого буфера. Третий параметр внешнего события содержит текстовое представление данных или пустой, если буфер очищен. Независимо от подключения, разработчик может использовать свойство компоненты СодержимоеБуфера (ClipboardContent) доступное только для чтения, которое возвращает содержимое буфера обмена и метод УстановитьСодержимое (SetContent) с двумя параметрами (данные и метка — строки) для его модификации.

Примечание: Если компонента буфера подключена методом Подключить, помещение данных через УстановитьСодержимое породит внешнее событие ClipboardEvent, неотличимое от любого другого изменения. Нужно либо отключать компоненту перед изменением буфера либо фильтровать такие события по данным, если стоит задача их проигнорировать.

О примере

Макет компоненты из конфигурации, прилагаемой, к статье не содержит дополнительных разрешений (permissioms). Если они требуются для получения конкретных оповещений, их можно добавить в архив макета компоненты (включить файл android_manifest_permissions.xml) и собрать приложение.

Конфигурация и внешняя компонента предназначены для работы с релизом мобильной платформы не ниже 8.3.15.59.  Допускается также работа с релизами, начиная с 13-го, но для этого необходимо вручную отредактировать манифест компоненты в архиве и удалить поддержку 64-битный платформ.

  • Ошибка разбора синтаксическая ошибка неожиданный
  • Ошибка разбора конфигурации line 1 column 1 syntax error
  • Ошибка разбора сбой разбора пакета самсунг
  • Ошибка разбора конфигурации excel
  • Ошибка разбора сбой разбора пакета андроид что делать