Автоматизация расчета начислений заработной платы в строительном управлении N 151 — страница 5

  • Просмотров 3279
  • Скачиваний 314
  • Размер файла 20
    Кб

j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],1],conv);z:=copy(z,j+1,300); {Табель времени работника} j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],2],conv);z:=copy(z,j+1,300); j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],3],conv);z:=copy(z,j+1,300); {Выходные работника} j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],4],conv);z:=copy(z,j+1,300); j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],5],conv);z:=copy(z,j+1,300); { Сверхурочные работника} j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],6],conv);z:=copy(z,j+1,300); j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],7],conv); until eof(f); close(f);end; { Считывание данных из второй таблицы } for i:=1 to 4 do begin

str(i,s);assign(f,'vhod\'+s+'-2-'+mw+'.txt');reset(f); for g:=1 to 7 do readln(f,z); {пропустить шапку таблицы} for g:=1 to kol_vo [i] do begin readln(f,z);j:=pos('|',z);z:=copy(z,j+1,250); j:=pos('|',z);z:=copy(z,j+1,250); for h:=8 to 10 do begin j:=pos('|',z);val(copy(z,1,j-1),x,c); a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];z:=copy(z,j+1,250);end; j:=pos('|',z);val(copy(z,1,j-1),x,c); a[i,g,18]:=round(x);z:=copy(z,j+1,250); for h:=11 to 12 do begin j:=pos('|',z);val(copy(z,1,j-1),x,c); a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];z:=copy(z,j+1,250);end; j:=pos('|',z);val(copy(z,1,j-1),x,c);a[i,g,19]:=round(x); for h:=13 to 16 do begin z:=copy(z,j+1,250);j:=pos('|',z); val(copy(z,1,j-1),x,c);a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];end; end; close(f);end; end; end.

Файл, отвечающий за основной расчет. Unit3.pas unit unit3; interface uses unit1; procedure prog; implementation procedure prog; var i,j,h:integer; begin br:=0; bi:=0; for i:=1 to 4 do for j:=1 to kol_vo[i] do begin if a[i,j,6]=0 then balls[i,j]:=t[i,j,1]*t[i,j,2]/kol_d else balls[i,j]:=t[i,j,1]*t[i,j,3]; a[i,j,3]:=round(balls[i,j]); {Выходные} if a[i,j,6]=0 then begin a[i,j,4]:=round(1.5*t[i,j,1]*t[i,j,4]/kol_d); balls[i,j]:=balls[i,j]+t[i,j,1]*t[i,j,4]/kol_d;end else begin balls[i,j]:=balls[i,j]+t[i,j,1]*t[i,j,5]; a[i,j,4]:=round(1.5*t[i,j,1]*t[i,j,5]);end; {Сверхурочные} if a[i,j,6]<>0 then begin balls[i,j]:=balls[i,j]+t[i,j,1]*(t[i,j,6]+t[i,j,7]); a[i,j,5]:=round(t[i,j,1]*(1.5*t[i,j,6]+2*t[i,j,7]));end else begin

balls[i,j]:=balls[i,j]+t[i,j,1]*(t[i,j,6]+t[i,j,7])/8/kol_d; a[i,j,5]:=round(t[i,j,1]*(1.5*t[i,j,6]+2*t[i,j,7])/8/kol_d);end; {Расчет баллов} balls[i,j]:=balls[i,j]*ktu[i,j]; if a[i,j,6]<>0 then br:=br+balls[i,j] else bi:=bi+balls[i,j]; for h:=3 to 5 do fzp:=fzp-a[i,j,h];{Уменьшение ФЗП} end; {writeln (' bi: ',round(bi),' br: ',round(br));} { Надбавка по КТУ } nkr:=0.75*fzp/br;nki:=0.25*fzp/bi; {writeln('fzp ',round(fzp));} p:=0; q:=1; { Цикл оптимизации} repeat if round (oc_m+oc_m*1.5*nki)> round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr) then begin p:=p+q; q:=q/10; end; p:=p-q; nkr:=(1-p)*fzp/br; nki:=p*fzp/bi; { writeln (round (oc_m+oc_m*1.5*nki),' ',round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr)); writeln ('oc_m

',round(oc_m),' nki ',round( nki)); writeln ('oc_m ',round(oc_m),' nkr ',round( nkr));} until round (oc_m+oc_m*1.5*nki)<> round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr); {writeln ('ok ',round (oc_m+oc_m*1.5*nki),' ',round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr)); writeln ('ok nkr : ',round(nkr) ,' nki : ',nki);} { Зарплата по КТУ выпл. рабочим } for i:=1 to 3 do for j:=1 to kol_vo[i] do a[i,j,7]:=round(nkr*balls[i,j]); { Зарплата по КТУ выпл. ИТР } for j:=1 to kol_vo[i] do a[4,j,7]:=round(nki*balls[4,j]); { Итоговое суммирование } for i:=1 to 4 do for j:=1 to kol_vo[i] do begin a[i,j,17]:=0;a[i,j,20]:=0; for h:=3 to 5 do a[i,j,17]:=a[i,j,17]+a[i,j,h]; for h:=7 to 16 do a[i,j,17]:=a[i,j,17]+a[i,j,h]; for h:=17

to 19 do a[i,j,20]:=a[i,j,20]+a[i,j,h]; end; end; end. Файл, отвечающий за вывод данных в выводные таблицы. Unit4.pas unit unit4; interface uses unit1; procedure vivod; implementation procedure vivod ; var i,j,h:integer; begin {Вывод в таблицу} for i:=1 to 4 do begin str(i,s);assign(f,'vihod\'+s+'-'+mw+'.txt');rewrite(f); s:='Таблица заработной платы по ' +s+' участку на '+mes[n_mes]+' месяц'; writeln(f,s); {Создание шапки таблицы} assign(f1,'vhod/shapka');reset(f1); for j:=1 to 6 do begin readln(f1,z);writeln(f,z);end;close(f1); for j:=1 to kol_vo[i] do begin {Вывод данных в таблицу} write(f,'|');write(f,j:2);write(f,'|');