Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Компонента 1C Native

Компонента 1C Native
Я
   NetFix
 
01.07.19 - 18:10
Подскажите как получить значения настроек, передаваемые в методе УстановитьПараметр (SetParameter), получаю имя параметра в &paParams[0], а в &paParams[1] пусто.
 
 
   Garykom
 
1 - 01.07.19 - 18:21
TV_VT(paParams) а далее смотря что там или ты про что?
   NetFix
 
2 - 01.07.19 - 18:23
case GetParameters:
    {
        wstring_to_p(L"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
            "<Settings>"
                "<Page Caption=\"Параметры\">"
                    "<Group Caption=\"Параметры подключения\">"
                        "<Parameter Name=\"Model\" Caption=\"Модель\" TypeValue=\"Number\"/>"
                        "<Parameter Name=\"Port\" Caption=\"Порт\" TypeValue=\"Number\" DefaultValue=\"0\">"
                            "<ChoiceList>"
                                "<Item Value=\"0\">COM1</Item>"
                                "<Item Value=\"1\">COM2</Item>"
                                "<Item Value=\"2\">COM3</Item>"
                                "<Item Value=\"3\">COM4</Item>"
                                "<Item Value=\"4\">COM5</Item>"
                                "<Item Value=\"5\">COM6</Item>"
                                "<Item Value=\"6\">COM7</Item>"
                                "<Item Value=\"7\">COM8</Item>"
                                "<Item Value=\"8\">COM9</Item>"
                                "<Item Value=\"9\">COM10</Item>"
                            "</ChoiceList>"
                        "</Parameter>"
                        "<Parameter Name=\"Parity\" Caption=\"Четность\" TypeValue=\"Number\" DefaultValue=\"false\"/>"
                        "<Parameter Name=\"Speed\" Caption=\"Скорость\" TypeValue=\"Number\" DefaultValue=\"9600\"/>"
                        "<Parameter Name=\"StopBits\" Caption=\"Стоп биты\" TypeValue=\"Number\" DefaultValue=\"1\"/>"
                    "</Group>"
                "</Page>"
            "</Settings>", &paParams[0]);
        TV_VT(pvarRetValue) = VTYPE_BOOL;
        TV_BOOL(pvarRetValue) = true;
    }
    break;
    case SetParameter:
    {
        wchar_t* wsTmp = 0;
        convFromShortWchar(&wsTmp, TV_WSTR(&paParams[0]));
        if(wcscmp(wsTmp, L"Model") == 0){

        }
        else if(wcscmp(wsTmp, L"Port") == 0){
            Port = TV_WSTR(&paParams[1]);
        }
        else if (wcscmp(wsTmp, L"Parity") == 0) {
            Parity = TV_WSTR(&paParams[1]);
        }
        else if (wcscmp(wsTmp, L"Speed") == 0) {
            Speed = TV_WSTR(&paParams[1]);
        }
        else if (wcscmp(wsTmp, L"StopBits") == 0) {
            StopBit = TV_WSTR(&paParams[1]);
        }

    }
    break;
   Garykom
 
