0
Отвечен

Расчет ночных (праздничных)

Вознюк Алексей 5 лет назад в Расчеты начислений и удержаний / Алгоритмы обновлен Гашков Николай (Эксперт) 5 лет назад 23

Здравствуйте. Требуется помощь в настройте 17-го алгоритма. 

Имеем основные виды начислений, которые должны определить ставку для расчета ночных (праздничных):

- оклад 104 (106), базовое значение                 - номер стороки Сетки для бюджетников

- выплаты за работу с вредными условиями    - % от оклада

- квалификационная категория                          - % от оклада

- выплаты за непрерывный стаж работы          - % от оклада, зависящий от стажа.

С первыми тремя проблем нет - столбец С1 спец. таблицы входимости, БЗ  - 1 - оклад, 4 - %. 

Как учесть % стажа, если в 278 виде в БЗ - 0,  а % подтягивается из 78 таблицы "Проценты для выслуги лет"?

Спасибо.

 

Script
ХОРОШО, МНЕ ПОНРАВИЛОСЬ
Оценка удовлетворенности от Вознюк Алексей 5 лет назад

Добрый день.

Добавляете в ТВХ столбец, отмечаете в этом столбце виды, которые должны учитываться при расчете ставки.

В параметре 17го алгоритма ставите номер этого столбца.

Алгоритм: USALG.zip

UserAlg17(&info,&r)
{

  struct Struct_Alg Work;
  Get_AlgWithParam(Work,info.ikod);   // 31.01.1995
    int stolbec=25;
    if(Work.Count_Par > 0)
    stolbec=atoi(reinterpret_cast_to_string(Work.List_Par[0]));

   char t[20];
   if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
      return code_ReturnCode;
        
    double proc=35;
    double normZP=0.;
    GetRasNormzar(stolbec,mrasch,GetCurPropCountLS(),normZP);
    double stavka=normZP/norm(2);
    info.n1=stavka*r[2]*proc/100.;
   if(FL_V_ALG && uprc != NO_SCREEN)
   {
          infolist.add_record("Ставка",stavka);
      infolist.add_record("Ночных часов",r[2]);
            infolist.add_record("Процент оплаты",35);
      infolist.add_record("Результат",info.n1);
   }
   return code_Break;
}
GetRasNormzar(stolbec,mes,prop,&rez)
{
  rez=0.;
  var DateDop=CreateObject("KDate");

  int tmpmrasch = mrasch;
  var ts3 = CreateObject("TempCommonSrc");
  ts3.TempCommonSrcInitial(CMN_SRC_COUNT_LS);
  SetCommonProp(CMN_SRC_COUNT_LS,prop);
  
  if( mes != mrasch)    
    s50all(mes);
  ras_normzar( stolbec-1,"*",1,0,rez,DateDop);
  if( mrasch!=tmpmrasch)   
    s50all(tmpmrasch);
}

Здравствуйте Николай. С применением предложенного Вами алгоритма расчета есть трудности. По основной раборе все расчитывается. По совместительству ставка = 0. 

Как указать виды начислений для ставки по совместительству?

С22 - "Совместительство для расчета строки". Стоит 0 - значения КЧ и суммы по тек. совм-ву. Не подходит , т.к. нам нужны не суммы по виду, а признак - использовать вид для определения ставки. 

Вопрос очень серьезный, т.к. начали расчет за август

На рассмотрении

А в совместительстве то нет что ли "оклада" (или других видов), по которым ставка считается?

Есть:

Оклад (106 - по часам)

Вредные условия 

Стаж

Категория

Т.е. все виды, как и по основной работе.

Сейчас проверил расчет вида с алгоритмом 17. Ситуация следующая.

Если у оклада по  совместительству по F9 проставлен график, отличный от графика в КЧ (например в КЧ - 3 пятидневка 39 часов, у вида - 13 пятидневка 39 дополнительный) - ночные не начисляются. Если график не изменен - начисляетя.

Доп график по совместительству ставим т.к. не каждый месяц человек отрабатывает часы по совместительсту (врачи-дежуранты, например). 

Я так понимаю, где-то надо настроить правила работы с графиками

Разобрался. Это мы слегка "повыделывались". Вся проблема в графиках.

Проблема решена.

Извините за беспокойство.

Где-то в настройках встречал возможность указания какой график использовать - из КЧ или параметров вида. Есть такое?

Если у вида указан график, то для расчета берется он...

Если у вида график не указан - берется график из к.ч.

Вся проблема в нестыковке графика и табеля. Если в кадровой части совместительства график, например, 3 (39 часов), а у вида 11 (39 доп), то после расчета вида по F4 в табеле нет отработанных дней/часов, и, соответственно, не расчитывается 17 алгоритм.

