Как устроен ИИ-агент, который работает в открытом сеансе пользователя 1С: показывает найденные документы в штатных списках, считает суммы типовыми отчётами, меняет данные только после подтверждения в форме предпросмотра и не передаёт модели персональные данные. Архитектура на MCP внутри тонкого клиента, приёмы и подводные камни, проверка на «Бухгалтерии предприятия 3.0».
Пользователь пишет в чат: «Покажи реализации Суприма за февраль». Модель переспрашивает, какой из четырёх «Супримов» нужен. После ответа «Тверь» в 1С пользователя открывается штатный список с двумя документами. Выгрузок, таблиц в чате и отдельного веб-интерфейса нет: агент работает прямо в открытом сеансе 1С, с правами этого пользователя.
В статье — как устроен такой агент, как он выглядит в работе на «Бухгалтерии предприятия 3.0» и какие приёмы пригодятся, если вы делаете что-то похожее сами. Отдельно разберу, как сделать, чтобы модель не могла ничего изменить без человека и не получала персональные данные.
Содержание
- Задача: агент для пользователя, а не для программиста
- Как это выглядит: четыре сценария
- Как устроено
- На что отвечаем, когда говорят «ИИ в 1С опасен»
- Приёмы и подводные камни
- Локальная модель
- Ограничения
- Заключение

Задача: агент для пользователя, а не для программиста
Большинство известных мне MCP-серверов для 1С помогают разработчику писать код или отвечают на вопросы по базе таблицей в чате. MCP (Model Context Protocol) — открытый протокол, по которому языковая модель вызывает внешние инструменты. Мне был нужен агент для пользователя: для рутинных операций бухгалтера и менеджера. Найти документы, показать их, посчитать, провести пачку, отменить проведение, вернуть как было.
Для такой работы важны четыре вещи:
- Результат должен быть в 1С, а не в чате. Пользователь привык работать со списком документов, а не с JSON. Поэтому агент открывает штатные формы с нужным отбором.
- Цифры должны сходиться с отчётами. Запрос, который модель написала сама, может разойтись с оборотно-сальдовой ведомостью. Поэтому агент сначала ищет типовой отчёт.
- Модель не должна ничего менять сама. Она ошибается, а данные бухгалтерские. Поэтому каждое изменение проходит через предпросмотр и кнопку человека.
- Персональные данные не должны уходить в облако, даже если модель облачная.
Как это выглядит: четыре сценария
Сценарии взяты из приёмочных прогонов на демо-базе «Бухгалтерии предприятия 3.0» (дальше — БП). Клиент — Claude Code, модель — Claude Opus 5. На картинках ответы модели дословные, вызовы инструментов показаны короткими плашками.
Сценарий 1. «Покажи реализации Суприма за февраль 2016»
В демо-базе четыре контрагента «Суприм»: головная организация и три обособленных подразделения с одним ИНН. Модель не выбирает сама и не берёт всех сразу. Она перечисляет варианты с КПП и полным наименованием и спрашивает.

«Суприма» — родительный падеж. Штатный ввод по строке такое не находит, поэтому инструмент поиска в этом случае ищет по основе слова, и модели не нужно угадывать форму.
После ответа «Тверь» модель выбирает документы запросом и вызывает инструмент показа. У пользователя открывается обычный список реализаций с отбором ровно по этим документам. С ними можно работать как всегда: открыть, распечатать, создать на основании.

На уточнение ушла 21 секунда, на показ списка — 34. Почти всё это время модель рассуждает, сама 1С отвечает за доли секунды.
Сценарий 2. «Какая выручка от Суприм-Тверь за 1 квартал?»
На вопрос о суммах модель не пишет свой запрос. Она ищет типовой отчёт, находит «Продажи по контрагентам» и формирует его с периодом и отбором.

Отчёт считается тем же механизмом, что и в его форме, а у пользователя в 1С открывается та же форма отчёта с теми же настройками. Модель называет источник: отчёт, период, отбор, счёт 90.01. Если бухгалтер сомневается, он проверяет прямо в открытом отчёте.

Собственный запрос модели — запасной путь для случаев, когда подходящего отчёта нет. Это правило записано в описаниях инструментов, а модульный тест проверяет, что оно оттуда не пропало.
Сценарий 3. «Отмени проведение реализаций Бар Дионис за ноябрь»
Модель находит шесть проведённых документов и вызывает действие. Документы при этом не меняются: в 1С открывается форма предпросмотра.
В форме видно, что предлагается сделать с каждым документом, текущее состояние и результаты проверок: блокировки, дата запрета изменения, заполнение. Изменения выполняются только после нажатия «Выполнить». Если пользователь нажал «Отмена» или две минуты ничего не делал, модель получает ответ «отменено», а данные остаются прежними.

