0
Отвечен

Настройка коэф.отпуска по категориям

Ефимова Ирина 6 лет назад в Расчеты начислений и удержаний / Отпускные обновлен Гашков Николай (Эксперт) 5 лет назад 6

Добрый день.

Хотим настроить применение коэф. для отпуска по категориям.

Но  предложенный пример не подходит, как настроить, если коэф. увеличения почти у каждой категории свой.

7,8,9 категория по 1 строке таблицы

10  по 2 строке

11 по 3 строке и т.д

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

Добрый день!

Если у вас заведена сетка индексации отпуска и в этой сетке для каждой категории заведена своя строка, то в настройке отпуска в строке "Код строки из сетки для коэфф. увелич" пишем ф-цию: return usrGetRowForOtp(); что означает код строки из сетки индексации возвращает функция usrGetRowForOtp.


Скрипт функции (нужно вставить в usfuncrw.s):
usrGetRowForOtp()

{

int row=0;

//определяем категорию сотрудника

var D = CreateObject("KDate");D.SetDateII(1,mrasch); //значение категории берем на начало расчетного месяца

char StrKat[81];

GetKchValue("kat",StrKat,2,D);

int kod_kat=atoi(StrKat); //значение кода категории

// если код категории НЕ равен 4 и НЕ равен 5 индексация по 1-ой строке сетки

if ( kod_kat!=4 && kod_kat!=5) return row=1;

//иначе индексация по 3-ей строке сетки

else row=3;

}

Функция реагирует на значение из кадровой части - код категории. В примере, приведенном выше: если код категории 4 или 5, тогда индексация идет по 3-ей строке сетки, иначе по строке 1 из сетки. Вам нужно подставить сюда свои категории 7,8,9 по 1 строке, 10 по 2 строке, 11 по 3 строке.

Добрый день.

Вот что получилось.

usrGetRowForOtp()

{

int row=0;

//определяем категорию сотрудника

var D = CreateObject("KDate");D.SetDateII(1,mrasch); //значение категории берем на начало расчетного месяца

char StrKat[81];

GetKchValue("kat",StrKat,2,D);

int kod_kat=atoi(StrKat); //значение кода категории

// если код категории НЕ равен 10,11,12,13,14,15,16 (категоия 7,8,9) индексация по 1-ой строке сетки

if ( kod_kat!=10 && kod_kat!=11 && kod_kat!=12 && kod_kat!=13 && kod_kat!=14 && kod_kat!=15 && kod_kat!=16) return row=1;

// если код категории НЕ равен 7,8,9,11,12,13,14,15,16 (категория=10) индексация по 2-ой строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=11 && kod_kat!=12 && kod_kat!=13 && kod_kat!=14 && kod_kat!=15 && kod_kat!=16) return row=2;

// если код категории НЕ равен 7,8,9,10,12,13,14,15,16 (категория=11) индексация по 3-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=12 && kod_kat!=13 && kod_kat!=14 && kod_kat!=15 && kod_kat!=16) return row=3;

// если код категории НЕ равен 7,8,9,10,11,13,14,15,16 (категория=12)индексация по 4-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=11 && kod_kat!=13 && kod_kat!=14 && kod_kat!=15 && kod_kat!=16) return row=4;

// если код категории НЕ равен 7,8,9,10,11,12,14,15,16 (категория=13)индексация по 5-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=11 && kod_kat!=12 && kod_kat!=14 && kod_kat!=15 && kod_kat!=16) return row=5;

// если код категории НЕ равен 7,8,9,10,11,12,13,15,16 (категория=14)индексация по 6-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=11 && kod_kat!=12 && kod_kat!=13 && kod_kat!=15 && kod_kat!=16) return row=6;

// если код категории НЕ равен 7,8,9,10,11,12,13,14,16 (категория=15)индексация по 7-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=11 && kod_kat!=12 && kod_kat!=13 && kod_kat!=14 && kod_kat!=16) return row=7;

// если код категории НЕ равен 7,8,9,10,11,12,13,14,16 (категория=16)индексация по 8-й строке сетки

if ( kod_kat!=7 && kod_kat!=8 && kod_kat!=9 && kod_kat!=10 && kod_kat!=11 && kod_kat!=12 && kod_kat!=13 && kod_kat!=14 && kod_kat!=15) return row=8;

//иначе индексация по 3-ей строке сетки

//else row=3;

}

Что нужно дописать, чтобы при неуказанной категории в КЧ коэффициент увеличения для расчета отпуска был 0.

Добрый день!

Я бы написал так (согласно вашему письму) :

if (kod_kat==7 || kod_kat==8 || kod_kat==9) return row=1; // Если категория равна 7 или 8 или 9, то берётся строка 1

if (kod_kat==10) return row=2; // Если категория равна 10, то берётся строка 2

if (kod_kat==11) return row=3; // Если категория равна 11, то берётся строка 3

и т.д. См. написание ф-ции ниже.

//коэффициент пересчета для ОТП по категориям 28.05.19 ВТР
usrGetRowForOtp()
{
int row=0;
//определяем категорию сотрудника
var D = CreateObject("KDate");D.SetDateII(1,mrasch); //значение категории берем на начало расчетного месяца
char StrKat[81];
GetKchValue("kat",StrKat,2,D);
int kod_kat=atoi(StrKat); //значение кода категории
// если код категории НЕ равен 4 и НЕ равен 5 индексация по 1-ой строке сетки
//if ( kod_kat!=4 && kod_kat!=5) return row=1;
//иначе индексация по 3-ей строке сетки
//else row=3;
if (kod_kat==1 || kod_kat==2) return row=1; // Если категория равна 1 или 2, то берётся строка 1
if (kod_kat==3) return row=2; // Если категория равна 3, то берётся строка 2
if (kod_kat==11) return row=3; // Если категория равна 11, то берётся строка 3
else row=0;
}

В вашей сетке завёл строку 0 (ноль) с голыми нулями (чтобы при неуказанной категории в КЧ коэффициент увеличения для расчета отпуска не изменялся ): 

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