Справочник8 сентября 2026 г.·обновлено 8 сентября 2026 г.

ИИ-агент для 1С: как связать модель с учётной системой

Три слоя связки: чем 1С отдаёт данные наружу, как из этого делают именованные операции для модели и почему запись всегда идёт через расширение с ключом идемпотентности.

Что это решает

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

Как устроено

Связка распадается на три слоя, и путаница между ними — источник большинства провальных внедрений.

Слой доступа к данным

1С не отдаёт данные модели напрямую. Наружу торчит один из штатных механизмов.

МеханизмЧто умеетГде жмёт
Стандартный интерфейс ODataчтение и запись объектов: справочники, документы, регистры сведенийне отдаёт виртуальные таблицы регистров (остатки, обороты), тяжёлые выборки медленные
HTTP-сервис в расширениилюбой запрос на встроенном языке, включая остатки и обороты, плюс своя бизнес-логиканужно писать и сопровождать код
Web-сервис (SOAP)то же, что HTTP-сервис, с формальным описанием контрактамногословный формат, лишний разбор XML
Внешнее соединение (COM)полный доступ к прикладным объектамтолько Windows, сеансы и состояние плохо переживают работу сервисом
Репликация в аналитическую базупроизвольные быстрые SQL-срезы без нагрузки на рабочую базуданные с задержкой, запись невозможна

Прямые запросы к таблицам рабочей базы 1С в этот список не входят. Имена таблиц служебные, итоги регистров пересчитывает платформа, блокировки свои — вмешательство извне ломает данные тихо и надолго. Если очень хочется SQL, делают выгрузку в отдельную базу и работают с ней.

Слой инструментов

Модель не ходит по URL наугад. Ей дают набор именованных операций с описанием и параметрами: долг_контрагента(инн, на_дату), неоплаченные_счета(период), создать_счёт(контрагент, позиции, комментарий). Технически это функции tool-calling или MCP-сервер, внутри — те самые запросы к OData и вызовы HTTP-сервиса. Каждая операция закрывает один вопрос бизнеса целиком и возвращает готовые цифры, а не сырую таблицу на разбор модели.

Слой правил

Чтение открыто, запись — по списку. Каждая пишущая операция принимает ключ идемпотентности и создаёт документ непроведённым. Повторный вызов с тем же ключом возвращает уже созданный документ вместо второго такого же.

Порядок работы: вопрос → модель выбирает операцию → прослойка выполняет запрос под служебным пользователем → результат возвращается в контекст → модель отвечает либо делает следующий шаг. Всё, что агент сделал, остаётся в журнале регистрации под именем этого пользователя.

Как подключить

1. Опубликовать базу на веб-сервере. Конфигуратор → Администрирование → Публикация на веб-сервере. Отметить «Публиковать стандартный интерфейс OData» и, если планируются свои методы, публикацию HTTP-сервисов. В каталоге публикации появляется default.vrd — там же видно имя базы, которое попадёт в URL.

2. Открыть нужные объекты в OData. Стандартный интерфейс отдаёт только то, что явно включено в состав: Конфигуратор → Администрирование → Настройка состава стандартного интерфейса OData. Пустой состав — пустой ответ, и это первая причина «ничего не работает». Отмечать точечно, не «выбрать всё»: состав определяет площадь доступа.

3. Завести служебного пользователя. Отдельный пользователь с аутентификацией 1С:Предприятия, отдельная роль, права только на объекты из пункта 2. Права администратора здесь не нужны. Ограничения на уровне записей настраиваются той же ролью.

4. Проверить доступ снаружи.

curl -u 'ai_agent:PASSWORD' 'http://1c.local/base/odata/standard.odata/$metadata?$format=json'

Описание сущностей в ответе означает, что публикация и права в порядке. Пустой список — возврат к шагу 2. Ответ 401 — к шагу 3.

5. Снять первую выборку.

curl -u 'ai_agent:PASSWORD' 'http://1c.local/base/odata/standard.odata/Document_СчетНаОплатуПокупателю?$format=json&$top=5&$select=Number,Date,СуммаДокумента,Проведен'

