Почему при изменении банковского счета в Заявке на расходование ДС меняется КПП и как это исправить

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

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

Анализ механизмов формирования реквизитов плательщика

Для начала разберем, как система формирует текстовую строку с ИНН и КПП, которую мы видим на форме документа. В типовом решении за это отвечает серверная процедура УстановитьНадписьРеквизитыПлательщика. Проанализируем её код:


&НаСервере
Процедура УстановитьНадписьРеквизитыПлательщика()
    Если ЗначениеЗаполнено(Объект.Организация) Тогда
        НадписьРеквизитыПлательщика = ДенежныеСредстваСервер.НадписьРеквизитыПлательщика(
            Объект.ИННПлательщика, 
            Объект.КПППлательщика, 
            Объект.ТекстПлательщика, 
            ЮрФизЛицо, 
            Объект.ХозяйственнаяОперация
        );
    Иначе
        НадписьРеквизитыПлательщика = "";
    КонецЕсли;
КонецПроцедуры

Проблема заключается в том, что значения Объект.КПППлательщика и Объект.ИННПлательщика не являются статичными. В версии КОРП реализован сложный механизм определения налоговых реквизитов, зависящий от связки «Организация + Подразделение». При изменении банковского счета срабатывает цепочка событий, которая обновляет эти данные.

Выясняем причину смены КПП в версии КОРП

Разберем по шагам, почему КПП меняется именно при выборе счета:

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

Вариант 1: Административное решение через настройку справочников

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

  1. Откроем справочник Банковские счета и найдем счет, при выборе которого меняется КПП.
  2. Проверим поле Подразделение. Если там указано обособленное подразделение, а вы хотите видеть КПП головной организации, попробуйте очистить это поле или указать головное подразделение.
  3. Проверим справочник Регистрации в налоговых органах. Убедимся, что для данного подразделения не задан специфический КПП, который не должен попадать в платежные документы.

Вариант 2: Программная корректировка формирования надписи

Если специфика учета требует, чтобы подразделение в счете было указано, но КПП в заявке всегда оставался «головным», нам придется вмешаться в логику работы формы. Рассмотрим пример кода, который можно внедрить через расширение в процедуру УстановитьНадписьРеквизитыПлательщика:


&НаСервере
Процедура ИмяПрефикса_УстановитьНадписьРеквизитыПлательщика(Объект, НадписьРеквизитыПлательщика, ЮрФизЛицо)
    // Если нам нужно принудительно использовать КПП организации, а не подразделения
    НужныйКПП = Объект.Организация.КПП; 
    
    Если ЗначениеЗаполнено(Объект.Организация) Тогда
        НадписьРеквизитыПлательщика = ДенежныеСредстваСервер.НадписьРеквизитыПлательщика(
            Объект.ИННПлательщика, 
            НужныйКПП, // Используем КПП организации вместо Объект.КПППлательщика
            Объект.ТекстПлательщика, 
            ЮрФизЛицо, 
            Объект.ХозяйственнаяОперация
        );
    КонецЕсли;
КонецПроцедуры

Однако помните, что просто изменить надпись на форме недостаточно — реальное значение КПП хранится в реквизитах объекта, которые потом уходят в документ Списание безналичных денежных средств и далее в выгрузку в банк.

Вариант 3: Использование дополнительного реквизита

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

Выясним, как работает функция формирования строки в общем модуле ДенежныеСредстваСервер. Проанализируем её параметры:


Функция НадписьРеквизитыПлательщика(ИНН, КПП, ТекстКорреспондента, ЮрФизЛицо, ХозяйственнаяОперация) Экспорт
    ШаблонНадписи = НСтр("ru = 'ИНН %1%2, %3'");
    СтрокаИНН = ?(ПустаяСтрока(ИНН), "", СокрЛП(ИНН));
    
    // Система проверяет, нужно ли указывать КПП (например, для платежей в бюджет)
    ТребуетсяУказаниеКПП = (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеречислениеВБюджет);
    
    // Логика формирования строки КПП
    СтрокаКПП = ", " + НСтр("ru = 'КПП'");
    Если Не ЗначениеЗаполнено(КПП) Тогда
        // ... (логика заполнения нулями или пустотой)
    Иначе
        СтрокаКПП = СтрокаКПП + " " + КПП;
    КонецЕсли;
    
    Возврат СтрШаблон(ШаблонНадписи, СтрокаИНН, СтрокаКПП, СокрЛП(ТекстКорреспондента));
КонецФункции

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

Резюме и рекомендации

Подведем итоги нашего исследования:

Таким образом, для решения проблемы необходимо либо привести данные в соответствие с логикой 1С (убрать подразделение из карточки счета), либо точечно переопределить заполнение реквизита КПППлательщика в коде формы документа при событии изменения счета.

← На главную