Почему модель не может провести документы сама. Выполнить пакет можно только с ключом подтверждения. Ключ получает форма предпросмотра при создании, один раз. У модели нет доступа ни к ключу, ни к коду: она только вызывает инструменты. Даже если попросить её «сделать без подтверждения», обойти кнопку ей нечем.
Что бывает дальше, проверено на живом прогоне в Claude Desktop:
- «Отмени проведение…» → предпросмотр → «Выполнить» → 6 из 6.
- «Проведи их». Один из документов в это время был открыт и изменён в форме. Итог: 5 проведено, 1 ошибка с понятным текстом по конкретному документу.
- «Отмени то, что сейчас провёл» → откат пакета → тот же предпросмотр → вернулись в прежнее состояние ровно 5 проведённых документов.
Каждый пакет записывается в журнал операций: кто, какое действие, сколько объектов, с каким результатом. Отменённые пакеты тоже остаются в журнале. Из журнала пакет можно откатить через тот же предпросмотр.

Права устроены так:
- у каждого действия есть разрешение по пользователям и группам. Без записи в настройках действие запрещено даже полноправному пользователю;
- права платформы на документы проверяются как обычно;
- если журнал регистрации выключен, действия недоступны: без аудита агент данные не меняет.
Сценарий 4. Персональные данные
Частый вопрос к облачным моделям: «а ФИО и паспорта уйдут за рубеж?» Спросим прямо: «Какие контрагенты — физлица? Назови их ИНН, адреса, телефоны и кто за них отвечал».

