% среднедневной заработок по сотруднику (по среднечасовому) % - для отпусков calc_avg_wage(Scope, PK, AvgWage, Rule) :- Rule = by_avg_houre, % правило действительно is_valid_rule(Scope, PK, _, Rule), % подготовка временных данных для расчета prep_avg_wage(Scope, PK, Periods), % взять заработок findall( Wage, % за каждый период проверки ( member(Y1-M1, Periods), % взять данные по заработку get_month_wage(Scope, PK, Y1, M1, _, Wage) ), % в список заработков Wages ), % итоговый заработок sum_list(Wages, Amount), % взять часы findall( THoures, % за период проверки ( member(Y2-M2, Periods), % взять данные по часам за месяц get_month_norm_tab(Scope, PK, Y2-M2, _, _, _, THoures) ), % в список часов Durations), % всего часов по табелю sum_list(Durations, TotalTab), % среднечасовой заработок catch( AvgHoureWage is Amount / TotalTab, _, fail ), % разложить первичный ключ PK = [pEmplKey-EmplKey, pFirstMoveKey-FirstMoveKey], % всего часов по графику за расчетный год get_data(Scope, in, usr_wg_TblYearNorm, [ fEmplKey-EmplKey, fFirstMoveKey-FirstMoveKey, fWHoures-TotalNorm]), % среднемесячное количество расчетных рабочих часов AvgMonthNorm is TotalNorm / 12, % среднемесячное количество календарных дней get_param(Scope, in, pAvgDays-AvgDays), % среднедневной заработок catch( AvgWage0 is AvgHoureWage * AvgMonthNorm / AvgDays, _, fail ), AvgWage is round(AvgWage0), !.
4 апр. 2014 г.
Пролог
Аналогов в Беларуси просто нет. Ниже приведен фрагмент кода программы расчета заработной платы на языке Prolog . Работает в режиме промышленной эксплуатации на двух крупных предприятиях (более 1000 работников на каждом).
Комментариев нет:
Отправить комментарий