Claude Skill

kd31-rules

Программная работа с «Конвертация данных, редакция 3.1» (КД 3.1) через MCP-toolkit (HTTP API) к живой ИБ: инспекция и создание Конвертаций, ПКО, ПКС, ПКПД, ПОД, теневой модели метаданных (Конфигурации/Объекты/Свойства/Релизы) и слоя формата EnterpriseData (ВерсииФормата/ОбъектыФо

LLM Mart · 0 points · 12 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download Desko77-claude-code-skills-1c-skills_kd31-rules-eb281b4.zip · 28 KB
Part of desko77/claude-code-skills-1c — 48 skills

Install

skills CLI npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/kd31-rules
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart
Git git clone https://github.com/Desko77/claude-code-skills-1c.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole desko77/claude-code-skills-1c collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

KD 3.1 - правила обмена EnterpriseData через MCP-toolkit

Скилл описывает работу с живой ИБ "Конвертация данных, редакция 3.1" (КД 3.1) через MCP-toolkit HTTP API: исследование структуры правил, создание/правка правил, настройка формата и получение артефактов для расширения формата EnterpriseData - модуля менеджера обмена (общий модуль BSL) и XDTO-пакета расширения / версии формата (XSD).

Относится к сборке КД 3.1.6.14 (платформа 8.5.1.1302).

Модель данных: КД 3.1 близка к КД 2.0 + слой формата

В этой сборке КД 3.1 по структуре похожа на КД 2.0:

  • Теневая модель метаданных: Релизы (версия загруженной структуры) -> Объекты (Владелец=Релизы) -> Свойства/Значения (Владелец=Объекты). Конфигурации - топ-контейнер, на который ссылаются Релизы (версии живут в Релизах).
  • Правила в справочниках: ПравилаКонвертацииОбъектов (ПКО), ПравилаКонвертацииСвойств (ПКС, Владелец=ПКО - это справочник, не регистр), ПравилаКонвертацииПредопределенныхДанных (ПКПД), ПравилаОбработкиДанных (ПОД), ПравилаРегистрацииОбъектов (ПРО, Владелец=Регистрации). ПКО/ПОД/ПКПД - топ-уровневые (без Владельца), связь с конвертацией - через СоставыКонвертаций. ВАЖНО: у ПКО нет реквизита Наименование (идентификатор в Коде, искать НайтиПоКоду) и ПКО НЕ иерархичен (нет ЭтоГруппа); ПКС иерархичен. Паттерн заполнения - 2 ПКО на объект (<Объект>_Отправка + <Объект>_Получение), эталон в демо. См. bsl-templates.md.
  • Дополнительно - слой формата EnterpriseData (цепочка справочников): ВерсииФормата (ПространствоИмен, признак расширения) -> ОбъектыФормата (Владелец=ВерсииФормата) -> СвойстваФормата -> ЗначенияФормата; типы - ТипыФормата.

Отличие результата от КД 2.0: КД 3.1 генерирует модуль менеджера обмена (BSL) для движка ОбменДаннымиXDTO плюс работает с XDTO-пакетом/версией формата, а не выгружает XML-правила для "Универсального обмена". Для КД 2.0 - скилл kd2-rules.

Архитектура работы

Claude (агент)  --Bash+curl (payload через jq/python в файл)-->  MCP-toolkit (КД 3.1, СЕРВЕРНЫЙ контекст)
   -> справочники Конвертации/ПКО/ПКС/ПКПД/ПОД + теневая модель + слой формата
   -> штатные обработки (ЗагрузкаСтруктурыКонфигурацииИзФайловXML, НастройкаПравилОбмена, ВыгрузкаМодуля)
   -> артефакты: CommonModule (менеджер обмена) + XDTOPackage/XSD расширения
   -> перенос в расширение конфигурации-приемника (например УНФ)

Эндпоинты toolkit (порт по умолчанию 6011):

  • POST /api/execute_query - запросы к справочникам/состоянию.
  • POST /api/execute_code - чтение метаданных, создание/правка элементов. Серверный, без Возврат - результат через Результат = ....
  • GET /api/get_metadata?type=Configuration - метаданные.

Граница автоматизации

Через toolkit реально:

  • Инспекция структуры и состояния (состав справочников, реквизиты, статус Конвертации, есть ли Релиз).
  • Создание/правка правил как элементов справочников: Конвертация, ПКО, ПКС, ПКПД, ПОД, СоставыКонвертаций (со снятой защитой записи в форме toolkit). ПКО/ПОД/ПКПД - топ-уровневые, в конвертацию включаются записью СоставыКонвертаций.
  • Точечная правка реквизитов и привязок.
  • Загрузка структуры и генерация модуля - тоже программно: у форменных обработок есть headless-точки входа (ВыполнитьЗагрузкуМетаданных, ВыполнитьВыгрузкуМодулей), вызываемые через фоновое задание. См. methods.md.

Удобнее интерактивно (через формы обработок КД 3.1), но НЕ обязательно:

  • Загрузка структуры конфигурации (ЗагрузкаСтруктурыКонфигурацииИзФайловXML) - заполняет Релиз + Объекты/Свойства. Без нее правила привязывать не к чему. Headless - methods.md п.1 (для большой конфигурации запускать через фон).
  • Создание/расширение версии формата (ВыгрузкаСтруктурыФормата / редакторы формата).
  • Генерация модуля менеджера (ВыгрузкаМодуля). Headless - methods.md п.2.

Перед массовой работой проверять, что Релизы загружены: ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Релизы (0 -> структура не загружена).

Карта references

Документ Что внутри Когда читать
references/data-schema.md проверенные справочники и реквизиты (Конвертации, ПКО, ПКС, ПКПД, ПОД, теневая модель, слой формата), фактические имена обработок нужны точные имена объектов/реквизитов
references/bsl-templates.md BSL для execute_code: инспекция, состояние конвертации, создание ПКО/ПКС, привязка версии формата конкретная операция через toolkit
references/format-extension.md расширение формата ED: версия формата с namespace, привязка к Конвертации, обработчики ПКО, генерация менеджера, перенос в расширение; workflow + контекст проекта разработка расширения формата и перенос артефактов
references/methods.md программный API обработок (headless): загрузка структуры ВыполнитьЗагрузкуМетаданных, генерация модуля ВыполнитьВыгрузкуМодулей, прием вызова форменной обработки в обход UI, file:line нужно вызвать обработку КД программно через toolkit
references/troubleshooting.md ограничения toolkit :6011 и КД 3.1 (кодировка, Количество(), тип коллекции метаданных, длины реквизитов, имена перечислений) при ошибке execute_code/execute_query

Scripts

  • scripts/kd31_query.sh "<запрос>" [out.json] - execute_query.
  • scripts/kd31_exec.sh <файл.bsl> [out.json] - execute_code из BSL-файла.

Оба: payload через jq (fallback python) + curl --data-binary @файл, порт через KD31_PORT (по умолчанию 6011). Если указан out.json - ответ в файл (читать через Read: терминал портит кириллицу).

Демо-база КД 3.1 как эталон (НАСТОЯТЕЛЬНО)

Если доступна демо-база КД 3.1 (типовая поставка содержит готовую конвертацию, напр. "БП->УП" - сотни ПКО, тысячи ПКС) - использовать ее как ЭТАЛОН заполнения правил, а не угадывать. Демо идентична рабочей ИБ по структуре метаданных. Перед созданием своего ПКО/ПКС снять образец аналогичного правила из демо (Код, как заполнены ОбъектКонфигурации/ОбъектФормата, паттерн _Отправка/_Получение, как оформлены прямые vs алгоритмические ПКС, ссылочные через ПравилоКонвертацииСвойства). Порт демо задается при запуске ее toolkit (порт toolkit уточнять по своей конфигурации). Чтение демо - KD31_PORT=<порт> bash scripts/kd31_query.sh "...".

Базовая проверка готовности

curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:6011/api/get_metadata?type=Configuration"   # 200
bash scripts/kd31_query.sh "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.Конвертации"
bash scripts/kd31_query.sh "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.Релизы"
# Релизы=0 -> структура конфигурации не загружена; для расширения проверить ЕстьРасширения
bash scripts/kd31_query.sh "ВЫБРАТЬ Наименование, ЕстьРасширения ИЗ Справочник.Релизы ГДЕ НЕ ЭтоГруппа"

Связанные скиллы

  • 1c-mcp-toolkit - HTTP API к живой ИБ 1С (этот скилл - надстройка).
  • kd2-rules - аналог для КД 2.0 (та же идея, другой результат - XML-правила).
  • composing-1c-queries - синтаксис запросов для execute_query.
Files (claude-code-skills-1c)
  • references
    • bsl-templates.md 21.6 KB
      # BSL-шаблоны для execute_code (КД 3.1, toolkit :6011)
      
      Серверный контекст, результат через `Результат`. Кириллицу слать payload-файлом
      (`scripts/kd31_exec.sh`), ответ читать из файла через Read. Считать количество -
      запросом (не `Количество()`). ПКС - справочник.
      
      Реквизиты в шаблонах выверены по EDT-эталону (`data-schema.md`). Перед
      применением проверить на тестовой копии, снять защиту, сверить перечисления.
      
      КРИТИЧНО по владельцам: ПКО/ПОД/ПКПД - **топ-уровневые** (без Владельца). Связь с
      Конвертацией - запись справочника `СоставыКонвертаций` (Владелец=Конвертация,
      `ЭлементКонвертации`=ссылка на правило). Только **ПКС** подчинен: Владелец=ПКО.
      
      ## Инспекция структуры (надежный однострочный паттерн)
      
      ```bsl
      С = ""; Для Каждого М Из Метаданные.Справочники Цикл С = С + М.Имя + ","; КонецЦикла; Результат = С;
      ```
      
      Реквизиты объекта:
      
      ```bsl
      С = ""; Для Каждого Р Из Метаданные.Справочники.ПравилаКонвертацииОбъектов.Реквизиты Цикл С = С + Р.Имя + ","; КонецЦикла; Результат = С;
      ```
      
      Сохранять ответ в файл (`kd31_exec.sh script.bsl out.json`) и читать через Read.
      
      ## Количество и состояние (execute_query)
      
      ```sql
      ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.Конвертации
      ```
      
      ```sql
      ВЫБРАТЬ Наименование, ТипКонвертации, ИнтерфейсКонвертации, Статус,
             Конфигурация, КонфигурацияКорреспондент, ВерсияФорматаМенеджера
      ИЗ Справочник.Конвертации
      ГДЕ НЕ ЭтоГруппа
      ```
      
      `Конфигурация`/`КонфигурацияКорреспондент` (ссылки на Релизы) пусты -> Релиз не привязан.
      
      ## Правила, входящие в конвертацию (через СоставыКонвертаций)
      
      ПКО/ПОД/ПКПД не имеют Владельца - их связь с конвертацией идет через
      `СоставыКонвертаций`. `ЭлементКонвертации` - составной тип (ПКО/ПОД/ПКПД/Алгоритмы/Запросы).
      
      ```sql
      ВЫБРАТЬ Состав.ЭлементКонвертации КАК Правило, Состав.Отключить
      ИЗ Справочник.СоставыКонвертаций КАК Состав
      ГДЕ Состав.Владелец.Наименование = &Конв
      ```
      
      Только ПКО (фильтр по типу значения ссылки):
      
      ```sql
      ВЫБРАТЬ Состав.ЭлементКонвертации КАК ПКО
      ИЗ Справочник.СоставыКонвертаций КАК Состав
      ГДЕ Состав.Владелец.Наименование = &Конв
             И ВЫРАЗИТЬ(Состав.ЭлементКонвертации КАК Справочник.ПравилаКонвертацииОбъектов) ЕСТЬ НЕ NULL
      ```
      
      Свойства ПКС читаются по Владельцу=ПКО (ПКС иерархичен - ЭтоГруппа есть; ПКО НЕ
      иерархичен - у ПКО ЭтоГруппа НЕТ):
      
      ```sql
      ВЫБРАТЬ ПКС.СвойствоКонфигурации, ПКС.СвойствоФормата, ПКС.Поиск, ПКС.ПравилоКонвертацииСвойства
      ИЗ Справочник.ПравилаКонвертацииСвойств КАК ПКС
      ГДЕ ПКС.Владелец = &ПКО
      ```
      
      ## Создание ПКО (топ-уровневый) и включение в конвертацию
      
      ВАЖНО (эталон демо КД 3.1, конвертация БП->УП): у ПКО **НЕТ реквизита Наименование**
      и ПКО **НЕ иерархичен** (нет ЭтоГруппа). Идентификатор правила хранится в **Коде**
      (`Справочник_Номенклатура_Отправка`). Искать ПКО по Коду (НайтиПоКоду), не по
      Наименованию. Паттерн: на объект создается **2 ПКО - отдельно _Отправка и
      _Получение** (НЕ одно ПКО на оба направления):
      - `<Объект>_Отправка`: ИспользоватьДляОтправки=Истина.
      - `<Объект>_Получение`: ИспользоватьДляПолучения=Истина, ВариантИдентификации=ПоУникальномуИдентификатору.
      
      Предусловие: загружен Релиз (есть Объекты), загружен формат (есть ОбъектыФормата).
      `Объекты` подчинены `Релизы` - искать с Владельцем=Релиз (`Конв.Конфигурация`).
      
      ```bsl
      Конв = Справочники.Конвертации.НайтиПоНаименованию("Демо_РасширениеEnterpriseData");
      ОбъКонф = Справочники.Объекты.НайтиПоНаименованию("СправочникСсылка.Номенклатура", Истина, , Конв.Конфигурация);
      
      // ПКО _Отправка - топ-уровневый, идентификатор в Коде (Наименования НЕТ)
      ПКО = Справочники.ПравилаКонвертацииОбъектов.СоздатьЭлемент();
      ПКО.Код = "Справочник_Номенклатура_Отправка";    // идентификатор правила
      ПКО.ОбъектКонфигурации = ОбъКонф;                 // CatalogRef.Объекты (НЕ строка)
      ПКО.ОбъектФормата = "Справочник.Номенклатура";    // String (имя объекта формата)
      ПКО.ИспользоватьДляОтправки = Истина;
      ПКО.ТипКонвертации = Перечисления.ТипыКонвертаций.XDTO;
      ПКО.Записать();
      
      // ПКО _Получение - отдельная запись
      ПКОПолуч = Справочники.ПравилаКонвертацииОбъектов.СоздатьЭлемент();
      ПКОПолуч.Код = "Справочник_Номенклатура_Получение";
      ПКОПолуч.ОбъектКонфигурации = ОбъКонф;
      ПКОПолуч.ОбъектФормата = "Справочник.Номенклатура";
      ПКОПолуч.ИспользоватьДляПолучения = Истина;
      ПКОПолуч.ТипКонвертации = Перечисления.ТипыКонвертаций.XDTO;
      ПКОПолуч.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов.ПоУникальномуИдентификатору;
      ПКОПолуч.Записать();
      
      // Включение каждого ПКО в конвертацию - запись СоставыКонвертаций (Владелец=Конвертация)
      Сост = Справочники.СоставыКонвертаций.СоздатьЭлемент();
      Сост.Владелец = Конв;
      Сост.ЭлементКонвертации = ПКО.Ссылка;   // составной тип; аналогично для ПКОПолуч
      Сост.Записать();
      
      Результат = XMLСтрока(ПКО.Ссылка);
      ```
      
      Значения `ВариантыИдентификацииОбъектов`: `ПоУникальномуИдентификатору`,
      `ПоПолямПоиска`, `СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска`.
      `ТипыКонвертаций`: `XML`, `XDTO`.
      
      ## Создание ПКС (Владелец=ПКО)
      
      Внимание к типам: `СвойствоКонфигурации` - ссылка (CatalogRef.Свойства), а
      `СвойствоФормата` и `ПравилоКонвертацииСвойства` - **строки**.
      `ПравилоКонвертацииСвойства` для ссылочного свойства = **Код целевого ПКО строкой**
      (напр. "Справочник_Контрагенты", "Перечисление_СтавкиНДС") - эталон демо.
      
      Паттерн демо: в ПКО _Отправка часть ПКС идет БЕЗ СвойствоКонфигурации (null) +
      ИспользуетсяАлгоритмКонвертации=Истина (значение кладет алгоритм ПКО ПриОтправкеДанных).
      Прямые ПКС - со ссылкой СвойствоКонфигурации.
      
      ```bsl
      СвКонф = Справочники.Свойства.НайтиПоНаименованию("Артикул", Истина, , ОбъКонф);
      
      // Прямое ПКС: свойство конфигурации <-> свойство формата
      ПКС = Справочники.ПравилаКонвертацииСвойств.СоздатьЭлемент();
      ПКС.Владелец = ПКО.Ссылка;              // ПКС подчинен ПКО
      ПКС.СвойствоКонфигурации = СвКонф;       // CatalogRef.Свойства
      ПКС.СвойствоФормата = "Артикул";         // String (имя свойства формата)
      ПКС.Поиск = Ложь;                        // Истина - поле поиска
      // ссылочное свойство: ПКС.ПравилоКонвертацииСвойства = "Справочник_Контрагенты"; // Код ПКО строкой
      ПКС.Записать();
      Результат = XMLСтрока(ПКС.Ссылка);
      ```
      
      Алгоритмическое ПКС (значение формирует алгоритм, СвойствоКонфигурации не задаем):
      
      ```bsl
      ПКСа = Справочники.ПравилаКонвертацииСвойств.СоздатьЭлемент();
      ПКСа.Владелец = ПКО.Ссылка;
      ПКСа.СвойствоФормата = "Демо_СтатусИзУНФ";          // только свойство формата
      ПКСа.ИспользуетсяАлгоритмКонвертации = Истина;
      ПКСа.АлгоритмПередВыгрузкойСвойства = "Значение = ДанныеИБ.Демо_СтатусИзУНФ;";
      ПКСа.Записать();
      ```
      
      Алгоритмы ПКС (строки BSL): `АлгоритмПередВыгрузкойСвойства`,
      `АлгоритмПриВыгрузкеСвойства`, `АлгоритмПослеВыгрузкиСвойства`,
      `АлгоритмПередОбработкойВыгрузки`, `АлгоритмПослеОбработкиВыгрузки`.
      
      ## Привязка версии формата (в т.ч. расширения) к Конвертации
      
      В ТЧ `Конвертации.ВерсииФормата` единственный реквизит - `ВерсияФормата`
      (ссылка на Справочник.ВерсииФормата).
      
      ```bsl
      ВерсияРасш = Справочники.ВерсииФормата.НайтиПоНаименованию("Расширение Демо 1.0");
      Об = Конв.ПолучитьОбъект();
      Найдено = Ложь;
      Для Каждого Стр Из Об.ВерсииФормата Цикл
          Если Стр.ВерсияФормата = ВерсияРасш Тогда Найдено = Истина; КонецЕсли;
      КонецЦикла;
      Если НЕ Найдено Тогда
          НоваяСтр = Об.ВерсииФормата.Добавить();
          НоваяСтр.ВерсияФормата = ВерсияРасш;
          Об.Записать();
      КонецЕсли;
      Результат = "ok";
      ```
      
      ## Чтение алгоритма ПКО (для анализа)
      
      ПКО искать по Коду (Наименования нет):
      
      ```bsl
      ПКО = Справочники.ПравилаКонвертацииОбъектов.НайтиПоКоду("Справочник_Номенклатура_Отправка");
      Результат = "ОТПРАВКА: " + ПКО.АлгоритмПриОтправкеДанных
      	+ " || ПОЛУЧЕНИЕ: " + ПКО.АлгоритмПриПолученииДанных;
      ```
      
      ## Эталон: чтение готовых правил из демо-базы КД 3.1
      
      Демо-база типовой поставки идентична рабочей ИБ по структуре и содержит готовую
      конвертацию "БП->УП" (сотни ПКО, тысячи ПКС) - эталон заполнения. Снять образец:
      
      ```sql
      ВЫБРАТЬ ПЕРВЫЕ 5 Код, ОбъектКонфигурации, ОбъектФормата,
             ИспользоватьДляОтправки, ИспользоватьДляПолучения, ВариантИдентификации
      ИЗ Справочник.ПравилаКонвертацииОбъектов
      ГДЕ ОбъектФормата = "Справочник.Номенклатура"
      ```
      
      ПКС конкретного ПКО (через Владелец.ОбъектФормата):
      
      ```sql
      ВЫБРАТЬ ПЕРВЫЕ 12 ПКС.СвойствоКонфигурации, ПКС.СвойствоФормата, ПКС.Поиск,
             ПКС.ПравилоКонвертацииСвойства, ПКС.ИспользуетсяАлгоритмКонвертации
      ИЗ Справочник.ПравилаКонвертацииСвойств КАК ПКС
      ГДЕ ПКС.Владелец.ОбъектФормата = "Справочник.Номенклатура"
      ```
      
      Перед созданием своих правил - сверять структуру с демо, а не угадывать.
      
      ## Версия формата расширения (создание заготовки)
      
      `ВерсииФормата` - топ-уровневый справочник. Реквизиты: `ПространствоИмен` (String),
      `Расширение` (Boolean), `ДоступенЗапросНаВыгрузку` (Boolean). Реквизита `НомерВерсии`
      НЕТ (версия живет в Наименовании и в URI пространства имен).
      
      ```bsl
      ВФ = Справочники.ВерсииФормата.СоздатьЭлемент();
      ВФ.Наименование = "Расширение Демо 1.0";
      ВФ.ПространствоИмен = "http://example.com/edi/DemoExtension/1.0";  // не URIПространстваИмен
      ВФ.Расширение = Истина;
      ВФ.Записать();
      Результат = XMLСтрока(ВФ.Ссылка);
      ```
      
      (проверить наличие перед созданием).
      
      ## Загрузка структуры конфигурации headless
      
      Форма `ЗагрузкаСтруктурыКонфигурацииИзФайловXML` собирает файлы и запускает фон.
      Реальный парсер - экспортный метод менеджера, вызывается из `execute_code`:
      
      ```
      Обработки.ЗагрузкаСтруктурыКонфигурацииИзФайловXML.ВыполнитьЗагрузкуМетаданных(СтруктураПараметров, АдресРезультата)
      ```
      
      `СтруктураПараметров` (метод формы `ВыполнитьЗагрузкуСервер`): `СпособЗагрузки`
      (0=новый Релиз), `ПомещенныеФайлы` (массив структур `{ПолноеИмя, Хранение=путь к
      файлу на сервере, ЭтоРасширение}`), `ИмяНовойКонфигурации`, `Конфигурация`,
      `ИсточникДанных`, `ВариантЗагрузкиДвижений`, `ТолькоОбновитьПланыОбмена`,
      `ТолькоДобавлятьНовые`, `ЕстьРасширения`, `ИмяКаталогаЗагрузки`,
      `КаталогиРасширений` (если есть расширения). Поддерживается формат EDT напрямую
      (ридеры `ПрочитатьСведенияОбОбъектеИзEDT`/`ПрочитатьСведенияОСвойствахИзEDT`).
      
      ЗАГРУЗКА С РАСШИРЕНИЕМ КОНФИГУРАЦИИ: ЕстьРасширения=Истина; у .mdo расширения в
      ПомещенныеФайлы ставить ЭтоРасширение=Истина; КаталогиРасширений=[каталог расширения].
      Без этого Демо-реквизиты не попадут в теневую модель (Справочник.Свойства) и ПКС
      для них не создать.
      
      ВАЖНО: загрузчик в конце делает `УдалитьФайлы(Хранение)` по каждому файлу -
      грузить из ВРЕМЕННОЙ копии (robocopy), НЕ из EDT-оригиналов (снесет исходники).
      
      Большая конфигурация -> фоновое задание (`ДлительныеОперации.ВыполнитьВФоне`) с
      опросом состояния. Опрос НЕ по счетчикам (объекты стабилизируются задолго до конца -
      идет длинная фаза заполнения типов), а по `ФоновыеЗадания.НайтиПоУникальномуИдентификатору(JobID).Состояние`.
      Делать на тестовой копии КД. Детали - `methods.md`.
      
      ## Загрузка базового формата EnterpriseData headless
      
      `Обработки.ЗагрузкаСтруктурыФормата.ВыполнитьЗагрузкуФормата(СП, Адрес)` - строит
      фабрику XDTO из XSD-ФАЙЛОВ и создает ОбъектыФормата/СвойстваФормата/ЗначенияФормата.
      Нужен XSD стандартного вида (`xs:schema`), НЕ внутренний `Package.xdto` EDT.
      Источник XSD: выгрузить XDTO-пакет EnterpriseData из УНФ через Конфигуратор
      (XDTO-пакет -> Выгрузить в файл XSD) + вспомогательный ExchangeMessage.xsd.
      
      ```bsl
      ДанныеДляЗагрузки = Новый Массив;
      ДанныеДляЗагрузки.Добавить("E:\...\ExchangeMessage.xsd");        // вспомогательный пакет Message
      ДанныеДляЗагрузки.Добавить("E:\...\EnterpriseData_1_22_1.xsd");  // основной (с xs:import первым)
      СП = Новый Структура;
      СП.Вставить("СпособЗагрузки", 0);
      СП.Вставить("ВерсияФормата", Справочники.ВерсииФормата.ПустаяСсылка());
      СП.Вставить("ДобавлятьТолькоНовые", Ложь);
      СП.Вставить("ЭтоРасширение", Ложь);                              // Истина - для XSD расширения формата
      СП.Вставить("ИмяОсновногоПакетаXDTO", "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.22");
      СП.Вставить("РодительВерсии", Справочники.ВерсииФормата.ПустаяСсылка());
      СП.Вставить("ШаблонПространстваИмен", "http://v8.1c.ru/edi/edi_stnd/EnterpriseData");
      СП.Вставить("НомерВерсииФормата", "1.22");
      СП.Вставить("ДанныеДляЗагрузки", ДанныеДляЗагрузки);
      Адрес = ПоместитьВоВременноеХранилище(Неопределено);
      Обработки.ЗагрузкаСтруктурыФормата.ВыполнитьЗагрузкуФормата(СП, Адрес);
      Рез = ПолучитьИзВременногоХранилища(Адрес);
      Результат = "Успех=" + Строка(Рез.Успех);
      ```
      
      Распознавание основного пакета: загрузчик считает ОСНОВНЫМ тот XSD, где сразу за
      `xs:schema` идет `xs:import` (импорт Message). targetNamespace этого файла =
      `ИмяОсновногоПакетаXDTO`. XSD расширения формата (namespace Демо) грузить отдельно
      с `ЭтоРасширение=Истина` - создаст связь base<->расширение в
      РегистрСведений.ВзаимосвязиВерсийФорматовИРасширений.
      
      ОГРАНИЧЕНИЕ Gateway Timeout: тяжелый синхронный execute_code (формат ~1.2МБ XSD) дает
      HTTP `{"error":"Gateway Timeout"}` от прокси, НО на стороне 1С операция
      ЗАВЕРШАЕТСЯ. Проверять РЕЗУЛЬТАТ отдельным запросом (КОЛИЧЕСТВО ОбъектыФормата),
      НЕ доверять HTTP-ответу. Не запускать повторно "на всякий случай" - создаст дубль/ошибку.
      
    • data-schema.md 26.2 KB
      # Объектная модель КД 3.1 (выверено по EDT)
      
      Источник: метаданные КД 3.1 (3.1.6.14, платформа 8.5.1.1302) через EDT MCP. Имена,
      **типы** реквизитов, владельцы и табличные части получены через EDT MCP
      (`get_metadata_details full`). Это эталон, заменивший прежние данные из toolkit
      (toolkit искажал кириллицу и не давал типы).
      
      Модель КД 3.1 близка к КД 2.0 (теневая модель метаданных + справочники правил),
      плюс слой формата EnterpriseData. Результат разработки - не XML-правила, а модуль
      менеджера обмена (BSL) + версия/пакет формата (XSD). XML-правила для "Универсального
      обмена" - это КД 2.0 (скилл `kd2-rules`).
      
      ## Карта владельцев - ключ к созданию правил
      
      | Справочник | Владелец | Иерарх. |
      |---|---|---|
      | `Конвертации` | нет (топ) | да, 2 ур. |
      | `СоставыКонвертаций` | `Конвертации` | нет |
      | `ПравилаКонвертацииОбъектов` (ПКО) | **нет (топ)** | нет |
      | `ПравилаКонвертацииСвойств` (ПКС) | **ПКО** | да, 2 ур. |
      | `ПравилаОбработкиДанных` (ПОД) | **нет (топ)** | нет |
      | `ПравилаКонвертацииПредопределенныхДанных` (ПКПД) | **нет (топ)** | нет |
      | `Регистрации` | нет (топ) | - |
      | `ПравилаРегистрацииОбъектов` (ПРО) | `Регистрации` | - |
      | `Конфигурации` | нет (топ) | нет |
      | `Релизы` | нет (топ) | да |
      | `Объекты` | **`Релизы`** | да, 2 ур. |
      | `Свойства` | `Объекты` | да, 2 ур. |
      | `Значения` | `Объекты` | да |
      | `ВерсииФормата` | нет (топ) | да, 2 ур. |
      | `ОбъектыФормата` | `ВерсииФормата` | да, 2 ур. |
      | `СвойстваФормата` | `ОбъектыФормата` | да, 2 ур. |
      | `ТипыФормата` | `ВерсииФормата` | нет |
      | `ЗначенияФормата` | `ОбъектыФормата`, `СвойстваФормата` | нет |
      
      КРИТИЧНО: ПКО/ПОД/ПКПД - **топ-уровневые, без Владельца**. С конкретной
      Конвертацией связываются записью справочника `СоставыКонвертаций`
      (Владелец=Конвертации, реквизит `ЭлементКонвертации` - ссылка на правило). Только
      ПКС подчинен - его Владелец=ПКО. У стандартного реквизита Владелец у ПОД остался
      синоним "Конвертация", но элемент `<owners>` в .mdo не задан - это рудимент, а не
      реальная подчиненность.
      
      ПКС - **отдельный справочник** (как в КД 2.0), не регистр сведений. Обращение
      `Метаданные.РегистрыСведений.ПравилаКонвертацииСвойств` падает; правильно
      `Метаданные.Справочники.ПравилаКонвертацииСвойств`.
      
      ## Справочник.Конвертации (топ, иерарх.)
      
      Пара обмена. Реквизиты (тип):
      - `ТипКонвертации` - EnumRef.ТипыКонвертаций (значения: `XML`, `XDTO`)
      - `ИнтерфейсКонвертации` - EnumRef.ВариантыМоделейОбмена (синоним "Интерфейс по
        модели"; значения `ПакетнаяМодель`/`ОбъектнаяМодель`/`КомбинированнаяМодель`)
      - `Конфигурация`, `КонфигурацияКорреспондент` - **CatalogRef.Релизы** (не Конфигурации!)
      - `Статус` - EnumRef.СостоянияПравил (`Черновик`/`ВРаботе`/`НаТестировании`/`Готово`/`Архив`)
      - `Версия82` - Boolean; `ВерсияФорматаМенеджера` - String; `ВидБазы` - Number
      - Подключение корреспондента: `ИмяБазыДанных`, `СерверБазыДанных`,
        `ПользовательБазыДанных`, `ПарольПользователя`, `ПолноеИмяФайловойБазы` - String
      - `ИспользоватьРазделениеМодуля` - Boolean; `СпособВыгрузкиРазделенногоМодуля` -
        EnumRef.СпособыВыгрузкиРазделенногоМодуля
      - `ИспользоватьТипизациюПеременных`, `ГруппироватьПоОбъектамВыгрузки`,
        `ЗапретитьПереводИменОбъектовФормата` - Boolean
      - `ИмяФайлаДляСохранения`, `Описание` - String
      - ~19 алгоритмов-обработчиков (String): `АлгоритмПередВыгрузкойДанных`,
        `АлгоритмПередКонвертацией`, `АлгоритмПослеЗагрузкиДанных`,
        `АлгоритмПослеЗагрузкиПравилОбмена` и т.д.
      
      Табличные части:
      - `ВерсииФормата` - реквизит **только** `ВерсияФормата` (CatalogRef.ВерсииФормата).
        (Реквизитов `ОбъектыСохраненыВоВнешнемФайле`/`ИмяВнешнегоФайла` в этой ТЧ нет.)
      - `Параметры` - `Параметр`, `ОписаниеПараметра`, `УстанавливатьВДиалоге`,
        `ИспользуетсяПриЗагрузке`, `ПередаватьПараметрПриВыгрузке`, `ТипОбъекта`
        (CatalogRef.Объекты), `ПравилоКонвертации` (String), `ВременнаяКопия`.
      
      `Конфигурация`/`КонфигурацияКорреспондент` пусты, пока не загружен Релиз.
      
      ## Справочник.СоставыКонвертаций (Владелец=Конвертации)
      
      Связывает Конвертацию с ее правилами и алгоритмами.
      - `ЭлементКонвертации` - составной тип: CatalogRef из
        `ПравилаКонвертацииПредопределенныхДанных`, `ПравилаКонвертацииОбъектов`,
        `Алгоритмы`, `Запросы`, `ПравилаОбработкиДанных`.
      - `Отключить` - Boolean.
      
      Чтобы правило (ПКО/ПОД/ПКПД) попало в конвертацию, создается запись
      `СоставыКонвертаций` с Владелец=Конвертация и ЭлементКонвертации=ссылка на правило.
      
      ## Справочник.ПравилаКонвертацииОбъектов (ПКО, топ-уровневый)
      
      Код (String, 50) = идентификатор правила (представление по коду). Реквизиты:
      - `ОбъектКонфигурации`, `ОбъектКонфигурацииКорреспондент` - CatalogRef.Объекты
      - `ОбъектКонфигурацииДляВыгрузкиМодуля` - CatalogRef.Объекты
      - `ОбъектФормата` - String (имя объекта формата)
      - `ВариантИдентификации` - EnumRef.ВариантыИдентификацииОбъектов
        (`ПоУникальномуИдентификатору`/`ПоПолямПоиска`/
        `СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска`)
      - `ТипКонвертации` - EnumRef.ТипыКонвертаций
      - `ПриоритетОбъектовОбмена` - EnumRef.ПриоритетОбъектовОбмена
      - `ОтборСобытийXDTOПоМодели` - EnumRef.ВариантыМоделейОбмена
      - `ДополнительныйМодуль` - CatalogRef.ДополнительныеМодули
      - `ГруппаПравил` - String (НЕ ссылка; справочника `ГруппыПравил` нет)
      - Флаги (Boolean): `ИспользоватьДляОтправки`, `ИспользоватьДляПолучения`,
        `ВыгружатьВМодульМенеджера`, `ВыгружатьОбъектТолькоПриНаличииНаНегоСсылки`,
        `ГенерироватьНовыйНомерИлиКодЕслиНеУказан`, `ИспользоватьБыстрыйПоискПриЗагрузке`,
        `НеВыгружатьОбъектыСвойствПоСсылкам`, `НеЗамещать`,
        `НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике`, `НеЗапоминатьВыгруженные`,
        `НеСоздаватьОбъектВПриемникеЕслиНеНайденПоПолямПоиска`,
        `ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли`, `ПравилоДляГруппыСправочника`,
        `ОбъектСДвижениями`, `Отключить`, `Захвачен`, `Копия`, `ВременнаяКопия`,
        `ВстроенныйОбработчикПослеЗагрузкиВсехДанных`,
        `ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD`
      - `Порядок` - Number; `Описание` - String
      - Алгоритмы-обработчики (String): `АлгоритмПриОтправкеДанных`, `АлгоритмПриПолученииДанных`,
        `АлгоритмПередОтправкойДанных`, `АлгоритмПередПолучениемДанных`,
        `АлгоритмПриВыгрузкеОбъекта`, `АлгоритмПриЗагрузкеОбъекта`, `АлгоритмПередВыгрузкойОбъекта`,
        `АлгоритмПередЗагрузкойОбъекта`, `АлгоритмПослеВыгрузкиОбъекта`, `АлгоритмПослеЗагрузкиОбъекта`,
        `АлгоритмПослеЗагрузкиВсехДанных`, `АлгоритмПослеКонвертацииОбъекта`,
        `АлгоритмПриУдаленииОбъектаИБ`, `АлгоритмПоследовательностьПолейПоиска` и др.
      
      Табличные части: `ИдентификацияПоПолямПоиска` (РеквизитыПоиска),
      `НастройкаВариантовПоискаОбъектовXML` (ИмяНастройкиДляАлгоритма/ДляПользователя),
      `Теги` (Тег - CatalogRef.Теги), `УдалитьПравилаКонвертацииСвойств` (устаревшая).
      
      `АлгоритмПриОтправкеДанных`/`АлгоритмПриПолученииДанных` - тексты BSL обработчиков
      конвертации (ИБ <-> XDTO). В генерируемом менеджере становятся процедурами.
      
      ## Справочник.ПравилаКонвертацииСвойств (ПКС, Владелец=ПКО, иерарх.)
      
      Реквизиты (тип):
      - `СвойствоКонфигурации`, `СвойствоКонфигурацииКорреспондента` - CatalogRef.Свойства
      - `СвойствоКонфигурацииСтрокой`, `СвойствоФормата` - String
      - `ПолноеИмяСвойстваКонфигурации`, `ПолноеИмяСвойстваФормата`,
        `ПолноеИмяСвойстваКонфигурацииКорреспондента` - String
      - `ТипСвойстваКонфигурации`, `ТипСвойстваФормата`, `ТипСвойстваКонфигурацииКорреспондента` - String
      - `ПравилоКонвертацииСвойства` - **String** (имя ПКО для ссылочного свойства, не ссылка)
      - `Поиск` - Boolean (поле поиска; индексируется) - аналог прежнего "искать по свойству"
      - `ИспользуетсяАлгоритмКонвертации` - Boolean (включает алгоритм)
      - `АлгоритмПередВыгрузкойСвойства`, `АлгоритмПриВыгрузкеСвойства`,
        `АлгоритмПослеВыгрузкиСвойства`, `АлгоритмПередОбработкойВыгрузки`,
        `АлгоритмПослеОбработкиВыгрузки` - String (тексты BSL)
      - `НеЗамещать`, `ПоискПоДатеНаРавенство`, `ПолучитьИзВходящихДанных`,
        `АвтоматическиПриводитьЗначениеКДлинеПриемника`, `ВыгружатьГруппуЧерезФайл`,
        `Отключить`, `Проверено` - Boolean
      - `ИмяПараметраДляПередачи`, `Комментарий` - String; `Порядок` - Number
      - `УсловиеПрименения` - CatalogRef.УсловияПримененияПравил
      
      ПКС связывает свойство конфигурации (`СвойствоКонфигурации`) и свойство формата
      (`СвойствоФормата`, строкой). Для нестандартного заполнения - алгоритм + флаг
      `ИспользуетсяАлгоритмКонвертации`. ПКС создается как элемент справочника, Владелец=ПКО.
      
      ## Справочник.ПравилаОбработкиДанных (ПОД, топ-уровневый)
      
      Точки выборки/выгрузки данных. Реквизиты:
      - `ОбъектВыборки` - составной: String + CatalogRef.Объекты
      - `ПравилоКонвертацииОбъекта` - String (имя ПКО)
      - `СпособВыборки` - Number; `ОчисткаДанных` - Boolean
      - `ТипКонвертации` - EnumRef.ТипыКонвертаций
      - `ДополнительныйМодуль` - CatalogRef.ДополнительныеМодули
      - `РасположениеОбработчиков` - String; `ГруппаПравил` - String
      - Флаги: `ИспользоватьДляОтправки`, `ИспользоватьДляПолучения`,
        `ВыбиратьДанныеДляВыгрузкиОднимЗапросом`, `НеВыгружатьОбъектыСозданныеВБазеПриемнике`,
        `ВыгружатьВМодульМенеджера`, `Отключить`, `Захвачен`, `Копия`, `ВременнаяКопия`
      - `ОбъектКонфигурацииДляВыгрузкиМодуля` - CatalogRef.Объекты
      - `Порядок` - Number; `Комментарий`, `Описание` - String
      - Алгоритмы (String): `АлгоритмВыборкаДанных`, `АлгоритмПриОбработке`,
        `АлгоритмПередОбработкойПравила`, `АлгоритмПослеОбработкиПравила`,
        `АлгоритмПередВыгрузкойОбъекта`, `АлгоритмПослеВыгрузкиОбъекта`
      
      ТЧ: `ПравилаКонвертацииОбъектов` (ПравилоКонвертацииОбъекта - String), `Теги`.
      Свойство `Основание` (BasedOn) = ПКО (можно вводить ПОД на основании ПКО).
      
      ## Справочник.ПравилаКонвертацииПредопределенныхДанных (ПКПД, топ-уровневый)
      
      - `ОбъектКонфигурации`, `ОбъектКонфигурацииКорреспондент` - CatalogRef.Объекты
      - `ОбъектФормата` - String
      - `ТипКонвертации` - EnumRef.ТипыКонвертаций
      - `ГруппаПравил` - String; `Порядок` - Number
      - `ИспользоватьДляОтправки`, `ИспользоватьДляПолучения`, `Захвачен`, `Копия`,
        `ВременнаяКопия` - Boolean
      - Алгоритмы (String): `АлгоритмПередВыгрузкойОбъекта`, `АлгоритмПриВыгрузкеОбъекта`,
        `АлгоритмПослеВыгрузкиОбъекта`, `АлгоритмПослеВыгрузкиОбъектаВФайлОбмена`,
        `АлгоритмПередЗагрузкойОбъекта`, `АлгоритмПриЗагрузкеОбъекта`, `АлгоритмПослеЗагрузкиОбъекта`
      
      ТЧ: `СопоставлениеЗначений` (`ЗначениеКонфигурации`, `ЗначениеФормата`,
      `ЗначениеКонфигурацииКорреспондент` - String; `Тег` - CatalogRef.Теги;
      `УсловиеПрименения` - CatalogRef.УсловияПримененияПравил), `Теги`.
      
      ## Теневая модель метаданных
      
      ### Справочник.Конфигурации (топ-контейнер)
      Реально только `УдалитьТегВырезки` (String, устаревший) + ТЧ
      `УдалитьПодчиненныеКонфигурации` (устаревшая). Это просто контейнер; версии и
      структура живут в Релизах, которые ссылаются на Конфигурацию.
      
      ### Справочник.Релизы (топ)
      Версия загруженной структуры конфигурации.
      - `КонфигурацияВладелец` - CatalogRef.Конфигурации (ShowError)
      - `Версия`, `Имя`, `Синоним`, `Комментарий` - String
      - `Приложение` - EnumRef.Приложения; `ИсточникДанных`, `ВариантЗагрузкиДвижений` - Number
      - `ЕстьРасширения`, `ОбновлятьМетаданныеПоРасписанию` - Boolean
      - `ДатаОбновления` - Date
      - Git-поля (String): `АдресGitСервера`, `ИмяВеткиРепозитория`, `КаталогGitРепозитория`
      - `КаталогЗагрузки`, `РегламентноеЗаданиеGUID` - String
      - ТЧ `Расширения` (`ИмяКаталогаЗагрузки` - String)
      
      Релизов 0 -> структура конфигурации не загружена, привязывать правила не к чему.
      
      ### Справочник.Объекты (Владелец=Релизы, иерарх.)
      - `Имя`, `Синоним`, `Комментарий` - String
      - `Тип` - **EnumRef.ТипыОбъектов** (не строка)
      - `Иерархический`, `ОграничиватьКоличествоУровней`, `КонтрольУникальности`,
        `АвтоНумерация`, `Подчиненный` - Boolean
      - `ВидИерархии`, `СерииКодов`, `Периодичность` - String; `КоличествоУровней` - Number
      - `Идентификатор` - String (индекс)
      - `ОбъектВышестоящегоРелиза` - CatalogRef.Объекты
      
      ### Справочник.Свойства (Владелец=Объекты, иерарх.)
      - `Синоним`, `Комментарий`, `Использование`, `ТипыСтрокой`, `Подсказка` - String
      - `Вид` - EnumRef.ВидыСвойств; `ВариантИндексирования` - EnumRef.ВариантыИндексирования
      - `Индексирование`, `Авторегистрация` - Boolean
      - Квалификаторы: `КвалификаторыЧисла_Длина`/`_Точность` - Number,
        `КвалификаторыЧисла_Неотрицательное` - Boolean, `КвалификаторыСтроки_Длина` - Number,
        `КвалификаторыСтроки_Фиксированная` - Boolean, `КвалификаторыДаты_Состав` - String
      - `Идентификатор` - String (индекс); `СвойствоВышестоящегоРелиза` - CatalogRef.Свойства
      - ТЧ `Типы` (`Тип` - CatalogRef.Объекты)
      
      ### Справочник.Значения (Владелец=Объекты, иерарх.)
      Значения перечислений/предопределенные. `Синоним`, `Комментарий` - String;
      `Предопределенное` - Boolean; `Идентификатор` - String. ТЧ `Типы` (Тип - CatalogRef.Объекты).
      
      ## Слой формата EnterpriseData
      
      Это **цепочка справочников** (не табличные части ВерсииФормата!).
      
      ### Справочник.ВерсииФормата (топ, иерарх.)
      - `ПространствоИмен` - String (namespace; НЕ "URIПространстваИмен")
      - `Расширение` - Boolean (признак: версия-расширение формата)
      - `ДоступенЗапросНаВыгрузку` - Boolean
      - **Табличных частей нет.** Состав формата - в подчиненных справочниках ниже.
      
      Расширение формата = запись ВерсииФормата с `Расширение=Истина` и своим
      `ПространствоИмен`.
      
      ### Справочник.ОбъектыФормата (Владелец=ВерсииФормата, иерарх.)
      Наименование = имя объекта формата. `ЭтоГруппаОбщихСвойств` - Boolean;
      `ТипОбщегоРеквизита` - EnumRef.ТипыОбщихРеквизитов; `ПереносОписанийВыполнен` - Boolean.
      
      ### Справочник.СвойстваФормата (Владелец=ОбъектыФормата, иерарх.)
      - `Тип`, `ОбъектХранительСвойств` - String
      - `Обязательное`, `СоставнойТип` - Boolean; `Порядок`, `НижняяГраница` - Number
      - `ТипОбщегоСвойства` - EnumRef.ТипыОбщихРеквизитов
      - ТЧ `Состав` (`ТипФормата`, `ИмяТипа` - String), `Фасеты` (`ВидФасета`, `ЗначениеФасета` - String)
      
      ### Справочник.ТипыФормата (Владелец=ВерсииФормата)
      `БазовыйТип`, `ПространствоИмен`, `ПространствоИменБазовогоТипа` - String;
      `СоставнойТип` - Boolean. ТЧ `Состав`, `Фасеты`.
      
      ### Справочник.ЗначенияФормата (Владелец=ОбъектыФормата, СвойстваФормата)
      `Комментарий` - String, `Порядок` - Number.
      
      ## Обработки КД 3.1 (фактические имена; всего 63)
      
      | Обработка | Назначение |
      |---|---|
      | `ЗагрузкаСтруктурыКонфигурацииИзФайловXML` | загрузить структуру из XML/EDT -> Релиз + Объекты/Свойства |
      | `ЗагрузкаСтруктурыКонфигурации` | загрузка структуры старых версий (7.7, 8.0) |
      | `ВыгрузкаСтруктурыФормата` / `ЗагрузкаСтруктурыФормата` | работа со структурой формата ED |
      | `ДеревоОбъектовФормата` | редактор дерева объектов формата |
      | `НастройкаПравилОбмена` | основной редактор/мастер правил |
      | `НастройкаПравилКонвертацииСвойств` | редактор ПКС |
      | `АвтогенерацияПравилКонвертацииXML` | автонастройка правил |
      | `ВыгрузкаМодуля` | **генерация модуля менеджера обмена (BSL)** |
      | `ВыгрузкаКонвертацииXML` / `ЗагрузкаКонвертацииXML` | выгрузка/загрузка правил в XML |
      | `СохранитьКомплектПравилXML` | сохранить комплект правил |
      | `ЗагрузкаМодуляМенеджера` | загрузка конвертации XDTO (готовый модуль менеджера) |
      | `ПроверкаКонвертации` | проверка правил |
      | `СравнениеВерсийФормата` | сравнение версий формата |
      | `КопированиеСоставаКонвертаций` | копирование состава конвертации |
      | `ПомощникСозданияОбменаДанными` | мастер настройки синхронизации |
      | `КонвертацияОбъектовXDTO` | движок конвертации XDTO |
      | `ВыполнениеОбменаДанными` | выполнение обмена |
      | `ВыгрузкаЗагрузкаEnterpriseData` | выгрузка/загрузка EnterpriseData |
      
      Имен `ВыгрузкаПравил`, `ПодключениеКорреспондента`, `ПомощникСозданияФорматаXDTO`
      в сборке нет.
      
      ## Общие модули движка конвертации (потребители генерируемого менеджера)
      
      `КонвертацияДанныхXDTOСервер`, `КонвертацияДанныхXDTOВызовСервера`,
      `КонвертацияДанныхXDTOКлиент`, `ОбменДаннымиКонвертацияДанныхXDTO`,
      `ОбменДаннымиСобытияКонвертацияДанныхXDTO`, `НастройкиКонвертацииВызовСервера`,
      `НастройкиКонвертацииПовтИсп`, `ОбновлениеИнформационнойБазыКонвертацияДанныхXDTO`.
      Генерируемый модуль менеджера обмена работает поверх этого движка (`ОбменДаннымиXDTO`).
      
    • format-extension.md 8.7 KB
      # Расширение формата EnterpriseData в КД 3.1 + workflow
      
      Цель: получить артефакты для расширения формата ED на стороне приемника
      (например УНФ): **модуль менеджера обмена** (общий модуль BSL с правилами) и
      **XSD-пакет/версию формата расширения** (собственный namespace поверх базового ED).
      Состав формата можно только расширять (добавлять свойства/типы), не удалять и не
      переименовывать существующее.
      
      ## End-to-end workflow
      
      Шаги со звездочкой (*) штатно делаются через формы обработок КД 3.1; toolkit там
      помогает инспектировать состояние до/после и при возможности вызвать методы.
      
      1. **Загрузить структуру конфигурации-приемника.** Обработка
         `ЗагрузкаСтруктурыКонфигурацииИзФайловXML` создает `Релиз` и заполняет
         `Объекты`/`Свойства`. Можно через форму, но есть и **headless-путь** через
         экспортный метод `ВыполнитьЗагрузкуМетаданных` + фоновое задание - подробный
         рецепт в `methods.md` п.1 (поддерживает формат EDT-исходников
         напрямую, без выгрузки в XML Конфигуратора). Проверка:
         `ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Релизы`.
      
      2. **Привязать Релиз к Конвертации.** Поля `Конфигурация` и `КонфигурацияКорреспондent`
         Конвертации = ссылка на загруженный Релиз (для двустороннего УНФ-УНФ - один и тот
         же Релиз). Можно через toolkit (правка реквизитов после загрузки структуры).
      
      3. **Подготовить базовый формат ED и расширение.** Базовая версия формата ED (например
         1.10) и расширение - записи справочника `ВерсииФормата` (расширение - с
         `Расширение=Истина` и своим `ПространствоИмен`, см. bsl-templates). Состав формата
         хранится НЕ в табличных частях, а в цепочке подчиненных справочников:
         `ВерсииФормата` -> `ОбъектыФормата` (Владелец=ВерсииФормата) -> `СвойстваФормата`
         (Владелец=ОбъектыФормата) -> `ЗначенияФормата`; типы - `ТипыФормата`
         (Владелец=ВерсииФормата). Добавляемые объекты/свойства расширения создаются как
         элементы этих справочников под записью ВерсииФормата с `Расширение=Истина`. Привязать
         версии формата к Конвертации через ТЧ `Конвертации.ВерсииФормата` (реквизит `ВерсияФормата`).
      
      4. **Наполнить правила (*).** `НастройкаПравилОбмена` / `НастройкаПравилКонвертацииСвойств`:
         ПКО (ОбъектКонфигурации <-> ОбъектФормата), ПКС (свойства, включая Демо_-поля
         расширения), ПОД (точки выгрузки), ПКПД (предопределенные/перечисления). Простые
         ПКО/ПКС можно создавать и через toolkit как элементы справочников (см. bsl-templates),
         нестандартную логику - в алгоритмах ПКО (`АлгоритмПриОтправкеДанных`,
         `АлгоритмПриПолученииДанных`).
      
      5. **Сгенерировать артефакты.** Обработка `ВыгрузкаМодуля` формирует модуль
         менеджера обмена. Headless-вызов через экспортный `ВыполнитьВыгрузкуМодулей` +
         `ПодготовитьНастройкиВыгрузкиМодулей` - см. `methods.md` п.2. Структура формата
         выгружается как XSD (`ВыгрузкаСтруктурыФормата` / штатная выгрузка пакета).
      
      6. **Перенести в расширение приемника.** XSD -> `XDTOPackage`, BSL -> `CommonModule`
         в расширении конфигурации (например УНФ).
      
      7. **Зарегистрировать расширение формата на стороне приемника.** Перехват типовой
         процедуры в `ОбменДаннымиПереопределяемый`:
         ```bsl
         &После("ПриПолученииДоступныхРасширенийФормата")
         Процедура <Преф>_ПриПолученииДоступныхРасширенийФормата(РасширенияФормата)
             РасширенияФормата.Вставить("<URI расширения>", "<версия базового ED>");
         КонецПроцедуры
         ```
         Перехват по имени процедуры, не по строке (устойчиво к обновлениям).
      
      ## Обработчики ПКО в генерируемом менеджере
      
      - Отправка (ИБ -> XDTO): процедура вида `ПКО_<Имя>_ПриОтправкеДанных(ДанныеИБ,
        ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)` - заполнить `ДанныеXDTO` из `ДанныеИБ`,
        включая поля расширения.
      - Получение (XDTO -> ИБ): `ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные,
        КонвертацияСвойств, КомпонентыОбмена)` - заполнить объект ИБ.
      
      Для ссылочного свойства с динамическим выбором правила значение - структура
      `Новый Структура("Значение, ИмяПКО", Ссылка, "<ИмяПКО>")`. Табличную часть через
      алгоритм - заполнить таблицу значений и `ДанныеXDTO.Вставить("<ИмяТЧ>", Таб)`.
      
      ## Пример конкретного проекта
      
      Иллюстрация привязки к реальной задаче (двусторонний обмен 7.7 <-> УНФ). Значения
      специфичны для проекта - в переиспользуемом сценарии заменять своими.
      
      - Конвертация: `Демо_РасширениеEnterpriseData` (заготовка в ИБ КД 3.1).
      - URI расширения: `http://example.com/edi/DemoExtension/1.0`; версия формата
        "Расширение Демо 1.0" (`Расширение=Истина`).
      - Базовый формат: EnterpriseData (целевая версия 1.10).
      - Целевые артефакты: `XDTOPackage.Демо_РасширениеФормата_1_0` +
        `CommonModule.Демо_МенеджерОбменаРасширение` в расширении УНФ `Демо_УНФ_3.Демо`.
      - Объекты: Catalog.Номенклатура, Catalog.Контрагенты, Document.РасходнаяНакладная,
        ПриходнаяНакладная, ПеремещениеЗапасов, МаршрутныйЛист, КорректировкаРеализации,
        КорректировкаПоступления.
      - В чистой КД (Релизов=0) загрузка структуры - первый шаг workflow.
      - Контракт формата и план разработки - в документах проекта
        (`Контракт обмена XML 7.7-УНФ.md`, `План разработки правил обмена XSD и менеджеров 7.7-УНФ.md`).
      
      ## Эволюция схемы
      
      Новые поля расширения добавлять как необязательные. Изменение XDTO-пакета на стороне
      приемника требует реструктуризации ИБ - планировать как обновление, не горячую правку.
      
    • methods.md 14.4 KB
      # Программный API обработок КД 3.1 (что вызывается headless)
      
      Соответствует коду форменных обработок КД 3.1 (3.1.6.14). Форменные обработки КД
      делают тяжелую работу НЕ в форме, а в экспортных методах ManagerModule/ObjectModule
      (форма лишь собирает входные данные и запускает фон). Поэтому ключевые шаги
      вызываемы через `:6011` execute_code, минуя UI. file:line - для чтения исходника
      при необходимости.
      
      Общий прием headless-вызова форменной обработки:
      1. `get_module_structure` модуля формы -> найти серверный метод кнопки
         (`Выполнить*Сервер`).
      2. Прочитать его -> увидеть реальный вызов (Export-метод Manager/Object или
         `ДлительныеОперации.ВыполнитьВФоне("Обработки.X.Метод", Параметры)`).
      3. Собрать параметры и вызвать метод. Тяжелые операции (большая конфигурация) -
         через фон с опросом, не синхронно (иначе таймаут toolkit).
      
      ## 1. ЗагрузкаСтруктурыКонфигурацииИзФайловXML - загрузка структуры (-> Релиз/Объекты/Свойства)
      
      Заполняет теневую модель (Релиз + Объекты + Свойства + Значения) из исходников
      конфигурации. Поддерживает форматы XML-дампа Конфигуратора И EDT.
      
      Экспортный метод (вызывается фоном из формы):
      - `ВыполнитьЗагрузкуМетаданных(ОбщиеПеременные, АдресВременногоХранилища)` Export -
        `DataProcessors/ЗагрузкаСтруктурыКонфигурацииИзФайловXML/ManagerModule.bsl:7`.
        `ОбщиеПеременные` = СтруктураПараметров (см. ниже); `АдресВременногоХранилища` -
        адрес для результата.
      
      Структура параметров (форма, `Forms/Форма/Module.bsl:344` `ВыполнитьЗагрузкуСервер`):
      - `СпособЗагрузки` - вариант (XML-дамп / EDT)
      - `ПомещенныеФайлы` - Массив структур `{ПолноеИмя, Хранение, ЭтоРасширение}`, где
        `Хранение` - **путь к файлу на сервере** (форма пишет файлы во временный каталог
        и подставляет путь)
      - `ИмяНовойКонфигурации`, `Конфигурация`, `ИсточникДанных`, `ВариантЗагрузкиДвижений`
      - `ТолькоОбновитьПланыОбмена`, `ТолькоДобавлятьНовые` - Boolean
      - `ЕстьРасширения` - Boolean; `ИмяКаталогаЗагрузки` - String;
        `КаталогиРасширений` - Массив (если есть расширения)
      
      Ридеры форматов внутри менеджера:
      - EDT: `ПрочитатьСведенияОбОбъектеИзEDT` (`ManagerModule.bsl:1142`),
        `ПрочитатьСведенияОСвойствахИзEDT` (`:1616`)
      - XML-дамп: `ПрочитатьСведенияОбОбъектеИзXML` (`:934`),
        `ПрочитатьСведенияОСвойствахИзXML` (`:1314`)
      - Хелперы поиска файлов: `НайтиПомещенныеФайлыПоИмени` (`:3062`),
        `НайтиПомещенныеФайлыПоМаске` (`:3074`)
      
      Headless-сценарий: собрать `ПомещенныеФайлы` из EDT-исходников УНФ
      (`...\Демо_УНФ_3\src`) на сервере КД, вызвать `ВыполнитьЗагрузкуМетаданных`
      как фоновое задание (`ДлительныеОперации.ВыполнитьВФоне`) с опросом. УНФ большая -
      синхронно нельзя.
      
      #### Рецепт headless-загрузки структуры
      
      1. **robocopy** только загружаемых видов .mdo во ВРЕМЕННЫЙ каталог (база + расширение
         отдельно). Обязательно во временный: загрузчик в конце делает `УдалитьФайлы(Хранение)`
         по каждому файлу - если `Хранение` указывает на EDT-оригиналы, он их СНЕСЕТ.
         Загружаемые виды: `Catalogs,Documents,Enums,Tasks,BusinessProcesses,ChartsOfAccounts,
         ChartsOfCalculationTypes,ChartsOfCharacteristicTypes,AccountingRegisters,
         AccumulationRegisters,CalculationRegisters,InformationRegisters,ExchangePlans,
         EventSubscriptions,Constants,DefinedTypes,CommonAttributes,Configuration`
         (CommonModules/Roles/Forms и пр. не нужны - загрузчик их не читает).
      2. На сервере КД собрать `ПомещенныеФайлы` - массив структур
         `{ПолноеИмя, Хранение, ЭтоРасширение}`, где и `ПолноеИмя`, и `Хранение` = путь к
         temp-копии (матчинг идет по подстроке вида в `ПолноеИмя`). База - `ЭтоРасширение=Ложь`,
         расширение - `Истина`, через `НайтиФайлы(temp\src\<Вид>, "*.mdo", Истина)`.
      3. `СтруктураПараметров`: `СпособЗагрузки=0` (новый Релиз), `ИсточникДанных=1` (EDT),
         `ВариантЗагрузкиДвижений=1`, `ТолькоОбновитьПланыОбмена=Ложь`, `ТолькоДобавлятьНовые=Ложь`,
         `ЕстьРасширения=Истина`, `ИмяКаталогаЗагрузки`=temp-корень базы,
         `КаталогиРасширений`=[temp-корень расширения], `ИмяНовойКонфигурации`=имя Релиза,
         `Конфигурация`=`Справочники.Релизы.ПустаяСсылка()`.
      4. Запуск: `ДлительныеОперации.ВыполнитьВФоне("Обработки.ЗагрузкаСтруктурыКонфигурацииИзФайловXML.ВыполнитьЗагрузкуМетаданных", СП, ПарамФон)`.
         В ФАЙЛОВОЙ базе работает по-настоящему АСИНХРОННО (возвращает Статус=Выполняется + JobID).
      5. **Опрос завершения - НЕ по счетчикам!** Объекты/Свойства/Значения стабилизируются
         ЗАДОЛГО до конца (после создания объектов идет длинная фаза заполнения типов 69к
         свойств - счетчики не растут, но задание работает). Признак конца:
         `ФоновыеЗадания.НайтиПоУникальномуИдентификатору(JobID).Состояние <> Активно`, либо
         `РегистрСведений.СостоянияЗагрузокМетаданных` (Измерение `Релиз`, ресурс `Результат`)
         = `Выполнено`. Проверять ошибку через `Задание.ИнформацияОбОшибке`.
      6. После загрузки - привязать Релиз к Конвертации:
         `Об=Конв.ПолучитьОбъект(); Об.Конфигурация=Релиз; Об.КонфигурацияКорреспондент=Релиз; Об.Записать();`.
      
      Особенности BSL toolkit-компилятора (фрагмент через Выполнить): `Новый Тип(...).Метод()` -
      chaining прямо на конструкторе ЗАПРЕЩЕН ("Ожидается Тогда") - присваивать в переменную;
      имя переменной не может быть `И` (зарезервировано - "Ожидается имя переменной");
      chaining на результате метода (`Зап.Выполнить().Выгрузить()[0]`) - разрешен.
      
      На конфигурации масштаба УНФ загрузка структуры занимает ~30 мин.
      
      ## 2. ВыгрузкаМодуля - генерация модуля менеджера обмена (-> BSL)
      
      Главный артефакт КД 3.1: текст модуля менеджера обмена для движка `ОбменДаннымиXDTO`.
      
      Экспортные методы:
      - `ВыполнитьВыгрузкуМодулей()` Export - `DataProcessors/ВыгрузкаМодуля/ObjectModule.bsl:9`.
        **Основной генератор.** Без параметров - читает реквизиты объекта обработки
        (Конвертация + настройки), возвращает результат (тексты модулей).
      - `СформироватьТекстПравила(Параметры)` Export - `ObjectModule.bsl:199`. Генерация
        текста одного правила.
      - `ПодготовитьНастройкиВыгрузкиМодулей(Конвертация, ИменаФайловДляСохранения, НастройкиВыгрузки, ОбщиеПеременные = Неопределено)`
        Export - `ManagerModule.bsl:13`. Заполняет `НастройкиВыгрузки` (ИмяКаталога,
        СпособВыгрузки, ВыгрузкаВТХТ/ВыгрузкаВХМЛ, ТегиДляМодуляМенеджера) и
        `ИменаФайловДляСохранения` по реквизитам Конвертации (`ИмяФайлаДляСохранения`,
        `ИспользоватьРазделениеМодуля`, `СпособВыгрузкиРазделенногоМодуля`).
      - `ПолучитьТекстЗаголовкаКомандыВыгрузкиМодуля(Конвертация)` Export - `ManagerModule.bsl:64`.
      
      Рецепт (форма, `Forms/Форма/Module.bsl:53` `ВыгрузитьМодулиСервер`):
      ```bsl
      НастройкиВыгрузки = Новый Структура; ИменаФайлов = Новый Структура;
      Обработки.ВыгрузкаМодуля.ПодготовитьНастройкиВыгрузкиМодулей(Конв, ИменаФайлов, НастройкиВыгрузки);
      Обр = Обработки.ВыгрузкаМодуля.Создать();
      Обр.Конвертация = Конв;   // + перенести НастройкиВыгрузки/ИменаФайлов в реквизиты объекта обработки
      Результат = Обр.ВыполнитьВыгрузкуМодулей();
      ```
      Для headless нужны точные имена реквизитов объекта обработки `ВыгрузкаМодуля`
      (получить через `get_metadata_details Обработки.ВыгрузкаМодуля` - настройки кладутся
      в объект перед вызовом). Зависимость: движок `КонвертацияДанныхXDTOСервер`
      (`.ТегиДляМодуляМенеджераОбъекта()`).
      
      `СпособВыгрузкиРазделенногоМодуля` (EnumRef.СпособыВыгрузкиРазделенногоМодуля):
      `ФайлыTXT`, `ФайлыXML`. Реквизит Конвертации `ИспользоватьРазделениеМодуля`
      включает раздельную выгрузку модулей менеджеров.
      
      ## 3. Прочие обработки (API не прослежен до конца - пробовать перед использованием)
      
      | Обработка | Назначение | Где искать API |
      |---|---|---|
      | `ВыгрузкаКонвертацииXML` / `ЗагрузкаКонвертацииXML` | перенос правил между ИБ КД в XML | ManagerModule/ObjectModule |
      | `СохранитьКомплектПравилXML` | сохранить комплект правил | -"- |
      | `ЗагрузкаМодуляМенеджера` | загрузка готового модуля (конвертация XDTO) | -"- |
      | `НастройкаПравилОбмена` / `НастройкаПравилКонвертацииСвойств` | редакторы правил | преимущественно UI (форма) |
      | `ВыгрузкаСтруктурыФормата` / `ЗагрузкаСтруктурыФормата` | структура формата ED | ManagerModule/ObjectModule |
      | `ПроверкаКонвертации` | валидация правил | -"- |
      
      Перед программным вызовом: `get_module_structure` ManagerModule и ObjectModule,
      найти Export-метод, прочитать сигнатуру (как сделано выше для загрузчика и генератора).
      
      ## Движок конвертации (общие модули - потребители генерируемого менеджера)
      
      Генерируемый модуль менеджера обмена работает поверх движка `ОбменДаннымиXDTO` и
      этих общих модулей:
      - `КонвертацияДанныхXDTOСервер` - серверный API движка (используется генератором:
        `ТегиДляМодуляМенеджераОбъекта()` и др.)
      - `КонвертацияДанныхXDTOВызовСервера`, `КонвертацияДанныхXDTOКлиент`
      - `ОбменДаннымиКонвертацияДанныхXDTO`, `ОбменДаннымиСобытияКонвертацияДанныхXDTO`
      - `НастройкиКонвертацииВызовСервера`, `НастройкиКонвертацииПовтИсп`
      - `ОбновлениеИнформационнойБазыКонвертацияДанныхXDTO`
      
      Структура процедур генерируемого менеджера (ПКО_<Имя>_ПриОтправкеДанных и т.п.) -
      в `format-extension.md`.
      
    • troubleshooting.md 8.8 KB
      # Ограничения toolkit :6011 и КД 3.1
      
      Пункты относятся к КД 3.1.6.14 через MCP-toolkit.
      
      ## Транспорт и кодировка
      
      ### Payload-файл, не -d с кириллицей
      
      `curl -d '{"code":"...кириллица..."}'` из bash на Windows бьет кириллицу.
      Формировать JSON через `jq -Rs '{code: .}'` (fallback `python json.dumps`) в файл,
      слать `curl --data-binary @файл`. Обертки - `scripts/kd31_query.sh`, `kd31_exec.sh`.
      
      ### Ответ читать из файла через Read
      
      Вывод curl в терминал портит кириллицу (видно как `Прав著...`) и визуально
      обрезает строку (кажется, что вернулось ~10 элементов из 46). Сохранять ответ в
      файл (`curl ... > out.json`) и читать инструментом Read - тогда UTF-8 корректен и
      виден весь результат. Это критично: на искаженном stdout легко сделать ложный
      вывод о структуре.
      
      ### Формат ответа
      
      `execute_code` возвращает `{"success": true, "data": "{\"#\",\"value\":\"...\"}"}` -
      полезное в `value`. Нормальный формат данной сборки toolkit.
      
      ## execute_code
      
      ### Серверный контекст, без `Возврат`
      
      Результат - через переменную `Результат = ...`, не `Возврат`.
      
      ### `Справочники.X.Количество()` не работает
      
      `Справочники.Конвертации.Количество()` падает "Метод объекта не обнаружен
      (Количество)". Считать через запрос: `ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.X`.
      
      ### Правильная коллекция метаданных (ПКС - справочник)
      
      `Метаданные.РегистрыСведений.ПравилаКонвертацииСвойств` падает "Поле объекта не
      обнаружено" - ПКС в КД 3.1 это **справочник**:
      `Метаданные.Справочники.ПравилаКонвертацииСвойств`. При "Поле объекта не
      обнаружено (Имя)" - проверить, в той ли коллекции (Справочники/РегистрыСведений/
      Обработки) ищется объект, и точное имя через `Метаданные.Справочники` (список).
      
      ### "Неопознанный оператор" - упрощать код
      
      Многострочный BSL (циклы, `Если`) в целом исполняется. Но `ВРег("...")` с
      вложенными кавычками внутри `Если` давал "Неопознанный оператор". При такой ошибке
      - убрать подозрительную функцию, вынести строку в переменную, сократить код.
      
      ### Длинные перечисления - в файл
      
      Сбор длинных строк (списки объектов/реквизитов) - сохранять ответ в файл и читать
      Read; на stdout строка обрезается визуально.
      
      ## Поведение КД 3.1
      
      ### Релизы = 0 - структура конфигурации не загружена
      
      `ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Релизы` = 0 означает, что структура
      конфигурации не загружена (обработка `ЗагрузкаСтруктурыКонфигурацииИзФайловXML`).
      Без Релиза справочники `Объекты`/`Свойства` пусты, ПКО привязать не к чему.
      Поля Конвертации `Конфигурация`/`КонфигурацияКорреспондент` ссылаются на Релизы.
      
      ### ВерсияФорматаМенеджера - короткий реквизит
      
      Реквизит `ВерсияФорматаМенеджера` короткий (по наблюдениям - 2 символа): строка
      вида `"1.10"` молча обрезается до `"1."`. Для двузначного минора хранить иначе
      (полная версия - в URI пространства имен версии формата), либо проверять записанное
      значение после `Записать()`.
      
      ### Короткие имена перечислений
      
      Имена значений перечислений КД 3.1 короткие. Выверено по EDT:
      - `Перечисления.ТипыКонвертаций` - `XML`, `XDTO` (не `ФорматXDTO`).
      - `Перечисления.ВариантыМоделейОбмена` - `ПакетнаяМодель`, `ОбъектнаяМодель`,
        `КомбинированнаяМодель` (тип реквизита `Конвертации.ИнтерфейсКонвертации`; перечисления
        `ИнтерфейсыКонвертации` НЕТ).
      - `Перечисления.ВариантыИдентификацииОбъектов` - `ПоУникальномуИдентификатору`,
        `ПоПолямПоиска`, `СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска` (перечисления
        `ВариантыИдентификацииОбъектовПКО` НЕТ).
      - `Перечисления.СостоянияПравил` - `Черновик`, `ВРаботе`, `НаТестировании`, `Готово`,
        `Архив` (тип реквизита `Конвертации.Статус`).
      Перед использованием значения перечисления - свериться со списком значений.
      
      ### Имена обработок - сверять с фактическими
      
      В этой сборке генерация модуля - обработка `ВыгрузкаМодуля`, загрузка структуры -
      `ЗагрузкаСтруктурыКонфигурацииИзФайловXML`, редактор правил - `НастройкаПравилОбмена`.
      Имен `ВыгрузкаПравил`/`ПодключениеКорреспондента`/`ПомощникСозданияФорматаXDTO` нет.
      Перед вызовом обработки - проверить имя через список `Метаданные.Обработки`.
      
      ### Загрузчик УДАЛЯЕТ поданные файлы (XSD и .mdo)
      
      И `ЗагрузкаСтруктурыКонфигурацииИзФайловXML.ВыполнитьЗагрузкуМетаданных`, и
      `ЗагрузкаСтруктурыФормата.ВыполнитьЗагрузкуФормata` в КОНЦЕ работы делают
      `УдалитьФайлы(...)` по каждому поданному файлу (`Хранение` для .mdo,
      `ФайлыФабрики` для XSD). Поданные напрямую XSD базового формата удаляются после загрузки. ВСЕГДА подавать файлы (XSD расширения, .mdo) из ВРЕМЕННОЙ
      КОПИИ (robocopy/cp), не из постоянного места и не из EDT-оригиналов.
      
      ### Тяжелая загрузка занимает сеанс toolkit (HTTP 000 у параллельных запросов)
      
      Загрузка структуры (десятки тысяч объектов, десятки минут) держит сеанс 1С занятым - MCP_Toolkit
      однопоточный, параллельные запросы к :6011 возвращают HTTP 000 (не отвечает) до
      завершения. Это НЕ падение. Опрашивать готовность циклом `curl get_metadata` до
      HTTP 200, только потом проверять результат. Сам факт HTTP Gateway Timeout у
      запускающего вызова - норма (см. выше), 1С продолжает в своем сеансе.
      
      ## Запись / удаление
      
      Если в форме toolkit включена защита (`Записать`/`Удалить`/
      `УстановитьПривилегированныйРежим`) - для правки ее снять. `Удалить()` в обычных
      формах может зависнуть на модальном подтверждении - использовать
      `УстановитьПометкуУдаления(Истина)`, физическое удаление через UI КД. Работать на
      тестовой копии ИБ КД, не на рабочей.
      
  • scripts
    • kd31_exec.sh 1.4 KB
      #!/usr/bin/env bash
      # execute_code к toolkit КД 3.1 из BSL-файла.
      # Использование: kd31_exec.sh script.bsl [out.json]
      # Серверный контекст: НЕ использовать Возврат, результат через переменную Результат.
      # Порт через переменную окружения KD31_PORT (по умолчанию 6011).
      # Если указан out.json - ответ сохраняется туда (читать через Read для корректной
      # кириллицы), иначе печатается в stdout.
      set -euo pipefail
      PORT="${KD31_PORT:-6011}"
      BSL="${1:?Укажите путь к BSL-файлу первым аргументом}"
      OUT="${2:-}"
      TMP="$(mktemp)"
      trap 'rm -f "$TMP"' EXIT
      if command -v jq >/dev/null 2>&1; then
        jq -Rs '{code: .}' "$BSL" > "$TMP"
      else
        python -c "import json,io,sys; print(json.dumps({'code': io.open(sys.argv[1], encoding='utf-8').read()}))" "$BSL" > "$TMP"
      fi
      if [ -n "$OUT" ]; then
        curl -s --max-time 60 -X POST "http://localhost:${PORT}/api/execute_code" \
          -H "Content-Type: application/json; charset=utf-8" --data-binary @"$TMP" > "$OUT"
        echo "saved -> $OUT (читать через Read для корректной кириллицы)"
      else
        curl -s --max-time 60 -X POST "http://localhost:${PORT}/api/execute_code" \
          -H "Content-Type: application/json; charset=utf-8" --data-binary @"$TMP"
        echo ""
      fi
      
    • kd31_query.sh 1.3 KB
      #!/usr/bin/env bash
      # execute_query к toolkit КД 3.1.
      # Использование: kd31_query.sh "ВЫБРАТЬ ... ИЗ Справочник.Конвертации" [out.json]
      # Порт через переменную окружения KD31_PORT (по умолчанию 6011).
      # Кириллица передаётся payload-файлом (jq, fallback python). Если указан out.json -
      # ответ сохраняется туда (читать через Read: терминал портит кириллицу), иначе stdout.
      set -euo pipefail
      PORT="${KD31_PORT:-6011}"
      Q="${1:?Укажите текст запроса первым аргументом}"
      OUT="${2:-}"
      TMP="$(mktemp)"
      trap 'rm -f "$TMP"' EXIT
      if command -v jq >/dev/null 2>&1; then
        printf '%s' "$Q" | jq -Rs '{query: .}' > "$TMP"
      else
        python -c "import json,sys; print(json.dumps({'query': sys.argv[1]}))" "$Q" > "$TMP"
      fi
      if [ -n "$OUT" ]; then
        curl -s --max-time 30 -X POST "http://localhost:${PORT}/api/execute_query" \
          -H "Content-Type: application/json; charset=utf-8" --data-binary @"$TMP" > "$OUT"
        echo "saved -> $OUT (читать через Read для корректной кириллицы)"
      else
        curl -s --max-time 30 -X POST "http://localhost:${PORT}/api/execute_query" \
          -H "Content-Type: application/json; charset=utf-8" --data-binary @"$TMP"
        echo ""
      fi
      
  • SKILL.md 12.4 KB
    ---
    name: kd31-rules
    description: >
      Программная работа с "Конвертация данных, редакция 3.1" (КД 3.1) через
      MCP-toolkit (HTTP API) к живой ИБ: инспекция и создание Конвертаций, ПКО, ПКС,
      ПКПД, ПОД, теневой модели метаданных (Конфигурации/Объекты/Свойства/Релизы) и
      слоя формата EnterpriseData (ВерсииФормата/ОбъектыФормата); расширение формата
      ED с собственным namespace; генерация модуля менеджера обмена и выгрузка XSD
      штатными обработками КД 3.1; перенос артефактов в расширение конфигурации.
      Содержит схему данных, BSL-шаблоны для execute_code,
      ограничения toolkit. Триггеры: "КД 3.1", "конвертация данных 3.1", "правила обмена
      EnterpriseData", "настроить ПКО ПКС ПКПД ПОД", "расширение формата ED", "модуль
      менеджера обмена", "обмен через универсальный формат", "подключить конфигурацию
      к КД". English: "1C Data Conversion 3.1", "KD 3.1", "EnterpriseData exchange
      rules", "conversion manager module".
    ---
    
    # KD 3.1 - правила обмена EnterpriseData через MCP-toolkit
    
    Скилл описывает работу с живой ИБ "Конвертация данных, редакция 3.1" (КД 3.1)
    через `MCP-toolkit` HTTP API: исследование структуры правил, создание/правка
    правил, настройка формата и получение артефактов для расширения формата
    EnterpriseData - **модуля менеджера обмена** (общий модуль BSL) и **XDTO-пакета
    расширения / версии формата** (XSD).
    
    Относится к сборке КД 3.1.6.14 (платформа 8.5.1.1302).
    
    ## Модель данных: КД 3.1 близка к КД 2.0 + слой формата
    
    В этой сборке КД 3.1 по структуре похожа на КД 2.0:
    - Теневая модель метаданных: `Релизы` (версия загруженной структуры) -> `Объекты`
      (Владелец=Релизы) -> `Свойства`/`Значения` (Владелец=Объекты). `Конфигурации` -
      топ-контейнер, на который ссылаются Релизы (версии живут в Релизах).
    - Правила в справочниках: `ПравилаКонвертацииОбъектов` (ПКО),
      `ПравилаКонвертацииСвойств` (ПКС, Владелец=ПКО - **это справочник**, не регистр),
      `ПравилаКонвертацииПредопределенныхДанных` (ПКПД), `ПравилаОбработкиДанных` (ПОД),
      `ПравилаРегистрацииОбъектов` (ПРО, Владелец=Регистрации). ПКО/ПОД/ПКПД -
      **топ-уровневые** (без Владельца), связь с конвертацией - через `СоставыКонвертаций`.
      ВАЖНО: у ПКО **нет реквизита Наименование** (идентификатор в Коде, искать НайтиПоКоду)
      и ПКО **НЕ иерархичен** (нет ЭтоГруппа); ПКС иерархичен. Паттерн заполнения - **2 ПКО
      на объект** (`<Объект>_Отправка` + `<Объект>_Получение`), эталон в демо. См. bsl-templates.md.
    - Дополнительно - слой формата EnterpriseData (цепочка справочников):
      `ВерсииФормата` (`ПространствоИмен`, признак расширения) -> `ОбъектыФормата`
      (Владелец=ВерсииФормата) -> `СвойстваФормата` -> `ЗначенияФормата`; типы - `ТипыФормата`.
    
    Отличие результата от КД 2.0: КД 3.1 генерирует **модуль менеджера обмена** (BSL)
    для движка `ОбменДаннымиXDTO` плюс работает с **XDTO-пакетом/версией формата**, а
    не выгружает XML-правила для "Универсального обмена". Для КД 2.0 - скилл `kd2-rules`.
    
    ## Архитектура работы
    
    ```
    Claude (агент)  --Bash+curl (payload через jq/python в файл)-->  MCP-toolkit (КД 3.1, СЕРВЕРНЫЙ контекст)
       -> справочники Конвертации/ПКО/ПКС/ПКПД/ПОД + теневая модель + слой формата
       -> штатные обработки (ЗагрузкаСтруктурыКонфигурацииИзФайловXML, НастройкаПравилОбмена, ВыгрузкаМодуля)
       -> артефакты: CommonModule (менеджер обмена) + XDTOPackage/XSD расширения
       -> перенос в расширение конфигурации-приемника (например УНФ)
    ```
    
    Эндпоинты toolkit (порт по умолчанию 6011):
    - `POST /api/execute_query` - запросы к справочникам/состоянию.
    - `POST /api/execute_code` - чтение метаданных, создание/правка элементов.
      **Серверный, без `Возврат`** - результат через `Результат = ...`.
    - `GET /api/get_metadata?type=Configuration` - метаданные.
    
    ## Граница автоматизации
    
    Через toolkit реально:
    - Инспекция структуры и состояния (состав справочников, реквизиты, статус Конвертации, есть ли Релиз).
    - Создание/правка правил как элементов справочников: Конвертация, ПКО, ПКС, ПКПД, ПОД,
      СоставыКонвертаций (со снятой защитой записи в форме toolkit). ПКО/ПОД/ПКПД -
      топ-уровневые, в конвертацию включаются записью СоставыКонвертаций.
    - Точечная правка реквизитов и привязок.
    - Загрузка структуры и генерация модуля - тоже программно: у форменных обработок есть
      headless-точки входа (`ВыполнитьЗагрузкуМетаданных`, `ВыполнитьВыгрузкуМодулей`),
      вызываемые через фоновое задание. См. `methods.md`.
    
    Удобнее интерактивно (через формы обработок КД 3.1), но НЕ обязательно:
    - Загрузка структуры конфигурации (`ЗагрузкаСтруктурыКонфигурацииИзФайловXML`) -
      заполняет Релиз + Объекты/Свойства. Без нее правила привязывать не к чему.
      Headless - `methods.md` п.1 (для большой конфигурации запускать через фон).
    - Создание/расширение версии формата (`ВыгрузкаСтруктурыФормата` / редакторы формата).
    - Генерация модуля менеджера (`ВыгрузкаМодуля`). Headless - `methods.md` п.2.
    
    Перед массовой работой проверять, что Релизы загружены:
    `ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Релизы` (0 -> структура не загружена).
    
    ## Карта references
    
    | Документ | Что внутри | Когда читать |
    |---|---|---|
    | `references/data-schema.md` | проверенные справочники и реквизиты (Конвертации, ПКО, ПКС, ПКПД, ПОД, теневая модель, слой формата), фактические имена обработок | нужны точные имена объектов/реквизитов |
    | `references/bsl-templates.md` | BSL для execute_code: инспекция, состояние конвертации, создание ПКО/ПКС, привязка версии формата | конкретная операция через toolkit |
    | `references/format-extension.md` | расширение формата ED: версия формата с namespace, привязка к Конвертации, обработчики ПКО, генерация менеджера, перенос в расширение; workflow + контекст проекта | разработка расширения формата и перенос артефактов |
    | `references/methods.md` | программный API обработок (headless): загрузка структуры `ВыполнитьЗагрузкуМетаданных`, генерация модуля `ВыполнитьВыгрузкуМодулей`, прием вызова форменной обработки в обход UI, file:line | нужно вызвать обработку КД программно через toolkit |
    | `references/troubleshooting.md` | ограничения toolkit :6011 и КД 3.1 (кодировка, Количество(), тип коллекции метаданных, длины реквизитов, имена перечислений) | при ошибке execute_code/execute_query |
    
    ## Scripts
    
    - `scripts/kd31_query.sh "<запрос>" [out.json]` - execute_query.
    - `scripts/kd31_exec.sh <файл.bsl> [out.json]` - execute_code из BSL-файла.
    
    Оба: payload через jq (fallback python) + `curl --data-binary @файл`, порт через
    `KD31_PORT` (по умолчанию 6011). Если указан `out.json` - ответ в файл (читать
    через Read: терминал портит кириллицу).
    
    ## Демо-база КД 3.1 как эталон (НАСТОЯТЕЛЬНО)
    
    Если доступна демо-база КД 3.1 (типовая поставка содержит готовую конвертацию,
    напр. "БП->УП" - сотни ПКО, тысячи ПКС) - использовать ее как ЭТАЛОН заполнения
    правил, а не угадывать. Демо идентична рабочей ИБ по структуре метаданных. Перед
    созданием своего ПКО/ПКС снять образец аналогичного правила из демо (Код, как
    заполнены ОбъектКонфигурации/ОбъектФормата, паттерн _Отправка/_Получение, как
    оформлены прямые vs алгоритмические ПКС, ссылочные через ПравилоКонвертацииСвойства).
    Порт демо задается при запуске ее toolkit (порт toolkit уточнять по своей
    конфигурации). Чтение демо - `KD31_PORT=<порт> bash scripts/kd31_query.sh "..."`.
    
    ## Базовая проверка готовности
    
    ```bash
    curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:6011/api/get_metadata?type=Configuration"   # 200
    bash scripts/kd31_query.sh "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.Конвертации"
    bash scripts/kd31_query.sh "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК К ИЗ Справочник.Релизы"
    # Релизы=0 -> структура конфигурации не загружена; для расширения проверить ЕстьРасширения
    bash scripts/kd31_query.sh "ВЫБРАТЬ Наименование, ЕстьРасширения ИЗ Справочник.Релизы ГДЕ НЕ ЭтоГруппа"
    ```
    
    ## Связанные скиллы
    
    - `1c-mcp-toolkit` - HTTP API к живой ИБ 1С (этот скилл - надстройка).
    - `kd2-rules` - аналог для КД 2.0 (та же идея, другой результат - XML-правила).
    - `composing-1c-queries` - синтаксис запросов для execute_query.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related