Рассмотрим распространенную проблему, с которой сталкиваются разработчики при интеграции загрузки банковских выписок: попытка программно изменить вид операции в документе ПоступлениеНаБезналичныеДенежныеСредства приводит к тому, что документ создается, но не формирует проводок или требует ручного перевыбора вида операции в форме. Разберемся, почему простая подмена значения в поле ВидОперации оказывается недостаточной.
Когда вы меняете вид операции в интерфейсе, система автоматически инициирует сложный механизм: срабатывают процедуры ПриИзменении, которые заполняют дополнительные реквизиты, такие как Договор, ВидОплаты, СтатьяДоходов и счета учета. При жесткой программной подмене вида операции эти механизмы не срабатывают, и объект остается в «полупустом» состоянии.
Более того, в стандартных форматах обмена 1CClientBankExchange или файлах kl_to_1c.txt отсутствует информация, необходимая для эквайринга (например, ВидОплаты). Без этого реквизита документ не может определить корректные счета учета (например, 57.03), что и приводит к отсутствию движений при проведении.
Прежде чем приступать к написанию кода, убедимся, что база настроена правильно. Часто причина кроется в отсутствии активного функционала для работы с картами:
Банк-эквайер, Договор, Процент комиссии и Счет расчетов.Если вы решили автоматизировать заполнение вида операции через код, не пытайтесь просто присвоить значение перечисления полю ВидОперации. Рассмотрим, как правильно воспроизвести логику заполнения объекта. Вместо прямого присвоения, мы должны использовать событие ОбработкаЗаполнения или эмулировать действия, которые происходят в форме.
Если вы пишете расширение или доработку для модуля загрузки, рассмотрите возможность использования типовых процедур заполнения. Вот пример того, как можно воздействовать на объект в процедуре ПередЗаписью:
// Пример логики в процедуре ПередЗаписью документа
Если Объект.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ПоступлениеПоПлатежнымКартам Тогда
Если НЕ ЗначениеЗаполнено(Объект.ВидОплаты) Тогда
// Программная установка вида оплаты, если он не был определен
Объект.ВидОплаты = Справочники.ВидыОплатОрганизаций.НайтиПоНаименованию("ВашВидОплаты");
КонецЕсли;
// Здесь можно программно дозаполнить необходимые счета учета
Объект.СчетРасчетов = ПланыСчетов.Хозрасчетный.РасчетыПоПлатежнымКартам;
КонецЕсли;
Разработчики часто сталкиваются с тем, что отладчик «теряется» при загрузке выписок. Это происходит потому, что загрузка часто выполняется в фоновом задании. Чтобы проанализировать, что происходит в момент присвоения вида операции, выполним следующее:
/Debug.КлиентБанк создает документ.Проанализировав ситуацию, можно сделать вывод: не стоит пытаться «взломать» логику типовой обработки, если в ней не предусмотрен нужный вид операции. Лучшим решением будет:
ПередЗаписью документа ПоступлениеНаБезналичныеДенежныеСредства. В этом случае вы можете перехватить документ, созданный загрузкой, и дозаполнить его всеми необходимыми реквизитами на основании сопоставления данных.1С:Бухгалтерии не покрывает специфику вашего сайта или платежной системы, рассмотрите вариант доработки не модуля загрузки, а самой формы документа, где будет реализована кнопка «Дозаполнить по правилам эквайринга».Помните, что проведение документа ПоступлениеНаБезналичныеДенежныеСредства требует не только выбранного вида операции, но и полной аналитики в табличной части. Проверяйте, чтобы при программном создании были заполнены Контрагент, Договор и Счет учета — без этого 1С не сформирует проводки по 51 или 57 счетам.