🚀 Пошаговое руководство: как настроить AI-агента, который сам забирает счета из почты, распознаёт, проверяет и записывает в 1С.
А главное — как 1С принимает данные: через HTTP-сервисы или напрямую в SQL. Разбираем оба подхода с кодом.
🏗️ Архитектура AI-агента на MCP
Вся система строится вокруг MCP-сервера — универсального шлюза между нейросетью и вашими системами. Нейросеть не знает, как работать с 1С или OCR, она просто вызывает нужный инструмент через MCP.
📬 Почта (inbox@company.ru)
↓
🐍 Агент-парсер (скачивает вложения)
↓
🧠 Нейросеть-оркестратор (GigaChat / Claude) — решает, что делать
↓
🔌 MCP-сервер — единый шлюз ко всем системам
├── 🔧 Tool: ocr_paddle() — распознаёт скан
├── 🔧 Tool: nlp_gigachat() — извлекает данные
├── 🔧 Tool: check_inn() — проверяет ИНН
├── 🔧 Tool: search_1c() — ищет дубли
├── 🔧 Tool: save_1c() — сохраняет в 1С
└── 🔧 Tool: send_email() — пишет контрагенту
↓
🖥️ Оператор подтверждает (если нужно)
🔍 Как 1С на самом деле принимает данные
Это ключевой вопрос. 1С — это не просто база данных, это целая экосистема с бизнес-логикой, регистрами, документами и правами доступа. Есть два принципиально разных подхода:
🌐 Через HTTP-сервисы (REST / SOAP)
✅ Рекомендуемый
- 1С публикует веб-сервис с методами
- Внешняя система отправляет JSON / XML
- 1С сама валидирует, проводит, пишет в регистры
- Соблюдается бизнес-логика
- Безопасно, контролируемо
🗄️ Напрямую в SQL-таблицы
⛔ Опасно!
- Пишете INSERT / UPDATE напрямую в базу 1С
- Обходите бизнес-логику
- Нарушаете целостность данных
- Можно сломать 1С
- Потеря поддержки и обновлений
⚠️ Важное предупреждение: Никогда не пишите напрямую в SQL-таблицы 1С! Это приведёт к нарушению ссылочной целостности, ошибкам в отчётах и потере поддержки. 1С — это не просто таблицы, это сложная логика на встроенном языке. Всегда используйте HTTP-сервисы.
🌐 HTTP-сервис в 1С: как это устроено
В 1С есть механизм HTTP-сервисов (начиная с платформы 8.3.10). Вы описываете URL-шаблоны, методы (GET/POST) и привязываете к ним обработчики на встроенном языке.
Процедура ОбработкаЗапроса(Запрос, Ответ) Экспорт
Если Запрос.Метод <> "POST" Тогда
Ответ.УстановитьКодСостояния(405);
Возврат;
КонецЕсли;
ТелоЗапроса = Запрос.ПолучитьТело();
СтрокаJSON = ТелоЗапроса.Прочитать();
Данные = ЧтениеJSON(СтрокаJSON);
Если Не Данные.Свойство("number") ИЛИ Не Данные.Свойство("inn") Тогда
Ответ.УстановитьКодСостояния(400);
Ответ.УстановитьТелоКакСтроку("Не хватает полей: number, inn");
Возврат;
КонецЕсли;
Счет = Документы.СчетФактура.СоздатьДокумент();
Счет.Номер = Данные.number;
Счет.Дата = Данные.date;
Счет.Контрагент = НайтиКонтрагентаПоИНН(Данные.inn);
Счет.Сумма = Данные.sum;
Счет.НДС = Данные.vat;
Если НайтиДубликат(Счет.Номер, Счет.Контрагент) Тогда
Ответ.УстановитьКодСостояния(409);
Ответ.УстановитьТелоКакСтроку("Документ с таким номером уже существует");
Возврат;
КонецЕсли;
Счет.Записать(РежимЗаписиДокумента.Проведение);
Ответ.УстановитьКодСостояния(201);
Ответ.УстановитьТелоКакСтроку(
"{""status"": ""saved"", ""id"": " + Строка(Счет.Ссылка.УникальныйИдентификатор()) + "}"
);
КонецПроцедуры
🔧 Как опубликовать HTTP-сервис в 1С
Чтобы внешняя система (наш MCP-сервер) могла вызывать этот обработчик, нужно:
- Создать HTTP-сервис в конфигураторе: раздел «Общие» → «HTTP-сервисы».
- Описать шаблон URL: например,
/invoice/save.
- Привязать метод POST к процедуре
ОбработкаЗапроса.
- Опубликовать через веб-сервер (IIS / Apache) или встроенный веб-сервер 1С.
- В итоге ваш MCP-сервер обращается по адресу:
http://192.168.1.100:8080/1c/invoice/save
🧩 Где живёт бизнес-логика: Вся логика (проведение, расчёты, движение по регистрам) находится внутри 1С. MCP-сервер только передаёт сырые данные. Это правильно и безопасно.
🔌 Полный код MCP-сервера
Это сервер на Python, который регистрирует все инструменты (Tools) и слушает запросы от нейросети.
import asyncio, json, requests, re
from mcp import Server
import pdfplumber, paddleocr
server = Server("document-processor")
@server.tool()
async def ocr_paddle(file_path: str) -> str:
ocr = paddleocr.PaddleOCR(use_angle_cls=True, lang='ru')
result = ocr.ocr(file_path, cls=True)
text = ""
for line in result:
for word_info in line:
text += word_info[1][0] + " "
return text
@server.tool()
async def nlp_gigachat(text: str) -> dict:
prompt = f"""Извлеки из текста счета-фактуры:
номер, дата (ГГГГ-ММ-ДД), ИНН поставщика, название, сумма, НДС.
Текст: {text[:3000]}
Ответ дай в формате JSON."""
resp = requests.post("https://gigachat.ru/api/v1/completions",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={"prompt": prompt, "max_tokens": 500})
return resp.json()
@server.tool()
async def check_inn(inn: str) -> bool:
if not inn or not inn.isdigit():
return False
if len(inn) == 10:
coeffs = [2, 4, 10, 3, 5, 9, 4, 6, 8]
control = sum(int(inn[i]) * coeffs[i] for i in range(9)) % 11
return control == int(inn[9]) or (control == 10 and int(inn[9]) == 0)
elif len(inn) == 12:
return True
return False
@server.tool()
async def search_1c(doc_number: str, inn: str) -> dict:
resp = requests.get(
f"http://192.168.1.100:8080/1c/invoice/search?number={doc_number}&inn={inn}"
)
return resp.json()
@server.tool()
async def save_1c(data: dict) -> dict:
url = "http://192.168.1.100:8080/1c/invoice/save"
headers = {"Content-Type": "application/json"}
resp = requests.post(url, json=data, headers=headers)
if resp.status_code == 201:
return resp.json()
else:
return {"status": "error", "message": resp.text}
@server.tool()
async def send_email(to: str, subject: str, body: str) -> dict:
return {"status": "sent"}
if __name__ == "__main__":
server.run()
🧠 Нейросеть-оркестратор
Нейросети передаётся промпт, в котором описаны все доступные инструменты и логика принятия решений. Она сама выбирает, что вызывать и в каком порядке.
prompt = """
Ты — AI-агент по обработке входящих счетов-фактур.
Доступные инструменты (Tools) через MCP:
1. ocr_paddle(file_path) — распознаёт скан
2. nlp_gigachat(text) — извлекает данные
3. check_inn(inn) — проверяет ИНН
4. search_1c(doc_number, inn) — ищет дубли в 1С
5. save_1c(data) — сохраняет в 1С
6. send_email(to, subject, body) — отправляет письмо
Алгоритм:
- Определи тип файла (скан / текстовый PDF)
- Если скан → вызови ocr_paddle()
- Если текстовый PDF → прочитай напрямую через pdfplumber
- После получения текста → вызови nlp_gigachat()
- Проверь ИНН через check_inn()
- Если ИНН не прошёл → send_email() контрагенту с просьбой переслать
- Если ИНН прошёл → search_1c() на дубли
- Если дубли найдены → уведоми менеджера (Telegram / email)
- Если дублей нет → save_1c()
- Верни пользователю результат с меткой доверия
Входящий документ: {file_path}
"""
🏷️ Метки доверия
Нейросеть на основе анализа присваивает документу метку доверия, которая определяет дальнейшие действия:
🟢 Высокое
Текстовый PDF, ИНН ✅, дублей нет
→ Автосохранение
🟡 Среднее
Скан (DPI > 150), ИНН ✅
→ Показать оператору
🔴 Низкое
Скан (DPI < 150), ИНН ❌
→ Отправить на перескан
🚀 Пошаговый сценарий работы
1 📬 Письмо
→
2 🐍 Парсер
→
3 🧠 Решение
→
4 🔧 OCR
→
5 🔧 NLP
→
6 🔧 Проверка
→
7 🔧 1С
→
8 ✅ Готово
1. 📬 Приходит письмо
Агент-парсер скачивает вложение и передаёт файл нейросети.
2. 🧠 Нейросеть анализирует
Определяет тип документа: скан или текстовый PDF.
3. 🔧 OCR (если нужно)
Вызывает ocr_paddle() через MCP, получает текст.
4. 🔧 Извлечение данных
Вызывает nlp_gigachat() → номер, дата, ИНН, сумма.
5. 🔧 Проверка ИНН
Вызывает check_inn(). Если не прошёл → письмо контрагенту.
6. 🔧 Поиск в 1С
Вызывает search_1c() через HTTP-сервис 1С.
7. 💾 Сохранение
Вызывает save_1c() → POST-запрос в 1С, документ проведён.
8. ✅ Готово
Оператор получает уведомление и нажимает «Подтвердить».
📊 Сравнение: HTTP-сервис vs Прямой SQL
| Критерий | 🌐 HTTP-сервис 1С | 🗄️ Прямой SQL |
| Безопасность | ✅ Высокая | ⛔ Очень низкая |
| Бизнес-логика | ✅ Соблюдается | ⛔ Обходится |
| Целостность данных | ✅ Гарантирована | ⛔ Нарушается |
| Поддержка 1С | ✅ Сохраняется | ⛔ Потеря |
| Скорость | 🟡 Средняя | 🟢 Высокая |
| Сложность реализации | 🟡 Средняя | 🔴 Сложная (риск сломать) |
💰 Стоимость внедрения
💻 Разработка
- MCP-сервер: 50–100 ч
- HTTP-сервис в 1С: 20–40 ч
- Интеграция и тесты: 30–50 ч
- Итого: 200–400 тыс. руб
☁️ Эксплуатация
- Сервер с GPU: 15–20 тыс./мес
- GigaChat API: ~200 руб/1000
- Поддержка: 30–50 тыс./мес
💡 Окупаемость
4–6 месяцев
при 1000 документов/мес и экономии 2 операторов
📝 Чек-лист внедрения
- Оцените объём документов и вариативность форматов.
- Выберите нейросеть-оркестратор (GigaChat, Claude, ChatGPT).
- Разработайте HTTP-сервис в 1С (методы: поиск, сохранение).
- Напишите MCP-сервер: опишите все Tools.
- Подключите интеграции: почта, 1С, Telegram для уведомлений.
- Создайте промпт для нейросети с полной логикой.
- Протестируйте на 10–20 реальных документах.
- Настройте метки доверия и пороги автосохранения.
- Запустите пилот на 2 недели, соберите статистику.
- Масштабируйте на все входящие счета.
💬 Вывод: стоит ли внедрять?
✅ Да, если:
- > 1000 документов в месяц
- Документы приходят в разных форматах
- Есть бюджет на разработку (300–500 тыс. руб)
- Вы готовы к внедрению HTTP-сервисов в 1С
🤔 Начните без MCP, если:
- < 500 документов в месяц
- Все счета однотипные (жёсткий формат)
- Нет ресурсов на разработку MCP
🚀 Совет: Начните с простого конвейера (без MCP), а когда процесс отработаете — переходите на MCP для гибкости и масштабируемости.
🔗 Полезные ссылки
- MCP Python SDK — github.com/modelcontextprotocol/python-sdk
- GigaChat API — gigachat.ru — для извлечения данных
- PaddleOCR — github.com/PaddlePaddle/PaddleOCR
- 1С HTTP-сервисы — документация на сайте 1С
Комментарии
Пока нет комментариев. Будьте первым!