Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ЗиК77 036, ошибки...?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
igmig65
Столкнулся при обновлении доработанного ЗиКа на 036 релиз:
1. Документ РасчетСредней, модуль документа, Процедура ЗаполнитьТабСуммыНачислений:
зСуммы = СоздатьОбъект("Запрос");
    тСуммы = "//{{ЗАПРОС(зСуммы)
    |С ДатаС по ДатаПо;
    |ПеД = ЖурналРасчетов.Зарплата.ПериодДействия;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
    |Сот = ЖурналРасчетов.Зарплата.Объект;
    |Рез = ЖурналРасчетов.Зарплата.Результат;"

    // СуммаПолностью
    // согласно Порядка 1266 для больничного премии по итогам года и доплата за выслугу лет
    // учитывается, причем в том месяце, в котором они были начислены,
    // а не в размере 1/12 на каждый месяц (для премии)
    +?(ГруппаДляСредней = ГруппаРасчетов.ВключатьВСреднююДляБольничного,
    "Функция СуммаПолностью = Сумма(Рез) Когда (
    |(ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююБольничногоПропорциональноВремени) <> 1)
    |И (ВидРасч.ВходитВГруппу(ГруппаРасчетов.КвартальныеПремии) <> 1)
    |И ((ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююДляБольничного) = 1)
    |или (ВидРасч.ВходитВГруппу(ГруппаРасчетов.ПремииПоИтогамГода) = 1)
    |или (ВидРасч = ВидРасчета.ДоплатаЗаВыслугуЛет)) );
    |
    |Функция СуммаПропорционально = Сумма(Рез) Когда (
    |(ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююБольничногоПропорциональноВремени) = 1)
    |И ((ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююДляБольничного) = 1)
    |или (ВидРасч.ВходитВГруппу(ГруппаРасчетов.ПремииПоИтогамГода) = 1)
    |или (ВидРасч = ВидРасчета.ДоплатаЗаВыслугуЛет)) );
    |",
    "Функция СуммаПолностью = Сумма(Рез) Когда (ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююПолностью) = 1);
    |Функция СуммаПропорционально = Сумма(Рез) Когда (ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВключатьВСреднююПропорциональноВремени) = 1);
    |")+
    // СуммаКвартальнойПремии
    "Функция СуммаКвартальнойПремии = Сумма(Рез) Когда (ВидРасч.ВходитВГруппу(ГруппаРасчетов.КвартальныеПремии) = 1);
    // СуммаПропорционально
.............................

Смотрим СуммаПолностью и Сумма пропорционально для больничных:
Если ВидРасч годовая премия или Доплата за выслугу, они попадают в обе суммы
Смотрим дальше Функция ОпределитьСуммыЗаработка()
        Пока ПолучитьСтроку() = 1 Цикл
            ЗаработокЗаМесяц = 0;
            ПолныйЗаработокЗаМесяц = СуммаПолностью;
            Если ГруппаДляСредней = ГруппаРасчетов.ВключатьВСреднююДляОтпуска Тогда
                // средняя для отпуска
                // при расчете средней все начисления учитываем полностью
                ПолныйЗаработокЗаМесяц = ПолныйЗаработокЗаМесяц + СуммаКвартальнойПремии +
                СуммаПропорционально + ПремияПрошлогоГода / 12;
            ИначеЕсли ГруппаДляСредней = ГруппаРасчетов.ВключатьВСреднююДляБольничного Тогда
                // средняя для больничного    
                // при расчете средней все начисления учитываем полностью
                // кроме премии прошлого года (Порядок 1266)  
                Если Отработано < Норма Тогда
                    ПолныйЗаработокЗаМесяц = ПолныйЗаработокЗаМесяц + СуммаКвартальнойПремии +
                        ?(Норма = 0, 0, СуммаПропорционально * Отработано/Норма);
                Иначе
                    ПолныйЗаработокЗаМесяц = ПолныйЗаработокЗаМесяц + СуммаКвартальнойПремии +
                        ?(Норма = 0, 0, СуммаПропорционально);
                КонецЕсли;
                Если (Отработано < Норма) и (БазаНалога > БазаВзноса)  Тогда
                    // Письмо от 14.09.2006г. № 600/020/99-06 Мин.труда и соц.политики,
                    // мы должны Базу взять пропорционально    
                    ПолныйЗаработокЗаМесяц = ?(БазаНалога = 0, 0, ПолныйЗаработокЗаМесяц * БазаВзноса/БазаНалога);
                    //СуммаКвартальнойПремии = ?(БазаНалога = 0, 0, СуммаКвартальнойПремии * БазаВзноса/БазаНалога);
                КонецЕсли;
                
            Иначе
                // прочие случаи, когда средняя рассчитывается за два месяца
                // полный заработок с учетом отраб. времени и годовой премии
                // определяем коэффициент нормы времени
                Если Норма <> 0 Тогда
                    Коэф = Отработано/Норма;  
                Иначе
                    Коэф = 0;
                    глТрассировка("Нулевая норма за "+ПериодСтр(ДатаМесяца,КонМесяца(ДатаМесяца))+". Расчеты могут быть неверными.",1);
                КонецЕсли;              
                ПолныйЗаработокЗаМесяц = ПолныйЗаработокЗаМесяц +
                (СуммаКвартальнойПремии * КоличествоСтрок() / 3 +
                СуммаПропорционально + ПремияПрошлогоГода / 12) * Коэф;
            КонецЕсли;

И что сдесь?, в ПолныйЗаработокЗаМесяц попадает и СуммаПолностью и СуммаПропорционально, тоесть дважды попадает в расчет.
Теперь, если у нас пособие по Берименности и родам: то премия по итогам года еще попадает в ПремияПрошлогоГода, тоесть уже 3 раза учавствует в расчете.
Да и Группы расчетов странно набраны, например Доплата за выслугу включена и в ВключатьВСреднююДляБольничного и в ВключатьВСреднююБольничногоПропорциональноВремени, а годовая только в ВключатьВСреднююДляБольничного. А в группах ВключатьВСреднююПолностью и ВключатьВСреднююПропорциональноВремени - расчеты, что пропорционально, исключены из полностью Нафига весь этот геморой в условиях, и группы по разным принципам набраны.
Иногда вообще нехочется наворачивать обновления...но, требуют.


 ! 

Правила, п.5!!
 
aleksik076
Спасибо за информацию!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.