Массовый расчет отпускных
Клиент хочет рассчитывать отпуска сотрудников массово, на основе данных из внешнего источника.
Этот самый "внешний источник" может выдать данные по отпускам в виде таблицы ТН - дата начала - дата конца - тип отпуска (обычный/учебный).
Согласны на "полуавтоматический" расчет: принимаем даты начала/конца в таблицу - разносим. Но вместо разноски открывается интерфейс расчета отпуска с предзаполненными датами и типом отпуска. Можно ли такое реализовать?
Есть ли ещё какие-то варианты решения вопроса?
Думал о расчете отпускных в таблице, но кроме сумм в ЛС надо заполнить ещё и табель. И тут возникает два вопроса:
1. Функция replace разнесет символ "О" во все дни периода отпуска, в т.ч. - в праздники. Как "обойти" праздничные дни?
2. Функция replace, вроде как, работает только с текущим месяцем. Как разнести символ "О" в будущий месяц, если отпуск переходящий?
Ответ
С разноской символов "О" вопрос решил.
И всё-таки, нельзя ли как-то передавать из таблицы в интерфейс расчета отпуска даты начала и конца, как это делает письмо из КП?
Добрый день.
А показать панель отпуска точно нужно или достаточно посчитать отпуск в ЛС "молча"?
Можно посмотреть пример в integration.S функция SysIntegrProcessOneOtpusk()
Если выложите пример таблички- могу помочь со скриптом..
Вроде как нечто подобное обсуждалось несколько лет назад в теме
https://kontur.userecho.com/ru/communities/47/topics/8644-prikazyi-po-otpuskam
Если интересно, могу покопаться в архивах и найти ту таблицу, которая лет 10
работала примерно с тем же функционалом, какой вы запрашивали.
Сделал "табличный" вариант расчета с последующей разноской сумм и букв табеля: Tabl14.Sum
"Молчаливый" вариант расчета тоже интересует. На основе той же таблицы.
1)FindTnForKCH(1,"tn_ibm") лучше поместить в "Начало расчета таблицы"
иначе будет долго работать... ( для каждой записи в таблице будет полностью читаться весь список ЛС)
2) Не уверен что у вас правильно посчитает СДЗ..
Функции расчета не читают ЛС - это нужно делать самостоятельно через LSRead(Tn, flag)
Пример таблицы для расчета отпуска.
Расчет происходит при разноске таблицы.
В таблице должны быть заполнены поля:
- ТН в КЗ
- Дата начала отпуска
- Дата окончания отпуска
Для запуска расчета отпуска используется такой скрипт
UserCalcOneOtpusk(Beg, End) { var BegD=KDateFromStr(Beg); var EndD=KDateFromStr(End); //даты отпуска заданы неверно if( !BegD.IsValid() || !EndD.IsValid() || BegD.GT(EndD)) return "-1"; int monthSr= BegD.GetAbs()-1;// месяц для расчета среднего var lsform=CreateObject("LS_Form"); //для WIN создали окно где будет происходить корректировка сумм if (!VarHasValue(lsform)) { if (ESC==param_b2(2)) // запрос параметров расчета (автоматически, с корректировкой...), работает для режима в func[0] return to_string(ESC); } int TypeOtp = OTPUSK_OSN; /* else if (T=="173-176") // учебный отпуск TypeOtp = OTPUSK_UCH; else TypeOtp = OTPUSK_DOP; // все остальные считаем как Доп */ var Otp = CreateObject("KCalcSredn"); //установит func[0]=2 - глобальный режим "расчет отпуска", восстановит при разрушении if (ESC==Otp.InitOtp2(BegD,EndD,TypeOtp,monthSr,0)) return to_string(ESC); string rez=to_string(Otp.Calculate(0,2))+"^"; //количество дней между датами //rez+=to_string(EndD.Diff(BegD)+1)+"^"; //количество дней отпуска (определяем по табелю) rez+=to_string(CalcTabelSimCount(BegD,EndD,"О"))+"^"; //средний rez+=to_string(Otp.SumSredn()); return rez; }
FindTnForKCH(1,"tn_ibm") лучше поместить в "Начало расчета таблицы"
А как это сделать?
Спасибо за "ценную" информацию. :)
Я вообще-то про синтаксис в поле "Начала расчета" и в функции расчета спрашивал...
в поле "Начало расчета таблицы" нужно написать
FindTnForKCH(1,"tn_ibm");return;
Сервис поддержки клиентов работает на платформе UserEcho
Пример таблицы для расчета отпуска.
Расчет происходит при разноске таблицы.
В таблице должны быть заполнены поля:
расчет отпуска из таблицы.zip
Для запуска расчета отпуска используется такой скрипт