(1) устанавливать нужно каждый параметр по отдельности.
По приведенной ссылке:
Использование оборудования пользователем в процессе работы
Инициализация устройства сохраненными в базе параметрами методом «УстановитьПараметр(SetParameter)».
В 1С:
Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
...
Для Каждого Параметр Из Параметры Цикл
Если Лев(Параметр.Ключ, 2) = "P_" Тогда
ЗначениеПараметра = Параметр.Значение;
ИмяПараметра = Сред(Параметр.Ключ, 3);
ОбъектДрайвера.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра)
КонецЕсли;
КонецЦикла;
...
КонецФункции
(2) Драйвер фискального регистратора разрабатывается для типовых конфигурация 1С.
Соответственно для сервера Торгового Оборудования(ТО) версии выше 2.0, то есть для управляемого режима работы 1С у меня нет возможности писать код на 1С.
Это в "старой" версии ТО сервера для обычного приложения есть возможность указать обработку обслуживания на 1С и в ней самому писать нужный код на 1С.
По приведенной ссылке с спецификацией компонента представляет из себя zip архив с файлом манифеста и соответственно самой DLL.
И согласно той же спецификации сервер ТО должен сам вызывать УстановитьПараметр для каждого параметра из XML таблицы ТаблицаПараметров (TableParameters), но он почему то этого не делает.
Если я что то понял не правильно прошу меня поравить.
Это в "старой" версии ТО сервера для обычного приложения есть возможность указать обработку обслуживания на 1С и в ней самому писать нужный код на 1С.
В типовых сейчас используется БПО. Код в (2) как раз оттуда.
Загружается "драйвер" в БПО:
ProgID = ДанныеДрайвера.ИдентификаторОбъекта;
Если ПустаяСтрока(ProgID) Тогда
ОбъектДрайвера = ""; // Драйвер не требуется
Иначе
ProgID1 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, 1, Найти(ProgID, "|")-1), ProgID);
ProgID2 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, Найти(ProgID, "|")+1), ProgID);
Если ДанныеДрайвера.ПоставляетсяДистрибутивом Тогда
ПодключитьВнешнююКомпоненту(ProgID1);
Иначе
ИмяОбъекта = Сред(ProgID1, Найти(ProgID1, ".") + 1);
Префикс = Сред(ProgID1, 1, Найти(ProgID1, "."));
ProgID2 = Префикс + СтрЗаменить(ИмяОбъекта, ".", "_") + "." + ИмяОбъекта;
Если ДанныеДрайвера.ВСоставеКонфигурации Тогда
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ДанныеДрайвера.ИмяМакетаДрайвера, СтрЗаменить(ИмяОбъекта, ".", "_"));
Иначе
СсылкаНаДрайвер = ПолучитьНавигационнуюСсылку(ДанныеДрайвера.ДрайверОборудования, "ЗагруженныйДрайвер");
Результат = ПодключитьВнешнююКомпоненту(СсылкаНаДрайвер, СтрЗаменить(ИмяОбъекта, ".", "_"));
КонецЕсли;
КонецЕсли;
ОбъектДрайвера = Новый (ProgID2);
КонецЕсли;
Показать
В момент подключения обработчика для параметров не вызывается УстановитьПараметр.
Они вызываются по необходимости, в момент использования МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу. Где тип прописан необходимый тип устройства.
У меня есть XML таблица с параметрами, эти параметры заполняется в форме элемента справочника Подключаемое Оборудование IP, Password, Username, LogLevel, DefaultTaxGroup
В спецификации сказано:
Использование оборудования пользователем в процессе работы
1. Инициализация устройства сохраненными в базе параметрами методом «УстановитьПараметр(SetParameter)».
2. Подключение оборудования с помощью метода «Подключить(Open)» с текущими значениями параметров, установленными вызовами метода «УстановитьПараметр(SetParameter)». Метод «Подключить(Open)» возвращает идентификатор подключенного экземпляра устройства.
Обращаю внимание на фразу
установленными вызовами метода «УстановитьПараметр(SetParameter)»
То есть вопрос по сути: Как мне получить значение этих параметров в коде на С++, на котором написан драйвер устройства?
P.S. Все остальные методы
Требования к разработке драйверов подключаемого оборудования. Версия 2.4
, такие как ОткрытьСмену, НапечататьФискСтроку, ЗакрытьЧек или НапечататьЧекВнесенияВыемки вызываются и прекрасно работают.
У меня есть XML таблица с параметрами, эти параметры заполняется в форме элемента справочника Подключаемое Оборудование
Ок. Заполнились. Далее по Записать/ЗаписатьИЗакрыть выполняется сохранение параметров в справочнике "ПодключаемоеОборудование".
В спецификации сказано:
Тогда уж полностью спецификация:
Регистрация и настройка оборудования
Получение описания драйвера вызовом метода «ПолучитьОписание(GetDescription)».
Получения доступных параметров для настройки драйвера методом «ПолучитьПараметры(GetParameters)».
Построение формы настройки драйвера на основании списка доступных параметров.
Сохранение параметров настройки драйвера в базе данных конфигурации.
Использование оборудования пользователем в процессе работы
Инициализация устройства сохраненными в базе параметрами методом «УстановитьПараметр(SetParameter)».
Подключение оборудования с помощью метода «Подключить(Open)» с текущими значениями параметров, установленными вызовами метода «УстановитьПараметр(SetParameter)». Метод «Подключить(Open)» возвращает идентификатор подключенного экземпляра устройства.
Вызов обязательных функций и методов, специфичных для данного типа подключаемого оборудования, с использованием идентификатора подключенного экземпляра устройства.
Получение кода ошибки и описания ошибки методом «ПолучитьОшибку(GetLastError)» в случае ее возникновения.
Отключение устройства методом «Отключить(Close)» по идентификатору подключенного экземпляра устройства.
Показать
При регистрации и настройки нужно получить описание(параметры) и сохранить их в базе. В справочнике Подключаемое оборудование.
Использование оборудования:
При первом использовании создается объект драйвера. Т.е. подключается внешняя обработка. При подключении автоматически создается объект внутри этой обработки.
Затем происходит заполнение всеми параметрами, которые ранее были сохранены в справочнике. Для каждого параметра вызывается «УстановитьПараметр» отдельно (в цикле).
Соответственно в коде С++ ловить нужно каждый параметр отдельно.
УстановитьПараметр/SetParameter это метод созданный для конкретной вк в коде С++. Ищите/Создайте его.
Как мне получить значение этих параметров в коде на С++, на котором написан драйвер устройства?
Так как «УстановитьПараметр(SetParameter)» это процедура, то в коде С++ будет вызван:
bool CallAsProc(const long lMethodNum, tVariant* paParams, const long lSizeArray)
куда первым параметром будет передан номер вызываемого метода, который должен быть зарегистрирован. Вторым параметром соответственно передаваемые параметры(указатель на них).