Ваши комментарии

Добрый день!

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

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 (ноль) с голыми нулями (чтобы при неуказанной категории в КЧ коэффициент увеличения для расчета отпуска не изменялся ): 

Добрый день!

Если у вас заведена сетка индексации отпуска и в этой сетке для каждой категории заведена своя строка, то в настройке отпуска в строке "Код строки из сетки для коэфф. увелич" пишем ф-цию: 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 строке.

Добрый день!

Как вы прекрасно знаете, мы рассчитываем отпуск по календарным дням. Если месяц отработан полностью, то берётся 29.3. Если месяц отработан не полностью (РВ != НРВ, т.е. в табеле есть буквы БДОГИВЕУ…) => считаем РВ для среднего в КАЛЕНДАРНЫХ днях. Т.е., если в январе 2019 года 31 календарный день и в табеле стоят 11 букв «Б», то считаем так:

(31 – 11) / 31 * 29.3 = 18.90

Добрый день!

1. Чтобы РВ не пересчитывалось зайдите в ТВХ -> Спец ТВЦХ и в столбце С4. Виды, котоpые не пеpесчитываются, если по ним введены данные поставьте 2. Тогда то РВ, которое вы поставили в процессе расчёта при повторном расчёте изменяться не будет.

2. Чтобы РВ не бралось из табеля надо в файле SCRIPT\salg_school.S, в алгоритме 116 закомментировать строки

// if(nkalend == knorm) //* если строка считается по основному графику ЛС
// r[2]=dney_v_tab(rsimv,calm,info.z1,info.z2);

Лучше, конечно, это сделать в файле USALG.S, чтобы в дальнейшем при обновлении ваши изменения не затирались. 

Т.е., зайти в файл salg_school.S, найти алгоритм SchoolAlg116(&info,&r), скопировать его в файл user\USALG.S и уже в нём закомментировать указанные строки.

Добрый день!

1. Странное требование инспектора. У нас же ЭЛЕКТРОННЫЙ листок нетрудоспособности.

2. Больше, конечно, данных в реестре ЭЛН. Но как вы их  будете оттуда вытаскивать? Вот в чём вопрос.

3. У нас вопреки здравому смыслу всё же будет реализована печать ЭЛН в обычном виде. Но это не раньше июня.

4. А можно поинтересоваться зачем инспектору печатный вариант ЭЛН? Чем он мотивирует его требование?

Добрый день!

Попробуйте зайти в ЛС, Alt+F4 и выбрать режим удаление БЛ. У вас откроется окно со списком рассчитанных БЛ. Выберете последнее продление (которое рассчитано не правильно). Программа удалит только это продление. После этого рассчитайте новое продление с новой датой конца. У меня получилось.

Наверное, верно, если всё печатает правильно. Я просто t61.S не проверял.

Добрый день!

Посмотрите, что у вас стоит в файле  SCRIPT\forms\t60.S в строке 247.

Я поправил tWriteStringToCell2(9,26,OemToAnsi(NameP));

на: tWriteStringToCell2(17,1,OemToAnsi(NameP));

Вроде бы печатает правильно.

Добрый день!

Функция UserChoiceVidBL() находится в файле SCRIPT\forms\blreestr_1.S

Добрый день!

Вообще-то, насколько я знаю, эти формы не выдаются сотрудникам, но если вам очень надо, то можете сделать так:

СЗВ-М. Заходите в сформированную форму, помечаете нужный ЛС, нажимаете клавишу "Печать".

СЗВ-СТАЖ. Заходите в сформированную форму, в поле "Сведения о стаже застрахованных лиц", помечаете нужный ЛС, нажимаете клавишу "Печать".

РСВ. Заходите в сформированную форму, заходите в "Раздел 3", помечаете нужный ЛС, нажимаете клавишу "Печать".

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