Инструменты
Все инструменты edt_*: чтение живой модели, запись штатным движком среды и отладка запущенной информационной базы.
Инструменты – edt_* (snake_case); параметры – camelCase (projectName, fqn, queryText);
имя объекта пишется кириллицей, как в конфигурации, а префикс типа – английский (Catalog.Контрагенты, Document.ЗаказКлиента). Префикс edt_ сознательный:
MCP-хост показывает агенту инструменты всех серверов одним списком, и имя должно нести контекст
само – edt_rename однозначен там, где голый rename опасно многозначен.
Имя параметра, которого инструмент не объявляет, отменяет весь вызов: отказ называет близкое
имя (deleteContents → deleteContent) и перечисляет принимаемые аргументы. Молчаливый пропуск
отвечал бы как о сделанном на вызов, который сделал другое.
Вместе они замыкают полный цикл, не выходя из MCP: создать, разработать, собрать, поставить, отладить:
Чтение
| Инструмент | Что возвращает |
|---|---|
edt_projects · edt_project_errors |
Открытые проекты рабочей области – имя, путь на диске, natures, является ли проектом 1C:EDT – и проблемы валидации EDT по проекту (сообщение, severity, ресурс, строка): сужение через fqn / modulePath / severity, счётчики через countOnly, по одной текстовой строке на проблему через brief. С этого стоит начинать: они показывают, к чему вообще можно обращаться. Инструмент сообщает то, что оценивает EDT, а вызов метода, которого нет в другом модуле, EDT считает предупреждением (SU239, “Свойство (метод) объекта не обнаружено”), не ошибкой – ошибка только у неопределённого вызова без имени модуля, – поэтому проверка сгенерированного кода читает и предупреждения. modulePath достаёт только маркеры Eclipse; маркер проверки EDT адресован объектом, так что сужать нужно через fqn, чтобы увидеть оба. Маркер – это снимок, поэтому каждая выведенная проблема сверяется со своим файлом: stale – маркер старше последнего изменения файла на диске, unsynchronized – рабочая область это изменение ещё не прочитала; в сводке счётчики (staleCount, unsynchronized) и подсказка hint. refresh=true перечитывает суженную область с диска и делает инкрементальную сборку перед чтением маркеров – секунды для одного модуля, тогда как edt_clean_project пересобирает всё. |
edt_check_info |
Что проверка ЗНАЧИТ: описание, примеры неправильного и правильного кода и ссылки на стандарты разработки 1С, которые она проверяет, – на английском или русском. Дополняет edt_project_errors, который сообщает, какая проверка сработала: тот отвечает что, этот – почему. Спрашивать по идентификатору проверки либо вставкой текста проблемы – проверка, у которой идентификатор короткий код, находится по заголовку. |
edt_metadata_objects · edt_metadata_details |
Объекты метаданных верхнего уровня с опциональным фильтром по типу и подстроке имени; затем свойства одного объекта и его структура – реквизиты, табличные части, формы, команды, макеты, измерения, ресурсы, значения перечислений – с типом каждого реквизита. |
edt_find_references · edt_outgoing_calls · edt_outgoing_structures |
Куда идут вызовы. Входящие ссылки на объект метаданных из индекса EDT (с method – BSL-места вызова CommonModule.X.method); обратное направление, какие методы ВЫЗЫВАЕТ модуль / метод / форма на уровень наружу, с числом мест вызова и флагом слоя ExtAPI; и, по возможности, ключи верхнего уровня Структуры, переданной каждому квалифицированному исходящему вызову. |
edt_module_text · edt_go_to_definition · edt_symbol_info |
Чтение BSL: исходный текст модуля (или одного метода) со списком процедур и функций и их сигнатурами, по FQN или modulePath; определение символа в позиции (вид цели, имя, объект-владелец, расположение); тип символа в позиции – элемент под курсором и вычисленные типы значения выражения. |
edt_search_modules |
Полнотекстовый поиск по модулям BSL проекта – подстрока или регулярное выражение, опциональный фильтр пути. Чтение идёт через буферы файлов Eclipse, поэтому модуль, открытый в редакторе, ищется в текущем виде, вместе с несохранёнными правками. Если edt_find_references отвечает “кто вызывает этот метод”, то этот – “где встречается такой текст”. |
edt_validate_query |
Валидирует запрос 1С против живых метаданных: синтаксис и семантику (несуществующие таблицы/поля, ошибки типов) с позициями. Принимает текст запроса либо адрес модуля (modulePath, при желании один method) – тогда мост сам достаёт из живого модуля литералы запросов с обрамлением | и проверяет каждый. Пакет проверяется и как целое, чего EDT не делает: запрос, читающий временную таблицу, которую ни один предыдущий запрос не создаёт (ПОМЕСТИТЬ) или которую предыдущий запрос уничтожил, делает текст невалидным – для литерала модуля это заметка INFO, потому что таблицу может давать общий менеджер временных таблиц или другой литерал. |
edt_form_structure · edt_form_render · edt_picture_export |
Формы и изображения: дерево элементов управляемой формы с привязками данных, статическими visible/enabled/readOnly, обработчиками, свойствами полей ввода, связкой команда→кнопка и условным оформлением, плюс реквизиты, команды, параметры и обработчики; та же форма, отрисованная в PNG штатным offscreen-рендером EDT (вариант интерфейса и тема на выбор); содержимое CommonPicture из Picture.zip. |
edt_platform_help |
Синтакс-помощник платформы 1С:Предприятие из поставки EDT (реальная справка API – объекты, методы, свойства, события, рус+англ): поиск по имени или чтение страницы текстом. Свериться с фактическим API вместо угадывания сигнатур. |
Запись
Инструменты записи меняют модель через штатный движок EDT (не текстовой заменой). Все –
под токеном и по умолчанию dry-run (apply=false возвращает план и ничего не меняет);
apply=true применяет изменение и сериализует .mdo.
| Инструмент записи | Что делает |
|---|---|
edt_create_object · edt_delete_object |
Создаёт новый топ-объект (Справочник/Документ/Перечисление/РегистрСведений/…) через фабрику EDT и инициализатор типа, с регистрацией в Configuration – либо удаляет объект с каскадным удалением всех ссылок в метаданных И в BSL (нужен force). |
edt_add_attribute · edt_modify_attribute · edt_remove_attribute |
Добавляют реквизит объекту метаданных (тип / синоним / comment, с валидацией), меняют тип, синоним или comment существующего, либо удаляют его – удаление проверяет ссылки и отказывает, пока они есть, без force. |
edt_rename |
Переименовывает объект или член с каскадом всех ссылок в метаданных И в BSL через штатный движок рефакторинга (нужен force – переименование ломает совместимость). |
edt_add_method · edt_delete_method |
Добавляют и удаляют процедуру/функцию в BSL модуля, обе операции по модели. Вставка отказывает, если результат не парсится; вырезание забирает прилегающий документирующий комментарий, а dry-run возвращает точный удаляемый текст (нужен force – удаление кода деструктивно). Модуль адресуется по FQN, включая HTTPService.X и WebService.X. |
edt_add_route |
Добавляет маршрут – шаблон URL и один HTTP-метод – в HTTPService; инструмент записи маршрутов рядом с инструментами реквизитов и методов. Генерирует uuid и шаблона, и его метода (писать их руками – ровно то, ради отказа от чего существует мост), разрешает перечисление httpMethod, а с createHandler вставляет заготовку Функция <handler>(Запрос) в модуль сервиса. |
edt_add_form |
Добавляет управляемую форму объекту метаданных штатным генератором EDT – тем же, что стоит за мастером “Новая форма”, – поэтому форма, её элементы и модуль генерируются, а не пишутся руками в XML. |
edt_add_form_attribute · edt_modify_form_attribute · edt_remove_form_attribute |
Добавляют, меняют и удаляют реквизит формы – либо, с columnOf, колонку реквизита типа ТаблицаЗначений. Идентификаторы выдаёт служба идентификаторов формы; помимо грамматики типов метаданных принимаются платформенные типы, допустимые у формы (ТаблицаЗначений, СписокЗначений, …) и ОБЪЕКТНЫЕ типы (ВнешняяОбработкаОбъект.X, СправочникОбъект.X) – тот тип, который несёт основной реквизит. Удаление перечисляет связанные элементы и требует force. |
edt_add_form_command · edt_modify_form_command · edt_remove_form_command |
Добавляют, меняют и удаляют команду формы. При добавлении можно сразу записать заготовку процедуры-обработчика в модуль формы, создав его, если модуля не было. Удаление перечисляет связанные кнопки и требует force. |
edt_add_form_handler |
Регистрирует обработчик события формы или её элемента – ту самую запись handlers в Form.form, без которой платформа процедуру не вызывает, а валидация молчит. Список допустимых событий берётся у EDT, поэтому неверно названное отвергается с перечнем; по желанию пишет заготовку с сигнатурой события и нужной директивой. |
edt_add_form_item · edt_modify_form_item · edt_remove_form_item |
Добавляют, меняют и удаляют элементы формы – поле, таблицу, кнопку, группу, декорацию – через штатный IFormItemManagementService, тот самый, который вызывает редактор форм. Таблица, связанная с реквизитом типа ТаблицаЗначений, получает колонки автоматически, а titleRu таблицы остаётся у таблицы – сгенерированные колонки сохраняют штатный заголовок EDT. Правка умеет и переименовать элемент (newName) – имя элемента живёт в модели формы, а процедуры-обработчики сохраняют свои. Удаление забирает всё вложенное и требует force. |
edt_adopt_object |
Заимствует объект базовой конфигурации в проект расширения штатным IModelObjectAdopter EDT – шаг, без которого расширение не может ничего перехватить у этого объекта, и который достраивает edt_create_extension. |
edt_import_project |
Зарегистрировать в workspace СУЩЕСТВУЮЩИЙ каталог проекта – “Импорт существующего проекта” без диалога. Шага не хватало в цикле создать–поработать–удалить: расширение в режиме изменения и контроля сверяется с БАЗОВЫМ проектом на целевом релизе, а он лежит в другом worktree. На диске ничего не переписывается, а своё имя позволяет держать рядом два чекаута одного репозитория. |
edt_create_extension · edt_create_external_object |
Начало работы над проектом. Проект расширения конфигурации к базовому через IExtensionProjectManager, где корневая Configuration – заимствованная базовая конфигурация (как в мастере: именно это делает проект пригодным для загрузки в информационную базу), плюс префикс имён, назначение (Адаптация·Дополнение·Исправление) и синоним; либо проект внешней обработки, начало цикла “обработка → .epf”. |
edt_clean_project · edt_delete_project |
Завершение работы над проектом. Сбросить результаты сборки, чтобы валидация отработала заново (диалог “Очистить” из EDT, программно: возвращает число замечаний до и после, дождавшись, пока оно перестанет меняться, – устаревший маркер, переживший свою причину, хуже отсутствия маркера; для одного модуля, изменённого на диске, лёгкая альтернатива – edt_project_errors с refresh=true), либо удалить проект из workspace средствами Eclipse, чтобы не осталось фантома (нужен force – удаление необратимо). |
edt_build_extension · edt_dump_external_object |
Сборка бинарников: .cfe из проекта расширения и .epf/.erf из внешней обработки или отчёта. Обе умеют обойти резолвер платформы EDT, когда тот не даёт толстый клиент: модель выгружается в XML конструктора в процессе, затем артефакт собирается полной установкой 1С с диска во временной базе, которая потом удаляется. logPath кладёт лог сборки рядом с артефактом. Выгрузка уходит на дисковый маршрут и тогда, когда отказал штатный дампер (route задаёт маршрут явно: edt или disk), и возвращает автогенерацию выгрузок, если отказ её выключил. |
Информационные базы, кластер и платформа
Всё, что обращается к РАБОТАЮЩЕЙ информационной базе, а не к модели в EDT. Мест назначения четыре, и они не взаимозаменяемы – какое использует инструмент, видно в столбце Через:
- штатная синхронизация EDT – то, чем пользуется сама среда. Она открывает собственное соединение с базой и не умеет принимать учётные данные снаружи интерфейса, поэтому останавливается на базе с аутентификацией пользователей.
ibcmd– прямо к базе данных, путём или координатами СУБД, поэтому кластерной базе доступ к кластеру не нужен. Учётной записи 1С у режимаextensionнет вовсе.- агент конфигуратора – конфигуратор, запущенный с
/AgentMode, принимающий команды по SSH и проходящий аутентификацию КАК ПОЛЬЗОВАТЕЛЬ БАЗЫ. Он достаёт то, что недоступно остальным двум, и мост держит по одному агенту на базу: поднимать дорого, держать дёшево. rac– сам кластер, где живут сеансы. Ни агент, ниibcmdих не видят.
Инструменты, меняющие базу, требуют токен и по умолчанию работают в режиме dry-run – так же, как write-инструменты выше.
| Инструмент | Через | Что делает |
|---|---|---|
edt_infobases · edt_platform_installations |
EDT | С чем работает платформенная сторона: зарегистрированные в EDT информационные базы (имя, uuid, строка соединения) с привязками открытых проектов, и установки 1С:Предприятие, из которых EDT выбирает при выгрузке .epf/.erf и создании базы – каждая разрешена до конкретной установки с толстым клиентом, плюс полные установки, найденные на диске. |
edt_designer_agent |
агент | Жизненный цикл агентов конфигуратора, которыми управляет мост: список, запуск, остановка, уборка. Агент – конфигуратор в режиме /AgentMode с открытым сеансом базы, проходящий аутентификацию как пользователь базы; так мост добирается до базы, недоступной остальным транспортам. Поднимается по требованию и живёт между вызовами; остановка освобождает сеанс на сервере. Агент, простоявший дольше EDT_BRIDGE_AGENT_IDLE_MINUTES (по умолчанию 30, off – держать вечно), останавливается сам: стоящий агент занимает клиентскую лицензию и сеанс конфигуратора. Остатки упавшего агента – сеанс, который держит блокировку конфигурирования базы, – подметаются перед каждым запуском и по требованию через action=sweep; принадлежность ДОКАЗЫВАЕТСЯ следом, который агент о себе пишет, а не угадывается по хосту и пользователю сеанса. |
edt_infobase_config_state |
агент | Применена ли конфигурация базы данных – та, которую исполняют сеансы, – или обновление ещё ждёт? Отвечает сама платформа: обновление запускается, а подтверждение отклоняется, поэтому ничего не применяется, а ожидающее обновление возвращается полным списком изменений структуры. Работает через агент конфигуратора, поэтому доступна и серверная база с аутентификацией 1С. |
edt_update_database_config |
агент | Применяет конфигурацию базы данных – шаг, после которого работающие сеансы начинают исполнять ту конфигурацию, которую хранит база. Загрузка проекта в базу этого не делает: до применения каждый сеанс исполняет прежний код (так выглядит только что добавленный маршрут HTTP-сервиса, отвечающий 404). По умолчанию dry-run; sessionTermination=force завершает удерживающие базу сеансы, когда нужна монопольная блокировка. |
edt_update_infobase |
EDT · агент | Обновить конфигурацию базы из проекта EDT. По умолчанию штатным механизмом синхронизации (изменения структуры БД подтверждаются автоматически, конфликт прерывает), которому недоступна база с пользователями; с transport=agent проект выгружается в XML конфигуратора и грузится через агента – единственная дорога в серверную базу с пользователями, – после чего применяется конфигурация базы данных. |
edt_create_infobase · edt_register_platform |
EDT · установка с диска | Создать пустую файловую базу и зарегистрировать её в списке EDT – с запасным вариантом в виде полной установки с диска, если под версию у EDT ничего нет; либо зарегистрировать полную установку в EDT, чтобы ею мог пользоваться её собственный движок. |
edt_extension_properties |
агент · ibcmd | Чтение и установка того, как расширение ЗАРЕГИСТРИРОВАНО в базе – безопасный режим, защита от опасных действий, активность, область действия. Это не задаётся ни сборкой .cfe, ни обновлением из EDT, а только что зарегистрированное расширение получает безопасный режим и защиту включёнными; расширение, меняющее методы базовой конфигурации, под ними не работает. Передайте проект расширения – и результат скажет, тот ли это случай. По имени из EDT вызов идёт через агента, которому доступна серверная база с пользователями; по явным координатам СУБД – через ibcmd, которому нет. |
edt_delete_extension |
агент | Снимает расширение с информационной базы – шаг, замыкающий жизненный цикл (создать · загрузить · настроить · удалить). Dry-run сначала читает текущие свойства, поэтому на неверное имя отвечает внятно. Нужен force вдобавок к apply: конфигурация расширения хранится в базе, и вернуть её отсюда нечем. |
edt_infobase_sessions |
rac | Сеансы кластера 1С через rac: список (по базе или по виду приложения) и завершение. Ни агент, ни ibcmd этого не умеют – сеансы живут в менеджере кластера. Нужен, когда база отказывается конфигурироваться: убитый, а не закрытый сеанс конфигуратора продолжает держать блокировку конфигурации и виден здесь как Designer. Завершение по умолчанию dry-run и требует force. |
edt_infobase_maintenance |
rac | Окно обслуживания вокруг обновления базы: begin поднимает scheduled-jobs-deny (по запросу и sessions-deny с кодом доступа), ждёт, пока сеансы иссякнут сами, и отвечает “clear to update”; end опускает флаги; status только отчитывается. Смысл: на живой базе сеансы BackgroundJob пересоздаются каждую минуту, завершать их бесполезно – сначала запрет, и убивать никого не нужно. Нужен администратор базы; по умолчанию dry-run. |
edt_infobase_dump |
ibcmd | Выгружает информационную базу в .dt через ibcmd – резервная копия, которую стоит снять перед применением конфигурации к базе данных; раньше мост снять её не мог. База адресуется путём или координатами СУБД, перезаписывать существующий файл инструмент отказывается, по умолчанию dry-run. В самой базе ничего не меняется, но выгрузка читает все её данные, поэтому нужен токен. |
Отладка
Подключение к debug-серверу (dbgs) запущенной ИБ и управление выполнением. Использовать
тестовый стенд, а не рабочую базу. Все под токеном; edt_evaluate – жёстче всех.
| Инструмент отладки | Что делает |
|---|---|
edt_debug_attach · edt_debug_detach |
Подключают сессию отладки к debug-серверу запущенной ИБ (возвращая sessionId для остальных debug-инструментов) и отключают её, завершая сессию и освобождая базу. |
edt_debug_inspect · edt_debug_control |
Список потоков сессии и, для приостановленных, кадры стека BSL с переменными верхнего кадра (только чтение); затем управление выполнением – suspend/resume либо stepOver/stepInto/stepReturn приостановленного потока. |
edt_evaluate |
Вычисляет произвольное BSL-выражение в приостановленном кадре – исполнение кода против живой ИБ. Нужен токен и per-call allowCodeExecution=true и серверный переключатель EDT_BRIDGE_ALLOW_EVALUATE=1 (по умолчанию выключено). |
Инструменты самой обвязки
Один инструмент приходит не от моста внутри EDT: он действует НА эту EDT, а отчитаться о
процессе, который сам же завершил, инструмент внутри него не может. Его отдаёт edt-bridge-mcp –
перечисляет рядом с инструментами моста и отвечает сам, ничего не пересылая.
| Инструмент обвязки | Что делает |
|---|---|
edt_open_gui |
Передаёт воркспейс клиентской EDT: останавливает headless за мостом, дожидается, пока его процессы действительно исчезнут – порт замолкает заметно раньше, чем умирает среда, и именно этот остаток потом ищут в диспетчере задач, – и открывает окно EDT на том же воркспейсе. force снимает то, что не завершилось в срок, включая keepalive-обёртку: она родитель, и убийство дерева снизу до неё не достаёт. Мост возвращается сам, как только клиентская EDT загрузит плагин. |