Konu: scan, endscan
Herkese merhaba,
scan , endscan kullanarak bir dosyayı taratıp işlem yapıyorum fakat çok uzun sürüyor 10 dakika gibi ,ne yapıp bu süreyi kısaltabilirim ?
yapmak istediğim kısaca şu ;
1-elimde yapıalcak iş listem var süreleri(süre saat cinsinden) ve tezgahları belli (crsisler)
2-tezgah listem var (crstez)
3-bir aylık bir takvim oluşturuyorum ve hangi gün kaç saat çalışılacak belirliyorum(crstakvim)
4-çalışma hergün saat 08:00 da başlayacak
bunlara göre iş listesindeki işler sırano suna göre ne zaman başlayacak ne zaman bitecek bulmaya çalışıyorum
SET DATE BRITISH
SET DELETED on
CREATE CURSOR crssaat(sira i,saat c(10),yuk n(1),workORDERid c(6))
FOR a=1 TO 1439
m.lnsira = sira+1
INSERT INTO crssaat ;
(sira);
VALUES ;
(m.lnsira )
ENDFOR
SELECT crssaat
GOTO top
SCAN
lnSeconds = crssaat.sira
ltDt = {^2013/01/26 00:00:00} + lnSeconds
replace saat WITH SUBSTR(TTOC(ltDt,3),12) IN crssaat
ENDSCAN
replace sira WITH sira+1439 for sira<480 IN crssaat all
replace sira WITH sira-479 IN crssaat all
CREATE CURSOR crstakvim(tarih d,yil N(4),hafta N(2),gun N(1),gunaciklama c(15),sira i,Hgun c(3),saat n(4,1),plyuk n(5,1),plybakiye n(5,1))
FOR a=0 TO 30
m.ldDate=DATE()+m.a
m.lngun = sira+1
m.lcG = "G"
IF m.lngun<=9
m.lcG="G0"
endif
INSERT INTO crstakvim ;
(tarih,yil,hafta,gun,gunaciklama,sira,Hgun,saat);
VALUES ;
(m.ldDate,YEAR(m.ldDate),WEEK(m.ldDate,3,2),DOW(m.ldDate,2),;
CDOW(m.ldDate),m.a+1,m.lcG+ALLTRIM(STR(m.lngun)),0)
ENDFOR
***tezgahlar
CREATE CURSOR crstez(kod c(4),sira i)
FOR a=1 TO 7
m.lnsira = sira+1
m.lcG = "TB"
INSERT INTO crstez ;
(kod,sira);
VALUES ;
(m.lcG+ALLTRIM(STR(m.lnsira)),m.a+1)
ENDFOR
****tezgah çalışma takvimi
replace saat WITH 9.5 FOR gun=1 IN crstakvim
replace saat WITH 13.5 FOR gun=2 IN crstakvim
replace saat WITH 24 FOR gun=3 IN crstakvim
replace saat WITH 24 FOR gun=4 IN crstakvim
replace saat WITH 24 FOR gun=5 IN crstakvim
******yapılacak işlerin listesi
CREATE CURSOR crsisler(tezgah c(4),workORDERid c(6),sirano n(2),sure n(5,1),tarihb d,saatb c(5),tarihs d,saats c(5))
INSERT INTO crsisler values ("TB1","330256",0,9.2,{},"",{},"")
INSERT INTO crsisler values ("TB1","330315",1,23.1,{},"",{},"")
INSERT INTO crsisler values ("TB1","330259",2,8.3,{},"",{},"")
INSERT INTO crsisler values ("TB1","330319",3,9.1,{},"",{},"")
INSERT INTO crsisler values ("TB1","330009",4,15.8,{},"",{},"")
INSERT INTO crsisler values ("TB1","330349",5,9.2,{},"",{},"")
INSERT INTO crsisler values ("TB3","330321",0,2.3,{},"",{},"")
INSERT INTO crsisler values ("TB3","330307",1,183.3,{},"",{},"")
INSERT INTO crsisler values ("TB4","330257",0,21.3,{},"",{},"")
INSERT INTO crsisler values ("TB4","330251",1,16.7,{},"",{},"")
INSERT INTO crsisler values ("TB4","330191",2,13.2,{},"",{},"")
INSERT INTO crsisler values ("TB4","330313",3,7.6,{},"",{},"")
INSERT INTO crsisler values ("TB5","330322",0,17.9,{},"",{},"")
INSERT INTO crsisler values ("TB5","330320",1,9.9,{},"",{},"")
INSERT INTO crsisler values ("TB5","330347",2,33.0,{},"",{},"")
INSERT INTO crsisler values ("TB5","330348",3,7.6,{},"",{},"")
INSERT INTO crsisler values ("TB7","330234",0,25.7,{},"",{},"")
INSERT INTO crsisler values ("TB7","330235",1,14.8,{},"",{},"")
INSERT INTO crsisler values ("TB7","330115",2,173.6,{},"",{},"")
INSERT INTO crsisler values ("TB7","330116",3,23.6,{},"",{},"")
INSERT INTO crsisler values ("TB7","330114",4,182.3,{},"",{},"")
INSERT INTO crsisler values ("TB7","330090",5,90.3,{},"",{},"")
INSERT INTO crsisler values ("TB7","330185",6,68.4,{},"",{},"")
***************************************************
SELECT crstez
GOTO top
scan
m.lctezplan=ALLTRIM(kod)
SELECT tezgah,workORDERid,sirano,sure,tarihb,saatb,tarihs,saats FROM crsisler ;
WHERE ALLTRIM(tezgah)==m.lctezplan AND sirano<97 INTO CURSOR crspl00 ORDER BY sirano readwrite
SELECT A.tarih as wdate,A.tarih,B.sira,ALLTRIM(SUBSTR(B.saat,4,8))as saat,B.yuk,B.workORDERid,B.sira as sira2 FROM crstakvim A,crssaat B ;
WHERE A.tarih=A.tarih INTO CURSOR crsbbilk ORDER BY A.tarih,B.sira readwrite
replace tarih WITH tarih+1 FOR sira>960 IN crsbbilk all
replace yuk WITH 0,sira2 WITH 0 IN crsbbilk all
SELECT A.kod as tezgah,B.tarih,B.saat,B.plyuk,B.plybakiye FROM crstez A,crstakvim B ;
WHERE kod==m.lctezplan AND tarih>=DATE() INTO CURSOR crsPL00tez ORDER BY tarih readwrite
SELECT crsPL00tez
GO top
SCAN
m.lnyuk=saat*60
replace yuk WITH 1 FOR crsbbilk.wdate=crsPL00tez.tarih AND crsPL00tez.saat>0 AND crsbbilk.sira<m.lnyuk IN crsbbilk
ENDSCAN
SELECT * FROM crsbbilk WHERE yuk>0 INTO CURSOR crsbb readwrite
SELECT crspl00
GOTO top
scan
m.lcPLworkORDERid=workORDERid
m.lnPLsno=sirano
m.lnteosure = sure*60
**************
SELECT * from crsbb WHERE YUK=1 INTO CURSOR crsbb2 ORDER BY wdate,tarih,sira readwrite
replace yuk WITH 2,workORDERid WITH m.lcPLworkORDERid,sira2 WITH RECNO() FOR recno()<m.lnteosure IN crsbb2
DELETE FOR yuk<2 IN crsbb2 all
SELECT crsbb2
GO top
m.ldbastarih = tarih
m.lcbassaat = saat
GO bottom
m.ldbittarih= tarih
m.lcbitsaat = saat
replace tarihb WITH m.ldbastarih,saatb WITH m.lcbassaat,tarihs WITH m.ldbittarih,saats WITH m.lcbitsaat ;
FOR workORDERid==m.lcPLworkORDERid IN crsisler
GO top
*****sorunlu yer bu son döngü ve yaklaşık 10dk sürüyor
SCAN
replace yuk WITH 2, workORDERid WITH m.lcPLworkORDERid FOR crsbb.tarih=crsbb2.tarih AND crsbb.sira=crsbb2.sira IN crsbb
ENDSCAN
**************
ENDSCAN
ENDSCAN
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)