Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.239.150.247] |
|
Сообщ.
#1
,
|
|
|
Мне бухгалтер сказал, что 1С неправильно делает вычеты при расчете налога на доходы. Т.е. сотрудника взяли не с начала года, а вычет производится с самого начала.
Например, сотрудника взяли в феврале и начислили ему зарплату за этот месяц 1200 руб. Стандртный вычет составил бы 400 руб. Т.е. 800 руб. подлежало бы налогообложению. А 1С вычитает 800 руб. За январь еще 400 руб. вычитает. Посмотрел в отладчике и точно, в цикле идет отсчет от начала года. Вычеты делаются нарастающим итогом. За январь начисленная зарплата равна нулю, а вычет стабильно 400 руб. В 1С разбираюсь плохо. Все хочу научится, да работа с 1С по совместительству и как придется не способствует этому. Буду рад любым комментариям. Вижу два выхода: - Поставить условие, что когда начисленная зарплата равна 0, вычеты также обнулять. Вызывает сомнения насчет появления ситуации когда это приведет к ошибочному игнорированию вычетов. - Изменить период прогона цикла. Что-то подсказывает, что это строка: БухИт70.ВыполнитьЗапрос(НачГода(ДатаДок),КонецМесяцаДокумента, Сч70,,,2,"Месяц"); которая влияет на цикл Пока БухИт70.ПолучитьПериод() = 1 Цикл Что надо подставить вместо НачГода(ДатаДок) вот вопрос? Ниже приведен текст модуля документа НачислениеЗП (кое-что выкинул) Ах да забыл, может проблема решается без программирования? Перем КонецМесяцаДокумента; Перем ТаблицаНачисления; //_____________________________________________________________________________ Процедура ОбработкаПроведения() глКомментарийПроведения("Начало", Контекст); КонецМесяцаДокумента = КонМесяца(ДатаДок); БухИт70 = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт70.ВключатьСубсчета(1,1); БухИт70.ИспользоватьСубконто(ВидыСубконто.Сотрудники); БухИт70.ВыполнитьЗапрос(НачГода(ДатаДок),КонецМесяцаДокумента, Сч70,,,2,"Месяц"); //не здесь ли устанвливается период? БухИт69 = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт69.ВключатьСубсчета(1,1); БухИт69.ИспользоватьСубконто(); БухИт69.ИспользоватьСубконто(); БухИт69.ВыполнитьЗапрос(НачГода(ДатаДок),КонецМесяцаДокумента, "69.1,69.2,69.3",,,2); ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл ВаловыйДоход = 0; НеОблагается = 0; НалогНаДоходы = 0; --------- УдержанныйНалогНаДоходы = 0; Вычеты = 0; НачисленоИзЧистойПрибыли = 0; НачисленоПособий = 0; --------- ВсегоНачислено = Оклад + НачисленоРК + НачисленоСН; ДоходСпредыдущегоМестаРаботы = ?(ДатаГод(Сотрудник.ДатаПриема)=ДатаГод(ДатаДок), Сотрудник.ВаловыйДоходПредМестоРаб, 0); СчетЗатрат = Сотрудник.СчетЗатрат.Получить(КонецМесяцаДокумента); Если ПустоеЗначение(СчетЗатрат) = 1 Тогда глОшибкаПроведения(Контекст, "Не выбран счет отнесения затрат для сотрудника "+Сотрудник); СтатусВозврата(0); Возврат; КонецЕсли; ЕстьИтоги = БухИт70.ПолучитьСубконто(ВидыСубконто.Сотрудники,,Сотрудник); БухИт70.ВыбратьПериоды(1); Пока БухИт70.ПолучитьПериод() = 1 Цикл //похоже вот этот нехороший цикл НачисленоПособийЗаМесяц = 0; НачисленоИзЧистойПрибылиЗаМесяц = 0; ДополнительныйДоходЗаМесяц = Сотрудник.ДополнительныйДоход.Получить(БухИт70.КонДата) - ?(ДатаМесяц(БухИт70.КонДата)=1,0,Сотрудник.ДополнительныйДоход.Получить(БухИт70.НачДата-1)); //Начисления и валовый доход НачисленоЗаМесяц = ?(ЕстьИтоги = 1, БухИт70.КО(), 0) + ?(БухИт70.КонДата=КонецМесяцаДокумента, ВсегоНачислено, 0) + ДополнительныйДоходЗаМесяц; //вот, вот, в первый месяц года зарплата 0 Если ЕстьИтоги = 1 Тогда Если БухИт70.ПолучитьКорСчет(, Сч00) = 1 Тогда //Учтем начальный остаток НачисленоЗаМесяц = НачисленоЗаМесяц - БухИт70.КорКО(); КонецЕсли; Если БухИт70.ПолучитьКорСчет(, Сч68_1) = 1 Тогда УдержанныйНалогНаДоходы = УдержанныйНалогНаДоходы + БухИт70.КорДО(); КонецЕсли; //Суммы не облагаемые ЕСН Если БухИт70.ПолучитьКорСчет(, Сч69_1) = 1 Тогда НачисленоПособийЗаМесяц = БухИт70.КорКО(); КонецЕсли; Если БухИт70.ПолучитьКорСчет(, Сч69_11) = 1 Тогда НачисленоПособийЗаМесяц = НачисленоПособийЗаМесяц + БухИт70.КорКО(); КонецЕсли; Если БухИт70.ПолучитьКорСчет(, Сч84) = 1 Тогда НачисленоИзЧистойПрибылиЗаМесяц = БухИт70.КорКО(); КонецЕсли; КонецЕсли; Если ((СчетЗатрат = Сч69_1) или (СчетЗатрат = Сч69_11)) и (БухИт70.КонДата = КонецМесяцаДокумента) Тогда НачисленоПособийЗаМесяц = НачисленоПособийЗаМесяц + ВсегоНачислено; КонецЕсли; Если (СчетЗатрат.ПринадлежитГруппе(Сч84) = 1) и (БухИт70.КонДата = КонецМесяцаДокумента) Тогда НачисленоИзЧистойПрибылиЗаМесяц = НачисленоИзЧистойПрибылиЗаМесяц + ВсегоНачислено; КонецЕсли; ВаловыйДоход = ВаловыйДоход + НачисленоЗаМесяц; //Вычеты НДФЛ ПределВычетов = Константа.ПределВычетов.Получить(БухИт70.КонДата); ТипВычета = Сотрудник.ТипВычета.Получить(БухИт70.КонДата); Если ТипВычета = Перечисление.ТипыВычетов.Обычный Тогда Вычеты = 400*?((ВаловыйДоход+ДоходСпредыдущегоМестаРаботы) <= ПределВычетов, 1, 0); ИначеЕсли ТипВычета = Перечисление.ТипыВычетов.Льготный1 Тогда Вычеты = 500; ИначеЕсли ТипВычета = Перечисление.ТипыВычетов.Льготный2 Тогда Вычеты = 3000; Иначе Вычеты = 0; КонецЕсли; Вычеты = Вычеты + 300*Сотрудник.Дети.Получить(БухИт70.КонДата)*?((ВаловыйДоход+ДоходСпредыдущегоМестаРаботы) <= ПределВычетов, 1, 0); //а вычеты не ноль НеОблагается = НеОблагается + Вычеты; КонецЦикла; //Сумма НДФЛ ОблагаемыйДоход = Макс(ВаловыйДоход-НеОблагается, 0); НалогНаДоходы = Окр(ОблагаемыйДоход/100*глПолучитьСтавкуНалога("НДФЛ", КонецМесяцаДокумента),0,1); НалогНаДоходы = НалогНаДоходы-УдержанныйНалогНаДоходы-Сотрудник.СальдоНалогаНаДоходы.Получить(КонГода(ДатаДок)); НалогНаДоходы = Макс(НалогНаДоходы, 0); КонецЦикла; --------- |
Сообщ.
#2
,
|
|
|
ИМХО - тот цикл тут не примечем (он правильный) - т.к. идет по месяцам (ВыполнитьЗапрос(...,"Месяц"))
Только вот не пойму где идет проверка по этим самым месяцам - всмысле надо ли прибавлять к НачисленоЗаМесяц БухИт70.КО() или нет - скорее подводные камни где-то тут... |
Сообщ.
#3
,
|
|
|
to ZEE
Судя по всему проверка прибавлять или не прибавлять происходит в этой строке НачисленоЗаМесяц = ?(ЕстьИтоги = 1, БухИт70.КО(), 0) + ?(БухИт70.КонДата=КонецМесяцаДокумента, ВсегоНачислено, 0) + ДополнительныйДоходЗаМесяц; А именно ?(ЕстьИтоги = 1, БухИт70.КО(), 0) Т.е. если есть итоги то, прибавляем БухИт70.КО(), иначе 0. Тут похоже все путем и в январе (в отладчике смотрел) НачисленоЗаМесяц=0 А вот для вычетов такой проверки не стоит похоже. Может стоит поставить? Вроде этого: Вычеты = 400*?(ЕстьИтоги = 1, 1, 0)*?((ВаловыйДоход+ДоходСпредыдущегоМестаРаботы) <= ПределВычетов, 1, 0); Как думаете? Попробовать смогу только дома. На основной работе левый софт запрещают ставить. :-( Только не бейте сильно если что, я языка 1С не знаю. Догадываюсь по мере сил. :-) |
Сообщ.
#4
,
|
|
|
ну похоже оно (сразу просто не понял к чему лишенее че-то прибавляется)
и все-таки лучше проверить (я не проверю - что-т не хочется такую штуку себе в конфу запихивать ) и у меня в НачислениеЗП такого нет - какя кстати конфигурация? - если какая-нить стандартная - может кто уже с этим сталкивался... |
Сообщ.
#5
,
|
|
|
to ZEE Спасибо. Дома попробую. Точно не помню, но конфигурация по моему стандартная. Настораживает только такая ошибка. Неужели такую вещь не учли? ИМХО было бы много недовольных.
P.S. Если у кого-нибудь есть замечания буду рад. Я сегодня сюда еще загляну. |
Сообщ.
#6
,
|
|||||
|
ИМХО код правильный, проверь дату приема сотрудника (когда его в базу занесли)и доход с предыдушего места работы придеться перечитать зарплату с начала года, только тренеруйся на копии
льготы и дeти есть? вот и получается 800 вообще раньше в двойном размере брали, предел не помню смотри может быть конфигурация старая, обновить надо |
Сообщ.
#7
,
|
|
|
to X
Спасибо. Про то, что тренироваться на копии это понятно В том то и дело, что проверял. Взяли именно в феврале. Доход с предыдущего места работы не вносился. Льгот нет, детей тоже, значит стандартный вычет 400 должен быть. Лишние 400 отнимается 1 раз (за январь), а дальше нормально по 400. С обновлением проблемы. Ломанная 1С там стоит, а в городе не найдешь. P.S. Попробовать код поменять вчера не получилось. Домой пришел 23:00. Хватило сил доползти только до кровати. Если бы включил компьютер стошнило бы не в переносном, а уже наверное в прямом смысле. Надеюсь сегодня попробую (если уважаемые работодатели отстанут ). |
Сообщ.
#8
,
|
|
|
Такая же проблема примерно была - у всех работает, у нас в бухгалтерии нет. Разбор кода ничего не дал. Потом как-то случайно полез в свойства системы и нарвался на надпись, что мат. сопроцессор отключен. Ну включил его , глюк испарился( а код остался тем же).
|
Сообщ.
#9
,
|
|
|
Гостю. Странно. Интересный глюк.
P.S. Я свою проблему решил правкой кода. Если в начале года Валовый доход = 0, то обнулял вычеты. А с переменной ЕстьИтоги не получилось, в январе она была почему-то все равно равна 1. Бухгалтеры пока довольны. |