Как реализовать новые коды доходов в платежных поручениях для устаревших конфигураций 1С:КА 1.1 и 1С:ЗУП 2.5?

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

С изменениями в законодательстве РФ бухгалтеры и программисты часто сталкиваются с необходимостью оперативного обновления учетных систем. Одним из наиболее резонансных изменений стало внедрение обязательного указания кодов видов доходов в платежных поручениях (поле 20 «Наз. пл.») и сумм удержаний по исполнительным листам (поле 24 «Назначение платежа») в соответствии с Федеральным законом № 229-ФЗ «Об исполнительном производстве».

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

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

Перед тем как приступать к программированию, проанализируем, какие именно данные мы должны передавать в банк. Требования Банка России разделены на два основных параметра в платежном документе:

  1. Поле 20 («Наз. пл.»): Сюда должен передаваться цифровой код вида дохода физлица. С 2022 года действует пятизначная классификация (коды от 1 до 5), разделяющая периодические и единовременные выплаты, а также ограничивающая возможность взыскания долгов банками.
  2. Поле 24 («Назначение платежа»): При выплате дохода, с которого работодатель уже произвел удержание по исполнительному листу, необходимо в специальном формате указывать удержанную сумму. Формат жестко регламентирован банками: //ИП//сумма_удержания (например, //ИП//1520-50).

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

Определим стратегию решения для разных конфигураций

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

1С:Зарплата и управление персоналом 2.5: Версия ПРОФ давно снята с поддержки. Но если у вас установлена версия КОРП, то для нее обновления продолжали выпускаться. Как справедливо замечено в материалах форума, вы можете штатно обновиться до релиза 2.5.152.1 и выше (вплоть до финальных версий линейки 2.5 КОРП), где данный функционал уже реализован разработчиками 1С. Если же у вас обычная версия ПРОФ, вам придется переносить изменения вручную или конвертировать базу в КОРП.

1С:Комплексная автоматизация 1.1: Данная конфигурация полностью снята с поддержки. Последний официальный релиз 1.1.115.1 вышел задолго до введения пяти кодов доходов. Здесь единственным выходом является снятие конфигурации с замка (разрешение изменений) и самостоятельное написание программного кода.

Для реализации доработки мы применим метод "донорства". В качестве донора мы возьмем конфигурацию 1С:Бухгалтерия предприятия редакции 2.0 (БП 2.0). Фирма 1С поддерживала БП 2.0 дольше других старых решений, и в ней реализованы как новые коды доходов, так и механизмы их выгрузки. Поскольку БП 2.0, КА 1.1 и ЗУП 2.5 построены на одной архитектурной платформе и используют классические Обычные формы, перенос кода будет максимально простым и понятным.

Разберем по шагам: техническая реализация в КА 1.1 и ЗУП 2.5

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

Шаг 1: Создание метаданных (Перечисление и Реквизиты)

Откроем конфигуратор вашей базы данных. В первую очередь нам необходимо создать объект метаданных, который будет хранить перечень кодов доходов. Создадим новое перечисление:

Имя перечисления: ВидыДоходовИсполнительногоПроизводства

Добавим в него следующие значения (согласно классификации Банка России):

После создания перечисления необходимо связать его с платежными документами. Нам потребуется доработать документ ПлатежноеПоручениеИсходящее.

Добавим в документ ПлатежноеПоручениеИсходящее новый реквизит:

Шаг 2: Доработка экранных форм документа

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

Разберем процесс настройки интерфейса:

  1. Добавим на форму элемент управления ПолеВыбора (или ПолеВвода) и свяжем его с созданным реквизитом ВидДоходаИсполнительногоПроизводства.
  2. Поле целесообразно разместить рядом с реквизитами платежа (например, рядом с суммой или назначением платежа).
  3. Настроим видимость этого поля. Код исполнительного производства должен указываться только при перечислении денежных средств физическим лицам. Проанализируем виды операций документа. Нам нужно написать несложную процедуру управления видимостью элемента в модуле формы документа:

