При загрузке банковских выписок организации часто сталкиваются с ситуацией, когда банк зачисляет выручку от эквайринга одной суммой, удерживая одновременно две разные комиссии: комиссию по операциям с банковскими картами (облагаемую НДС) и комиссию по операциям через Систему быстрых платежей (СБП, которая НДС не облагается). В поле «Назначение платежа» банк указывает составную строку, в результате чего стандартный механизм распознавания либо игнорирует комиссию без НДС, либо неправильно определяет общую сумму удержания. Разберем по шагам причины такого поведения типовой конфигурации, варианты программного исправления алгоритма парсинга и методологические решения для корректного бухгалтерского учета.
Проанализируем структуру типового документа Поступление на расчетный счет с видом операции Поступления от продаж по платежным картам. В документе сумма услуг банка относится на один определенный счет в зависимости от выбранного способа учета комиссии:
60.02 (или 76.05) как аванс банку за оказанные услуги с последующим зачетом в конце месяца.91.02 (прочие расходы).Стандартный документ не предусматривает разбиения комиссии из одной строки поступления одновременно на два разных счета (например, часть на 60.02, а часть на 91.02). Типовой механизм загрузки выписки рассчитывает совокупную сумму удержания и заполняет единое поле комиссии. Если банк передает текст назначения платежа нестандартного формата, регулярные выражения и поиск подстрок могут не сработать, из-за чего часть комиссии не переносится со счета 57.03.
Выясним причину сбоя при чтении выписки. За разбор текстовых назначений платежей отвечает общий модуль ЗагрузкаВыпискиПоБанковскомуСчету и функция ПоискШаблонаВТекстеНазначения. Рассмотрим, как эволюционировал алгоритм разбора составных комиссий в типовых релизах.
Рассмотрим первый вариант, в котором разбор выполнялся через механизм регулярных выражений для поиска формулировок «в т.ч.» и «ндс не»:
Если Результат <> Неопределено И ЗначениеЗаполнено(Результат.ТекстПосле) Тогда
// Проверим, что в тексте переданы 2 комиссии - с НДС и без НДС и поправим текст для дальнейшей обработки.
КомиссияВТЧНДС = СтрНайтиПоРегулярномуВыражению(Результат.ТекстПосле, "(\d+(?:\.\d+)?)(?=\s*в т\.ч\.)");
КомиссияБезНДС = СтрНайтиПоРегулярномуВыражению(Результат.ТекстПосле, "(\d+(?:\.\d+)?)(?=\s*ндс не)");
Если ЗначениеЗаполнено(КомиссияВТЧНДС.Значение) И ЗначениеЗаполнено(КомиссияБезНДС.Значение) Тогда
Результат.ТекстПосле = СтрЗаменить(Результат.ТекстПосле, СтрШаблон(НСтр("ru = 'и %1'"), КомиссияБезНДС.Значение), СтрШаблон(НСтр("ru = 'и комиссия %1'"), КомиссияБезНДС.Значение));
КонецЕсли;
КонецЕсли;
Однако на практике банки часто присылают строку другого формата, например: «Сумма комиссии 1 218.36 (1 123.19 (в т.ч. НДС 202.50) и 95.17 (НДС не обл).», где сначала указана итоговая сумма, а затем в скобках дана ее расшифровка. Для таких сценариев применяется усовершенствованный алгоритм со скобками и приведением типов:
Если Результат <> Неопределено И ЗначениеЗаполнено(Результат.ТекстПосле) Тогда
ФорматЧисло = Новый ОписаниеТипов("Число");
ТекстПосле = Результат.ТекстПосле;
ПозицияСкобки = СтрНайти(ТекстПосле, "(");
ОбщаяКомиссия = "0";
Если ПозицияСкобки > 0 Тогда
ОбщаяКомиссия = Лев(ТекстПосле, ПозицияСкобки - 1);
ТекстПосле = Сред(ТекстПосле, ПозицияСкобки + 1);
КонецЕсли;
Если ОбщаяКомиссия <> "0" Тогда
РезультатКомиссия = ВыделитьКомиссииНДСИБезНДС(ТекстПосле);
Если ЗначениеЗаполнено(РезультатКомиссия.СуммаСНДС) И ЗначениеЗаполнено(РезультатКомиссия.СуммаБезНДС) Тогда
СуммаКомиссии = ФорматЧисло.ПривестиЗначение(СтрЗаменить(ОбщаяКомиссия, " ", ""));
СуммаСНДС = ФорматЧисло.ПривестиЗначение(СтрЗаменить(РезультатКомиссия.СуммаСНДС, " ", ""));
СуммаБезНДС = ФорматЧисло.ПривестиЗначение(СтрЗаменить(РезультатКомиссия.СуммаБезНДС, " ", ""));
Если СуммаКомиссии = СуммаСНДС + СуммаБезНДС Тогда
Результат.ТекстПосле = ОбщаяКомиссия;
Возврат Результат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Результат.ТекстПосле = СтрЗаменить(Результат.ТекстПосле, "(", " ");
РезультатКомиссия = ВыделитьКомиссииНДСИБезНДС(Результат.ТекстПосле);
Если ЗначениеЗаполнено(РезультатКомиссия.СуммаСНДС) И ЗначениеЗаполнено(РезультатКомиссия.СуммаБезНДС) Тогда
Результат.ТекстПосле = СтрЗаменить(Результат.ТекстПосле, СтрШаблон(НСтр("ru = 'и %1'"), РезультатКомиссия.СуммаБезНДС), СтрШаблон(НСтр("ru = 'и комиссия %1'"), РезультатКомиссия.СуммаБезНДС));
КонецЕсли;
КонецЕсли;
Если конфигурация находится на поддержке без возможности изменения, данный функционал рекомендуется внедрять через механизм расширений, перехватывая вызов функции аннотацией &Вместо или &После.
Посмотрим, как выстроить бухгалтерский учет, если сумма комиссии распознается полностью или требует раздельного учета.
Наиболее надежным решением является обращение в службу поддержки банка с заявлением о разделении выплат. Банк настраивает перечисление выручки по картам и выручки по СБП отдельными платежными поручениями. В этом случае в 1С настраиваются два элемента справочника Виды оплат:
60.02. В конце месяца проводится входящий УПД с НДС 22%, и формируется вычет со счета 19.04.91.02 без НДС, счет 57.03 закрывается полностью.Если в документе загружается совокупная сумма комиссии (карты + СБП) и отправляется в дебет счета 60.02, ручные проводки в выписке делать не требуется, если банк предоставляет закрывающий документ на полный объем услуг:
Поступление (акт, накладная, УПД) с видом операции Услуги.19.04;91.02.60.02 на всю сумму комиссии.Если банк не выставляет акт на операции СБП, закрытие зависшего дебетового сальдо на счете 60.02 оформляется в конце месяца документом Поступление услуг на основании отчета банка без регистрации входящей счет-фактуры.
Если необходимо вести раздельный учет сразу в момент загрузки дня, входящий платеж в выписке разбивается на два самостоятельных документа Поступление на расчетный счет. В первом документе отражается сумма карточных зачислений с комиссией по картам (с отнесением на 60.02), во втором — зачисление по СБП с соответствующей комиссией (с отнесением на 91.02). Это исключает использование ручных проводок и сохраняет целостность регистров эквайринга.