3 - 01.07.19 - 18:24
switch (TV_VT(paParams))
{
case VTYPE_PSTR:
  break;
case VTYPE_PWSTR:
  ::convFromShortWchar(&wsTmp, TV_WSTR(paParams));
   Garykom
 
4 - 01.07.19 - 18:25
convFromShortWchar(&wsTmp, TV_WSTR(paParams));
   Garykom
 
5 - 01.07.19 - 18:26
(4)+ Но сначала switch (TV_VT(paParams))
   Garykom
 
6 - 01.07.19 - 18:29
Или хочешь внутрь еще раз засунуть типа составные? Не факт что выйдет.
types.h смотри
   NetFix
 
7 - 01.07.19 - 18:31
Судя по документации, в paParams должно лежать имя и значение параметра, я так понимаю в paParams[0] - имя, в paParams[1] - значение. Имя я получаю, значение всегда 0...(
   Garykom
 
8 - 01.07.19 - 18:31
(6)+ В смысле TV_ISARRAY(paParams)
   Garykom
 
9 - 01.07.19 - 18:33
(7) Эээ там все хитрее, это структура из двух частей.
В первой части лежит тип того что находится во второй.

Это не массив блин, точнее может быть и массив но впереди один хрен нечто что говорит "внутри массив".
И сначала получаешь TV_VT что внутри, а затем уже смотря что как надо получаешь значение.
   NetFix
 
10 - 01.07.19 - 18:42
Я понимаю, что эта структура с полем, в котором записан тип данных, несколько параметров в псевдо функциях 1С передаются через массив этих структур, немного не понял зачем мне вообще трогать поле vt? Что поменяется?
   Garykom
 
11 - 01.07.19 - 18:52
(10) Примерно так наверно
pParams = TV_ISARRAY(paParams);
pParams[0]
pParams[1]
   Garykom
 
12 - 01.07.19 - 18:53
(11)+ Если честно то примера готового не нашел а как правильно надо разбираться. Но я С++ херово знаю.
   Garykom
 
13 - 01.07.19 - 19:14
switch(TV_VT(&(paParams[1])))

https://forum.sources.ru/index.php?showtopic=372237
Странновато немного конечно
   NetFix
 
14 - 02.07.19 - 06:46
Методом тыка понял, что массив структур портится после convFromShortWchar(&wsTmp, TV_WSTR(&paParams[0]));

Вот так заработало:

case SetParameter:
    {
        wchar_t* wsTmp = 0;
        uint32_t intTmp;
        intTmp = TV_INT(&paParams[1]);
        convFromShortWchar(&wsTmp, TV_WSTR(&paParams[0]));
        if(wcscmp(wsTmp, L"Model") == 0){

        }
        else if(wcscmp(wsTmp, L"Port") == 0){
            Port = intTmp;
        }
        else if (wcscmp(wsTmp, L"Parity") == 0) {
            Parity = intTmp;
        }
        else if (wcscmp(wsTmp, L"Speed") == 0) {
            Speed = intTmp;
        }
        else if (wcscmp(wsTmp, L"StopBits") == 0) {
            StopBit = intTmp;
        }
        TV_VT(pvarRetValue) = VTYPE_BOOL;
        TV_BOOL(pvarRetValue) = true;
    }
    break;
   Сияющий в темноте
 
15 - 02.07.19 - 09:01
нет,а что вы ожидали?
символьное преобразование считает,что все символы и делает из двух байт четыре и наоборот.
   NetFix
 
16 - 03.07.19 - 18:52
Ещё вопрос, в мануале(https://its.1c.ru/db/metod8dev#content:4829:hdoc:chapter231) написано:

Необходимые для работы параметры могут быть структурированы для вывода на форму конфигурации "1С:Предприятия" - распределены по закладкам и группам на закладке. Закладки и группы могут иметь наименования, которые отобразятся на форме. Для параметров могут быть заданы определенные значения, которые сформируют выпадающий список для выбора. Наконец, поля параметров, ЗАВИСИМЫХ ОТ ДРУГИХ ПАРАМЕТРОВ, могут активироваться по необходимости.

Как собственно реализовать эту самую зависимость параметров?
   Сияющий в темноте
 
17 - 03.07.19 - 19:03
там же все через xml,а у него естт описание,если чего-то нет,то нужно смотреть как работает код на принимающей стороне.
   NetFix
 
18 - 03.07.19 - 19:57
Перерыл код разбора xml параметров, ничего похожего не нашёл.
   Garykom
 
19 - 03.07.19 - 20:40
Пример текстового XML описывающего параметры драйвера:

 <?xml version="1.0" encoding="UTF-8" ?>
 <Settings>
      <Page Caption="Параметры">    
      <Group Caption="Параметры подключения">
           <Parameter Name="Model" Caption="Модель" TypeValue="Number"/> 
           <Parameter Name="Port" Caption="Порт" TypeValue="Number" DefaultValue="0">
              <ChoiceList>
                  <Item Value="0">Клавиатура</Item>
                  <Item Value="1">COM1</Item>
                  <Item Value="2">COM2</Item>
               </ChoiceList>
           </Parameter>
           <Parameter Name="Parity" Caption="Четность" TypeValue="Boolean" DefaultValue="true"/>
           <Parameter Name="Speed" Caption="Скорость" TypeValue="Number" DefaultValue="1"/>
         </Group>
      </Page>
 </Settings>

В результате будет сформирована следующая форма для ввода параметров:
   Garykom
 
20 - 03.07.19 - 20:40
   NetFix
 
21 - 04.07.19 - 04:41
Ну а как реализовать зависимость параметров? Например "модель №1" - поля формы: номер порта, скорость, чётность и т.д. ,
"модель №2" - адрес устройства, порт.
   Сияющий в темноте
 
22 - 04.07.19 - 08:53
Боюсь,что в текущей версии никак,т.к.об этом еще не подумали.
идея 1с,что вместо формы настройки будет использоваться ее описание упирается в реализацию нетривиальной зависимости параметров,которую без исполнения кода не описать,но,наличие оператора Выполнить должнл помочь,но,пока я не видел ни одной компоненты,где бы явно работала зависимость.
   Garykom
 
23 - 04.07.19 - 10:25
(21) Угу придется все возможные параметры для каждой модели показывать, но использовать только нужные.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.