Создание платёжки из скана при помощи модели ИИ: как устроена обработка, которая читает счёт и создаёт платёжное поручение

13.11.26

Интеграция - Нейросети

Обычная инженерная задача: забрать файл, сходить в HTTP-сервис, разобрать JSON, аккуратно записать данные в справочники БП 3.0 и открыть заполненную форму документа. Никакой магии: 1900 строк кода, из которых примерно половина — защита от того, что конфигурация может быть не совсем той, что вы ожидаете. Разберём, что там действительно интересно с точки зрения проектирования.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Создание платёжки из скана при помощи модели ИИ: как устроена обработка, которая читает счёт и создаёт платёжное поручение
.epf 23,64Kb ver:1.0.2
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

1. Постановка задачи

Бухгалтер получает счёт на оплату в PDF/JPG/DOCX. Дальше — рутина: найти или завести контрагента, проверить ИНН/КПП, завести банк по БИК, банковский счёт, потом открыть «Платёжное поручение» и перенести туда десяток реквизитов.

Обработка закрывает весь путь:

  1. выбрать файл счёта;
  2. отправить его в сервис распознавания;
  3. найти контрагента по ИНН/КПП или создать нового (вместе с банком и счётом);
  4. открыть форму нового платёжного поручения с уже заполненными реквизитами.