Убрал у вида график, т.к. для медиков у нас он (за некоторым исключением) 39 часовая пятидневная неделя. Если в текущем месяце дежурства не было - в табеле все дни "Н" 

Поставочный алгоритм оклада написан так, что если график вида отличается от графика сотрудника, то табель при расчете этого вида не заполняется. Потому что в этом случае непонятно как его заполнять (графики то разные).

Тебель не заполнен и, соответсвенно, отработанные дни не проставлены. Но норма дней и часов есть и рассчитать часовую ставку, по идее, можно. Но не считает. Я так понимаю, что в строке выше приведенного алогитма не определяется norm(2). Но деление на ноль - ошибка?

double stavka=normZP/norm(2);

(на первой картинке 116 <> 0 т.к. ЛС уже рассчитан и я для эксперимента изменил график у 106 вида и пересчитал ночные)

 

На врачей-дежурантов в бухгалтерию табель приносят только если у врача есть отработка , как правило, в последнюю очередь когда ЛС уже расчитан. Несколько раз бухгалтер начислял лишее. Для того чтобы дежурство не начислялось автоматически я изменил график у вида 106.


Как по другому отключить автоматический расчет вида 106 в конкретном совместительстве не меняя график? (по умолчанию в тебеле проставить все дни нерабочими и, только когда приносят табель, в ручную проставлять рабочие дни )

  • Добавьте в ТВХ отдельный вид ( для оплаты оклада совместителям)
  • Поставьте у этого вида в спец. ТВХ:
    • в столбце 4 символ 3 
    • в столбце 5 символ 1

Тогда при расчете вида РВ заполняться не будет( пока вручную не поставите часы - вид рассчитываться не будет)

1) Что не определяется в строке stavka = normZP/norm(2); можно легко посмотреть в отладчике скриптов.

2) чтобы norm(2) оказался нулевым, надо чтобы нормативный график был не заполнен. При этом программа будет про это верещать каждый раз, когда идет обращение к этому графику (например при чтении ЛС).
3) При делении на ноль получите "исключение", поэтому "не заметить" это будет не возможно (попробуйте просто написать в скрипте 1/0).

Резюме: норма времени не причем, ноль по ставке получаете из-за нуля по нормативной зарплате. Ноль по нормативной зарплате получаете из-за того что алгоритм не учитывает внутри себя варианта "а сейчас мы работаем не по фактическому времени а по нормативному". На поставочных алгоритмах такого нет, потому что алгоритм того же оклада заполнит табель (за весь месяц) по нормативному графику и соответственно получит полный оклад. А у вас, как раз проблема в том что алгоритм табель не заполняет, а считает что его кто-то заполнит до него.

Большое спасибо за помощь.

Вариант с добавлением нового вида для дежурантов без автоматического заполнения рабочего времени наиболее правильный. Так и сделаю.

Спасибо за помощь. 

Вариант с новым видом вполне устраивает.

Так и сделаю.

У вида 296 поставил 

  • в столбце 4 символ 3
  • в столбце 5 символ 1

Вид автоматически не расчитывается. Но при этом и ночные/праздничные тоже не расчитываются. График заполнен (норма часов 163,8, рабочих часов 163,8)

Если в 4 столбце ставлю не 3 - расчитываются.

Вот такой нежданчик. Как быть?


    Чтобы оклад рассчитался при вызове ras_normzar() нужно править алгоритм...

    Верните 0 в столбец 4 и 5 спец. ТВХ для 296 вида.

    Поставьте 296 виду алгоритм 196 (РВ у 296 вида будет заполняться только при расчете доплаты ночных)

    Скопируйте алгоритм :

    UserAlg196(&info,&r)
    {
       worktime(info.crow,info.b3,0);
       if(nkalend == knorm && info.b3==B3_OTPUSK_NORM_ZAR)
          // если строка считается по основному графику ЛС
          skoljko(r[2],data,info.z1,info.z2,rsimv,calm,cht);
       char t[20];
       if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
          return code_ReturnCode;
       info.n1=r[2]*info.bz/norm(2);
       if(FL_V_ALG && uprc != NO_SCREEN)
       {
          infolist.add_record("Рабочее время",r[2]);
          infolist.add_record("Норма часов",norm(2));
          infolist.add_record("Оклад",info.bz);
          infolist.add_record("Результат",info.n1);
       }
       return code_Break;
    }    
    

    USALG.S

    Спасибо, буду пробовать настроить

    Сервис поддержки клиентов работает на платформе UserEcho