Как получить КПП подразделения в 1С:ЗУП 3.1: программные и архитектурные способы

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

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

Разберем структуру хранения данных

Проанализируем архитектуру системы. Сведения о постановке подразделения на учет в налоговом органе не являются статичными. Подразделение может сменить ИФНС, сменить КПП или вовсе перестать быть обособленным. Поэтому данные вынесены в отдельную сущность. Для начала выясним основные объекты, участвующие в цепочке:

  1. Справочник ПодразделенияОрганизаций — это наша точка входа (структурная единица).
  2. Регистр сведений ИсторияРегистрацииВНалоговомОргане — здесь хранится связь подразделения с налоговой инспекцией на определенную дату.
  3. Справочник РегистрацииВНалоговомОргане — именно здесь находится искомый реквизит КПП (тип Строка, длина 9).

Важно: Прямая связь существует только для тех подразделений, которые отмечены в программе как обособленные. Если флаг «Это обособленное подразделение» в карточке не установлен, данных в регистре по этому конкретному подразделению не будет. В некоторых случаях может потребоваться специальная обработка для перехода на обособленные подразделения в ЗУП 3.1, чтобы корректно реорганизовать структуру учета.

Рассмотрим программное получение КПП через запрос

Если нам нужно быстро получить данные в конкретном отчете или обработке, проанализируем пример запроса к регистру сведений. Для отладки и написания сложных выборок удобно использовать инструмент консоль запросов ЗУП с поддержкой обращения к методам программного интерфейса. Поскольку регистр является периодическим, мы всегда должны использовать метод СрезПоследних. Если же вам необходимо получить не одну, а несколько актуальных записей, полезно изучить пример, в котором реализован срез последних N записей в СКД.


ВЫБРАТЬ
    ИсторияРегистрации.РегистрацияВНалоговомОргане.КПП КАК КПП
ИЗ
    РегистрСведений.ИсторияРегистрацииВНалоговомОргане.СрезПоследних(&Период, СтруктурнаяЕдиница = &Подразделение) КАК ИсторияРегистрации

Однако этот код сработает только в том случае, если выбранное подразделение само зарегистрировано в ИФНС. Если же это обычный отдел внутри обособленного филиала, нам придется подниматься выше по иерархии. Проанализируем, как это сделать правильно.

Реализация с учетом иерархии и наследования

Посмотрим на ситуацию шире: если отдел не имеет своего КПП, он использует КПП «родительского» подразделения или самой организации. Программный алгоритм должен выглядеть так:

  1. Проверяем регистрацию для текущего подразделения в ИсторияРегистрацииВНалоговомОргане.
  2. Если запись не найдена, берем Подразделение.Родитель и повторяем поиск.
  3. Если дошли до самого верха и ничего не нашли — используем регистрацию самой Организации.

Выясним, как это реализовать с помощью встроенных функций 1С, чтобы не изобретать велосипед. В ЗУП 3.1 предусмотрены общие модули, которые уже учитывают все эти нюансы. Подобные механизмы и другие полезные приемы собраны в справочнике методов конфигурации Зарплата и кадры 3.1.

Использование типовых функций (Рекомендуемый способ)

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

Проанализируем пример кода, который возвращает актуальный КПП на нужную дату:


// Определим параметры: Подразделение и Дата
МассивПодразделений = Новый Массив;
МассивПодразделений.Добавить(ВыбранноеПодразделение);

// Получаем таблицу регистраций через типовой механизм
ТаблицаРегистраций = Справочники.РегистрацииВНалоговомОргане.ДанныеРегистрацииДляСтруктурныхЕдиниц(МассивПодразделений, ТекущаяДата());

Для Каждого СтрокаДанных Из ТаблицаРегистраций Цикл
    НужныйКПП = СтрокаДанных.РегистрацияВНалоговомОргане.КПП;
    Сообщить("Для подразделения " + ВыбранноеПодразделение + " определен КПП: " + НужныйКПП);
КонецЦикла;

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

Особенности версии КОРП

Выясним причину, почему в версии КОРП работа с КПП может быть еще важнее. В КОРП-версии подразделения могут быть выделены на отдельный баланс. В этом случае регистрация в налоговом органе становится обязательным реквизитом для корректной сдачи отчетности 6-НДФЛ. Чтобы оперативно анализировать налоги и взносы по подразделениям, необходимо следить за корректностью этих связей. Если же в отчетах возникли ошибки, можно применить автоматическое исправление 170 строки 6-НДФЛ, чтобы быстро привести данные в порядок.

Подведем итоги

Для успешного получения КПП подразделения в ЗУП 3.1 необходимо помнить следующее:

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

← На главную