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

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

https://forum.sources.ru/index.php?showtopic=372237
Странновато немного конечно
14 NetFix
 
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
нет,а что вы ожидали?
символьное преобразование считает,что все символы и делает из двух байт четыре и наоборот.
16 NetFix
 
03.07.19
18:52
Ещё вопрос, в мануале(https://its.1c.ru/db/metod8dev#content:4829:hdoc:chapter231) написано:

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

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

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