Где определяется вид операции при загрузке банковской выписки в 1С:Бухгалтерия 3.0 и как настроить её отладку?

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

Автоматическая загрузка банковских выписок в конфигурации 1С:Бухгалтерия предприятия 3.0 (БП 3.0) — один из самых востребованных механизмов для автоматизации ежедневной рутины бухгалтера. Программа самостоятельно анализирует входящий файл из Клиент-Банка (в формате .txt или через систему прямого обмена DirectBank) и автоматически сопоставляет каждую строку с нужным видом операции: «Поступление от покупателя», «Комиссия банка», «Оплата поставщику» и так далее.

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

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

Давайте проанализируем структуру общих модулей конфигурации БП 3.0, отвечающих за импорт банковских документов. Вся ключевая бизнес-логика сосредоточена в двух основных модулях:

  1. Общий модуль ЗагрузкаВыпискиПоБанковскомуСчету. Это «сердце» механизма импорта. Именно здесь происходят чтение файла, разбор текстовых или XML-структур и последующее создание документов.
  2. Общий модуль БанковскиеПравила. Данный модуль выступает в роли вспомогательного аналитического центра. Он содержит жестко зашитые таблицы соответствий, алгоритмы разбора расчетных счетов контрагентов и специфические признаки платежей.

Разберем по шагам ключевые функции общего модуля ЗагрузкаВыпискиПоБанковскомуСчету, которые участвуют в жизненном цикле загрузки:

Алгоритм определения вида операции: три кита распознавания

Поскольку в выгружаемых банками файлах отсутствует прямое указание на реквизит «Вид операции» в терминах 1С, система вынуждена вычислять его на лету. Для этого алгоритм анализирует три ключевых параметра платежа:

1. Показатель «Вид оплаты» (числовые коды платежей)

В банковских реестрах каждому типу платежного поручения соответствует определенный двузначный код. Система считывает этот код из файла и использует его как первичный ориентир:

2. Первые 5 цифр расчетного счета (анализ балансовых счетов)

Этот метод является одним из наиболее надежных и точных критериев для алгоритма 1С. Программа детально анализирует структуру расчетного счета получателя или отправителя платежа. Например:

3. Лингвистический анализ назначения платежа и проверка договоров

Если первые два шага не дали точного ответа, система переходит к интеллектуальному разбору назначения платежа и сопоставлению контрагентов по ИНН/КПП:

Почему отладчик игнорирует точки останова?

Часто разработчики сталкиваются с проблемой: точка останова установлена в общем модуле ЗагрузкаВыпискиПоБанковскомуСчету в области РаспознаваниеХозяйственныхОпераций, база файловая, отладка запущена, но при нажатии кнопки «Загрузить» программа выполняет импорт без остановки на контрольных точках.

Выясним причину такого поведения среды разработки. Дело в том, что в современных версиях 1С:Бухгалтерия 3.0, разработанных на базе Библиотеки Стандартных Подсистем (БСП), все тяжелые и длительные процессы выполняются асинхронно в фоновом режиме. Для этого вызываются механизмы БСП вида ДлительныеОперации.ВыполнитьВФоне() или многопоточные функции ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков().

Когда вы запускаете загрузку выписки, основной сеанс пользователя («Тонкий клиент» или «Толстый клиент») лишь визуально отображает шкалу прогресса, в то время как непосредственный импорт и разбор файла выполняются в отдельном, изолированном фоновом процессе на сервере (даже на файловой базе этот процесс эмулируется платформой в фоновом задании). Стандартный сеанс отладки по умолчанию не подключен к этому фоновому процессу, поэтому точки останова игнорируются.

Пошаговое руководство по настройке отладки фоновых заданий

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

Шаг 1. Настройка автоматического подключения фоновых заданий в Конфигураторе

Нам необходимо явно указать отладчику 1С, что он должен перехватывать новые процессы, создаваемые платформой в фоне:

  1. Откройте вашу информационную базу в режиме Конфигуратора.
  2. В главном меню перейдите в раздел Отладка и выберите пункт Подключение...
  3. В открывшемся окне «Подключение» нажмите кнопку Настройка... в правом верхнем углу.
  4. В появившемся диалоговом окне настроек установите флажок напротив пункта «Автоматически подключать фоновые задания». Также рекомендуется установить флажок «Автоматически подключать новые сеансы».
  5. Нажмите ОК для сохранения настроек и закройте окно подключений.

Шаг 2. Запуск сеанса «1С:Предприятие» в режиме отладки

Для файловой базы данных этого шага достаточно. Запустите отладку (клавиша F5). Теперь при инициации импорта выписки платформа автоматически подключит отладчик к созданному фоновому заданию, и выполнение программы прервется на вашей точке останова.

Для клиент-серверного варианта работы базы данных убедитесь, что на сервере приложений 1С:Предприятие запущен режим отладки. В строке запуска службы сервера обязательно должен присутствовать ключ -debug. Без этого ключа сервер не будет транслировать отладочную информацию, и подключить фоновые задания не удастся.

Пример кода: перехват логики и анализ структуры правил

Давайте посмотрим на упрощенный пример того, как мы можем программно перехватить или проанализировать правила, по которым система сопоставляет платежи. Мы можем установить точку останова в функции ХозяйственнаяОперация() общего модуля ЗагрузкаВыпискиПоБанковскомуСчету и проанализировать структуру входящих данных с помощью Табло или Вычисления выражений:


// Пример структуры данных, анализируемой при определении операции
СтруктураПлатежа = Новый Структура;
СтруктураПлатежа.Вставить("ВидОплаты",            "17"); // Банковский ордер
СтруктураПлатежа.Вставить("НазначениеПлатежа",    "Комиссия за расчетно-кассовое обслуживание по тарифу");
СтруктураПлатежа.Вставить("СчетКонтрагента",      "40702810000000001234");
СтруктураПлатежа.Вставить("КонтрагентИНН",        "7701234567");

// Система обращается к правилам определения:
ВидОперации = ОпределитьОперациюПоПравилам(СтруктураПлатежа);

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

← На главную