Даже не знаю в какую ветку пистаь. Может программистам надо было...
Модуль расчета ЕСВБольничный, вернее его окончание:
Процедура ПровестиРасчет()
// //код процедуры // Если Перерасчет = 1 Тогда Результат = ЕдВзносБол; Иначе
Если (Константа.РасчетВзносовСПереходящихНачислений = Перечисление.ДаНет.Да) ИЛИ (ПустоеЗначение(Константа.РасчетВзносовСПереходящихНачислений)=1) Тогда Результат = Окр(ЕдВзносБол, 2); Иначе Результат = Окр(ЕдВзносБол, 2) - УжеУдержано; КонецЕсли; КонецЕсли; КонецПроцедуры
Ставим точку остановки на строке Если Перерасчет = 1 Тогда:
//по периоду регистрации (все начисления, кроме больничных и отпуска не за текущий период) Если (НП <> ДатаС) Тогда //по периоду действия Зрп.ВыбратьЗаписиПоОбъекту(Объект,НП,КП); ПоПериодуРегистрации = 0; Иначе //по периоду регистрации Зрп.ВыбратьПериодПоОбъекту(Объект,НП); ПоПериодуРегистрации = 1; КонецЕсли; Пока Зрп.ПолучитьЗапись() = 1 Цикл //Пересчет и сторно теперь должны попадать в текущий период Если (Зрп.ПериодРегистрации.ДатаНачала > НП) и ((Зрп.Перерасчет = 1) или (Зрп.Сторно = 1))Тогда Продолжить; КонецЕсли; Если (Зрп.ПериодРегистрации.ДатаНачала < НП) и (НП<ДатаС) Тогда //за прошлый период учитываются только больничные Если (Зрп.ВидРасч.ВходитВГруппу(ГруппаРасчетов.БазаЕСВРассчитываетсяПомесячно) = 1) и НЕ((Зрп.ВидРасч = ВидРасчета.ДоплатаПоБольничномуЛисту) или (Зрп.ВидРасч = ВидРасчета.ОплатаБольничного)) Тогда Продолжить; КонецЕсли; ИначеЕсли (НП = ДатаС) Тогда // в текущем не учитываем прошлый больничный, он уже учтен Если ((Зрп.ВидРасч = ВидРасчета.ДоплатаПоБольничномуЛисту) или (Зрп.ВидРасч = ВидРасчета.ОплатаБольничного)) и (Зрп.ПериодДействия.ДатаНачала < ПериодРегистрации.ДатаНачала) Тогда Продолжить; КонецЕсли; // в текущем не учитываем будующий отпуск Если (Зрп.ВидРасч.ВходитВГруппу(ГруппаРасчетов.БазаЕСВРассчитываетсяПомесячно) = 1) и (Зрп.ПериодДействия.ДатаНачала > ПериодРегистрации.ДатаНачала) Тогда Продолжить; КонецЕсли; КонецЕсли; Если (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВ) = 1) или (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВГПХ) = 1) или (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВБол) = 1) Тогда
Если (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВ) = 1) Тогда //основные начисления Облагаемое = Облагаемое + Зрп.Результат; // Накапливаем сумму, период регистрации меньше текущего периода // с таких начислений взносы уже удержаны Если (Зрп.ПериодРегистрации.ДатаНачала < ПериодРегистрации.ДатаНачала) Тогда БазаУжеУдержано = БазаУжеУдержано + Зрп.Результат; КонецЕсли; ИначеЕсли (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВГПХ) = 1) Тогда //Оплата по договору ГПХ ОблагаемоеГПХ = ОблагаемоеГПХ + Зрп.Результат; // Накапливаем сумму, период регистрации меньше текущего периода // с таких начислений взносы уже удержаны Если (Зрп.ПериодРегистрации.ДатаНачала < ПериодРегистрации.ДатаНачала) Тогда БазаГПХУжеУдержано = БазаГПХУжеУдержано + Зрп.Результат; КонецЕсли; ИначеЕсли (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВБол) = 1) Тогда //оплата больничного ОблагаемоеБол = ОблагаемоеБол + Зрп.Результат;
// Накапливаем сумму, период регистрации меньше текущего периода // с таких начислений взносы уже удержаны Если (Зрп.ПериодРегистрации.ДатаНачала < ПериодРегистрации.ДатаНачала) Тогда БазаБолУжеУдержано = БазаБолУжеУдержано + Зрп.Результат; КонецЕсли; КонецЕсли;
ИначеЕсли (Зрп.ВидРасч = ВидРасчета.ЕСВБольн) и (Зрп.ПериодРегистрации.ДатаНачала <= ПериодРегистрации.ДатаНачала) Тогда УжеУдержано = УжеУдержано + Зрп.Результат; КонецЕсли; КонецЦикла;
//Если считали по периоду регистрации, то еще надо проверить по периоду действия: // - начисленное в предыдущих периодах за этот период (отпускные) // - удержанный ЕСВ за этот период Если ПоПериодуРегистрации = 1 Тогда Зрп.ВыбратьЗаписиПоОбъекту(Объект,НП,КП); Пока Зрп.ПолучитьЗапись() = 1 Цикл Если Зрп.ПериодРегистрации.ДатаНачала >= ПериодРегистрации.ДатаНачала Тогда //Нужны только записи предыдущих периодов регистрации Продолжить; КонецЕсли;
Если (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВ) = 1) и (НачМесяца(Зрп.ПериодДействия.ДатаНачала) = НП) Тогда Облагаемое = Облагаемое + Зрп.Результат; ИначеЕсли (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВГПХ) = 1) И (НачМесяца(Зрп.ПериодДействия.ДатаНачала) = НП) Тогда ОблагаемоеГПХ = ОблагаемоеГПХ + Зрп.Результат; ИначеЕсли (Зрп.ВидРасч.ВходитВГруппу(БазаДляЕСВБол) = 1) И (НачМесяца(Зрп.ПериодДействия.ДатаНачала) = НП) Тогда //оплата больничного ОблагаемоеБол = ОблагаемоеБол + Зрп.Результат; КонецЕсли; КонецЦикла; КонецЕсли;
Если Перерасчет = 1 Тогда Результат = ЕдВзносБол; Иначе
Если (Константа.РасчетВзносовСПереходящихНачислений = Перечисление.ДаНет.Да) ИЛИ (ПустоеЗначение(Константа.РасчетВзносовСПереходящихНачислений)=1) Тогда Результат = Окр(ЕдВзносБол, 2); Иначе Результат = Окр(ЕдВзносБол, 2) - УжеУдержано; КонецЕсли; КонецЕсли; КонецПроцедуры
Все правильно. У вас Больничные переходящие. Т.е. учитываются суммы из прошлого месяца (больничный и ЕСВбольн). 25.95-21,23=4,72 (21,23 провелось в прошлом месяце).
Я когдато тоже ломал себе голову, почему так, оказалось, что это запись ПЕРЕРАСЧЕТ, тоесть у вас в отладчике показывает общую сумму по 2 записям пересчитанной, ту что расчитывается в данный момент и той, которую пересчитывает.
Acid, вот именно что перерасчет. Он не должен ещё раз УжеУдержано отнимать (если верить коду).
Если Перерасчет = 1 Тогда Результат = ЕдВзносБол; Иначе
igmig65, а какая переменная тогда в журнал расчетов попадает? Где это искать? Получается что он один раз отнимает УжеУдержано в глРассчитатьНалогПоШкале (как я понял) и где-то ещё?
Нопример у вас в феврале есть запись ЕСВбольн с результатом 15.00 В марте у вас вводится запись ПЕРЕРАСЧЕТ ЕСВбольн с результатом 3.00 У вас в отладчике на строке:
Если Перерасчет = 1 Тогда Результат = ЕдВзносБол; Иначе
Я просто, немогу щас сказать точно как правильно, так как обновлял ЗиК ручками. Посмотрите как в 29 расчитывается запаись перерасчет для ЕСВ. Там почему то плюсуется сумма удержано. Мне кажется что все связано с правилами перерасчета ОсновныеНалоги и НДФЛ, только непойму почему в 29 ЕСВ перерасчет плюсует УжеУдержано, а ЕСВБольничные нет. Может это ошибка. Я просто у себя все натроил не так как в 29, у меня при вводе больничных за прошлый период прерасчет вводится только НДФЛ.
Так и не разобрался где второй раз вычитается УжеУдержано. Поставил следующий костыль, вроде пока работает: если запись перерасчет, то в глРассчитатьНалогПоШкале заношу нулевую БазаБолУжеУдержано.
Если Перерасчет=1 Тогда БазаБолУжеУдержано=0; КонецЕсли; ЕдВзносБол = глРассчитатьНалогПоШкале(ОблагаемоеБол,тбШкала,спЛьготы,,,БазаБолУжеУдержано,тбШкалаТек);
Сам когда то с этим разбирался, толком не понял правда, предположил что это платформа пересчитывает сама в случае если "перерасчет", а потом перешел на 8ку и появились другие проблемы))
Это вроде заложено в правилах перерасчета. Вот как в 029: Правило перерасчета Основные налоги, при вводе почти всех начислений вводится записи перерасчеты по налогам.
Цитата
Так и не разобрался где второй раз вычитается УжеУдержано
Посмотрите в конец модуля расчета ЕСВ:
Если Перерасчет = 1 Тогда Если (Константа.РасчетВзносовСПереходящихНачислений = Перечисление.ДаНет.Да) ИЛИ (ПустоеЗначение(Константа.РасчетВзносовСПереходящихНачислений)=1) Тогда Результат = ЕдВзнос + УжеУдержано; Иначе Результат = ЕдВзнос; КонецЕсли;
а вот ЕСВбольн:
Если Перерасчет = 1 Тогда Результат = ЕдВзносБол; Иначе
попробуйте исправить как для ЕСВ, тоесть:
Если Перерасчет = 1 Тогда Если (Константа.РасчетВзносовСПереходящихНачислений = Перечисление.ДаНет.Да) ИЛИ (ПустоеЗначение(Константа.РасчетВзносовСПереходящихНачислений)=1) Тогда Результат = ЕдВзносБол + УжеУдержано; Иначе Результат = ЕдВзносБол; КонецЕсли;
Вот здесь тогда вы вернете назад Ужеудержано
Причина редактирования: Не удаляю пост из-за информативности! А вообще http://pro1c.org.ua/index.php?showtopic=2284
Похоже на то. Непонятно только зачем такой бред было делать. Я думал правила перерасчета только записи вводят, что было бы логичнее, имхо. Запутанно у них получилось, а самое плохе, что, как я понял, отредактировать это дело нельзя :\
а самое плохе, что, как я понял, отредактировать это дело нельзя :\
почему нельзя, правила перерасчета настриваемые, только точно как что влияет не скажу, гдето находил описание настроек для правил перерасчета в нете, но где непомню. Там имеет значение не только расчеты влияющие на эти правила и расчеты на которые влияют(окна справа и слева), но и период ввода этих перерасчетов (переключатели внизу). Я напрмер когда обновлял ручками, просто забыл про эти правила, вот у меня теперь ЕСВ перерасчет за прошлый период невводится, а вводится только ЕСВбольн. Просто забыл галочки поставить в правилах, а получается он и ненужен, ведь в тек.месяце за прошлый ЕСВ уже недолжно быть, а в 029 вводится, только расчет зависит от константы еще.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!