В конфигурациях на платформе 1С:Предприятие 8.3, таких как Зарплата и управление персоналом 3.1, ERP Управление предприятием 2 или Комплексная автоматизация 2, учет взаиморасчетов с сотрудниками ведется в специализированных регистрах. Одним из ключевых является регистр накопления РегистрНакопления.НачисленияУдержанияПоСотрудникам. Часто перед разработчиком встает задача: как из всего многообразия записей (зарплата, премии, отпуска, удержания) выделить именно суммы подоходного налога (НДФЛ). Рассмотрим этот процесс подробно, проанализируем структуру данных и разберем наиболее корректные способы написания запроса.
Для начала разберем, как именно НДФЛ попадает в этот регистр. В отличие от справочников «Начисления» или «Удержания», которые создаются пользователями, НДФЛ является предопределенной системной сущностью. В регистре НачисленияУдержанияПоСотрудникам за тип операции отвечает измерение НачислениеУдержание. Это поле имеет составной тип, который может включать:
Начисления;Удержания;ВидыОсобыхНачисленийИУдержаний.Именно в перечислении ВидыОсобыхНачисленийИУдержаний хранятся системные идентификаторы для НДФЛ.
Проанализируем самый простой и очевидный способ — использование фильтра по конкретным значениям перечисления в секции ГДЕ. Рассмотрим пример кода запроса, который собирает суммы основного НДФЛ и налога с превышения (так называемый «налог для богатых» со ставки 15%):
ВЫБРАТЬ
НачисленияУдержания.Сотрудник КАК Сотрудник,
НачисленияУдержания.Период КАК Период,
НачисленияУдержания.Сумма КАК СуммаНДФЛ
ИЗ
РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержания
ГДЕ
НачисленияУдержания.НачислениеУдержание В (
ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.НДФЛ),
ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.НДФЛСПревышения)
)
Этот вариант является рабочим, однако он требует ручного расширения списка, если в вашей базе появляются другие виды налога (например, налог с дивидендов или доначисления по проверкам). Выясним, как сделать запрос более универсальным.
В современных версиях конфигураций 1С (ЗУП 3.1.x) в регистре присутствует поле (измерение или реквизит, в зависимости от релиза) ГруппаНачисленияУдержанияВыплаты. Это поле позволяет классифицировать записи по их экономическому смыслу. Для всех записей, связанных с подоходным налогом, система устанавливает значение УдержаноНДФЛ из перечисления ГруппыНачисленияУдержанияВыплаты.
Посмотрим на пример более надежного запроса:
ВЫБРАТЬ
НачисленияУдержания.ФизическоеЛицо КАК ФизическоеЛицо,
СУММА(НачисленияУдержания.Сумма) КАК Сумма
ИЗ
РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержания
ГДЕ
НачисленияУдержания.ГруппаНачисленияУдержанияВыплаты = ЗНАЧЕНИЕ(Перечисление.ГруппыНачисленияУдержанияВыплаты.УдержаноНДФЛ)
СГРУППИРОВАТЬ ПО
НачисленияУдержания.ФизическоеЛицо
Преимущества этого подхода: нам не нужно перечислять все виды НДФЛ (дивиденды, превышение, обычный, прочие доходы). Система сама пометит их нужной группой при проведении документов начисления зарплаты. Для детального анализа и проверки сумм налога в расчетных документах можно использовать отчет для тестирования и расшифровки НДФЛ.
Проанализируем ситуацию с данными более глубоко. Нужно четко понимать разницу между исчисленным и удержанным налогом:
РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Разберем также вопрос знаков сумм. В регистре НачисленияУдержанияПоСотрудникам суммы НДФЛ обычно записываются с положительным знаком, так как они уменьшают сумму к выплате. Однако в случае возвратов налога или сторнирования начислений могут появляться отрицательные записи. При суммировании в запросе СУММА(Сумма) эти знаки будут учтены корректно, что даст итоговое влияние на взаиморасчеты. Для автоматической свертки отрицательного дохода и сопоставления исчисленного налога с удержанным можно использовать инструмент для проверки и корректировки 6-НДФЛ.
Если вы все же решили использовать первый способ с перечислением конкретных типов, убедитесь, что вы учли все возможные варианты в современных конфигурациях. Проанализируем список значений Перечисление.ВидыОсобыхНачисленийИУдержаний, которые относятся к НДФЛ:
НДФЛ — основной налог (13%);НДФЛСПревышения — налог с суммы свыше 5 млн руб. (15%);НДФЛДивиденды — налог с доходов от участия;НДФЛДивидендыСПревышения — налог с дивидендов свыше порога;НДФЛПрочиеДоходы — налог с доходов по договорам ГПХ и прочим операциям;НДФЛДоплатаПоРезультатамПроверки — корректировки налоговых органов.Именно поэтому использование фильтра по ГруппаНачисленияУдержанияВыплаты, рассмотренного выше, является более «кошерным» и защищенным от ошибок при обновлении программы или изменении законодательства.
Поскольку поле НачислениеУдержание имеет составной тип, при сравнении со ссылочными типами (справочниками) в более сложных задачах рекомендуется использовать оператор ССЫЛКА. Однако в случае с перечислениями конструкция ЗНАЧЕНИЕ(...) работает эффективно и позволяет однозначно типизировать фильтр. Выясним это на примере:
ВЫБРАТЬ
НачисленияУдержания.Сотрудник,
НачисленияУдержания.Сумма
ИЗ
РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержания
ГДЕ
НачисленияУдержания.НачислениеУдержание ССЫЛКА Перечисление.ВидыОсобыхНачисленийИУдержаний
И НачисленияУдержания.НачислениеУдержание В (ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.НДФЛ))
Такой подход гарантирует, что запрос не будет пытаться сравнивать значения разных типов впустую, хотя для современных СУБД это не является критичным ограничением производительности при работе с небольшими объемами данных.