answer42 0.2.13__tar.gz → 0.2.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {answer42-0.2.13 → answer42-0.2.16}/PKG-INFO +1 -1
- {answer42-0.2.13 → answer42-0.2.16}/pyproject.toml +1 -1
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl +145 -12
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/server.py +8 -1
- {answer42-0.2.13 → answer42-0.2.16}/.gitignore +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/LICENSE +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/README.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/credentials.example.json +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/docs/agent-installation.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/docs/architecture.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/docs/assets/answer42-logo.png +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/docs/assets/platform42-logo.svg +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/docs/installation.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/scripts/build_cf.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/scripts/build_pages.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/scripts/e2e_stable.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/scripts/openclaw_mcp_autoreload.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/scripts/rag_cli.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/Configuration.xml +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Catalogs//320/237/320/241_/320/222/320/273/320/260/320/264/320/265/320/273/320/265/321/206.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Catalogs//320/237/320/241_/320/241/320/277/321/200/320/260/320/262/320/276/321/207/320/275/320/270/320/2721.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Configuration.xml +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ManagerModule.bsl" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ObjectModule.bsl" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205/Ext/Template.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262.xml" +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/__init__.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/__init__.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/bridge.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/credentials.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/os_support.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/platform.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/protocol.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/__init__.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/detect.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/model.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/parsers.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/service.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/store.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/recorder.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/release_helper.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/runtime.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/skill_installer.py +0 -0
- {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/window_control.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: answer42
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.16
|
|
4
4
|
Summary: Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API
|
|
5
5
|
Author: Marvin (AI Assistant), 42Clouds, and contributors
|
|
6
6
|
Author-email: "Kosolapov Stanislav (proDOOMman)" <prodoomman@gmail.com>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "answer42"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.16"
|
|
4
4
|
description = "Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -1169,31 +1169,67 @@
|
|
|
1169
1169
|
ИмяПоля = СвойствоСтруктуры(Параметры, "field_name", "");
|
|
1170
1170
|
ИскатьПоЗаголовку = СвойствоСтруктуры(Параметры, "search_by_title", Ложь);
|
|
1171
1171
|
Таймаут = СвойствоСтруктуры(Параметры, "timeout", 10);
|
|
1172
|
+
// max_depth отвечает только за глубину сериализации подчинённых объектов
|
|
1173
|
+
// выпадающего списка. Глубина поиска поля управляется отдельно, чтобы
|
|
1174
|
+
// глубокие формы не ломали получение простого списка выбора.
|
|
1172
1175
|
МаксимальнаяГлубина = СвойствоСтруктуры(Параметры, "max_depth", 3);
|
|
1176
|
+
ГлубинаПоиска = СвойствоСтруктуры(Параметры, "search_depth", 0);
|
|
1173
1177
|
АктивноеОкно = ТестируемоеПриложение.ПолучитьАктивноеОкно();
|
|
1174
1178
|
|
|
1175
1179
|
ИскомоеИмя = ?(ИскатьПоЗаголовку, "", ИмяПоля);
|
|
1176
1180
|
ИскомыйЗаголовок = ?(ИскатьПоЗаголовку, ИмяПоля, "");
|
|
1177
|
-
|
|
1181
|
+
Диагностика = Новый Массив;
|
|
1182
|
+
Поле = НайтиПолеФормыДляВыпадающегоСпискаMCP(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, ГлубинаПоиска, Диагностика);
|
|
1178
1183
|
|
|
1179
1184
|
Если Поле = Неопределено Тогда
|
|
1180
|
-
Возврат Новый Структура("found,name,title,opened,items,diagnostics", Ложь, ИмяПоля, "", Ложь, Новый Массив,
|
|
1185
|
+
Возврат Новый Структура("found,name,title,opened,items,diagnostics", Ложь, ИмяПоля, "", Ложь, Новый Массив, Диагностика);
|
|
1181
1186
|
КонецЕсли;
|
|
1182
1187
|
|
|
1183
|
-
Диагностика = Новый Массив;
|
|
1184
1188
|
Варианты = Новый Массив;
|
|
1185
1189
|
Открыт = Ложь;
|
|
1186
|
-
Источник = "
|
|
1190
|
+
Источник = "choice_list_presentations_opened";
|
|
1191
|
+
|
|
1192
|
+
Попытка
|
|
1193
|
+
Поле.Активизировать();
|
|
1194
|
+
Исключение
|
|
1195
|
+
Диагностика.Добавить("activate_before_presentations_failed: " + ОписаниеОшибки());
|
|
1196
|
+
КонецПопытки;
|
|
1187
1197
|
|
|
1188
1198
|
Попытка
|
|
1189
|
-
//
|
|
1190
|
-
//
|
|
1191
|
-
//
|
|
1199
|
+
// Для ссылочных полей платформа часто заполняет представления списка выбора
|
|
1200
|
+
// только после фактического открытия dropdown. Поэтому сначала открываем
|
|
1201
|
+
// список, затем читаем ПолучитьПредставлениеСпискаВыбора().
|
|
1202
|
+
Поле.ОткрытьВыпадающийСписок();
|
|
1203
|
+
Поле.ОжидатьФормированияВыпадающегоСписка(Таймаут);
|
|
1204
|
+
Открыт = ОткрытВыпадающийСписокПоляMCP(Поле);
|
|
1192
1205
|
Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
|
|
1193
1206
|
ВариантыИзПредставленийСпискаВыбора(Представления, Варианты);
|
|
1194
|
-
|
|
1207
|
+
Попытка
|
|
1208
|
+
Поле.ЗакрытьВыпадающийСписок();
|
|
1209
|
+
Исключение
|
|
1210
|
+
Диагностика.Добавить("close_after_presentations_failed: " + ОписаниеОшибки());
|
|
1211
|
+
КонецПопытки;
|
|
1212
|
+
Если Варианты.Количество() > 0 Тогда
|
|
1213
|
+
Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Открыт, Варианты, Диагностика, Источник);
|
|
1214
|
+
КонецЕсли;
|
|
1195
1215
|
Исключение
|
|
1196
|
-
Диагностика.Добавить("
|
|
1216
|
+
Диагностика.Добавить("choice_list_presentations_opened_failed: " + ОписаниеОшибки());
|
|
1217
|
+
Попытка
|
|
1218
|
+
Поле.ЗакрытьВыпадающийСписок();
|
|
1219
|
+
Исключение
|
|
1220
|
+
КонецПопытки;
|
|
1221
|
+
КонецПопытки;
|
|
1222
|
+
|
|
1223
|
+
Источник = "choice_list_presentations_closed";
|
|
1224
|
+
Попытка
|
|
1225
|
+
// Неинтерактивный fallback для полей, где список выбора доступен без открытия.
|
|
1226
|
+
Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
|
|
1227
|
+
ВариантыИзПредставленийСпискаВыбора(Представления, Варианты);
|
|
1228
|
+
Если Варианты.Количество() > 0 Тогда
|
|
1229
|
+
Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Ложь, Варианты, Диагностика, Источник);
|
|
1230
|
+
КонецЕсли;
|
|
1231
|
+
Исключение
|
|
1232
|
+
Диагностика.Добавить("choice_list_presentations_closed_failed: " + ОписаниеОшибки());
|
|
1197
1233
|
КонецПопытки;
|
|
1198
1234
|
|
|
1199
1235
|
Источник = "choice_list_property";
|
|
@@ -1217,7 +1253,9 @@
|
|
|
1217
1253
|
КонецПопытки;
|
|
1218
1254
|
|
|
1219
1255
|
Попытка
|
|
1220
|
-
|
|
1256
|
+
Если Не ОткрытВыпадающийСписокПоляMCP(Поле) Тогда
|
|
1257
|
+
Поле.ОткрытьВыпадающийСписок();
|
|
1258
|
+
КонецЕсли;
|
|
1221
1259
|
Исключение
|
|
1222
1260
|
Возврат Новый Структура("found,field,opened,items,diagnostics,source,reason,error", Истина, ОбъектВСтруктуру(Поле, 0, 1), Ложь, Варианты, Диагностика, Источник, "open_dropdown_failed", ОписаниеОшибки());
|
|
1223
1261
|
КонецПопытки;
|
|
@@ -1254,6 +1292,57 @@
|
|
|
1254
1292
|
Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Открыт, Варианты, Диагностика, Источник);
|
|
1255
1293
|
КонецФункции
|
|
1256
1294
|
|
|
1295
|
+
&НаКлиенте
|
|
1296
|
+
Функция ОткрытВыпадающийСписокПоляMCP(Поле)
|
|
1297
|
+
Попытка
|
|
1298
|
+
Возврат Поле.ВыпадающийСписокОткрыт();
|
|
1299
|
+
Исключение
|
|
1300
|
+
Возврат Ложь;
|
|
1301
|
+
КонецПопытки;
|
|
1302
|
+
КонецФункции
|
|
1303
|
+
|
|
1304
|
+
&НаКлиенте
|
|
1305
|
+
Функция НайтиПолеФормыДляВыпадающегоСпискаMCP(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, ГлубинаПоиска, Диагностика)
|
|
1306
|
+
Если ГлубинаПоиска > 0 Тогда
|
|
1307
|
+
Диагностика.Добавить("field_search_depth: " + Строка(ГлубинаПоиска));
|
|
1308
|
+
Возврат НайтиОбъектРекурсивно(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, "тестируемоеполеформы", 0, ГлубинаПоиска);
|
|
1309
|
+
КонецЕсли;
|
|
1310
|
+
|
|
1311
|
+
// Авто-поиск: сначала дешёвый исторический лимит 3, затем расширяемся.
|
|
1312
|
+
// Это сохраняет лёгкую сериализацию dropdown children (max_depth=3), но
|
|
1313
|
+
// не требует от пользователя угадывать глубину поля в сложных формах.
|
|
1314
|
+
ГлубиныПоиска = Новый Массив;
|
|
1315
|
+
ГлубиныПоиска.Добавить(3);
|
|
1316
|
+
ГлубиныПоиска.Добавить(8);
|
|
1317
|
+
ГлубиныПоиска.Добавить(16);
|
|
1318
|
+
ГлубиныПоиска.Добавить(32);
|
|
1319
|
+
Для Каждого ТекущаяГлубина Из ГлубиныПоиска Цикл
|
|
1320
|
+
Поле = НайтиОбъектРекурсивно(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, "тестируемоеполеформы", 0, ТекущаяГлубина);
|
|
1321
|
+
Если Поле <> Неопределено Тогда
|
|
1322
|
+
Диагностика.Добавить("field_found_at_depth: " + Строка(ТекущаяГлубина));
|
|
1323
|
+
Возврат Поле;
|
|
1324
|
+
КонецЕсли;
|
|
1325
|
+
КонецЦикла;
|
|
1326
|
+
Диагностика.Добавить("field_not_found_up_to_depth: 32");
|
|
1327
|
+
Возврат Неопределено;
|
|
1328
|
+
КонецФункции
|
|
1329
|
+
|
|
1330
|
+
&НаКлиенте
|
|
1331
|
+
Функция ПредставлениеВариантаСпискаВыбораMCP(Представление)
|
|
1332
|
+
Если ТипЗнч(Представление) = Тип("Структура") Тогда
|
|
1333
|
+
Если Представление.Свойство("ПредставлениеДанных") Тогда
|
|
1334
|
+
Возврат Строка(Представление.ПредставлениеДанных);
|
|
1335
|
+
ИначеЕсли Представление.Свойство("ОтображаемыйТекст") Тогда
|
|
1336
|
+
Возврат Строка(Представление.ОтображаемыйТекст);
|
|
1337
|
+
ИначеЕсли Представление.Свойство("Представление") Тогда
|
|
1338
|
+
Возврат Строка(Представление.Представление);
|
|
1339
|
+
ИначеЕсли Представление.Свойство("Значение") Тогда
|
|
1340
|
+
Возврат Строка(Представление.Значение);
|
|
1341
|
+
КонецЕсли;
|
|
1342
|
+
КонецЕсли;
|
|
1343
|
+
Возврат Строка(Представление);
|
|
1344
|
+
КонецФункции
|
|
1345
|
+
|
|
1257
1346
|
&НаКлиенте
|
|
1258
1347
|
Процедура ВариантыИзПредставленийСпискаВыбора(Представления, Варианты)
|
|
1259
1348
|
Для Каждого Представление Из Представления Цикл
|
|
@@ -3132,11 +3221,56 @@
|
|
|
3132
3221
|
// представление асинхронно и/или пересоздавать объект поля. Поэтому после
|
|
3133
3222
|
// ввода перечитываем поле из активного окна и коротко ждем фактическое
|
|
3134
3223
|
// представление данных, прежде чем переходить к fallback-методам.
|
|
3224
|
+
//
|
|
3225
|
+
// Для полей с выпадающим списком (ссылочные поля, поля выбора) платформа
|
|
3226
|
+
// после ВвестиТекст() часто открывает dropdown с отфильтрованными вариантами.
|
|
3227
|
+
// В этом случае выбираем первый вариант и возвращаем его представление.
|
|
3135
3228
|
Попытка
|
|
3136
3229
|
Поле.ВвестиТекст(Значение);
|
|
3137
3230
|
Если ПустаяСтрока(Значение) Тогда
|
|
3138
3231
|
Возврат Новый Структура("set,field,value,method", Истина, ИмяПоля, Значение, "ВвестиТекст");
|
|
3139
3232
|
КонецЕсли;
|
|
3233
|
+
|
|
3234
|
+
// Проверяем, открылся ли выпадающий список после ввода текста.
|
|
3235
|
+
// Это характерно для ссылочных полей и полей с выбором из справочника.
|
|
3236
|
+
Если ОткрытВыпадающийСписокПоляMCP(Поле) Тогда
|
|
3237
|
+
Попытка
|
|
3238
|
+
Поле.ОжидатьФормированияВыпадающегоСписка(10);
|
|
3239
|
+
Исключение
|
|
3240
|
+
КонецПопытки;
|
|
3241
|
+
Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
|
|
3242
|
+
Если Представления.Количество() > 0 Тогда
|
|
3243
|
+
// Выбираем первый вариант (индекс 0).
|
|
3244
|
+
ПредставлениеВыбираемогоВарианта = ПредставлениеВариантаСпискаВыбораMCP(Представления[0]);
|
|
3245
|
+
Поле.ВыполнитьВыборИзСпискаВыбора(0);
|
|
3246
|
+
ВыбранноеПредставление = ПредставлениеДанныхПоля(Поле);
|
|
3247
|
+
Если ПустаяСтрока(ВыбранноеПредставление) Тогда
|
|
3248
|
+
ВыбранноеПредставление = ПредставлениеВыбираемогоВарианта;
|
|
3249
|
+
КонецЕсли;
|
|
3250
|
+
Возврат Новый Структура("set,field,value,method,selected", Истина, ИмяПоля, Значение, "ВвестиТекст+ВыполнитьВыборИзСпискаВыбора(0)", ВыбранноеПредставление);
|
|
3251
|
+
Иначе
|
|
3252
|
+
// Список выбора пуст — просто закрываем dropdown.
|
|
3253
|
+
Попытка
|
|
3254
|
+
Поле.ЗакрытьВыпадающийСписок();
|
|
3255
|
+
Исключение
|
|
3256
|
+
КонецПопытки;
|
|
3257
|
+
КонецЕсли;
|
|
3258
|
+
Иначе
|
|
3259
|
+
// Dropdown не открылся автоматически — пробуем открыть явно и выбрать.
|
|
3260
|
+
Попытка
|
|
3261
|
+
Поле.ОткрытьВыпадающийСписок();
|
|
3262
|
+
Поле.ОжидатьФормированияВыпадающегоСписка(10);
|
|
3263
|
+
Поле.ВыполнитьВыборИзСпискаВыбора(Значение);
|
|
3264
|
+
ВыбранноеПредставление = ПредставлениеДанныхПоля(Поле);
|
|
3265
|
+
Если ПустаяСтрока(ВыбранноеПредставление) Тогда
|
|
3266
|
+
ВыбранноеПредставление = Значение;
|
|
3267
|
+
КонецЕсли;
|
|
3268
|
+
Возврат Новый Структура("set,field,value,method,selected", Истина, ИмяПоля, Значение, "ВвестиТекст+ОткрытьВыпадающийСписок+ВыполнитьВыборИзСпискаВыбора", ВыбранноеПредставление);
|
|
3269
|
+
Исключение
|
|
3270
|
+
// Не удалось открыть/выбрать — продолжаем к циклу ожидания представления.
|
|
3271
|
+
КонецПопытки;
|
|
3272
|
+
КонецЕсли;
|
|
3273
|
+
|
|
3140
3274
|
НачалоОжиданияВвода = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
|
3141
3275
|
Пока ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоОжиданияВвода < 2000 Цикл
|
|
3142
3276
|
АктивноеОкно = ТестируемоеПриложение.ПолучитьАктивноеОкно();
|
|
@@ -3149,8 +3283,7 @@
|
|
|
3149
3283
|
Возврат Новый Структура("set,field,value,method", Истина, ИмяПоля, Значение, "ВвестиТекст");
|
|
3150
3284
|
КонецЕсли;
|
|
3151
3285
|
КонецЦикла;
|
|
3152
|
-
|
|
3153
|
-
Возврат РезультатВвода;
|
|
3286
|
+
Ошибки.Добавить("ВвестиТекст=значение введено, но представление не подтвердилось; current_value=" + ПредставлениеПослеВвода);
|
|
3154
3287
|
Исключение
|
|
3155
3288
|
Ошибки.Добавить("ВвестиТекст=" + ОписаниеОшибки());
|
|
3156
3289
|
КонецПопытки;
|
|
Binary file
|
|
@@ -2800,6 +2800,7 @@ async def field_dropdown_items(
|
|
|
2800
2800
|
search_by_title: Annotated[bool, "Search by visible title instead of technical name"] = False,
|
|
2801
2801
|
timeout: Annotated[int, "Dropdown formation timeout in seconds"] = 10,
|
|
2802
2802
|
max_depth: Annotated[int, "Maximum depth used to serialize dropdown child objects"] = 3,
|
|
2803
|
+
search_depth: Annotated[int, "Maximum depth used to find the field; 0 means auto-expand search depth"] = 0,
|
|
2803
2804
|
*,
|
|
2804
2805
|
session_id: Annotated[str, "Session id"] = DEFAULT_SESSION,
|
|
2805
2806
|
) -> Any:
|
|
@@ -2807,7 +2808,13 @@ async def field_dropdown_items(
|
|
|
2807
2808
|
return await _bridge_call_recorded(
|
|
2808
2809
|
session_id,
|
|
2809
2810
|
"field_dropdown_items",
|
|
2810
|
-
{
|
|
2811
|
+
{
|
|
2812
|
+
"field_name": field_name,
|
|
2813
|
+
"search_by_title": search_by_title,
|
|
2814
|
+
"timeout": timeout,
|
|
2815
|
+
"max_depth": max_depth,
|
|
2816
|
+
"search_depth": search_depth,
|
|
2817
|
+
},
|
|
2811
2818
|
)
|
|
2812
2819
|
|
|
2813
2820
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|