Работа бухгалтера по разнесению банковских выписок часто превращается в рутинный процесс, особенно когда контрагенты указывают назначение платежа в свободной форме. В этой статье мы подробно разберем, как автоматизировать процесс сопоставления входящих денежных средств с документами реализации (счетами, УПД) в конфигурации 1С:Бухгалтерия 3.0 — для этого подойдёт автоматическое разнесение банковских выписок через анализ текста. Мы проанализируем различные подходы: от простых алгоритмов поиска подстрок до современных технологических решений на базе искусственного интеллекта.
Самый очевидный способ, который часто применяют программисты 1С, — это поиск по назначению платежа и шаблонам в строке НазначениеПлатежа. Рассмотрим, как реализовать такой алгоритм. Основная задача — извлечь из текста номер документа и его дату.
Проанализируем типичную ситуацию: в строке может быть написано «Оплата по счету №123 от 01.01.2023» или «За товар по сч 123». Нам необходимо научить систему распознавать эти вариации. Для повышения эффективности поиска (до 70–80% успеха) рекомендуется использовать следующий подход:
ВРег(), чтобы не зависеть от того, как клиент написал слово — «Счет», «счет» или «СЧЕТ».Посмотрим на пример кода, который можно интегрировать в обработку загрузки выписки:
// Пример упрощенного поиска номера счета в назначении платежа
Функция НайтиНомерДокумента(ТекстНазначения)
ТекстНазначения = ВРег(ТекстНазначения);
КлючевыеСлова = Новый Массив;
КлючевыеСлова.Добавить("СЧЕТ №");
КлючевыеСлова.Добавить("СЧЕТ");
КлючевыеСлова.Добавить("СЧ №");
Для Каждого Ключ Из КлючевыеСлова Цикл
Позиция = СтрНайти(ТекстНазначения, Ключ);
Если Позиция > 0 Тогда
// Извлекаем подстроку после ключевого слова
ОстатокСтроки = Сред(ТекстНазначения, Позиция + СтрДлина(Ключ));
// Очищаем от лишних символов и пробелов, оставляя только цифры
Результат = "";
Для СимволНомер = 1 По СтрДлина(ОстатокСтроки) Цикл
Символ = Сред(ОстатокСтроки, СимволНомер, 1);
Если СтрНайти("0123456789", Символ) > 0 Тогда
Результат = Результат + Символ;
ИначеЕсли Результат <> "" Тогда
Прервать; // Номер закончился
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
Разберем более продвинутый способ поиска — использование регулярных выражений или AI-распознавание файлов счетов — есть готовая обработка разнесения выписки по настраиваемым алгоритмам. Это позволяет находить сложные паттерны, например, номера, разделенные дефисами, или даты в разных форматах. В 1С это реализуется через COMОбъект("VBScript.RegExp").
Преимущество RegEx заключается в том, что один шаблон может описать десятки вариантов написания. Рассмотрим пример шаблона для поиска номера счета:
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Истина;
// Шаблон ищет слово "счет" или "сч", затем возможный знак № или пробелы, и саму цифру
RegExp.Pattern = "(?:счет|сч)\s*(?:№|но|номер)?\s*(\d+)";
Matches = RegExp.Execute(ТекстНазначения);
Если Matches.Count > 0 Тогда
НомерСчета = Matches.Item(0).SubMatches.Item(0);
// Далее ищем СчетСсылка по номеру в базе
КонецЕсли;
Выясним причину, по которой иногда программный поиск бессилен: клиент может просто написать «Оплата за услуги». В таких случаях помогает маркетингово-технический прием — маркировка копейками. Каждому выставленному счету присваивается уникальное количество копеек. Например:
При загрузке банковской выписки система в первую очередь ищет соответствие по точной сумме (включая копейки) в рамках конкретного контрагента — ускоряет процесс умная обработка заполнения реквизитов банковской выписки. Это позволяет добиться практически 100% автоматизации для массовых платежей, даже если назначение платежа не заполнено корректно.
Рассмотрим использование стандартного механизма банковской системы — УИП (поле 22 в платежном поручении). Вы можете генерировать уникальный идентификатор для каждого счета и выводить его в печатной форме счета с инструкцией «Обязательно укажите этот код в поле Код (УИП)».
В 1С:Бухгалтерия при импорте выписки система автоматически проверяет поле КодИдентификатора. Если он совпадает с тем, что был присвоен документу в базе, разнесение произойдет мгновенно и без ошибок. Однако, как отмечалось в обсуждении, не все клиенты готовы дисциплинированно заполнять дополнительные поля.
Проанализируем ситуацию, когда мы хотим минимизировать человеческий фактор со стороны клиента. Современный стандарт ГОСТ Р 56042-2014 позволяет размещать на счетах QR-код.
Когда бухгалтер контрагента сканирует этот код в банковском приложении, все реквизиты, включая НазначениеПлатежа, заполняются автоматически по вашему шаблону. Рассмотрим, что стоит включить в шаблон назначения платежа для идеального распознавания:
Если контрагент допустил опечатку, например, «Оплата по счтету», стандартный поиск подстрок может не сработать. В таких случаях программисты 1С реализуют функцию расчета расстояния Левенштейна. Это алгоритм, который определяет количество правок (замен, удалений, вставок), необходимых для превращения одной строки в другую.
Если мы находим в строке слово, которое на 80% совпадает со словом «СЧЕТ», мы можем с высокой долей вероятности предположить, что это именно оно, и попытаться обработать следующие за ним символы как номер.
Посмотрим на технологию DirectBank. В отличие от старого обмена через текстовые файлы txt, этот протокол позволяет получать данные напрямую с сервера банка через API — для этого подойдёт модуль автоматической загрузки и разноски платежей через API. Это не только ускоряет процесс, но и позволяет получать более чистые данные без искажений кодировки и с более длинными полями назначения платежа, которые иногда обрезаются в промежуточных файлах экспорта.
Для создания надежного механизма автоматического разнесения платежей, мы рекомендуем использовать комбинированный подход:
Важно помнить, что любая автоматизация должна оставлять возможность контроля. Постройте интерфейс так, чтобы система подсвечивала цветом те строки, которые были разнесены автоматически «с сомнением», чтобы бухгалтер мог быстро проверить результат нажатием одной кнопки.
Подведем итог: универсального механизма, работающего на 100% «из коробки», не существует из-за творческого подхода бухгалтеров контрагентов к заполнению документов. Однако сочетание технических средств (RegEx, DirectBank) и организационных мер (QR-коды, УИП) позволяет автоматизировать обработку до 90-95% банковской выписки, значительно снижая нагрузку на финансовый отдел.