77vscode — 1С:Предприятие 7.7 в VS Code
Расширение показывает конфигурацию 1С 7.7 (1Cv7.MD) и внешние обработки (*.ert). Данные берутся с сервера 77MCP-go (соседний каталог ../77MCP-go) через его REST API /api/v1, описание API — в 77MCP-go/internal/infra/httpserver/api_v1.md. Само расширение файлы 1С не читает.
Возможности
Панель «1С 7.7» на боковой панели слева:
- Конфигурация — глобальный модуль и объекты по видам (справочники, документы, журналы, перечисления, отчёты, обработки, регистры и т.д.). Под объектом его модули (форма элемента, формы списка и группы, модуль проведения, формы журнала), под модулем его процедуры, ниже реквизиты, табличные части, измерения и ресурсы. Фильтр по имени или синониму, поиск объекта.
- Внешние обработки — файлы
.ert, сгруппированные по каталогам. Обработки из --edit-path помечены ✎.
- Классы 1С++ — классы из
Defcls.prm (сервер запущен с --basepath), сгруппированные по каталогам модулей. Под классом его базовые классы (клик открывает модуль базового) и процедуры модуля. Модули классов только для чтения; класс без найденного модуля помечен предупреждением с причиной.
- Результаты поиска — поиск подстроки во всех модулях.
Модули открываются обычными вкладками через виртуальную ФС v77:. Модули конфигурации и обработки вне --edit-path доступны только для чтения. Модули обработок в --edit-path сохраняются на сервер (Ctrl+S).
Защита от потери правок. Если модуль изменили где-то ещё, например в Конфигураторе, VS Code покажет свой диалог конфликта («Сравнить» / «Перезаписать»). Сервер дополнительно проверяет версию модуля и не даст перезаписать чужую правку.
Язык 1С 7.7:
- подсветка синтаксиса и сворачивание процедур;
- структура модуля: Outline, хлебные крошки,
Ctrl+Shift+O;
Ctrl+T — поиск процедуры по всем модулям конфигурации и обработок;
F12 — переход к процедуре: сначала в текущем модуле, потом в глобальном, потом к экспортным процедурам других модулей. На Справочник.Имя, Документ.Имя и подобных — переход к свойствам объекта;
Ctrl+Alt+P — «Найти процедуру».
Макеты (печатные формы) объектов конфигурации и обработок показаны в дереве под модулем или обработкой. Открываются только для просмотра: ячейки по ширинам и высотам, объединения, именованные секции слева, выражения синим курсивом, шаблоны зелёным. Если у модуля несколько макетов, между ними переключаются в панели инструментов. Картинки и линии в макете не показываются. Около 4% макетов сервер не разбирает, вместо них показывается ошибка.
Подсказки к функциям и параметрам. Подсказка параметров появляется на ( и , (или по Ctrl+Shift+Space) и подсвечивает текущий параметр. Подсказка при наведении показывает сигнатуру, описание, параметры и откуда они взяты. Где искать:
Имя(…) — текущий модуль (с несохранёнными правками), затем глобальный модуль, затем системные функции из справки .als;
Объект.Метод(…), если в модуле есть Объект = СоздатьОбъект("Класс"): методы класса 1С++ и его базовых классов из Defcls.prm, а для системных объектов (ТаблицаЗначений и т.п.) — методы этого объекта из .als;
- прочие
Объект.Метод(…) — справка .als, методы классов 1С++ и экспортные процедуры модулей.
Описание процедуры берётся из блока комментариев // над заголовком, а если его нет — из комментариев в начале тела. Строки вида Имя - описание (и <Имя>: …, Имя (Тип) — …) становятся описаниями параметров. F12 на Объект.Метод открывает модуль класса. Классы 1С++ видны, если сервер запущен с --basepath; справка .als — если с --als-path.
MCP для чата VS Code. Активный сервер автоматически предлагается чату как MCP-сервер (<url>/sse), отдельная запись в mcp.json не нужна. Отключается настройкой v77.registerMcpServer. Нужен VS Code 1.101 или новее.
Свойства объекта открываются Markdown-страницей: модули, реквизиты с типами, формы, свойства.
Форма открывается кнопкой у модуля формы в дереве, у обработки или в заголовке редактора модуля. Элементы рисуются по своим координатам, слои можно скрывать, есть масштаб и панель свойств. Таблица формы списка показывается с колонками. Двойной клик по элементу или кнопка «Перейти к обработчику» открывает процедуру из его формулы, например Печать().
Правка формы обработки из --edit-path. Элементы можно перетаскивать мышью, менять размер за угол, двигать стрелками (с Shift — по 5), удалять клавишей Delete, добавлять из списка «Добавить элемент», а заголовок, координаты, реквизит, формулу и подсказки менять в панели свойств. Каждая правка сразу пишется на сервер с проверкой версии. Если форму изменили где-то ещё, правка отклоняется и форма перечитывается.
Настройка
- Запустите сервер, например так:
77mcp-server --basepath <каталог ИБ> --edit-path <каталог для правки .ert> --api-token <токен>.
Без --api-token расширение работает только на чтение.
- В настройках задайте
v77.servers — список {name, url}, например {"name": "local", "url": "http://localhost:8099"}, и выберите активный профиль в v77.activeServer. То же можно сделать командами «1С 7.7: Выбрать сервер» и «1С 7.7: Добавить сервер», или кликом по строке состояния.
- Токен задаётся командой «1С 7.7: Задать токен». Он хранится в защищённом хранилище VS Code (SecretStorage), а не в
settings.json.
Прочие настройки: v77.requestTimeout — таймаут запроса в мс, v77.codeSearchLimit — максимум совпадений при поиске.
Разработка
npm install
npm run build # dist/extension.js
npm run typecheck
npm test # vitest: пути, разбор модулей, клиент API, страница объекта
npm run package # .vsix
Отладка — F5 («Запустить расширение»).
Интеграционный тест запускает изолированный VS Code без экрана (через xvfb-run) против живого сервера:
77mcp-server --basepath ../work --edit-path /tmp/edit --api-token t --port 18099 # в /tmp/edit лежит Проба.ert
V77_TEST_URL=http://localhost:18099 V77_TEST_TOKEN=t V77_TEST_ERT=Проба \
VSCODE_BIN=/usr/share/code/code npm run test:integration
VSCODE_BIN нужен, если code — обёртка-скрипт, которая отцепляется от процесса. С V77_TEST_SHOTS=<каталог> тест сохраняет скриншоты открытых форм; для этого нужен ImageMagick import. Под xvfb раннер убирает WAYLAND_DISPLAY, иначе окно открылось бы на вашем рабочем столе.
Разбор процедур в src/bsl.ts (Outline по несохранённому тексту) повторяет 77MCP-go/internal/parser/bsl. Меняя один, меняйте и другой. Сейчас на рабочей базе (2076 модулей) они дают одинаковый результат.
| |