Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 июл 2022, 09:31

Неправильно считает НДФЛ

Автор Дмитрий357, 12 ноя 2021, 17:37

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий357

Добрый день! Кто может, подскажите пжл. Значит задача такая. Создать вид расчета НДФЛ. Он рассчитывается по базе от всех начислений за текущий месяц, кроме него самого, и равен 13% от базы.
Я немного отошел от задачи. Создал отдельный план видов расчетов и регистр расчета Удержания (зависит от базы по периоду действия), и создал предопределенный элемент НДФЛ, рассчитываемы по базе от Оклада и Премии (у меня в базе по одному виду начисления: оклад - основной вид начисления, премия - дополнительный вид начисления). Написал код. При проверке в ручном режиме оказалось идет неправильный подсчет НДФЛ. Вот код процедуры Обработки проведения в документе НачислениеЗарплаты:

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

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

//Расчет Оклада
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
| ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниПериодДействия, 0) КАК ПланДни,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниФактическийПериодДействия, 0) КАК ФактДни
|ПОМЕСТИТЬ ВТ_ДанныеГрафика
|ИЗ
| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
| Регистратор = &Ссылка
| И ВидРасчета = &Оклад) КАК ОсновныеНачисленияДанныеГрафика
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ДанныеГрафика.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ОкладыСотрудниковСрезПоследних.Оклад, 0) КАК Оклад,
| ВТ_ДанныеГрафика.ПланДни КАК ПланДни,
| ВТ_ДанныеГрафика.ФактДни КАК ФактДни
|ИЗ
| ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыСотрудников.СрезПоследних(
| &Дата,
| Сотрудник В
| (ВЫБРАТЬ
| ВТ_ДанныеГрафика.Сотрудник КАК Сотрудник
| ИЗ
| ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика)) КАК ОкладыСотрудниковСрезПоследних
| ПО ВТ_ДанныеГрафика.Сотрудник = ОкладыСотрудниковСрезПоследних.Сотрудник";

Запрос.УстановитьПараметр("Дата", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("Оклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Для Каждого СтрДвижение Из Движения.ОсновныеНачисления Цикл
Если ВыборкаДетальныеЗаписи.Оклад=0 Тогда
Сообщить ("Оклад для сотрудника "+ВыборкаДетальныеЗаписи.Сотрудник+" не задан");
Отказ=Истина;
КонецЕсли;
ВыборкаДетальныеЗаписи.Сбросить();
ВыборкаДетальныеЗаписи.НайтиСледующий(СтрДвижение.НомерСтроки, "НомерСтроки");
СтрДвижение.Факт=ВыборкаДетальныеЗаписи.ФактДни;
СтрДвижение.Результат=ВыборкаДетальныеЗаписи.ФактДни/ВыборкаДетальныеЗаписи.ПланДни*ВыборкаДетальныеЗаписи.Оклад;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Движения.ОсновныеНачисления.Записать(,Истина);

Движения.ДополнительныеНачисления.Записывать=Истина;
Для Каждого ТекСтрокаНачисленияДоп Из НачисленияДоп Цикл
Движение2=Движения.ДополнительныеНачисления.Добавить();
Движение2.Сторно=Ложь;
ЗаполнитьЗначенияСвойств(Движение2, ТекСтрокаНачисленияДоп);
Движение2.ВидРасчета=ТекСтрокаНачисленияДоп.ВидНачисления;
Движение2.ПериодРегистрации=Дата;
Если Движение2.ВидРасчета=ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда
ПрошлыйМесяц=ДобавитьМесяц(Дата, -1);
Движение2.БазовыйПериодНачало=НачалоМесяца(ПрошлыйМесяц);
Движение2.БазовыйПериодКонец=КонецМесяца(ПрошлыйМесяц);
Иначе
Движение2.БазовыйПериодНачало=НачалоМесяца(Дата);
Движение2.БазовыйПериодКонец=КонецМесяца(Дата);
КонецЕсли;
КонецЦикла;
Движения.ДополнительныеНачисления.Записать();

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// Расчет Премии
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза, 0) КАК РезультатБаза,
| ЕСТЬNULL(ОсновныеНачисления.РазоваяПремияПодарок, 0) КАК РазоваяПремияПодарок
|ИЗ
| РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(
| &МассивИзмерений,
| &МассивИзмерений,
| ,
| Регистратор = &Ссылка
| И ВидРасчета = &Премия) КАК ДополнительныеНачисленияБазаОсновныеНачисления
| ПО ОсновныеНачисления.Сотрудник = ДополнительныеНачисленияБазаОсновныеНачисления.Сотрудник
|ГДЕ
| ОсновныеНачисления.Регистратор = &Ссылка";

МассивИзмерений=Новый Массив;
МассивИзмерений.Добавить("Сотрудник");
Запрос.УстановитьПараметр("МассивИзмерений", МассивИзмерений);
Запрос.УстановитьПараметр("Премия", ПланыВидовРасчета.ДополнительныеНачисления.Премия);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Для Каждого СтрДвижение Из Движения.ДополнительныеНачисления Цикл
ВыборкаДетальныеЗаписи.Сбросить();
Если ВыборкаДетальныеЗаписи.НайтиСледующий(СтрДвижение.НомерСтроки, "НомерСтроки") Тогда
СтрДвижение.Результат=СтрДвижение.Размер/100*(ВыборкаДетальныеЗаписи.РезультатБаза+ВыборкаДетальныеЗаписи.РазоваяПремияПодарок);
КонецЕсли;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Движения.ДополнительныеНачисления.Записать();

Движения.Удержания.Записывать=Истина;
Для Каждого ТекСтрокаУдержания Из Удержания Цикл
Движение3=Движения.Удержания.Добавить();
Движение3.Сторно=Ложь;
ЗаполнитьЗначенияСвойств(Движение3, ТекСтрокаУдержания);
Движение3.ВидРасчета=ТекСтрокаУдержания.ВидУдержания;
Движение3.ПериодРегистрации=Дата;
Если Движение3.ВидРасчета=ПланыВидовРасчета.Удержания.НДФЛ Тогда
ПрошлыйМесяц=ДобавитьМесяц(Дата, -1);
Движение3.БазовыйПериодНачало=НачалоМесяца(ПрошлыйМесяц);
Движение3.БазовыйПериодКонец=КонецМесяца(ПрошлыйМесяц);
Иначе
Движение3.БазовыйПериодНачало=НачалоМесяца(Дата);
Движение3.БазовыйПериодКонец=КонецМесяца(Дата);
КонецЕсли;
КонецЦикла;
Движения.Удержания.Записать();

//Расчет НДФЛ
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Удержания.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ОсновныеНачисления.РазоваяПремияПодарок, 0) КАК РазоваяПремияПодарок,
| ЕСТЬNULL(УдержанияБазаДополнительныеНачисления.РезультатБаза, 0) + ЕСТЬNULL(УдержанияБазаОсновныеНачисления.РезультатБаза, 0) КАК СуммаБазы
|ИЗ
| РегистрРасчета.Удержания КАК Удержания
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Удержания.БазаДополнительныеНачисления(
| &МассивИзмерений,
| &МассивИзмерений,
| ,
| Регистратор = &Ссылка
| И ВидРасчета = &НДФЛ) КАК УдержанияБазаДополнительныеНачисления
| ПО Удержания.НомерСтроки = УдержанияБазаДополнительныеНачисления.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Удержания.БазаОсновныеНачисления(
| &МассивИзмерений,
| &МассивИзмерений,
| ,
| Регистратор = &Ссылка
| И ВидРасчета = &НДФЛ) КАК УдержанияБазаОсновныеНачисления
| ПО Удержания.НомерСтроки = УдержанияБазаОсновныеНачисления.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления
| ПО Удержания.Сотрудник = ОсновныеНачисления.Сотрудник
|ГДЕ
| Удержания.Регистратор = &Ссылка
| И ОсновныеНачисления.Регистратор = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