Ключевое решение, которое стоит одобрить сразу: документ не записывается. Обработка возвращает ЗначенияЗаполнения, а форму открывает платформа:

ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", Результат.ЗначенияЗаполнения);
ОткрытьФорму("Документ.ПлатежноеПоручение.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);

Пользователь видит заполненный документ, проверяет и сохраняет сам. Это правильная граница ответственности: распознавание ошибается, а «тихо созданный» платёжный документ в базе — это уже инцидент, а не удобство.

2. Регистрация в БСП: одна функция, три ловушки

Обработка подключается как внешняя через СведенияОВнешнейОбработке() с видом ЗаполнениеОбъекта и размещением в Документ.ПлатежноеПоручение — кнопка появляется прямо в форме документа, что для пользователя гораздо естественнее, чем «открыть файл → найти обработку».

ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
Размещение = Новый Массив;
Размещение.Добавить("Документ.ПлатежноеПоручение");
ПараметрыРегистрации.Вставить("Назначение", Размещение);

Ловушки, на которые легко наступить:

  • БезопасныйРежим = Ложь. Обработка пишет в справочники и ходит в сеть, поэтому безопасный режим отключён осознанно. Но это значит, что весь код обработки работает с полными правами — и внешний HTTP-ответ становится входными данными, влияющими на запись в базу. Об этом ниже.
  • Использование = "ОткрытиеФормы". Команда не вызывает серверный метод, а открывает управляемую форму обработки. Если поставить ВызовСерверногоМетода, обработка с видом ЗаполнениеОбъекта не заработает так, как ожидается.
  • Справка. Help/ru.html — пустая заготовка. Для обработки, которую отдают пользователям, справка нужна: как минимум куда вводить адрес сервиса и АПИ-ключ.

3. Транспорт: multipart/form-data руками

Самое «неприятное» место с точки зрения платформы — отправка файла методом POST. Готового «отправить файл в multipart» в языке нет, тело собирается вручную из двоичных данных:

ЧастьЗаголовок = "--" + Разделитель + ПереводСтроки
	+ "Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаБезПути + """" + ПереводСтроки
	+ "Content-Type: application/octet-stream" + ПереводСтроки + ПереводСтроки;
...
Возврат СоединитьДвоичныеДанные(Части);

Здесь всё сделано корректно: разделитель уникален ("WmkBoundary" + Новый УникальныйИдентификатор()), заголовки и двоичное тело кодируются отдельно, СоединитьДвоичныеДанные доступна с 8.3.10, HTTPS включается через ЗащищенноеСоединениеOpenSSL.

Что спорно:

  • Разбор адреса вручную. Функция сама отрезает http:///https://, выдёргивает порт, отделяет путь. Работает, но это 30 строк регулярной логики, которую проще вынести в отдельную функцию с тестами — сейчас она перемешана с отправкой запроса.
  • Запрос выполняется на клиенте. Для тонкого клиента это плюс: сервер не нагружается ожиданием чужого HTTP. Но на веб-клиенте прямое HTTPСоединение имеет ограничения, и вся схема потребует пересмотра. Если целевая аудитория — веб-клиент, транспорт надо переносить на сервер.
  • АПИ-ключ на клиенте. Ключ лежит в реквизите формы и сохраняется в ХранилищеОбщихНастроек под ключом "ПлатёжкаИИ.СервисРаспознавания". «Общее» хранилище — это настройка на всю базу, а не на пользователя. Для облачного сервиса с платным ключом это стоит как минимум обсудить: либо настройка на пользователя, либо константа/параметр сеанса на стороне сервера.

4. Два сервиса — один контракт данных

Обработка умеет работать с локальным сервисом (/api/extract_invoice) и облачным (/extract/invoice). Форматы ответа разные, поэтому между транспортом и бизнес-логикой вставлен слой нормализации — и это лучшее архитектурное решение во всей обработке.

Канонический контракт описан прямо в шапке модуля объекта:

organization_name, inn, kpp, ogrn, address, phone,
bank_name, bik, checking_account, corr_account,
invoice_number, invoice_date,
items[], total_amount, total_vat, total_with_vat, has_vat, vat_rate

Облачный ответ приводится к нему маппингом supplier_* → *, а НДС выводится расчётно:

СуммаНДС = ПолучитьЧислоИзСоответствия(Результат, "total_vat");
Результат.Вставить("has_vat", СуммаНДС > 0);

Вся остальная логика — создание контрагента, счёт, платёжка — работает уже только с каноническими ключами и про формат сервиса не знает. Добавление третьего сервиса сведётся к одной новой функции нормализации. Именно так и надо делать интеграции.

5. Запись в чужие справочники: оборона через метаданные

Обработка предназначена для типовой БП 3.0, но написана так, будто конфигурация может быть любой. Отсюда — слой «безопасной установки реквизитов»:

Функция УстановитьРеквизитБезопасно(Объект, ИмяРеквизита, Значение)
	...
	Если НЕ ЕстьРеквизит(МетаданныеОбъекта, ИмяРеквизита) Тогда
		Возврат Ложь;
	КонецЕсли;
	Если Объект[ИмяРеквизита] = Значение Тогда
		Возврат Ложь;
	КонецЕсли;
	Объект[ИмяРеквизита] = Значение;
	Возврат Истина;
КонецФункции

Функция возвращает Истина, только если значение реально изменилось — за счёт этого запись выполняется лишь при наличии изменений, и вызывающий код не пишет «пустые» Записать().

Дальше это используется везде: НаименованиеПолное/ПолноеНаименование, ЮридическийАдрес/ЮрАдрес/Адрес, КоррСчет/КоррСчетБанка, перечисление СтавкиНДС или справочник СтавкиНДС, Банки или КлассификаторБанков. Приём рабочий, но у него есть цена: логика чтения реквизитов «по имени строкой» не проверяется парсером, ошибки в именах выясняются только в рантайме, а количество ветвлений растёт с каждой конфигурацией.

Компромисс, который я бы предложил: оставить «безопасные» хелперы только на границе нестабильных сущностей (банки, НДС, адреса), а для контрагента и банковского счёта писать прямым кодом под БП 3.0. Иначе обработка превращается в мини-БСП, который никто не поддерживает.

6. Транзакции и порядок операций

Создание контрагента обёрнуто в транзакцию: контрагент, банк, счёт, контактная информация — либо всё, либо ничего. Это правильно, но в коде есть нюанс:

РезультатСчета = СоздатьОбновитьБанковскийСчет(Результат.Контрагент, Данные);
...
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = СтрШаблон(НСтр("ru = 'Создан банковский счёт %1, банк: %2'"), НомерСчета, Банк);
	Сообщение.Сообщить();

СообщениеПользователю.Сообщить() вызывается внутри транзакции, до ЗафиксироватьТранзакцию(). Если транзакция потом откатится, пользователь уже увидит сообщение о созданном счёте. Сообщения (как и любые побочные эффекты — запись в журнал, ОповеститьОбИзменении) нужно собирать в структуру результата и выдавать после фиксации. Сейчас частично так и сделано (Результат.СчетНовый, Результат.БанкСоздан), а эта строка — рудимент.

Ещё один момент: ЗаписатьКонтактнуюИнформациюКонтрагента пишет напрямую в регистр сведений КонтактнаяИнформация, минуя УправлениеКонтактнойИнформацией из БСП. Набор записей перечитывается, существующая запись обновляется — дублей не будет. Но штатный механизм БСП умеет больше (типы, представление, проверка вида), и использовать его было бы честнее, если он есть в базе.

7. НДС: самая сложная часть

Распознавание НДС — источник ошибок, и здесь накопилось несколько решений, которые стоит пересмотреть:

  • has_vat нормализуется из строки. Поддерживаются "true", "истина", "1", "да". Важно, чтобы нормализация заканчивалась на слое разбора ответа.
  • Ставка берётся из первой позиции (items[0].vat_rate) и считается за весь счёт. Для платёжного поручения, где ставка одна, это вполне приемлемо.
  • ПолучитьСтавкуНДСПоДанным имеет два документирующих комментария подряд — остаток рефакторинга. Один из них описывает несуществующий параметр ДокументОбъект. Комментарий — часть контракта метода, и его расхождение с сигнатурой хуже, чем его отсутствие.
  • «Сумма прописью». Переменная называется СуммаПрописью, а внутри — Формат(СуммаИтого, "ЧДЦ=2; ЧРГ=' '; ЧН=0"). Это не прописью, это число с разделителем разрядов. Либо переименовать, либо действительно использовать ЧислоПрописью. Для назначения платежа второе выглядит уместнее.

8. Чек-лист для похожих задач

Если вы делаете обработку «распознай документ → заполни объект», вот что стоит проверить у себя:

  1. Документ не пишется без человека. Возвращайте ЗначенияЗаполнения и открывайте форму — не создавайте и не проводите документ автоматически.
  2. Контракт данных фиксирован и описан в шапке модуля. Один слой нормализации на каждый внешний сервис, выше — только канонические ключи.
  3. Внешние ответы — это недоверенный ввод. Тип проверяется на каждом уровне (ТипЗнч), числа парсятся через Попытка, отсутствующие ключи не приводят к исключению.
  4. Запись в справочники — в транзакции, сообщения — после фиксации.
  5. Записать() только при реальных изменениях — хелпер, возвращающий признак изменения, экономит транзакции и регистрацию изменений для обмена.
  6. Никаких реквизитов «через точку» на чужих ссылках. Здесь это соблюдено: все выборки — запросами (ВЫБРАТЬ ПЕРВЫЕ 1 ... ГДЕ ИНН = &ИНН).
  7. Секреты не в общем хранилище настроек. Ключ сервиса — это либо константа на уровне базы, либо настройка пользователя, но не то, что доступно всем.
  8. Справка заполнена. Внешняя обработка без инструкции — это обработка, которую будут запускать «как получится».

 

Главный вывод для тех, кто делает что-то похожее: сложность в такой задаче — не в вызове ИИ, а в записи результата в базу. 80% кода здесь — это не распознавание, а «а вдруг справочник называется иначе», «а вдруг ставка НДС — справочник, а не перечисление», «а вдруг банка по БИК ещё нет». Именно эту часть и надо проектировать в первую очередь.

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.64.54

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19806    43    4    

39

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21722    106    32    

90

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    77296    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3957    15    9    

14

Учет документов Распознавание документов и образов Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Одна из наиболее удобных обработок автоматического прикрепления большого количества документов-оригиналов к документам 1С. Для файлов поточного сканирования автоматически определяются начало и конец каждого документа. Поддерживаются штрихкоды, QR-коды, отсканированные PDF документы без штрихкодов, сформированные в ЭДО текстовые PDF документы. Поддерживаются входящие и исходящие документы-оригиналы.

6588 руб.

23.12.2021    17731    35    25    

15

Распознавание документов и образов Периферийные устройства Разработчик Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20740 руб.

31.05.2023    7876    5    5    

10

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2239    3    0    

3
Для отправки сообщения требуется регистрация/авторизация