Приветствуем вас, уважаемые коллеги! В этой статье мы подробно разберем техническую проблему, с которой столкнулись многие пользователи и разработчики, работающие со старыми конфигурациями на платформе 1С (в частности, «Бухгалтерия предприятия» редакции 2.0, «Управление производственным предприятием 1.3» и другими решениями на обычных формах). Суть проблемы заключается в том, что при импорте банковской выписки в программе перестают заполняться поля «Назначение платежа» и ставки/суммы «НДС», либо загрузка прерывается критической ошибкой.
Мы выясним глубинную причину этого сбоя, проанализируем изменения в законодательстве, вызвавшие его, и рассмотрим несколько практических способов решения — от простого обновления до ручной правки программного кода в конфигураторе.
Давайте разберем эту ситуацию по шагам.
Первым делом проанализируем хронологию событий. Сбой в загрузке выписок у большинства пользователей начал проявляться в конце мая — начале июня 2020 года. Это напрямую связано со вступлением в силу изменений в Федеральном законе № 229-ФЗ «Об исполнительном производстве» (с изменениями от 1 июня 2020 года).
Согласно новым требованиям Центрального Банка РФ, при выплате доходов физическим лицам (заработная плата, социальные пособия, дивиденды и т.д.) работодатели обязаны указывать в платежных документах специальный код вида дохода (значения от 1 до 5 в зависимости от характера выплаты). Этот код заносится в поле 20 «Наз. пл.» (Назначение платежа кодированное).
Для реализации этого требования Банк России обновил стандарт обмена данными между банковскими системами («Клиент-Банк») и учетными решениями 1С. В текстовый файл обмена (традиционно имеющий имя kl_to_1c.txt) были добавлены новые служебные теги для передачи этого кода:
КодНазПлатежа — для передачи кода вида дохода в транзакциях.КодВыплат — дополнительный идентификатор для некоторых типов начислений.Код — общий идентификатор платежа в некоторых банковских форматах.Поскольку конфигурация «Бухгалтерия предприятия 2.0» к 2020 году уже находилась на ограниченной поддержке (основные силы разработчиков были направлены на редакцию 3.0), встроенный парсер текстовых файлов выписок не ожидал встретить в файле новые, неизвестные ему переменные.
Проанализируем, как именно реагирует система на появление новых тегов в зависимости от действий пользователя:
КодНазПлатежа=1, алгоритм загрузки не находит этот реквизит в списке разрешенных и аварийно прерывает работу с ошибкой: «Неверный реквизит платежного документа строка...».Самый простой и безопасный способ исправить проблему — обновить конфигурацию до актуального релиза. Несмотря на то, что редакция 2.0 устарела, фирма 1С выпустила соответствующие обновления для поддержки изменений законодательства (исправления появились в релизах, выпущенных после июня 2020 года, например, начиная с 2.0.66.111 и выше).
В официальных обновлениях разработчики скорректировали встроенную обработку обмена, добавив новые теги в список распознаваемых реквизитов. Если у вас типовая (неизмененная) конфигурация, обязательно выполните обновление через стандартный механизм обновления конфигурации.
Если ваша база данных сильно доработана, находится на замке и оперативно обновить ее до актуального релиза не представляется возможным, вам потребуется самостоятельно научить парсер обрабатывать новые теги.
Давайте разберем по шагам, как внести изменения в код обработки загрузки через Конфигуратор.
Шаг 1. Поиск нужного объекта
В конфигурациях на обычных формах за обмен с банками отвечает встроенная обработка. Откройте Конфигуратор, перейдите в ветку Обработки и найдите обработку с именем КлиентБанк (или, в зависимости от версии, ОбменЭлектроннымиДокументамиСБанком).
Откройте модуль объекта этой обработки.
Шаг 2. Расширение списка разрешенных реквизитов
Найдите в тексте модуля переменную (или функцию), которая отвечает за инициализацию списка допустимых реквизитов платежного документа. Обычно это текстовая строка, перечисляющая необязательные реквизиты через запятую. Имя переменной может выглядеть как РеквизитыПлДок_НазначениеНеОбязательные или иметь схожее по смыслу название.
Посмотрим на пример того, как выглядит эта строка до изменений:
РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,КодОКПО,СрочныйПлатеж";
Для того чтобы система не выдавала ошибку при встрече с новыми тегами ЦБ, мы должны дописать их в конец этой строки через запятую. Модифицируем строку следующим образом:
РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,КодОКПО,СрочныйПлатеж,КодВыплат,КодНазПлатежа,Код";
Шаг 3. Добавление колонок во временную таблицу загрузки
Далее найдите процедуру, которая создает структуру колонок для таблицы, куда загружаются данные из файла (часто эта таблица называется ТаблицаДокументов или ТабПоля). Нам необходимо объявить новые колонки для хранения считанных кодов, чтобы при обходе строк файла данные корректно распределялись по структуре, не вызывая смещения индексов.
Найдите фрагмент кода, где инициализируются колонки (например, там, где создается колонка для НазначениеПлатежа), и добавьте по аналогии новые строки:
// Добавление стандартных колонок
СоздатьКолонкуВТаблице(Таб, ТабПоле, "НазначениеПлатежа", Т_Строка, "Назначение платежа", Видимая);
// Добавляем новые колонки для корректного парсинга новых тегов
СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодВыплат", Т_Строка, "КодВыплат", НеВидимая);
СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодНазПлатежа", Т_Строка, "КодНазПлатежа", НеВидимая);
СоздатьКолонкуВТаблице(Таб, ТабПоле, "Код", Т_Строка, "Код идентификатора", НеВидимая);
Обратите внимание: Если в вашей конфигурации используется функция ЗаполнитьРеквизитыДокумента(), убедитесь, что новые реквизиты просто игнорируются при создании документов (если они не требуются для проведения) или корректно записываются в предназначенные для них реквизиты платежного поручения (в новых релизах для этого появились специальные поля).
Если вы не хотите вносить изменения в основную конфигурацию и снимать ее с поддержки, отличным выходом будет использование внешней обработки.
КлиентБанк..epf на жесткий диск.Если загрузить выписку нужно прямо сейчас, а программиста нет рядом для внесения правок в код, можно воспользоваться ручным редактированием файла выгрузки. Этот способ подходит, если документов в выписке немного.
Разберем этот алгоритм по шагам:
kl_to_1c.txt).КодНазПлатежа=.КодВыплат= и Код=, если они присутствуют в файле и вызывают ошибки.Важное предупреждение: Данный способ является временной мерой ("костылем"). При каждой новой выгрузке выписки из банка процедуру придется повторять заново. Кроме того, удаление кодов выплат может быть нежелательным, если вы загружаете зарплатные реестры, где эти коды важны для корректного учета удержаний банком.
Мы выяснили, что незаполнение назначения платежа и НДС в «1С:Бухгалтерия 2.0» — это следствие защитной реакции старого программного кода на новые стандарты обмена данными, введенные ЦБ РФ. Наиболее системным и правильным решением является обновление конфигурации или создание внешней исправленной обработки обмена. Надеемся, что наши инструкции помогут вам оперативно восстановить работоспособность интеграции с банками!