При выгрузке платежных поручений из программ 1С в текстовый файл формата «1C:Предприятие — Клиент банка» пользователи нередко сталкиваются с ситуацией, когда в интернет-банке текст назначения платежа дублируется дважды. Разберем детально, почему так происходит, на чьей стороне кроется ошибка и какие существуют способы ее решения.
Проанализируем текстовый файл обмена (обычно 1c_to_kl.txt), который формируется стандартной обработкой выгрузки. В секции документа платежного поручения можно увидеть следующие строки:
Пример фрагмента выгрузки:
НазначениеПлатежа=Оплата по счету № 1062 от 04.08.2017г. за абатмент пластиковый. Сумма 4000-00 В т.ч. НДС (18%) 610-17НазначениеПлатежа1=Оплата по счету № 1062 от 04.08.2017г. за абатмент пластиковый.НазначениеПлатежа2=Сумма 4000-00НазначениеПлатежа3=В т.ч. НДС (18%) 610-17
Выясним причину такого заполнения со стороны 1С. Согласно официальному стандарту обмена между 1С и банковскими системами, предусмотрено два равноправных механизма передачи назначения платежа:
НазначениеПлатежа.НазначениеПлатежа1, НазначениеПлатежа2, НазначениеПлатежа3, НазначениеПлатежа4.Типовые конфигурации 1С для универсальности и обратной совместимости со всеми возможными банковскими комплексами выгружают оба варианта одновременно. Корректно настроенный парсер на стороне интернет-банка должен считывать только один формат: либо общую строку, либо нумерованные части. Однако при сбоях или обновлении логики на стороне банка парсер считывает сначала полное поле, а затем последовательно добавляет к нему все нумерованные строки, что приводит к итоговому задвоению текста в документе.
Рассмотрим способы, с помощью которых можно устранить проблему или автоматизировать работу, не дожидаясь исправления на стороне технической поддержки банка.
Наиболее надежный и современный вариант — отказ от промежуточных текстовых файлов в пользу сервиса 1С:ДиректБанк. При прямом обмене платежные документы передаются напрямую на банковский сервер по защищенному протоколу с использованием XML и веб-сервисов. В таком формате исключены ошибки парсинга старого текстового стандарта, а отправка и получение выписок происходят по нажатию одной кнопки в 1С.
Если перейти на прямой обмен невозможно, а банк оперативно не устраняет ошибку парсинга, скорректируем процедуру выгрузки с помощью расширения (без снятия базы 1С с поддержки). Разберем логику доработки:
НазначениеПлатежа1, НазначениеПлатежа2 и т. д., оставляя только одну единую строку НазначениеПлатежа.Посмотрим на пример логики переопределения в расширении:
&Вместо("ВыгрузитьРеквизитыПлатежногоДокумента")
Процедура Расш1_ВыгрузитьРеквизитыПлатежногоДокумента(ТекстФайла, ДокументОбъект)
// Вызываем базовое заполнение или формируем вывод реквизитов
ПродолжитьВызов(ТекстФайла, ДокументОбъект);
// При необходимости исключаем добавление строк НазначениеПлатежа1..N
// оставляя в потоке только основное поле НазначениеПлатежа
КонецПроцедуры
В типовом рабочем месте «Обмен с банком» сохраняется возможность использовать внешнюю обработку формирования файлов. Можно взять стандартную обработку выгрузки, скорректировать модуль формирования текстового потока под требования конкретного банка и подключить ее в настройках обмена.
Если нет возможности дорабатывать 1С, а исправлять вручную каждую строку в клиент-банке долго, применим пакетное удаление лишних строк из сформированного файла 1c_to_kl.txt с помощью командной строки или скрипта перед отправкой файла в банк. Для этого удаляются все строки, начинающиеся с шаблонов НазначениеПлатежа1=, НазначениеПлатежа2=, НазначениеПлатежа3=, НазначениеПлатежа4=, после чего очищенный файл успешно загружается в систему банк-клиент без дублирования информации.