IDE + MCPКлиентские сверки «счёт → за что → чем оплачено» с расшифровкой из содержания счёта
«За что» — строго из содержания счёта: пять клиентских сверок, вскрывших неоплаченный месяц под FIFO-сальдо, ложный и настоящий дубль счёта и оплату наперёд
Коротко
Бухгалтеру нужно было собрать по клиентам таблицы «какие счета выставлены, за что и что не оплачено» — чтобы отправить их самим клиентам. Первую версию агент заполнил, взяв период услуги по дате счёта («услуги за июнь»), и ошибся: у клиента счёт за май был выставлен в июне, а два счёта на одну сумму приняты за дубль. Руководитель поправила одной фразой — «за что совсем не из счёта взято». После этого «за что» стали брать строго из содержания табличной части счёта (Товары.Содержание), и картина сошлась: у одного ИП вскрылся неоплаченный апрель (а не май, как показывало FIFO-сальдо), у другого — оплата июня наперёд при неоформленной реализации, у третьего — настоящий дубль счёта на июнь. Пять сверок в Excel, каждая цифра — из запроса к базе. Ноль внешних обработок, ноль визитов в Конфигуратор.
Что требовалось
Это не «оплачен / не оплачен» по назначению платежа, как в обычной клиентской сверке. Здесь заказчику нужно было показать клиенту за что и за какой период выставлен каждый счёт — а «читаемые» признаки обманывают: дата счёта не равна периоду услуги, одинаковая сумма не значит дубль, а банк гасит долг по FIFO, из-за чего в сальдо «висит» не тот месяц, который клиент реально пропустил. Единственный надёжный источник периода — текст строки счёта.
Как помог агент
По каждому клиенту агент поднял из базы содержание всех счетов построчно (табличная часть Товары, поле Содержание), оплаты с назначением платежа и остаток по счёту 62 раздельно (62.01 и 62.02). Период и услугу он взял строго из содержания счёта, а не из даты и не из суммы. Это сразу перевернуло картину: счёт, выставленный в июне за май, перестал «уезжать» на месяц; два счёта на одну сумму развелись по содержанию как разные месяцы, а не дубль; неоплаченным показан тот месяц, по которому не было платежа, а не тот, на котором FIFO «оставил» долг. Каждую сверку агент выгрузил в готовый Excel-файл со столбцами «счёт / дата / за что / сумма / оплачено / дата оплаты / статус» и итоговой строкой долга. Файлы сохранены в папку загрузок — их можно передать клиенту напрямую.
Результат
За сессию выполнены сверки по пяти клиентам и подготовлено 5 файлов Excel. Найдено: неоплаченный апрель у двух клиентов (майский платёж по FIFO закрыл апрель, а сам апрель остался пропущен); оплата июня наперёд при неоформленной реализации (аванс корректно повис на 62.02); один настоящий дубль счёта на июнь (месяц уже входил в многомесячный счёт и был оплачен) и одно ложное подозрение на дубль, снятое по содержанию (два счёта на одну сумму — за разные месяцы). Отдельная ценность сессии: агент принял поправку заказчика и перестроил метод, а не остался при своей первой версии. Вся работа — прямо в рабочей базе, без программиста и без установки дополнительных обработок.
1. Контекст
Бухгалтерия ведёт десятки ИП на абонентском обслуживании. По каждому клиенту в базе — счета на оплату (часто многострочные: тариф + разовые услуги, или несколько месяцев одним счётом), реализации-акты и банковские поступления. Периодически клиенту нужно отправить понятную сверку: за что выставлен счёт, чем и когда оплачен, что осталось должен.
Эта задача отличается от простой клиентской сверки «оплачен / не оплачен по назначению платежа». Здесь метод строится на содержании счёта, потому что все «читаемые» признаки обманывают:
- дата счёта не равна периоду услуги — счёт за май выставляют в июне;
- сумма не говорит о периоде — два счёта по 11 800 могут быть за разные месяцы;
- банк гасит по FIFO — поздний платёж закрывает самый ранний долг, и в сальдо «висит» не тот месяц, что реально пропущен;
- счёт бывает многострочным — в одной сумме и тариф, и декларация НДС, и три месяца сразу.
Симптомы задачи:
- «не пойму, где неверно» по клиенту при внешне сходящихся суммах;
- в сальдо 62 «висит» май, хотя по платёжкам пропущен апрель;
- два счёта на одну сумму — дубль или разные месяцы, по номерам не отличить.
2. Обращение заказчика
«Составь таблицу оплат по счетам… по какому счёту не оплачено?»
После первой версии таблицы, где период был взят по дате счёта:
«Ты не прав, „за что" совсем не из счёта взято. Проверь: в каждом счёте написано, за что.»
Поправка справедливая и ключевая: «за что» и период — это не дата документа и не сумма, а текст в строке счёта. Дальше метод строился только на нём.
3. Исследование
3.1 Где лежит «за что»
Табличная часть счёта называется Товары, в ней поле Содержание (синоним «Содержание услуги»). Проверяем состав через метаданные, затем тянем содержание всех счетов клиента.
ВЫБРАТЬ
Ссылка.Номер КАК Ном,
Ссылка.Дата КАК Дата,
Содержание,
Сумма
ИЗ Документ.СчетНаОплатуПокупателю.Товары
ГДЕ Ссылка.Контрагент = &К
И Ссылка.ПометкаУдаления = ЛОЖЬ
УПОРЯДОЧИТЬ ПО Дата
Для одного из ИП это сразу перевернуло картину:
| Счёт | Дата счёта | Содержание (за что) | Сумма |
|---|---|---|---|
| № 314 | 01.04 | Услуга «Тест-Драйв» за март, АУСН Доходы 2 МП | 4 700 |
| № 358 | 02.05 | Основной тариф за апрель 2026 | 11 800 |
| № 447 | 15.06 | Основной тариф за май 2026 | 11 800 |
| № 445 | 10.06 | Основной тариф за июнь 2026 | 11 800 |
Дата счёта № 447 — 15 июня, а услуга в нём — за май. По дате мы ошиблись бы на месяц. И № 447 с № 445 не дубль (оба 11 800, оба выставлены в июне) — это разные месяцы, что видно только по содержанию.
Технический момент — «за что» и период берём из
Товары.Содержание, не из даты и не из суммы. Дата счёта не равна периоду услуги, одинаковая сумма не значит дубль. Единственный надёжный источник периода — текст строки счёта. На этом же сломался первый вариант таблицы: период был взят по дате, и счёт за май «уехал» в июнь.
3.2 Кто чем оплачен — по назначению платежа
Оплаты привязываем к счетам по тексту «Оплата по счёту № N» в назначении.
ВЫБРАТЬ Номер, Дата, СуммаДокумента КАК Сумма, НазначениеПлатежа КАК Назн
ИЗ Документ.ПоступлениеНаРасчетныйСчет
ГДЕ Контрагент = &К И ПометкаУдаления = ЛОЖЬ
УПОРЯДОЧИТЬ ПО Дата
3.3 Почему сальдо 62 показывает «не тот» месяц
У абонентского клиента суммы за период сходились, но 62.01 держал долг, «сидящий» на майской реализации. Смотрим остаток раздельно по 62.01 и 62.02:
ВЫБРАТЬ Счет.Код КАК Счет, СуммаОстатокДт КАК Дт, СуммаОстатокКт КАК Кт
ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(, , , Субконто1 = &К)
ГДЕ Счет.Код В ("62.01","62.02")
Оказалось: клиент по платёжкам оплатил майский счёт (в назначении — его номер), а апрельский счёт пропустил. Но банк по FIFO направил майский платёж на гашение более раннего, апрельского долга, и в сальдо «повис» май. Для клиента правильно показывать пропущенным именно апрель — тот счёт, по которому платежа не было.
Технический момент — остаток по 62.01 и 62.02 раздельно; «неоплаченный» месяц — по назначению платежа, а не по FIFO-сальдо. Виртуальная таблица «РасчётыСПокупателями» — это только 62.01; авансы на 62.02 запрашиваем отдельным фильтром
Счет.Код В ("62.01","62.02"). А какой счёт реально пропущен, определяет назначение платежа, а не то, на какой реализации FIFO «оставил» долг.
4. Решения
4.1 Единая методика сверки
Для каждого клиента — три запроса (содержание счетов, оплаты с назначением, остаток 62 раздельно), затем сопоставление строго по содержанию и назначению. Итог по пяти ИП:
| Клиент | Что вскрыла сверка |
|---|---|
| Белова | не оплачен апрель (счёт № 331), а не май — майский платёж по FIFO закрыл апрель |
| Морозов Д. | не оплачен апрель (счёт № 327, 11 800); июнь оплачен наперёд (10 620) при неоформленной реализации |
| Титова | «за что» из счёта: № 447 — май, № 445 — июнь; не оплачен май; № 447 не дубль |
| Гущин | всё оплачено (58 532 = 58 532); счёт многострочный: тариф + декларация НДС |
| Гусев Г. | счёт № 451 за июнь — настоящий дубль: июнь уже в счёте № 402 (май+июнь+июль) и оплачен |
4.2 Дубль или не дубль — решает содержание
Два похожих случая, противоположный вывод — и оба видно только по содержанию:
- Титова, № 447 и № 445 (оба 11 800, оба выставлены в июне) — НЕ дубль: по содержанию № 447 за май, № 445 за июнь.
- Гусев, № 451 и строка счёта № 402 (оба «Основной тариф за июнь», по 9 400) — дубль: июнь уже включён в многомесячный счёт № 402 и оплачен, № 451 повторный.
Технический момент — многострочный и многомесячный счёт. Счёт бывает на несколько строк (тариф + разовая услуга) и на несколько месяцев сразу (у Гусева № 402 — май, июнь, июль одной пачкой на 28 200). Тянуть надо всю табличную часть
Товарыпострочно, иначе «июнь» в составе трёхмесячного счёта не увидишь и примешь повторный счёт за неоплаченный.
4.3 Оплата наперёд при неоформленной реализации
У одного клиента июньский платёж пришёл, а реализации за июнь ещё нет — оплата корректно повисла авансом на 62.02. В сверке это отражено отдельным статусом «оплачено авансом», чтобы не путать с закрытым месяцем. Оформление реализации июня оставлено руководителю — это факт оказанной услуги, его решает человек.
4.4 Вывод сверки клиенту — Excel в Downloads
Каждая сверка выгружается в Excel (лист «Счёт | Дата счёта | За что | Сумма | Оплачено | Дата оплаты | Статус», снизу итог и строка долга). По двум клиентам — один файл с двумя листами.
Технический момент — запись Excel по ячейкам, не 2D-массивом. В PowerShell индексатор
$data[$r+1,$c]парсится неверно (падаетop_Addition), поэтому заполняем ячейки напрямуюCells.Item(r,c).Value2, числа приводим[double], текст[string]. Файл всегда в Downloads, перезапись черезSaveAs. Результат читается контрольным проходом по ячейкам.
5. Инструменты
5.1 Использовали в этом кейсе
| Инструмент | Что делали |
|---|---|
query_1c |
содержание счетов (Товары), оплаты с назначением, остаток 62.01+62.02 раздельно, реализации |
metadata_1c |
нашли имя табличной части счёта (Товары) и поле Содержание |
session_info_1c |
контекст сессии и базы |
| PowerShell + Excel COM (локально) | формирование .xlsx со сводкой и строкой долга; сохранение в Downloads |
5.2 Что осталось за рамками — но есть в арсенале
| Инструмент / компонент | Что даёт | Когда пригодился бы |
|---|---|---|
batch_1c (UNPOST/POST) |
свернуть развёрнутое сальдо перепроведением по датам | когда аванс и долг «дерутся» на одном договоре |
batch_1c (DELETE_MARK) |
пометить дубль-счёт на удаление | закрыть задвоение (Гусев № 451) после подтверждения |
run_task / task_status |
асинхронный прогон сверок пакетом | сформировать сверки сразу по всем клиентам в фоне |
get_skill / skill_report |
переиспользуемый скилл «сверка за что по содержанию» | тот же разбор для следующего клиента в один вызов |
ai_ПанельАгента |
агент внутри 1С | клиент сам запрашивает свою сверку и получает Excel |
| Identity Server (multi-tenant) | изоляция данных по клиенту | множество ИП в одном контуре — сверка строго в своём scope |
| Audit-trail runtime | журнал вызовов с токеном клиента | доказуемость: по клиенту делалось только чтение |
6. Результаты
| Метрика | Значение |
|---|---|
| Клиентов сверено | 5 (Белова, Морозов, Титова, Гущин, Гусев) |
| Источник «за что» | содержание счёта Товары.Содержание (не дата, не сумма) |
| Найдено неоплаченных месяцев | апрель у двух клиентов (счета № 331 и № 327) |
| Найдено задвоений | 1 реальный дубль счёта (Гусев № 451), 1 ложное подозрение снято (Титова № 447) |
| Оплат наперёд | июнь-аванс при неоформленной реализации |
| Excel-сверок в Downloads | 5 (в т.ч. один файл на два листа) |
| Внешних обработок в боевую базу / визитов в Конфигуратор | 0 / 0 |
7. Что это даёт пользователю MCP ai-agent-1c
- «За что» — из документа, а не из догадки. Период и услугу агент берёт из содержания счёта, поэтому счёт за май не «уезжает» в июнь, а одинаковые суммы не путаются с дублями.
- Показывает реально пропущенный счёт, а не артефакт FIFO. Сверка по назначению платежа находит месяц, который клиент не оплатил, даже когда сальдо «висит» на другом.
- Отличает дубль от разных месяцев. Два счёта на одну сумму агент разводит по содержанию: где задвоение — предлагает удалить, где разные периоды — оставляет оба.
- Принимает поправку и чинит метод. Первую версию агент собрал неверно, человек указал на источник — «за что из счёта», и метод перестроился, а не остался при своём.
Приложения
A. Объекты кейса
| Объект | Что с ним сделали |
|---|---|
Счета клиентов (ТЧ Товары) |
прочитано содержание построчно — источник «за что» |
| Поступления (назначение платежа) | привязка оплат к счетам по «Оплата по счёту № N» |
| Остатки 62.01 / 62.02 | сверены раздельно, объяснён FIFO-«переезд» долга |
| 5 Excel-файлов в Downloads | клиентские сверки «счёт → за что → чем оплачено» |
B. Карта проблемы
«составь сверку, по какому счёту не оплачено»
│
▼
первый вариант: «за что» по дате счёта ── поправка: «за что из счёта»
│
▼
query Товары.Содержание → период и услуга строго из строки счёта
│
├─ счёт за май выставлен в июне → не путаем месяц
├─ два счёта по 11 800: разные месяцы → не дубль
├─ «июнь» в счёте май+июнь+июль → повторный счёт = дубль
└─ платёж по назначению ≠ FIFO-долг → пропущен апрель, не май
│
▼
Excel-сверка клиенту: счёт | за что | чем оплачено | что должен ✅