|
Компонента 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) Угу придется все возможные параметры для каждой модели показывать, но использовать только нужные.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |