IDE + MCPсверка подготовленных платёжных поручений с фактической банковской выпиской — за пользователя, без внешних обработок
8 из 34 платёжек не дошли до бюджета: свели платёжные поручения с выпиской и нашли неуплату на 1,16 млн
Коротко
Клиент готовит платёжные поручения по налогам в 1С вручную и платит через разные банки — прямого обмена 1С с банком нет, поэтому статус «отправлено» в журнале ничего не гарантирует. Нужно было понять, какие из 34 платёжек ИП реально прошли по банку, а какие зависли. Агент сопоставил каждое платёжное поручение 1:1 с фактическими списаниями по выписке (по получателю и сумме), нашёл 26 оплаченных и 8 «повисших» на 1 162 088,27 ₽ — среди них два ключевых платежа НДС «третья треть» за 1 квартал 2025 и 1 квартал 2026, где первые две трети оплачены, а последняя до бюджета не дошла. Результат выгружен в Excel тремя листами. По ходу работы честно выявлена и исправлена ошибка первого прогона: в многофирменной базе сверку сначала запустили без фильтра по организации и смешали клиентов — ошибку поймали по уточнению заказчика и переделали строго по одному ИП. Без внешних обработок, без Конфигуратора, только чтение базы, каждый шаг подтверждён человеком.
Что требовалось
ИП Котов — селлер, которого бухгалтер ведёт в общей базе вместе с ещё девятью ИП. Платёжные поручения по налогам бухгалтер готовит вручную в 1С и передаёт клиенту, а тот платит сам через разные банки. Прямого обмена 1С с банком у клиента нет, поэтому колонка «Состояние» в журнале платёжек отражает только внутренний статус документа, а не факт списания денег. По журналу невозможно понять, какие из 34 платёжных поручений реально оплачены: деньги уходят с нескольких счетов в разных банках, а налоги идут через единый налоговый платёж, где суммы и даты в выписке не всегда совпадают с подготовленными платёжками.
Запрос заказчика был общим: сравнить платёжные поручения, которые готовили для клиента, с банковскими выписками — какие платежи оплачены, а какие нет. Отдельно заказчик подчеркнул границу задачи: интересует только один конкретный ИП, другие клиенты базы — нет.
Как помог агент
Агент разобрался, что в этой базе факт оплаты нельзя взять из документа платёжки: реквизита «Оплачено» нет, а прямой связи «списание → платёжка» база не хранит (выписка грузится из клиент-банка отдельными списаниями). Поэтому сверку он построил так, как это делает бухгалтер руками — по совпадению получателя и суммы.
Дальше агент честно проговорил ограничение метода: часть налогов идёт единым налоговым платежом, где в 1С платёжка дробится по видам, а в банк уходит общий платёж другой суммой — такие случаи «сумма в сумму» не сойдутся, и это не признак неуплаты. Это защищает от ложного вывода по бюджету.
Первый прогон агент выполнил без фильтра по организации — и в многофирменной базе это смешало платёжки одного клиента со списаниями другого. Ошибку поймали по прямому указанию заказчика, агент сразу перестроил всё строго по одному ИП и переделал результат.
Затем агент сопоставил каждое из 34 платёжных поручений 1:1 с фактическими списаниями клиента: одно списание закрывает ровно одну платёжку, повторяющиеся суммы не задваиваются. Итог — реестр с пометкой «уплачено / не найдено», датой фактического списания и банком плательщика — выгружен в Excel тремя листами (Сводка, НЕ уплачено, Все платёжки). Вся работа — только чтение базы, ни одной записи в учёт.
Результат
Из 34 платёжных поручений 26 подтверждены оплатой — у каждого есть конкретное закрывающее списание с датой. 8 платёжек на 1 162 088,27 ₽ в выписке не найдены — это реальные кандидаты на неуплату. Среди них два ключевых: НДС «третья треть» за 1 квартал 2025 (130 907 ₽) и за 1 квартал 2026 (636 055 ₽) — первые две трети оплачены, а последняя до бюджета не дошла.
Клиент получил готовый Excel-реестр на три листа, по которому видно, что оплачено, что зависло и на какую сумму. Вся работа выполнена прямо в рабочей базе из чата — без программиста, без внешних обработок, без визитов в Конфигуратор и без единого изменения в базе.
1. Контекст
ИП Котов - селлер, обслуживается в общей многофирменной базе, где параллельно ведётся ещё девять ИП. Платёжные поручения по налогам бухгалтер готовит вручную в 1С и передаёт клиенту, а тот платит сам через разные банки. Прямого обмена 1С с банком (ДиректБанк) у клиента нет. Из-за этого колонка «Состояние» в журнале платёжек («Отправлено» / «Подготовлено») отражает только внутренний статус документа, а не факт списания денег. Единственный достоверный признак оплаты - проведённое «Списание с расчётного счёта» из загруженной выписки.
Симптомы:
- 34 платёжных поручения по клиенту, по журналу не понять, какие реально оплачены;
- деньги уходят с 6 разных счетов (ОЗОН Банк, Сбербанк, Точка, ТБанк), сопоставление на глаз невозможно;
- налоги идут через ЕНП - суммы и даты в выписке не всегда совпадают с подготовленными платёжками.
2. Обращение заказчика
«Посмотри рабочую базу, сделай сравнение платёжных поручений, которые мы готовили для клиента Котова, с выписками банка: какие платежи были оплачены, а какие нет.»
Позже формулировка уточнилась дважды, и это важно зафиксировать честно. Сначала прозвучало «мне не надо что ушло» - то есть не сводка по ЕНС, а конкретика по платёжкам. Затем ключевое уточнение границы задачи:
«Я же тебе поставила чёткую задачу взять клиента Котова... Другие клиенты меня не интересуют.»
Это уточнение поймало реальную ошибку первого прогона (см. раздел 3.3) и задало правильные рамки.
3. Исследование
3.1 Замер объёма и модель сверки
Сначала снял метаданные. Оказалось, что у Документ.ПлатежноеПоручение в этой конфигурации нет реквизита «Оплачено», а связь с фактом идёт через Документ.СписаниеСРасчетногоСчета. Проверил, как в базе устроена привязка списаний к платёжкам:
ВЫБРАТЬ
ВЫБОР КОГДА ВЫРАЗИТЬ(Сп.ДокументОснование КАК Документ.ПлатежноеПоручение) ЕСТЬ НЕ NULL
ТОГДА "Основание = Платёжка" ИНАЧЕ "Без ссылки на платёжку" КОНЕЦ КАК Тип,
КОЛИЧЕСТВО(*) КАК Кол
ИЗ Документ.СписаниеСРасчетногоСчета КАК Сп
ГДЕ Сп.Проведен = ИСТИНА И Сп.ПометкаУдаления = ЛОЖЬ И Сп.Дата >= ДАТАВРЕМЯ(2024,10,1)
СГРУППИРОВАТЬ ПО ВЫБОР КОГДА ... КОНЕЦ
| Тип | Кол-во |
|---|---|
| Без ссылки на платёжку | 4209 |
| Основание = Платёжка | 44 |
Вывод: связь «по документу-основанию» в этой базе не работает - выписка грузится из клиент-банка отдельными списаниями. Значит сверять надо по совпадению: получатель + сумма, как это делает бухгалтер руками.
Технический момент -
ПРЕДСТАВЛЕНИЕ()нельзя вПОДОБНО. Контрагент и организация - составного типа. Фильтр по наименованию строится не черезПРЕДСТАВЛЕНИЕ(...) ПОДОБНО "%...%"(даёт «неверные параметры»), а черезВЫРАЗИТЬ(Поле КАК Справочник.Контрагенты).Наименование ПОДОБНО &Шаблон. Сам шаблон передаём параметром запроса, чтобы не экранировать кавычки внутри текста.
3.2 Почему ЕНП «не бьётся» в лоб
Первая же сводка по получателю ФНС показала подвох: часть налоговых платёжек не находит списания той же суммы. Причина - ЕНП: в 1С платёжка дробится по видам (УСН, взносы, НДС по 1/3), а в банк уходит общий платёж другой суммой. Это ограничение метода «сумма в сумму», и его нужно было честно проговорить клиенту, а не прятать за «оплачено».
3.3 Грабли многофирменной базы (и наша ошибка)
Первый прогон сверки был построен по фильтру «получатель ФНС» без фильтра по организации. Проверка состава базы вскрыла проблему:
ВЫБРАТЬ "Платёжки" КАК Источник, ПРЕДСТАВЛЕНИЕ(ПП.Организация) КАК Организация, КОЛИЧЕСТВО(*) КАК Кол
ИЗ Документ.ПлатежноеПоручение КАК ПП ГДЕ ПП.ПометкаУдаления = ЛОЖЬ
СГРУППИРОВАТЬ ПО ПРЕДСТАВЛЕНИЕ(ПП.Организация)
В базе оказалось 10 ИП (Котов, Морозов, Соколова, Зуев, Ковалёва, Фомина, Лапин, Рябова, Гаврилова, Дьякова). Сверка без фильтра организации смешивала платёжки одного клиента со списаниями другого - результат был недостоверным. Ошибку поймали по прямому указанию заказчика и переделали строго по одному ИП.
Технический момент - в многофирменной базе фильтровать по организации обязательно. Любой запрос к документам добавляет
ВЫРАЗИТЬ(Ссылка.Организация КАК Справочник.Организации).Наименование ПОДОБНО "%Котов%". Иначе платёжки «закрываются» чужими списаниями.
4. Решения
4.1 Движок сопоставления 1:1 через invoke_1c
Правильная сверка требует жадного сопоставления: одно списание закрывает ровно одну платёжку, повторяющиеся суммы не задваиваются. Это не выражается одним query_1c, поэтому логика собрана алгоритмом в безопасном режиме - два запроса и сопоставление в памяти:
Орг = "%Котов%";
// 1. Платёжки клиента (что подготовили)
ЗПП = Новый Запрос;
ЗПП.УстановитьПараметр("О", Орг);
ЗПП.Текст = "ВЫБРАТЬ ПП.Дата, ПП.Номер, ПП.Проведен, ПП.Контрагент КАК КА,
ПП.СуммаДокумента КАК Сумма, ПП.НазначениеПлатежа, ПРЕДСТАВЛЕНИЕ(ПП.СчетОрганизации) КАК Банк
ИЗ Документ.ПлатежноеПоручение КАК ПП
ГДЕ ПП.ПометкаУдаления = ЛОЖЬ
И ВЫРАЗИТЬ(ПП.Организация КАК Справочник.Организации).Наименование ПОДОБНО &О
УПОРЯДОЧИТЬ ПО ПП.Дата";
ТЗ_ПП = ЗПП.Выполнить().Выгрузить();
// 2. Выписка клиента (факт списаний)
ЗСп = Новый Запрос;
ЗСп.УстановитьПараметр("О", Орг);
ЗСп.Текст = "ВЫБРАТЬ С.Дата, С.Контрагент КАК КА, С.СуммаДокумента КАК Сумма
ИЗ Документ.СписаниеСРасчетногоСчета КАК С
ГДЕ С.Проведен = ИСТИНА И С.ПометкаУдаления = ЛОЖЬ
И ВЫРАЗИТЬ(С.Организация КАК Справочник.Организации).Наименование ПОДОБНО &О";
ТЗ_Сп = ЗСп.Выполнить().Выгрузить();
// 3. Жадное сопоставление: получатель + сумма, одно списание - одна платёжка
Списания = Новый Массив;
Для Каждого стр Из ТЗ_Сп Цикл
Списания.Добавить(Новый Структура("КА,Сумма,Дата,Занято", стр.КА, стр.Сумма, стр.Дата, Ложь));
КонецЦикла;
Для Каждого пп Из ТЗ_ПП Цикл
Для Каждого с Из Списания Цикл
Если Не с.Занято И с.Сумма = пп.Сумма И с.КА = пп.КА Тогда
с.Занято = Истина; // помечаем закрытие, дальше эта платёжка "Уплачено"
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Технический момент -
execute-алгоритм ничего не пишет в базу. Это чистое чтение и вычисление: два запроса и матчинг в памяти, результат возвращается черезПараметры. Никаких изменений документов, поэтому сверку можно гонять сколько угодно раз без последствий для учёта.
Технический момент - интроспекция всех регистров тяжёлая. Попытка перебрать
Метаданные.РегистрыСведенийв поисках регистра статусов обмена с банком упёрлась в тайм-аут. Вывод: у клиента без ДиректБанка такого регистра и нет - «Состояние» в журнале не индикатор оплаты, опираемся только на проведённое списание.
4.2 Выгрузка результата в Excel
34 строки реестра с пометкой «Уплачено / НЕ найдено», датой фактического списания и банком плательщика сформированы в .xlsx (openpyxl) тремя листами: Сводка, НЕ уплачено, Все платёжки. Файл сохранён в Downloads, неверный файл первого прогона удалён программно.
4.3 Итоговая сверка
Параметры.Всего = ТЗ_ПП.Количество(); // 34
Параметры.Уплачено = КолОпл; // 26
Параметры.НеНайдено = КолНет; // 8
Параметры.СуммаНеНайдено = СуммаНет; // 1 162 088,27
| Показатель | Кол-во | Сумма, руб |
|---|---|---|
| Всего платёжных поручений | 34 | - |
| Уплачено (есть в выписке) | 26 | - |
| НЕ найдено в выписке | 8 | 1 162 088,27 |
Совпало чётко: все 26 «уплачено» имеют конкретное закрывающее списание с датой, 8 «не найдено» - реальные кандидаты на неуплату.
5. Инструменты
5.1 Использовали в этом кейсе
| Инструмент | Что делали |
|---|---|
session_info_1c |
проверили подключение и права к рабочей базе |
metadata_1c |
разобрали реквизиты ПлатежноеПоручение и СписаниеСРасчетногоСчета, нашли НеПодтвержденоВыпискойБанка и отсутствие «Оплачено» |
query_1c |
замеры объёма, состав организаций базы, структура списаний, выписка ФНС |
invoke_1c (execute) |
жадный движок сопоставления платёжек и списаний в памяти, только чтение |
5.2 Что осталось за рамками - но есть в арсенале
| Инструмент / компонент | Что даёт | Когда пригодился бы в похожей задаче |
|---|---|---|
batch_1c |
запись/переразноска документов | если бы нужно было не только свериться, но и допровести или пометить дубли платёжек |
run_task / task_status |
фоновые длительные операции | сверка сразу по всем 10 ИП базы одним прогоном |
get_skill / skill_report |
переиспользуемые сценарии | оформить эту сверку как типовой скилл «платёжки vs выписка» на любого клиента |
ai_ПанельАгента |
агент внутри 1С, скриншоты из базы | чтобы бухгалтер запускал сверку прямо из 1С без переключений |
| Audit-trail runtime | журнал вызовов с токеном клиента | подтверждение, что читали только базу нужного клиента, для мультиарендной среды |
6. Результаты
| Метрика | Значение |
|---|---|
| Платёжных поручений сверено | 34 |
| Подтверждено оплат по выписке | 26 |
| Повисших платёжек (кандидаты на неуплату) | 8 |
| Сумма под вопросом | 1 162 088,27 руб |
| Ключевые находки | НДС 3/3 за 1 кв 2025 (130 907) и 1 кв 2026 (636 055) не дошли |
| Ошибка первого прогона | поймана и исправлена (фильтр по организации) |
| EPF в боевую базу / визитов в Конфигуратор | 0 / 0 |
7. Что это даёт пользователю MCP ai-agent-1c
- Сверка платёжек с выпиской из чата, без ручного перебора. Там, где бухгалтер листает журнал и выписку глазами по шести счетам, агент сопоставляет 34 документа 1:1 за один прогон и отдаёт готовый Excel.
- Честность метода вместо ложного «оплачено». Агент прямо показывает ограничение сверки по ЕНП и не выдаёт совпадение суммы за гарантию уплаты - это защищает от неверных выводов по бюджету.
- Человек в контуре ловит рамки задачи. Ошибку с многофирменной базой исправило уточнение заказчика, а агент сразу перестроил запросы под один ИП и переделал результат. Диалог, а не «чёрный ящик».
- Только чтение - безопасно для боевой базы. Вся работа на
query_1c+invoke_1cв режиме вычисления: ноль записей, сверку можно повторять без риска для учёта.
Приложения
A. Объекты кейса
| Объект | Что с ним сделали |
|---|---|
Документ.ПлатежноеПоручение (34 шт, ИП Котов) |
прочитали, разметили статусом оплаты |
Документ.СписаниеСРасчетногоСчета (802 шт, ИП Котов) |
использовали как источник факта оплаты |
Справочник.Организации |
фильтр по одному ИП в многофирменной базе |
Сверка_платёжек_Котов.xlsx |
итог в Downloads: Сводка / НЕ уплачено / Все платёжки |
B. Карта проблемы
34 платёжки в 1С, статус оплаты неизвестен
(ДиректБанка нет, "Состояние" не в счёт)
│
▼
query_1c: связь по документу-основанию не работает
(4209 списаний без ссылки) → сверять по получатель+сумма
│
▼
query_1c: в базе 10 ИП ── уточнение заказчика: только Котов
│
▼
invoke_1c (только чтение): жадное сопоставление 1:1
платёжка ↔ списание того же клиента
│
▼
26 уплачено · 8 повисло на 1 162 088,27 ₽ → Excel в Downloads ✅