Почему не отправляется платежка через 1С-ДиректБанк в УНФ и как исправить ошибку «Номер документа должен содержать только цифры»?

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

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

Анализ причины ошибки: почему ДиректБанк «привередлив» к номерам

Рассмотрим ситуацию, когда при попытке формирования электронного документа система выдает сообщение следующего вида: «Номер документа: должен содержать только цифры. Номер документа: неверный тип значения "А-1У-000055" (ожидаемый тип: строка до 6 символов)». Проанализируем, почему стандартный механизм обмена файлами («Клиент-Банк») может пропускать такой номер, а ДиректБанк — нет.

Сервис ДиректБанк работает по протоколу ASOE (или аналогичным API банков), где данные передаются в строго структурированном формате (XML или JSON). Большинство банковских шлюзов (например, Сбербанк, Точка, ВТБ) имеют жесткие требования к полю Номер. Оно должно быть либо чисто числовым, либо строковым, но не содержать лишних символов, таких как префиксы информационных баз или организаций. Если в файл обмена 1C выгружает «очищенный» номер, то при прямой передаче через ДиректБанк в некоторых релизах УНФ механизм очистки может давать сбой из-за нестандартной префиксации.

Способ 1. Исправление настроек префиксации (рекомендуемый метод)

Выясним причину некорректной очистки номера. В системе 1С дефис - часто используется как технический разделитель между префиксом и номером. Если в поле «Префикс» в карточке организации или в настройках обмена указан символ тире (например, А-1), стандартные функции «Библиотеки стандартных подсистем» (БСП) могут ошибочно идентифицировать только часть префикса, оставляя остальные нецифровые символы в теле номера.

Для исправления ситуации выполним следующие действия:

  1. Перейдем в справочник Организации и откроем карточку вашей компании.
  2. Проанализируем поле Префикс. Если там содержится тире или другие спецсимволы, удалим их. Рекомендуется использовать только буквенно-цифровые коды длиной не более 2-х символов (например, А1 вместо А-1).
  3. Проверим префикс информационной базы в настройках синхронизации (если база участвует в обмене). Он также не должен содержать дефисов.
  4. Важный нюанс: после изменения настроек префиксации номера уже созданных документов Платежное поручение не изменятся автоматически. Вам потребуется вручную перезаписать номер документа (например, стереть его и нажать «Записать», чтобы программа сформировала новый номер по новым правилам).

Как показывает практика, использование префикса из двух букв без дополнительных символов полностью решает проблему в 90% случаев, так как стандартные алгоритмы очистки номера начинают работать корректно.

Способ 2. Технический анализ и доработка через расширение

Если специфика учета не позволяет изменить префиксы (например, накоплена огромная история документов), необходимо вмешаться в работу механизмов очистки номера. В конфигурации УНФ за подготовку номера для передачи в банк отвечает общий модуль или функции клиент-серверного взаимодействия.

Проанализируем ситуацию в коде. Основная функция, отвечающая за «красивое» представление номера, — это ПрефиксацияОбъектовКлиентСервер.НомерНаПечать. Однако при выгрузке через ДиректБанк может вызываться специфическая логика из модуля УчетДенежныхСредствКлиентСервер. Рассмотрим пример того, как можно принудительно очистить номер от любых префиксов с помощью расширения конфигурации.

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


&ИзменениеИКонтроль("НомерНаПечать")
Функция Мой_НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
    // Принудительно устанавливаем параметры удаления всех префиксов для банковских операций
    УдалитьПрефиксИнформационнойБазы = Истина;
    УдалитьПользовательскийПрефикс = Истина;
    
    // Вызываем стандартную логику, которая теперь гарантированно отсечет лишнее
    Возврат ПродолжитьВызов(НомерОбъекта, УдалитьПрефиксИнформационнойБазы, УдалитьПользовательскийПрефикс);
КонецФункции

Посмотрим на альтернативный вариант. Если стандартная функция НомерНаПечать все равно не справляется с «двойными» префиксами вида А-1У-000055, можно использовать регулярные выражения или простую очистку строки от всех нецифровых символов непосредственно в модуле УчетДенежныхСредствКлиентСервер.НомерОбъектаБезПрефикса. Рассмотрим фрагмент кода, который поможет оставить только цифры:


Функция ОчиститьНомерДляБанка(Знач ВходнойНомер)
    Результат = "";
    Для Индекс = 1 По СтрДлина(ВходнойНомер) Цикл
        Символ = Сред(ВходнойНомер, Индекс, 1);
        Если Найти("0123456789", Символ) > 0 Тогда
            Результат = Результат + Символ;
        КонецЕсли;
    КонецЦикла;
    
    // Удаляем лидирующие нули, часто банки требуют именно короткий номер
    Пока Лев(Результат, 1) = "0" И СтрДлина(Результат) > 1 Цикл
        Результат = Сред(Результат, 2);
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

Почему обмен через файл работает, а ДиректБанк — нет?

Многих пользователей сбивает с толку тот факт, что обычный обмен через txt-файл проходит успешно. Проанализируем ситуацию: при выгрузке в файл 1С использует старые алгоритмы формирования 1CClientBankExchange, где в поле Номер часто попадает уже преобразованное значение. Более того, при импорте файла «Клиент-Банк» на стороне банковского ПО часто стоят менее жесткие фильтры. ДиректБанк — это современная интеграция, работающая в режиме реального времени, и она требует идеального соответствия типов данных. Если поле описано как числовое, передача любой буквы приведет к отказу всей транзакции.

Рекомендации по ведению учета в УНФ для избежания проблем с банками

Для стабильной работы интеграций с банками и другими внешними сервисами рекомендуем придерживаться следующих правил оформления документов:

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

← На главную