Files
cc-1c-skills/.claude/skills/meta-compile/reference/web.md
T
Nick ShirokovandClaude Opus 5 87f97e986a feat(meta-decompile,meta-compile): поддержка WebService и полнота его формата
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>
2026-08-02 11:40:10 +03:00

4.0 KiB

HTTPService, WebService (Веб-сервисы)

Модуль обоих — Ext/Module.bsl, в нём реализуются обработчики.

HTTPService (HTTP-сервис)

Ключ Умолчание Значения
rootURL = name (в нижнем регистре) корневой URL
reuseSessions DontUse DontUse / Use / AutoUse
sessionMaxAge 20 время жизни сессии, сек
urlTemplates {} шаблоны URL (см. ниже)

urlTemplates — объект { "ИмяШаблона": def }, где def:

  • строка — URL-путь без методов: "/health";
  • объект: template (путь с параметрами {id}, по умолчанию /имяшаблона), synonym, comment, methods{ "ИмяМетода": def }.

methods — значение либо строка (только HTTP-метод), либо объект: httpMethod, handler, synonym, comment.

HTTP-методы: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT, TRACE, MERGE. Обработчик по умолчанию именуется {ИмяШаблона}{ИмяМетода}; в типовых конфигурациях он часто произвольный — тогда задавайте handler явно.

{ "type": "HTTPService", "name": "API", "rootURL": "api",
  "urlTemplates": {
    "Users": { "template": "/v1/users/{id}", "methods": { "Get": "GET", "Create": "POST", "Delete": "DELETE" } },
    "Health": "/health"
  } }

WebService (Веб-сервис, SOAP)

Ключ Умолчание Значения
namespace пусто URI пространства имён WSDL
xdtoPackages пусто список пакетов (см. ниже)
descriptorFileName = name + .1cws имя файла дескриптора
reuseSessions DontUse DontUse / Use / AutoUse
sessionMaxAge 20 время жизни сессии, сек
operations {} операции (см. ниже)

xdtoPackagesмассив значений: "XDTOPackage.Имя" — пакет конфигурации, любое другое значение — URI внешнего пространства имён (например "http://v8.1c.ru/8.3/data/ext").

operations — объект { "ИмяОперации": def }, где def:

  • строка — XDTO-тип возврата без параметров: "xs:string";
  • объект: returnType (по умолчанию xs:string), nillable (bool), transactioned (bool), procedureName (имя процедуры, по умолчанию = имя операции; синоним ключа — handler), dataLockControlMode (по умолчанию Managed), synonym, comment, parameters.

parameters — объект { "ИмяПараметра": def }, где def:

  • строка — XDTO-тип (direction = In);
  • объект: type (по умолчанию xs:string), nillable (bool, по умолчанию true), direction (In / Out / InOut), synonym, comment.

XDTO-типы: xs:string, xs:boolean, xs:int, xs:long, xs:decimal, xs:dateTime, xs:base64Binary. Тип из собственного пространства имён задаётся в нотации Кларка — "{http://ваш.uri}ИмяТипа"; компилятор сам объявит локальный xmlns в теге, как это делает платформа.

{ "type": "WebService", "name": "DataExchange", "namespace": "http://www.1c.ru/DataExchange",
  "operations": {
    "TestConnection": { "returnType": "xs:boolean", "handler": "ПроверкаПодключения",
                        "parameters": { "ErrorMessage": { "type": "xs:string", "direction": "Out" } } },
    "GetVersion": "xs:string"
  } }