powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите разобраться с программой
5 сообщений из 5, страница 1 из 1
Помогите разобраться с программой
    #37060498
LjAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В программе есть формула 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
********************************
...
Рейтинг: 0 / 0
Помогите разобраться с программой
    #37060517
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
datk похоже количество дней в месяце, но посчитано извращенным способом по таблице kalent
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELE  3 
USE kalent INDE ikt
...
*Haч кон тек мес
SELE  3 
SET FILT TO MONTH(datt)=MONTH(datz)
GO TOP
dtb=datt
GO BOTT
dte=datt
datk=DAY(dte)-DAY(dtb)+ 1 
смотри что в таблице kalent хранится, если там все дни и отсортировано по возрастанию, то datk точно количество дней в месяце
Код: plaintext
1.
USE kalent INDE ikt
brow
...
Рейтинг: 0 / 0
Помогите разобраться с программой
    #37060522
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нажимаем кнопочки CTRL+F, затем в открывшемся окне пишем то, что хотим найти. В данном случае "datk". И находим

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
*Haч кон тек мес
SELE  3 
SET FILT TO MONTH(datt)=MONTH(datz)

GO TOP
dtb=datt

GO BOTT
dte=datt

datk=DAY(dte)-DAY(dtb)+ 1 

Т.е. datk - это количество дней между первой и последней записями некой таблицы, относящихся к указанному номеру месяца.

Другими словами, значение datk находится в диапазоне от 1 до количества дней в месяце расчета. В зависимости от того, какие данные есть в таблице и как она отсортирована. Т.е. что есть "начало", а что есть "конец". Далеко не факт, что таблица упорядочена по дате.

Уточняем, что же находится в 3 рабочей области

Код: plaintext
1.
2.
SELE  3 
USE kalent INDE ikt

Вероятно, данный код предполагает, что в таблице kalent находятся данные только одного года, либо здесь своеобразная логика. А также, что индекс ikt сортирует эту таблицу по возрастанию даты.
...
Рейтинг: 0 / 0
Помогите разобраться с программой
    #37060539
LjAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица 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
...
Рейтинг: 0 / 0
Помогите разобраться с программой
    #37060561
LjAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Разобрался.

Не понятен смысл формулы. Если считаешь 1 числа, то процент уменьшения премии ~1.2, если 30 числа то 50 (при низком или равном 0 коэффициенте исполнительности).
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите разобраться с программой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]