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

Алгоритм для праздничных

Алексей П 2 недели назад в Расчеты начислений и удержаний обновлен Гашков Николай (Эксперт) 2 недели назад 9

Добрый день!

Подскажите как правильно настроить расчет праздничных по формуле

Суммы по выбранному столбцу / норму часов в текущем расчетном месяце * количество отработанных праздничных часов

Суммы по выбранному столбцу берутся не из БЗ, а из фактически насчитанных сумм (из определенных видов, которые отмечены в столбце)

Здравствуйте.

Суммы по выбранному столбцу берутся не из БЗ, а из фактически насчитанных сумм (из определенных видов, которые отмечены в столбце)

Если суммы берутся не из БЗ, а из фактически насчитанных сумм, то какой результат вы хотите получить путем расчета по формуле:

Суммы по выбранному столбцу / норму часов в текущем расчетном месяце * количество отработанных праздничных часов ?

Чтобы получить стоимость часа в текущем месяце, фактически начисленную сумму по столбцу надо делить на фактически отработанное время:

// Расчет праздничных 
case 915:
{
// Параметры алгоритма
struct Struct_Alg Work;
Get_AlgWithParam(Work,info.ikod);
// 1-й параметр - коэфф. для праздничных (по умолчанию - 2)
double k1 = 2;
if(Work.Count_Par > 0)
{
k1 = atof(reinterpret_cast_to_string(Work.List_Par[0]));
}
// 2-й параметр - столбец для выборки сумм (по умолчанию - 25)
int ColCumm = 25;
if(Work.Count_Par > 1)
{
ColCumm = atoi(reinterpret_cast_to_string(Work.List_Par[1]));
}
// 3-й параметр - столбец для выборки ФРВ (по умолчанию - 26)
int ColFrv = 26;
if(Work.Count_Par > 2)
{
ColFrv = atoi(reinterpret_cast_to_string(Work.List_Par[2]));
}
// Расчет часовой ставки
double n6;
info.kod_alg=s98(0,n6); // Признак: 1 - "дневник", 2 - "часовик"
double FrvCh = 0.; // ФРВ в часах
double FrvDn = 0.; // ФРВ в днях
if(info.kod_alg == 2) // если "часовик"
RVFromNUCol(0,FrvCh,FrvDn,ColFrv-1); // ФРВ по видам, отмеченным ненулевыми символами в столбце СolFRV
else // если "дневник"
skoljko(FrvCh,data,z1,z2,"Р",calm,cht); // ФРВ по символам "Р" в табеле
double ZarMes = 0.;
var mt = CreateObject("KMonth");
mt.SetMonth(mtek);
int mmes = mt.GetRel();
s100("н",mmes,ColCumm-1,ZarMes); // Заработок за месяц по видам, отмеченным ненулевыми символами в столбце СolSumm
double StCh = 0.;
StCh = ZarMes/FrvCh;// часовая ставка
// Расчет суммы праздничных
n1 = r[2]*StCh*k1;
// Информация по расчёту
if(FL_V_ALG && uprc != NO_SCREEN)
{
infolist.add_record("Столбец ТВХ для выборки сумм",ColCumm);
infolist.add_record("Столбец ТВХ для выборки ФРВ",ColFrv);
infolist.add_record("Заработк за месяц",ZarMes);
infolist.add_record("ФРВ за месяц",FrvCh);
infolist.add_record("Часовая ставка",StCh);
infolist.add_record("Праздничные часы",r[2]);
infolist.add_record("Коэффициент",k1);
infolist.add_record("Результат",n1);
}
break;
}
На рассмотрении

Добрый день!

Как вариант, можете за основу взять кусок кода из SysAlg14

      if (typeCalc == 3) //фактический заработок по столбцу/ФРВ по столбцу
      {
         toMatrLS();
         var matrLs=GlobalMatrLS(); 
         var flag=CL_M | CL_COL | CL_SOURCE | CL_NACH;
         double sum = matrLs.CollectSumm(sumColumnIdx, mrasch, 0, flag, GetCurPropCountLS()).Sum;
         var frvColumnIdx = TVHColFromCnf(AnsiToOem("доппар"), "COL0TVH_01")-1;
         double frv = matrLs.CollectSumm(frvColumnIdx, mrasch, 0, flag, GetCurPropCountLS()).RV;

         if(FL_V_ALG && uprc != NO_SCREEN)
         {
            infolist.add_record(AnsiToOem("Выборка"),sum);
            infolist.add_record(AnsiToOem("Столбец Фрв"),frvColumnIdx+1);
            infolist.add_record(AnsiToOem("Фрв"),frv);
         }

         if (frv > 0.00001)
            tarif = sum / frv;
         else
            tarif = 0;

Приносим извинения. Мы сами изначально неправильно поняли, что клиенты хотят.

Необходимо:

                                  норм.заработок по столбцу
праздничные = ------------------------------------------------ * ФРВ * процент оплаты(БЗ)
                              норма часов за текущий месяц

Есть настроенный алгоритм 917. USALG.S

Все устраивает, но он делит  на среднемесячное знач.часов

Подскажите какие изменения внести в этот алгоритм, чтобы делило просто на норму часов из текущего месяца ?

какие изменения внести в этот алгоритм

Image 9068

Все устраивает

Ну это если не "приглядываться"...

На самом деле, расчет часовой ставки как отношение нормативного заработка к НРВ(ч) далеко не всегда дает адекватный результат. Дело в том, что, во-первых, ras_normzar частенько считает нормативный заработок мягко говоря "странно" (например - в неполностью отработанном месяце), во-вторых, ras_normzar рассчитывает нормативный заработок по алгоритмам видов, указанных в столбце ТВХ. Т.е. виды, не имеющие алгоритма расчета (ручной ввод), попросту не учтутся при расчете. По этой же причине не учтутся при расчете виды, имеющие алгоритм расчета, но требующие для расчета предварительно введенных вручную данных  (самое распространенное - ручное заполнение/изменение информации в графе РВ). 

З.Ы. Не имеет таких недостатков расчет часовой ставки по формуле: фактический_заработок_по_столбцу / ФРВ(ч). 

Если правильно поняли, то внесли изменения в USALG.S

Но не изменился расчет

Сохраненка ЛС

Внесли изменения в USALG.S

Image 9084


Но расчет как происходил из среднемесячных часов, так и не  изменилось

Вид 724 (в таблице входимости указан алгоритм 917)

Image 9085

В данном случае высчитывается нормативный заработок по видам отмеченным в столбце 42

25619,67 и делится на среднемесячное кол-во часов 164,33  а хотят чтобы делилось на норму часов из текущего месяца (в феврале 160 часов)

При старте КЗ выдается сообщение?

Image 9086

Убрал из USALG.S   эту функцию ( она уже определена в sfuncrw_uvd)

Программа стартанула без ошибок, расчет получился такой:

Image 9088

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