$select обязателен на боевых объёмах: без него платформа отдаёт все реквизиты вместе с табличными частями. $top тоже, иначе первый запрос по документам вытянет всю историю. Отбор по периоду пишется как $filter=Date gt datetime'2026-01-01T00:00:00', пробелы в URL кодируются.

6. Добавить расширение для того, что OData не умеет. Остатки, обороты, расчёты по регистрам накопления — HTTP-сервис в расширении конфигурации: один метод равен одной операции, внутри запрос к виртуальной таблице, наружу JSON. Расширение вместо правки конфигурации, чтобы типовая осталась на поддержке и обновлялась штатно.

7. Обернуть операции в инструменты. Каждая функция получает описание для модели: что возвращает, какие параметры обязательны, что делать при ошибке. Текст ошибки пишется тоже для модели — «контрагент по ИНН не найден, уточните наименование» работает, «Ошибка 500» не работает.

8. Развести чтение и запись. Читающие операции выполняются свободно. Пишущие — только через подтверждение человеком, с ключом идемпотентности, без автопроведения.

Полезные сценарии

  • Дебиторка по конкретному контрагенту с расшифровкой по счетам, датам и частичным оплатам.
  • Сверка банковской выписки с проведёнными оплатами и список расхождений на разбор.
  • Черновик счёта или заказа по письму клиента с подстановкой реквизитов из справочника.
  • Поиск дублей контрагентов и номенклатуры по нечёткому совпадению — то, что плохо ловится штатным поиском.
  • Утренняя сводка в мессенджер: остатки на счетах, просроченные оплаты, документы, зависшие без проведения.
  • Раскладка прайсов поставщиков по группам номенклатуры при загрузке.
  • Расшифровка цифры в отчёте: агент находит документы, из которых она сложилась, и объясняет состав.

Ограничения

Сеансы и лицензии. Каждое соединение по OData или HTTP-сервису поднимает сеанс, а сеансы упираются в схему лицензирования конкретной установки. Агент, дёргающий базу в цикле, конкурирует за них с людьми, поэтому пул соединений и ограничение частоты обязательны.

Скорость. OData на документах с табличными частями медленный, а модель склонна запросить всё и фильтровать потом. Лечится тем, что фильтрация зашита внутрь операции и модели недоступна.

Аналитика по регистрам. Через стандартный интерфейс остатки и обороты не получить. Попытка посчитать остаток сложением документов даёт неверные числа на любой нетривиальной схеме учёта — резервы, партии, характеристики, склады.

Запись. Проведение затрагивает движения по регистрам, взаиморасчёты и закрытый период. Проведение по решению модели — прямой путь к разбору полётов в закрытом квартале.

Персональные данные. Справочники контрагентов и физлиц содержат ПД, и они уезжают в контекст модели вместе с ответом. Либо провайдер и режим обработки согласованы с политикой компании, либо поля маскируются на уровне операции.

Типовые на поддержке. Вся логика живёт в расширении. Правка конфигурации ради агента удорожает каждое последующее обновление.

Как проверить результат

Начать с метаданных: $metadata отвечает, состав непустой, в нём ровно те объекты, которые открывали. Лишние объекты в составе — тоже дефект, их убирают.

Взять три вопроса с заранее известным ответом и сверить с 1С руками: остаток по одному складу на дату, долг одного контрагента, сумма одного документа. Расхождение на копейку обычно про округление и валюту, расхождение в разы — про то, что агент сложил документы вместо запроса к регистру.

Прогнать пишущую операцию дважды с одним ключом идемпотентности. Второй вызов обязан вернуть тот же документ, а не создать новый. Заодно проверить, что документ создан непроведённым.

Открыть журнал регистрации и отфильтровать по служебному пользователю: видно каждый доступ, время и объект. Густой однообразный поток означает, что операция дёргает базу в цикле и её надо переписать одним запросом.

Проверить отказ: спросить данные по объекту, которого нет в составе OData. Правильное поведение — внятное сообщение о недоступности, а не правдоподобный выдуманный ответ.

Правило одной строкой: читать из 1С можно чем угодно, писать — только именованной операцией в расширении, с ключом идемпотентности и без автопроведения.

  • интеграции
  • OData
  • учётные системы