На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:

  • Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
  • Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
  • Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.

Высказать своё мнение о модераторах раздела можно здесь: evGenius
  
> 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);


    КонецЦикла;

    ---------
      ИМХО - тот цикл тут не примечем (он правильный) - т.к. идет по месяцам (ВыполнитьЗапрос(...,"Месяц"))
      Только вот не пойму где идет проверка по этим самым месяцам - всмысле надо ли прибавлять к НачисленоЗаМесяц БухИт70.КО() или нет - скорее подводные камни где-то тут...

        to ZEE

        Судя по всему проверка прибавлять или не прибавлять происходит в этой строке
        НачисленоЗаМесяц = ?(ЕстьИтоги = 1, БухИт70.КО(), 0) +
        ?(БухИт70.КонДата=КонецМесяцаДокумента, ВсегоНачислено, 0) +
        ДополнительныйДоходЗаМесяц;
        А именно
        ?(ЕстьИтоги = 1, БухИт70.КО(), 0)
        Т.е. если есть итоги то, прибавляем БухИт70.КО(), иначе 0.
        Тут похоже все путем и в январе (в отладчике смотрел) НачисленоЗаМесяц=0
        А вот для вычетов такой проверки не стоит похоже. Может стоит поставить? Вроде этого:
        Вычеты = 400*?(ЕстьИтоги = 1, 1, 0)*?((ВаловыйДоход+ДоходСпредыдущегоМестаРаботы) <= ПределВычетов, 1, 0);

        Как думаете?
        Попробовать смогу только дома. На основной работе левый софт запрещают ставить. :-(

        Только не бейте сильно если что, я языка 1С не знаю. Догадываюсь по мере сил. :-)
          ну похоже оно (сразу просто не понял к чему лишенее че-то прибавляется)
          и все-таки лучше проверить (я не проверю - что-т не хочется такую штуку себе в конфу запихивать smile.gif ) и у меня в НачислениеЗП такого нет - какя кстати конфигурация? - если какая-нить стандартная - может кто уже с этим сталкивался...
            to ZEE Спасибо. Дома попробую. Точно не помню, но конфигурация по моему стандартная. Настораживает только такая ошибка. Неужели такую вещь не учли? ИМХО было бы много недовольных. rolleyes.gif

            P.S. Если у кого-нибудь есть замечания буду рад. Я сегодня сюда еще загляну. wink.gif
              ИМХО код правильный, проверь дату приема сотрудника (когда его в базу занесли)и доход с предыдушего места работы
              придеться перечитать зарплату с начала года, только тренеруйся на копии
              Цитата
              Georgy, 9.12.03, 13:52
              Например, сотрудника взяли в феврале и начислили ему зарплату за этот месяц 1200 руб. Стандртный вычет составил бы 400 руб. Т.е. 800 руб. подлежало бы налогообложению. А 1С вычитает 800 руб. За январь еще 400 руб. вычитает.

              Цитата
              ИначеЕсли ТипВычета = Перечисление.ТипыВычетов.Льготный1 Тогда
              Вычеты = 500;
              ....
              Вычеты = Вычеты + 300*Сотрудник.Дети.Получить(БухИт70.КонДата)*?((ВаловыйДоход+ДоходСпредыдущегоМестаРаботы) <= ПределВычетов, 1, 0);

              льготы и дeти есть?
              вот и получается 800
              вообще раньше в двойном размере брали, предел не помню
              смотри может быть конфигурация старая, обновить надо
                to X
                Спасибо. Про то, что тренироваться на копии это понятно smile.gif

                В том то и дело, что проверял. Взяли именно в феврале. Доход с предыдущего места работы не вносился. Льгот нет, детей тоже, значит стандартный вычет 400 должен быть. Лишние 400 отнимается 1 раз (за январь), а дальше нормально по 400.

                С обновлением проблемы. Ломанная 1С там стоит, а в городе не найдешь.

                P.S. Попробовать код поменять вчера не получилось. Домой пришел 23:00. Хватило сил доползти только до кровати. Если бы включил компьютер стошнило бы не в переносном, а уже наверное в прямом смысле. smile.gif Надеюсь сегодня попробую (если уважаемые работодатели отстанут smile.gif ).
                  Такая же проблема примерно была - у всех работает, у нас в бухгалтерии нет. Разбор кода ничего не дал. Потом как-то случайно полез в свойства системы и нарвался на надпись, что мат. сопроцессор отключен. Ну включил его , глюк испарился( а код остался тем же).
                    Гостю. Странно. Интересный глюк.
                    P.S. Я свою проблему решил правкой кода. Если в начале года Валовый доход = 0, то обнулял вычеты. А с переменной ЕстьИтоги не получилось, в январе она была почему-то все равно равна 1. Бухгалтеры пока довольны.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0344 ]   [ 15 queries used ]   [ Generated: 29.03.24, 07:57 GMT ]