С изменениями в законодательстве РФ бухгалтеры и программисты часто сталкиваются с необходимостью оперативного обновления учетных систем. Одним из наиболее резонансных изменений стало внедрение обязательного указания кодов видов доходов в платежных поручениях (поле 20 «Наз. пл.») и сумм удержаний по исполнительным листам (поле 24 «Назначение платежа») в соответствии с Федеральным законом № 229-ФЗ «Об исполнительном производстве».
Для современных и поддерживаемых конфигураций фирма 1С выпустила штатные обновления. Однако огромное количество предприятий продолжают вести учет в устаревших и снятых с поддержки программных продуктах, таких как 1С:Комплексная автоматизация редакции 1.1 (КА 1.1) и 1С:Зарплата и управление персоналом редакции 2.5 (ЗУП 2.5) версии ПРОФ. В этой статье мы подробно разберем, как решить эту проблему техническим путем, используя конфигуратор и принципы обратной разработки (реверс-инжиниринга).
Перед тем как приступать к программированию, проанализируем, какие именно данные мы должны передавать в банк. Требования Банка России разделены на два основных параметра в платежном документе:
//ИП//сумма_удержания (например, //ИП//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 (Зарплата и иные доходы с ограничением взыскания)Код2 (Периодические выплаты, на которые не может быть обращено взыскание без ограничений)Код3 (Периодические выплаты, на которые не может быть обращено взыскание с исключениями)Код4 (Единовременные выплаты, на которые не может быть обращено взыскание без ограничений)Код5 (Единовременные выплаты, на которые не может быть обращено взыскание с исключениями)После создания перечисления необходимо связать его с платежными документами. Нам потребуется доработать документ ПлатежноеПоручениеИсходящее.
Добавим в документ ПлатежноеПоручениеИсходящее новый реквизит:
ВидДоходаИсполнительногоПроизводстваСсылка.ВидыДоходовИсполнительногоПроизводстваОткроем основную форму документа ПлатежноеПоручениеИсходящее (ФормаДокумента). Нам нужно разместить поле для выбора кода на форме, чтобы бухгалтер мог вручную или автоматически указывать нужный код.
Разберем процесс настройки интерфейса:
ВидДоходаИсполнительногоПроизводства.
Процедура УстановитьВидимостьКодаИсполнительногоПроизводства()
// Код нужен для операций: ПеречислениеЗаработнойПлаты, РасчетыСКонтрагентами (если физлицо), ПрочееСписание
ДоступностьКода = (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПеречислениеЗаработнойПлаты)
Или (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.РасчетыСКонтрагентами)
Или (ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПрочееСписаниеДенежныхСредств);
ЭлементыФормы.ВидДоходаИсполнительногоПроизводства.Видимость = ДоступностьКода;
ЭлементыФормы.ВидДоходаИсполнительногоПроизводства.Доступность = ДоступностьКода;
КонецПроцедуры
Вызов этой процедуры необходимо добавить в обработчик события формы ПриОткрытии(), а также в процедуру обработки смены вида операции ПриИзмененииВидаОперации().
Если у сотрудника были удержания (например, алименты), мы обязаны отразить это в назначении платежа. Посмотрим на пример программного решения, которое автоматически формирует префикс назначения платежа:
Функция СформироватьТекстНазначенияПлатежаСУдержанием(ТекущееНазначение, ДокументСсылка) Экспорт
СуммаУдержания = 0;
// В КА 1.1 и ЗУП 2.5 информацию об удержаниях можно получить из связанных ведомостей
// или документов расчета. Ниже приведен концептуальный алгоритм поиска суммы:
Если ДокументСсылка.ВидОперации = Перечисления.ВидыОперацийДокументаУдержанияИВыплаты.ПеречислениеЗаработнойПлаты Тогда
// Запрос к регистру или табличной части ведомости на выплату зарплаты
СуммаУдержания = ПолучитьСуммуУдержанийПоИсполнительнымЛистам(ДокументСсылка.ВедомостьНаВыплатуЗарплаты);
КонецЕсли;
Если СуммаУдержания > 0 Тогда
// Форматируем сумму в соответствии с правилами Центробанка
СтрокаСуммы = Формат(СуммаУдержания, "ЧЦ=15; ЧДЦ=2; ЧГ=0");
СтрокаСуммы = СтрЗаменить(СтрокаСуммы, ",", "-"); // Замена разделителя при необходимости
ПрефиксИП = "//ИП//" + СтрокаСуммы + "//";
// Возвращаем измененное назначение платежа
Возврат ПрефиксИП + " " + ТекущееНазначение;
КонецЕсли;
Возврат ТекущееНазначение;
КонецФункции
Заполнение реквизитов внутри базы 1С — это только половина дела. Самое важное — выгрузить эти сведения в текстовый файл формата 1С/Клиент-Банк (обычно это файл 1c_to_kl.txt). За обмен с банком отвечает встроенная обработка ВыгрузкаЗагрузкаДанныхКлиентБанка. Ее код также необходимо скорректировать.
Выполним поиск процедуры выгрузки платежного поручения в модуле обработки Клиент-Банка. Обычно она называется Выгрузить_ПлатежноеПоручениеИсходящее или аналогично. Нам нужно найти место, где формируются текстовые строки файла экспорта, и добавить выгрузку значения поля 20. В файле обмена за это поле отвечает тег КодНазначенияПлатежа.
Проанализируем пример доработки кода обработки:
// Внедряем выгрузку реквизита "КодНазначенияПлатежа"
Если ПолучитьСвойстваОбъектаИлиРеквизита(ДокументОбъект, "ВидДоходаИсполнительногоПроизводства") Тогда
ЗначениеКода = "";
Если ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код1 Тогда
ЗначениеКода = "1";
ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код2 Тогда
ЗначениеКода = "2";
ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код3 Тогда
ЗначениеКода = "3";
ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код4 Тогда
ЗначениеКода = "4";
ИначеЕсли ДокументОбъект.ВидДоходаИсполнительногоПроизводства = Перечисления.ВидыДоходовИсполнительногоПроизводства.Код5 Тогда
ЗначениеКода = "5";
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеКода) Тогда
ФайлОтправки.ЗаписатьСтроку("КодНазначенияПлатежа=" + ЗначениеКода);
КонецЕсли;
КонецЕсли;
Обратите внимание: если вы не хотите вносить изменения в типовой код обработки обмена (который может быть зашит в конфигурацию), вы можете скачать актуальную внешнюю обработку Клиент-Банка с профильных ресурсов (например, Инфостарт) и подключить ее как внешнюю обработку в справочнике «Дополнительные внешние обработки». Это существенно сэкономит время и позволит избежать глобальных правок общего модуля конфигурации.
Мы успешно разобрали, как решить проблему устаревших баз 1С без дорогостоящего и сложного перехода на новые редакции. После проведения всех доработок обязательно запустите систему в режиме «Предприятие» и протестируйте весь цикл:
КодНазначенияПлатежа=1 и правильность заполнения строки назначения платежа.Такой подход позволяет продлить жизнь конфигурациям 1С:Комплексная автоматизация 1.1 и 1С:ЗУП 2.5, сохраняя полную работоспособность бизнес-процессов компании и соответствие актуальным нормам законодательства.