Почему в «1С:Бухгалтерия 2.0» перестали заполняться назначение платежа и НДС при загрузке выписок и как это исправить?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Приветствуем вас, уважаемые коллеги! В этой статье мы подробно разберем техническую проблему, с которой столкнулись многие пользователи и разработчики, работающие со старыми конфигурациями на платформе 1С (в частности, «Бухгалтерия предприятия» редакции 2.0, «Управление производственным предприятием 1.3» и другими решениями на обычных формах). Суть проблемы заключается в том, что при импорте банковской выписки в программе перестают заполняться поля «Назначение платежа» и ставки/суммы «НДС», либо загрузка прерывается критической ошибкой.

Мы выясним глубинную причину этого сбоя, проанализируем изменения в законодательстве, вызвавшие его, и рассмотрим несколько практических способов решения — от простого обновления до ручной правки программного кода в конфигураторе.

Давайте разберем эту ситуацию по шагам.


Выясняем причину: что изменилось в форматах обмена?

Первым делом проанализируем хронологию событий. Сбой в загрузке выписок у большинства пользователей начал проявляться в конце мая — начале июня 2020 года. Это напрямую связано со вступлением в силу изменений в Федеральном законе № 229-ФЗ «Об исполнительном производстве» (с изменениями от 1 июня 2020 года).

Согласно новым требованиям Центрального Банка РФ, при выплате доходов физическим лицам (заработная плата, социальные пособия, дивиденды и т.д.) работодатели обязаны указывать в платежных документах специальный код вида дохода (значения от 1 до 5 в зависимости от характера выплаты). Этот код заносится в поле 20 «Наз. пл.» (Назначение платежа кодированное).

Для реализации этого требования Банк России обновил стандарт обмена данными между банковскими системами («Клиент-Банк») и учетными решениями 1С. В текстовый файл обмена (традиционно имеющий имя kl_to_1c.txt) были добавлены новые служебные теги для передачи этого кода:

Поскольку конфигурация «Бухгалтерия предприятия 2.0» к 2020 году уже находилась на ограниченной поддержке (основные силы разработчиков были направлены на редакцию 3.0), встроенный парсер текстовых файлов выписок не ожидал встретить в файле новые, неизвестные ему переменные.

Проанализируем, как именно реагирует система на появление новых тегов в зависимости от действий пользователя:

  1. Критический сбой загрузки: Натыкаясь на строку вида КодНазПлатежа=1, алгоритм загрузки не находит этот реквизит в списке разрешенных и аварийно прерывает работу с ошибкой: «Неверный реквизит платежного документа строка...».
  2. Пропуск «Назначения платежа» и «НДС»: Если администраторы или программисты пытались наспех «заглушить» эту ошибку в конфигураторе (например, просто пропустив проверку неизвестных строк или удалив строки из файла вручную), нарушалась строгая структура чтения текстового блока. В результате парсер сбивался по индексам строк, пропускал идущие следом реквизиты (которые в файле выгрузки обычно располагаются ниже строки кода платежа) и оставлял поля назначения платежа и ставок НДС пустыми.
  3. Сдвиг полей при работе с УФК (Казначейством): В случае обмена с Федеральным казначейством форматы меняются по своим внутренним регламентам. При изменении структуры казначейских файлов старый парсер, считывающий данные по жестко заданным колонкам или смещениям, начинает импортировать пустые ячейки вместо реального текста назначения платежа.

Способ 1. Обновление конфигурации (Официальное решение)

Самый простой и безопасный способ исправить проблему — обновить конфигурацию до актуального релиза. Несмотря на то, что редакция 2.0 устарела, фирма 1С выпустила соответствующие обновления для поддержки изменений законодательства (исправления появились в релизах, выпущенных после июня 2020 года, например, начиная с 2.0.66.111 и выше).

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


Способ 2. Доработка парсера в Конфигураторе (Для нетиповых баз)

Если ваша база данных сильно доработана, находится на замке и оперативно обновить ее до актуального релиза не представляется возможным, вам потребуется самостоятельно научить парсер обрабатывать новые теги.

Давайте разберем по шагам, как внести изменения в код обработки загрузки через Конфигуратор.

Шаг 1. Поиск нужного объекта

В конфигурациях на обычных формах за обмен с банками отвечает встроенная обработка. Откройте Конфигуратор, перейдите в ветку Обработки и найдите обработку с именем КлиентБанк (или, в зависимости от версии, ОбменЭлектроннымиДокументамиСБанком).

Откройте модуль объекта этой обработки.

Шаг 2. Расширение списка разрешенных реквизитов