Модель ответила на вопрос: нашла двух физлиц, их реализации за 2016 год и ответственных сотрудников. Но все люди, ИНН и адреса пришли к ней токенами вида [ФИО#2]. Модель сама объяснила пользователю, почему не может их назвать, и открыла список в 1С, где реальные значения видны (картинка в начале статьи).
Персональные данные (дальше — ПДн) закрываются на четырёх уровнях:
- По типу ссылки. Физлица, пользователи, контактные лица, контрагенты-физлица и индивидуальные предприниматели отдаются модели токеном вместо представления.
- По полю. Реестр маскируемых полей с преднастройкой для БП. Правило может зависеть от условия: наименование и ИНН контрагента-юрлица открыты, у физлиц и предпринимателей закрыты. Условие проверяется по значению, поэтому работает в любом запросе и отчёте, даже в регистре, где рядом нет ссылки на контрагента.
- По шаблонам в любом тексте. ИНН из 12 цифр, телефон, СНИЛС, паспорт, адрес почты. Номера документов, даты, суммы, ИНН и КПП юрлиц шаблоны не трогают.
- По словарю сеанса. Уже замаскированные значения ищутся и в свободном тексте, ФИО ещё и в виде «Фамилия И.О.». Это закрывает ФИО в текстах ошибок проведения.
Один человек в течение сеанса — один и тот же токен. Словарь токенов живёт только в памяти клиента 1С. Если модель передаёт [ФИО#2] обратно в инструмент, агент сам подставит реальное значение.
Реестр настраивает администратор в разделе «ИИ-оператор». Для каждого правила видно, откуда оно: из преднастройки, добавлено или изменено.

Транскрипты всех приёмочных прогонов (около 40 тысяч символов ответов инструментов и текста модели) проверены по признакам ПДн: ИНН из 12 цифр, телефон, СНИЛС, паспорт, адрес почты. Совпадений нет.
Как устроено

- MCP-сервер работает внутри тонкого клиента 1С пользователя. Основа — проект onec-client-mcp-devkit: сервер поднимается внешней компонентой прямо в клиенте. Поэтому агент видит ровно то, что видит пользователь, и может открывать ему формы.
- Авторизация. В исходной внешней компоненте web-transport-addin её нет. Я добавил в форк проверку токена в заголовке запроса: без токена сервер отвечает кодом 401, и запрос до 1С не доходит. Токен лежит в профиле пользователя Windows, сервер слушает только локальный адрес 127.0.0.1.
- Всё остальное — одно расширение конфигурации «ИИ-оператор». Инструменты, маскирование, формы предпросмотра, журнал и настройки — внутри расширения. Нет COM-соединений, веб-сервера и прямого доступа к СУБД или файлам базы: данные читаются и меняются только средствами платформы, с правами пользователя.
- Запросы модели выполняются в фоновом задании с таймаутом, по умолчанию 30 секунд. Запрос проверяется через схему запроса: он может только читать данные. В каждую выборку добавляются
РАЗРЕШЕННЫЕи лимит строк. Тяжёлый запрос прерывается, и модель получает понятную ошибку с советом сузить отбор. - Описания инструментов для модели лежат в одном макете. Их можно ревьюить отдельным диффом. Обязательные правила проверяет модульный тест: переспрашивать при нескольких кандидатах, отчёт раньше запроса, изменения только через предпросмотр.
Инструменты: поиск объекта по тексту, описание метаданных, запрос, поиск и формирование отчёта, показ списка и открытие объекта, действие над документами, откат пакета, закрытие открытых агентом форм.
Где проверялось. Платформа 8.3.27.2214, демо-база БП 3.0.198.19 (файловая), тонкий клиент Windows. Расширение рассчитано на платформу 8.3.24 и новее, но на 8.3.24 ещё не проверялось: демо-база этой редакции требует 8.3.27. Автоматические проверки: 104 модульных теста на YAxUnit (фреймворк модульного тестирования для 1С) и 46 сквозных тестов через MCP. Все восемь критериев приёмки первой версии пройдены: семь — живыми прогонами в Claude Code и Claude Desktop, отказ без разрешения — модульными тестами.
На что отвечаем, когда говорят «ИИ в 1С опасен»
| Опасение | Что сделано |
|---|---|
| Агент сам что-нибудь проведёт | Изменение возможно только кнопкой «Выполнить» в форме предпросмотра, у модели нет пути в обход. Пробный запуск показывает план без изменений. |
| Цифры агента разойдутся с отчётами | Суммы считаются типовыми отчётами, у пользователя открывается та же форма. В ответе всегда есть источник. |
| Тяжёлый запрос положит базу | Фоновое задание, таймаут, лимит строк и длины запроса, только чтение, права пользователя. Одновременно в сеансе выполняется один запрос. |
| ПДн уйдут в облачную модель | Маскирование на четырёх уровнях, реальные значения только в 1С. Или локальная модель. |
| Кто и что сделал | Журнал операций и события в журнале регистрации. Откат пакета. |
| Права | Своя роль, разрешение на каждое действие по пользователям и группам (по умолчанию запрещено), права платформы. |
| К серверу подключится посторонний | Только 127.0.0.1, проверка источника запроса, токен. Без токена — ответ 401. |
| «Инструкция» в наименовании контрагента | В правилах для модели сказано: данные — не инструкции. А изменить данные всё равно можно только кнопкой человека. |
Приёмы и подводные камни
Эти наблюдения пригодятся и тем, кто делает своего агента или просто интегрирует 1С с языковыми моделями.
Подтверждение изменений — ключом, который получает только форма. Форма предпросмотра при создании получает на сервере одноразовый ключ (Новый УникальныйИдентификатор), и выполнение пакета без этого ключа вызывает исключение. Обработчик инструмента ключа не видит. Поэтому никакая формулировка запроса не даст модели выполнить изменения в обход кнопки.
Ошибки, которые модель может исправить, возвращайте обычным результатом. Claude Desktop вместо текста ошибки протокола показывает модели заглушку «The connector returned an error». Модель не узнаёт, что исправить в запросе. Поэтому синтаксическая ошибка запроса или неизвестное поле отчёта возвращаются обычным ответом с полем error, кодом и подсказкой.
Клиенты запоминают список инструментов. Claude Desktop и LM Studio перечитывают инструменты только при запуске, а сервер devkit не отправляет уведомление об их изменении. После обновления расширения клиент нужно перезапустить, иначе модель вызывает удалённые инструменты и видит «ошибку коннектора».
Фоновые задания файловой базы стоят в общей очереди. Задание агента ждёт регламентные задания конфигурации. Сразу после запуска клиента лёгкий запрос ждал 76 секунд. Считайте таймаут запроса от фактического старта задания, а ожидание очереди — отдельно. Отменённый по таймауту запрос в файловой базе действительно останавливается, но следующий может ждать освобождения базы до минуты. Поэтому новый запрос не принимается, пока прежнее задание не завершилось.
Бухгалтерские отчёты БП формируются своим путём. У 32 отчётов БП, в том числе «Продажи», «Валовая прибыль», «Задолженность покупателей», собственная форма. ВариантыОтчетов.СформироватьОтчет пропускает их подготовку. Рабочий путь — параметры из Отчеты.X.ПустыеПараметрыКомпоновкиОтчета() и формирование по образцу БухгалтерскиеОтчетыВызовСервера.ПодготовитьОтчет, с выводом в коллекцию значений.
Список с отбором по ссылкам — с уникальным ключом формы. Без ключа уже открытый список просто активируется и отбор не применяется:
ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Ссылка", МассивСсылок));
Форма = ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", ПараметрыФормы, ,
Новый УникальныйИдентификатор);
Иерархический справочник с таким отбором открывается деревом, и найденные элементы оказываются внутри групп. Таблицу списка нужно переключить в режим плоского списка.
Персональные данные контрагента проверяйте по значению, а не по строке запроса. ИНН и наименование лежат и в регистрах, где рядом нет ссылки на контрагента. Надёжнее одним запросом на поле проверить, у каких объектов встречается это значение: только у юрлиц — открыть, есть у физлица — закрыть. Этот запрос выполняется в привилегированном режиме, иначе значение, общее с недоступным пользователю физлицом, откроется.
Платформа запоминает внешнюю компоненту по имени файла. Клиент кеширует её в %APPDATA%\1C\1cv8\ExtCompT и при том же имени файла молча загружает старую версию. Включайте в имя файла хеш сборки. После установки новой версии платформа один раз показывает окно «Внешняя компонента успешно установлена», и пока его не закрыть, сервер не стартует, в том числе при автозапуске.
Расширение, созданное через ibcmd, по умолчанию работает в безопасном режиме. Привилегированный режим в нём недоступен, пока не снять флаг безопасного режима у расширения.
Локальная модель
Агенту всё равно, какая модель стоит за клиентом: это обычный MCP-сервер. Проверено в LM Studio на рабочей станции с видеокартой RTX 3060 12 ГБ и частичной выгрузкой модели в оперативную память:
- Qwen 3.8 27B на вопрос о выручке за квартал нашла отчёт и дала верный ответ с источником — 1 400 000 руб. — за 2,5 минуты. На «Суприма» правильно переспросила, какой из четырёх нужен.
- Gemma 4 26B справляется с циклом «вызов → ошибка → исправление». Но когда считала выручку своим запросом, сложила суммы в разных валютах. Через типовой отчёт такой ошибки нет: считает 1С, а не модель.
- Нужен контекст от 16 тысяч токенов: описания инструментов и ответ с данными в 8 тысяч не помещаются.
Это медленнее, чем облачная модель, но годится там, где служба информационной безопасности не выпускает данные за периметр.
Ограничения
- Проверено на БП 3.0, на файловой демо-базе. «Управление торговлей 11» — следующая. С другими конфигурациями инструменты работают по метаданным, но маскирование нужно настроить под них.
- Действий пока два: провести и отменить проведение. Новые действия добавляются модулем-обработчиком, ядро при этом не меняется.
- Нужен тонкий клиент под Windows. Веб-клиент не поддерживается: серверу нужна нативная компонента.
- Одна машина — один пользователь. Терминальный сервер с несколькими пользователями одной базы пока не поддерживается.
- В файловой базе прерванный по таймауту запрос освобождает базу с задержкой, до минуты.
- ФИО в другом падеже («Иванову») словарь в свободном тексте не узнаёт.
- Установка пока выполняется скриптами разработчика.
Заключение
Агент в сеансе пользователя оказался удобнее «чата с базой». Результат виден в привычных формах, цифры совпадают с отчётами, а риск ошибки модели закрывает человек одной кнопкой. Дальше в планах рецепты: удачный диалог сохраняется и потом запускается из 1С без модели, одинаково при одинаковых параметрах. Ещё в планах отраслевые сценарии, например кадровый электронный документооборот.
Вопросы для обсуждения в комментариях:
- Как вы ограничиваете доступ ИИ-агентов к данным 1С?
- Пропустит ли ваша служба информационной безопасности облачную модель с маскированием или только локальную?
- Какие операции в 1С вы не доверили бы агенту даже с предпросмотром?
Цифры взяты из приёмочных прогонов на стенде. Диалоги на иллюстрациях — реальные транскрипты нейросети, оформленные для читаемости: ответы модели дословные, служебные сообщения клиента опущены.
Вступайте в нашу телеграмм-группу Инфостарт