Процедура УстановитьВидимостьКодаИсполнительногоПроизводства()
    
    // Код нужен для операций: ПеречислениеЗаработнойПлаты, РасчетыСКонтрагентами (если физлицо), ПрочееСписание
    ДоступностьКода = (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПеречислениеЗаработнойПлаты) 
                      Или (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.РасчетыСКонтрагентами)
                      Или (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПрочееСписаниеДенежныхСредств);
                      
    ЭлементыФормы.ВидДоходаИсполнительногоПроизводства.Видимость = ДоступностьКода;
    ЭлементыФормы.ВидДоходаИсполнительногоПроизводства.Доступность = ДоступностьКода;
    
КонецПроцедуры

Вызов этой процедуры необходимо добавить в обработчик события формы ПриОткрытии(), а также в процедуру обработки смены вида операции ПриИзмененииВидаОперации().

Шаг 3: Автоматическое заполнение поля 24 (удержанная сумма)

Если у сотрудника были удержания (например, алименты), мы обязаны отразить это в назначении платежа. Посмотрим на пример программного решения, которое автоматически формирует префикс назначения платежа:


Функция СформироватьТекстНазначенияПлатежаСУдержанием(ТекущееНазначение, ДокументСсылка) Экспорт
    
    СуммаУдержания = 0;
    
    // В КА 1.1 и ЗУП 2.5 информацию об удержаниях можно получить из связанных ведомостей 
    // или документов расчета. Ниже приведен концептуальный алгоритм поиска суммы:
    Если ДокументСсылка.ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПеречислениеЗаработнойПлаты Тогда
        // Запрос к регистру или табличной части ведомости на выплату зарплаты
        СуммаУдержания = ПолучитьСуммуУдержанийПоИсполнительнымЛистам(ДокументСсылка.ВедомостьНаВыплатуЗарплаты);
    КонецЕсли;
    
    Если СуммаУдержания > 0 Тогда
        // Форматируем сумму в соответствии с правилами Центробанка
        СтрокаСуммы = Формат(СуммаУдержания, "ЧЦ=15; ЧДЦ=2; ЧГ=0");
        СтрокаСуммы = СтрЗаменить(СтрокаСуммы, ",", "-"); // Замена разделителя при необходимости
        
        ПрефиксИП = "//ИП//" + СтрокаСуммы + "//";
        
        // Возвращаем измененное назначение платежа
        Возврат ПрефиксИП + " " + ТекущееНазначение;
    КонецЕсли;
    
    Возврат ТекущееНазначение;
    
КонецФункции

Шаг 4: Доработка модуля обмена с Клиент-Банком

Заполнение реквизитов внутри базы 1С — это только половина дела. Самое важное — выгрузить эти сведения в текстовый файл формата 1С/Клиент-Банк (обычно это файл 1c_to_kl.txt). За обмен с банком отвечает встроенная обработка ВыгрузкаЗагрузкаДанныхКлиентБанка. Ее код также необходимо скорректировать.

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

Проанализируем пример доработки кода обработки:


// Внедряем выгрузку реквизита "КодНазначенияПлатежа"
Если ПолучитьСвойстваОбъектаИлиРеквизита(ДокументОбъект, "ВидДоходаИсполнительногоПроизводства") Тогда
    
    ЗначениеКода = "";
    Если ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код1 Тогда
        ЗначениеКода = "1";
    ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код2 Тогда
        ЗначениеКода = "2";
    ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код3 Тогда
        ЗначениеКода = "3";
    ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код4 Тогда
        ЗначениеКода = "4";
    ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код5 Тогда
        ЗначениеКода = "5";
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ЗначениеКода) Тогда
        ФайлОтправки.ЗаписатьСтроку("КодНазначенияПлатежа=" + ЗначениеКода);
    КонецЕсли;
    
КонецЕсли;

Обратите внимание: если вы не хотите вносить изменения в типовой код обработки обмена (который может быть зашит в конфигурацию), вы можете скачать актуальную внешнюю обработку Клиент-Банка с профильных ресурсов (например, Инфостарт) и подключить ее как внешнюю обработку в справочнике «Дополнительные внешние обработки». Это существенно сэкономит время и позволит избежать глобальных правок общего модуля конфигурации.

Резюме и тестирование результатов

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

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

Такой подход позволяет продлить жизнь конфигурациям 1С:Комплексная автоматизация 1.1 и 1С:ЗУП 2.5, сохраняя полную работоспособность бизнес-процессов компании и соответствие актуальным нормам законодательства.

← На главную