Найдите в тексте модуля переменную (или функцию), которая отвечает за инициализацию списка допустимых реквизитов платежного документа. Обычно это текстовая строка, перечисляющая необязательные реквизиты через запятую. Имя переменной может выглядеть как РеквизитыПлДок_НазначениеНеОбязательные или иметь схожее по смыслу название.

Посмотрим на пример того, как выглядит эта строка до изменений:


РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,КодОКПО,СрочныйПлатеж";

Для того чтобы система не выдавала ошибку при встрече с новыми тегами ЦБ, мы должны дописать их в конец этой строки через запятую. Модифицируем строку следующим образом:


РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,КодОКПО,СрочныйПлатеж,КодВыплат,КодНазПлатежа,Код";

Шаг 3. Добавление колонок во временную таблицу загрузки

Далее найдите процедуру, которая создает структуру колонок для таблицы, куда загружаются данные из файла (часто эта таблица называется ТаблицаДокументов или ТабПоля). Нам необходимо объявить новые колонки для хранения считанных кодов, чтобы при обходе строк файла данные корректно распределялись по структуре, не вызывая смещения индексов.

Найдите фрагмент кода, где инициализируются колонки (например, там, где создается колонка для НазначениеПлатежа), и добавьте по аналогии новые строки:


// Добавление стандартных колонок
СоздатьКолонкуВТаблице(Таб, ТабПоле, "НазначениеПлатежа", Т_Строка, "Назначение платежа", Видимая);

// Добавляем новые колонки для корректного парсинга новых тегов
СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодВыплат", Т_Строка, "КодВыплат", НеВидимая);
СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодНазПлатежа", Т_Строка, "КодНазПлатежа", НеВидимая);
СоздатьКолонкуВТаблице(Таб, ТабПоле, "Код", Т_Строка, "Код идентификатора", НеВидимая);

Обратите внимание: Если в вашей конфигурации используется функция ЗаполнитьРеквизитыДокумента(), убедитесь, что новые реквизиты просто игнорируются при создании документов (если они не требуются для проведения) или корректно записываются в предназначенные для них реквизиты платежного поручения (в новых релизах для этого появились специальные поля).


Способ 3. Использование внешней обработки обмена

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

  1. В Конфигураторе найдите встроенную обработку КлиентБанк.
  2. Нажмите на ней правой кнопкой мыши и выберите пункт «Сохранить как внешнюю обработку...». Сохраните файл с расширением .epf на жесткий диск.
  3. Откройте сохраненный файл обработки в Конфигураторе как внешний отчет/обработку.
  4. Выполните изменения программного кода, описанные во Втором способе.
  5. Сохраните изменения.
  6. Запускайте данную обработку в режиме «1С:Предприятие» через меню Файл — Открыть, либо зарегистрируйте ее в справочнике «Дополнительные отчеты и обработки» для удобства пользователей.

Способ 4. Временный обходной путь (без программирования)

Если загрузить выписку нужно прямо сейчас, а программиста нет рядом для внесения правок в код, можно воспользоваться ручным редактированием файла выгрузки. Этот способ подходит, если документов в выписке немного.

Разберем этот алгоритм по шагам:

  1. Выгрузите файл выписки из вашего Клиент-Банка (обычно это файл kl_to_1c.txt).
  2. Откройте этот файл с помощью любого текстового редактора (например, стандартного Блокнота или Notepad++).
  3. Вызовите окно поиска и замены с помощью сочетания клавиш Ctrl + H.
  4. В поле «Найти» введите текст: КодНазПлатежа=.
  5. Поле «Заменить на» оставьте абсолютно пустым.
  6. Нажмите кнопку «Заменить все». Это действие удалит все упоминания нового реквизита из файла, вернув его структуру к старому формату.
  7. Повторите операцию замены для тегов КодВыплат= и Код=, если они присутствуют в файле и вызывают ошибки.
  8. Сохраните изменения в файле и выполните загрузку в 1С стандартным способом.

Важное предупреждение: Данный способ является временной мерой ("костылем"). При каждой новой выгрузке выписки из банка процедуру придется повторять заново. Кроме того, удаление кодов выплат может быть нежелательным, если вы загружаете зарплатные реестры, где эти коды важны для корректного учета удержаний банком.


Резюме

Мы выяснили, что незаполнение назначения платежа и НДС в «1С:Бухгалтерия 2.0» — это следствие защитной реакции старого программного кода на новые стандарты обмена данными, введенные ЦБ РФ. Наиболее системным и правильным решением является обновление конфигурации или создание внешней исправленной обработки обмена. Надеемся, что наши инструкции помогут вам оперативно восстановить работоспособность интеграции с банками!

← На главную