Почему при программной смене вида операции в банковской выписке документ не проводится?

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

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

Выясним причину сбоя

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

Более того, в стандартных форматах обмена 1CClientBankExchange или файлах kl_to_1c.txt отсутствует информация, необходимая для эквайринга (например, ВидОплаты). Без этого реквизита документ не может определить корректные счета учета (например, 57.03), что и приводит к отсутствию движений при проведении.

Шаг 1: Проверка функциональных настроек

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

  1. Перейдем в раздел АдминистрированиеФункциональность.
  2. На закладке Банк и касса обязательно установим флаг Платежные карты.
  3. В справочнике Виды оплат организаций создадим запись для нашего эквайера. В этой карточке должны быть указаны Банк-эквайер, Договор, Процент комиссии и Счет расчетов.

Шаг 2: Правильный программный подход к заполнению

Если вы решили автоматизировать заполнение вида операции через код, не пытайтесь просто присвоить значение перечисления полю ВидОперации. Рассмотрим, как правильно воспроизвести логику заполнения объекта. Вместо прямого присвоения, мы должны использовать событие ОбработкаЗаполнения или эмулировать действия, которые происходят в форме.

Если вы пишете расширение или доработку для модуля загрузки, рассмотрите возможность использования типовых процедур заполнения. Вот пример того, как можно воздействовать на объект в процедуре ПередЗаписью:


// Пример логики в процедуре ПередЗаписью документа
Если Объект.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ПоступлениеПоПлатежнымКартам Тогда
    Если НЕ ЗначениеЗаполнено(Объект.ВидОплаты) Тогда
        // Программная установка вида оплаты, если он не был определен
        Объект.ВидОплаты = Справочники.ВидыОплатОрганизаций.НайтиПоНаименованию("ВашВидОплаты");
    КонецЕсли;
    // Здесь можно программно дозаполнить необходимые счета учета
    Объект.СчетРасчетов = ПланыСчетов.Хозрасчетный.РасчетыПоПлатежнымКартам;
КонецЕсли;

Шаг 3: Особенности отладки фоновых процессов

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

  1. Запустим конфигуратор с ключом /Debug.
  2. В настройках отладки (меню ОтладкаПодключениеНастройка автоматического подключения) установим флаг Фоновые задания.
  3. Это позволит «поймать» момент, когда обработка КлиентБанк создает документ.

Рекомендации по реализации

Проанализировав ситуацию, можно сделать вывод: не стоит пытаться «взломать» логику типовой обработки, если в ней не предусмотрен нужный вид операции. Лучшим решением будет:

Помните, что проведение документа ПоступлениеНаБезналичныеДенежныеСредства требует не только выбранного вида операции, но и полной аналитики в табличной части. Проверяйте, чтобы при программном создании были заполнены Контрагент, Договор и Счет учета — без этого не сформирует проводки по 51 или 57 счетам.

← На главную