|
Помогите разобраться с программой
|
|||
---|---|---|---|
#18+
В программе есть формула pproc=20*(1-kisp)*DAY(datz)/datk kisp - коэффициент исполнительности (высчитывается ранее) datz - дата расчета datk - ??? (возможно кол-во дней в месяце) ************************************************ * BKI44 Печать коэффициента исполнительности * *********************************************** SET DATE BRIT SET TALK OFF USE rasp SET SAFE OFF INDE ON STR(podr,3) TO ipodr SET SAFE ON SELE 1 USE rasp INDE ipodr SELE 2 use dfio set safe off inde on str(podr,3) to dfiop set safe on sele 2 use dfio inde dfiop SELE 1 SET RELA TO STR(podr,3) INTO b SELE 3 USE kalent INDE ikt SELE 4 USE kalenp INDE ikp CLEAR nst=1 STOR CTOD('00/00/00') TO datz @ 1,10 SAY 'Задай дату расчета 'GET datz READ CLEA @ 5,10 say 'ЖДИТЕ........ИДЕТ ФОРМИРОВАНИЕ ТЕКСТОВОГО ФАЙЛА BKI44.TXT' SET DEVI TO PRINT SET PRINT TO c:\BKI\BKI44.TXT *Haч кон тек мес SELE 3 SET FILT TO MONTH(datt)=MONTH(datz) GO TOP dtb=datt GO BOTT dte=datt datk=DAY(dte)-DAY(dtb)+1 *Hач кон пред мес IF MONTH(datz)=1 SELE 4 SET FILTER TO MONT(datt)=12 GO TOP dpb=datt GO BOTT dpe=datt ELSE SET FILT TO MONTH(datt)=MONTH(dtb)-1 GO TOP dpb=datt GO BOTT dpe=datt ENDI nst=nst+1 @ nst,40 say 'КОЭФФИЦИЕНТ ИСПОЛНИТЕЛЬНОСТИ' nst=nst+1 @ nst,38 say 'по подразделениям завода на' @ nst,67 say dtoc(datz) nst=nst+3 @ nst,1 say repl('-',91) nst=nst+1 @ nst,1 say ': шифр : :' @ nst,30 say ' коэф- : всего:' @ nst,45 say ' : не в ы п о л н е н о:' @ nst,76 say ' отста-: :' nst=nst+1 @ nst,1 say ':подраз-: Ф И О :' @ nst,30 say 'фициент: :' @ nst,45 say ' выпол-:---------------------:' @ nst,76 say ' вание :процент:' nst=nst+1 @ nst,1 say ':деления: :' @ nst,30 say ' испол-: доку- :' @ nst,45 say ' нено : :в том числе: :' @ nst,76 say 'в днях : умень-:' nst=nst+1 @ nst,1 say ': испол-: :' @ nst,30 say 'нитель-: :' @ nst,45 say ' : :-----------:о/к:' @ nst,76 say 'в те : шения:' nst=nst+1 @ nst,1 say ':нителя : исполнителя :' @ nst,30 say 'ности :ментов :' @ nst,45 say ' :всего: тек.:прош.: :' @ nst,76 say ' кущем : премии:' nst=nst+1 @ nst,1 say ': : :' @ nst,30 say ' : :' @ nst,45 say ' : : мес.: мес.: :' @ nst,76 say 'месаце : :' nst=nst+1 @ nst,1 say repl('-',91) nst=nst+1 SELE 1 ******************************************* set devi to scre set colo to rb+/n @ 12,23 to 21,52 doub set colo to g+/n @ 14,28 say 'Обработано записей' @ 18,28 say replicate(chr(178),22) set colo to gr+/n nummax=reccount() shift=0 if nummax<22 rabnum=int(22/nummax)+1 else rabnum=1 endif numrec=1 *@ 15,34 say numrec pict'####9' *shift=int(numrec*22/nummax+0.5)-rabnum *@ 18,27+shift say replicate(chr(219),rabnum) ************************************ DO WHIL .NOT.EOF() kodpr=podr rfio=b->fio rnk=b->nk RAN=SPACE(1) STOR 0 TO vsego,vip,novip,novipt,novipp STOR 0 TO otst,rotst,psap,nvsego ******************************************** DO WHIL .NOT.EOF().AND.podr=kodpr ****************************************** RAN=AN set devi to scre numrec=numrec+1 @ 15,34 say numrec pict'####9' shift=int((numrec-1)*22/nummax+0.5)-rabnum @ 18,28+shift say replicate(chr(219),rabnum) set devi to print ******************************************** IF RAN='1' SKIP LOOP ENDIF IF DAY(datper)<>0 rdatisp=datper ELSE rdatisp=datisp ENDI if rdatisp>dte skip loop endif if rdatisp<dtb if datf<dtb .and. day(datf)#0 skip loop endif endi IF rdatisp<=datz vsego=vsego+1 IF DAY(datf)=0 novip=novip+1 IF rdatisp>=dtb novipt=novipt+1 ELSE IF rdatisp<=dpb .OR. RDATIsp>=dpb novipp=novipp+1 ENDI ENDI ELSE if datf<=datz vip=vip+1 endif ENDI * отставание в днях в тек мес rabisp=rdatisp rabf=datf IF DAY(datf)=0 rabf=datz IF rdatisp<dtb rotst=DAY(rabf) ELSE rotst=DAY(rabf)-DAY(rabisp) ENDI otst=otst+rotst ELSE IF datf>=rdatisp.AND.datf>dtb IF datf>=datz rabf=datz ENDI IF rdatisp<=dtb rotst=DAY(rabf) ELSE rotst=DAY(rabf)-DAY(rabisp) IF rotst<0 rotst=0 ENDI ENDI otst=otst+rotst ENDI ENDI ENDI ****************************** *endif SKIP *rotst=0 ENDDO ***** if vsego#0 .or. rdatisp>datz if vsego<5 .and.novip#0 vsego1=5 else vsego1=vsego endif * расчет коефф исполн kisp=round(1-6.4*otst*rnk/((DAY(datz)+30)*(vsego1+vip)),2) if kisp<=0 if vip>0 kisp=0.01 else kisp=0.00 endif else IF kisp=1 IF vip<>vsego kisp=0.99 ENDI ENDI endi * процент ум премии IF kodpr<200 pproc=20*(1-kisp)*DAY(datz)/datk IF pproc>20 pproc=20.00 ENDI ELSE pproc=50*(1-kisp)*DAY(datz)/datk IF pproc>50 pproc=50 ENDI ENDI if vsego=0 pproc=0 kisp=1 endi nst=nst+1 if vsego#0 *************************************** @ nst,3 SAY str(kodpr,3) @ nst,10 say rfio @ nst,31 say roun(kisp,2) pict '9.99' @ nst,38 SAY STR(vsego,3) @ nst,47 SAY STR(vip,3) @ nst,59 say str(novipt,3) @ nst,65 say str(novipp,3) @ nst,53 say str(novip,3) @ nst,74 SAY STR(otst,6) @ nst,84 say roun(pproc,2) pict '99.9' nst=nst+1 *************************************** *CLEA endif endif ENDDO nst =nst+2 @ nst,10 say 'РАСЧЕТ ПРОИЗВЕДЕН' @ NST,29 say time() @ nst,40 say date() nst=nst+1 @ nst,1 say ' ' CLOSE DATA SET DATE BRIT SET DEVI TO SCRE SET PRINT TO CLEA @ 10,10 SAY 'Данные для печати занесены в файл bki44.txt' @ 15,1 SAY ' ' WAIT ' НАЖМИТЕ -<<ENTER>>' return ******************************** ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2011, 16:02 |
|
Помогите разобраться с программой
|
|||
---|---|---|---|
#18+
datk похоже количество дней в месяце, но посчитано извращенным способом по таблице kalent Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2011, 16:16 |
|
Помогите разобраться с программой
|
|||
---|---|---|---|
#18+
Нажимаем кнопочки CTRL+F, затем в открывшемся окне пишем то, что хотим найти. В данном случае "datk". И находим Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Т.е. datk - это количество дней между первой и последней записями некой таблицы, относящихся к указанному номеру месяца. Другими словами, значение datk находится в диапазоне от 1 до количества дней в месяце расчета. В зависимости от того, какие данные есть в таблице и как она отсортирована. Т.е. что есть "начало", а что есть "конец". Далеко не факт, что таблица упорядочена по дате. Уточняем, что же находится в 3 рабочей области Код: plaintext 1. 2.
Вероятно, данный код предполагает, что в таблице kalent находятся данные только одного года, либо здесь своеобразная логика. А также, что индекс ikt сортирует эту таблицу по возрастанию даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2011, 16:21 |
|
Помогите разобраться с программой
|
|||
---|---|---|---|
#18+
Таблица kalent DATT CHAS ND31.05.2008 800 629.02.2008 800 331.01.2008 800 001.03.2008 800 031.03.2008 0 001.04.2008 0 001.05.2008 800 530.04.2008 0 030.06.2008 0 701.06.2008 0 001.07.2008 0 131.07.2008 0 001.01.2008 800 701.02.2008 800 201.08.2008 0 031.08.2008 0 001.09.2008 0 030.09.2008 0 001.10.2008 0 031.10.2008 0 001.11.2008 0 030.11.2008 0 001.12.2008 0 031.12.2008 0 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2011, 16:32 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1584635]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 152ms |
0 / 0 |