↩️ Назад

Категории

Полная автоматизация сбора счетов-фактур и др - от почты до 1С с ИИ и MCP

02.07.2026 | Статья из категории: Нейросети

🚀 Пошаговое руководство: как настроить 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) и привязываете к ним обработчики на встроенном языке.

// 1С: Модуль HTTP-сервиса "InvoiceService"

Процедура ОбработкаЗапроса(Запрос, Ответ) Экспорт

    // 1. Проверяем, что это POST-запрос
    Если Запрос.Метод <> "POST" Тогда
        Ответ.УстановитьКодСостояния(405); // Method Not Allowed
        Возврат;
    КонецЕсли;

    // 2. Читаем тело запроса (JSON)
    ТелоЗапроса = Запрос.ПолучитьТело();
    СтрокаJSON = ТелоЗапроса.Прочитать();
    // Парсим JSON в структуру
    Данные = ЧтениеJSON(СтрокаJSON);

    // 3. Валидация обязательных полей
    Если Не Данные.Свойство("number") ИЛИ Не Данные.Свойство("inn") Тогда
        Ответ.УстановитьКодСостояния(400); // Bad Request
        Ответ.УстановитьТелоКакСтроку("Не хватает полей: number, inn");
        Возврат;
    КонецЕсли;

    // 4. Создаём документ "Счет-фактура"
    Счет = Документы.СчетФактура.СоздатьДокумент();
    Счет.Номер = Данные.number;
    Счет.Дата = Данные.date;
    Счет.Контрагент = НайтиКонтрагентаПоИНН(Данные.inn);
    Счет.Сумма = Данные.sum;
    Счет.НДС = Данные.vat;

    // 5. Проверка на дубли
    Если НайтиДубликат(Счет.Номер, Счет.Контрагент) Тогда
        Ответ.УстановитьКодСостояния(409); // Conflict
        Ответ.УстановитьТелоКакСтроку("Документ с таким номером уже существует");
        Возврат;
    КонецЕсли;

    // 6. Записываем документ (проводим)
    Счет.Записать(РежимЗаписиДокумента.Проведение);

    // 7. Формируем ответ
    Ответ.УстановитьКодСостояния(201); // Created
    Ответ.УстановитьТелоКакСтроку(
        "{""status"": ""saved"", ""id"": " + Строка(Счет.Ссылка.УникальныйИдентификатор()) + "}"
    );

КонецПроцедуры

🔧 Как опубликовать HTTP-сервис в 1С

Чтобы внешняя система (наш MCP-сервер) могла вызывать этот обработчик, нужно:

  1. Создать HTTP-сервис в конфигураторе: раздел «Общие» → «HTTP-сервисы».
  2. Описать шаблон URL: например, /invoice/save.
  3. Привязать метод POST к процедуре ОбработкаЗапроса.
  4. Опубликовать через веб-сервер (IIS / Apache) или встроенный веб-сервер 1С.
  5. В итоге ваш MCP-сервер обращается по адресу: http://192.168.1.100:8080/1c/invoice/save
🧩 Где живёт бизнес-логика: Вся логика (проведение, расчёты, движение по регистрам) находится внутри 1С. MCP-сервер только передаёт сырые данные. Это правильно и безопасно.

🔌 Полный код MCP-сервера

Это сервер на Python, который регистрирует все инструменты (Tools) и слушает запросы от нейросети.

# mcp_server.py
import asyncio, json, requests, re
from mcp import Server
import pdfplumber, paddleocr

server = Server("document-processor")

# ====== TOOL 1: OCR ======
@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

# ====== TOOL 2: NLP через GigaChat ======
@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()

# ====== TOOL 3: Проверка ИНН ======
@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:
        # Аналогично для 12-значного ИНН
        return True
    return False

# ====== TOOL 4: Поиск в 1С ======
@server.tool()
async def search_1c(doc_number: str, inn: str) -> dict:
    # Вызываем HTTP-сервис 1С для поиска
    resp = requests.get(
        f"http://192.168.1.100:8080/1c/invoice/search?number={doc_number}&inn={inn}"
    )
    return resp.json()

# ====== TOOL 5: Сохранение в 1С ======
@server.tool()
async def save_1c(data: dict) -> dict:
    # Отправляем POST в 1С
    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}

# ====== TOOL 6: Отправка письма ======
@server.tool()
async def send_email(to: str, subject: str, body: str) -> dict:
    # SMTP-отправка
    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 операторов

📝 Чек-лист внедрения

  1. Оцените объём документов и вариативность форматов.
  2. Выберите нейросеть-оркестратор (GigaChat, Claude, ChatGPT).
  3. Разработайте HTTP-сервис в 1С (методы: поиск, сохранение).
  4. Напишите MCP-сервер: опишите все Tools.
  5. Подключите интеграции: почта, 1С, Telegram для уведомлений.
  6. Создайте промпт для нейросети с полной логикой.
  7. Протестируйте на 10–20 реальных документах.
  8. Настройте метки доверия и пороги автосохранения.
  9. Запустите пилот на 2 недели, соберите статистику.
  10. Масштабируйте на все входящие счета.

💬 Вывод: стоит ли внедрять?

✅ Да, если:
  • > 1000 документов в месяц
  • Документы приходят в разных форматах
  • Есть бюджет на разработку (300–500 тыс. руб)
  • Вы готовы к внедрению HTTP-сервисов в 1С
🤔 Начните без MCP, если:
  • < 500 документов в месяц
  • Все счета однотипные (жёсткий формат)
  • Нет ресурсов на разработку MCP

🚀 Совет: Начните с простого конвейера (без MCP), а когда процесс отработаете — переходите на MCP для гибкости и масштабируемости.

🔗 Полезные ссылки

👍 Оцените статью
Всего голосов: 0



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA