mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-03 02:00:22 +03:00
meta-decompile не знал тип WebService — 18 сервисов УТ не проходили раундтрип.
Добавлен разбор (оба порта): namespace, состав XDTO-пакетов, дескриптор,
операции с параметрами.
Компилятор поддерживал тип поверхностно; раундтрип на реальных сервисах
показал, чего не хватало:
- XDTOPackages эмитился скаляром, а это СПИСОК элементов: ссылка на пакет
конфигурации (xr:MDObjectRef) либо URI внешнего пространства имён
(xs:string). Presentation пуст, CheckState 0 — 19/19 по корпусу;
- DescriptorFileName не эмитился вовсе, хотя есть у всех 18 сервисов и НЕ
выводится из имени (DMILService -> dmil.1cws) — нужен явный ключ;
- DataLockControlMode не эмитился (Managed у всех 192 операций);
- Comment не эмитился ни у сервиса, ни у операций и параметров;
- типы из собственного пространства имён (81 случай) писались без локального
xmlns. В DSL задаются нотацией Кларка "{uri}ИмяТипа", компилятор объявляет
xmlns сам — как это делает платформа.
Nillable захватывается явно у операций и параметров: по корпусу значения
смешанные (операции 103/89, параметры 128/395), дефолт угадать нельзя.
Порядок операций и параметров приведён к порядку DSL в обоих портах — PS шёл
в порядке хеш-таблицы, py сортировал.
Проверка: 25 сервисов УТ (18 WebService + 7 HTTPService) 25/25 без
расхождений; JSON декомпилятора побайтово совпадает у PS и py на всех 25;
сюита 76/76 на обоих портах; 1С-сертификация обоих кейсов пройдена.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
36 lines
1.3 KiB
JSON
36 lines
1.3 KiB
JSON
{
|
|
"name": "Веб-сервис с операциями",
|
|
"input": {
|
|
"type": "WebService",
|
|
"name": "СервисОбмена",
|
|
"namespace": "http://example.com/exchange",
|
|
"reuseSessions": "AutoUse",
|
|
"descriptorFileName": "exchange.1cws",
|
|
"xdtoPackages": ["http://v8.1c.ru/8.3/data/ext", "http://example.com/exchange"],
|
|
"operations": {
|
|
"ПолучитьДанные": {
|
|
"returnType": "xs:string",
|
|
"nillable": true,
|
|
"transactioned": false,
|
|
"parameters": {
|
|
"ИдентификаторЗапроса": "xs:string",
|
|
"ДатаНачала": "xs:dateTime"
|
|
}
|
|
},
|
|
"ОбменСообщениями": {
|
|
"returnType": "{http://example.com/exchange}MessageExchange",
|
|
"procedureName": "ВыполнитьОбмен",
|
|
"comment": "Основная операция",
|
|
"parameters": {
|
|
"Сообщение": { "type": "{http://example.com/exchange}MessageExchange", "nillable": false },
|
|
"Ошибка": { "type": "xs:string", "nillable": false, "direction": "Out" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"validatePath": "WebServices/СервисОбмена",
|
|
"expect": {
|
|
"files": ["WebServices/СервисОбмена.xml", "WebServices/СервисОбмена/Ext/Module.bsl"]
|
|
}
|
|
}
|