МассивИзмерений=Новый Массив;
МассивИзмерений.Добавить("Сотрудник");
Запрос.УстановитьПараметр("МассивИзмерений", МассивИзмерений);
Запрос.УстановитьПараметр("НДФЛ", ПланыВидовРасчета.Удержания.НДФЛ);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Для Каждого СтрДвижение Из Движения.Удержания Цикл
ВыборкаДетальныеЗаписи.Сбросить();
Если ВыборкаДетальныеЗаписи.НайтиСледующий(СтрДвижение.НомерСтроки, "НомерСтроки") Тогда
СтрДвижение.Размер=13;
СтрДвижение.Результат=(ВыборкаДетальныеЗаписи.РазоваяПремияПодарок+ВыборкаДетальныеЗаписи.СуммаБазы)*СтрДвижение.Размер/100;
КонецЕсли;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Движения.Удержания.Записать();
КонецПроцедуры

alexandr_ll

Дмитрий357, А в чем неправильность?

Геннадий на Оби


Геннадий на Оби

НДФЛ зависит от времени, страны и др
А в вопросе надо бы и версии конфигурации указывать и откуда как (и из каких версий) взят код 
Чего в вопросе и близко не обозначено!

В РФ НДФЛ менялся:
Цитирую из поска в интернете:
До 2021 года, вне зависимости от дохода граждан, ставка налога на доходы физических лиц (НДФЛ) составляла 13%. С 2021 года вводится повышенный НДФЛ — 15% — для доходов свыше ₽5 млн в год. При этом для доходов до ₽5 млн ставка будет составлять 13%. При расчете налогооблагаемой базы будут суммироваться все источники дохода гражданина.

Дмитрий357

alexandr_ll, Выдает неправильное числовое значение. Я проверял в ручную, с помощью калькулятора. 1С:Предприятие 8.3, учебная версия (8.3.14.1694), страна Россия. Хотя это не имеет значение. Стоит задача в конфигураторе создать вид расчета НДФЛ. Он рассчитывается по базе от всех начислений за текущий месяц, кроме него самого, и равен 13% от базы.
И далее как я писал в начале.

Дмитрий357

Геннадий ОбьГЭС, Учебная версия программы. Тупо стоит задача создать вид расчета НДФЛ. Он рассчитывается по базе от всех начислений за текущий месяц, кроме него самого, и равен 13% от базы.
И далее как я писал в начале. Не надо мне этих выдержек из нпа пжл.

alexandr_ll

Дмитрий357, Как вы считаете на калькуляторе и как считает программа? Проверьте в отладчике этапы расчета

Геннадий на Оби

Я не понял - в какой программе?
Версия и наименование?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск