Как изменить алгоритм поиска контрагентов по КПП при загрузке банковской выписки в 1С:Бухгалтерии 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе регулярного обмена с банком при загрузке входящих банковских выписок многие разработчики сталкиваются с ситуацией, когда типовой механизм сопоставления контрагентов ведет себя некорректно из-за проверки КПП. Например, банк передает пустой КПП, заполняет его нулями или указывает реквизиты филиала, в то время как в информационной базе контрагент заведен с реквизитами головной организации. В старых редакциях конфигурации задача решалась простой правкой текста запроса в обработке Клиент-Банк, однако в современных версиях «1С:Бухгалтерии предприятия 3.0» архитектура механизма кардинально изменилась. Разберем по шагам, где именно выполняется поиск участников операций, почему отладчик не останавливается на точках останова и как программно исключить КПП из алгоритма сопоставления.

Архитектура механизма сопоставления контрагентов

Проанализируем современную архитектуру загрузки выписки. Код сопоставления больше не находится внутри формы или модуля объекта обработки КлиентБанк. Вся обработка разделена на специализированные общие модули:

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

Поиск и предварительное распознавание контрагентов происходят непосредственно в момент выбора файла выписки еще до фактического создания документов. При этом система формирует таблицу идентификаторов, пытаясь последовательно найти совпадения по связкам реквизитов.

Настройка отладки фоновых заданий

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

Чтение и сопоставление данных выписки вынесены в длительную операцию, которая запускается в фоновом задании на стороне сервера 1С:Предприятия. Если среда разработки не подключена к отладке фоновых процессов, точки останова будут игнорироваться.

Выполним правильную настройку подключения отладчика:

  1. Убедимся, что служба сервера 1С запущена с ключом -debug (для протокола TCP/IP) или настроена отладка по протоколу HTTP.
  2. В конфигураторе перейдем в главное меню: Отладка → Подключение...
  3. В окне Предметы отладки нажмем кнопку Настройка автоматического подключения.
  4. В открывшемся списке флажков обязательно установим признак Фоновые задания (а также Клиентские и серверные процедуры на сервере).
  5. Нажмем ОК и перезапустим сеанс «1С:Предприятия».

После включения отладки фоновых заданий платформа гарантированно остановится на точке останова в методе ЗаполнитьИдентификаторыУчастниковОперацийПоДаннымИзБанка общего модуля ЗагрузкаВыпискиПоБанковскомуСчету.

Точка вмешательства: модуль ЗагрузкаВыпискиПоБанковскомуСчету

Рассмотрим подробнее, в каком месте формируются исходные данные для идентификации. Основным методом подготовки параметров сопоставления является процедура:

ЗагрузкаВыпискиПоБанковскомуСчету.ЗаполнитьИдентификаторыУчастниковОперацийПоДаннымИзБанка

В этот метод передается таблица загруженных из банковского файла операций. Для каждой строки генерируется набор поисковых признаков, куда стандартно включается КПП контрагента (плательщика или получателя). Чтобы исключить влияние КПП на результат распознавания, мы можем реализовать доработку конфигурации без снятия с поддержки — с помощью расширения.

Реализация отключения проверки КПП через расширение

Разберем вариант модификации логики через расширение конфигурации. Наиболее безопасным подходом является перехват обработки таблицы данных перед отправкой на поиск либо постобработка нераспознанных строк.

Посмотрим на пример переопределения метода с помощью аннотации &Вместо или &ИзменениеИКонтроль в модуле ЗагрузкаВыпискиПоБанковскомуСчету:


&Вместо("ЗаполнитьИдентификаторыУчастниковОперацийПоДаннымИзБанка")
Процедура Расш1_ЗаполнитьИдентификаторыУчастниковОперацийПоДаннымИзБанка(ТаблицаОпераций, ПараметрыЗагрузки)
    
    // Вызываем оригинальный метод типовой конфигурации
    ПродолжитьВызов(ТаблицаОпераций, ПараметрыЗагрузки);
    
    // Обходим подготовленные операции и очищаем КПП участников, 
    // чтобы поиск выполнялся только по связке ИНН и расчетного счета
    Для Каждого СтрокаОперации Из ТаблицаОпераций Цикл
        
        Если ЗначениеЗаполнено(СтрокаОперации.ИННПлательщика) Тогда
            СтрокаОперации.КПППлательщика = "";
        КонецЕсли;
        
        Если ЗначениеЗаполнено(СтрокаОперации.ИННПолучателя) Тогда
            СтрокаОперации.КПППолучателя = "";
        КонецЕсли;
        
    КонецЦикла;

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

Если требуется скорректировать уже сформированные структуры идентификаторов, обратим внимание на модуль ИдентификацияУчастниковБанковскихОпераций. При формировании критериев поиска система заполняет структуру полей. Исключив из структуры реквизит КПП, мы заставим запросы сопоставления игнорировать этот параметр.

Возможные риски и особенности учета

Проанализируем последствия полного отключения контроля КПП:

  1. Работа с обособленными подразделениями: Если в вашей информационной базе зарегистрированы контрагенты с одинаковым ИНН, но разными КПП (филиалы крупных компаний), поиск только по ИНН вернет неоднозначный результат. В таком случае система выберет либо первую найденную ссылку, либо выдаст предупреждение.
  2. НДС и книги покупок/продаж: Ошибочный выбор головной организации вместо конкретного филиала может повлечь искажение КПП в проводках и документах расчетов, что отразится на формировании декларации по НДС.
  3. Альтернативное решение без изменения кода: Напомним, что штатный алгоритм сопоставления также использует связку расчетного счета и БИК. Если в карточку контрагента заранее внести расчетный счет из банковской выписки, то система успешно сопоставит плательщика даже при расхождении в КПП.
← На главную