added LSL2 stored procedures
This commit is contained in:
parent
09f1a66046
commit
c667dd56eb
@ -141,3 +141,4 @@ Service GetComputerDomain()
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
139
LSL2/STPROC/AC_RPT1.txt
Normal file
139
LSL2/STPROC/AC_RPT1.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
compile function AC_RPT1()
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function getprinterlist, getprofilestring, writeprofilestring, extdevicemode
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property
|
||||||
|
declare function set_printer, Printer_Select
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield, ac_rpt1_prn
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert msg_equates
|
||||||
|
|
||||||
|
Params = dialog_box( 'AC_RPT1', @window, '*CENTER' )
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
open 'SYSLISTS' to SysListsTable else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to open SYSLISTS...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
ListsId = 'AC_RPT1*':@station
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
EntryDateFrom = Params<1>
|
||||||
|
EntryDateThru = Params<2>
|
||||||
|
Custs = Params<3>
|
||||||
|
Open = Params<4>
|
||||||
|
Closed = Params<5>
|
||||||
|
DirToPrinter = Params<6>
|
||||||
|
|
||||||
|
Stat = utility( 'CURSOR', 'H' )
|
||||||
|
Stmt = 'SELECT ANNUAL_CONTRACTS BY CUST_NAME'
|
||||||
|
RestStmt = ''
|
||||||
|
if EntryDateFrom and EntryDateThru then
|
||||||
|
RestStmt := ' WITH ENTRY_DATE FROM ':QUOTE(EntryDateFrom):' TO ':QUOTE(EntryDateThru)
|
||||||
|
end else
|
||||||
|
if EntryDateFrom then
|
||||||
|
RestStmt := " WITH ENTRY_DATE GE ":QUOTE(EntryDateFrom)
|
||||||
|
end
|
||||||
|
if EntryDateThru then
|
||||||
|
RestStmt := " WITH ENTRY_DATE LE ":QUOTE(EntryDateThru)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if Custs then
|
||||||
|
swap @vm with "' '" in Custs
|
||||||
|
Custs = "'":Custs:"'"
|
||||||
|
if RestStmt then
|
||||||
|
RestStmt := ' AND WITH CUST_NO = ':Custs
|
||||||
|
end else
|
||||||
|
RestStmt := ' WITH CUST_NO = ':Custs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if Open then
|
||||||
|
if RestStmt then
|
||||||
|
RestStmt := ' AND WITH STATUS = "O"'
|
||||||
|
end else
|
||||||
|
RestStmt := ' WITH STATUS = "O"'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if Closed then
|
||||||
|
if RestStmt then
|
||||||
|
RestStmt := ' AND WITH STATUS = "C"'
|
||||||
|
end else
|
||||||
|
RestStmt := ' WITH STATUS = "C"'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Stmt := RestStmt
|
||||||
|
rlist( Stmt, target_savelist$, ListsId, '', '' )
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
if @reccount then
|
||||||
|
Cmd = "LIST ANNUAL_CONTRACTS JUSTLEN 4 CUST_NAME JUSTLEN 30 PO JUSTLEN 18 "
|
||||||
|
Cmd:= "STATUS JUSTLEN 6 TOT_CONTRACT_AMOUNT TOT_REL_AMOUNT BALANCE "
|
||||||
|
Cmd:= "HEADING ":'"':" Annual Contracts by Company 'D' 'T' PAGE # 'PPL'":'"'
|
||||||
|
if DirToPrinter = 'Yes' then
|
||||||
|
|
||||||
|
PrintPath = Printer_Select('',1) ;* Get default printer path
|
||||||
|
Void = set_printer( 'INIT', '', '', '':@fm:1.25, 1, '',PrintPath )
|
||||||
|
ac_rpt1_prn( '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
Void = set_printer( 'INIT', '', '', '', 0, '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
end else
|
||||||
|
or_view( '', Cmd )
|
||||||
|
Void = set_property( 'ORPRV.PRINT', 'ENABLED', 0 )
|
||||||
|
WinId = 'ORPRV'
|
||||||
|
loop
|
||||||
|
while get_property( WinId, 'HANDLE' )
|
||||||
|
yield()
|
||||||
|
repeat
|
||||||
|
ToPrint = ''
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'Do you want to print this report?'
|
||||||
|
MsgInfo<micon$> = '?'
|
||||||
|
MsgInfo<mtype$> = 'BNY'
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mdefbtn$> = 2 ;* default to no
|
||||||
|
ToPrint = msg( @window, MsgInfo )
|
||||||
|
if ToPrint then
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
Void = set_printer( 'INIT', '', '', '':@fm:1.25, 1, '' )
|
||||||
|
ac_rpt1_prn( '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
Void = set_printer( 'INIT', '', '', '', 0, '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'NO Records meeting your date criteria!!'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = MSG( '', MsgInfo )
|
||||||
|
end
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
139
LSL2/STPROC/AC_RPT1_PRN.txt
Normal file
139
LSL2/STPROC/AC_RPT1_PRN.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
SUBROUTINE AC_RPT1_PRN(Dummy)
|
||||||
|
Dummy = ''
|
||||||
|
* LIST ANNUAL_CONTRACTS JUSTLEN 4 CUST_NAME JUSTLEN 30 PO JUSTLEN 18 STATUS JUSTLEN 6 TOT_CONTRACT_AMOUNT TOT_REL_AMOUNT BALANCE HEADING " Annual Contracts by Company 'T' PAGE # 'PPL'"
|
||||||
|
*
|
||||||
|
DECLARE FUNCTION SET_STATUS, SET_FSERROR, SEND_INFO, SET_ROWDEF, SET_PRINTER
|
||||||
|
* HEADING/FOOTING
|
||||||
|
TheHeader = " Annual Contracts by Company 'D' 'T' PAGE # 'P'"
|
||||||
|
HeadPos = '.75,2.5,1.25,1,1.5,1.5,1.5'
|
||||||
|
convert ',' to @fm in HeadPos
|
||||||
|
ColHeader = "Key" : @vm : "Customer" : @vm : "PO" : @vm : "Status" : @vm : "Contract Amount" : @vm : "Release Amount":@vm: "Balance"
|
||||||
|
ColHeader<-1> = str( '-', 5 ):@vm:str( '-', 25 ):@vm:str( '-', 15 ):@vm:str( '-', 15 ):@vm:str( '-', 17 ):@vm:str( '-', 17 ):@vm:str( '-', 17 )
|
||||||
|
Void = set_printer( 'FONTHEADFOOT' )
|
||||||
|
Void = set_printer( 'HEADER', TheHeader, HeadPos, ColHeader )
|
||||||
|
*
|
||||||
|
@RECCOUNT=0
|
||||||
|
FIRST.PASS=1
|
||||||
|
LAST.RECORD=0
|
||||||
|
READERR=0
|
||||||
|
*
|
||||||
|
* OPEN DICT AND DATA FILES
|
||||||
|
*
|
||||||
|
OPEN "DICT","ANNUAL_CONTRACTS" TO @DICT ELSE RETURN
|
||||||
|
OPEN "","ANNUAL_CONTRACTS" TO FILE.IN ELSE RETURN
|
||||||
|
*
|
||||||
|
* MAKE COLUMN HEADING
|
||||||
|
*
|
||||||
|
READRECORD:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
READNEXT @ID, WHICH.VALUE ELSE
|
||||||
|
IF STATUS() GT 0 THEN
|
||||||
|
STATX = SET_FSERROR()
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> EQ 421 THEN
|
||||||
|
STATX = SET_FSERROR()
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> NE 111 THEN
|
||||||
|
@ANS = @FILE.ERROR<1>
|
||||||
|
STATX = set_printer( 'TEXT', {RLIST_TEXT_4} )
|
||||||
|
READERR += 1
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
LAST.RECORD=1
|
||||||
|
END
|
||||||
|
@FILE.ERROR.MODE=0
|
||||||
|
*
|
||||||
|
S.ATID = @ID
|
||||||
|
*
|
||||||
|
IF FIRST.PASS AND LAST.RECORD THEN
|
||||||
|
STATX = set_printer( 'TEXT', {RLIST_TEXT_2} )
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
*
|
||||||
|
IF LAST.RECORD THEN GOTO BREAKS
|
||||||
|
*
|
||||||
|
IF @REDUCTION.DONE THEN
|
||||||
|
READO @RECORD FROM FILE.IN, @ID ELSE
|
||||||
|
@FILE.ERROR.MODE = 0
|
||||||
|
IF STATUS() GT 0 THEN
|
||||||
|
STATX = SET_FSERROR()
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> NE 100 THEN
|
||||||
|
READERR += 1
|
||||||
|
END
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
END
|
||||||
|
*
|
||||||
|
@RECCOUNT += 1
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CALCULATE VALUE(S) FOR COLUMN(S)
|
||||||
|
*
|
||||||
|
S.ATID={@ID}
|
||||||
|
I.ATID=S.ATID
|
||||||
|
S.CUSTULNAME={CUST_NAME}
|
||||||
|
I.CUSTULNAME=S.CUSTULNAME
|
||||||
|
S.PO={PO}
|
||||||
|
I.PO=S.PO
|
||||||
|
S.STATUS={STATUS}
|
||||||
|
I.STATUS=S.STATUS
|
||||||
|
S.TOTULCONTRACTULAMOUNT={TOT_CONTRACT_AMOUNT}
|
||||||
|
I.TOTULCONTRACTULAMOUNT=S.TOTULCONTRACTULAMOUNT
|
||||||
|
S.TOTULRELULAMOUNT={TOT_REL_AMOUNT}
|
||||||
|
I.TOTULRELULAMOUNT=S.TOTULRELULAMOUNT
|
||||||
|
S.BALANCE={BALANCE}
|
||||||
|
I.BALANCE=S.BALANCE
|
||||||
|
*
|
||||||
|
*
|
||||||
|
IF FIRST.PASS THEN
|
||||||
|
FIRST.PASS=0
|
||||||
|
GOTO DETAIL
|
||||||
|
END
|
||||||
|
*
|
||||||
|
*
|
||||||
|
BREAKS:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PERFORM LAST RECORD OUTPUT IF DONE
|
||||||
|
*
|
||||||
|
IF LAST.RECORD THEN
|
||||||
|
IF READERR THEN
|
||||||
|
@ANS=READERR
|
||||||
|
STATX = set_printer( 'TEXT', {RLIST_TEXT_3} )
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
*
|
||||||
|
DETAIL:
|
||||||
|
*
|
||||||
|
* DO CONVERSIONS IF ANY
|
||||||
|
*
|
||||||
|
IF S.STATUS NE "" THEN S.STATUS=OCONV(S.STATUS,"[AC_STATUS_CONV]")
|
||||||
|
IF S.TOTULCONTRACTULAMOUNT NE "" THEN S.TOTULCONTRACTULAMOUNT=OCONV(S.TOTULCONTRACTULAMOUNT,"MD2,$")
|
||||||
|
IF S.TOTULRELULAMOUNT NE "" THEN S.TOTULRELULAMOUNT=OCONV(S.TOTULRELULAMOUNT,"MD2,$")
|
||||||
|
IF S.BALANCE NE "" THEN S.BALANCE=OCONV(S.BALANCE,"MD2,$")
|
||||||
|
*
|
||||||
|
* PRINT DETAIL LINE
|
||||||
|
*
|
||||||
|
PRINTLINE = ""
|
||||||
|
PRINTLINE := S.ATID:@vm
|
||||||
|
PRINTLINE := S.CUSTULNAME:@vm
|
||||||
|
PRINTLINE := S.PO:@vm
|
||||||
|
PRINTLINE := S.STATUS:@vm
|
||||||
|
PRINTLINE := S.TOTULCONTRACTULAMOUNT:@vm
|
||||||
|
PRINTLINE := S.TOTULRELULAMOUNT:@vm
|
||||||
|
PRINTLINE := S.BALANCE:@vm
|
||||||
|
TableColInfo = '<+1080':@vm:'<+3600':@vm:'<+1800':@vm:'<+1440':@vm:'>+2160':@vm:'>+2160':@vm:'>+2160'
|
||||||
|
Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE )
|
||||||
|
*STATX = set_printer( 'TEXTCOL', PRINTLINE )
|
||||||
|
*
|
||||||
|
*
|
||||||
|
GOTO READRECORD
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
166
LSL2/STPROC/AC_SRPT1.txt
Normal file
166
LSL2/STPROC/AC_SRPT1.txt
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
compile function AC_SRPT1()
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property, PrintSetup, Set_Printer
|
||||||
|
declare function set_printer, obj_Install
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield
|
||||||
|
declare subroutine order_srpt1
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert msg_equates
|
||||||
|
$insert oiprint_equates
|
||||||
|
$insert rpt_cfg_equ
|
||||||
|
$INSERT PRINTSETUP_EQUATES
|
||||||
|
|
||||||
|
TimeX = Oconv(Time(),'MTS')
|
||||||
|
|
||||||
|
CrLf = Char(13):Char(10)
|
||||||
|
CurDte = OCONV(Date(),"D4/")
|
||||||
|
|
||||||
|
ReportID = "AC001_SRPTCFG"
|
||||||
|
ReportControl = "AC_SRPT1"
|
||||||
|
TableName = 'ANNUAL_CONTRACTS'
|
||||||
|
|
||||||
|
open 'CONFIG' to ConfigTable else
|
||||||
|
Void = msg( '', 'Unable to open CONFIG...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
Read SRptConfig From ConfigTable,ReportID Else
|
||||||
|
Void = msg( '', 'Unable to read ': ReportID:' From CONFIG table!' )
|
||||||
|
return 0
|
||||||
|
End
|
||||||
|
|
||||||
|
Params = dialog_box( ReportControl, @window, '*CENTER' )
|
||||||
|
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
open 'SYSLISTS' to SysListsTable else
|
||||||
|
Void = msg( '', 'Unable to open SYSLISTS...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
ListsId = ReportControl:'*':@station
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
Void = msg( '', 'Unable to clear SYSLISTS ':ListsId:'...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
EntryDateFrom = Params<1>
|
||||||
|
EntryDateThru = Params<2>
|
||||||
|
Custs = Params<3>
|
||||||
|
Open = Params<4>
|
||||||
|
Closed = Params<5>
|
||||||
|
|
||||||
|
Stat = utility( 'CURSOR', 'H' )
|
||||||
|
|
||||||
|
WithStmt = 'SELECT ':TableName:' '
|
||||||
|
WthSwt = 0
|
||||||
|
Begin Case
|
||||||
|
Case EntryDateFrom and EntryDateThru
|
||||||
|
WthSwt = 1
|
||||||
|
WithStmt := " WITH ENTRY_DATE FROM '": EntryDateFrom:"' TO '":EntryDateThru: "' "
|
||||||
|
TtlLin2 = 'Entry Dates: From ':EntryDateFrom:' To ':EntryDateThru
|
||||||
|
Case EntryDateFrom
|
||||||
|
WthSwt = 1
|
||||||
|
WithStmt := " WITH ENTRY_DATE GE '":EntryDateFrom:"' "
|
||||||
|
TtlLin2 = 'Entry Dates: From ':EntryDateFrom:' To Latest'
|
||||||
|
Case EntryDateThru
|
||||||
|
WthSwt = 1
|
||||||
|
WithStmt := " WITH ENTRY_DATE LE '":EntryDateThru:"' "
|
||||||
|
TtlLin2 = 'Entry Dates: From Earliest To ':EntryDateThru
|
||||||
|
Case 1
|
||||||
|
TtlLin2 = 'Entry Dates: ALL'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If Custs then
|
||||||
|
CustCnt = Count(@vm,Custs)
|
||||||
|
If CustCnt > 20 Then
|
||||||
|
TtlLin3 = 'Customers: More Than 20 Selected'
|
||||||
|
End Else
|
||||||
|
TtlLin3 = Custs
|
||||||
|
swap @vm with ", " in TtlLin3
|
||||||
|
TtlLin3 = 'Customers: ':TtlLin3
|
||||||
|
End
|
||||||
|
swap @vm with "' '" in Custs
|
||||||
|
Custs = "'":Custs:"'"
|
||||||
|
If WthSwt Then WithStmt := ' AND '
|
||||||
|
WithStmt := ' WITH CUST_NO = ':Custs
|
||||||
|
WthSwt = 1
|
||||||
|
end else
|
||||||
|
TtlLin3 = 'Customers: ALL'
|
||||||
|
end
|
||||||
|
|
||||||
|
If Open then
|
||||||
|
If WthSwt Then WithStmt := ' AND '
|
||||||
|
WithStmt := ' WITH STATUS = "O" '
|
||||||
|
end
|
||||||
|
If Closed then
|
||||||
|
If WthSwt Then WithStmt := ' AND '
|
||||||
|
WithStmt := ' WITH STATUS = "C" '
|
||||||
|
end
|
||||||
|
|
||||||
|
rlist( WithStmt, target_savelist$, ListsId, '', '' )
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
|
||||||
|
Script = SRptConfig<SlistScript$>
|
||||||
|
|
||||||
|
RptWdt = SRptConfig<Width$>
|
||||||
|
|
||||||
|
Title = obj_Install('Get_Prop','Company'):' ':SRptConfig<Title$>
|
||||||
|
Margin = INT((RptWdt - LEN(Title))/2)
|
||||||
|
LMargin = Margin - 10 ;* 10 equals length of the date
|
||||||
|
RMargin = Margin - 8 ;* 8 equals length of 'Page....'
|
||||||
|
Title = OCONV(Date(),'D4/'):SPACE(LMargin):Title:SPACE(RMargin):"Page'PP''L'"
|
||||||
|
|
||||||
|
SWAP '~Title~' WITH Title IN Script
|
||||||
|
|
||||||
|
TitleLine2 = TtlLin2
|
||||||
|
TitleLine3 = TtlLin3
|
||||||
|
TitleLine4 = ''
|
||||||
|
|
||||||
|
IF TitleLine2 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine2))/2)
|
||||||
|
LMargin = Margin - 7 ;* 7 equals length of time (12:15PM)
|
||||||
|
RMargin = Margin
|
||||||
|
TitleLine2 = OCONV(Time(),'MTH'):SPACE(LMargin):TitleLine2:SPACE(RMargin)
|
||||||
|
SWAP '~SecondTitleLine~' WITH TitleLine2 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~SecondTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine3 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine3))/2)
|
||||||
|
SWAP '~ThirdTitleLine~' WITH "'L'":TitleLine3 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~ThirdTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine4 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine4))/2)
|
||||||
|
SWAP '~FourthTitleLine~' WITH "'L'":TitleLine4 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~FourthTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
Script := ' FOOTING "* Status O = Open; C = Closed" '
|
||||||
|
|
||||||
|
* Added after upgrade to OI4.13a to reset default printer in OIPI32 engine.
|
||||||
|
DefaultPrinter = ''
|
||||||
|
PrintCount = PrintSetup(PRN_GET$,'',Printers,DefaultPrinter)
|
||||||
|
CONVERT ',' TO @FM IN DefaultPrinter
|
||||||
|
DefPrintPath = DefaultPrinter<1>:@FM:DefaultPrinter<3>
|
||||||
|
|
||||||
|
Void = set_printer( 'INIT', '', '', .63:@fm:.63:@fm:.25:@fm:'', 0,'',DefPrintPath )
|
||||||
|
Void = Set_Printer('TERM')
|
||||||
|
|
||||||
|
call slist( Script )
|
||||||
|
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
Void = msg( '', 'Unable to clear SYSLISTS ':ListsId:'...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
RETURN 0
|
28
LSL2/STPROC/AC_STATUS_CONV.txt
Normal file
28
LSL2/STPROC/AC_STATUS_CONV.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
SUBROUTINE AC_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
begin case
|
||||||
|
case DataIo = 'O'
|
||||||
|
ReturnedValue = 'Open'
|
||||||
|
case DataIo = 'C'
|
||||||
|
ReturnedValue = 'Closed'
|
||||||
|
end case
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
110
LSL2/STPROC/ADCSVR_EVENTS.txt
Normal file
110
LSL2/STPROC/ADCSVR_EVENTS.txt
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
Function ADCSVR_Events(CtrlEntId, Event, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
|
||||||
|
/********************************************************************************
|
||||||
|
|
||||||
|
*********************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
#Window ADCSVR
|
||||||
|
|
||||||
|
$INSERT ENVIRON_CONSTANTS
|
||||||
|
$INSERT LOGICAL
|
||||||
|
|
||||||
|
EQU STOP$ TO 0
|
||||||
|
EQU START$ TO 1
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_ADCSVR routine'
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Center_Window, StatusLine, Set_Property, End_Dialog, Send_Event, Set_Status, Adios
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, obj_Tables, Post_Event, ShowWindow, obj_ADCSVR, Yield, Utility
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, FindWindow
|
||||||
|
|
||||||
|
GoToEvent Event for CtrlEntId
|
||||||
|
|
||||||
|
Return RetVal else 1
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Events
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Event WINDOW.CREATE(CreateParam)
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
otParms = 'SYSOBJ':@RM:'ADC_SERVER'
|
||||||
|
obj_Tables('LockRec',otParms) ;* Places lock on fictional record
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrorMsg = ErrTitle:@SVM:'Another ADC server is already running.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
Post_Event(@WINDOW,'CLOSE')
|
||||||
|
end else
|
||||||
|
Set_Property(@WINDOW,'@ADC_SERVER',STOP$) ;* Set ADC server property '@ADC_SERVER' to stop
|
||||||
|
GoSub StartStop
|
||||||
|
end
|
||||||
|
|
||||||
|
end event
|
||||||
|
|
||||||
|
Event WINDOW.TIMER()
|
||||||
|
|
||||||
|
Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield()
|
||||||
|
StartStop = Get_Property(@WINDOW,'@ADC_SERVER')
|
||||||
|
|
||||||
|
IF (StartStop = START$) THEN
|
||||||
|
obj_ADCSVR('MetrologyData','')
|
||||||
|
END
|
||||||
|
|
||||||
|
end event
|
||||||
|
|
||||||
|
Event WINDOW.CLOSE(CancelFlag)
|
||||||
|
|
||||||
|
otParms = 'SYSOBJ':@RM:'ADC_SERVER'
|
||||||
|
obj_Tables('LockRec',otParms) ;* Places lock on fictional record
|
||||||
|
Set_Status(0)
|
||||||
|
obj_Tables('UnlockRec',otParms) ;* Removes lock on fictional record
|
||||||
|
Utility('DESTROY', 'SYSTEM')
|
||||||
|
|
||||||
|
end event
|
||||||
|
|
||||||
|
Event START_STOP_BUTTON.CLICK()
|
||||||
|
|
||||||
|
GoSub StartStop
|
||||||
|
|
||||||
|
end event
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
**********
|
||||||
|
StartStop:
|
||||||
|
**********
|
||||||
|
|
||||||
|
StartStop = Get_Property(@WINDOW:'.START_STOP_BUTTON','TEXT')
|
||||||
|
|
||||||
|
IF (StartStop = 'Stop ADC Server') THEN
|
||||||
|
|
||||||
|
* ADC server is running
|
||||||
|
Set_Property(@WINDOW, 'TIMER', '')
|
||||||
|
Set_Property(@WINDOW,'@ADC_SERVER',STOP$) ;* Turn off ADC server
|
||||||
|
Set_Property(@WINDOW:'.START_STOP_BUTTON','TEXT', 'Start ADC Server')
|
||||||
|
Set_Property(@WINDOW:'.CLOSE_BUTTON','ENABLED',1)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
Interval = Get_Property(@Window : '.INTERVAL', 'INVALUE')
|
||||||
|
If Interval EQ '' then
|
||||||
|
Interval = 5
|
||||||
|
Set_Property(@WINDOW:'.INTERVAL','INVALUE',Interval)
|
||||||
|
end
|
||||||
|
Set_Property(@WINDOW, 'TIMER', Interval * 1000) ;* Set timer event to 5000 msecs (5 seconds) to check for shutdown time.
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.START_STOP_BUTTON','TEXT', 'Stop ADC Server')
|
||||||
|
Set_Property(@WINDOW,'@ADC_SERVER',START$) ;* Start the ADC server process
|
||||||
|
Set_Property(@WINDOW:'.CLOSE_BUTTON','ENABLED',0)
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
return
|
61
LSL2/STPROC/ADDINDEXTRANSACTION.txt
Normal file
61
LSL2/STPROC/ADDINDEXTRANSACTION.txt
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
Function AddIndexTransaction(Table, Column, OldRow, NewRow, RowId)
|
||||||
|
|
||||||
|
* Function from Sprezzatura's SENL for adding index transaction from a program
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE FSMsg
|
||||||
|
|
||||||
|
TransactionRow = ""
|
||||||
|
|
||||||
|
SaveRec = @Record
|
||||||
|
SaveDict = @Dict
|
||||||
|
SaveId = @Id
|
||||||
|
|
||||||
|
Open "DICT." : Table To @Dict Then
|
||||||
|
|
||||||
|
@Id = RowId
|
||||||
|
@Record = OldRow
|
||||||
|
|
||||||
|
If Num(Column) Then
|
||||||
|
OldValue = @Record<Column>
|
||||||
|
End Else
|
||||||
|
OldValue = Calculate(Column)
|
||||||
|
End
|
||||||
|
|
||||||
|
@Record = NewRow
|
||||||
|
|
||||||
|
If Num(Column) Then
|
||||||
|
NewValue = @Record<Column>
|
||||||
|
End Else
|
||||||
|
NewValue = Calculate(Column)
|
||||||
|
End
|
||||||
|
|
||||||
|
TransactionRow := Column : @Fm : RowId : @fm : OldValue : @Fm : NewValue : @Fm
|
||||||
|
|
||||||
|
Open "!" : Table To vTable Then
|
||||||
|
|
||||||
|
Lock vTable, 0 Then
|
||||||
|
|
||||||
|
Read Update From vTable, 0 Else Update = @Fm
|
||||||
|
Update := TransactionRow
|
||||||
|
Write Update On vTable, 0 Then
|
||||||
|
Status = 1
|
||||||
|
End Else
|
||||||
|
Status = 0
|
||||||
|
End
|
||||||
|
Unlock vTable, 0 Else FSMsg()
|
||||||
|
End Else
|
||||||
|
Status = 0
|
||||||
|
End
|
||||||
|
End Else
|
||||||
|
Status = 0
|
||||||
|
End
|
||||||
|
End Else
|
||||||
|
Status = 0
|
||||||
|
End
|
||||||
|
|
||||||
|
@Id = SaveId
|
||||||
|
@Dict = SaveDict
|
||||||
|
@Record = SaveRecord
|
||||||
|
|
||||||
|
Return Status
|
||||||
|
|
9
LSL2/STPROC/ADMIN_USER.txt
Normal file
9
LSL2/STPROC/ADMIN_USER.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
compile function admin_user( UserToCheck )
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
$insert lsl_users_equ
|
||||||
|
Valid = xlate( 'LSL_USERS', UserToCheck, lsl_users_admin_user$, 'X' )
|
||||||
|
return Valid
|
59
LSL2/STPROC/AD_TEST.txt
Normal file
59
LSL2/STPROC/AD_TEST.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
COMPILE function AD_Test()
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare function SRPLogonAPI_ValidateUser, RTI_LDAP_Groups_for_user, Datetime, Time, GetTickCount
|
||||||
|
Declare Subroutine Set_Property
|
||||||
|
|
||||||
|
Username = 'Ouellette'
|
||||||
|
Password = 'IndianSc0ut2019*'
|
||||||
|
/*Domain = 'INFINEON.COM'
|
||||||
|
*Domain = 'infineon.com'
|
||||||
|
start = Datetime()
|
||||||
|
|
||||||
|
test = SRPLogonAPI_ValidateUser(Username, Password, Domain)
|
||||||
|
ADGroups = RTI_LDAP_Groups_for_User(Username, Domain)
|
||||||
|
|
||||||
|
stop = Datetime()
|
||||||
|
|
||||||
|
timeToComplete = stop - start
|
||||||
|
*/
|
||||||
|
|
||||||
|
AccessLevel = -1 ; // Assume no access for now.
|
||||||
|
|
||||||
|
// Step 1 - Validate the username and password against one of the approved non-EC domains.
|
||||||
|
ValidUser = 0 ; // Assume not valid for now.
|
||||||
|
|
||||||
|
* Domains = 'na.infineon.com,na,infineon.com'
|
||||||
|
debug
|
||||||
|
* List =''
|
||||||
|
*i = 1
|
||||||
|
* Domains = 'MESSR001.infineon.com,MESSR002.infineon.com,MESSC001.NA.INFINEON.COM,MESSC002.NA.INFINEON.COM,LEOSR001.INFINEON.COM'
|
||||||
|
Username = 'Ouellette'
|
||||||
|
Domain = 'MESSR001.infineon.com'
|
||||||
|
Groups = RTI_LDAP_Groups_for_User(Username, Domain)
|
||||||
|
|
||||||
|
return
|
||||||
|
* ValidUser = SRPLogonAPI_ValidateUser(Username, Password, Domain)
|
||||||
|
* For Each Domain in Domains using ','
|
||||||
|
* Start = GetTickCount()
|
||||||
|
* ValidUser = SRPLogonAPI_ValidateUser(Username, Password, Domain)
|
||||||
|
* Stop = GetTickCount()
|
||||||
|
* Difference = Stop - Start
|
||||||
|
* List<i, 1> = Domain
|
||||||
|
* List<i, 2> = Difference
|
||||||
|
* i=i+1
|
||||||
|
*
|
||||||
|
* Next Domain
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
For Each Domain in Domains using ','
|
||||||
|
Start = GetTickCount()
|
||||||
|
Groups = RTI_LDAP_Groups_for_User(Username, Domain)
|
||||||
|
Stop = GetTickCount()
|
||||||
|
Difference = Stop - Start
|
||||||
|
List<i, 3> = Difference
|
||||||
|
i=i+1
|
||||||
|
|
||||||
|
Next Domain
|
||||||
|
Set_Property(@Window : '.TABLE_1', 'LIST', List)
|
||||||
|
return 0
|
35
LSL2/STPROC/ARRAY_SORT.txt
Normal file
35
LSL2/STPROC/ARRAY_SORT.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
compile subroutine array_sort( Array, SortOrder, Justification )
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function fieldcount
|
||||||
|
declare subroutine v119
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
NumFields = fieldcount( Array, @fm )
|
||||||
|
NumValues = fieldcount( Array<1>, @vm )
|
||||||
|
|
||||||
|
TmpSort = ''
|
||||||
|
for k = 1 to NumValues
|
||||||
|
Tvar = ''
|
||||||
|
for j = 1 TO NumFields
|
||||||
|
Tvar := Array<J,K>:@vm
|
||||||
|
next j
|
||||||
|
Tvar[-1,1] = ''
|
||||||
|
TmpSort<K> = Tvar
|
||||||
|
next k
|
||||||
|
|
||||||
|
convert @fm to @rm in TmpSort
|
||||||
|
convert @vm to @fm in TmpSort
|
||||||
|
TmpSort := @rm
|
||||||
|
v119('S', '', SortOrder, Justification, TmpSort, '')
|
||||||
|
convert @fm to @vm in TmpSort
|
||||||
|
convert @rm to @fm in TmpSort
|
||||||
|
TmpSort[-1,1] = ''
|
||||||
|
for j = 1 to NumValues
|
||||||
|
for k = 1 to NumFields
|
||||||
|
Array<k,j> = TmpSort<j,k>
|
||||||
|
next k
|
||||||
|
next j
|
||||||
|
|
107
LSL2/STPROC/AR_INV_EXP.txt
Normal file
107
LSL2/STPROC/AR_INV_EXP.txt
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
compile function ar_inv_exp(Params,Manual)
|
||||||
|
|
||||||
|
declare function msg, dialog_box, fieldcount
|
||||||
|
declare subroutine rlist,activate_save_select
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert logical
|
||||||
|
$insert invoice_equ
|
||||||
|
$insert invoice_srl_equ
|
||||||
|
equ CrLf$ to char(13):char(10)
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
FromDate = Params<1>
|
||||||
|
ThruDate = Params<2>
|
||||||
|
DosTable = Params<3>
|
||||||
|
open 'INVOICE' to InvoiceTable else
|
||||||
|
Void = msg( '', 'Unable to open INVOICE...' )
|
||||||
|
end
|
||||||
|
TableToUse = 'INVOICE'
|
||||||
|
oswrite '' on DosTable
|
||||||
|
Tstat = status()
|
||||||
|
if Tstat then
|
||||||
|
Err = 'Bad operating system filename'
|
||||||
|
Err<-1> = 'Access Denied'
|
||||||
|
Err<-1> = 'Disk or Directory full'
|
||||||
|
Err<-1> = 'Operating system error not defined elsewhere'
|
||||||
|
Err<-1> = 'Attempt to write a read only file'
|
||||||
|
Void = msg( '', Err<Tstat> )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
osopen DosTable to DosTableVar else
|
||||||
|
Err = 'Bad operating system filename'
|
||||||
|
Err<-1> = 'Access Denied'
|
||||||
|
Err<-1> = 'File does not exist'
|
||||||
|
Err<-1> = 'Undefined error'
|
||||||
|
Void = msg( '', Err<status()> )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
BytePos = 0
|
||||||
|
Cmd = "SELECT ":TableToUse:" BY SEQ WITH ENTRY_DATE FROM ":QUOTE(FromDate):" TO ":QUOTE(ThruDate)
|
||||||
|
rlist( Cmd, target_activelist$, '', '', '' )
|
||||||
|
*activate_save_select( 'BRYCE' )
|
||||||
|
*DEBUG
|
||||||
|
*USED WHEN ERROR DURING THE ENDOFMONTH
|
||||||
|
NumKeys = @reccount
|
||||||
|
Cnt = 0
|
||||||
|
if @reccount then
|
||||||
|
Cnt = 0
|
||||||
|
NumKeys = @reccount
|
||||||
|
Eof = false$
|
||||||
|
loop
|
||||||
|
readnext @id else Eof = true$
|
||||||
|
until Eof
|
||||||
|
read @record from InvoiceTable, @id else
|
||||||
|
Void = msg( '', 'Unable to read ':@id:' from ':TableToUse )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
SalesTots = xlate( TableToUse, @id, 'GL_ACCT_TOTS', 'X' )
|
||||||
|
CustName = xlate( TableToUse, @id, 'CUST_NAME', 'X' )
|
||||||
|
InvoiceAmount = oconv( xlate( TableToUse, @id, 'INVOICE_AMOUNT', 'X' ), 'MD2,$' )
|
||||||
|
Scnt = fieldcount( SalesTots, @vm )
|
||||||
|
BlobOut = ''
|
||||||
|
for i = 1 to Scnt
|
||||||
|
ThisSalesTotLine = SalesTots<1,i>
|
||||||
|
ThisSalesTotLine = trim( ThisSalesTotLine )
|
||||||
|
if len( ThisSalesTotLine ) then
|
||||||
|
SalesCode = field( ThisSalesTotLine, ' ', 1 )
|
||||||
|
SalesCodeTot = field( ThisSalesTotLine, ' ', 2 )
|
||||||
|
swap 'CM' with 'C' in @id ;* DUE TO MAS90
|
||||||
|
BlobOut := quote(@id):',':quote(CustName):','
|
||||||
|
*TCustNo = '41'
|
||||||
|
*TCustNo = ''
|
||||||
|
*TCustNo := oconv( @record<invoice_cust_no$>, 'R(0)#7' )
|
||||||
|
BlobOut := quote(@record<invoice_cust_no$>):','
|
||||||
|
BlobOut := quote(oconv(@record<invoice_entry_date$>, 'D2/')):','
|
||||||
|
BlobOut := quote(oconv(@record<invoice_due_date$>, 'D2/')):','
|
||||||
|
BlobOut := quote(@record<invoice_po$>):','
|
||||||
|
BlobOut := quote(SalesCode):','
|
||||||
|
BlobOut := quote(SalesCodeTot):','
|
||||||
|
BlobOut := quote(InvoiceAmount):','
|
||||||
|
BlobOut := quote(oconv( @record<invoice_discount_amount$>, 'MD2,$' ) )
|
||||||
|
BlobOut := CrLf$
|
||||||
|
end
|
||||||
|
next i
|
||||||
|
osbwrite BlobOut on DosTableVar AT BytePos
|
||||||
|
Tstat = status()
|
||||||
|
if Tstat then
|
||||||
|
Err = 'Bad operating system filename'
|
||||||
|
Err<-1> = 'Access Denied'
|
||||||
|
Err<-1> = 'Disk or directory full'
|
||||||
|
Err<-1> = 'File does not exist'
|
||||||
|
Err<-1> = 'Undefined error'
|
||||||
|
Err<-1> = 'Attempt to write a read only file'
|
||||||
|
Err<-1> = 'Invalid beginning byte position'
|
||||||
|
Void = msg( '', Err<Tstat> )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
BytePos += len( BlobOut )
|
||||||
|
Cnt += 1
|
||||||
|
Percent = oconv( iconv(Cnt/NumKeys, 'MD2'), 'MD0' ):'%'
|
||||||
|
Void = send_info( Percent:' Complete Exporting...' )
|
||||||
|
repeat
|
||||||
|
end else
|
||||||
|
if Manual then
|
||||||
|
Void = msg('', "NO Records meeting your date criteria!!")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
osclose DosTableVar
|
||||||
|
return 0
|
30
LSL2/STPROC/ASSIGN_CAUSE_STATUS_CONV.txt
Normal file
30
LSL2/STPROC/ASSIGN_CAUSE_STATUS_CONV.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
SUBROUTINE ASSIGN_CAUSE_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
begin case
|
||||||
|
case DataIo = 'A'
|
||||||
|
ReturnedValue = 'Active'
|
||||||
|
case DataIo = 'I'
|
||||||
|
ReturnedValue = 'Inactive'
|
||||||
|
case Otherwise$
|
||||||
|
ReturnedValue = ''
|
||||||
|
end case
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
13
LSL2/STPROC/AUDIT.txt
Normal file
13
LSL2/STPROC/AUDIT.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
COMPILE Insert AUDIT
|
||||||
|
|
||||||
|
* Equates for COA table
|
||||||
|
|
||||||
|
EQU AUDIT_TABLENAME$ TO 0.1
|
||||||
|
EQU AUDIT_USERNAME$ TO 0.2
|
||||||
|
EQU AUDIT_DATE_TIME$ TO 0.3 ;* Record key is in parts 0.4 through 0.n
|
||||||
|
|
||||||
|
EQU AUDIT_ACTION$ TO 1 ;* New,Read, Write, Delete
|
||||||
|
EQU AUDIT_FIELDS$ TO 2 ;* Field name
|
||||||
|
EQU AUDIT_OLD_VALS$ TO 3 ;* Old values for each field
|
||||||
|
EQU AUDIT_NEW_VALS$ TO 4 ;* New values for each field
|
||||||
|
EQU AUDIT_ORG_RECORD TO 5 ;* complete record stored here on DELETE action
|
209
LSL2/STPROC/AUDIT_MANAGER.txt
Normal file
209
LSL2/STPROC/AUDIT_MANAGER.txt
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
Subroutine Audit_Manager(ID, Table, CurrentRecord, OrigRecord, Activity)
|
||||||
|
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
||||||
|
permission from SRP Computer Solutions, Inc.
|
||||||
|
|
||||||
|
Name : Audit_Manager
|
||||||
|
|
||||||
|
Description : Updates the Audit table to track modifications of a record.
|
||||||
|
|
||||||
|
Notes : This process is normally called by the Audit_Manager_MFS. It handles all of the audit trail
|
||||||
|
management logic.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
AutoSet [in] -- Allows automatic setting of the SYSTEM_MAINTENANCE record without user intervention.
|
||||||
|
SysFlag [out] -- Returns True if the flag was set to stop people from logging in. Returns False if people
|
||||||
|
are still allowed to log into the application.
|
||||||
|
|
||||||
|
ID [in] -- ID of the record.
|
||||||
|
Table [in] -- Table name where the record being audited is stored.
|
||||||
|
CurrentRecord [in/out] -- Current record as it will be written to disk. If the Activity is "Write" then the
|
||||||
|
audit fields will be updated.
|
||||||
|
OrigRecord [in] -- If called by Audit_Manager_MFS then this is the original record, otherwise this
|
||||||
|
represents a marker for special audit tracking.
|
||||||
|
Activity [in] -- Identifies the audit activity being performed: Read, Write, Delete, or anything else
|
||||||
|
if called directly for special audit tracking.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
05/19/05 axf Initial Program (Original Program MFS_Update_History).
|
||||||
|
11/26/07 dmb Code clean-up and refactoring.
|
||||||
|
04/05/13 dmb Repalce SECURITY_EQUATES with Memory Services to get login security. - [SRPFW-9]
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
|
||||||
|
Declare Subroutine Msg, Lock_Record
|
||||||
|
Declare Function RetStack, Memory_Services
|
||||||
|
|
||||||
|
If Assigned(ID) else ID = ""
|
||||||
|
If Assigned(Table) else Table = ""
|
||||||
|
If Assigned(CurrentRecord) else CurrentRecord = ""
|
||||||
|
If Assigned(OrigRecord) else OrigRecord = ""
|
||||||
|
|
||||||
|
AuditManagerTable = "APP_INFO"
|
||||||
|
|
||||||
|
Convert @Lower_Case to @Upper_Case In Table
|
||||||
|
AuditTable = 'AUDIT_' : Table
|
||||||
|
Username = @USERNAME
|
||||||
|
|
||||||
|
* Declare function GetNetworkUsername
|
||||||
|
* If GetNetworkUsername() EQ "dbakke1" AND Activity _NEC "READ" then debug
|
||||||
|
|
||||||
|
Open AuditTable to HistoryCheck then
|
||||||
|
RecordTracker = No$
|
||||||
|
Locked_handle = ""
|
||||||
|
Temp_activity = ""
|
||||||
|
Success = ""
|
||||||
|
Details = ""
|
||||||
|
New = No$
|
||||||
|
TrackActivity = No$
|
||||||
|
|
||||||
|
CallProgName = RetStack()<2>
|
||||||
|
|
||||||
|
Gosub App_Info
|
||||||
|
|
||||||
|
If TrackActivity EQ Yes$ then Gosub Main_Process
|
||||||
|
End
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
App_Info:
|
||||||
|
Fields = ""
|
||||||
|
Num_fields = 0
|
||||||
|
Open AuditManagerTable to hAIT then
|
||||||
|
ReadO App_record from hAIT, "AUDIT_MANAGER_SETTINGS" then
|
||||||
|
Locate Table in App_record<1> using @VM setting vPos then
|
||||||
|
Begin Case
|
||||||
|
Case ID EQ ""
|
||||||
|
// Do nothing.
|
||||||
|
|
||||||
|
Case CallProgName[1, 18] NE "AUDIT_MANAGER_MFS*"
|
||||||
|
// Program is being called directly from a stored procedure.
|
||||||
|
If App_record<6,vPos> EQ Yes$ Then
|
||||||
|
If CurrentRecord NE "" Then
|
||||||
|
TrackActivity = Yes$
|
||||||
|
RecordTracker = Yes$ ; // Flag to indicate that special audit tracking is ocurring
|
||||||
|
Marker = OrigRecord
|
||||||
|
OrigRecord = CurrentRecord
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Case Activity EQ "Write"
|
||||||
|
If App_record<3,vPos> EQ Yes$ Then
|
||||||
|
TrackActivity = Yes$
|
||||||
|
Locate Table in App_record<1> using @VM setting Position then
|
||||||
|
StartField = App_record<2, Position>
|
||||||
|
If StartField Then
|
||||||
|
CurrentRecord<StartField> = Username
|
||||||
|
CurrentRecord<StartField + 1> = Date()
|
||||||
|
CurrentRecord<StartField + 2> = Time()
|
||||||
|
End
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Case Activity EQ "Delete"
|
||||||
|
If App_record<4,vPos> EQ Yes$ Then TrackActivity = Yes$
|
||||||
|
|
||||||
|
Case Activity EQ "Read"
|
||||||
|
If App_record<5,vPos> EQ Yes$ Then TrackActivity = Yes$
|
||||||
|
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
* Msg("|Unable to locate the ":Table:" information|in the Audit Manager Settings.|")
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
* Msg("|Unable to read the Audit Manager Settings Record.|")
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
* Msg("|Unable to open the App_Info Table.|")
|
||||||
|
end
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Main_Process:
|
||||||
|
Lock_Record(AuditTable, Locked_handle, ID, Lock$, No$, Yes$, Success)
|
||||||
|
If Success then
|
||||||
|
Read AuditTrail from Locked_handle, ID then
|
||||||
|
Num_items = Count(AuditTrail<1>, @VM) + (AuditTrail<1> NE "")
|
||||||
|
* If Len(AuditTrail) GT 250000 then
|
||||||
|
* For DelNumItems = 1 to 100
|
||||||
|
* For Loop = 1 to 8
|
||||||
|
* AuditTrail = Delete(AuditTrail, Loop, Num_items, 0)
|
||||||
|
* Next Loop
|
||||||
|
* Num_items -= 1
|
||||||
|
* Next DelNumItems
|
||||||
|
* end
|
||||||
|
end else
|
||||||
|
AuditTrail = ""
|
||||||
|
New = Yes$
|
||||||
|
end
|
||||||
|
Current_date = Date()
|
||||||
|
Current_time = Time()
|
||||||
|
Seq = "DR"
|
||||||
|
StationName = @Station
|
||||||
|
MacAddress = ""
|
||||||
|
|
||||||
|
Locate Current_date in AuditTrail<1> by Seq Using @VM setting Pos else Null
|
||||||
|
AuditTrail<1> = Insert(AuditTrail<1>, 1, Pos, 0, Current_Date)
|
||||||
|
AuditTrail<2> = Insert(AuditTrail<2>, 1, Pos, 0, Current_Time)
|
||||||
|
AuditTrail<3> = Insert(AuditTrail<3>, 1, Pos, 0, Username)
|
||||||
|
AuditTrail<4> = Insert(AuditTrail<4>, 1, Pos, 0, StationName)
|
||||||
|
AuditTrail<5> = Insert(AuditTrail<5>, 1, Pos, 0, MacAddress)
|
||||||
|
AuditTrail<8> = Insert(AuditTrail<8>, 1, Pos, 0, Activity)
|
||||||
|
AuditTrail<9> = "AUDIT TRACKING RECORD"
|
||||||
|
|
||||||
|
If RecordTracker EQ Yes$ Then
|
||||||
|
// Special audit tracking is occuring. Store the current program
|
||||||
|
// and the special marker in the audit trail entry.
|
||||||
|
AuditTrail<6> = Insert(AuditTrail<6>, 1, Pos, 0, RetStack()<2>)
|
||||||
|
AuditTrail<7> = Insert(AuditTrail<7>, 1, Pos, 0, Marker)
|
||||||
|
AuditTrail<10> = "PROGRAM TRACKER"
|
||||||
|
End Else
|
||||||
|
AuditTrail<6> = Insert(AuditTrail<6>, 1, Pos, 0, "")
|
||||||
|
AuditTrail<7> = Insert(AuditTrail<7>, 1, Pos, 0, "")
|
||||||
|
AuditTrail<10> = AuditTrail<10>
|
||||||
|
End
|
||||||
|
|
||||||
|
// Update the Audit Trail record.
|
||||||
|
Write AuditTrail to Locked_handle, ID Then
|
||||||
|
If Activity NE "Read" Then
|
||||||
|
// Only create an audit record if the Activity isn't Read.
|
||||||
|
AuditRecord = OrigRecord
|
||||||
|
If MacAddress EQ "" Then MacAddress = @Station
|
||||||
|
StoredRecId = ID:"*":MacAddress:"*":Current_Date:"*":Current_Time
|
||||||
|
Write AuditRecord To Locked_handle, StoredRecId Then
|
||||||
|
Read RecentlyUpdatedList from Locked_handle, "%RECENTLY_UPDATED%" Else
|
||||||
|
RecentlyUpdatedList = ""
|
||||||
|
End
|
||||||
|
Locate ID in RecentlyUpdatedList using @FM setting UpdatePos Then
|
||||||
|
RecentlyUpdatedList = Delete(RecentlyUpdatedList, UpdatePos, 0, 0)
|
||||||
|
End
|
||||||
|
If RecentlyUpdatedList EQ "" then
|
||||||
|
RecentlyUpdatedList = ID
|
||||||
|
End Else
|
||||||
|
RecentlyUpdatedList = ID:@FM:RecentlyUpdatedList
|
||||||
|
If Count(RecentlyUpdatedList, @FM) GT 499 then
|
||||||
|
RecentlyUpdatedList = Field(RecentlyUpdatedList, @FM, 1, 500)
|
||||||
|
end
|
||||||
|
End
|
||||||
|
Write RecentlyUpdatedList to Locked_handle, "%RECENTLY_UPDATED%" Else
|
||||||
|
* Msg("|Unable to Write the record %RECENTLY_UPDATED%|to the ":AuditTable:".|")
|
||||||
|
End
|
||||||
|
End Else
|
||||||
|
* Msg("|Unable to Write the record ":StoredRecId:"|to the ":AuditTable:".|")
|
||||||
|
End
|
||||||
|
End
|
||||||
|
End Else
|
||||||
|
* Msg("|Unable to Write the record ":ID:"|to the ":AuditTable:".|")
|
||||||
|
End
|
||||||
|
Lock_Record(AuditTable, Locked_handle, ID, Unlock$)
|
||||||
|
End Else
|
||||||
|
* Msg("|Unable to update ":AuditTable:" log.|")
|
||||||
|
end
|
||||||
|
return
|
||||||
|
|
264
LSL2/STPROC/AUDIT_MANAGER_MFS.txt
Normal file
264
LSL2/STPROC/AUDIT_MANAGER_MFS.txt
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
Function Audit_Manager_MFS(Code, BFS, Handle, Name, FMC, Record, Status)
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// This program is proprietary and is not to be used by or disclosed to others, nor is it to
|
||||||
|
// be copied without written permission from SRP Computer Solutions, Inc.
|
||||||
|
//
|
||||||
|
// Name : Audit_Manager_MFS
|
||||||
|
//
|
||||||
|
// Description: MFS for tracking the audit history of a particular record.
|
||||||
|
//
|
||||||
|
// Notes: This routine primarily passes all essential information into the Audit_Manager
|
||||||
|
// stored procedure. This way changes to the core functionality can be made
|
||||||
|
// without having to restart OpenInsight (which is necessary for changes directly
|
||||||
|
// in MFS procedures.)
|
||||||
|
//
|
||||||
|
// A check is first made to see if corresponding audit table exists for the
|
||||||
|
// database table that triggered this MFS. Audit tables use a naming convention
|
||||||
|
// of AUDIT_Tablename. therefore, if the CUSTOMERS table is being audited then
|
||||||
|
// there should be an AUDIT_CUSTOMERS table available. Audit features are managed
|
||||||
|
// by the DBW_AUDIT_MANAGER form.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// Code [in] -- An integer value indicating the operation to be performed (1 = read a
|
||||||
|
// record, 4 = delete a record, 11 = open a file, etc.)
|
||||||
|
// BFS [in] -- The list of MFSs and the BFS name for the current file or volume. This
|
||||||
|
// is a subvalue mark-delimited array, with the current MFS name as the
|
||||||
|
// first value in the array, and the BFS name as the last value.
|
||||||
|
// Handle [in] -- The file handle of the file or media map being accessed.
|
||||||
|
// Name [in] -- The name (key) of the record or file being accessed.
|
||||||
|
// FMC [in] -- Various functions.
|
||||||
|
// Record [in] -- The entire record (for record-oriented functions) or a newly-created
|
||||||
|
// handle (for "get handle" functions).
|
||||||
|
// Status [in] -- A return code indicating the success or failure of an operation.
|
||||||
|
//
|
||||||
|
// History (Date, Initials, Notes)
|
||||||
|
// 01/04/00 pcs Original programmer
|
||||||
|
// 01/20/00 pcs CLEARFILE requires the Arev table name to be removed before processing
|
||||||
|
// 05/20/05 axf Process will now also track the accessing of records.
|
||||||
|
// 11/26/07 dmb Code clean-up. No functional changes were made.
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$INSERT FILE.SYSTEM.EQUATES
|
||||||
|
$INSERT FSERRORS_HDR
|
||||||
|
|
||||||
|
Declare Subroutine Msg, Audit_Manager
|
||||||
|
|
||||||
|
ON CODE GOSUB READ.RECORD,READO.RECORD,WRITE.RECORD,DELETE.RECORD,LOCK.RECORD,UNLOCK.RECORD,SELECT,READNEXT,CLEARSELECT,CLEARFILE,OPEN.FILE,CREATE.FILE,RENAME.FILE,MOVE.FILE,DELETE.FILE,OPEN.MEDIA,CREATE.MEDIA,READ.MEDIA,WRITE.MEDIA,UNLOCK.ALL,FLUSH,INSTALL,RESERVED,RESERVED,RESERVED,OMNI.SCRIPT,CLOSE.MEDIA,RECORD.COUNT, REMAKE.FILE,CREATE.INDEX,DELETE.INDEX,UPDATE.INDEX,SELECT.INDEX,READNEXT.INDEX
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
READ.RECORD:
|
||||||
|
// Added Check_Update_History Gosub
|
||||||
|
Activity = "Read"
|
||||||
|
GoSub Check_Update_History
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
READO.RECORD:
|
||||||
|
// Added Check_Update_History Gosub
|
||||||
|
Activity = "Read"
|
||||||
|
GoSub Check_Update_History
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
CREATE.MEDIA:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
OPEN.MEDIA:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
READ.MEDIA:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
WRITE.MEDIA:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
CLOSE.MEDIA:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
CLEARFILE:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
CREATE.FILE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE.FILE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
MOVE.FILE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
OPEN.FILE:
|
||||||
|
// Attaching Arev Table name to Handle for checking purposes
|
||||||
|
GoSub Call_NextFS
|
||||||
|
If Index(RECORD, @TM, 1) EQ 0 then
|
||||||
|
RECORD = NAME:@TM:RECORD
|
||||||
|
end
|
||||||
|
return
|
||||||
|
|
||||||
|
REMAKE.FILE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
RENAME.FILE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
SELECT:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
READNEXT:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
CLEARSELECT:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
LOCK.RECORD:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
UNLOCK.RECORD:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
CREATE.INDEX:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
UPDATE.INDEX:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE.INDEX:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
SELECT.INDEX:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
READNEXT.INDEX:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
RESERVED:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
OMNI.SCRIPT:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
RECORD.COUNT:
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
LOCK.SEMAPHORE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
UNLOCK.SEMAPHORE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
SET.USER.SEMAPHORE:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
WRITE.RECORD:
|
||||||
|
GoSub Prep_Vars
|
||||||
|
Activity = "Write"
|
||||||
|
GoSub Check_Update_History
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE.RECORD:
|
||||||
|
Activity = "Delete"
|
||||||
|
GoSub Check_Update_History
|
||||||
|
GoSub Remove_Arev_Table_Name
|
||||||
|
return
|
||||||
|
|
||||||
|
NEXT_FS:
|
||||||
|
GoSub Call_NextFS
|
||||||
|
return
|
||||||
|
|
||||||
|
// Install, unlock all and flush are called directly, no need to call next FS.
|
||||||
|
INSTALL:
|
||||||
|
STATUS = TRUE$
|
||||||
|
return
|
||||||
|
|
||||||
|
FLUSH:
|
||||||
|
STATUS = TRUE$
|
||||||
|
return
|
||||||
|
|
||||||
|
UNLOCK.ALL:
|
||||||
|
STATUS = TRUE$
|
||||||
|
return
|
||||||
|
|
||||||
|
Prep_Vars:
|
||||||
|
TempUseTable = Field(HANDLE, @TM, 1)
|
||||||
|
UseTable = Field(TempUseTable, "*", 1)
|
||||||
|
UseID = Name
|
||||||
|
return
|
||||||
|
|
||||||
|
Check_Update_History:
|
||||||
|
Temp_File_Name = Field(HANDLE, @TM, 1)
|
||||||
|
FileName = Field(Temp_File_Name, "*", 1)
|
||||||
|
Real_Handle = Field(HANDLE, @TM, 2)
|
||||||
|
History_table = "AUDIT_":FileName
|
||||||
|
Open History_table to HistoryCheck then
|
||||||
|
GoSub Get_Original_Record
|
||||||
|
Audit_Manager(Name, FileName, Record, OrigRecord, Activity)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
|
||||||
|
Get_Original_Record:
|
||||||
|
OrigRecord = ""
|
||||||
|
CALL RTP57(READO.RECORD, "RTP57", Real_Handle, NAME, FMC, OrigRecord, Temp_status)
|
||||||
|
// If Temp_status is Null then it is a new record or an error reading.
|
||||||
|
return
|
||||||
|
|
||||||
|
Call_NextFS:
|
||||||
|
FS = DELETE(BFS, 1, 1, 1)
|
||||||
|
NEXTFS = FS<1, 1, 1>
|
||||||
|
@FILE.ERROR = ""
|
||||||
|
CALL @NEXTFS(CODE, FS, HANDLE, NAME, FMC, RECORD, STATUS)
|
||||||
|
return
|
||||||
|
|
||||||
|
Remove_Arev_Table_Name:
|
||||||
|
* FileName = Field(HANDLE, @TM, 1)
|
||||||
|
* If FileName EQ HANDLE then
|
||||||
|
* Real_Handle = HANDLE
|
||||||
|
* end else
|
||||||
|
* Real_Handle = Field(HANDLE, @TM, 2)
|
||||||
|
* end
|
||||||
|
FS = DELETE(BFS, 1, 1, 1)
|
||||||
|
NEXTFS = FS<1, 1, 1>
|
||||||
|
@FILE.ERROR = ""
|
||||||
|
|
||||||
|
If Index(FS, @SVM, 1) GT 0 then
|
||||||
|
Real_Handle = HANDLE
|
||||||
|
end else
|
||||||
|
Real_Handle = Field(HANDLE, @TM, 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
CALL @NEXTFS(CODE, FS, Real_Handle, NAME, FMC, RECORD, STATUS)
|
||||||
|
return
|
73
LSL2/STPROC/AUTHENTICATE_LDAP.txt
Normal file
73
LSL2/STPROC/AUTHENTICATE_LDAP.txt
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
function Authenticate_LDAP(void)
|
||||||
|
|
||||||
|
$Insert LOGICAL
|
||||||
|
|
||||||
|
/* equates for the base registry keys */
|
||||||
|
equ HKEY_CLASSES_ROOT$ to 0x80000000
|
||||||
|
equ HKEY_CURRENT_USER$ to 0x80000001
|
||||||
|
equ HKEY_LOCAL_MACHINE$ to 0x80000002
|
||||||
|
equ HKEY_USERS$ to 0x80000003
|
||||||
|
equ HKEY_PERFORMANCE_DATA$ to 0x80000004
|
||||||
|
equ HKEY_CURRENT_CONFIG$ to 0x80000005
|
||||||
|
equ HKEY_DYN_DATA$ to 0x80000006
|
||||||
|
equ KEY_QUERY_VALUE$ to 0x0001
|
||||||
|
equ ERROR_SUCCESS to 0x0000
|
||||||
|
|
||||||
|
Declare subroutine Set_Property.Net, Utility, RegQueryValueEx, Msg, Create_User, RTI_Create_User_Details
|
||||||
|
Declare Subroutine Set_Property
|
||||||
|
Declare function Active_Directory_Services, RegOpenKeyEx, RTI_GetNetworkUserName, RegCloseKey
|
||||||
|
Declare Function Database_Services
|
||||||
|
|
||||||
|
Log = @AppId<1>
|
||||||
|
Oswrite Log to 'D:\Temp\auth.txt'
|
||||||
|
|
||||||
|
Authenticated = False$
|
||||||
|
Options = 0
|
||||||
|
SamDesired = KEY_QUERY_VALUE$
|
||||||
|
KeyHandle = 0
|
||||||
|
Hkey = HKEY_LOCAL_MACHINE$
|
||||||
|
SubKey = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters":\00\
|
||||||
|
Stat = 0
|
||||||
|
Null = ''
|
||||||
|
LockVariable KeyHandle as Long
|
||||||
|
Stat = RegOpenKeyEx(Hkey, SubKey, Options, SamDesired, KeyHandle)
|
||||||
|
If Stat = ERROR_SUCCESS Then
|
||||||
|
Domain = str(\00\, 512)
|
||||||
|
Reg_SZ = 1
|
||||||
|
CbBuf = 512
|
||||||
|
Key = "Domain":\00\
|
||||||
|
RegQueryValueEx(KeyHandle, Key, 0, Reg_SZ, Domain, CbBuf)
|
||||||
|
Domain = Domain[1, CbBuf - 1]
|
||||||
|
end
|
||||||
|
rv = RegCloseKey(KeyHandle)
|
||||||
|
|
||||||
|
UserADName = RTI_GetNetworkUserName()
|
||||||
|
UserADGroups = Active_Directory_Services('GetADGroups', UserADName, Domain)
|
||||||
|
**SSOInfo = Database_Services('ReadDataRow', 'SYSENV', 'CFG_LOGIN*':@AppId<1>)
|
||||||
|
*SSOErrorMsg = SSOInfo<9>
|
||||||
|
*SSOADGroups = Field(SSOInfo, @FM, 2, 3)
|
||||||
|
SSOADGroups = Database_Services('ReadDataRow', 'SYSENV', 'SSO*LSL2')
|
||||||
|
|
||||||
|
For GroupIndex = 3 to 1 Step -1
|
||||||
|
SSOADGroup = SSOADGroups<GroupIndex>
|
||||||
|
If InList(UserADGroups, SSOADGroup, @FM) then
|
||||||
|
@UserName = UserADName
|
||||||
|
SecurityLevel = GroupIndex - 1
|
||||||
|
@Admin = SecurityLevel
|
||||||
|
Authenticated = True$
|
||||||
|
Set_Property( "SYSTEM", "LOGININFO" , 'LSL2':@FM:UserADName:@FM:'')
|
||||||
|
end
|
||||||
|
Until Authenticated
|
||||||
|
Next GroupIndex
|
||||||
|
|
||||||
|
Swap 1 With 'True' In Authenticated
|
||||||
|
Swap 0 With 'False' In Authenticated
|
||||||
|
Log := ', Authenticated ':Authenticated
|
||||||
|
Oswrite Log to 'D:\Temp\auth.txt'
|
||||||
|
|
||||||
|
If Not(Authenticated) then
|
||||||
|
Msg(@Window, 'SSO Error')
|
||||||
|
Utility('DESTROY', 'SYSTEM')
|
||||||
|
End
|
||||||
|
|
||||||
|
Return
|
263
LSL2/STPROC/BATCH_WO_PURGE.txt
Normal file
263
LSL2/STPROC/BATCH_WO_PURGE.txt
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
COMPILE FUNCTION Batch_WO_Purge(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for BATCH_WO_PURGE window (Purge groups of Work Orders and all affiliated data from the system)
|
||||||
|
|
||||||
|
02/16/2016 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status,Print_React_Read_Worksheet
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, obj_AppWindow,
|
||||||
|
DECLARE SUBROUTINE End_Window,obj_React_Reads
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, obj_WO_Log, WO_Purge, Set_Property
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$WO_NO TO 1
|
||||||
|
EQU COL$CASS_CNT TO 2
|
||||||
|
EQU COL$START TO 3
|
||||||
|
EQU COL$STOP TO 4
|
||||||
|
EQU COL$PER_BOX TO 5
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Batch_WO_Purge commuter module'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
CASE Event = 'CLOSE' ; GOSUB Close
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.LU_WO' AND Event = 'CLICK' ; GOSUB LUWONo
|
||||||
|
CASE EntID = @WINDOW:'.START_PURGE' AND Event = 'CLICK' ; GOSUB StartPurge
|
||||||
|
CASE EntID = @WINDOW:'.DONE' AND Event = 'CLICK' ; GOSUB Close
|
||||||
|
CASE EntID = @WINDOW:'.CLEAR' AND Event = 'CLICK' ; GOSUB Clear
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.WO_NO' AND Event = 'POSCHANGED' ; GOSUB WONoPC
|
||||||
|
CASE EntID = @WINDOW:'.WO_NO' AND Event = 'CLICK' ; GOSUB WOClick
|
||||||
|
CASE EntID = @WINDOW:'.WO_NO' AND Event = 'INSERTROW' ; GOSUB InsertRow
|
||||||
|
CASE EntID = @WINDOW:'.WO_NO' AND Event = 'DELETEROW' ; GOSUB DeleteRow
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
EmptyCol = STR(@VM,90)
|
||||||
|
|
||||||
|
Array = ''
|
||||||
|
|
||||||
|
Array<COL$WO_NO> = EmptyCol
|
||||||
|
Array<COL$CASS_CNT> = EmptyCol
|
||||||
|
Array<COL$START> = EmptyCol
|
||||||
|
Array<COL$STOP> = EmptyCol
|
||||||
|
Array<COL$PER_BOX> = EmptyCol
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','DEFPROP',Array)
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUWoNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
WOKeys = obj_WO_Log('Find')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = WOKeys
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
|
||||||
|
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys = '' THEN RETURN
|
||||||
|
|
||||||
|
WOCnt = COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
|
||||||
|
CassCnts = XLATE('WO_LOG',WOKeys,'WO_MAT_CNT','X')
|
||||||
|
|
||||||
|
|
||||||
|
WOArray = ''
|
||||||
|
WOArray<COL$WO_NO> = WOKeys:@VM
|
||||||
|
WOArray<COL$CASS_CNT> = CassCnts:@VM
|
||||||
|
WOArray<COL$START> = STR(@VM,WOCnt)
|
||||||
|
WOArray<COL$STOP> = STR(@VM,WOCnt)
|
||||||
|
WOArray<COL$PER_BOX> = STR(@VM,WOCnt)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','DEFPROP',WOArray)
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WOClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WONoPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
InsertRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
DeleteRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
StartPurge:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.WO_NO'
|
||||||
|
|
||||||
|
WOList = Get_Property(@WINDOW:'.WO_NO','LIST')
|
||||||
|
|
||||||
|
SelPositions = Get_Property(@WINDOW:'.WO_NO','SELPOS') ;* Returns list of selected row numbers
|
||||||
|
SelectedRows = SelPositions<2>
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM in SelectedRows
|
||||||
|
|
||||||
|
SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
|
||||||
|
SelectedRow = SelectedRows<I>
|
||||||
|
WONo = WOList<SelectedRow,COL$WO_NO>
|
||||||
|
|
||||||
|
|
||||||
|
StartTime = Time()
|
||||||
|
|
||||||
|
void = WO_Purge(WONo)
|
||||||
|
|
||||||
|
StopTime = Time()
|
||||||
|
|
||||||
|
BoxCnt = WOList<SelectedRow,COL$CASS_CNT>
|
||||||
|
|
||||||
|
IF StopTime = StartTime OR BoxCnt = 0 THEN
|
||||||
|
PerBox = '-'
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
PerBox = OCONV(ICONV((StopTime - StartTime)/BoxCnt,'MD2'),'MD2')
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'SELPOS',1:@FM:SelectedRow) ;* Clears selection in edit table line
|
||||||
|
|
||||||
|
stat = Send_Message(CtrlEntID,'COLOR_BY_POS',0,SelectedRow,RED$)
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',OCONV(StartTime,'MTS'),COL$START:@FM:SelectedRow)
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',OCONV(StopTime,'MTS'),COL$STOP:@FM:SelectedRow)
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',PerBox,COL$PER_BOX:@FM:SelectedRow)
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
33
LSL2/STPROC/BOOLEAN_CONV.txt
Normal file
33
LSL2/STPROC/BOOLEAN_CONV.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
SUBROUTINE BOOLEAN_CONV(ConvType, DataIo, ReturnCode, ReturnedValue)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(ReturnCode)) THEN ReturnCode = ''
|
||||||
|
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
|
||||||
|
If DataIO EQ '1' then
|
||||||
|
Desc = 'Yes'
|
||||||
|
end else
|
||||||
|
Desc = ''
|
||||||
|
end
|
||||||
|
|
||||||
|
ReturnedValue = Desc
|
||||||
|
|
||||||
|
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
70
LSL2/STPROC/BUILD_SAPSHIPREL_DATA.txt
Normal file
70
LSL2/STPROC/BUILD_SAPSHIPREL_DATA.txt
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
COMPILE ROUTINE BUILD_SapShipRel_DATA(Dummy)
|
||||||
|
ROWDEF(CHARSTR)
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Info, SetInitDirOptions, Send_Dyn, Set_Status
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Status,Security_Check, Set_Status
|
||||||
|
DECLARE FUNCTION Repository, Send_Dyn
|
||||||
|
|
||||||
|
$INSERT COC_EQUATES
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
$INSERT PART_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
ShipNos = 97500:@VM:97600:@VM:96100
|
||||||
|
|
||||||
|
ShipCnt = 3
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
FOR I = 1 TO 1
|
||||||
|
ShipNo = ShipNos<1,I>
|
||||||
|
ShipRec = XLATE('COC',ShipNo,'','X')
|
||||||
|
|
||||||
|
WONo = ShipRec<COC_WO$>
|
||||||
|
CassNos = ShipRec<COC_CASS_NO$>
|
||||||
|
ProdOrdNo = 'M':FMT(WONo, "R(0)#6"):'.1'
|
||||||
|
CassWfrQtys = XLATE('COC',ShipNo,'CASS_WAFER_CNT','X')
|
||||||
|
|
||||||
|
ShipRelease = ''
|
||||||
|
|
||||||
|
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
||||||
|
|
||||||
|
FOR Cass = 1 TO CassCnt
|
||||||
|
ShipRelLine = ShipNos<1,I>
|
||||||
|
ShipRelLine<1,2> = ProdOrdNo
|
||||||
|
ShipRelLine<1,3> = WONo
|
||||||
|
ShipRelLine<1,4> = CassNos<1,Cass>
|
||||||
|
ShipRelLine<1,5> = 'B':RND(1945)
|
||||||
|
ShipRelLine<1,6> = CassWfrQtys<1,I>
|
||||||
|
|
||||||
|
ShipRelease<-1> = ShipRelLine
|
||||||
|
|
||||||
|
NEXT Cass
|
||||||
|
|
||||||
|
* * * * Write Work Order Release * * * *
|
||||||
|
|
||||||
|
ProdOrdRelease = 'M000010.1':@VM:'PO001TEST':@VM:'03/30/11':@VM:'737883':@VM:'516956-C-IR':@VM:'1':@VM:'100':CRLF$
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN ProdOrdRelease
|
||||||
|
SWAP @VM WITH TAB$ IN ProdOrdRelease
|
||||||
|
|
||||||
|
|
||||||
|
FullPath = 'C:\FTP_IN\ProdOrdRel\'
|
||||||
|
FileName = 'PR':FMT(I,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE ProdORdRelease TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
483
LSL2/STPROC/BUILD_SAP_COMM_DATA.txt
Normal file
483
LSL2/STPROC/BUILD_SAP_COMM_DATA.txt
Normal file
@ -0,0 +1,483 @@
|
|||||||
|
COMPILE ROUTINE BUILD_SAP_COMM_DATA(Dummy)
|
||||||
|
ROWDEF(CHARSTR)
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Info, SetInitDirOptions, Send_Dyn, Set_Status
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Status,Security_Check, Set_Status
|
||||||
|
DECLARE FUNCTION Repository, Send_Dyn
|
||||||
|
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
$INSERT PART_EQUATES
|
||||||
|
$INSERT COC_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
* Build Inbound Production Order records
|
||||||
|
|
||||||
|
|
||||||
|
CurrPath = Drive()
|
||||||
|
dummy = CurrPath[-1,'B\'] ;* Position of OpenInsight directory
|
||||||
|
CurrPath = CurrPath[1,COL1()] ;* Path to level above OI directory
|
||||||
|
|
||||||
|
InBufferPath = CurrPath:'SAPComm\FromSAP\'
|
||||||
|
|
||||||
|
OutBufferPath = CurrPath:'SAPComm\ToSAP\'
|
||||||
|
|
||||||
|
OutBoundDirs = 'WOCreate':@FM
|
||||||
|
OutBoundDirs := 'PromiseDt':@FM
|
||||||
|
OutBoundDirs := 'WfrReject':@FM
|
||||||
|
|
||||||
|
|
||||||
|
OutBoundDirs := 'CustTW':@FM
|
||||||
|
OutBoundDirs := 'MUWafer':@FM
|
||||||
|
|
||||||
|
|
||||||
|
OutBoundDirs := 'ProdTW':@FM
|
||||||
|
|
||||||
|
|
||||||
|
OutBoundDirs := 'WOHold':@FM
|
||||||
|
|
||||||
|
OutBoundDirs := 'WOStart':@FM
|
||||||
|
OutBoundDirs := 'WOStop'
|
||||||
|
|
||||||
|
|
||||||
|
WONos = 148411:@FM ;* EpiPro
|
||||||
|
WONos := 148406:@FM ;* Delphi 2 step 40 boxes
|
||||||
|
WONos := 148381 ;* Captive
|
||||||
|
|
||||||
|
WOCnt = COUNT(WONos,@FM) + (WONos NE '')
|
||||||
|
|
||||||
|
ProdOrdSeq = 1
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO WOCnt
|
||||||
|
WONo = WONos<I>
|
||||||
|
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||||
|
|
||||||
|
OrderNo = WORec<WO_LOG_ORDER_NO$>
|
||||||
|
CustPONo = XLATE('ORDER',OrderNo,41,'X') ;* 41 is PO_NO field
|
||||||
|
|
||||||
|
WORelRec = ''
|
||||||
|
GoodsRecRec = ''
|
||||||
|
ShipDocRec = ''
|
||||||
|
CloseOrdRec = ''
|
||||||
|
|
||||||
|
ProdOrdNo = 'M':FMT(ProdOrdSeq, "R(0)#6"):'.1'
|
||||||
|
|
||||||
|
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
||||||
|
|
||||||
|
Pos = 1
|
||||||
|
LOOP
|
||||||
|
REMOVE WOMatKey FROM WOMatKeys AT Pos SETTING Flag
|
||||||
|
WHILE Flag
|
||||||
|
CassNo = WOMatKey[-1,'B*']
|
||||||
|
|
||||||
|
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
|
||||||
|
|
||||||
|
PartNo = XLATE('WO_MAT',WOMatKey,'PART_NO_SAP','X')
|
||||||
|
|
||||||
|
WORelLine = ProdOrdNo ;* Production Order No
|
||||||
|
WORelLine<1,2> = CustPONo ;* Customer PO No
|
||||||
|
WORelLine<1,3> = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D4/') ;* Promise Ship Dt
|
||||||
|
WORelLine<1,4> = PartNo ;* Mesa Part No
|
||||||
|
WORelLine<1,5> = WOMatRec<WO_MAT_SUB_PART_NO$> ;* Substrate Part No
|
||||||
|
WORelLine<1,6> = '{Substrate Revision No}' ;* Replace {Substrate Revision No} from SAP
|
||||||
|
WORelLine<1,7> = WORec<WO_LOG_WO_QTY$> ;* Total Prod Order wafer qty
|
||||||
|
|
||||||
|
WORelRec<-1> = WORelLine
|
||||||
|
|
||||||
|
ShipDocLine = ProdOrdNo ;* Production Order No
|
||||||
|
ShipDocLine<1,2> = '{SAP Ship No}' ;* Replace {SAP Ship No} with SAP Shipment No
|
||||||
|
ShipDocLine<1,3> = CassNo ;* Cassette number
|
||||||
|
ShipDocLine<1,4> = '{SAP Batch No}' ;* Replace {SAP Batch No} with SAP Batch No
|
||||||
|
|
||||||
|
ShipDocRec<-1> = ShipDocLine
|
||||||
|
|
||||||
|
|
||||||
|
GoodsRecLine = ProdOrdNo ;* Production Order No
|
||||||
|
GoodsRecLine<1,2> = CassNo ;* Cassette number
|
||||||
|
GoodsRecLine<1,3> = '{SAP Batch No}' ;* SAP Batch No
|
||||||
|
GoodsRecLine<1,4> = WOMatRec<WO_MAT_LOT_NO$> ;* Cassette Substrate Lot No
|
||||||
|
|
||||||
|
GoodsRecRec<-1> = GoodsRecLine
|
||||||
|
|
||||||
|
Send_Dyn(ProdOrdNo:' -> ':WOMatKey)
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ProdOrdCloseFlag = 1
|
||||||
|
|
||||||
|
ProdOrdRec = ProdOrdNo:@VM:ProdOrdCloseFlag
|
||||||
|
|
||||||
|
PartRec = XLATE('PART',PartNo,'','X')
|
||||||
|
|
||||||
|
InPartRec = PartNo
|
||||||
|
InPartRec<1,2> = PartRec<PART_DESC$>
|
||||||
|
InPartRec<1,3> = PartRec<PART_CUST_NO$>
|
||||||
|
InPartRec<1,4> = XLATE('PART',PartNo,'CUST_NAME','X')
|
||||||
|
InPartRec<1,5> = XLATE('PART',PartNo,'CUST_TYPE','X')
|
||||||
|
InPartRec<1,6> = PartRec<PART_CUST_PART_NO$>
|
||||||
|
InPartRec<1,7> = PartRec<PART_SUB_PART_NO$>
|
||||||
|
InPartRec<1,8> = PartRec<PART_SUB_TYPE$>
|
||||||
|
InPartRec<1,9> = PartRec<PART_SUB_SUPPLIER$>
|
||||||
|
InPartRec<1,10> = PartRec<PART_PURCH_SPEC$>
|
||||||
|
InPartRec<1,11> = PartRec<PART_PURCH_SPEC_REV$>
|
||||||
|
InPartRec<1,12> = PartRec<PART_REACT_TYPE$>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * Write Work Order Release * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN WORelRec
|
||||||
|
SWAP @VM WITH TAB$ IN WORelRec
|
||||||
|
|
||||||
|
FullPath = InBufferPath:'ProdOrdRel\'
|
||||||
|
FileName = 'PR':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE WORelRec TO FullPath:FileName
|
||||||
|
|
||||||
|
* * * * Write Goods Receipt * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN GoodsRecRec
|
||||||
|
SWAP @VM WITH TAB$ IN GoodsRecRec
|
||||||
|
|
||||||
|
FullPath = InBufferPath:'GoodsRec\'
|
||||||
|
FileName = 'GR':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE GoodsRecRec TO FullPath:FileName
|
||||||
|
|
||||||
|
* * * * Write Shipping Document Request * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN ShipDocRec
|
||||||
|
SWAP @VM WITH TAB$ IN ShipDocRec
|
||||||
|
|
||||||
|
FullPath = InBufferPath:'ShipDoc\'
|
||||||
|
FileName = 'SD':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE ShipDocRec TO FullPath:FileName
|
||||||
|
|
||||||
|
* * * * Write Order Close * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN ProdOrdRec
|
||||||
|
SWAP @VM WITH TAB$ IN ProdOrdRec
|
||||||
|
|
||||||
|
FullPath = InBufferPath:'CloseOrder\'
|
||||||
|
FileName = 'OC':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE ProdOrdRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
* * * * Write Part No * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN InPartRec
|
||||||
|
SWAP @VM WITH TAB$ IN InPartRec
|
||||||
|
|
||||||
|
FullPath = InBufferPath:'PartNo\'
|
||||||
|
FileName = 'PN':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE InPartRec TO FullPath:FileName
|
||||||
|
|
||||||
|
FOR D = 1 TO 10
|
||||||
|
OutBoundDir = OutBoundDirs<D>
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE OutBoundDir = 'WOCreate'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
FileName = 'WOK':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:WONo:TAB$:'1':CRLF$
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'PromiseDt'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'PD':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:OCONV(Date(),'D4/'):TAB$:OCONV(Date() + 10,'D4/'):CRLF$
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
*****************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
* Inventory to Scrap WIP Prod Ord No : Qty (+/-) + => From WIP to Scrap, - => From Scrap to WIP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'WfrReject'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'WR':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
IF ProdOrdSeq = 1 THEN TestQty = '+3' ;* Remove from Production
|
||||||
|
IF ProdOrdSeq = 2 THEN TestQty = '-13' ;* Add to Production (cancelled NCR)
|
||||||
|
IF ProdOrdSeq = 3 THEN TestQty = '+25'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:TestQty:CRLF$
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'ProdTW'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'PT':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
IF ProdOrdSeq = 1 THEN UseQty = '+1' ;* This is a usage in production
|
||||||
|
IF ProdOrdSeq = 2 THEN UseQty = '-1' ;* This is a return from production to WIP
|
||||||
|
IF ProdOrdSeq = 3 THEN UseQty = '+2'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:UseQty:CRLF$
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
* Inventory Move transactions WIP Prod Ord No : MU Prod Ord NO : Qty (+/-) + => From WIP to MU, - => From MU to WIP
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'CustTW'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'CT':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
IF ProdOrdSeq = 1 THEN UseQty = '+1' ;* This is a usage in production
|
||||||
|
IF ProdOrdSeq = 2 THEN UseQty = '-1' ;*This is a return from production to Cust Test Wafer Inentory
|
||||||
|
IF ProdOrdSeq = 3 THEN UseQty = '+2'
|
||||||
|
|
||||||
|
|
||||||
|
*OutRec = 'CUST':TAB$:To:TAB$:From:TAB$:Qty
|
||||||
|
*OutRec = 'MU' :TAB$:To:TAB$:From:TAB$:Qty
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:'{Cust TW Part No}':TAB$:UseQty:CRLF$
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'MUWafer'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'MW':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
IF ProdOrdSeq = 1 THEN UseQty = '+3' ;* This is Production to Makeup
|
||||||
|
IF ProdOrdSeq = 2 THEN UseQty = '-5' ;* This is Unflag box OR use makeup in production cassette
|
||||||
|
IF ProdOrdSeq = 3 THEN UseQty = '+6'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:'M':FMT(ProdOrdSeq+200, "R(0)#6"):'.1':TAB$:UseQty:CRLF$
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'WOHold'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'HLD':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
IF ProdOrdSeq = 1 THEN Flag = '1' ;* WO Placed on Hold
|
||||||
|
IF ProdOrdSeq = 2 THEN Flag = '0' ;* WO Removed from Hold
|
||||||
|
IF ProdOrdSeq = 3 THEN Flag = '1' ;* WO Placed on Hold
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:Flag:CRLF$
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'WOStart'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'STR':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:'1':CRLF$
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
CASE OutBoundDir = 'WOStop'
|
||||||
|
FullPath = OutBufferPath:OutBoundDir:'\'
|
||||||
|
|
||||||
|
FileName = 'STP':FMT(ProdOrdSeq,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
OutRec = ProdOrdNo:TAB$:'1':CRLF$
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE OutRec TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
NEXT D
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ProdOrdSeq += 1
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ShipNos = 97500:@VM:97600:@VM:96100
|
||||||
|
|
||||||
|
ShipCnt = 3
|
||||||
|
|
||||||
|
FOR I = 1 TO ShipCnt
|
||||||
|
ShipNo = ShipNos<1,I>
|
||||||
|
ShipRec = XLATE('COC',ShipNo,'','X')
|
||||||
|
|
||||||
|
WONo = ShipRec<COC_WO$>
|
||||||
|
CassNos = ShipRec<COC_CASS_NO$>
|
||||||
|
ProdOrdNo = 'M':FMT(WONo, "R(0)#6"):'.1'
|
||||||
|
CassWfrQtys = XLATE('COC',ShipNo,'CASS_WAFER_CNT','X')
|
||||||
|
|
||||||
|
ShipRelease = ''
|
||||||
|
|
||||||
|
CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')
|
||||||
|
|
||||||
|
FOR Cass = 1 TO CassCnt
|
||||||
|
ShipRelLine = ShipNos<1,I>
|
||||||
|
ShipRelLine<1,2> = ProdOrdNo
|
||||||
|
ShipRelLine<1,3> = WONo
|
||||||
|
ShipRelLine<1,4> = CassNos<1,Cass>
|
||||||
|
ShipRelLine<1,5> = 'B':RND(1945)
|
||||||
|
ShipRelLine<1,6> = CassWfrQtys<1,I>
|
||||||
|
|
||||||
|
ShipRelease<-1> = ShipRelLine
|
||||||
|
|
||||||
|
NEXT Cass
|
||||||
|
|
||||||
|
* * * * Write Work Order Release * * * *
|
||||||
|
|
||||||
|
SWAP @FM WITH CRLF$ IN ShipRelease
|
||||||
|
SWAP @VM WITH TAB$ IN ShipRelease
|
||||||
|
|
||||||
|
|
||||||
|
FullPath = CurrPath:'SAPComm\FromSAP\ShipRel\'
|
||||||
|
FileName = 'SR':FMT(I,"R(0)#5"):'.tsv'
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSWRITE ShipRelease TO FullPath:FileName
|
||||||
|
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GOTO Bail
|
||||||
|
|
||||||
|
|
||||||
|
CurrPath = Drive()
|
||||||
|
dummy = CurrPath[-1,'B\'] ;* Position of OpenInsight directory
|
||||||
|
CurrPath = CurrPath[1,COL1()] ;* Path to level above OI directory
|
||||||
|
|
||||||
|
OutBufferPath = CurrPath:'SAPComm\ToSAP\'
|
||||||
|
InBufferPath = CurrPath:'SAPComm\FromSAP\'
|
||||||
|
|
||||||
|
|
||||||
|
SetInitDirOptions('D-R-H')
|
||||||
|
InitDir InBufferPath:"*.*"
|
||||||
|
|
||||||
|
|
||||||
|
InFolders = FIELD(DirList(),@FM,3,99)
|
||||||
|
|
||||||
|
InFoldCnt = COUNT(Infolders,@FM) + (Infolders NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO InfoldCnt
|
||||||
|
InFolder = InFolders<I>
|
||||||
|
|
||||||
|
InitDir InBufferPath:Infolder:'*.*'
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
FileList = DirList()
|
||||||
|
UNTIL List = ""
|
||||||
|
LOOP
|
||||||
|
FileName = List[1,@FM]
|
||||||
|
FileList[1,Col2()] = ""
|
||||||
|
IF FileName[1,3] = 'ME1' THEN
|
||||||
|
LOCATE FileName IN FileNames BY 'AR' USING @FM SETTING Pos ELSE
|
||||||
|
FileNames = INSERT(FileNames,Pos,0,0,FileName)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
UNTIL List = ""
|
||||||
|
REPEAT
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF FileNames[-1,1] = @FM THEN FileNames[-1,1] = ''
|
||||||
|
Test = ''
|
||||||
|
FileCnt = COUNT(FileNames,@FM) + (FileNames NE '')
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO FileCnt
|
||||||
|
Send_Info('Processing ':I:' of ':FileCnt)
|
||||||
|
FileName = FileNames<I>
|
||||||
|
StartTime = Time()
|
||||||
|
OSREAD FileIn FROM Path:FileName THEN
|
||||||
|
|
||||||
|
SWAP TAB$ WITH @VM IN FileIn
|
||||||
|
SWAP CRLF$ WITH @FM IN FileIn
|
||||||
|
DEBUG
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Bail:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
39
LSL2/STPROC/CALCULATOR_RESRHO_VALID.txt
Normal file
39
LSL2/STPROC/CALCULATOR_RESRHO_VALID.txt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
compile subroutine calculator_resrho_valid(ConvType, DataIo, Branch, ReturnedValue)
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function msg, get_property, set_property
|
||||||
|
declare subroutine update_index, extract_si_keys
|
||||||
|
|
||||||
|
$insert logical
|
||||||
|
$insert msg_equates
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
equ CrLf$ to char(13):char(10)
|
||||||
|
|
||||||
|
* THIS IS SIMPLY TO CALCULATE RESISTIVITY NOT TO VALIDATE RESRHO FOR THE
|
||||||
|
* CALCULATOR, CAUSE THERE IS NO SPEC
|
||||||
|
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
Thickness = iconv( get_property( @window:'.THICKNESS_READINGS', 'ARRAY' ), 'MD2' )
|
||||||
|
SheetRHO = get_property( @window:'.SHEETRHO_READINGS', 'ARRAY' )
|
||||||
|
OffSet = str( '.001':@vm, 17 )
|
||||||
|
OffSet[-1,1] = ''
|
||||||
|
Res = oconv( SheetRHO *** Thickness *** OffSet, 'MD3' )
|
||||||
|
swap '.000' with '' in Res
|
||||||
|
Void = set_property( @window:'.RES_READINGS', 'ARRAY', Res )
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
* no output
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case otherwise$
|
||||||
|
ReturnedValue = ''
|
||||||
|
status() = invalid_conv$
|
||||||
|
end case
|
||||||
|
return
|
14
LSL2/STPROC/CALC_ELAP.txt
Normal file
14
LSL2/STPROC/CALC_ELAP.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
compile function calc_elap(DateIn, TimeIn, DateOut, TimeOut)
|
||||||
|
|
||||||
|
Tot = 0
|
||||||
|
if DateOut and DateIn then
|
||||||
|
DateDiff = DateOut - DateIn
|
||||||
|
SecondsToAdd = 0
|
||||||
|
if DateDiff then
|
||||||
|
SecondsToAdd = 86400*DateDiff
|
||||||
|
end
|
||||||
|
Tans = ( TimeOut + SecondsToAdd ) - TimeIn
|
||||||
|
Tot = ( ( Tans /3600) *100 )
|
||||||
|
end
|
||||||
|
return Tot
|
||||||
|
|
267
LSL2/STPROC/CALC_WO_STATS.txt
Normal file
267
LSL2/STPROC/CALC_WO_STATS.txt
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
FUNCTION Calc_WO_Stats(RDSNos)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RDS_LAYER_EQUATES
|
||||||
|
$INSERT RDS_TEST_EQUATES
|
||||||
|
|
||||||
|
* Must pass keys in the same work order and they must be delimited by @VM
|
||||||
|
|
||||||
|
IF RDSNos = '' THEN RETURN
|
||||||
|
|
||||||
|
RdsCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
|
||||||
|
|
||||||
|
WOStats = ''
|
||||||
|
|
||||||
|
* Get Readings from RDS_TEST records for each RDS
|
||||||
|
|
||||||
|
MetThickAvgs = ''
|
||||||
|
MetResRHOAvgs = ''
|
||||||
|
|
||||||
|
ThickAvgLow = ''
|
||||||
|
ThickAvgHigh = ''
|
||||||
|
ThickAvgCount = 0
|
||||||
|
ThickAvgSum = ''
|
||||||
|
|
||||||
|
ResRHOAvgLow = ''
|
||||||
|
ResRHOAvgHigh = ''
|
||||||
|
ResRHOAvgCount = 0
|
||||||
|
ResRHOAvgSum = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 to RdsCnt
|
||||||
|
|
||||||
|
RDSNo = RDSNos<1,I>
|
||||||
|
|
||||||
|
FirstLayerKey = RDSNo:'*L1'
|
||||||
|
TestKeys = XLATE('RDS_LAYER',FirstLayerKey,RDS_LAYER_RDS_TEST_KEYS$,'X')
|
||||||
|
|
||||||
|
TestKey = TestKeys<1,1> ;* There may be multiple keys for each Epi Pro reactor zone - Take just the first for now
|
||||||
|
MetrologyRec = XLATE('RDS_TEST',TestKey,'','X')
|
||||||
|
|
||||||
|
IF I = 1 THEN
|
||||||
|
|
||||||
|
SpecThickMin = MetrologyRec<RDS_TEST_SPEC_THICK_MIN$>
|
||||||
|
SpecThickMax = MetrologyRec<RDS_TEST_SPEC_THICK_MAX$>
|
||||||
|
SpecThickTarget = MetrologyRec<RDS_TEST_SPEC_THICK_TARGET$>
|
||||||
|
|
||||||
|
SpecResUnits = MetrologyRec<RDS_TEST_SPEC_RES_UNITS$>
|
||||||
|
|
||||||
|
SpecResMin = MetrologyRec<RDS_TEST_SPEC_RES_MIN$>
|
||||||
|
SpecResMax = MetrologyRec<RDS_TEST_SPEC_RES_MAX$>
|
||||||
|
SpecResTarget = MetrologyRec<RDS_TEST_SPEC_RES_TARGET$>
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
MetThickAvg = MetrologyRec<RDS_TEST_THICK_AVG$>
|
||||||
|
|
||||||
|
IF MetThickAvg <> "" THEN
|
||||||
|
|
||||||
|
MetThickAvgs<I> = MetThickAvg
|
||||||
|
|
||||||
|
ThickAvgCount += 1
|
||||||
|
ThickAvgSum += MetThickAvg
|
||||||
|
|
||||||
|
IF ThickAvgLow = '' THEN ThickAvgLow = MetThickAvg
|
||||||
|
IF ThickAvgHigh = '' THEN ThickAvgHigh = MetThickAvg
|
||||||
|
|
||||||
|
IF MetThickAvg < ThickAvgLow THEN ThickAvgLow = MetThickAvg
|
||||||
|
IF MetThickAvg > ThickAvgHigh THEN ThickAvgHigh = MetThickAvg
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SpecResUnits = 'ê/Ü' THEN
|
||||||
|
SpecResLabel = 'Sheet Rho'
|
||||||
|
MetResRHOAvg = MetrologyRec<RDS_TEST_SHEETRHO_AVG$>
|
||||||
|
END ELSE
|
||||||
|
SpecResLabel = 'Resistivity'
|
||||||
|
MetResRHOAvg = MetrologyRec<RDS_TEST_RES_AVG$>
|
||||||
|
END
|
||||||
|
|
||||||
|
MetResRHOAvgs<I> = MetResRhoAvg
|
||||||
|
|
||||||
|
IF MetResRHOAvg <> "" THEN
|
||||||
|
ResRHOAvgCount += 1
|
||||||
|
ResRHOAvgSum += MetResRHOAvg
|
||||||
|
|
||||||
|
IF ResRHOAvgLow = '' THEN ResRHOAvgLow = MetResRHOAvg
|
||||||
|
IF ResRHOAvgHigh = '' THEN ResRHOAvgHigh = MetResRHOAvg
|
||||||
|
|
||||||
|
IF MetResRHOAvg < ResRHOAvgLow THEN ResRHOAvgLow = MetResRHOAvg
|
||||||
|
IF MetResRHOAvg > ResRHOAvgHigh THEN ResRHOAvgHigh = MetResRHOAvg
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
if @UserName EQ 'DAN_CR' Then Debug
|
||||||
|
//DPC - 3/11/2020 - hack to account for formatting/conversion issue in Thick Vals from RDS_Test
|
||||||
|
IF ThickAvgCount > 0 THEN
|
||||||
|
StatThickAvg = (ThickAvgSum/ThickAvgCount)*10
|
||||||
|
WOStats<1,1> = OCONV( StatThickAvg, 'MD3' )
|
||||||
|
END ELSE
|
||||||
|
StatThickAvg = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * Standard Deviation * * * *
|
||||||
|
|
||||||
|
SumDiffSq = 0
|
||||||
|
ThickMean = ''
|
||||||
|
ThickStDev = 0
|
||||||
|
|
||||||
|
IF ThickAvgSum and ThickAvgCount THEN
|
||||||
|
ThickMean = ThickAvgSum/ThickAvgCount
|
||||||
|
END ELSE
|
||||||
|
ThickMean = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = 1 TO RdsCnt
|
||||||
|
MetThickAvg = MetThickAvgs<I>
|
||||||
|
IF MetThickAvg <> "" THEN
|
||||||
|
SumDiffSq += ( MetThickAvg - ThickMean ) * ( MetThickAvg - ThickMean )
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF SumDiffSq AND ThickAvgCount THEN
|
||||||
|
ThickStDev = (SQRT( SumDiffSq/(ThickAvgCount-1) )) * 10
|
||||||
|
WOStats<1,3> = OCONV( ThickStDev, 'MD3' )
|
||||||
|
END
|
||||||
|
|
||||||
|
* Minimum and Maximum
|
||||||
|
|
||||||
|
IF ThickAvgHigh <> 0 THEN WOStats<1,5> = OCONV( ThickAvgHigh, 'MD2' ) ELSE WOStats<1,5> = ''
|
||||||
|
IF ThickAvgLow <> 0 THEN WOStats<1,7> = OCONV( ThickAvgLow, 'MD2') ELSE WOStats<1,7> = ''
|
||||||
|
|
||||||
|
* Uniformity
|
||||||
|
|
||||||
|
IF ThickAvgHigh and ThickAvgLow THEN
|
||||||
|
WOStats<1,9> = OCONV(((ThickAvgHigh - ThickAvgLow)/(ThickAvgHigh + ThickAvgLow))*10000, 'MD2' )
|
||||||
|
END
|
||||||
|
|
||||||
|
ThickCp = 0
|
||||||
|
TThickCPK = 0
|
||||||
|
|
||||||
|
* Thickness Cp
|
||||||
|
|
||||||
|
IF SpecThickMin and SpecThickMax and ThickStdev THEN
|
||||||
|
ThickCp = ((SpecThickMax-SpecThickMin)/(6*ThickStdev))*1000
|
||||||
|
WOStats<1,11> = OCONV( ThickCp, 'MD3' )
|
||||||
|
END
|
||||||
|
|
||||||
|
* Thickness CpK
|
||||||
|
|
||||||
|
IF ThickCp AND (ABS(SpecThickTarget-StatThickAvg)) AND (SpecThickMax-SpecThickMin) THEN
|
||||||
|
TThickCPK = ThickCp*(1-((ABS(SpecThickTarget-StatThickAvg))/((SpecThickMax-SpecThickMin)/2)))
|
||||||
|
WOStats<1,13> = OCONV( TThickCPK, 'MD3' )
|
||||||
|
END
|
||||||
|
|
||||||
|
* Sigma Capabilities
|
||||||
|
|
||||||
|
WOStats<1,15> = OCONV( ThickCP*3, 'MD3' ) ;* WOStats<1,11>*3
|
||||||
|
|
||||||
|
* Sigma Level
|
||||||
|
|
||||||
|
WOStats<1,17> = OCONV( TThickCPK*3, 'MD3' ) ;* WOStats<1,13>*3
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
* Resistivity Calculations
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * Average * * *
|
||||||
|
|
||||||
|
IF ResRHOAvgCount THEN
|
||||||
|
StatResRHOAvg = ResRHOAvgSum/ResRHOAvgCount
|
||||||
|
IF SpecResUnits = 'ê/Ü' THEN
|
||||||
|
WOStats<1,2> = OCONV( StatResRHOAvg, 'MD3' )
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,2> = OCONV( StatResRHOAvg, 'MD4' )
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
StatResRHOAvg = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * StDev * * *
|
||||||
|
|
||||||
|
SumDiffSq = 0
|
||||||
|
ResRHOStDev = 0
|
||||||
|
|
||||||
|
IF ResRHOAvgSum AND ResRHOAvgCount THEN
|
||||||
|
ResMean = ResRHOAvgSum/ResRHOAvgCount
|
||||||
|
END ELSE
|
||||||
|
ResMean = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = 1 to RdsCnt
|
||||||
|
MetResRHOAvg = MetResRHOAvgs<I>
|
||||||
|
IF MetResRHOAvg <> "" AND MetResRHOAvg <> 0 THEN
|
||||||
|
*SumDiffSq += ( MetResRHOAvg - ResMean )**2
|
||||||
|
SumDiffSq += ( MetResRHOAvg - ResMean ) * ( MetResRHOAvg - ResMean )
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF SumDiffSq AND ResRHOAvgCount THEN
|
||||||
|
ResRHOStDev = SQRT( SumDiffSq/(ResRHOAvgCount-1) )
|
||||||
|
WOStats<1,4> = OCONV( ResRHOStDev, 'MD3' )
|
||||||
|
END
|
||||||
|
|
||||||
|
* * * Minimum and Maximum * * *
|
||||||
|
|
||||||
|
IF ResRHOAvgHigh <> 0 THEN
|
||||||
|
IF SpecResUnits = 'ê/Ü' THEN
|
||||||
|
WOStats<1,6> = OCONV( ResRHOAvgHigh, 'MD3' )
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,6> = OCONV( ResRHOAvgHigh, 'MD4' )
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,6> = ''
|
||||||
|
END
|
||||||
|
IF ResRHOAvgLow <> 0 THEN
|
||||||
|
IF SpecResUnits = 'ê/Ü' THEN
|
||||||
|
WOStats<1,8> = OCONV( ResRHOAvgLow, 'MD3' )
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,8> = OCONV( ResRHOAvgLow, 'MD4' )
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,8> = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * uniformity * * *
|
||||||
|
|
||||||
|
IF ( ResRHOAvgHigh - ResRHOAvgLow ) and ( ResRHOAvgHigh + ResRHOAvgLow ) THEN
|
||||||
|
WOStats<1,10>= OCONV(((ResRHOAvgHigh - ResRHOAvgLow)/(ResRHOAvgHigh + ResRHOAvgLow))*10000, 'MD2' )
|
||||||
|
END
|
||||||
|
|
||||||
|
ResRHOCp = 0
|
||||||
|
TResCPK = 0
|
||||||
|
|
||||||
|
* * * Cp * * *
|
||||||
|
|
||||||
|
IF SpecResMin and SpecResMax and ResRHOStdev THEN
|
||||||
|
ResRHOCp = ((SpecResMax-SpecResMin)/(6*ResRHOStdev))*1000
|
||||||
|
WOStats<1,12> = OCONV( ResRHOCp, 'MD3' )
|
||||||
|
END
|
||||||
|
|
||||||
|
* * * CpK * * *
|
||||||
|
|
||||||
|
IF (ABS(SpecResTarget-StatResRHOAvg)) AND ( SpecResMax-SpecResMin ) THEN
|
||||||
|
TResCPK = ( ResRHOCp*(1-((ABS(SpecResTarget-StatResRHOAvg))/((SpecResMax-SpecResMin)/2))) )
|
||||||
|
IF TResCPK <> 0 THEN
|
||||||
|
WOStats<1,14> = OCONV( TResCPK, 'MD3' )
|
||||||
|
END ELSE
|
||||||
|
WOStats<1,14> = ''
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
* resistivity sigma capabilities
|
||||||
|
|
||||||
|
WOStats<1,16> = OCONV( ResRHOCp*3, 'MD3' ) ;* WOStats<1,12>*3
|
||||||
|
|
||||||
|
|
||||||
|
* thickness and resistivity sigma level
|
||||||
|
|
||||||
|
WOStats<1,18> = OCONV( TResCPK*3, 'MD3' ) ;* WOStats<1,14>*3
|
||||||
|
|
||||||
|
|
||||||
|
RETURN WOStats
|
203
LSL2/STPROC/CALIBRATION.txt
Normal file
203
LSL2/STPROC/CALIBRATION.txt
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
COMPILE FUNCTION Calibration(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for CALIBRATION (Calibrations) window
|
||||||
|
|
||||||
|
3/17/2010 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow,
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, obj_React_Run_CI
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT CALIBRATION_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Clean_Insp'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CLEAR' ; GOSUB Clear
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
CASE Event = 'CLOSE' ; GOSUB Close
|
||||||
|
CASE Event = 'READ' ; GOSUB Read
|
||||||
|
CASE Event = 'WRITE' ; GOSUB Write
|
||||||
|
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.CAL_DT' AND Event = 'GOTFOCUS' ; GOSUB CalDtGF
|
||||||
|
CASE EntID = @WINDOW:'.LU_CAL_DT' AND Event = 'CLICK' ; GOSUB LUCalDt
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF NOT(Security_Check('Reactor Event Log',READ$)) THEN
|
||||||
|
Security_Err_Msg('Reactor Event Log',READ$)
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* Provides compatibility with the existing messaging attachment system
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
PassedKeys = FIELD(Parm1,'*',1)
|
||||||
|
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'@READONLY') THEN
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Post_Event(@WINDOW,'CLOSE')
|
||||||
|
|
||||||
|
Result = 1
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('DetailReturn')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF Security_Check('Order',Delete$) THEN
|
||||||
|
Result = 1 ;* Proceed with delete
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Order',Delete$)
|
||||||
|
Result = 0 ;* Stop event chain
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CalDtGF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CurrDt = Get_Property(@WINDOW:'.CAL_DT','DEFPROP')
|
||||||
|
|
||||||
|
IF CurrDt = '' THEN GOSUB LUCalDt
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCalDt:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnVal = OCONV(Dialog_Box("POPUP_MONTH",@WINDOW),'D4/')
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',ReturnVal:@RM:@WINDOW:'.CAL_DT':@RM:'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
187
LSL2/STPROC/CALIBRATION_SERVICES.txt
Normal file
187
LSL2/STPROC/CALIBRATION_SERVICES.txt
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
Compile function Calibration_Services(@Service, @Params)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert LOGICAL
|
||||||
|
$Insert SERVICE_SETUP
|
||||||
|
$Insert CALIB_LIST_EQUATES
|
||||||
|
|
||||||
|
EQU COL$CL_NO TO 1
|
||||||
|
EQU COL$DEPT TO 2
|
||||||
|
EQU COL$EQ_INSTRUMENT TO 3
|
||||||
|
EQU COL$EQ_SN TO 4
|
||||||
|
EQU COL$EQ_LOC TO 5
|
||||||
|
EQU COL$EQ_CAL_INT TO 6
|
||||||
|
EQU COL$EQ_INT_EXT TO 7
|
||||||
|
EQU COL$EQ_LAST_CAL TO 8
|
||||||
|
EQU COL$EQ_NEXT_CAL TO 9
|
||||||
|
|
||||||
|
EQU COL$NIST_STANDARD TO 3
|
||||||
|
EQU COL$NIST_TSN TO 4
|
||||||
|
EQU COL$NIST_LOC TO 5
|
||||||
|
EQU COL$NIST_CAL_INT TO 6
|
||||||
|
EQU COL$NIST_INT_EXT TO 7
|
||||||
|
EQU COL$NIST_LAST_CAL TO 8
|
||||||
|
EQU COL$NIST_NEXT_CAL TO 9
|
||||||
|
|
||||||
|
GoToService
|
||||||
|
|
||||||
|
Return Response or ""
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Service Parameter Options
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Options BOOLEAN = True$, False$
|
||||||
|
Options CALIB_TYPES = 'Equipment', 'NIST'
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// SERVICES
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Service GetCalibListData(CalibType=CALIB_TYPES, SelectActive=BOOLEAN)
|
||||||
|
|
||||||
|
If SelectActive EQ '' then SelectActive = False$
|
||||||
|
CalibListData = ''
|
||||||
|
ErrorMsg = ''
|
||||||
|
Begin Case
|
||||||
|
Case CalibType EQ 'Equipment'
|
||||||
|
|
||||||
|
OPEN 'CALIB_LIST' TO TableIn then
|
||||||
|
|
||||||
|
If SelectActive EQ False$ then
|
||||||
|
SELECT TableIn
|
||||||
|
* end else
|
||||||
|
* Select 'CALIB_LIST' By "" Using Cursor else
|
||||||
|
* ErrorMsg = 'Error in ':Service:' service. Error selecting CALIB_LIST records.'
|
||||||
|
* end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
EquipList = ''
|
||||||
|
EquipDescs = ''
|
||||||
|
Done = False$
|
||||||
|
Today = Date()
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
READNEXT CLNo ELSE Done = True$
|
||||||
|
|
||||||
|
UNTIL Done
|
||||||
|
READ CalRec FROM TableIn,CLNo THEN
|
||||||
|
|
||||||
|
NextCalDt = XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X')
|
||||||
|
|
||||||
|
IF CalRec<CALIB_LIST_CL_TYPE$> = 'E' THEN
|
||||||
|
|
||||||
|
EquipDesc = CalRec<CALIB_LIST_EQ_DESC$>
|
||||||
|
Dept = CalRec<CALIB_LIST_DEPT$>
|
||||||
|
|
||||||
|
IF EquipDesc NE '' THEN
|
||||||
|
|
||||||
|
SortKey = Dept:'*':EquipDesc:'*':CLNo
|
||||||
|
|
||||||
|
LOCATE SortKey IN EquipDescs BY 'AL' SETTING Pos ELSE
|
||||||
|
|
||||||
|
EquipDescs = INSERT(EquipDescs,1,Pos,0,SortKey)
|
||||||
|
|
||||||
|
EquipLine = CLNo
|
||||||
|
EquipLine<1,COL$DEPT> = Dept
|
||||||
|
EquipLine<1,COL$EQ_INSTRUMENT> = CalRec<CALIB_LIST_EQ_DESC$>
|
||||||
|
EquipLine<1,COL$EQ_SN> = CalRec<CALIB_LIST_EQ_SN$>
|
||||||
|
EquipLine<1,COL$EQ_LOC> = CalRec<CALIB_LIST_EQ_LOC$>
|
||||||
|
EquipLine<1,COL$EQ_CAL_INT> = CalRec<CALIB_LIST_CAL_INTERVAL$>
|
||||||
|
EquipLine<1,COL$EQ_INT_EXT> = CalRec<CALIB_LIST_CAL_LOC$>
|
||||||
|
EquipLine<1,COL$EQ_LAST_CAL> = OCONV(XLATE('CALIB_LIST',CLNo,'LAST_CAL_DT','X'),'D4/')
|
||||||
|
EquipLine<1,COL$EQ_NEXT_CAL> = OCONV(NextCalDt,'D4/')
|
||||||
|
|
||||||
|
EquipList = INSERT(EquipList,Pos,0,0,EquipLine)
|
||||||
|
|
||||||
|
END ;* End of LOCATE SortKey
|
||||||
|
|
||||||
|
END ;* End of check for Null EquipDesc
|
||||||
|
|
||||||
|
END;* End of check for CL_TYPE = 'E'
|
||||||
|
|
||||||
|
END ;* End of CalRec read
|
||||||
|
REPEAT
|
||||||
|
CalibListData = EquipList
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unable to open "CALIB_LIST" table.'
|
||||||
|
end
|
||||||
|
|
||||||
|
Case CalibType EQ 'NIST'
|
||||||
|
|
||||||
|
OPEN 'CALIB_LIST' TO TableIn then
|
||||||
|
|
||||||
|
If SelectActive EQ False$ then
|
||||||
|
SELECT TableIn
|
||||||
|
* end else
|
||||||
|
* Select 'CALIB_LIST' By "" Using Cursor else
|
||||||
|
* ErrorMsg = 'Error in ':Service:' service. Error selecting CALIB_LIST records.'
|
||||||
|
* end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
NISTList = ''
|
||||||
|
StdDescs = ''
|
||||||
|
Done = False$
|
||||||
|
Today = Date()
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
READNEXT CLNo ELSE Done = True$
|
||||||
|
|
||||||
|
UNTIL Done
|
||||||
|
READ CalRec FROM TableIn,CLNo THEN
|
||||||
|
|
||||||
|
NextCalDt = XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X')
|
||||||
|
|
||||||
|
IF CalRec<CALIB_LIST_CL_TYPE$> = 'S' THEN
|
||||||
|
StdDesc = CalRec<CALIB_LIST_STD_DESC$>
|
||||||
|
Dept = CalRec<CALIB_LIST_DEPT$>
|
||||||
|
|
||||||
|
IF StdDesc NE '' THEN
|
||||||
|
|
||||||
|
SortKey = Dept:'*':StdDesc:'*':CLNo
|
||||||
|
|
||||||
|
LOCATE SortKey IN StdDescs BY 'AL' SETTING Pos ELSE
|
||||||
|
|
||||||
|
StdDescs = INSERT(StdDescs,1,Pos,0,SortKey)
|
||||||
|
|
||||||
|
NISTLine = CLNo
|
||||||
|
NISTLine<1,COL$DEPT> = CalRec<CALIB_LIST_DEPT$>
|
||||||
|
NISTLine<1,COL$NIST_STANDARD> = CalRec<CALIB_LIST_STD_DESC$>
|
||||||
|
NISTLine<1,COL$NIST_TSN> = CalRec<CALIB_LIST_STD_SN$>
|
||||||
|
NISTLine<1,COL$NIST_LOC> = CalRec<CALIB_LIST_STD_LOC$>
|
||||||
|
NISTLine<1,COL$NIST_CAL_INT> = CalRec<CALIB_LIST_CAL_INTERVAL$>
|
||||||
|
NISTLine<1,COL$NIST_INT_EXT> = CalRec<CALIB_LIST_CAL_LOC$>
|
||||||
|
NISTLine<1,COL$NIST_LAST_CAL> = OCONV(XLATE('CALIB_LIST',CLNo,'LAST_CAL_DT','X'),'D4/')
|
||||||
|
NISTLine<1,COL$NIST_NEXT_CAL> = OCONV(NextCalDt,'D4/')
|
||||||
|
|
||||||
|
NISTList = INSERT(NISTList,Pos,0,0,NISTLine)
|
||||||
|
|
||||||
|
END ;* End of LOCATE SortKey
|
||||||
|
|
||||||
|
END ;* End of check for Null StdDesc
|
||||||
|
|
||||||
|
END ;* End of check for CL_TYPE = 'S'
|
||||||
|
END ;* End of CalRec read
|
||||||
|
REPEAT
|
||||||
|
CalibListData = NistList
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Unable to open "CALIB_LIST" table.'
|
||||||
|
end
|
||||||
|
|
||||||
|
Case Otherwise$
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CalibType passed into service'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
Response = CalibListData
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
345
LSL2/STPROC/CALIB_LIST.txt
Normal file
345
LSL2/STPROC/CALIB_LIST.txt
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
COMPILE FUNCTION Calib_List(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for CALIB_LIST (Calibration List) window
|
||||||
|
|
||||||
|
02/3/2010 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event, Set_List_Box_Data
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, obj_React_Run_CI, NextKey, MemberOf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT CALIB_LIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
EQU COL$CAL_DT TO 1
|
||||||
|
EQU COL$CAL_BY TO 2
|
||||||
|
EQU COL$CAL_NOTE TO 3
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Calib_List routine'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CLEAR' ; GOSUB Clear
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
CASE Event = 'READ' ; GOSUB Read
|
||||||
|
CASE Event = 'WRITE' ; GOSUB Write
|
||||||
|
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.NEW_ITEM' AND Event = 'CLICK' ; GOSUB NewItem
|
||||||
|
CASE EntID = @WINDOW:'.LU_CL_NO' AND Event = 'CLICK' ; GOSUB LUCalibItem
|
||||||
|
CASE EntID = @WINDOW:'.LU_CL_TYPE' AND Event = 'CLICK' ; GOSUB LUCalibItemType
|
||||||
|
CASE EntID = @WINDOW:'.LU_CL_LOC' AND Event = 'CLICK' ; GOSUB LUCalibItemLoc
|
||||||
|
CASE EntID = @WINDOW:'.CALIBRATIONS' AND Event = 'DBLCLK' ; GOSUB CalibrationsDC
|
||||||
|
CASE EntID = @WINDOW:'.NEW_CALIBRATION' AND Event = 'CLICK' ; GOSUB NewCalibClick
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
IF MemberOf(@USER4,'CALIBRATION') OR @USERNAME = 'BRYCE_BARB' ELSE
|
||||||
|
ErrMsg('Only authorized personnel may update the Calibration List.')
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
Set_List_Box_Data( @WINDOW )
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'@READONLY') THEN
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,Line>,@SVM) + (ETCols<1,Line> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,Line,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT Line
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF RowExists('CALIB_LIST',CLNo) ELSE
|
||||||
|
IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
|
||||||
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
|
||||||
|
Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ParentVis = Get_Property('NDW_MASTER_CALIB_LIST', 'VISIBLE')
|
||||||
|
If ParentVis then Post_Event('NDW_MASTER_CALIB_LIST', 'OMNIEVENT')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF Security_Check('Order',Delete$) THEN
|
||||||
|
Result = 1 ;* Proceed with delete
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Order',Delete$)
|
||||||
|
Result = 0 ;* Stop event chain
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NewItem:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF CLNo = '' THEN
|
||||||
|
NextCLNo = NextKey('CALIB_LIST')
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCalibItem:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CLKeys = Popup(@WINDOW,'','CALIB_LIST')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM IN CLKeys
|
||||||
|
|
||||||
|
IF INDEX(CLKeys,@FM,1) THEN
|
||||||
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
|
Set_Property(@WINDOW,'QBFLIST',CLKeys)
|
||||||
|
GOSUB Refresh
|
||||||
|
Send_Event(@WINDOW,'QBFIRST')
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCalibItemType:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CLItemType = Popup(@WINDOW,'','CALIB_LIST_TYPE')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF CLItemType NE '' THEN
|
||||||
|
obj_AppWindow('LUValReturn',CLItemType:@RM:@WINDOW:'.CL_TYPE')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCalibItemLoc:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CLItemLoc = Popup(@WINDOW,'','CALIB_LIST_LOC')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF CLItemLoc NE '' THEN
|
||||||
|
obj_AppWindow('LUValReturn',CLItemLoc:@RM:@WINDOW:'.CAL_LOC')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
||||||
|
|
||||||
|
Send_Event('MASTER_CALIB_LIST','CREATE')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CalibrationsDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CalDt = Get_Property(CtrlEntID,'CELLPOS',COL$CAL_DT:@FM:CurrRow)
|
||||||
|
|
||||||
|
CalDt = ICONV(CalDt,'D')
|
||||||
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF CLNo NE '' AND CalDt NE '' THEN
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
oaParms = 'CALIBRATION':@RM
|
||||||
|
oaParms := CLNo:'*':CalDt:@RM
|
||||||
|
oaParms := '':@RM ;* Default Record
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := @RM
|
||||||
|
oaParms := CtrlEntID:@RM
|
||||||
|
oaParms := CurrPos
|
||||||
|
|
||||||
|
obj_Appwindow('ViewNewDetail', oaParms)
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NewCalibClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
||||||
|
|
||||||
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF CLNo NE '' THEN
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
oaParms = 'CALIBRATION':@RM
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := '':@RM ;* Default Record
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := @RM
|
||||||
|
oaParms := CtrlEntID:@RM
|
||||||
|
oaParms := 1:@FM:1
|
||||||
|
|
||||||
|
obj_Appwindow('ViewNewDetail', oaParms)
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
30
LSL2/STPROC/CAR_CAUSE_STATUS_CONV.txt
Normal file
30
LSL2/STPROC/CAR_CAUSE_STATUS_CONV.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
SUBROUTINE CAR_CAUSE_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
begin case
|
||||||
|
case DataIo = 'E'
|
||||||
|
ReturnedValue = 'Execution'
|
||||||
|
case DataIo = 'C'
|
||||||
|
ReturnedValue = 'Correlation'
|
||||||
|
case DataIo = 'S'
|
||||||
|
ReturnedValue = 'System'
|
||||||
|
end case
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
28
LSL2/STPROC/CAR_CONFIRM_STATUS_CONV.txt
Normal file
28
LSL2/STPROC/CAR_CONFIRM_STATUS_CONV.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
SUBROUTINE CAR_CONFIRM_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
begin case
|
||||||
|
case DataIo = 'C'
|
||||||
|
ReturnedValue = 'Confirmed'
|
||||||
|
case DataIo = 'U'
|
||||||
|
ReturnedValue = 'Unconfirmed'
|
||||||
|
end case
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
143
LSL2/STPROC/CAR_RPT1.txt
Normal file
143
LSL2/STPROC/CAR_RPT1.txt
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
compile function CAR_RPT1()
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function getprinterlist, getprofilestring, writeprofilestring, extdevicemode
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property
|
||||||
|
declare function set_printer, Printer_Select
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield, update_index
|
||||||
|
declare subroutine car_rpt1_prn
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert msg_equates
|
||||||
|
|
||||||
|
Params = dialog_box( 'CAR_RPT1', @window, '*CENTER' )
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
open 'SYSLISTS' to SysListsTable else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to open SYSLISTS...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
ListsId = 'CAR_RPT1*':@station
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
Custs = Params<1>
|
||||||
|
IssueDateFrom = Params<2>
|
||||||
|
IssueDateThru = Params<3>
|
||||||
|
Open = Params<4>
|
||||||
|
FormComplete = Params<5>
|
||||||
|
CARInPlace = Params<6>
|
||||||
|
Verified = Params<7>
|
||||||
|
DirToPrinter = Params<8>
|
||||||
|
|
||||||
|
Stat = utility( 'CURSOR', 'H' )
|
||||||
|
|
||||||
|
Stmt = 'SELECT CAR BY CUST_CITY BY ISSUE_DATE'
|
||||||
|
if IssueDateFrom and IssueDateThru then
|
||||||
|
Stmt := " WITH ISSUE_DATE FROM ":QUOTE(IssueDateFrom):' TO ':QUOTE(IssueDateThru)
|
||||||
|
end else
|
||||||
|
if IssueDateFrom then
|
||||||
|
Stmt := " WITH ISSUE_DATE GE ":QUOTE(IssueDateFrom)
|
||||||
|
end
|
||||||
|
if IssueDateThru then
|
||||||
|
Stmt := " WITH ISSUE_DATE LE ":QUOTE(IssueDateThru)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if Custs then
|
||||||
|
swap @vm with "' '" in Custs
|
||||||
|
Custs = "'":Custs:"'"
|
||||||
|
Stmt := ' AND WITH CUST_ID = ':Custs
|
||||||
|
end
|
||||||
|
|
||||||
|
CARStatusVar = ''
|
||||||
|
if Open then
|
||||||
|
CARStatusVar := " 'O'"
|
||||||
|
end
|
||||||
|
if FormComplete then
|
||||||
|
CARStatusVar := " 'F'"
|
||||||
|
end
|
||||||
|
if CARInplace then
|
||||||
|
CARStatusVar := " 'C'"
|
||||||
|
end
|
||||||
|
if Verified then
|
||||||
|
CARStatusVar := "'V'"
|
||||||
|
end
|
||||||
|
if CarStatusVar then
|
||||||
|
Stmt := ' AND WITH STATUS = ':CARStatusVar
|
||||||
|
end
|
||||||
|
|
||||||
|
rlist( Stmt, target_savelist$, ListsId, '', '' )
|
||||||
|
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
|
||||||
|
if @reccount then
|
||||||
|
Cmd = "LIST CAR ID-SUPP SEQ JUSTLEN '5' COLHEAD 'CAR#' CUST_CITY JUSTLEN '50' CONTACT_NAME WO COMPLAINT_TYPE JUSTLEN '30' "
|
||||||
|
Cmd:= "ISSUE_DATE TOTAL EST_LOSS_VALUE TOTAL ACT_LOSS_VALUE "
|
||||||
|
Cmd:= " HEADING ":'"':" Customer Advisories by Customer by Issue Date 'T'"
|
||||||
|
Cmd:= " PAGE # 'P' by selected Issue dates from "
|
||||||
|
Cmd:= "(":IssueDateFrom:") Thru (":IssueDateThru:" ) ":'"'
|
||||||
|
if DirToPrinter = 'Yes' then
|
||||||
|
PrintPath = Printer_Select('',1) ;* Get default printer path
|
||||||
|
Void = set_printer( 'INIT', '', '', '':@fm:1, 1, '',PrintPath )
|
||||||
|
car_rpt1_prn( iconv( IssueDateFrom, 'D' ), iconv( IssueDateThru, 'D' ) )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
Void = set_printer( 'INIT', '', '', '', 0, '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
end else
|
||||||
|
or_view( '', Cmd )
|
||||||
|
*SysSize = get_property( 'SYSTEM', 'SIZE' )
|
||||||
|
*Void = send_event( 'ORPRV', 'SIZE', 1:@fm:1:@fm:SysSize<1>:@fm:SysSize<2> )
|
||||||
|
Void = set_property( 'ORPRV.PRINT', 'ENABLED', 0 )
|
||||||
|
WinId = 'ORPRV'
|
||||||
|
loop
|
||||||
|
while get_property( WinId, 'HANDLE' )
|
||||||
|
yield()
|
||||||
|
repeat
|
||||||
|
ToPrint = ''
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'Do you want to print this report?'
|
||||||
|
MsgInfo<micon$> = '?'
|
||||||
|
MsgInfo<mtype$> = 'BNY'
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mdefbtn$> = 2 ;* default to no
|
||||||
|
ToPrint = msg( @window, MsgInfo )
|
||||||
|
if ToPrint then
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
Void = set_printer( 'INIT', '', '', '':@fm:1, 1, '' )
|
||||||
|
car_rpt1_prn( iconv( IssueDateFrom, 'D' ), iconv( IssueDateThru, 'D' ) )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
Void = set_printer( 'INIT', '', '', '', 0, '' )
|
||||||
|
Void = set_printer( 'TERM' )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'NO Records meeting your date criteria!!'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = MSG( '', MsgInfo )
|
||||||
|
end
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
|
206
LSL2/STPROC/CAR_RPT1_PRN.txt
Normal file
206
LSL2/STPROC/CAR_RPT1_PRN.txt
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
compile subroutine car_rpt1_prn( IssueDateFrom, IssueDateThru )
|
||||||
|
!
|
||||||
|
* LIST CAR ID-SUPP SEQ JUSTLEN '5' COLHEAD 'CAR#' CUST_CITY JUSTLEN '50' CONTACT_NAME WO COMPLAINT_TYPE JUSTLEN '30' EST_LOSS_VALUE ACT_LOSS_VALUE HEADING " Customer Advisories by Customer by Issue Date 'T' PAGE # 'P' by selected Issue dates from (2/1/98) Thru (3/13/98 ) "
|
||||||
|
!
|
||||||
|
*PRINTER ON
|
||||||
|
*
|
||||||
|
* HEADING/FOOTING
|
||||||
|
declare function set_printer, MSG
|
||||||
|
Font = 'Courier New,8,L,0'
|
||||||
|
convert ',' to @fm in Font
|
||||||
|
HeadPos = '.5,3,1.5,.75,1.8,.75,1,1'
|
||||||
|
convert ',' to @fm in HeadPos
|
||||||
|
TheHeader = " Customer Advisories by Customer by Issue Date 'T' PAGE # 'P' by selected issue dates from (":oconv(IssueDateFrom, 'D2/'):") Thru (":oconv(IssueDateThru, 'D2/' ):')':@fm
|
||||||
|
ColHeader = "Car#" : @vm : "Customer/City" : @vm : "Contact Name" : @vm : "WO" : @vm : "Complaint Type" : @vm : "Issue" : @vm : "Estimated" : @vm : "Actual"
|
||||||
|
ColHeader<-1> = "" : @vm : "" : @vm : "" : @vm : "" : @vm : "" : @vm : "Date" : @vm : "Loss Value" : @vm : "Loss Value"
|
||||||
|
Tvar = str( '_', 7):@vm:str( '_', 42):@vm:str( '_', 30):@vm:str( '_', 14):@vm
|
||||||
|
Tvar:= str( '_',30 ):@vm:str( '_', 12 ):@vm:str( '_', 15):@vm:str( '_', 15 )
|
||||||
|
*COLHEADER = ''
|
||||||
|
ColHeader<-1> = Tvar
|
||||||
|
*TheHeader = ''
|
||||||
|
Void = set_printer( 'FONTHEADFOOT', Font )
|
||||||
|
Void = set_printer( 'HEADER', TheHeader, HeadPos, ColHeader )
|
||||||
|
Void = set_printer( 'FONT', Font )
|
||||||
|
|
||||||
|
*FOOTING ""
|
||||||
|
*
|
||||||
|
@RECCOUNT=0
|
||||||
|
FIRST.PASS=1
|
||||||
|
LAST.RECORD=0
|
||||||
|
READERR=0
|
||||||
|
*
|
||||||
|
* OPEN DICT AND DATA FILES
|
||||||
|
*
|
||||||
|
OPEN "DICT","CAR" TO @DICT ELSE return
|
||||||
|
OPEN "","CAR" TO FILE.IN ELSE return
|
||||||
|
*
|
||||||
|
* MAKE COLUMN HEADING
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ZERO ACCUMULATORS FOR EACH BREAK
|
||||||
|
*
|
||||||
|
ESTULLOSSULVALUE.GRAND.TOTAL=0
|
||||||
|
ESTULLOSSULVALUE.GRAND.COUNT=0
|
||||||
|
*
|
||||||
|
ACTULLOSSULVALUE.GRAND.TOTAL=0
|
||||||
|
ACTULLOSSULVALUE.GRAND.COUNT=0
|
||||||
|
*
|
||||||
|
!
|
||||||
|
READRECORD:
|
||||||
|
!
|
||||||
|
*
|
||||||
|
*
|
||||||
|
@FILE.ERROR.MODE=1
|
||||||
|
READNEXT @ID,WHICH.VALUE ELSE
|
||||||
|
@FILE.ERROR.MODE=0
|
||||||
|
IF STATUS() GT 0 THEN
|
||||||
|
@ANS=@FILE.ERROR<1>
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_5} )
|
||||||
|
return
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> EQ 421 THEN
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_6} )
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> NE 111 THEN
|
||||||
|
@ANS=@FILE.ERROR<1>
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_4} )
|
||||||
|
READERR+=1
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
LAST.RECORD=1
|
||||||
|
END
|
||||||
|
@FILE.ERROR.MODE=0
|
||||||
|
*
|
||||||
|
S.ATID=@ID
|
||||||
|
*
|
||||||
|
IF FIRST.PASS AND LAST.RECORD THEN
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_2} )
|
||||||
|
return
|
||||||
|
END
|
||||||
|
*
|
||||||
|
IF LAST.RECORD THEN GOTO BREAKS
|
||||||
|
*
|
||||||
|
IF @REDUCTION.DONE THEN
|
||||||
|
@FILE.ERROR.MODE=1
|
||||||
|
READO @RECORD FROM FILE.IN,@ID ELSE
|
||||||
|
@FILE.ERROR.MODE=0
|
||||||
|
IF STATUS() GT 0 THEN
|
||||||
|
@ANS=@FILE.ERROR<1>
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_5} )
|
||||||
|
return
|
||||||
|
END
|
||||||
|
IF @FILE.ERROR<1> NE 100 THEN
|
||||||
|
@ANS=@FILE.ERROR<1>
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_4} )
|
||||||
|
READERR+=1
|
||||||
|
END
|
||||||
|
GOTO READRECORD
|
||||||
|
END
|
||||||
|
@FILE.ERROR.MODE=0
|
||||||
|
END
|
||||||
|
*
|
||||||
|
@RECCOUNT+=1
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CALCULATE VALUE(S) FOR COLUMN(S)
|
||||||
|
*
|
||||||
|
S.ATID={@ID}
|
||||||
|
I.ATID=S.ATID
|
||||||
|
S.SEQ={SEQ}
|
||||||
|
I.SEQ=S.SEQ
|
||||||
|
S.CUSTULCITY={CUST_CITY}
|
||||||
|
I.CUSTULCITY=S.CUSTULCITY
|
||||||
|
S.CONTACTULNAME={CONTACT_NAME}
|
||||||
|
I.CONTACTULNAME=S.CONTACTULNAME
|
||||||
|
S.WO={WO}
|
||||||
|
I.WO=S.WO
|
||||||
|
S.COMPLAINTULTYPE={COMPLAINT_TYPE}
|
||||||
|
I.COMPLAINTULTYPE=S.COMPLAINTULTYPE
|
||||||
|
S.ISSUEDATE={ISSUE_DATE}
|
||||||
|
I.ISSUEDATE=S.ISSUEDATE
|
||||||
|
S.ESTULLOSSULVALUE={EST_LOSS_VALUE}
|
||||||
|
I.ESTULLOSSULVALUE=S.ESTULLOSSULVALUE
|
||||||
|
S.ACTULLOSSULVALUE={ACT_LOSS_VALUE}
|
||||||
|
I.ACTULLOSSULVALUE=S.ACTULLOSSULVALUE
|
||||||
|
*
|
||||||
|
*
|
||||||
|
IF FIRST.PASS THEN
|
||||||
|
FIRST.PASS=0
|
||||||
|
GOTO DETAIL
|
||||||
|
END
|
||||||
|
*
|
||||||
|
*
|
||||||
|
!
|
||||||
|
BREAKS:
|
||||||
|
!
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PERFORM LAST RECORD OUTPUT IF DONE
|
||||||
|
*
|
||||||
|
IF LAST.RECORD THEN
|
||||||
|
PRINTLINE = "***":@vm
|
||||||
|
PRINTLINE:= "":@vm
|
||||||
|
PRINTLINE:= "":@vm
|
||||||
|
PRINTLINE:= "":@vm
|
||||||
|
PRINTLINE:= "":@vm
|
||||||
|
PRINTLINE:= "":@vm
|
||||||
|
PRINTLINE:= OCONV(ESTULLOSSULVALUE.GRAND.TOTAL ,"MD2,$"):@vm
|
||||||
|
PRINTLINE:= OCONV(ACTULLOSSULVALUE.GRAND.TOTAL ,"MD2,$"):@vm
|
||||||
|
TableColInfo = '>+720':@vm:'<+4320':@vm:'<+2160':@vm:'>+1080':@vm:'<+2592':@vm:'>+1080':@vm:'>+1440':@vm:'>+1440'
|
||||||
|
Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE )
|
||||||
|
* PRINT
|
||||||
|
* @ANS=@REC.COUNT
|
||||||
|
* PRINT {RLIST_TEXT_1}
|
||||||
|
IF READERR THEN
|
||||||
|
@ANS=READERR
|
||||||
|
Void = set_printer( 'TEXT', {RLIST_TEXT_3} )
|
||||||
|
END
|
||||||
|
return
|
||||||
|
END
|
||||||
|
*
|
||||||
|
!
|
||||||
|
DETAIL:
|
||||||
|
!
|
||||||
|
*
|
||||||
|
* DO CONVERSIONS IF ANY
|
||||||
|
*
|
||||||
|
IF S.SEQ NE "" THEN S.SEQ=OCONV(S.SEQ,"MD0")
|
||||||
|
IF S.WO NE "" THEN S.WO=OCONV(S.WO,"MD0")
|
||||||
|
IF S.ISSUEDATE NE "" THEN S.ISSUEDATE=OCONV(S.ISSUEDATE,"D2/")
|
||||||
|
IF S.ESTULLOSSULVALUE NE "" THEN S.ESTULLOSSULVALUE=OCONV(S.ESTULLOSSULVALUE,"MD2,$")
|
||||||
|
IF S.ACTULLOSSULVALUE NE "" THEN S.ACTULLOSSULVALUE=OCONV(S.ACTULLOSSULVALUE,"MD2,$")
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ACCUMULATE TOTAL(S)
|
||||||
|
*
|
||||||
|
IF NUM(I.ESTULLOSSULVALUE) AND I.ESTULLOSSULVALUE NE "" THEN
|
||||||
|
ESTULLOSSULVALUE.GRAND.TOTAL+=I.ESTULLOSSULVALUE
|
||||||
|
ESTULLOSSULVALUE.GRAND.COUNT+=1
|
||||||
|
I.ESTULLOSSULVALUE=''
|
||||||
|
END
|
||||||
|
IF NUM(I.ACTULLOSSULVALUE) AND I.ACTULLOSSULVALUE NE "" THEN
|
||||||
|
ACTULLOSSULVALUE.GRAND.TOTAL+=I.ACTULLOSSULVALUE
|
||||||
|
ACTULLOSSULVALUE.GRAND.COUNT+=1
|
||||||
|
I.ACTULLOSSULVALUE=''
|
||||||
|
END
|
||||||
|
*
|
||||||
|
|
||||||
|
* PRINT DETAIL LINE
|
||||||
|
*
|
||||||
|
PRINTLINE = S.SEQ:@vm
|
||||||
|
PRINTLINE:= S.CUSTULCITY:@vm
|
||||||
|
PRINTLINE:= S.CONTACTULNAME:@vm
|
||||||
|
PRINTLINE:= S.WO:@vm
|
||||||
|
PRINTLINE:= S.COMPLAINTULTYPE:@vm
|
||||||
|
PRINTLINE:= S.ISSUEDATE:@vm
|
||||||
|
PRINTLINE:= S.ESTULLOSSULVALUE:@vm
|
||||||
|
PRINTLINE:= S.ACTULLOSSULVALUE
|
||||||
|
TableColInfo = '>+720':@vm:'<+4320':@vm:'<+2160':@vm:'>+1080':@vm:'<+2592':@vm:'>+1080':@vm:'>+1440':@vm:'>+1440'
|
||||||
|
Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE )
|
||||||
|
*
|
||||||
|
*
|
||||||
|
GOTO READRECORD
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
202
LSL2/STPROC/CAR_SRPT1.txt
Normal file
202
LSL2/STPROC/CAR_SRPT1.txt
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
compile function CAR_SRPT1()
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property
|
||||||
|
declare function set_printer, PrintSetup, obj_Install
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield
|
||||||
|
declare subroutine order_srpt1
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert msg_equates
|
||||||
|
$insert oiprint_equates
|
||||||
|
$insert rpt_cfg_equ
|
||||||
|
$INSERT PRINTSETUP_EQUATES
|
||||||
|
|
||||||
|
TimeX = Oconv(Time(),'MTS')
|
||||||
|
|
||||||
|
CrLf = Char(13):Char(10)
|
||||||
|
CurDte = OCONV(Date(),"D4/")
|
||||||
|
|
||||||
|
ReportID = "CAR001_SRPTCFG"
|
||||||
|
ReportControl = "CAR_SRPT1"
|
||||||
|
TableName = 'CAR'
|
||||||
|
|
||||||
|
TtlLin1 = ''
|
||||||
|
TtlLin2 = ''
|
||||||
|
TtlLin3 = ''
|
||||||
|
TtlLin4 = ''
|
||||||
|
|
||||||
|
open 'CONFIG' to ConfigTable else
|
||||||
|
Void = msg( '', 'Unable to open CONFIG...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
Read SRptConfig From ConfigTable,ReportID Else
|
||||||
|
Void = msg( '', 'Unable to read ': ReportID:' From CONFIG table!' )
|
||||||
|
return 0
|
||||||
|
End
|
||||||
|
|
||||||
|
Params = dialog_box( ReportControl, @window, '*CENTER' )
|
||||||
|
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
open 'SYSLISTS' to SysListsTable else
|
||||||
|
Void = msg( '', 'Unable to open SYSLISTS...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
ListsId = ReportControl:'*':@station
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
Void = msg( '', 'Unable to clear SYSLISTS ':ListsId:'...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
Custs = Params<1>
|
||||||
|
BegDte = Params<2>
|
||||||
|
EndDte = Params<3>
|
||||||
|
Open = Params<4>
|
||||||
|
FormComplete = Params<5>
|
||||||
|
CARInPlace = Params<6>
|
||||||
|
Verified = Params<7>
|
||||||
|
|
||||||
|
Void = utility( 'CURSOR', 'H' )
|
||||||
|
|
||||||
|
WithStmt = 'SELECT ':TableName:' '
|
||||||
|
WthSwt = 0
|
||||||
|
IssueDateLimit = ''
|
||||||
|
Begin Case
|
||||||
|
Case BegDte and EndDte
|
||||||
|
TtlLin2 = 'Issue Dates: From ':BegDte:' To ':EndDte
|
||||||
|
WithStmt := " WITH ISSUE_DATE FROM '": BegDte:"' TO '":EndDte: "' "
|
||||||
|
IssueDateLimit = 'LIMIT ISSUE_DATE FROM "':BegDte:'" TO "':EndDte:'" '
|
||||||
|
WthSwt = 1
|
||||||
|
Case BegDte
|
||||||
|
TtlLin2 = 'Issue Dates: From ':BegDte:' To ':CurDte
|
||||||
|
WithStmt := " WITH ISSUE_DATE GE '":BegDte:"' "
|
||||||
|
IssueDateLimit = 'LIMIT ISSUE_DATE FROM "':BegDte:'" TO "':CurDte:'" '
|
||||||
|
WthSwt = 1
|
||||||
|
Case EndDte
|
||||||
|
TtlLin2 = 'Issue Dates: From Earliest To ':EndDte
|
||||||
|
WithStmt := " WITH ISSUE_DATE LE '":EndDte:"' "
|
||||||
|
IssueDateLimit = 'LIMIT ISSUE_DATE <= "':CurDte:'" '
|
||||||
|
WthSwt = 1
|
||||||
|
Case 1
|
||||||
|
TtlLin2 = 'Issue Dates: ALL'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If Custs then
|
||||||
|
CustCnt = Count(@vm,Custs)
|
||||||
|
If CustCnt > 20 Then
|
||||||
|
TtlLin3 = 'Customers: More Than 20 Selected'
|
||||||
|
End Else
|
||||||
|
TtlLin3 = Custs
|
||||||
|
swap @vm with ", " in TtlLin3
|
||||||
|
TtlLin3 = 'Customers: ':TtlLin3
|
||||||
|
End
|
||||||
|
swap @vm with "' '" in Custs
|
||||||
|
Custs = "'":Custs:"'"
|
||||||
|
If WthSwt Then WithStmt := ' AND '
|
||||||
|
WithStmt := ' WITH CUST_ID = ':Custs
|
||||||
|
WthSwt = 1
|
||||||
|
end else
|
||||||
|
TtlLin3 = 'Customers: ALL'
|
||||||
|
end
|
||||||
|
|
||||||
|
CARStatusVar = ''
|
||||||
|
TtlLin4 = 'Status: '
|
||||||
|
CarSwt = 0
|
||||||
|
if Open then
|
||||||
|
CARStatusVar := " 'O'"
|
||||||
|
TtlLin4 := 'Open'
|
||||||
|
CarSwt = 1
|
||||||
|
end
|
||||||
|
if FormComplete then
|
||||||
|
CARStatusVar := " 'F'"
|
||||||
|
If CarSwt Then TtlLin4 := ', '
|
||||||
|
TtlLin4 := 'Form Complete'
|
||||||
|
CarSwt = 1
|
||||||
|
end
|
||||||
|
if CARInplace then
|
||||||
|
CARStatusVar := " 'C'"
|
||||||
|
If CarSwt Then TtlLin4 := ', '
|
||||||
|
TtlLin4 := 'Car In Place'
|
||||||
|
CarSwt = 1
|
||||||
|
end
|
||||||
|
if Verified then
|
||||||
|
CARStatusVar := " 'Verified'"
|
||||||
|
If CarSwt Then TtlLin4 := ', '
|
||||||
|
TtlLin4 := 'Verified'
|
||||||
|
CarSwt = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
If CarSwt Else TtlLin4 := 'All'
|
||||||
|
|
||||||
|
TmpVar = Count(TtlLin4,', ')
|
||||||
|
If TmpVar Then
|
||||||
|
TmpVar = Index(TtlLin4,', ',TmpVar)
|
||||||
|
TtlLin4[TmpVar,1] = ' And'
|
||||||
|
End
|
||||||
|
|
||||||
|
if CarStatusVar then
|
||||||
|
If WthSwt Then WithStmt := ' AND '
|
||||||
|
WithStmt := ' WITH STATUS = ':CARStatusVar:' '
|
||||||
|
end
|
||||||
|
|
||||||
|
rlist( WithStmt, target_savelist$, ListsId, '', '' )
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
|
||||||
|
Script = SRptConfig<SlistScript$>
|
||||||
|
|
||||||
|
RptWdt = SRptConfig<Width$>
|
||||||
|
|
||||||
|
Title = obj_Install('Get_Prop','Company'):' ':SRptConfig<Title$>
|
||||||
|
Margin = INT((RptWdt - LEN(Title))/2)
|
||||||
|
LMargin = Margin - 10 ;* 10 equals length of the date
|
||||||
|
RMargin = Margin - 8 ;* 8 equals length of 'Page....'
|
||||||
|
Title = OCONV(Date(),'D4/'):SPACE(LMargin):Title:SPACE(RMargin):"Page'PP''L'"
|
||||||
|
|
||||||
|
SWAP '~Title~' WITH Title IN Script
|
||||||
|
|
||||||
|
TitleLine2 = TtlLin2
|
||||||
|
TitleLine3 = TtlLin3
|
||||||
|
TitleLine4 = TtlLin4
|
||||||
|
|
||||||
|
IF TitleLine2 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine2))/2)
|
||||||
|
LMargin = Margin - 7 ;* 7 equals length of time (12:15PM)
|
||||||
|
RMargin = Margin
|
||||||
|
TitleLine2 = OCONV(Time(),'MTH'):SPACE(LMargin):TitleLine2:SPACE(RMargin)
|
||||||
|
SWAP '~SecondTitleLine~' WITH TitleLine2 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~SecondTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine3 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine3))/2)
|
||||||
|
SWAP '~ThirdTitleLine~' WITH "'L'":TitleLine3 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~ThirdTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine4 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine4))/2)
|
||||||
|
SWAP '~FourthTitleLine~' WITH "'L'":TitleLine4 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~FourthTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
* Added after upgrade to OI4.13a to reset default printer in OIPI32 engine.
|
||||||
|
|
||||||
|
PrintCount = PrintSetup(PRN_GET$,'',Printers,DefaultPrinter)
|
||||||
|
CONVERT ',' TO @FM IN DefaultPrinter
|
||||||
|
DefPrintPath = DefaultPrinter<1>:@FM:DefaultPrinter<3>
|
||||||
|
|
||||||
|
Void = set_printer( 'INIT', '', '', .63:@fm:.63:@fm:.25:@fm:'', 0,'',DefPrintPath )
|
||||||
|
Void = Set_Printer('TERM')
|
||||||
|
|
||||||
|
call slist( Script )
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
Void = msg( '', 'Unable to clear SYSLISTS ':ListsId:'...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN 0
|
32
LSL2/STPROC/CAR_STATUS_CONV.txt
Normal file
32
LSL2/STPROC/CAR_STATUS_CONV.txt
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
SUBROUTINE CAR_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
begin case
|
||||||
|
case DataIo = 'O'
|
||||||
|
ReturnedValue = 'Open'
|
||||||
|
case DataIo = 'F'
|
||||||
|
ReturnedValue = 'Form Completed'
|
||||||
|
case DataIo = 'C'
|
||||||
|
ReturnedValue = 'CAR In Place'
|
||||||
|
case DataIo = 'V'
|
||||||
|
ReturnedValue = 'Verified'
|
||||||
|
end case
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
34
LSL2/STPROC/CASS_CURR_STATUS_CONV.txt
Normal file
34
LSL2/STPROC/CASS_CURR_STATUS_CONV.txt
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
SUBROUTINE CASS_CURR_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
$insert logical
|
||||||
|
|
||||||
|
equ valid$ to 0 ;* successful
|
||||||
|
equ invalid_msg$ to 1 ;* bad data - print error message window
|
||||||
|
equ invalid_conv$ to 2 ;* bad conversion - " "
|
||||||
|
equ invalid_nomsg$ to 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
status() = Valid$
|
||||||
|
begin case
|
||||||
|
case ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
|
||||||
|
case ConvType = 'OCONV'
|
||||||
|
Vals = XLATE('SYSREPOSPOPUPS','LSL2**RDS_CURR_STATUS',8,'X')
|
||||||
|
Desc = ''
|
||||||
|
LOOP
|
||||||
|
Val = Vals[1,@VM]
|
||||||
|
Code = Val[1,@SVM]
|
||||||
|
Desc = Val[COL2()+1,@SVM]
|
||||||
|
UNTIL Code = DataIO OR Vals = ''
|
||||||
|
Vals = DELETE(Vals,1,1,0)
|
||||||
|
REPEAT
|
||||||
|
ReturnedValue = Desc
|
||||||
|
|
||||||
|
case otherwise$
|
||||||
|
status() = invalid_msg$
|
||||||
|
end case
|
||||||
|
return
|
38
LSL2/STPROC/CDM_LOG_EVENTS.txt
Normal file
38
LSL2/STPROC/CDM_LOG_EVENTS.txt
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Compile function CDM_LOG_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||||
|
|
||||||
|
Declare function SRP_DateTime, Oconv, DateTime
|
||||||
|
Declare subroutine Set_Property
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
#window CDM_LOG
|
||||||
|
|
||||||
|
GoToEvent Event for CtrlEntId else
|
||||||
|
// Event not implemented
|
||||||
|
end
|
||||||
|
|
||||||
|
Return EventFlow or 1
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// EVENT HANDLERS
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Event WINDOW.CREATE(CreateParam)
|
||||||
|
|
||||||
|
EventFlow = 1
|
||||||
|
|
||||||
|
End Event
|
||||||
|
|
||||||
|
Event SIGN_BUTTON.CLICK()
|
||||||
|
IF @User4 EQ 'JONATHAN_O' then debug
|
||||||
|
Date = SRP_DateTime("Date", DateTime())
|
||||||
|
Time = SRP_DateTime("Time", Datetime())
|
||||||
|
|
||||||
|
iDate = OConv(Date, 'D4/H')
|
||||||
|
iTime = OConv(Time, 'MTS')
|
||||||
|
|
||||||
|
Set_Property(@Window : '.DATE_CHANGED', 'DEFPROP', iDate)
|
||||||
|
Set_Property(@Window : '.TIME_CHANGED', 'DEFPROP', iTime)
|
||||||
|
|
||||||
|
end event
|
||||||
|
|
||||||
|
|
77
LSL2/STPROC/CHANGE_COMPANY.txt
Normal file
77
LSL2/STPROC/CHANGE_COMPANY.txt
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
COMPILE ROUTINE Change_Company(Dummy)
|
||||||
|
ROWDEF(CHARSTR)
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Send_Dyn,Send_Info
|
||||||
|
DECLARE FUNCTION Get_Status, Set_Printer
|
||||||
|
|
||||||
|
OPEN 'CONFIG' To ConfigTable THEN
|
||||||
|
|
||||||
|
Select ConfigTable
|
||||||
|
|
||||||
|
ConfigKeys = ''
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT ConfigKey ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
IF ConfigKey[1,3] = 'Org' ELSE
|
||||||
|
READ ConfigRec FROM ConfigTable,ConfigKey THEN
|
||||||
|
|
||||||
|
IF INDEX(ConfigRec,'ATMI',1) THEN
|
||||||
|
Send_Dyn(ConfigKey)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ConfigKeyCnt = COUNT(ConfigKeys,@FM) + ( ConfigKeys NE '')
|
||||||
|
|
||||||
|
OPEN 'SYSPROCS' TO ProcsTable THEN
|
||||||
|
SELECT ProcsTable
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT @ID ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
READ @RECORD FROM ProcsTable,@ID THEN
|
||||||
|
|
||||||
|
IF INDEX(@RECORD,'ATMI',1) THEN
|
||||||
|
Send_Dyn(@ID)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'SYSREPOSEVENTS' TO ProcsTable THEN
|
||||||
|
SELECT ProcsTable
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT @ID ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
READ @RECORD FROM ProcsTable,@ID THEN
|
||||||
|
|
||||||
|
IF INDEX(@RECORD,'ATMI',1) THEN
|
||||||
|
Send_Dyn(@ID)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Bail:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
74
LSL2/STPROC/CHANGE_LOG_SERVICES.txt
Normal file
74
LSL2/STPROC/CHANGE_LOG_SERVICES.txt
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
FUNCTION CHANGE_LOG_SERVICES(@Service, @Params)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
$Insert LOGICAL
|
||||||
|
$insert SERVICE_SETUP
|
||||||
|
$Insert REVDOTNETEQUATES
|
||||||
|
|
||||||
|
|
||||||
|
Declare function Repository, Get_Repos_Entities, SRP_DateTime, SRP_Array, Get_Status, Set_Status, Errmsg, Datetime
|
||||||
|
Declare subroutine Set_Status, Errmsg, Error_Services
|
||||||
|
Declare Function Database_Services
|
||||||
|
Declare Function Environment_Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GoToService else
|
||||||
|
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||||
|
end
|
||||||
|
Return Response OR ''
|
||||||
|
|
||||||
|
//Write to sharepoint
|
||||||
|
Service WriteToSharePoint()
|
||||||
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
|
Lock hSysLists, ServiceKeyID then
|
||||||
|
//Define the dotNet version
|
||||||
|
DotNetHandle = StartDotNet("","4.0")
|
||||||
|
|
||||||
|
//Specify the DLL
|
||||||
|
rv = Set_Property.NET(DotNetHandle, "AssemblyName", "D:\Apps\OICurrent\IFXAPI\SharePoint\SharePointTools.dll")
|
||||||
|
|
||||||
|
//Create_Class.NET(//Define the classes
|
||||||
|
SPApi = Create_Class.NET(DotNetHandle, "SharePointTools.ExportToSharePoint", 0)
|
||||||
|
|
||||||
|
//Set report start time to the past 30 minutes.
|
||||||
|
StartDateTime = Datetime()
|
||||||
|
StartDateTime = SRP_DateTime("AddMinutes", StartDateTime, -15)
|
||||||
|
//StartDateTime = SRP_DateTime('AddDays', StartDateTime, -7)
|
||||||
|
|
||||||
|
//Pull in a list of all existing entities
|
||||||
|
AllEntityIDs = Get_Repos_Entities('LSL2', '', '', 0, 1, 0, '')
|
||||||
|
EntityList = ''
|
||||||
|
|
||||||
|
Server = Environment_Services('GetServer')
|
||||||
|
IF Server EQ 'MESSA005' then
|
||||||
|
Environment = 'PROD'
|
||||||
|
end else
|
||||||
|
Environment = 'DEV'
|
||||||
|
end
|
||||||
|
|
||||||
|
For Each EntityID in AllEntityIDs using @FM
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
statList = ''
|
||||||
|
Entity = Repository('GET', EntityID)
|
||||||
|
time = Entity<25>
|
||||||
|
If time GE StartDateTime then
|
||||||
|
time = OCONV(time,'DT4/^H')
|
||||||
|
(application, entityType, entityClass, entityName) using '*' = EntityID
|
||||||
|
updatedBy = Entity<26>
|
||||||
|
IF entityType NE 'STPROCDBG' AND entityType NE 'STPROCEXE' then
|
||||||
|
SharePointLog = Send_Message.NET(SPApi, "SendToList",time:@FM:application:@FM:entityType:@FM:entityClass:@FM:entityName:@FM:updatedBy:@FM:Environment, "System.String":@FM:"System.String":@FM:"System.String":@FM:"System.String":@FM:"System.String":@FM:"System.String":@FM:"System.String")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
test1='test'
|
||||||
|
Next EntityID
|
||||||
|
end
|
||||||
|
Unlock hSysLists, ServiceKeyID else Null
|
||||||
|
end service
|
||||||
|
|
139
LSL2/STPROC/CHART_TEST.txt
Normal file
139
LSL2/STPROC/CHART_TEST.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
COMPILE FUNCTION Chart_Test(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Chart_Test collector window
|
||||||
|
|
||||||
|
11/17/2009 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, obj_Appwindow
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Start_Window, Create_Note
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Notes_Comm
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LOGICAL
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Chart_Test commuter'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = 'NOTES_ATTACH.SAVE_BUTTON' AND Event = 'CLICK' ; GOSUB Save
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
hChart = @WINDOW:'.CHART'
|
||||||
|
|
||||||
|
strResult = Send_Message(hChart,'Clear')
|
||||||
|
|
||||||
|
c = Get_Property(hChart,'Constants')
|
||||||
|
|
||||||
|
Charts = Get_Property(hChart,'Charts')
|
||||||
|
|
||||||
|
|
||||||
|
Chart = Send_Message(hChart,'Add')
|
||||||
|
|
||||||
|
chChartTypeColumnClustered = Get_Property(c,'chChartTypeColumnClustered')
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(Chart,'Type',chChartTypeColumnClustered)
|
||||||
|
Set_Property(Chart,'HasLegend',TRUE$)
|
||||||
|
|
||||||
|
Status = OleStatus() ; IF Status THEN DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(Chart,'HasTitle',TRUE$)
|
||||||
|
Title = Get_Property(Chart,'Title')
|
||||||
|
|
||||||
|
Set_Property(Title,'Caption','Random Walk ':TimeDate() )
|
||||||
|
|
||||||
|
|
||||||
|
SeriesCollection = Get_Property(Chart,'SeriesCollection')
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO 4
|
||||||
|
Series = Send_Message(SeriesCollection,'Add')
|
||||||
|
|
||||||
|
Set_Property(Series,'Caption','Q':I)
|
||||||
|
|
||||||
|
Categories = ''
|
||||||
|
Vals = ''
|
||||||
|
|
||||||
|
FOR J = 1 TO 5
|
||||||
|
Categories<J> = 'Region ':J
|
||||||
|
Vals<J> = RND(100)
|
||||||
|
NEXT J
|
||||||
|
|
||||||
|
CONVERT @FM TO TAB$ IN Categories
|
||||||
|
CONVERT @FM TO TAB$ IN Vals
|
||||||
|
|
||||||
|
chDimCategories = Get_Property(c,'chDimCategories')
|
||||||
|
chDimValues = Get_Property(c,'chDimValues')
|
||||||
|
chDimDataLiteral = Get_Property(c,'chDataLiteral')
|
||||||
|
|
||||||
|
|
||||||
|
x = Send_Message(Series,'SetData',chDimCategories,chDimDataLiteral,Categories)
|
||||||
|
x = Send_Message(Series,'SetData',chDimValues,chDimDataLiteral,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Save:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -152,3 +152,4 @@ end service
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
24
LSL2/STPROC/CHECK_NOTES.txt
Normal file
24
LSL2/STPROC/CHECK_NOTES.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
function check_notes(Branch)
|
||||||
|
declare function set_property, fieldcount, get_property, msg, dialog_box
|
||||||
|
* begin condition
|
||||||
|
* pre:
|
||||||
|
* post:
|
||||||
|
* end condition
|
||||||
|
$insert msg_equates
|
||||||
|
$insert note_ptrs_equ
|
||||||
|
|
||||||
|
if xlate( 'NOTE_PTRS', @user4, 'NEW_MESSAGES', 'X' ) then
|
||||||
|
NotePtrRec = xlate( 'NOTE_PTRS', @user4, '', 'X' )
|
||||||
|
if NotePtrRec<note_ptrs_new$,1> = 'Yes' then
|
||||||
|
* the top one is new meaning they got a new one
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Mtext = 'You have a new message from ':NotePtrRec<note_ptrs_from$,1>:'.'
|
||||||
|
MsgInfo<mtext$> = MText
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Return 0
|
||||||
|
|
2149
LSL2/STPROC/CLEAN_INSP.txt
Normal file
2149
LSL2/STPROC/CLEAN_INSP.txt
Normal file
File diff suppressed because it is too large
Load Diff
947
LSL2/STPROC/CLEAN_INSP_ACTIONS.txt
Normal file
947
LSL2/STPROC/CLEAN_INSP_ACTIONS.txt
Normal file
@ -0,0 +1,947 @@
|
|||||||
|
Function CLEAN_INSP_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
||||||
|
permission from Infineon.
|
||||||
|
|
||||||
|
Name : CLEAN_INSP_Actions
|
||||||
|
|
||||||
|
Description : Handles calculated columns and MFS calls for the current table.
|
||||||
|
|
||||||
|
Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly.
|
||||||
|
If called from outside of a calculated column these will need to be set and restored.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Action [in] -- Name of the action to be taken
|
||||||
|
CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be
|
||||||
|
populated when the CalcField action is being used.
|
||||||
|
FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM
|
||||||
|
delimited array, with the current MFS name as the first value in the array, and the BFS
|
||||||
|
name as the last value. Normally set by a calling MFS.
|
||||||
|
Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the
|
||||||
|
entire handle structure that the Basic+ Open statement would provide. Normally set by a
|
||||||
|
calling MFS.
|
||||||
|
Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS.
|
||||||
|
FMC [in] -- Various functions. Normally set by a calling MFS.
|
||||||
|
Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
|
||||||
|
"get handle" functions). Normally set by a calling MFS.
|
||||||
|
Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but
|
||||||
|
for some actions can be set by the action handler to indicate failure.
|
||||||
|
OrigRecord [in] -- Original content of the record being processed by the current action. This is
|
||||||
|
automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
|
||||||
|
BASE_MFS.
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.)
|
||||||
|
Can also be used to return a special value, such as the results of the CalcField
|
||||||
|
method.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
07/28/10 dmb Original programmer.
|
||||||
|
10/13/10 dmb Fix logic to extract the file handle if file has an index
|
||||||
|
03/26/11 dmb Add logic to save and restore @FILE.ERROR
|
||||||
|
01/03/17 dmb Updated the ROTR compare logic to search for a recipe match.
|
||||||
|
04/09/18 dmb Updated the ROTR compare logic to be limited to FWI stages. Also modified the default logic
|
||||||
|
to be Failed unless proven otherwise.
|
||||||
|
04/19/18 djs Update ROTR compare logic to support multiple spec recipes.
|
||||||
|
05/04/18 dmb Update the special metrology log entry log to use the GetServer service rather than the
|
||||||
|
@STATION global variable.
|
||||||
|
06/13/18 dmb Replaced CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$ with CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$ when comparing
|
||||||
|
against the Sum of Defects in the SurfScan recipe. - [IREPIOI-43]
|
||||||
|
09/24/18 djs Adjusted the OConv call on the ScanDefect variable within the WRITE_RECORD_PRE action.
|
||||||
|
10/29/18 djs Updated the WRITE_RECORD_PRE event to calculate the SOD average to only use wafers that
|
||||||
|
are below the USL (SOD Max) as per ROTR Project requirements. Also updated the UCL request
|
||||||
|
using QA_Services to include the scanned Tencor Recipe name in order to return the UCL
|
||||||
|
associated with the particular recipe being processed at that time.
|
||||||
|
06/07/19 djs Updated the WRITE_RECORD_PRE GoSub to support ROTR requirements for POST stage SurfScan
|
||||||
|
rundata files.
|
||||||
|
08/12/20 djs Added logging within the WRITE_RECORD_PRE GoSub to gather data for a bug within the
|
||||||
|
Metrology_Services('ImportMetrologyService') subroutine. Occasionally the DB server is
|
||||||
|
getting an out of memory error when importing metrology files.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$insert FILE.SYSTEM.EQUATES
|
||||||
|
$insert ACTION_SETUP
|
||||||
|
$insert CLEAN_INSP_EQUATES
|
||||||
|
$insert REACTOR_EQUATES
|
||||||
|
$insert RDS_EQUATES
|
||||||
|
$insert WM_OUT_EQUATES
|
||||||
|
$insert WO_LOG_EQUATES
|
||||||
|
$insert ROTR_EQUATES
|
||||||
|
$insert WO_MAT_EQUATES
|
||||||
|
|
||||||
|
Equ Comma$ to ','
|
||||||
|
|
||||||
|
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
||||||
|
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log
|
||||||
|
Declare subroutine Qa_Services
|
||||||
|
|
||||||
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
|
||||||
|
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
|
||||||
|
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
|
||||||
|
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
|
||||||
|
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
|
||||||
|
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
|
||||||
|
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
|
||||||
|
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
|
||||||
|
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
|
||||||
|
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
|
||||||
|
Case Otherwise$ ; Status = 'Invalid Action'
|
||||||
|
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If KeyID then GoSub Restore_System_Variables
|
||||||
|
|
||||||
|
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
|
||||||
|
|
||||||
|
Return ActionFlow
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Calculated Columns
|
||||||
|
//
|
||||||
|
// The typical structure of a calculated column will look like this:
|
||||||
|
//
|
||||||
|
// Declare function Database_Services
|
||||||
|
//
|
||||||
|
// @ANS = Database_Services('CalculateColumn')
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CalculateColumn:
|
||||||
|
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||||
|
ActionFlow = ''
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case CalcColName EQ 'INSP_REQ' ; GoSub INSP_REQ
|
||||||
|
Case CalcColName EQ 'RDS_ROTR_ACTION' ; GoSub RDS_ROTR_ACTION
|
||||||
|
End Case
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
INSP_REQ:
|
||||||
|
|
||||||
|
SkipInsp = Xlate('WO_MAT', {WO_MAT_KEY}, 'CONVERTED_MATERIAL', 'X')
|
||||||
|
If SkipInsp EQ '' then
|
||||||
|
RDSNo = {RDS_NO}
|
||||||
|
WONo = {WO_NO}
|
||||||
|
WOQty = Xlate('WO_LOG', WONo, 'QTY', 'X')
|
||||||
|
RunNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||||
|
InspInterval = {INSP_INTERVAL}
|
||||||
|
LastRun = ( (RunNo * 25) EQ WOQty )
|
||||||
|
InspReq = ( (Mod((RunNo - 1), InspInterval) EQ 0) or LastRun )
|
||||||
|
ActionFlow = InspReq
|
||||||
|
end else
|
||||||
|
ActionFlow = False$
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
RDS_ROTR_ACTION:
|
||||||
|
|
||||||
|
|
||||||
|
ROTRAction = {ROTR_ACTION}
|
||||||
|
If ROTRAction EQ 'F' then
|
||||||
|
// Before returning a Fail, check to see if there is an acceptance for the results.
|
||||||
|
AcceptedSignature = {SIGN_ROTR_SIGNATURE}
|
||||||
|
AcceptedReason = {SIGN_ROTR_REASON}
|
||||||
|
If (AcceptedSignature NE '') AND (AcceptedReason NE '') then ROTRAction = 'A'
|
||||||
|
end
|
||||||
|
ActionFlow = ROTRAction
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
// ----- MFS calls -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
READ_RECORD_PRE:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
// ActionFlow = ACTION_STOP$
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
READ_RECORD:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
READONLY_RECORD_PRE:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
// ActionFlow = ACTION_STOP$
|
||||||
|
return
|
||||||
|
|
||||||
|
READONLY_RECORD:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
WRITE_RECORD_PRE:
|
||||||
|
|
||||||
|
OrigRecCopy = OrigRecord
|
||||||
|
RecCopy = Record
|
||||||
|
Convert @VM to '' in OrigRecCopy
|
||||||
|
Convert @VM to '' in RecCopy
|
||||||
|
// LWII Specification limits
|
||||||
|
|
||||||
|
OrigLWIISpecLPD = Trim(OrigRecCopy<CLEAN_INSP_INSP_LPD$>)
|
||||||
|
OrigLWIISpecScr = Trim(OrigRecCopy<CLEAN_INSP_INSP_SCRATCHES$>)
|
||||||
|
OrigLWIISpecScrLen = Trim(OrigRecCopy<CLEAN_INSP_INSP_SCRATCH_LEN$>)
|
||||||
|
OrigLWIISpecPits = Trim(OrigRecCopy<CLEAN_INSP_INSP_PITS$>)
|
||||||
|
OrigLWIISpecMounds = Trim(OrigRecCopy<CLEAN_INSP_INSP_MOUNDS$>)
|
||||||
|
OrigLWIISpecStack = Trim(OrigRecCopy<CLEAN_INSP_INSP_STACK_FAULTS$>)
|
||||||
|
OrigLWIISpecSpikes = Trim(OrigRecCopy<CLEAN_INSP_INSP_SPIKES$>)
|
||||||
|
OrigLWIISpecSpots = Trim(OrigRecCopy<CLEAN_INSP_INSP_SPOTS$>)
|
||||||
|
OrigLWIISpecBLDef = Trim(OrigRecCopy<CLEAN_INSP_INSP_BL_DEFECTS$>)
|
||||||
|
OrigLWIISpecFOV = Trim(OrigRecCopy<CLEAN_INSP_INSP_FOV$>)
|
||||||
|
NewLWIISpecLPD = Trim(RecCopy<CLEAN_INSP_INSP_LPD$>)
|
||||||
|
NewLWIISpecScr = Trim(RecCopy<CLEAN_INSP_INSP_SCRATCHES$>)
|
||||||
|
NewLWIISpecScrLen = Trim(RecCopy<CLEAN_INSP_INSP_SCRATCH_LEN$>)
|
||||||
|
NewLWIISpecPits = Trim(RecCopy<CLEAN_INSP_INSP_PITS$>)
|
||||||
|
NewLWIISpecMounds = Trim(RecCopy<CLEAN_INSP_INSP_MOUNDS$>)
|
||||||
|
NewLWIISpecStack = Trim(RecCopy<CLEAN_INSP_INSP_STACK_FAULTS$>)
|
||||||
|
NewLWIISpecSpikes = Trim(RecCopy<CLEAN_INSP_INSP_SPIKES$>)
|
||||||
|
NewLWIISpecSpots = Trim(RecCopy<CLEAN_INSP_INSP_SPOTS$>)
|
||||||
|
NewLWIISpecBLDef = Trim(RecCopy<CLEAN_INSP_INSP_BL_DEFECTS$>)
|
||||||
|
NewLWIISpecFOV = Trim(RecCopy<CLEAN_INSP_INSP_FOV$>)
|
||||||
|
|
||||||
|
// LWII Signature
|
||||||
|
OrigLWIISig = Trim(OrigRecCopy<CLEAN_INSP_INSP_SIG$>)
|
||||||
|
OrigLWIIDtm = Trim(OrigRecCopy<CLEAN_INSP_INSP_SIG_DTM$>)
|
||||||
|
NewLWIISig = Trim(RecCopy<CLEAN_INSP_INSP_SIG$>)
|
||||||
|
NewLWIIDtm = Trim(RecCopy<CLEAN_INSP_INSP_SIG_DTM$>)
|
||||||
|
|
||||||
|
// LWIS Specification Limits
|
||||||
|
OrigLWISRecipe = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>)
|
||||||
|
OrigLWISSpecDef = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURF_DEFECTS$>)
|
||||||
|
OrigLWISSpecHaze = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURF_HAZE$>)
|
||||||
|
NewLWISRecipe = Trim(RecCopy<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>)
|
||||||
|
NewLWISSpecDef = Trim(RecCopy<CLEAN_INSP_SPEC_SURF_DEFECTS$>)
|
||||||
|
NewLWISSpecHaze = Trim(RecCopy<CLEAN_INSP_SPEC_SURF_HAZE$>)
|
||||||
|
|
||||||
|
// LWIS Signature
|
||||||
|
OrigLWISSig = Trim(OrigRecCopy<CLEAN_INSP_SCAN_SIG$>)
|
||||||
|
OrigLWISDtm = Trim(OrigRecCopy<CLEAN_INSP_SCAN_SIG_DTM$>)
|
||||||
|
NewLWISSig = Trim(RecCopy<CLEAN_INSP_SCAN_SIG$>)
|
||||||
|
NewLWISDtm = Trim(RecCopy<CLEAN_INSP_SCAN_SIG_DTM$>)
|
||||||
|
RDSKeyID = RecCopy<CLEAN_INSP_RDS_NO$>
|
||||||
|
|
||||||
|
// Check if run aborted and wafers were removed
|
||||||
|
WafersRemoved = Trim(RecCopy<CLEAN_INSP_WAFERS_REMOVED$>)
|
||||||
|
|
||||||
|
RDSNo = RDSKeyID
|
||||||
|
FinalQA = False$
|
||||||
|
RDSRow = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
|
WorkOrderNo = RDSRow<RDS_WO$>
|
||||||
|
WorkOrderRow = Database_Services('ReadDataRow', 'WO_LOG', WorkOrderNo)
|
||||||
|
ReactType = WorkOrderRow<WO_LOG_REACT_TYPE$>
|
||||||
|
// Check to see if the Final QA signature is in place.
|
||||||
|
|
||||||
|
If ReactType EQ 'EPP' then
|
||||||
|
CassetteNos = RDSRow<RDS_OUT_CASS_NO$>
|
||||||
|
OutNCRNos = RDSRow<RDS_OUT_NCR$>
|
||||||
|
For Each CassetteNo in CassetteNos using @VM setting vPos
|
||||||
|
OutNCRNo = OutNCRNos<0, vPos>
|
||||||
|
// Ignore NCRd wafers
|
||||||
|
If OutNCRNo EQ '' then
|
||||||
|
WMOutKey = RDSRow<RDS_WO_STEP_KEY$> : '*' : CassetteNo
|
||||||
|
WMOutRow = Database_Services('ReadDataRow', 'WM_OUT', WMOutKey)
|
||||||
|
If WMOutRow<WM_OUT_SUP_VER_SIG$> NE '' then
|
||||||
|
FinalQA = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Until FinalQA
|
||||||
|
Next CassetteNo
|
||||||
|
end else
|
||||||
|
If RDSRow<RDS_SUP_VER_SIG$> NE '' then
|
||||||
|
FinalQA = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// If Final QA signature is in place, implement the control logic.
|
||||||
|
If FinalQA EQ True$ then
|
||||||
|
|
||||||
|
// User is attempting to modify this row. Set the FS104 error and log the event.
|
||||||
|
Error_Services('Add', 'FS104:FQA has already been signed. CLEAN_INSP record cannot be updated!')
|
||||||
|
OrigFileError = 104 : @FM : 'FQA has already been signed. CLEAN_INSP record cannot be updated!'
|
||||||
|
Status = 0
|
||||||
|
Record = ''
|
||||||
|
ActionFlow = ACTION_STOP$
|
||||||
|
|
||||||
|
end else
|
||||||
|
|
||||||
|
If ( (OrigLWIISpecLPD NE '') and (NewLWIISpecLPD EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecScr NE '') and (NewLWIISpecScr EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecScrLen NE '') and (NewLWIISpecScrLen EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecPits NE '') and (NewLWIISpecPits EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecMounds NE '') and (NewLWIISpecMounds EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecStack NE '') and (NewLWIISpecStack EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecSpikes NE '') and (NewLWIISpecSpikes EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecSpots NE '') and (NewLWIISpecSpots EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecBLDef NE '') and (NewLWIISpecBLDef EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecFOV NE '') and (NewLWIISpecFOV EQ '') ) |
|
||||||
|
or ( (OrigLWIISig NE '') and (NewLWIISig EQ '') ) |
|
||||||
|
or ( (OrigLWIIDtm NE '') and (NewLWIIDtm EQ '') ) |
|
||||||
|
or ( (OrigLWISRecipe NE '') and (NewLWISRecipe EQ '') ) |
|
||||||
|
or ( (OrigLWISSpecDef NE '') and (NewLWISSpecDef EQ '') ) |
|
||||||
|
or ( (OrigLWISSpecHaze NE '') and (NewLWISSpecHaze EQ '') ) |
|
||||||
|
or ( (OrigLWISSig NE '') and (NewLWISSig EQ '') ) |
|
||||||
|
or ( (OrigLWISDtm NE '') and (NewLWISDtm EQ '') ) and Not(MemberOf(@User4, 'OI_ADMIN')) then
|
||||||
|
|
||||||
|
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
|
||||||
|
Error_Services('Add', 'FS104:Specification limits or signature data cannot be removed. Clean & Insp record cannot be updated!')
|
||||||
|
OrigFileError = 104 : @FM : 'Specification limits or signature data cannot be removed. Clean & Insp record cannot be updated!'
|
||||||
|
Status = 0
|
||||||
|
Record = ''
|
||||||
|
ActionFlow = ACTION_STOP$
|
||||||
|
|
||||||
|
end else
|
||||||
|
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
IsEpiPro = Rds_Services('IsEpiPro', RDSKeyID)
|
||||||
|
// This ROTR logic is only applicable to LWI clean & inspection rows.
|
||||||
|
CleanInspKeyID = Name
|
||||||
|
|
||||||
|
// Get the current signature required and signature entries.
|
||||||
|
SigRequired = Record<CLEAN_INSP_SPEC_SURFSCAN_REQ$>
|
||||||
|
ScanSigs = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
// Get the specifications
|
||||||
|
SpecRecipes = Record<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
SpecDefects = Record<CLEAN_INSP_SPEC_SURF_DEFECTS$> ; // USL - Spec SOD Max
|
||||||
|
SpecHazes = Record<CLEAN_INSP_SPEC_SURF_HAZE$>
|
||||||
|
SpecQuantities = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
|
||||||
|
// Get the new scanned values
|
||||||
|
ScanRecipes = Record<CLEAN_INSP_SCAN_RECIPE$>
|
||||||
|
ScanTools = Record<CLEAN_INSP_SCAN_TOOL$>
|
||||||
|
ScanDefectsAvg = Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$>
|
||||||
|
ScanDefects = Record<CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$>
|
||||||
|
ScanHazes = Record<CLEAN_INSP_SCAN_HAZE_AVG_AVG$>
|
||||||
|
ScanMismatch = Record<CLEAN_INSP_SCAN_RECIPE_MISMATCH$>
|
||||||
|
QtyMismatch = Record<CLEAN_INSP_SCAN_SAMPLE_QTY_MISMATCH$>
|
||||||
|
// Get scan results
|
||||||
|
ScanRecipeResults = Record<CLEAN_INSP_SCAN_RESULT$>
|
||||||
|
ScanRecipeReasons = Record<CLEAN_INSP_SCAN_RESULT_REASON$>
|
||||||
|
|
||||||
|
// Get the original scanned values
|
||||||
|
SpecRecipesOrig = OrigRecord<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
ScanRecipesOrig = OrigRecord<CLEAN_INSP_SCAN_RECIPE$>
|
||||||
|
ScanDefectsAvgOrig = OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$>
|
||||||
|
ScanDefectsOrig = OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$>
|
||||||
|
ScanHazesOrig = OrigRecord<CLEAN_INSP_SCAN_HAZE_AVG_AVG$>
|
||||||
|
ScanMismatchOrig = OrigRecord<CLEAN_INSP_SCAN_RECIPE_MISMATCH$>
|
||||||
|
QtyMismatchOrig = OrigRecord<CLEAN_INSP_SCAN_SAMPLE_QTY_MISMATCH$>
|
||||||
|
// Get the original signature required and signature entries.
|
||||||
|
SigRequiredOrig = OrigRecord<CLEAN_INSP_SPEC_SURFSCAN_REQ$>
|
||||||
|
ScanSigsOrig = OrigRecord<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
// Get the individual SOD values per wafer.
|
||||||
|
SODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$>
|
||||||
|
SODPerWaferOrig = OrigRecord<CLEAN_INSP_SCAN_SOD_PER_WAFER$>
|
||||||
|
// Get the 100 failure scan flags, which is null by default and set/cleared by this MFS.
|
||||||
|
FailScanFlags = Record<CLEAN_INSP_FAIL_SCAN_REQ$>
|
||||||
|
FailScanReq = Sum(FailScanFlags)
|
||||||
|
If FailScanReq GT 0 then
|
||||||
|
FailScanReq = True$
|
||||||
|
end else
|
||||||
|
FailScanReq = False$
|
||||||
|
end
|
||||||
|
|
||||||
|
CIReactor = Xlate('CLEAN_INSP', CleanInspKeyID, 'REACT_NO', 'X')
|
||||||
|
ROTREnabled = Xlate('REACTOR', CIReactor, 'ENABLE_ROTR', 'X')
|
||||||
|
ROTRFailLimit = Xlate('REACTOR', CIReactor, 'ROTR_FAIL_LIMIT', 'X')
|
||||||
|
|
||||||
|
// Get ROTR Reactor values
|
||||||
|
ROTRReactorStatus = Record<CLEAN_INSP_ROTR_REACTOR_STATUS$>
|
||||||
|
ROTRReactorStatusReason = Record<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$>
|
||||||
|
|
||||||
|
FailedWafers = Record<CLEAN_INSP_FAILED_WAFERS$>
|
||||||
|
|
||||||
|
If OrigRecord NE Record then
|
||||||
|
|
||||||
|
// Backlog Req 731 - ROTR Post Supercede
|
||||||
|
// Increase POST stage surfscan sample quantity specification to number of LWI stage failed wafers.
|
||||||
|
If Stage EQ 'POST' then
|
||||||
|
RDSNo = Record<CLEAN_INSP_RDS_NO$>
|
||||||
|
LWICIKey = Xlate('RDS', RDSNo, 'LWI_CI_NO', 'X')
|
||||||
|
If LWICIKey NE '' then
|
||||||
|
LWIFailedWafers = Xlate('CLEAN_INSP', LWICIKey, 'FAILED_WAFERS', 'X')
|
||||||
|
If LWIFailedWafers NE '' then
|
||||||
|
NewPostSpecSampleQty = Sum(LWIFailedWafers)
|
||||||
|
PostSpecRecipes = Record<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
NumRecipes = DCount(PostSpecRecipes, @VM)
|
||||||
|
If NumRecipes GT 0 then
|
||||||
|
For RecipeIndex = 1 to NumRecipes
|
||||||
|
CurrSpec = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
||||||
|
If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
|
||||||
|
end
|
||||||
|
Next RecipeIndex
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
// Reset ROTR update flag so that future ROTR requests will re-trigger this routine (via BASE_MFS).
|
||||||
|
Record<CLEAN_INSP_ROTR_UPDATE_FLAG$> = False$
|
||||||
|
// Tencor data has been updated. Update the ROTR_ACTION data column in the CLEAN_INSP record.
|
||||||
|
// Check if ScanMismatch field has been set by Metrology_Services. If so, then the user attempted to
|
||||||
|
// load run data, which containted the wrong recipe name. (i.e. it did not match the spec recipe)
|
||||||
|
If (ScanMismatch EQ '') then
|
||||||
|
RDSKey = Record<CLEAN_INSP_RDS_NO$>
|
||||||
|
NumScanRecipes = DCount(ScanRecipes, @VM)
|
||||||
|
ROTRAction = ''
|
||||||
|
ROTRActionReason = ''
|
||||||
|
Begin Case
|
||||||
|
Case Stage _EQC 'LWI'
|
||||||
|
If SpecRecipes NE '' then
|
||||||
|
ReactorBlocked = False$ ;// Assume false until proven otherwise.
|
||||||
|
// ROTR Reactor/PSN Status Health Check - Uses parameters set within the ROTR Parameters form.
|
||||||
|
// We only need to run this once per CLEAN_INSP record.
|
||||||
|
ROTRStatus = 'P' ; // Assume pass until proven otherwise.
|
||||||
|
If ( (ROTREnabled EQ True$) and (ROTRReactorStatus EQ '') ) then
|
||||||
|
ROTRReactorStatus = 'W'
|
||||||
|
ROTRReactorStatusReason = 'ROTR awaiting processing'
|
||||||
|
// Set ROTR Reactor processing status so that the WRITE_RECORD_POST event will
|
||||||
|
// post an ROTR request to calculate the reactor ROTR health for this run.
|
||||||
|
QA_Services('PostROTRRequest', RDSKey)
|
||||||
|
end
|
||||||
|
// Check each scan recipe.
|
||||||
|
For each ScanRecipeName in ScanRecipes using @VM setting ScanRecipeIndex
|
||||||
|
Locate ScanRecipeName in SpecRecipes using @VM setting SpecRecipeIndex then
|
||||||
|
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
||||||
|
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
||||||
|
If (UCL EQ '') or (UCL EQ 0) then
|
||||||
|
// The UCL has not yet been retrieved from SPC or an error could have
|
||||||
|
// occurred when the last attempt to retrieve it, so try to get it now.
|
||||||
|
UCL = QA_Services('PostUCLRequest', RDSKey, ScanRecipeName)
|
||||||
|
If (UCL NE '') and (UCL NE 0) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
||||||
|
SpecHaze = Oconv(SpecHazes<0, SpecRecipeIndex>, 'MD2')
|
||||||
|
SpecQty = SpecQuantities<0, SpecRecipeIndex>
|
||||||
|
ScanDefect = Oconv(ScanDefects<0, ScanRecipeIndex>, 'MD0')
|
||||||
|
ScanHaze = Oconv(ScanHazes<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
ScanSig = ScanSigs<0, ScanRecipeIndex>
|
||||||
|
FailureScan = False$
|
||||||
|
// RDS < UCL (SOD Spec Avg) Check
|
||||||
|
ScanSODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
ScanSortPerWafer = Record<CLEAN_INSP_SCAN_SORT_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
WaferCount = 0
|
||||||
|
SODAvgSum = 0
|
||||||
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
NumFailedWafers = 0
|
||||||
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
|
WaferSort = ScanSortPerWafer<0, ScanRecipeIndex, WaferIndex>
|
||||||
|
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
||||||
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
|
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
||||||
|
WaferCount += 1
|
||||||
|
SODAvgSum += WaferSOD
|
||||||
|
FailedWafers<0, WaferIndex> = False$
|
||||||
|
end else
|
||||||
|
NumFailedWafers += 1
|
||||||
|
FailedWafers<0, WaferIndex> = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next WaferSOD
|
||||||
|
Record<CLEAN_INSP_NUM_FAILED_WAFERS$, ScanRecipeIndex> = NumFailedWafers
|
||||||
|
If (OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$, ScanRecipeIndex>) EQ '' then
|
||||||
|
// This is the first time we are recording the scanned SOD average value. Store this
|
||||||
|
// for determining reactor health. (ROTR Status)
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG_FAIL$, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
end
|
||||||
|
If WaferCount GT 0 and SODAvgSum GT 0 then
|
||||||
|
SODAvg = SODAvgSum / WaferCount
|
||||||
|
// Update scanned SOD average to not include wafers exceeding SOD max
|
||||||
|
// Adjust value to conform to internal storage format
|
||||||
|
ScanDefectsAvg<0, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$> = ScanDefectsAvg
|
||||||
|
end
|
||||||
|
If (ROTREnabled EQ True$) then
|
||||||
|
// ROTR Sign-off Project
|
||||||
|
// We need to check if reactor recently underwent ROTR maintenance. If so, then
|
||||||
|
// we must also check if this RDS is one of the first two runs after maintenance.
|
||||||
|
// If this is the case, then the RDS must undergo a 100% scan.
|
||||||
|
|
||||||
|
MaintScanReq = QA_Services('GetMaintenanceScanStatus', RDSKey)
|
||||||
|
FailScanReq = (FailScanReq or MaintScanReq or WafersRemoved)
|
||||||
|
// Search for '100' in the recipe name to determine if this is a failure scan.
|
||||||
|
If (WafersRemoved) then
|
||||||
|
FailureScan = Index(ScanRecipes, '25', 1)
|
||||||
|
end else
|
||||||
|
FailureScan = (Index(ScanRecipes, '100', 1) or Index(ScanRecipes, '25', 1))
|
||||||
|
end
|
||||||
|
If FailureScan GT 0 then FailureScan = True$
|
||||||
|
If (FailScanReq EQ True$) and (FailureScan EQ True$) then
|
||||||
|
// Fail scan was required and submitted, so turn off all fail scan required flags.
|
||||||
|
FailScanReq = False$
|
||||||
|
NumScans = DCount(ScanRecipes, @VM)
|
||||||
|
For ScanIndex = 1 to NumScans
|
||||||
|
FailScanFlags<0, ScanIndex> = False$
|
||||||
|
Next ScanIndex
|
||||||
|
WafersRemoved = False$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Begin Case
|
||||||
|
Case WafersRemoved
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = '100% scan required due to aborted run.'
|
||||||
|
Case (FailScanReq EQ True$) and (FailureScan EQ False$) and (ROTREnabled EQ True$)
|
||||||
|
If (MaintScanReq EQ True$) then
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = '100% scan required due to ROTR maint.'
|
||||||
|
end else
|
||||||
|
// If ROTR maintenance flag not set, then wafer fail limit must have been met in
|
||||||
|
// an earlier Tencor run. We must set it here again due to the design of this
|
||||||
|
// MFS.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'Wafer fail limit met - 100% scan required'
|
||||||
|
FailScanReq = True$
|
||||||
|
FailScanFlags<0, ScanRecipeIndex> = FailScanReq
|
||||||
|
end
|
||||||
|
Case (ROTRReactorStatus EQ 'W') and (ROTREnabled EQ True$)
|
||||||
|
// Awaiting ROTR results. Request in queue. This MFS will be triggered
|
||||||
|
// once the request is processed.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ROTRReactorStatusReason
|
||||||
|
Case (ROTRReactorStatus EQ 'F') and (ROTREnabled EQ True$)
|
||||||
|
// Check this case first as to not miss blocking the reactor if necessary.
|
||||||
|
// Block load signature on this reactor for future lots until overriden at Load button
|
||||||
|
// signature click event by supervisor, lead, or engineer.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ROTRReactorStatusReason
|
||||||
|
CIReactorRec = Database_Services('ReadDataRow', 'REACTOR', CIReactor)
|
||||||
|
CIReactorRec<REACTOR_ROTR_STATUS$> = 'F'
|
||||||
|
CIReactorRec<REACTOR_ROTR_STATUS_REASON$> = ROTRReactorStatusReason
|
||||||
|
Database_Services('WriteDataRow','REACTOR',CIReactor,CIReactorRec, True$, False$, True$)
|
||||||
|
ReactorBlocked = True$
|
||||||
|
Case (ScanDefect EQ '') OR (ScanHaze EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data is missing.'
|
||||||
|
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan signature is missing.'
|
||||||
|
Case (ScanDefect GT SpecDefect) or (NumFailedWafers GE ROTRFailLimit)
|
||||||
|
If (ROTREnabled EQ True$) then
|
||||||
|
// If a Post Clean is required, then disregard the ROTRFailLimit per Tom Tillery.
|
||||||
|
CleanReq = False$
|
||||||
|
PSNo = Xlate('CLEAN_INSP', CleanInspKeyID, 'PS_NO', 'X')
|
||||||
|
PRSStages = Xlate('PROD_SPEC', PSNo, 'PRS_STAGE_KEY', 'X')
|
||||||
|
If Index(PRSStages, 'POST', 1) then
|
||||||
|
CleanReq = Xlate('PRS_STAGE', PSNo:'*POST', 'CLEAN_SIG_REQ', 'X')
|
||||||
|
end
|
||||||
|
If (NumFailedWafers LT ROTRFailLimit) or (CleanReq EQ True$) or (FailureScan EQ True$) then
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data out of bounds.'
|
||||||
|
end else
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'Wafer fail limit met - 100% scan required'
|
||||||
|
FailScanReq = True$
|
||||||
|
FailScanFlags<0, ScanRecipeIndex> = FailScanReq
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data out of bounds.'
|
||||||
|
end
|
||||||
|
Case (ScanHaze GT SpecHaze)
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan Haze out of bounds.'
|
||||||
|
Case Otherwise$
|
||||||
|
// This scan data is within spec.
|
||||||
|
ROTRAction = 'P'
|
||||||
|
ROTRActionReason = 'Passed'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
// Store this result for final disposition
|
||||||
|
ScanRecipeResults<0, ScanRecipeIndex> = ROTRAction
|
||||||
|
ScanRecipeReasons<0, ScanRecipeIndex> = ROTRActionReason
|
||||||
|
end
|
||||||
|
Next ScanRecipeName
|
||||||
|
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FinalROTRActionReason = ''
|
||||||
|
// Final disposition
|
||||||
|
// If no scan data or if any scan data has failed, then FinalROTRAction = F.
|
||||||
|
NumScanRecipes = DCount(ScanRecipes, @VM)
|
||||||
|
If NumScanRecipes EQ 0 then
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
If WafersRemoved then
|
||||||
|
FinalROTRActionReason = '100% scan required due to aborted run.'
|
||||||
|
end else
|
||||||
|
FinalROTRActionReason = 'Scan data is missing.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
NumFailures = Count(ScanRecipeResults, 'F')
|
||||||
|
Begin Case
|
||||||
|
Case NumFailures EQ 0
|
||||||
|
// No failures so this is a pass.
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FInalROTRActionReason = ''
|
||||||
|
Case NumFailures EQ 1
|
||||||
|
// Display the failure reason
|
||||||
|
Locate 'F' in ScanRecipeResults using @VM setting ScanRecipeIndex then
|
||||||
|
FailureReason = ScanRecipeReasons<0, ScanRecipeIndex>
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = FailureReason
|
||||||
|
end
|
||||||
|
Case NumFailures GT 1
|
||||||
|
// Inform the user that multiple scans failed
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = 'Multiple scans failed to meet criteria.'
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
ROTRAction = FinalROTRAction
|
||||||
|
ROTRActionReason = FinalROTRActionReason
|
||||||
|
end
|
||||||
|
|
||||||
|
Case Stage _EQC 'POST'
|
||||||
|
|
||||||
|
If SpecRecipes NE '' then
|
||||||
|
|
||||||
|
// Check each scan recipe.
|
||||||
|
For each ScanRecipeName in ScanRecipes using @VM setting ScanRecipeIndex
|
||||||
|
Locate ScanRecipeName in SpecRecipes using @VM setting SpecRecipeIndex then
|
||||||
|
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
||||||
|
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
||||||
|
If (UCL EQ '') or (UCL EQ 0) then
|
||||||
|
// The UCL has not yet been retrieved from SPC or an error could have
|
||||||
|
// occurred when the last attempt to retrieve it, so try to get it now.
|
||||||
|
UCL = QA_Services('PostUCLRequest', RDSKey, ScanRecipeName)
|
||||||
|
If (UCL NE '') and (UCL NE 0) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
SpecSampleQty = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$, SpecRecipeIndex>
|
||||||
|
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
||||||
|
SpecHaze = Oconv(SpecHazes<0, SpecRecipeIndex>, 'MD2')
|
||||||
|
SpecQty = SpecQuantities<0, SpecRecipeIndex>
|
||||||
|
ScanDefect = Oconv(ScanDefects<0, ScanRecipeIndex>, 'MD0')
|
||||||
|
ScanHaze = Oconv(ScanHazes<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
ScanSig = ScanSigs<0, ScanRecipeIndex>
|
||||||
|
FailureScan = False$
|
||||||
|
// RDS < UCL (SOD Spec Avg) Check
|
||||||
|
ScanSODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
ScanSortPerWafer = Record<CLEAN_INSP_SCAN_SORT_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
WaferCount = 0
|
||||||
|
SODAvgSum = 0
|
||||||
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
NumFailedWafers = 0
|
||||||
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
|
WaferSort = ScanSortPerWafer<0, ScanRecipeIndex, WaferIndex>
|
||||||
|
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
||||||
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
|
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
||||||
|
WaferCount += 1
|
||||||
|
SODAvgSum += WaferSOD
|
||||||
|
FailedWafers<0, WaferIndex> = False$
|
||||||
|
end else
|
||||||
|
NumFailedWafers += 1
|
||||||
|
FailedWafers<0, WaferIndex> = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next WaferSOD
|
||||||
|
Record<CLEAN_INSP_NUM_FAILED_WAFERS$, ScanRecipeIndex> = NumFailedWafers
|
||||||
|
If (OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$, ScanRecipeIndex>) EQ '' then
|
||||||
|
// This is the first time we are recording the scanned SOD average value. Store this
|
||||||
|
// for determining reactor health. (ROTR Status)
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG_FAIL$, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
end
|
||||||
|
If WaferCount GT 0 and SODAvgSum GT 0 then
|
||||||
|
SODAvg = SODAvgSum / WaferCount
|
||||||
|
// Update scanned SOD average to not include wafers exceeding SOD max
|
||||||
|
// Adjust value to conform to internal storage format
|
||||||
|
ScanDefectsAvg<0, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$> = ScanDefectsAvg
|
||||||
|
end
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case (ScanDefect EQ '') OR (ScanHaze EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data is missing.'
|
||||||
|
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan signature is missing.'
|
||||||
|
Case (ScanDefect GT SpecDefect) or (NumFailedWafers GE ROTRFailLimit)
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data out of bounds.'
|
||||||
|
Case (ScanHaze GT SpecHaze)
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan Haze out of bounds.'
|
||||||
|
Case Otherwise$
|
||||||
|
// This scan data is within spec.
|
||||||
|
ROTRAction = 'P'
|
||||||
|
ROTRActionReason = 'Passed'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
// Store this result for final disposition
|
||||||
|
ScanRecipeResults<0, ScanRecipeIndex> = ROTRAction
|
||||||
|
ScanRecipeReasons<0, ScanRecipeIndex> = ROTRActionReason
|
||||||
|
end
|
||||||
|
Next ScanRecipeName
|
||||||
|
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FinalROTRActionReason = ''
|
||||||
|
// Final disposition
|
||||||
|
// If no scan data or if any scan data has failed, then FinalROTRAction = F.
|
||||||
|
NumScanRecipes = DCount(ScanRecipes, @VM)
|
||||||
|
If NumScanRecipes EQ 0 then
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = 'Scan data is missing.'
|
||||||
|
end else
|
||||||
|
|
||||||
|
TotalScanWfrCnt = Count(FailedWafers, '0') + Count(FailedWafers, '1')
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case (SpecSampleQty EQ '')
|
||||||
|
QtyMismatch = 'Error determining sample qty spec'
|
||||||
|
Case (TotalScanWfrCnt LT SpecSampleQty)
|
||||||
|
QtyMismatch = 'Min sample quantity not met.'
|
||||||
|
Case Otherwise$
|
||||||
|
QtyMismatch = ''
|
||||||
|
// Set flag to inform FQA that POST surfscan failure results should be used instead.
|
||||||
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
|
RDSRec<RDS_POST_SUPERCEDE$> = True$
|
||||||
|
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||||
|
End Case
|
||||||
|
|
||||||
|
NumFailures = Count(ScanRecipeResults, 'F')
|
||||||
|
Begin Case
|
||||||
|
Case ( (QtyMismatch NE '') and Not(IsEpiPro) )
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FInalROTRActionReason = QtyMismatch
|
||||||
|
Case NumFailures EQ 0
|
||||||
|
// No failures so this is a pass.
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FInalROTRActionReason = ''
|
||||||
|
Case NumFailures EQ 1
|
||||||
|
// Display the failure reason
|
||||||
|
Locate 'F' in ScanRecipeResults using @VM setting ScanRecipeIndex then
|
||||||
|
FailureReason = ScanRecipeReasons<0, ScanRecipeIndex>
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = FailureReason
|
||||||
|
end
|
||||||
|
Case NumFailures GT 1
|
||||||
|
// Inform the user that multiple scans failed
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = 'Multiple scans failed to meet criteria.'
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
ROTRAction = FinalROTRAction
|
||||||
|
ROTRActionReason = FinalROTRActionReason
|
||||||
|
end
|
||||||
|
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
// Recipe mismatch field set. Set ROTR to failed and inform user.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ScanMismatch:' does not match spec.'
|
||||||
|
end
|
||||||
|
If ROTRAction EQ 'P' then
|
||||||
|
// Clear any previously set failure reasons or failure scan flags.
|
||||||
|
ROTRActionReason = ''
|
||||||
|
NumScans = DCount(ScanRecipes, @VM)
|
||||||
|
For ScanIndex = 1 to NumScans
|
||||||
|
FailScanFlags<0, ScanIndex> = False$
|
||||||
|
Next ScanIndex
|
||||||
|
Record<CLEAN_INSP_WAFERS_REMOVED$> = False$
|
||||||
|
end
|
||||||
|
Record<CLEAN_INSP_ROTR_ACTION$> = ROTRAction
|
||||||
|
Record<CLEAN_INSP_ROTR_ACTION_REASON$> = ROTRActionReason
|
||||||
|
Record<CLEAN_INSP_FAIL_SCAN_REQ$> = FailScanFlags
|
||||||
|
Record<CLEAN_INSP_SCAN_RESULT$> = ScanRecipeResults
|
||||||
|
Record<CLEAN_INSP_SCAN_RESULT_REASON$> = ScanRecipeReasons
|
||||||
|
Record<CLEAN_INSP_FAILED_WAFERS$> = FailedWafers
|
||||||
|
|
||||||
|
SaveRecord = Record
|
||||||
|
Server = Environment_Services('GetServer')
|
||||||
|
If (Server NE 'MESSA005') AND (Server NE 'MESSA01EC') then
|
||||||
|
// The metrology data was updated by an end user on a workstation. Add this information to a special log
|
||||||
|
// for Balan.
|
||||||
|
Post_Metrology_Manual_Data_Entry_Log(@USER4,'Tencor',Record<CLEAN_INSP_RDS_NO$>:' / ':CleanInspKeyID)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
WRITE_RECORD:
|
||||||
|
|
||||||
|
WONo = Record<CLEAN_INSP_WO_NO$>
|
||||||
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
|
EpiPro = (ReactType EQ 'EPP')
|
||||||
|
GaN = (ReactType EQ 'GAN')
|
||||||
|
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
|
||||||
|
If Stage EQ 'LWI' then
|
||||||
|
RDSNo = Record<CLEAN_INSP_RDS_NO$>
|
||||||
|
PostCIKey = Xlate('RDS', RDSNo, 'POST_CI_NO', 'X')
|
||||||
|
If PostCIKey NE '' then
|
||||||
|
FailedWafers = Record<CLEAN_INSP_FAILED_WAFERS$>
|
||||||
|
If FailedWafers NE '' then
|
||||||
|
NewPostSpecSampleQty = Sum(FailedWafers)
|
||||||
|
PostCIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', PostCIKey)
|
||||||
|
PostSpecRecipes = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
NumRecipes = DCount(PostSpecRecipes, @VM)
|
||||||
|
If NumRecipes GT 0 then
|
||||||
|
For RecipeIndex = 1 to NumRecipes
|
||||||
|
CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
||||||
|
If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
|
||||||
|
PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
|
||||||
|
end
|
||||||
|
Next RecipeIndex
|
||||||
|
Database_Services('WriteDataRow', 'CLEAN_INSP', PostCIKey, PostCIRec, True$, False$, True$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If NonEpiPro then
|
||||||
|
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
||||||
|
Stage = {STAGE}
|
||||||
|
|
||||||
|
WOMatKey = {WO_MAT_KEY}
|
||||||
|
// Update failed wafer list
|
||||||
|
QA_Services('UpdateFailedWafers', WOMatKey)
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||||
|
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||||
|
WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigInspSig = OrigRecord<CLEAN_INSP_INSP_SIG$>
|
||||||
|
OrigInspSigDTM = OrigRecord<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
InspSig = Record<CLEAN_INSP_INSP_SIG$>
|
||||||
|
InspSigDTM = Record<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigCleanSig = OrigRecord<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
OrigCleanSigDTM = OrigRecord<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
CleanSig = Record<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
CleanSigDTM = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigScanSig = OrigRecord<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
OrigScanSigDTM = OrigRecord<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
ScanSig = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
ScanSigDTM = Record<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
|
||||||
|
SigProfUpdate = False$
|
||||||
|
|
||||||
|
|
||||||
|
If ( (OrigInspSig NE InspSig) or (OrigInspSigDTM NE InspSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'I'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = InspSig
|
||||||
|
WOMatSigDTMs<0, vPos> = InspSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ( (OrigCleanSig NE CleanSig) or (OrigCleanSigDTM NE CleanSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'C'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = CleanSig
|
||||||
|
WOMatSigDTMs<0, vPos> = CleanSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ( (OrigScanSig NE ScanSig) or (OrigScanSigDTM NE ScanSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'S'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = ScanSig
|
||||||
|
WOMatSigDTMs<0, vPos> = ScanSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If SigProfUpdate then
|
||||||
|
WOMatRec<WO_MAT_SIGNATURE$> = WOMatSigs
|
||||||
|
WOMatRec<WO_MAT_SIG_DTM$> = WOMatSigDTMs
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD_PRE:
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Internal Methods ----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Initialize_System_Variables:
|
||||||
|
// Save these for restoration later
|
||||||
|
SaveDict = @DICT
|
||||||
|
SaveID = @ID
|
||||||
|
SaveRecord = @RECORD
|
||||||
|
OrigFileError = @FILE.ERROR
|
||||||
|
|
||||||
|
// Now make sure @DICT, ID, and @RECORD are populated
|
||||||
|
CurrentDictName = ''
|
||||||
|
If @DICT then
|
||||||
|
DictHandle = @DICT<1, 2>
|
||||||
|
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
|
||||||
|
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If CurrentDictName NE DictName then
|
||||||
|
Open DictName to @DICT else Status = 'Unable to initialize @DICT'
|
||||||
|
end
|
||||||
|
|
||||||
|
@ID = KeyID
|
||||||
|
If Record else
|
||||||
|
// Record might not have been passed in. Read the record from the database table just to make sure.
|
||||||
|
@FILE.ERROR = ''
|
||||||
|
Open TableName to hTable then
|
||||||
|
FullFSList = hTable[1, 'F' : @VM]
|
||||||
|
BFS = FullFSList[-1, 'B' : @SVM]
|
||||||
|
LastHandle = hTable[-1, 'B' : \0D\]
|
||||||
|
FileHandle = \0D\ : LastHandle[1, @VM]
|
||||||
|
|
||||||
|
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@RECORD = Record
|
||||||
|
return
|
||||||
|
|
||||||
|
Restore_System_Variables:
|
||||||
|
Transfer SaveDict to @DICT
|
||||||
|
Transfer SaveID to @ID
|
||||||
|
Transfer SaveRecord to @RECORD
|
||||||
|
@FILE.ERROR = OrigFileError
|
||||||
|
return
|
||||||
|
|
871
LSL2/STPROC/CLEAN_INSP_ACTIONS_DEV.txt
Normal file
871
LSL2/STPROC/CLEAN_INSP_ACTIONS_DEV.txt
Normal file
@ -0,0 +1,871 @@
|
|||||||
|
Function CLEAN_INSP_Actions_Dev(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
||||||
|
permission from Infineon.
|
||||||
|
|
||||||
|
Name : CLEAN_INSP_Actions
|
||||||
|
|
||||||
|
Description : Handles calculated columns and MFS calls for the current table.
|
||||||
|
|
||||||
|
Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly.
|
||||||
|
If called from outside of a calculated column these will need to be set and restored.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Action [in] -- Name of the action to be taken
|
||||||
|
CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be
|
||||||
|
populated when the CalcField action is being used.
|
||||||
|
FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM
|
||||||
|
delimited array, with the current MFS name as the first value in the array, and the BFS
|
||||||
|
name as the last value. Normally set by a calling MFS.
|
||||||
|
Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the
|
||||||
|
entire handle structure that the Basic+ Open statement would provide. Normally set by a
|
||||||
|
calling MFS.
|
||||||
|
Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS.
|
||||||
|
FMC [in] -- Various functions. Normally set by a calling MFS.
|
||||||
|
Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for
|
||||||
|
"get handle" functions). Normally set by a calling MFS.
|
||||||
|
Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but
|
||||||
|
for some actions can be set by the action handler to indicate failure.
|
||||||
|
OrigRecord [in] -- Original content of the record being processed by the current action. This is
|
||||||
|
automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within
|
||||||
|
BASE_MFS.
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.)
|
||||||
|
Can also be used to return a special value, such as the results of the CalcField
|
||||||
|
method.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
07/28/10 dmb Original programmer.
|
||||||
|
10/13/10 dmb Fix logic to extract the file handle if file has an index
|
||||||
|
03/26/11 dmb Add logic to save and restore @FILE.ERROR
|
||||||
|
01/03/17 dmb Updated the ROTR compare logic to search for a recipe match.
|
||||||
|
04/09/18 dmb Updated the ROTR compare logic to be limited to FWI stages. Also modified the default logic
|
||||||
|
to be Failed unless proven otherwise.
|
||||||
|
04/19/18 djs Update ROTR compare logic to support multiple spec recipes.
|
||||||
|
05/04/18 dmb Update the special metrology log entry log to use the GetServer service rather than the
|
||||||
|
@STATION global variable.
|
||||||
|
06/13/18 dmb Replaced CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$ with CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$ when comparing
|
||||||
|
against the Sum of Defects in the SurfScan recipe. - [IREPIOI-43]
|
||||||
|
09/24/18 djs Adjusted the OConv call on the ScanDefect variable within the WRITE_RECORD_PRE action.
|
||||||
|
10/29/18 djs Updated the WRITE_RECORD_PRE event to calculate the SOD average to only use wafers that
|
||||||
|
are below the USL (SOD Max) as per ROTR Project requirements. Also updated the UCL request
|
||||||
|
using QA_Services to include the scanned Tencor Recipe name in order to return the UCL
|
||||||
|
associated with the particular recipe being processed at that time.
|
||||||
|
06/07/19 djs Updated the WRITE_RECORD_PRE GoSub to support ROTR requirements for POST stage SurfScan
|
||||||
|
rundata files.
|
||||||
|
08/12/20 djs Added logging within the WRITE_RECORD_PRE GoSub to gather data for a bug within the
|
||||||
|
Metrology_Services('ImportMetrologyService') subroutine. Occasionally the DB server is
|
||||||
|
getting an out of memory error when importing metrology files.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$insert FILE.SYSTEM.EQUATES
|
||||||
|
$insert ACTION_SETUP
|
||||||
|
$insert CLEAN_INSP_EQUATES
|
||||||
|
$insert REACTOR_EQUATES
|
||||||
|
$insert RDS_EQUATES
|
||||||
|
$insert WM_OUT_EQUATES
|
||||||
|
$insert WO_LOG_EQUATES
|
||||||
|
$insert ROTR_EQUATES
|
||||||
|
$insert WO_MAT_EQUATES
|
||||||
|
|
||||||
|
Equ Comma$ to ','
|
||||||
|
|
||||||
|
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, Logging_Services, RDS_Services
|
||||||
|
Declare function Trim
|
||||||
|
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Logging_Services
|
||||||
|
Declare subroutine Qa_Services
|
||||||
|
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\CleanInsp'
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' CLEAN_INSP Log.csv'
|
||||||
|
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'RDS Key ID' : @FM : 'CLEAN_INSP Key ID' : @FM : 'Notes' : @FM : 'Stack'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||||
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
|
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\FQABlocked'
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' FQA Log.csv'
|
||||||
|
Headers = 'Logging DTM' : @FM : 'RDS Key ID' : @FM : 'Table' : @FM : 'Key' : @FM : 'Notes'
|
||||||
|
FQAobjLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||||
|
|
||||||
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
|
||||||
|
Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn
|
||||||
|
Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE
|
||||||
|
Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD
|
||||||
|
Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE
|
||||||
|
Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD
|
||||||
|
Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE
|
||||||
|
Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD
|
||||||
|
Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE
|
||||||
|
Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD
|
||||||
|
Case Otherwise$ ; Status = 'Invalid Action'
|
||||||
|
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If KeyID then GoSub Restore_System_Variables
|
||||||
|
|
||||||
|
If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$
|
||||||
|
|
||||||
|
Return ActionFlow
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Calculated Columns
|
||||||
|
//
|
||||||
|
// The typical structure of a calculated column will look like this:
|
||||||
|
//
|
||||||
|
// Declare function Database_Services
|
||||||
|
//
|
||||||
|
// @ANS = Database_Services('CalculateColumn')
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CalculateColumn:
|
||||||
|
// Make sure the ActionFlow return variable is cleared in case nothing is calculated.
|
||||||
|
ActionFlow = ''
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
Case CalcColName EQ 'INSP_REQ' ; GoSub INSP_REQ
|
||||||
|
Case CalcColName EQ 'RDS_ROTR_ACTION' ; GoSub RDS_ROTR_ACTION
|
||||||
|
End Case
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
INSP_REQ:
|
||||||
|
|
||||||
|
RDSNo = {RDS_NO}
|
||||||
|
WONo = {WO_NO}
|
||||||
|
WOQty = Xlate('WO_LOG', WONo, 'QTY', 'X')
|
||||||
|
RunNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||||
|
InspInterval = Xlate('PRS_STAGE', {PS_STAGE_KEY}, 'INSP_INTERVAL', 'X')
|
||||||
|
LastRun = ( (RunNo * 25) EQ WOQty )
|
||||||
|
InspReq = ( (Mod((RunNo - 1), InspInterval) EQ 0) or LastRun )
|
||||||
|
ActionFlow = InspReq
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
RDS_ROTR_ACTION:
|
||||||
|
|
||||||
|
|
||||||
|
ROTRAction = {ROTR_ACTION}
|
||||||
|
If ROTRAction EQ 'F' then
|
||||||
|
// Before returning a Fail, check to see if there is an acceptance for the results.
|
||||||
|
AcceptedSignature = {SIGN_ROTR_SIGNATURE}
|
||||||
|
AcceptedReason = {SIGN_ROTR_REASON}
|
||||||
|
If (AcceptedSignature NE '') AND (AcceptedReason NE '') then ROTRAction = 'A'
|
||||||
|
end
|
||||||
|
ActionFlow = ROTRAction
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
// ----- MFS calls -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
READ_RECORD_PRE:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
// ActionFlow = ACTION_STOP$
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
READ_RECORD:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
READONLY_RECORD_PRE:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
// ActionFlow = ACTION_STOP$
|
||||||
|
return
|
||||||
|
|
||||||
|
READONLY_RECORD:
|
||||||
|
// In order to stop a record from being read in this action these lines of code must be used:
|
||||||
|
//
|
||||||
|
// OrigFileError = 100 : @FM : KeyID
|
||||||
|
// Status = 0
|
||||||
|
// Record = ''
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
WRITE_RECORD_PRE:
|
||||||
|
|
||||||
|
OrigRecCopy = OrigRecord
|
||||||
|
RecCopy = Record
|
||||||
|
Convert @VM to '' in OrigRecCopy
|
||||||
|
Convert @VM to '' in RecCopy
|
||||||
|
// LWII Specification limits
|
||||||
|
|
||||||
|
OrigLWIISpecLPD = Trim(OrigRecCopy<CLEAN_INSP_INSP_LPD$>)
|
||||||
|
OrigLWIISpecScr = Trim(OrigRecCopy<CLEAN_INSP_INSP_SCRATCHES$>)
|
||||||
|
OrigLWIISpecScrLen = Trim(OrigRecCopy<CLEAN_INSP_INSP_SCRATCH_LEN$>)
|
||||||
|
OrigLWIISpecPits = Trim(OrigRecCopy<CLEAN_INSP_INSP_PITS$>)
|
||||||
|
OrigLWIISpecMounds = Trim(OrigRecCopy<CLEAN_INSP_INSP_MOUNDS$>)
|
||||||
|
OrigLWIISpecStack = Trim(OrigRecCopy<CLEAN_INSP_INSP_STACK_FAULTS$>)
|
||||||
|
OrigLWIISpecSpikes = Trim(OrigRecCopy<CLEAN_INSP_INSP_SPIKES$>)
|
||||||
|
OrigLWIISpecSpots = Trim(OrigRecCopy<CLEAN_INSP_INSP_SPOTS$>)
|
||||||
|
OrigLWIISpecBLDef = Trim(OrigRecCopy<CLEAN_INSP_INSP_BL_DEFECTS$>)
|
||||||
|
OrigLWIISpecFOV = Trim(OrigRecCopy<CLEAN_INSP_INSP_FOV$>)
|
||||||
|
NewLWIISpecLPD = Trim(RecCopy<CLEAN_INSP_INSP_LPD$>)
|
||||||
|
NewLWIISpecScr = Trim(RecCopy<CLEAN_INSP_INSP_SCRATCHES$>)
|
||||||
|
NewLWIISpecScrLen = Trim(RecCopy<CLEAN_INSP_INSP_SCRATCH_LEN$>)
|
||||||
|
NewLWIISpecPits = Trim(RecCopy<CLEAN_INSP_INSP_PITS$>)
|
||||||
|
NewLWIISpecMounds = Trim(RecCopy<CLEAN_INSP_INSP_MOUNDS$>)
|
||||||
|
NewLWIISpecStack = Trim(RecCopy<CLEAN_INSP_INSP_STACK_FAULTS$>)
|
||||||
|
NewLWIISpecSpikes = Trim(RecCopy<CLEAN_INSP_INSP_SPIKES$>)
|
||||||
|
NewLWIISpecSpots = Trim(RecCopy<CLEAN_INSP_INSP_SPOTS$>)
|
||||||
|
NewLWIISpecBLDef = Trim(RecCopy<CLEAN_INSP_INSP_BL_DEFECTS$>)
|
||||||
|
NewLWIISpecFOV = Trim(RecCopy<CLEAN_INSP_INSP_FOV$>)
|
||||||
|
|
||||||
|
// LWII Signature
|
||||||
|
OrigLWIISig = Trim(OrigRecCopy<CLEAN_INSP_INSP_SIG$>)
|
||||||
|
OrigLWIIDtm = Trim(OrigRecCopy<CLEAN_INSP_INSP_SIG_DTM$>)
|
||||||
|
NewLWIISig = Trim(RecCopy<CLEAN_INSP_INSP_SIG$>)
|
||||||
|
NewLWIIDtm = Trim(RecCopy<CLEAN_INSP_INSP_SIG_DTM$>)
|
||||||
|
|
||||||
|
// LWIS Specification Limits
|
||||||
|
OrigLWISRecipe = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>)
|
||||||
|
OrigLWISSpecDef = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURF_DEFECTS$>)
|
||||||
|
OrigLWISSpecHaze = Trim(OrigRecCopy<CLEAN_INSP_SPEC_SURF_HAZE$>)
|
||||||
|
NewLWISRecipe = Trim(RecCopy<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>)
|
||||||
|
NewLWISSpecDef = Trim(RecCopy<CLEAN_INSP_SPEC_SURF_DEFECTS$>)
|
||||||
|
NewLWISSpecHaze = Trim(RecCopy<CLEAN_INSP_SPEC_SURF_HAZE$>)
|
||||||
|
|
||||||
|
// LWIS Signature
|
||||||
|
OrigLWISSig = Trim(OrigRecCopy<CLEAN_INSP_SCAN_SIG$>)
|
||||||
|
OrigLWISDtm = Trim(OrigRecCopy<CLEAN_INSP_SCAN_SIG_DTM$>)
|
||||||
|
NewLWISSig = Trim(RecCopy<CLEAN_INSP_SCAN_SIG$>)
|
||||||
|
NewLWISDtm = Trim(RecCopy<CLEAN_INSP_SCAN_SIG_DTM$>)
|
||||||
|
RDSKeyID = RecCopy<CLEAN_INSP_RDS_NO$>
|
||||||
|
|
||||||
|
RDSNo = RDSKeyID
|
||||||
|
FinalQA = False$
|
||||||
|
RDSRow = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
|
WorkOrderNo = RDSRow<RDS_WO$>
|
||||||
|
WorkOrderRow = Database_Services('ReadDataRow', 'WO_LOG', WorkOrderNo)
|
||||||
|
ReactType = WorkOrderRow<WO_LOG_REACT_TYPE$>
|
||||||
|
// Check to see if the Final QA signature is in place.
|
||||||
|
If ReactType EQ 'EPP' then
|
||||||
|
CassetteNos = RDSRow<RDS_OUT_CASS_NO$>
|
||||||
|
OutNCRNos = RDSRow<RDS_OUT_NCR$>
|
||||||
|
For Each CassetteNo in CassetteNos using @VM setting vPos
|
||||||
|
OutNCRNo = OutNCRNos<0, vPos>
|
||||||
|
// Ignore NCRd wafers
|
||||||
|
If OutNCRNo EQ '' then
|
||||||
|
WMOutKey = RDSRow<RDS_WO_STEP_KEY$> : '*' : CassetteNo
|
||||||
|
WMOutRow = Database_Services('ReadDataRow', 'WM_OUT', WMOutKey)
|
||||||
|
If WMOutRow<WM_OUT_SUP_VER_SIG$> NE '' then
|
||||||
|
FinalQA = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Until FinalQA
|
||||||
|
Next CassetteNo
|
||||||
|
end else
|
||||||
|
If RDSRow<RDS_SUP_VER_SIG$> NE '' then
|
||||||
|
FinalQA = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If @USER4 EQ 'DANIEL_ST' then FinalQA = False$
|
||||||
|
// If Final QA signature is in place, implement the control logic.
|
||||||
|
If FinalQA EQ True$ then
|
||||||
|
|
||||||
|
// User is attempting to modify this row. Set the FS104 error and log the event.
|
||||||
|
Error_Services('Add', 'FS104:FQA has already been signed. CLEAN_INSP record cannot be updated!')
|
||||||
|
OrigFileError = 104 : @FM : 'FQA has already been signed. CLEAN_INSP record cannot be updated!'
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = LoggingDTM
|
||||||
|
LogData<2> = @User4
|
||||||
|
LogData<3> = RDSNo
|
||||||
|
LogData<4> = 'CLEAN_INSP'
|
||||||
|
LogData<5> = Name
|
||||||
|
LogData<6> = 'FS104:FQA has already been signed. CLEAN_INSP record cannot be updated!'
|
||||||
|
Logging_Services('AppendLog', FQAobjLog, LogData, @RM, @FM)
|
||||||
|
Status = 0
|
||||||
|
Record = ''
|
||||||
|
ActionFlow = ACTION_STOP$
|
||||||
|
|
||||||
|
end else
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = LoggingDTM
|
||||||
|
LogData<2> = @USER4
|
||||||
|
LogData<3> = RDSKeyID
|
||||||
|
LogData<4> = Name
|
||||||
|
LogData<5> = 'Begin log trace'
|
||||||
|
Stack = RetStack()
|
||||||
|
Swap @FM with ' || ' in Stack
|
||||||
|
LogData<6> = Stack
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
If ( (OrigLWIISpecLPD NE '') and (NewLWIISpecLPD EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecScr NE '') and (NewLWIISpecScr EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecScrLen NE '') and (NewLWIISpecScrLen EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecPits NE '') and (NewLWIISpecPits EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecMounds NE '') and (NewLWIISpecMounds EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecStack NE '') and (NewLWIISpecStack EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecSpikes NE '') and (NewLWIISpecSpikes EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecSpots NE '') and (NewLWIISpecSpots EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecBLDef NE '') and (NewLWIISpecBLDef EQ '') ) |
|
||||||
|
or ( (OrigLWIISpecFOV NE '') and (NewLWIISpecFOV EQ '') ) |
|
||||||
|
or ( (OrigLWIISig NE '') and (NewLWIISig EQ '') ) |
|
||||||
|
or ( (OrigLWIIDtm NE '') and (NewLWIIDtm EQ '') ) |
|
||||||
|
or ( (OrigLWISRecipe NE '') and (NewLWISRecipe EQ '') ) |
|
||||||
|
or ( (OrigLWISSpecDef NE '') and (NewLWISSpecDef EQ '') ) |
|
||||||
|
or ( (OrigLWISSpecHaze NE '') and (NewLWISSpecHaze EQ '') ) |
|
||||||
|
or ( (OrigLWISSig NE '') and (NewLWISSig EQ '') ) |
|
||||||
|
or ( (OrigLWISDtm NE '') and (NewLWISDtm EQ '') ) and @User4 NE 'DANIEL_ST' then
|
||||||
|
|
||||||
|
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
|
||||||
|
Error_Services('Add', 'FS104:Specification limits or signature data cannot be removed. Clean & Insp record cannot be updated!')
|
||||||
|
OrigFileError = 104 : @FM : 'Specification limits or signature data cannot be removed. Clean & Insp record cannot be updated!'
|
||||||
|
Status = 0
|
||||||
|
Record = ''
|
||||||
|
ActionFlow = ACTION_STOP$
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = LoggingDTM
|
||||||
|
LogData<2> = @USER4
|
||||||
|
LogData<3> = RDSKeyID
|
||||||
|
LogData<4> = Name
|
||||||
|
LogData<5> = RetStack()
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
end else
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = LoggingDTM
|
||||||
|
LogData<2> = @USER4
|
||||||
|
LogData<3> = RDSKeyID
|
||||||
|
LogData<4> = Name
|
||||||
|
LogData<5> = 'Log trace 1'
|
||||||
|
LogData<6> = ''
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
IsEpiPro = Rds_Services('IsEpiPro', RDSKeyID)
|
||||||
|
// This ROTR logic is only applicable to LWI clean & inspection rows.
|
||||||
|
CleanInspKeyID = Name
|
||||||
|
|
||||||
|
// Get the current signature required and signature entries.
|
||||||
|
SigRequired = Record<CLEAN_INSP_SPEC_SURFSCAN_REQ$>
|
||||||
|
ScanSigs = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
// Get the specifications
|
||||||
|
SpecRecipes = Record<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
SpecDefects = Record<CLEAN_INSP_SPEC_SURF_DEFECTS$> ; // USL - Spec SOD Max
|
||||||
|
SpecHazes = Record<CLEAN_INSP_SPEC_SURF_HAZE$>
|
||||||
|
SpecQuantities = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
|
||||||
|
// Get the new scanned values
|
||||||
|
ScanRecipes = Record<CLEAN_INSP_SCAN_RECIPE$>
|
||||||
|
ScanTools = Record<CLEAN_INSP_SCAN_TOOL$>
|
||||||
|
ScanDefectsAvg = Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$>
|
||||||
|
ScanDefects = Record<CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$>
|
||||||
|
ScanHazes = Record<CLEAN_INSP_SCAN_HAZE_AVG_AVG$>
|
||||||
|
ScanMismatch = Record<CLEAN_INSP_SCAN_RECIPE_MISMATCH$>
|
||||||
|
QtyMismatch = Record<CLEAN_INSP_SCAN_SAMPLE_QTY_MISMATCH$>
|
||||||
|
// Get scan results
|
||||||
|
ScanRecipeResults = Record<CLEAN_INSP_SCAN_RESULT$>
|
||||||
|
ScanRecipeReasons = Record<CLEAN_INSP_SCAN_RESULT_REASON$>
|
||||||
|
|
||||||
|
// Get the original scanned values
|
||||||
|
SpecRecipesOrig = OrigRecord<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
|
||||||
|
ScanRecipesOrig = OrigRecord<CLEAN_INSP_SCAN_RECIPE$>
|
||||||
|
ScanDefectsAvgOrig = OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$>
|
||||||
|
ScanDefectsOrig = OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$>
|
||||||
|
ScanHazesOrig = OrigRecord<CLEAN_INSP_SCAN_HAZE_AVG_AVG$>
|
||||||
|
ScanMismatchOrig = OrigRecord<CLEAN_INSP_SCAN_RECIPE_MISMATCH$>
|
||||||
|
QtyMismatchOrig = OrigRecord<CLEAN_INSP_SCAN_SAMPLE_QTY_MISMATCH$>
|
||||||
|
// Get the original signature required and signature entries.
|
||||||
|
SigRequiredOrig = OrigRecord<CLEAN_INSP_SPEC_SURFSCAN_REQ$>
|
||||||
|
ScanSigsOrig = OrigRecord<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
// Get the individual SOD values per wafer.
|
||||||
|
SODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$>
|
||||||
|
SODPerWaferOrig = OrigRecord<CLEAN_INSP_SCAN_SOD_PER_WAFER$>
|
||||||
|
// Get the 100 failure scan flags, which is null by default and set/cleared by this MFS.
|
||||||
|
FailScanFlags = Record<CLEAN_INSP_FAIL_SCAN_REQ$>
|
||||||
|
FailScanReq = Sum(FailScanFlags)
|
||||||
|
If FailScanReq GT 0 then
|
||||||
|
FailScanReq = True$
|
||||||
|
end else
|
||||||
|
FailScanReq = False$
|
||||||
|
end
|
||||||
|
|
||||||
|
// Get ROTR Reactor values
|
||||||
|
ROTRReactorStatus = Record<CLEAN_INSP_ROTR_REACTOR_STATUS$>
|
||||||
|
ROTRReactorStatusReason = Record<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$>
|
||||||
|
|
||||||
|
If OrigRecord NE Record then
|
||||||
|
// Reset ROTR update flag so that future ROTR requests will re-trigger this routine (via BASE_MFS).
|
||||||
|
Record<CLEAN_INSP_ROTR_UPDATE_FLAG$> = False$
|
||||||
|
LogData<5> = 'Log trace 2'
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
// Tencor data has been updated. Update the ROTR_ACTION data column in the CLEAN_INSP record.
|
||||||
|
// Check if ScanMismatch field has been set by Metrology_Services. If so, then the user attempted to
|
||||||
|
// load run data, which containted the wrong recipe name. (i.e. it did not match the spec recipe)
|
||||||
|
If (ScanMismatch EQ '') then
|
||||||
|
If (QtyMismatch EQ '') or (IsEpiPro EQ True$) then
|
||||||
|
RDSKey = Record<CLEAN_INSP_RDS_NO$>
|
||||||
|
NumScanRecipes = DCount(ScanRecipes, @VM)
|
||||||
|
ROTRAction = ''
|
||||||
|
ROTRActionReason = ''
|
||||||
|
Begin Case
|
||||||
|
Case Stage _EQC 'LWI'
|
||||||
|
LogData<5> = 'Log trace 3'
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
CIReactor = Xlate('CLEAN_INSP', CleanInspKeyID, 'REACT_NO', 'X')
|
||||||
|
ROTREnabled = Xlate('REACTOR', CIReactor, 'ENABLE_ROTR', 'X')
|
||||||
|
ReactorBlocked = False$ ;// Assume false until proven otherwise.
|
||||||
|
// ROTR Reactor/PSN Status Health Check - Uses parameters set within the ROTR Parameters form.
|
||||||
|
// We only need to run this once per CLEAN_INSP record.
|
||||||
|
ROTRStatus = 'P' ; // Assume pass until proven otherwise.
|
||||||
|
If ( (ROTREnabled EQ True$) and (ROTRReactorStatus EQ '') ) then
|
||||||
|
ROTRReactorStatus = 'W'
|
||||||
|
ROTRReactorStatusReason = 'ROTR awaiting processing'
|
||||||
|
// Set ROTR Reactor processing status so that the WRITE_RECORD_POST event will
|
||||||
|
// post an ROTR request to calculate the reactor ROTR health for this run.
|
||||||
|
QA_Services('PostROTRRequest', RDSKey)
|
||||||
|
end
|
||||||
|
LogData<5> = 'Log trace 4'
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
// Check each scan recipe.
|
||||||
|
For each ScanRecipeName in ScanRecipes using @VM setting ScanRecipeIndex
|
||||||
|
Locate ScanRecipeName in SpecRecipes using @VM setting SpecRecipeIndex then
|
||||||
|
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
||||||
|
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
||||||
|
If (UCL EQ '') or (UCL EQ 0) then
|
||||||
|
// The UCL has not yet been retrieved from SPC or an error could have
|
||||||
|
// occurred when the last attempt to retrieve it, so try to get it now.
|
||||||
|
UCL = QA_Services('PostUCLRequest', RDSKey, SpecRecipeName)
|
||||||
|
If (UCL NE '') and (UCL NE 0) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
||||||
|
SpecHaze = Oconv(SpecHazes<0, SpecRecipeIndex>, 'MD2')
|
||||||
|
SpecQty = SpecQuantities<0, SpecRecipeIndex>
|
||||||
|
ScanDefect = Oconv(ScanDefects<0, ScanRecipeIndex>, 'MD0')
|
||||||
|
ScanHaze = Oconv(ScanHazes<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
ScanSig = ScanSigs<0, ScanRecipeIndex>
|
||||||
|
FailureScan = False$
|
||||||
|
// RDS < UCL (SOD Spec Avg) Check
|
||||||
|
ScanSODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
WaferCount = 0
|
||||||
|
SODAvgSum = 0
|
||||||
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
NumFailedWafers = 0
|
||||||
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
|
If WaferSOD NE '' then
|
||||||
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
|
If WaferSOD LE SpecDefect then
|
||||||
|
WaferCount += 1
|
||||||
|
SODAvgSum += WaferSOD
|
||||||
|
end else
|
||||||
|
NumFailedWafers += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next WaferSOD
|
||||||
|
Record<CLEAN_INSP_NUM_FAILED_WAFERS$, ScanRecipeIndex> = NumFailedWafers
|
||||||
|
If (OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$, ScanRecipeIndex>) EQ '' then
|
||||||
|
// This is the first time we are recording the scanned SOD average value. Store this
|
||||||
|
// for determining reactor health. (ROTR Status)
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG_FAIL$, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
end
|
||||||
|
If WaferCount GT 0 and SODAvgSum GT 0 then
|
||||||
|
SODAvg = SODAvgSum / WaferCount
|
||||||
|
// Update scanned SOD average to not include wafers exceeding SOD max
|
||||||
|
// Adjust value to conform to internal storage format
|
||||||
|
ScanDefectsAvg<0, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$> = ScanDefectsAvg
|
||||||
|
end
|
||||||
|
If (ROTREnabled EQ True$) then
|
||||||
|
// ROTR Sign-off Project
|
||||||
|
// We need to check if reactor recently underwent ROTR maintenance. If so, then
|
||||||
|
// we must also check if this RDS is one of the first two runs after maintenance.
|
||||||
|
// If this is the case, then the RDS must undergo a 100% scan.
|
||||||
|
|
||||||
|
MaintScanReq = QA_Services('GetMaintenanceScanStatus', RDSKey)
|
||||||
|
FailScanReq = (FailScanReq or MaintScanReq)
|
||||||
|
// Search for '100' in the recipe name to determine if this is a failure scan.
|
||||||
|
FailureScan = (Index(ScanRecipes, '100', 1) or Index(ScanRecipes, '25', 1))
|
||||||
|
If FailureScan GT 0 then FailureScan = True$
|
||||||
|
If (FailScanReq EQ True$) and (FailureScan EQ True$) then
|
||||||
|
// Fail scan was required and submitted, so turn off all fail scan required flags.
|
||||||
|
FailScanReq = False$
|
||||||
|
NumScans = DCount(ScanRecipes, @VM)
|
||||||
|
For ScanIndex = 1 to NumScans
|
||||||
|
FailScanFlags<0, ScanIndex> = False$
|
||||||
|
Next ScanIndex
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Begin Case
|
||||||
|
Case (FailScanReq EQ True$) and (FailureScan EQ False$) and (ROTREnabled EQ True$)
|
||||||
|
If MaintScanReq EQ True$ then
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = '100% scan required due to ROTR maint.'
|
||||||
|
end else
|
||||||
|
// If ROTR maintenance flag not set, then wafer fail limit must have been met in
|
||||||
|
// an earlier Tencor run. We must set it here again due to the design of this
|
||||||
|
// MFS.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'Wafer fail limit met - 100% scan required'
|
||||||
|
FailScanReq = True$
|
||||||
|
FailScanFlags<0, ScanRecipeIndex> = FailScanReq
|
||||||
|
end
|
||||||
|
Case (ROTRReactorStatus EQ 'W') and (ROTREnabled EQ True$)
|
||||||
|
// Awaiting ROTR results. Request in queue. This MFS will be triggered
|
||||||
|
// once the request is processed.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ROTRReactorStatusReason
|
||||||
|
Case (ROTRReactorStatus EQ 'F') and (ROTREnabled EQ True$)
|
||||||
|
// Check this case first as to not miss blocking the reactor if necessary.
|
||||||
|
// Block load signature on this reactor for future lots until overriden at Load button
|
||||||
|
// signature click event by supervisor, lead, or engineer.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ROTRReactorStatusReason
|
||||||
|
CIReactorRec = Database_Services('ReadDataRow', 'REACTOR', CIReactor)
|
||||||
|
CIReactorRec<REACTOR_ROTR_STATUS$> = 'F'
|
||||||
|
CIReactorRec<REACTOR_ROTR_STATUS_REASON$> = ROTRReactorStatusReason
|
||||||
|
Database_Services('WriteDataRow','REACTOR',CIReactor,CIReactorRec, True$, False$, True$)
|
||||||
|
ReactorBlocked = True$
|
||||||
|
Case (ScanDefect EQ '') OR (ScanHaze EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data is missing.'
|
||||||
|
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan signature is missing.'
|
||||||
|
Case (ScanDefect GT SpecDefect)
|
||||||
|
If (ROTREnabled EQ True$) then
|
||||||
|
ROTRFailLimit = Xlate('REACTOR', CIReactor, 'ROTR_FAIL_LIMIT', 'X')
|
||||||
|
// If a Post Clean is required, then disregard the ROTRFailLimit per Tom Tillery.
|
||||||
|
CleanReq = False$
|
||||||
|
PSNo = Xlate('CLEAN_INSP', CleanInspKeyID, 'PS_NO', 'X')
|
||||||
|
PRSStages = Xlate('PROD_SPEC', PSNo, 'PRS_STAGE_KEY', 'X')
|
||||||
|
If Index(PRSStages, 'POST', 1) then
|
||||||
|
CleanReq = Xlate('PRS_STAGE', PSNo:'*POST', 'CLEAN_SIG_REQ', 'X')
|
||||||
|
end
|
||||||
|
If (NumFailedWafers LT ROTRFailLimit) or (CleanReq EQ True$) or (FailureScan EQ True$) then
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan SoD out of bounds.'
|
||||||
|
end else
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'Wafer fail limit met - 100% scan required'
|
||||||
|
FailScanReq = True$
|
||||||
|
FailScanFlags<0, ScanRecipeIndex> = FailScanReq
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan SoD out of bounds.'
|
||||||
|
end
|
||||||
|
Case (ScanHaze GT SpecHaze)
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan Haze out of bounds.'
|
||||||
|
Case Otherwise$
|
||||||
|
// This scan data is within spec.
|
||||||
|
ROTRAction = 'P'
|
||||||
|
ROTRActionReason = 'Passed'
|
||||||
|
End Case
|
||||||
|
|
||||||
|
LogData<5> = 'Log trace 5.':SpecRecipeIndex
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
|
||||||
|
// Store this result for final disposition
|
||||||
|
ScanRecipeResults<0, ScanRecipeIndex> = ROTRAction
|
||||||
|
ScanRecipeReasons<0, ScanRecipeIndex> = ROTRActionReason
|
||||||
|
end
|
||||||
|
Next ScanRecipeName
|
||||||
|
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FinalROTRActionReason = ''
|
||||||
|
// Final disposition
|
||||||
|
// If no scan data or if any scan data has failed, then FinalROTRAction = F.
|
||||||
|
NumScanRecipes = DCount(ScanRecipes, @VM)
|
||||||
|
If NumScanRecipes EQ 0 then
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = 'Scan data is missing.'
|
||||||
|
end else
|
||||||
|
NumFailures = Count(ScanRecipeResults, 'F')
|
||||||
|
Begin Case
|
||||||
|
Case NumFailures EQ 0
|
||||||
|
// No failures so this is a pass.
|
||||||
|
FinalROTRAction = 'P'
|
||||||
|
FInalROTRActionReason = ''
|
||||||
|
Case NumFailures EQ 1
|
||||||
|
// Display the failure reason
|
||||||
|
Locate 'F' in ScanRecipeResults using @VM setting ScanRecipeIndex then
|
||||||
|
FailureReason = ScanRecipeReasons<0, ScanRecipeIndex>
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = FailureReason
|
||||||
|
end
|
||||||
|
Case NumFailures GT 1
|
||||||
|
// Inform the user that multiple scans failed
|
||||||
|
FinalROTRAction = 'F'
|
||||||
|
FinalROTRActionReason = 'Multiple scans failed to meet criteria.'
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
ROTRAction = FinalROTRAction
|
||||||
|
ROTRActionReason = FinalROTRActionReason
|
||||||
|
|
||||||
|
Case Stage _EQC 'POST'
|
||||||
|
|
||||||
|
ROTRReactorStatus = 'P' ; // Assume pass until proven otherwise.
|
||||||
|
// Check each spec recipe. There must be at least one scan recorded for each spec recipe.
|
||||||
|
For Each SpecRecipeName in SpecRecipes using @VM setting SpecRecipeIndex
|
||||||
|
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
||||||
|
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
||||||
|
If (UCL EQ '') or (UCL EQ 0) then
|
||||||
|
// The UCL has not yet been retrieved from SPC or an error could have
|
||||||
|
// occurred when the last attempt to retrieve it, so try to get it now.
|
||||||
|
UCL = QA_Services('PostUCLRequest', RDSKey, SpecRecipeName)
|
||||||
|
If (UCL NE '') and (UCL NE 0) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
// Look for the last scan entry related to the current spec recipe.
|
||||||
|
RecipeFound = False$
|
||||||
|
For ScanRecipeIndex = NumScanRecipes To 1 Step -1
|
||||||
|
ScanRecipeName = ScanRecipes<0, ScanRecipeIndex>
|
||||||
|
RecipeFound = (ScanRecipeName EQ SpecRecipeName)
|
||||||
|
Until RecipeFound
|
||||||
|
Next ScanRecipeIndex
|
||||||
|
// If a scan was found, then analyze the scan data for spec requirements. If not found, this
|
||||||
|
// automatically fails.
|
||||||
|
If RecipeFound EQ True$ then
|
||||||
|
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
||||||
|
SpecHaze = Oconv(SpecHazes<0, SpecRecipeIndex>, 'MD2')
|
||||||
|
ScanDefect = Oconv(ScanDefects<0, ScanRecipeIndex>, 'MD0')
|
||||||
|
ScanHaze = Oconv(ScanHazes<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
ScanSig = ScanSigs<0, ScanRecipeIndex>
|
||||||
|
FailureScan = False$
|
||||||
|
// RDS < UCL (SOD Spec Avg) Check
|
||||||
|
ScanSODPerWafer = Record<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanRecipeIndex>
|
||||||
|
WaferCount = 0
|
||||||
|
SODAvgSum = 0
|
||||||
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
|
NumFailedWafers = 0
|
||||||
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
|
If WaferSOD NE '' then
|
||||||
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
|
If WaferSOD LE SpecDefect then
|
||||||
|
WaferCount += 1
|
||||||
|
SODAvgSum += WaferSOD
|
||||||
|
end else
|
||||||
|
NumFailedWafers += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next WaferSOD
|
||||||
|
Record<CLEAN_INSP_NUM_FAILED_WAFERS$, ScanRecipeIndex> = NumFailedWafers
|
||||||
|
If (OrigRecord<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$, ScanRecipeIndex>) EQ '' then
|
||||||
|
// This is the first time we are recording the scanned SOD average value. Store this
|
||||||
|
// for determining reactor health. (ROTR Status)
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG_FAIL$, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
end
|
||||||
|
If WaferCount GT 0 and SODAvgSum GT 0 then
|
||||||
|
SODAvg = SODAvgSum / WaferCount
|
||||||
|
// Update scanned SOD average to not include wafers exceeding SOD max
|
||||||
|
// Adjust value to conform to internal storage format
|
||||||
|
ScanDefectsAvg<0, ScanRecipeIndex> = IConv(SODAvg, 'MD3')
|
||||||
|
Record<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$> = ScanDefectsAvg
|
||||||
|
end
|
||||||
|
Begin Case
|
||||||
|
Case (ScanDefect EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan data is missing.'
|
||||||
|
Case (ScanDefect GT SpecDefect)
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan SoD out of bounds.'
|
||||||
|
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'SurfScan signature is missing.'
|
||||||
|
Case Otherwise$
|
||||||
|
// This scan data is within spec.
|
||||||
|
ROTRAction = 'P'
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = 'Scan data for ' : SpecRecipeName : ' is missing.'
|
||||||
|
end
|
||||||
|
Until ROTRAction EQ 'P' or ROTRActionReason _EQC 'SurfScan signature is missing.'
|
||||||
|
Next SpecRecipeName
|
||||||
|
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
// Sample quantity mismatch field set. Set ROTR to failed and inform user.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = QtyMismatch
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
// Recipe mismatch field set. Set ROTR to failed and inform user.
|
||||||
|
ROTRAction = 'F'
|
||||||
|
ROTRActionReason = ScanMismatch:' does not match spec.'
|
||||||
|
end
|
||||||
|
If ROTRAction EQ 'P' then
|
||||||
|
// Clear any previously set failure reasons or failure scan flags.
|
||||||
|
ROTRActionReason = ''
|
||||||
|
NumScans = DCount(ScanRecipes, @VM)
|
||||||
|
For ScanIndex = 1 to NumScans
|
||||||
|
FailScanFlags<0, ScanIndex> = False$
|
||||||
|
Next ScanIndex
|
||||||
|
end
|
||||||
|
Record<CLEAN_INSP_ROTR_ACTION$> = ROTRAction
|
||||||
|
Record<CLEAN_INSP_ROTR_ACTION_REASON$> = ROTRActionReason
|
||||||
|
Record<CLEAN_INSP_FAIL_SCAN_REQ$> = FailScanFlags
|
||||||
|
Record<CLEAN_INSP_SCAN_RESULT$> = ScanRecipeResults
|
||||||
|
Record<CLEAN_INSP_SCAN_RESULT_REASON$> = ScanRecipeReasons
|
||||||
|
|
||||||
|
SaveRecord = Record
|
||||||
|
LogData<5> = 'Log trace 6'
|
||||||
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
|
Server = Environment_Services('GetServer')
|
||||||
|
If (Server NE 'MESSA005') AND (Server NE 'MESSA01EC') then
|
||||||
|
// The metrology data was updated by an end user on a workstation. Add this information to a special log
|
||||||
|
// for Balan.
|
||||||
|
Post_Metrology_Manual_Data_Entry_Log(@USER4,'Tencor',Record<CLEAN_INSP_RDS_NO$>:' / ':CleanInspKeyID)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
WRITE_RECORD:
|
||||||
|
|
||||||
|
If @USER4 EQ 'DANIEL_ST' then
|
||||||
|
debug
|
||||||
|
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
||||||
|
Stage = {STAGE}
|
||||||
|
|
||||||
|
WOMatKey = {WO_MAT_KEY}
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||||
|
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||||
|
WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigInspSig = OrigRecord<CLEAN_INSP_INSP_SIG$>
|
||||||
|
OrigInspSigDTM = OrigRecord<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
InspSig = Record<CLEAN_INSP_INSP_SIG$>
|
||||||
|
InspSigDTM = Record<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigCleanSig = OrigRecord<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
OrigCleanSigDTM = OrigRecord<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
CleanSig = Record<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
CleanSigDTM = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
|
||||||
|
OrigScanSig = OrigRecord<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
OrigScanSigDTM = OrigRecord<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
ScanSig = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
ScanSigDTM = Record<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
|
||||||
|
SigProfUpdate = False$
|
||||||
|
|
||||||
|
|
||||||
|
If ( (OrigInspSig NE InspSig) or (OrigInspSigDTM NE InspSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'I'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = InspSig
|
||||||
|
WOMatSigDTMs<0, vPos> = InspSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ( (OrigCleanSig NE CleanSig) or (OrigCleanSigDTM NE CleanSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'C'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = CleanSig
|
||||||
|
WOMatSigDTMs<0, vPos> = CleanSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ( (OrigScanSig NE ScanSig) or (OrigScanSigDTM NE ScanSigDTM) ) then
|
||||||
|
WOMatStage = '1':Stage:'S'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = ScanSig
|
||||||
|
WOMatSigDTMs<0, vPos> = ScanSigDTM
|
||||||
|
SigProfUpdate = True$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If SigProfUpdate then
|
||||||
|
WOMatRec<WO_MAT_SIGNATURE$> = WOMatSigs
|
||||||
|
WOMatRec<WO_MAT_SIG_DTM$> = WOMatSigDTMs
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD_PRE:
|
||||||
|
return
|
||||||
|
|
||||||
|
DELETE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Internal Methods ----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Initialize_System_Variables:
|
||||||
|
// Save these for restoration later
|
||||||
|
SaveDict = @DICT
|
||||||
|
SaveID = @ID
|
||||||
|
SaveRecord = @RECORD
|
||||||
|
OrigFileError = @FILE.ERROR
|
||||||
|
|
||||||
|
// Now make sure @DICT, ID, and @RECORD are populated
|
||||||
|
CurrentDictName = ''
|
||||||
|
If @DICT then
|
||||||
|
DictHandle = @DICT<1, 2>
|
||||||
|
Locate DictHandle in @TABLES(5) Using @FM Setting fPos then
|
||||||
|
CurrentDictName = Field(@TABLES(0), @FM, fPos, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If CurrentDictName NE DictName then
|
||||||
|
Open DictName to @DICT else Status = 'Unable to initialize @DICT'
|
||||||
|
end
|
||||||
|
|
||||||
|
@ID = KeyID
|
||||||
|
If Record else
|
||||||
|
// Record might not have been passed in. Read the record from the database table just to make sure.
|
||||||
|
@FILE.ERROR = ''
|
||||||
|
Open TableName to hTable then
|
||||||
|
FullFSList = hTable[1, 'F' : @VM]
|
||||||
|
BFS = FullFSList[-1, 'B' : @SVM]
|
||||||
|
LastHandle = hTable[-1, 'B' : \0D\]
|
||||||
|
FileHandle = \0D\ : LastHandle[1, @VM]
|
||||||
|
|
||||||
|
Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@RECORD = Record
|
||||||
|
return
|
||||||
|
|
||||||
|
Restore_System_Variables:
|
||||||
|
Transfer SaveDict to @DICT
|
||||||
|
Transfer SaveID to @ID
|
||||||
|
Transfer SaveRecord to @RECORD
|
||||||
|
@FILE.ERROR = OrigFileError
|
||||||
|
return
|
31
LSL2/STPROC/CLEAN_INSP_CURR_STATUS_CONV.txt
Normal file
31
LSL2/STPROC/CLEAN_INSP_CURR_STATUS_CONV.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
SUBROUTINE CLEAN_INSP_CURR_STATUS_CONV(ConvType, DataIo, SubrLabel, ReturnedValue)
|
||||||
|
*
|
||||||
|
|
||||||
|
$insert LOGICAL
|
||||||
|
|
||||||
|
EQU valid$ TO 0 ;* successful
|
||||||
|
EQU invalid_msg$ TO 1 ;* bad data - print error message window
|
||||||
|
EQU invalid_conv$ TO 2 ;* bad conversion - " "
|
||||||
|
EQU invalid_nomsg$ TO 3 ;* bad but do not print the error message window
|
||||||
|
|
||||||
|
STATUS() = valid$
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ConvType = 'ICONV'
|
||||||
|
ReturnedValue = DataIo
|
||||||
|
|
||||||
|
CASE ConvType = 'OCONV'
|
||||||
|
Vals = XLATE('SYSREPOSPOPUPS','LSL2**CLEAN_INSP_CURR_STATUS',8,'X')
|
||||||
|
Desc = ''
|
||||||
|
LOOP
|
||||||
|
Val = Vals[1,@VM]
|
||||||
|
Code = Val[1,@SVM]
|
||||||
|
Desc = Val[COL2()+1,@SVM]
|
||||||
|
UNTIL Code = DataIO OR Vals = ''
|
||||||
|
Vals = DELETE(Vals,1,1,0)
|
||||||
|
REPEAT
|
||||||
|
ReturnedValue = Desc
|
||||||
|
|
||||||
|
CASE OTHERWISE$
|
||||||
|
Status() = invalid_msg$
|
||||||
|
END CASE
|
||||||
|
RETURN
|
555
LSL2/STPROC/CLEAN_INSP_ORG.txt
Normal file
555
LSL2/STPROC/CLEAN_INSP_ORG.txt
Normal file
@ -0,0 +1,555 @@
|
|||||||
|
COMPILE FUNCTION Clean_Insp_Org(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for CLEAN_INSP (Clean & Inspection) window
|
||||||
|
|
||||||
|
08/5/2009 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow,
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, obj_React_Run_CI, Environment_Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT REACT_EVENT_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Clean_Insp'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CLEAR' ; GOSUB Clear
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
CASE Event = 'CLOSE' ; GOSUB Close
|
||||||
|
CASE Event = 'READ' ; GOSUB Read
|
||||||
|
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = 'CLEAN_INSP.SEND_SPC' AND Event = 'CLICK' ; GOSUB SendSPC
|
||||||
|
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF NOT(Security_Check('Reactor Event Log',READ$)) THEN
|
||||||
|
Security_Err_Msg('Reactor Event Log',READ$)
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
|
||||||
|
IF @USERNAME = 'BRYCE_BARB' OR @USERNAME = 'CHAD_B' THEN
|
||||||
|
Set_Property(@WINDOW:'.SEND_SPC','VISIBLE',1)
|
||||||
|
Set_Property(@WINDOW:'.SPC_DTM','VISIBLE',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.SEND_SPC','VISIBLE',0)
|
||||||
|
Set_Property(@WINDOW:'.SPC_DTM','VISIBLE',0)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* Provides compatibility with the existing messaging attachment system
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
PassedKeys = FIELD(Parm1,'*',1)
|
||||||
|
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
*IOOptions = Get_Property(@WINDOW,'IOOPTIONS')
|
||||||
|
*IOOptions<11> = 1 ;* Generate READ event on QBFLoad
|
||||||
|
|
||||||
|
*Set_Property(@WINDOW,'IOOPTIONS',IOOptions)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'@READONLY') THEN
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Stage = Get_Property(@WINDOW:'.STAGE','TEXT')
|
||||||
|
SpecFwiLwi = Get_Property(@WINDOW:'.SPEC_FWI_LWI','TEXT')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Stage = 'PRE' ; LabelText = 'Pre Epi Cleaning && Inspection'
|
||||||
|
CASE Stage = 'POST' ; LabelText = 'Post Epi Cleaning && Inspection'
|
||||||
|
CASE Stage = 'WFR' AND SpecFwiLwi = 'FWI' ; LabelText = 'First Wafer Inspection'
|
||||||
|
CASE Stage = 'WFR' AND SpecFwiLwi = 'LWI' ; LabelText = 'Last Wafer Inspection'
|
||||||
|
CASE Stage[1,3] = 'WFR' ; LabelText = 'Wafer ':Stage[4,99]:' Extra Inspection'
|
||||||
|
CASE 1 ; LabelText = 'Cleaning && Inspection'
|
||||||
|
END CASE
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT',LabelText)
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.SPEC_CLEAN_SUBOXIDE':@RM ; Props = 'CHECK':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_CLEAN_OXIDE_ANGSTROMS':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_CLEAN_TOOL':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_CLEAN_AKRION_RECIPE':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_BRIGHTLIGHT':@RM ; Props := 'CHECK':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_MICROSCOPE':@RM ; Props := 'CHECK':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_SURFSCAN':@RM ; Props := 'CHECK':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_SURFSCAN_RECIPE' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
SCSubOxide = Vals[1,@RM]
|
||||||
|
SCAngstroms = Vals[COL2()+1,@RM]
|
||||||
|
SCTool = Vals[COL2()+1,@RM]
|
||||||
|
SCAkrionRecipe = Vals[COL2()+1,@RM]
|
||||||
|
SBrightLight = Vals[COL2()+1,@RM]
|
||||||
|
SMicroscope = Vals[COL2()+1,@RM]
|
||||||
|
SSurfscan = Vals[COL2()+1,@RM]
|
||||||
|
SSurfscanRecipe = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
IF SCTool = 'No' THEN SCTool = ''
|
||||||
|
|
||||||
|
DefBack = Get_Property(@WINDOW,'BACKCOLOR')
|
||||||
|
|
||||||
|
IF SCSubOxide OR SCAngstroms OR SCTool OR SCAkrionRecipe THEN
|
||||||
|
Vals = 1:@RM:1:@RM:STR(VL_GREEN$:@RM,5)
|
||||||
|
END ELSE
|
||||||
|
Vals = 0:@RM:0:@RM:STR(DefBack:@RM,5)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SBrightLight OR SMicroscope THEN
|
||||||
|
Vals := 1:@RM:1:@RM:STR(VL_GREEN$:@RM,29)
|
||||||
|
END ELSE
|
||||||
|
Vals := 0:@RM:0:@RM:STR(DefBack:@RM,29)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SSurfscan OR SSurfscanRecipe THEN
|
||||||
|
Vals := 1:@RM:1:@RM:STR(VL_GREEN$:@RM,14)
|
||||||
|
END ELSE
|
||||||
|
Vals := 0:@RM:0:@RM:STR(DefBack:@RM,14)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Vals[-1,1] = @RM THEN Vals[-1,1] = ''
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.CLEANS_GROUP':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.CLEAN_RESULTS_GROUP':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.CLEANS_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.CLEAN_RESULTS_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_CLEAN_SUBOXIDE':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.CLEAN_TOOL_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_CLEAN_AKRION_RECIPE_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
|
||||||
|
Ctrls := @WINDOW:'.SURF_INSP_GROUP':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.INSP_RESULT_GROUP':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.SURF_INSP_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.INSP_RESULT_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_BRIGHTLIGHT':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_MICROSCOPE':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.LPD_IN_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.LPD_OUT_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_MICROSCOPE':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.LPD_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.LPD_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.PITS_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.PITS_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.MOUNDS_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.MOUNDS_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.BL_DEF_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.BL_DEF_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.STACK_FAULTS_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.STACK_FAULT_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPIKES_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPIKE_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.LONGEST_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.NOT_TO_EXCEED_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPOTS_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.FOV_LONG_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPOTS_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.FOV_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCRATCH_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.INCH_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCRATCHES_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.INCH_SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
|
||||||
|
Ctrls := @WINDOW:'.SURF_SCAN_GROUP':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCAN_RESULT_GROUP':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.SURF_SCAN_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCAN_RESULT_GROUP':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_SURFSCAN':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_SURFSCAN_RECIPE_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SAMP_QTY_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCAN_TOOL_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCAN_DTM_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEFECTS_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.HAZE_AVG_PPM_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCRATCH_AVG_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPEC_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.MIN_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.MAX_LABEL':@RM ; Props := 'BACKCOLOR':@RM
|
||||||
|
Ctrls := @WINDOW:'.AVG_LABEL' ; Props := 'BACKCOLOR'
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW:'.SPC_DTM','DEFPROP') = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.SEND_SPC','TEXT','Send to SPC')
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.SEND_SPC','TEXT','Resend to SPC')
|
||||||
|
END
|
||||||
|
|
||||||
|
* Check for out of spec on the Surface Scan results
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.SUM_OF_DEFECTS_SPEC':@RM ; Props = 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.HAZE_AVG_SPEC':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEF_AVG':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEF_MAX':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.HAZE_AVG_AVG' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
SumOfDefectsSpec = Vals[1,@RM]
|
||||||
|
HazeAvgSpec = Vals[COL2()+1,@RM]
|
||||||
|
SumOfDefectsAvg = Vals[COL2()+1,@RM]
|
||||||
|
SumOfDefectsMax = Vals[COL2()+1,@RM]
|
||||||
|
HazeAvgAvg = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
OutOfSpec = ''
|
||||||
|
IF SumOfDefectsSpec NE '' THEN
|
||||||
|
IF SumOfDefectsMax GE SumOfDefectsSpec THEN
|
||||||
|
OutOfSpec = 1
|
||||||
|
Set_Property(@WINDOW:'.SUM_OF_DEF_MAX','BACKCOLOR',RED$)
|
||||||
|
END
|
||||||
|
IF SumOfDefectsAvg GE SumOfDefectsSpec THEN
|
||||||
|
OutOfSpec = 1
|
||||||
|
Set_Property(@WINDOW:'.SUM_OF_DEF_AVG','BACKCOLOR',RED$)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
IF HazeAvgSpec NE '' THEN
|
||||||
|
IF HazeAvgAvg GE HazeAvgSpec THEN
|
||||||
|
OutOfSpec = 1
|
||||||
|
Set_Property(@WINDOW:'.HAZE_AVG_SPEC','BACKCOLOR',RED$)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OutOfSpec THEN
|
||||||
|
Set_Property(@WINDOW:'.OUT_OF_SPEC','VISIBLE',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.OUT_OF_SPEC','VISIBLE',0)
|
||||||
|
Set_Property(@WINDOW:'.SUM_OF_DEF_MAX','BACKCOLOR',WHITE$)
|
||||||
|
Set_Property(@WINDOW:'.SUM_OF_DEF_AVG','BACKCOLOR',WHITE$)
|
||||||
|
Set_Property(@WINDOW:'.HAZE_AVG_AVG','BACKCOLOR',WHITE$)
|
||||||
|
END
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
OrderNo = Get_Property(@WINDOW:'.ORD_NO','TEXT')
|
||||||
|
|
||||||
|
Message = ''
|
||||||
|
IF RowExists('ORDER',OrderNo) THEN
|
||||||
|
IF Get_Property(@WINDOW,'SAVEWARN') THEN
|
||||||
|
Message = 'Order No. ':OrderNo:' has been changed.'
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
Message = 'New Order ':QUOTE(OrderNo):' entered into system.'
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Message NE '' THEN
|
||||||
|
|
||||||
|
Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X')
|
||||||
|
SentFrom = @USER4
|
||||||
|
Subject = 'New/Update Order':OrderNo
|
||||||
|
AttachWindow = 'ORDER2'
|
||||||
|
AttachKey = OrderNo
|
||||||
|
SendToGroup = ''
|
||||||
|
|
||||||
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
|
*obj_Notes('Create',Parms) ;* Per Request from Customer Service
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
/*/
|
||||||
|
|
||||||
|
Result = 1
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF Security_Check('Order',Delete$) THEN
|
||||||
|
Result = 1 ;* Proceed with delete
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Order',Delete$)
|
||||||
|
Result = 0 ;* Stop event chain
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactEsc:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
EventKeys = obj_React_Esc('Find')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF INDEX(EventKeys,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
TypeOver<PDISPLAY$> = EventKeys
|
||||||
|
EventKeys = Popup(@WINDOW,TypeOver,'REACT_ESC_QUERY')
|
||||||
|
END
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM IN EventKeys
|
||||||
|
|
||||||
|
IF INDEX(EventKeys,@FM,1) THEN
|
||||||
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
|
Set_Property(@WINDOW,'QBFLIST',EventKeys)
|
||||||
|
GOSUB Refresh
|
||||||
|
Send_Event(@WINDOW,'QBFIRST')
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:EventKeys)
|
||||||
|
END
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
*obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
||||||
|
|
||||||
|
obj_Appwindow('DetailReturn',@WINDOW)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SendSPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.RDS_NO':@RM ; Props = 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.STAGE':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCAN_TOOL':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEF_MIN':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEF_MAX':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SUM_OF_DEF_AVG':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.HAZE_AVG_AVG':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SPOTS':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.FOV':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCRATCHES':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SCRATCH_LEN':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.REACT_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.WAFER_SIZE':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCRATCH_MAX':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.SS_SCRATCH_AVG' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
RDSNo = Vals[1,@RM]
|
||||||
|
Stage = Vals[COL2()+1,@RM]
|
||||||
|
ScanTool = Vals[COL2()+1,@RM]
|
||||||
|
SumOfDefMin = Vals[COL2()+1,@RM]
|
||||||
|
SumOfDefMax = Vals[COL2()+1,@RM]
|
||||||
|
SumOfDefAvg = Vals[COL2()+1,@RM]
|
||||||
|
HazeAvgAvg = Vals[COL2()+1,@RM]
|
||||||
|
Spots = Vals[COL2()+1,@RM]
|
||||||
|
FOV = Vals[COL2()+1,@RM]
|
||||||
|
Scratches = Vals[COL2()+1,@RM]
|
||||||
|
ScratchLen = Vals[COL2()+1,@RM]
|
||||||
|
ReactNo = Vals[COL2()+1,@RM]
|
||||||
|
WaferSize = Vals[COL2()+1,@RM]
|
||||||
|
SSScratchMax = Vals[COL2()+1,@RM]
|
||||||
|
SSScratchAvg = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
|
||||||
|
WaferSize = WaferSize[1,' '] ;* Data looks like "125 mm 6 in"
|
||||||
|
|
||||||
|
UserName = OCONV(@USER4,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
|
||||||
|
DataLine = QUOTE(ReactNo):TAB$
|
||||||
|
DataLine := QUOTE(RDSNo):TAB$
|
||||||
|
DataLine := QUOTE(Stage):TAB$
|
||||||
|
DataLine := QUOTE(ScanTool):TAB$
|
||||||
|
DataLine := QUOTE(SumOfDefMin):TAB$
|
||||||
|
DataLine := QUOTE(SumOfDefMax):TAB$
|
||||||
|
DataLine := QUOTE(SumOfDefAvg):TAB$
|
||||||
|
DataLine := QUOTE(HazeAvgAvg):TAB$
|
||||||
|
DataLine := QUOTE(Spots):TAB$
|
||||||
|
DataLine := QUOTE(FOV):TAB$
|
||||||
|
DataLine := QUOTE(Scratches):TAB$
|
||||||
|
DataLine := QUOTE(ScratchLen):TAB$
|
||||||
|
DataLine := QUOTE(UserName):TAB$
|
||||||
|
DataLine := QUOTE(SSScratchAvg):TAB$
|
||||||
|
DataLine := QUOTE(SSScratchMax):TAB$
|
||||||
|
DataLine := QUOTE(WaferSize)
|
||||||
|
|
||||||
|
IF @USERNAME = 'BRYCE_BARB' THEN
|
||||||
|
DOSFile = Environment_Services('GetApplicationRootPath') : '\SPC_Surf.TXT'
|
||||||
|
END ELSE
|
||||||
|
*DOSFile = 'R:\SPC_Surf.TXT'
|
||||||
|
* DOSFile = 'N:\IT\CommonRW\OI_SPC_Data_Transfer\SPC_Surf.TXT'
|
||||||
|
* DOSFile = Environment_Services('GetUserDataProductionPath') : '\CommonRW\OI_SPC_Data_Transfer\SPC_Surf.TXT'
|
||||||
|
DOSFile = Environment_Services('GetSPCDataProductionPath') : '\SPC_Surf.txt'
|
||||||
|
END
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
DosRead:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
OSRead DOSRecord FROM DOSFile ELSE
|
||||||
|
ErrCode = Status()
|
||||||
|
IF ErrCode = 4 THEN
|
||||||
|
DOSRecord = '' ;* File doesn't exist
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to read DOS file "SPC_Data.TXT" for update. ':ErrCode:' Please try again.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
DOSRecord := DataLine:CRLF$
|
||||||
|
|
||||||
|
OSWrite DOSRecord ON DOSFile
|
||||||
|
|
||||||
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SPC_DTM','DEFPROP',CurrDTM)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SetGroupBackground:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
450
LSL2/STPROC/CLEAN_INSP_SERVICES.txt
Normal file
450
LSL2/STPROC/CLEAN_INSP_SERVICES.txt
Normal file
@ -0,0 +1,450 @@
|
|||||||
|
Compile function Clean_Insp_Services(@Service, @Params)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
Name : Clean_Insp_Services
|
||||||
|
|
||||||
|
Description : Handler program for all CLEAN_INSP services.
|
||||||
|
|
||||||
|
Notes : Application errors should be logged using the Error Services module. There are a few methodological
|
||||||
|
assumptions built into way errors are managed which are important to understand in order to properly
|
||||||
|
work with Error Services:
|
||||||
|
|
||||||
|
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to
|
||||||
|
the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger
|
||||||
|
this will appear backwards since the originating procedure always appears at the bottom of the
|
||||||
|
list and the current routine appears at the top of the list. We are using this orientation because
|
||||||
|
it is common to refer to the process of calling other procedures as 'drilling down'.
|
||||||
|
|
||||||
|
- The reason for defining the orientation of the call stack is because Error_Services allows for
|
||||||
|
multiple error conditions to be appended to an original error. In most cases this will happen when
|
||||||
|
a procedure at the bottom of the stack generates an error condition and then returns to its
|
||||||
|
calling procedure. This higher level procedure can optionally add more information relevant to
|
||||||
|
itself. This continues as the call stack 'bubbles' its way back to the top to where the
|
||||||
|
originating procedure is waiting.
|
||||||
|
|
||||||
|
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus)
|
||||||
|
preserve their error state until explicitly cleared. This can hinder the normal execution of code
|
||||||
|
since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists.
|
||||||
|
Our philosophy is that error conditions should automatically be cleared before a new procedure
|
||||||
|
is executed to avoid this problem. However, the nature of Basic+ does not make this easy to
|
||||||
|
automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our
|
||||||
|
philosophy then it should include a call into the 'Clear' service request at the top of the
|
||||||
|
program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.)
|
||||||
|
|
||||||
|
- Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
|
||||||
|
error conditions that were set before.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
Service [in] -- Name of the service being requested
|
||||||
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
||||||
|
|
||||||
|
Metadata :
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
11/16/22 djs Original programmer.
|
||||||
|
04/12/23 djs Fixed WO_STEP_PROD_SPEC_ID$ equate typo within UpdateCleanInsp service.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert LOGICAL
|
||||||
|
$Insert SERVICE_SETUP
|
||||||
|
$Insert WO_STEP_EQUATES
|
||||||
|
$Insert CLEAN_INSP_EQUATES
|
||||||
|
$Insert PRS_STAGE_EQUATES
|
||||||
|
$Insert WO_MAT_EQUATES
|
||||||
|
|
||||||
|
Declare function Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
|
||||||
|
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services
|
||||||
|
|
||||||
|
GoToService
|
||||||
|
|
||||||
|
Return Response or ""
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// SERVICES
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Service ConvertRecordToJSON(KeyID, Record, ItemURL)
|
||||||
|
|
||||||
|
jsonRecord = ''
|
||||||
|
|
||||||
|
If KeyID NE '' then
|
||||||
|
|
||||||
|
If Record EQ '' then Record = Database_Services('ReadDataRow', 'CLEAN_INSP', KeyID)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
@DICT = Database_Services('GetTableHandle', 'DICT.CLEAN_INSP')
|
||||||
|
@ID = KeyID
|
||||||
|
@RECORD = Record
|
||||||
|
If SRP_JSON(objJSON, 'New', 'Object') then
|
||||||
|
|
||||||
|
If SRP_JSON(objCleanInsp, 'New', 'Object') then
|
||||||
|
SRP_JSON(objCleanInsp, 'SetValue', 'keyId', @ID)
|
||||||
|
SRP_JSON(objCleanInsp, 'SetValue', 'stage', {STAGE})
|
||||||
|
// Add Cleans Object
|
||||||
|
If SRP_JSON(objCleans, 'New', 'Object') then
|
||||||
|
// Add Cleans Specs Object
|
||||||
|
If SRP_JSON(objSpecCleans, 'New', 'Object') then
|
||||||
|
SRP_JSON(objSpecCleans, 'SetValueArray', 'tools', {SPEC_CLEAN_TOOL}, @VM)
|
||||||
|
SRP_JSON(objSpecCleans, 'SetValueArray', 'recipes', {SPEC_CLEAN_RECIPE}, @VM)
|
||||||
|
SRP_JSON(objCleans, 'Set', 'specs', objSpecCleans)
|
||||||
|
SRP_JSON(objSpecCleans, 'Release')
|
||||||
|
end
|
||||||
|
// Add Cleans Operations
|
||||||
|
If SRP_JSON(objCleansOpsArray, 'New', 'Array') then
|
||||||
|
CleanTools = {CLEAN_TOOL}
|
||||||
|
If CleanTools NE '' then
|
||||||
|
BoatIds = {CLEAN_BOAT_ID}
|
||||||
|
SRDNos = {CLEAN_SRD_NO}
|
||||||
|
CleanUsers = {CLEAN_SIG}
|
||||||
|
CleanDTMs = {CLEAN_SIG_DTM}
|
||||||
|
For each CleanTool in CleanTools using @VM setting vPos
|
||||||
|
If SRP_JSON(objCleansOp, 'New', 'Object') then
|
||||||
|
SRP_JSON(objCleansOp, 'SetValue', 'cleanTool', CleanTool)
|
||||||
|
SRP_JSON(objCleansOp, 'SetValue', 'boatId', BoatIds<0, vPos>)
|
||||||
|
SRP_JSON(objCleansOp, 'SetValue', 'srdNo', SRDNos<0, vPos>)
|
||||||
|
SRP_JSON(objCleansOp, 'SetValue', 'userId', CleanUsers<0, vPos>)
|
||||||
|
SRP_JSON(objCleansOp, 'SetValue', 'cleadDtm', OConv(CleanDTMs<0, vPos>, 'DT2/^H'))
|
||||||
|
SRP_JSON(objCleansOpsArray, 'Add', objCleansOp)
|
||||||
|
SRP_JSON(objCleansOp, 'Release')
|
||||||
|
end
|
||||||
|
Next CleanTool
|
||||||
|
end
|
||||||
|
SRP_JSON(objCleans, 'Set', 'operations', objCleansOpsArray)
|
||||||
|
SRP_JSON(objCleansOpsArray, 'Release')
|
||||||
|
end
|
||||||
|
SRP_JSON(objCleanInsp, 'Set', 'cleans', objCleans)
|
||||||
|
SRP_JSON(objCleans, 'Release')
|
||||||
|
end
|
||||||
|
// Add Inspection Object
|
||||||
|
If SRP_JSON(objInsp, 'New', 'Object') then
|
||||||
|
// Add Specs Object
|
||||||
|
If SRP_JSON(objInspSpecs, 'New', 'Object') then
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'microscopeReq', {SPEC_MICROSCOPE}, 'Boolean')
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'brightlightReq', {SPEC_BRIGHTLIGHT}, 'Boolean')
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'lpd', {SPEC_LPD})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'scratches', {SPEC_SCRATCHES})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'scratchLen', {SPEC_SCRATCH_LEN})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'pits', {SPEC_PITS})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'mounds', {SPEC_MOUNDS})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'stackFaults', {SPEC_STACK_FAULTS})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'spikes', {SPEC_SPIKES})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'spots', {SPEC_SPOTS})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'fov', {SPEC_FOV})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'blDefects', {SPEC_BL_DEFECTS})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'bsideScratches', {SPEC_BSIDE_SCRATCHES})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'bsideScratchLen', {SPEC_BSIDE_SCRATCH_LEN})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'bsideNodules', {SPEC_BSIDE_NODULES})
|
||||||
|
SRP_JSON(objInspSpecs, 'SetValue', 'bsideSpikes', {SPEC_BSIDE_SPIKES})
|
||||||
|
SRP_JSON(objInsp, 'Set', 'specs', objInspSpecs)
|
||||||
|
SRP_JSON(objInspSpecs, 'Release')
|
||||||
|
end
|
||||||
|
SRP_JSON(objCleanInsp, 'Set', 'inspection', objInsp)
|
||||||
|
SRP_JSON(objInsp, 'Release')
|
||||||
|
end
|
||||||
|
// Add Surfscan Object
|
||||||
|
If SRP_JSON(objSurfScan, 'New', 'Object') then
|
||||||
|
If SRP_JSON(objSpecSurfScanArray, 'New', 'Array') then
|
||||||
|
SurfScanRecipes = {SPEC_SURFSCAN_RECIPE}
|
||||||
|
SpecDefects = {SPEC_SURF_DEFECTS}
|
||||||
|
SpecHazes = {SPEC_SURF_HAZE}
|
||||||
|
SpecSampleQtys = {SPEC_SS_SAMP_QTY}
|
||||||
|
If SurfScanRecipes NE '' then
|
||||||
|
For each SurfScanRecipe in SurfScanRecipes using @VM setting vPos
|
||||||
|
If SRP_JSON(objSpecSurfScan, 'New', Object) then
|
||||||
|
SRP_JSON(objSpecSurfScan, 'SetValue', 'recipe', SurfScanRecipe)
|
||||||
|
SRP_JSON(objSpecSurfScan, 'SetValue', 'defect', SpecDefects<0, vPos>)
|
||||||
|
SRP_JSON(objSpecSurfScan, 'SetValue', 'haze', SpecHazes<0, vPos>)
|
||||||
|
SRP_JSON(objSpecSurfScan, 'SetValue', 'sampleQty', SpecSampleQtys<0, vPos>)
|
||||||
|
SRP_JSON(objSpecSurfScanArray, 'Add', objSpecSurfScan)
|
||||||
|
SRP_JSON(objSpecSurfScan, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
Next SurfScanRecipe
|
||||||
|
end
|
||||||
|
SRP_JSON(objSurfScan, 'Set', 'specs', objSpecSurfScanArray)
|
||||||
|
SRP_JSON(objSpecSurfScanArray, 'Release')
|
||||||
|
end
|
||||||
|
SRP_JSON(objCleanInsp, 'Set', 'surfScan', objSurfScan)
|
||||||
|
SRP_JSON(objSurfScan, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
SRP_JSON(objJSON, 'Set', 'cleanInsp', objCleanInsp)
|
||||||
|
SRP_JSON(objCleanInsp, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
If itemURL NE '' then
|
||||||
|
// The itemURL was passed in so add HAL+JSON properties.
|
||||||
|
|
||||||
|
// Create the _links property and then all link objects needed for this resource.
|
||||||
|
If SRP_JSON(objLinks, 'New', 'Object') then
|
||||||
|
// Create a self link.
|
||||||
|
If SRP_JSON(objLink, 'New', 'Object') then
|
||||||
|
SRP_JSON(objLink, 'SetValue', 'href', ItemURL, 'String')
|
||||||
|
SRP_JSON(objLink, 'SetValue', 'title', 'Self', 'String')
|
||||||
|
SRP_JSON(objLinks, 'Set', 'self', objLink)
|
||||||
|
SRP_JSON(objLink, 'Release')
|
||||||
|
end
|
||||||
|
SRP_JSON(objJSON, 'Set', '_links', objLinks)
|
||||||
|
SRP_JSON(objLinks, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
// Create the _class property for this resource.
|
||||||
|
SRP_JSON(objJSON, 'SetValue', '_class', 'resource')
|
||||||
|
end
|
||||||
|
jsonRecord = SRP_JSON(objJSON, 'Stringify', 'Styled')
|
||||||
|
SRP_JSON(objJSON, 'Release')
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Unable to create JSON representation in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'KeyID argument was missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = jsonRecord
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
Service ConvertJSONToRecord(JSON)
|
||||||
|
|
||||||
|
If JSON NE '' then
|
||||||
|
If SRP_JSON(objJSON, 'Parse', JSON) EQ '' then
|
||||||
|
objCleanInsp = SRP_JSON(objJSON, 'Get', 'cleanInsp')
|
||||||
|
@ID = SRP_JSON(objCleanInsp, 'GetValue', 'keyId')
|
||||||
|
If @ID NE '' then
|
||||||
|
@Record = Database_Services('ReadDataRow', 'CLEAN_INSP', @ID)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
@Dict = Database_Services('GetTableHandle', 'DICT.CLEAN_INSP')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Null value for cleanInsp.keyID.')
|
||||||
|
end
|
||||||
|
SRP_JSON(objCleanInsp, 'Release')
|
||||||
|
SRP_JSON(objJSON, 'Release')
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Unable to parse JSON payload.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ':Service:' service. Null JSON passed in.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = @Record
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// UpdateCleanInsp
|
||||||
|
//
|
||||||
|
// CleanInspKey - [Required]
|
||||||
|
//
|
||||||
|
// Updates or deletes a CLEAN_INSP record associated with an RDS or WM_OUT record per the PSN.
|
||||||
|
// This is useful when a PSN has changed such that PRS_STAGES have been added and/or removed and/or modified.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service UpdateCleanInsp(CleanInspKey)
|
||||||
|
|
||||||
|
CIRec = ''
|
||||||
|
ErrorMsg = ''
|
||||||
|
If CleanInspKey NE '' then
|
||||||
|
CIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
If CIRec NE '' then
|
||||||
|
WONo = CIRec<CLEAN_INSP_WO_NO$>
|
||||||
|
WOStep = CIRec<CLEAN_INSP_WO_STEP$>
|
||||||
|
WOStepKey = WONo:'*':WOStep
|
||||||
|
ReactType = Xlate('WO_STEP', WOStepKey, 'REACTOR_TYPE', 'X')
|
||||||
|
If ReactType NE 'GAN' then
|
||||||
|
CassNo = CIRec<CLEAN_INSP_CASS_NO$>
|
||||||
|
Stage = CIRec<CLEAN_INSP_STAGE$>
|
||||||
|
RDSNo = CIRec<CLEAN_INSP_RDS_NO$>
|
||||||
|
PSNo = XLATE('WO_STEP', WONo:'*':WOStep, WO_STEP_PROD_SPEC_ID$, 'X')
|
||||||
|
If ( (PSNo NE '') and (Stage NE '') ) then
|
||||||
|
PrsStageKey = PSNo:'*':Stage
|
||||||
|
PRSStageRec = Database_Services('ReadDataRow', 'PRS_STAGE', PrsStageKey)
|
||||||
|
IF PRSStageRec NE '' THEN
|
||||||
|
CIRec<CLEAN_INSP_SPEC_INSP_REQ$> = PRSStageRec<PRS_STAGE_INSP_SIG_REQ$>
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SURFSCAN_REQ$> = PRSStageRec<PRS_STAGE_SURFSCAN_SIG_REQ$>
|
||||||
|
CIRec<CLEAN_INSP_SPEC_CLEAN_REQ$> = PRSStageRec<PRS_STAGE_CLEAN_SIG_REQ$>
|
||||||
|
CIRec<CLEAN_INSP_SPEC_BRIGHTLIGHT$> = PRSStageRec<PRS_STAGE_BRIGHTLIGHT$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_MICROSCOPE$> = PRSStageRec<PRS_STAGE_MICROSCOPE$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_EDGE$> = PRSStageRec<PRS_STAGE_EDGE$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_PITS$> = PRSStageRec<PRS_STAGE_PITS$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_MOUNDS$> = PRSStageRec<PRS_STAGE_MOUNDS$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_BL_DEFECTS$> = PRSStageRec<PRS_STAGE_BL_DEFECTS$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SPOTS$> = PRSStageRec<PRS_STAGE_SPOTS$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_FOV$> = PRSStageRec<PRS_STAGE_FOV$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SCRATCHES$> = PRSStageRec<PRS_STAGE_SCRATCHES$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SCRATCH_LEN$> = PRSStageRec<PRS_STAGE_SCRATCH_LEN$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_LPD$> = PRSStageRec<PRS_STAGE_LPD$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_STACK_FAULTS$> = PRSStageRec<PRS_STAGE_STACK_FAULTS$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SPIKES$> = PRSStageRec<PRS_STAGE_SPIKES$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_INSP_INTERVAL$> = PRSStageRec<PRS_STAGE_INSP_INTERVAL$> ;* Visual Inspection
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$> = PRSStageRec<PRS_STAGE_SURFSCAN_RECIPE$> ;* Surface Scan
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SURF_HAZE$> = PRSStageRec<PRS_STAGE_SURF_HAZE$> ;* Surface Scan
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SURF_DEFECTS$> = PRSStageRec<PRS_STAGE_SURF_DEFECTS$> ;* Surface Scan
|
||||||
|
CIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$> = PRSStageRec<PRS_STAGE_SS_SAMP_QTY$> ;* Surface Scan
|
||||||
|
CIRec<CLEAN_INSP_SPEC_CLEAN_TOOL$> = PRSStageRec<PRS_STAGE_CLEAN_TOOL$> ;* Cleans
|
||||||
|
CIRec<CLEAN_INSP_SPEC_CLEAN_RECIPE$> = PRSStageRec<PRS_STAGE_CLEAN_RECIPE$> ;* Cleans
|
||||||
|
Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, True$)
|
||||||
|
end else
|
||||||
|
// PRS Stage no longer exists, so delete the clean & insp record
|
||||||
|
Database_Services('DeleteDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
CIRec = ''
|
||||||
|
// Remove references to the CLEAN_INSP record
|
||||||
|
Begin Case
|
||||||
|
Case ReactType EQ 'EPP'
|
||||||
|
// Remove CleanInspKey from WO_MAT_EPI_CI_NO$/WO_MAT_EPO_CI_NO$
|
||||||
|
WOMatKey = WONo:'*':CassNo
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Begin Case
|
||||||
|
Case Stage EQ 'PRE'
|
||||||
|
WOMatRec<WO_MAT_EPI_CI_NO$> = ''
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec)
|
||||||
|
Case Stage EQ 'POST'
|
||||||
|
WOMatRec<WO_MAT_EPO_CI_NO$> = ''
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec)
|
||||||
|
Case Otherwise$
|
||||||
|
// We should never get here as EPP only supports CLEAN_INSP on the PRE and POST stages
|
||||||
|
Null
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
Case Otherwise$
|
||||||
|
// Remove CleanInspKey and stage from REACT_RUN record
|
||||||
|
React_Run_Services('RemCleanInsp', RDSNo, CleanInspKey, Stage)
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Could not determine PRS_STAGE key for CLEAN_INSP record ':CleanInspKey:'.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. GaN is not supported.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP record ':CleanInspKey:' does not exist.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CleanInsp key passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end else
|
||||||
|
Response = CIRec
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// UpdateAllCleanInsp
|
||||||
|
//
|
||||||
|
// WOMatKey - [Required]
|
||||||
|
//
|
||||||
|
// Creates/Deletes/Updates all CLEAN_INSP records associated with an RDS or WM_OUT record per the PSN.
|
||||||
|
// This is useful when a PSN has changed such that PRS_STAGES have been added and/or removed and/or modified.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service UpdateAllCleanInsp(WOMatKey)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
If WOMatKey NE '' then
|
||||||
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
|
PSNo = Xlate('WO_STEP', WONo:'*1', WO_STEP_PROD_SPEC_ID$, 'X')
|
||||||
|
If PSNo NE '' then
|
||||||
|
ReactType = Xlate('PROD_SPEC', PSNo, 'REACTOR_TYPE', 'X')
|
||||||
|
Begin Case
|
||||||
|
Case ReactType EQ 'EPP'
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
// Update CLEAN_INSP records associated with the WM_OUT record
|
||||||
|
// The app on supports CLEAN_INSP records on the PRE and POST stages
|
||||||
|
PreCINo = Xlate('WO_MAT', WOMatKey, WO_MAT_EPI_CI_NO$, 'X')
|
||||||
|
Begin Case
|
||||||
|
Case PreCINo NE ''
|
||||||
|
// Update/delete the CLEAN_INSP record
|
||||||
|
Clean_Insp_Services('UpdateCleanInsp', PreCINo)
|
||||||
|
Case ( (PreCINo EQ '') and (RowExists('PRS_STAGE', PSNo:'*PRE') ) )
|
||||||
|
// Create the CLEAN_INSP record
|
||||||
|
ociParms = WONo:@RM ;* WONo
|
||||||
|
ociParms := 1:@RM ;* WOStep
|
||||||
|
ociParms := CassNo:@RM ;* CassNo
|
||||||
|
ociParms := 'PRE':@RM ;* Stage ;* Pre Epi Cleaning on inbound material
|
||||||
|
ociParms := '':@RM ;* RDSNo ;* No specific RDS on Epi Pro inbound material
|
||||||
|
ociParms := PSNo:@RM ;* PSNo
|
||||||
|
ociParms := '' ;* PSRec ;* Optional
|
||||||
|
WOMatRec<WO_MAT_EPI_CI_NO$> = obj_Clean_Insp('Create',ociParms)
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec)
|
||||||
|
End Case
|
||||||
|
PostCINo = Xlate('WO_MAT', WOMatKey, WO_MAT_EPO_CI_NO$, 'X')
|
||||||
|
Begin Case
|
||||||
|
Case PostCINo NE ''
|
||||||
|
// Update/delete the CLEAN_INSP record
|
||||||
|
Clean_Insp_Services('UpdateCleanInsp', PostCINo)
|
||||||
|
Case ( (PostCINo EQ '') and (RowExists('PRS_STAGE', PSNo:'*POST') ) )
|
||||||
|
// Create the CLEAN_INSP record
|
||||||
|
ociParms = WONo:@RM ;* WONo
|
||||||
|
ociParms := 1:@RM ;* WOStep
|
||||||
|
ociParms := CassNo:@RM ;* CassNo
|
||||||
|
ociParms := 'POST':@RM ;* Stage ;* Pre Epi Cleaning on inbound material
|
||||||
|
ociParms := '':@RM ;* RDSNo ;* No specific RDS on Epi Pro inbound material
|
||||||
|
ociParms := PSNo:@RM ;* PSNo
|
||||||
|
ociParms := '' ;* PSRec ;* Optional
|
||||||
|
WOMatRec<WO_MAT_EPO_CI_NO$> = obj_Clean_Insp('Create',ociParms)
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec)
|
||||||
|
End Case
|
||||||
|
Case ReactType EQ 'GAN'
|
||||||
|
// Not supported
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. GAN is not supported.'
|
||||||
|
Case Otherwise$
|
||||||
|
// Update CLEAN_INSP records associated with the RDS record
|
||||||
|
RDSNo = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
|
||||||
|
Stages = 'PRE,FWI,LWI,POST'
|
||||||
|
For each Stage in Stages using ','
|
||||||
|
CICol = Stage:'_CI_NO'
|
||||||
|
StageCINo = Xlate('RDS', RDSNo, CICol, 'X')
|
||||||
|
Begin Case
|
||||||
|
Case StageCINo NE ''
|
||||||
|
// Update/delete the CLEAN_INSP record
|
||||||
|
Clean_Insp_Services('UpdateCleanInsp', StageCINo)
|
||||||
|
Case ( (StageCINo EQ '') and (RowExists('PRS_STAGE', PSNo:'*':Stage) ) )
|
||||||
|
// Create the CLEAN_INSP record
|
||||||
|
ociParms = WONo:@RM ;* WONo
|
||||||
|
ociParms := 1:@RM ;* WOStep
|
||||||
|
ociParms := CassNo:@RM ;* CassNo
|
||||||
|
ociParms := Stage:@RM ;* Stage ;* Pre Epi Cleaning on inbound material
|
||||||
|
ociParms := RDSNo:@RM ;* RDSNo
|
||||||
|
ociParms := PSNo:@RM ;* PSNo
|
||||||
|
ociParms := '' ;* PSRec ;* Optional
|
||||||
|
NewCINo = obj_Clean_Insp('Create',ociParms)
|
||||||
|
// Add the stage and key ID to the REACT_RUN record
|
||||||
|
React_Run_Services('AddCleanInsp', RDSNo, NewCINo, Stage)
|
||||||
|
End Case
|
||||||
|
Next Stage
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Could not determine PS_NO for WO_MAT record ':WOMatKey:'.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null WO_MAT key passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
Response = False$
|
||||||
|
end else
|
||||||
|
Response = True$
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
72
LSL2/STPROC/CLEAN_UP_JUNK.txt
Normal file
72
LSL2/STPROC/CLEAN_UP_JUNK.txt
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
COMPILE ROUTINE CLEAN_UP_JUNK(Dummy)
|
||||||
|
ROWDEF(CHARSTR)
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE obj_Schedule,Send_Dyn,Send_Infom, obj_Order, obj_WO_Log, RList, RList, ErrMsg
|
||||||
|
DECLARE SUBROUTIne obj_WO_Step, Set_Status, Send_Info, Send_Dyn
|
||||||
|
DECLARE FUNCTION Get_Status, Set_Printer, Popup
|
||||||
|
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT WO_STEP_EQU
|
||||||
|
$INSERT SCHEDULE_EQU
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'JCH_LOG' TO LogTable ELSE
|
||||||
|
DEBUG
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
SelectStatement = 'SELECT JCH_LOG '
|
||||||
|
|
||||||
|
errCode = ''
|
||||||
|
RList(SelectStatement, TARGET_ACTIVELIST$, '','','')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
DEBUG
|
||||||
|
GOTO Bail
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT LogNo ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
|
||||||
|
READ LogRec FROM LogTable,LogNo THEN
|
||||||
|
|
||||||
|
IF LogRec[1,7] = 'RDS_PRE' THEN
|
||||||
|
DELETE LogTable,LogNo THEN
|
||||||
|
Send_Dyn(LogNo:' - Deleted')
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
*WRITE WORec ON WOLogTable,WONo THEN
|
||||||
|
Send_Dyn(LogNo:' ':LogRec)
|
||||||
|
*END
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Bail:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
END
|
63
LSL2/STPROC/CLEAN_UP_SYSLISTS.txt
Normal file
63
LSL2/STPROC/CLEAN_UP_SYSLISTS.txt
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
COMPILE ROUTINE CLEAN_UP_SYSLISTS(Dummy)
|
||||||
|
ROWDEF(CHARSTR)
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Send_Dyn,Send_Infom, RList, RList, ErrMsg
|
||||||
|
DECLARE SUBROUTINE Set_Status, Send_Info,
|
||||||
|
DECLARE FUNCTION Get_Status, Set_Printer, Popup
|
||||||
|
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT WO_STEP_EQU
|
||||||
|
$INSERT SCHEDULE_EQU
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
OPEN 'SYSLISTS' TO FileIn ELSE
|
||||||
|
DEBUG
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
SelectStatement = 'SELECT SYSLISTS'
|
||||||
|
|
||||||
|
RList(SelectStatement, TARGET_ACTIVELIST$, '','','')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
DEBUG
|
||||||
|
GOTO Bail
|
||||||
|
END
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
RecCnt = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT ID ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
READ Rec FROM FileIn,ID THEN
|
||||||
|
RecCnt += 1
|
||||||
|
*DELETE FileIn,ID THEN
|
||||||
|
Send_Dyn(ID)
|
||||||
|
Send_Info(RecCnt:' ':ID)
|
||||||
|
*END
|
||||||
|
END
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Bail:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
END
|
11
LSL2/STPROC/COA_COC.txt
Normal file
11
LSL2/STPROC/COA_COC.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
COMPILE Insert COA_COC
|
||||||
|
|
||||||
|
* Equates for COA_COC table
|
||||||
|
|
||||||
|
EQU COA_COC_PO_NO$ TO 1
|
||||||
|
EQU COA_COC_SHIP_DT$ TO 2
|
||||||
|
EQU COA_COC_SPEC$ TO 3
|
||||||
|
EQU COA_COC_VEND_LOT_NO$ TO 4
|
||||||
|
EQU COA_COC_VEND_LOT_QTY$ TO 5
|
||||||
|
EQU COA_COC_PATH$ TO 6
|
||||||
|
EQU COA_COC_XLFILENAME$ TO 7
|
94
LSL2/STPROC/COC_RPT1.txt
Normal file
94
LSL2/STPROC/COC_RPT1.txt
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
compile function COC_RPT1()
|
||||||
|
begin condition
|
||||||
|
pre:
|
||||||
|
post:
|
||||||
|
end condition
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield
|
||||||
|
$insert rlist_equates
|
||||||
|
$insert msg_equates
|
||||||
|
|
||||||
|
Params = dialog_box( 'COC_RPT1', @window, '*CENTER' )
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
open 'SYSLISTS' to SysListsTable else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to open SYSLISTS...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
ListsId = 'COC_RPT1*':@station
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
CocFrom = Params<1>
|
||||||
|
CocThru = Params<2>
|
||||||
|
DirToPrinter = Params<3>
|
||||||
|
|
||||||
|
Stat = utility( 'CURSOR', 'H' )
|
||||||
|
Stmt = 'SELECT COC BY WO'
|
||||||
|
if CocFrom and CocThru then
|
||||||
|
Stmt := " WITH ENTRY_DATE FROM ":QUOTE(CocFrom):' TO ':QUOTE(CocThru)
|
||||||
|
end else
|
||||||
|
if CocFrom then
|
||||||
|
Stmt := " WITH ENTRY_DATE GE ":QUOTE(CocFrom)
|
||||||
|
end
|
||||||
|
if CocThru then
|
||||||
|
Stmt := " WITH ENTRY_DATE LE ":QUOTE(CocThru)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rlist( Stmt, target_savelist$, ListsId, '', '' )
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
if @reccount then
|
||||||
|
Cmd = "LIST COC CUST_NAME JUSTLEN 35 WO JUSTLEN 8 PO TOTAL TOT_QTY "
|
||||||
|
Cmd:= " HEADING ":'"':" COC (Shipments) by Work Order 'T' PAGE # 'PP''L' for Selected Dates From (":CocFrom:" ) Thru (":CocThru:")":'" '
|
||||||
|
Cmd:= " ID-SUPP"
|
||||||
|
if DirToPrinter = 'Yes' then
|
||||||
|
rlist( Cmd, 0, '', '', '' )
|
||||||
|
end else
|
||||||
|
or_view( '', Cmd )
|
||||||
|
Void = set_property( 'ORPRV.PRINT', 'ENABLED', 0 )
|
||||||
|
WinId = 'ORPRV'
|
||||||
|
loop
|
||||||
|
while get_property( WinId, 'HANDLE' )
|
||||||
|
yield()
|
||||||
|
repeat
|
||||||
|
ToPrint = ''
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'Do you want to print this report?'
|
||||||
|
MsgInfo<micon$> = '?'
|
||||||
|
MsgInfo<mtype$> = 'BNY'
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
MsgInfo<mdefbtn$> = 2 ;* default to no
|
||||||
|
ToPrint = msg( '', MsgInfo )
|
||||||
|
if ToPrint then
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
rlist( Cmd, 0, '', '', '' )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'NO Records meeting your date criteria!!'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
Void = MSG( '', MsgInfo )
|
||||||
|
end
|
||||||
|
write '' on SysListsTable, ListsId else
|
||||||
|
MsgInfo<mtext$> = 'Unable to clear SYSLISTS ':ListsId:'...'
|
||||||
|
MsgInfo<mcol$> = -2
|
||||||
|
MsgInfo<mrow$> = -2
|
||||||
|
msg( '', MsgInfo )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
RETURN 0
|
139
LSL2/STPROC/COC_SRPT1.txt
Normal file
139
LSL2/STPROC/COC_SRPT1.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
COMPILE FUNCTION COC_SRPT1()
|
||||||
|
|
||||||
|
declare function msg, set_property, send_event, dialog_box, utility, get_property
|
||||||
|
declare function set_printer, PrintSetup, obj_Install
|
||||||
|
declare subroutine rlist, or_view, activate_save_select, yield
|
||||||
|
declare subroutine order_srpt1
|
||||||
|
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT OIPRINT_EQUATES
|
||||||
|
$INSERT RPT_CFG_EQU
|
||||||
|
$INSERT PRINTSETUP_EQUATES
|
||||||
|
|
||||||
|
TimeX = OCONV(Time(),'MTS')
|
||||||
|
|
||||||
|
CrLf = Char(13):Char(10)
|
||||||
|
CurDte = OCONV(Date(),"D4/")
|
||||||
|
|
||||||
|
ReportID = "COC001_SRPTCFG"
|
||||||
|
ReportControl = "COC_SRPT1"
|
||||||
|
TableName = 'COC'
|
||||||
|
ListsId = ReportControl:'*':@station
|
||||||
|
TtlLin1 = ''
|
||||||
|
TtlLin2 = ''
|
||||||
|
TtlLin3 = ''
|
||||||
|
TtlLin4 = ''
|
||||||
|
|
||||||
|
open 'CONFIG' to ConfigTable else
|
||||||
|
Void = msg( '', 'Unable to open CONFIG...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
Read SRptConfig From ConfigTable,ReportID Else
|
||||||
|
Void = msg( '', 'Unable to read ': ReportID:' From CONFIG table!' )
|
||||||
|
return 0
|
||||||
|
End
|
||||||
|
|
||||||
|
Params = dialog_box( ReportControl, @window, '*CENTER' )
|
||||||
|
|
||||||
|
if Params = 'CANCEL' or Params = '' then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
convert '*' to @fm in Params
|
||||||
|
BegDte = Params<1>
|
||||||
|
EndDte = Params<2>
|
||||||
|
|
||||||
|
Void = utility( 'CURSOR', 'H' )
|
||||||
|
|
||||||
|
WithStmt = 'SELECT ':TableName:' '
|
||||||
|
WthSwt = 0
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE BegDte = EndDte AND BegDte NE '' AND EndDte NE ''
|
||||||
|
TtlLin2 = 'Ship Date:':BegDte
|
||||||
|
WithStmt := " WITH SHIP_DT = '":BegDte:"'"
|
||||||
|
WthSwt = 1
|
||||||
|
|
||||||
|
CASE BegDte and EndDte
|
||||||
|
TtlLin2 = 'Ship Dates: From ':BegDte:' To ':EndDte
|
||||||
|
WithStmt := " WITH SHIP_DT FROM '": BegDte:"' TO '":EndDte: "' "
|
||||||
|
WthSwt = 1
|
||||||
|
|
||||||
|
CASE BegDte
|
||||||
|
TtlLin2 = 'Ship Dates: From ':BegDte:' To ':CurDte
|
||||||
|
WithStmt := " WITH SHIP_DT GE '":BegDte:"' "
|
||||||
|
WthSwt = 1
|
||||||
|
|
||||||
|
CASE EndDte
|
||||||
|
TtlLin2 = 'Ship Dates: From Earliest To ':EndDte
|
||||||
|
WithStmt := " WITH SHIP_DT LE '":EndDte:"' "
|
||||||
|
WthSwt = 1
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
TtlLin2 = 'Entry Dates: ALL'
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
rlist( WithStmt, target_savelist$, ListsId, '', '' )
|
||||||
|
activate_save_select( ListsId )
|
||||||
|
|
||||||
|
Script = SRptConfig<SlistScript$>
|
||||||
|
|
||||||
|
RptWdt = SRptConfig<Width$>
|
||||||
|
|
||||||
|
Title = obj_Install('Get_Prop','Company'):' ':SRptConfig<Title$>
|
||||||
|
Margin = INT((RptWdt - LEN(Title))/2)
|
||||||
|
LMargin = Margin - 10 ;* 10 equals length of the date
|
||||||
|
RMargin = Margin - 8 ;* 8 equals length of 'Page....'
|
||||||
|
Title = OCONV(Date(),'D4/'):SPACE(LMargin):Title:SPACE(RMargin):"Page'PP''L'"
|
||||||
|
|
||||||
|
SWAP '~Title~' WITH Title IN Script
|
||||||
|
|
||||||
|
TitleLine2 = TtlLin2
|
||||||
|
TitleLine3 = TtlLin3
|
||||||
|
TitleLine4 = TtlLin4
|
||||||
|
|
||||||
|
IF TitleLine2 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine2))/2)
|
||||||
|
LMargin = Margin - 7 ;* 7 equals length of time (12:15PM)
|
||||||
|
RMargin = Margin
|
||||||
|
TitleLine2 = OCONV(Time(),'MTH'):SPACE(LMargin):TitleLine2:SPACE(RMargin)
|
||||||
|
SWAP '~SecondTitleLine~' WITH TitleLine2 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~SecondTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine3 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine3))/2)
|
||||||
|
SWAP '~ThirdTitleLine~' WITH "'L'":TitleLine3 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~ThirdTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TitleLine4 NE '' THEN
|
||||||
|
Margin = INT((RptWdt - LEN(TitleLine4))/2)
|
||||||
|
SWAP '~FourthTitleLine~' WITH "'L'":TitleLine4 IN Script
|
||||||
|
END ELSE
|
||||||
|
SWAP '~FourthTitleLine~' WITH '' IN Script
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* Added after upgrade to OI4.13a to reset default printer in OIPI32 engine.
|
||||||
|
|
||||||
|
PrintCount = PrintSetup(PRN_GET$,'',Printers,DefaultPrinter)
|
||||||
|
CONVERT ',' TO @FM IN DefaultPrinter
|
||||||
|
DefPrintPath = DefaultPrinter<1>:@FM:DefaultPrinter<3>
|
||||||
|
|
||||||
|
Void = set_printer( 'INIT', '', '', .63:@fm:.63:@fm:.25:@fm:'', 0,'',DefPrintPath )
|
||||||
|
Void = Set_Printer('TERM')
|
||||||
|
|
||||||
|
call slist( Script )
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN 0
|
795
LSL2/STPROC/COMM_ANN_CONT.txt
Normal file
795
LSL2/STPROC/COMM_ANN_CONT.txt
Normal file
@ -0,0 +1,795 @@
|
|||||||
|
COMPILE FUNCTION Comm_Ann_Cont(Instruction, Parm1,Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for ANN_CONT (Annual Contract) window
|
||||||
|
|
||||||
|
07/16/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event, Set_List_Box_Data
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow,ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, RowExists, obj_Prod_Ord, obj_Annual_Contracts, NextKey
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT QUOTE_SIGS_EQU
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT ANNUAL_CONTRACTS_EQU
|
||||||
|
$INSERT PROD_SPEC_EQU
|
||||||
|
$INSERT QUOTE_EQU
|
||||||
|
$INSERT NOTIFICATION_EQU
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$QUOTE_NO TO 1 ;* Equates for Quote Table on 1st page
|
||||||
|
EQU COL$QSTATUS TO 2
|
||||||
|
EQU COL$PART_NO TO 3
|
||||||
|
EQU COL$QUOTE_PSN TO 4
|
||||||
|
EQU COL$QUOTE_DESC TO 5
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$PRO_NO TO 1
|
||||||
|
EQU COL$ORD_DT TO 2
|
||||||
|
EQU COL$CUST_PO_NO TO 3
|
||||||
|
EQU COL$CUST_PO_LINE TO 4
|
||||||
|
EQU COL$CUST_PO_REL TO 5
|
||||||
|
EQU COL$SETUP_CHG TO 6
|
||||||
|
EQU COL$WAFER_CNT TO 7
|
||||||
|
EQU COL$WAFER_AMT TO 8
|
||||||
|
|
||||||
|
EQU COL$REL_NO TO 1
|
||||||
|
EQU COL$PO_REL TO 2
|
||||||
|
EQU COL$DATE TO 3
|
||||||
|
EQU COL$WO_LOG TO 4
|
||||||
|
EQU COL$SETUP TO 5
|
||||||
|
EQU COL$QTY TO 6
|
||||||
|
EQU COL$PRICE TO 7
|
||||||
|
EQU COL$AMOUNT TO 8
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Ann_Cont'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Read' ; GOSUB Read
|
||||||
|
CASE Instruction = 'Write' ; GOSUB Write
|
||||||
|
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||||
|
CASE Instruction = 'Page' ; GOSUB Page
|
||||||
|
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||||
|
CASE Instruction = 'Close' ; GOSUB Close
|
||||||
|
CASE Instruction = 'New' ; GOSUB New
|
||||||
|
CASE Instruction = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Instruction = 'LUACNo' ; GOSUB LUACNo
|
||||||
|
CASE Instruction = 'QuoteDC' ; GOSUB QuoteDC
|
||||||
|
CASE Instruction = 'QuotePC' ; GOSUB QuotePC
|
||||||
|
CASE Instruction = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Instruction = 'LUCustNo' ; GOSUB LUCustNo
|
||||||
|
CASE Instruction = 'ViewCust' ; GOSUB ViewCust
|
||||||
|
CASE Instruction = 'LUNameNo' ; GOSUB LUNameNo
|
||||||
|
CASE Instruction = 'ViewName' ; GOSUB ViewName
|
||||||
|
CASE Instruction = 'ProdOrdDC' ; GOSUB ProdOrdDC
|
||||||
|
CASE Instruction = 'SendMessage' ; GOSUB SendMessage
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction ':QUOTE(Instruction):' passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Change the security tables to match the table names after conversion and take this note out
|
||||||
|
|
||||||
|
IF NOT(Security_Check('Annual Contracts',READ$)) THEN
|
||||||
|
Security_Err_Msg('Annual Contracts',READ$)
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
Set_List_Box_Data(@WINDOW)
|
||||||
|
|
||||||
|
* Provides compatibility with the existing messaging attachment system
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
PassedKeys = FIELD(Parm1,'*',1)
|
||||||
|
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Send_Event(@WINDOW,'PAGE',1)
|
||||||
|
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF Security_Check('Annual Contracts',EDIT$) THEN
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* enable all database controls
|
||||||
|
END ELSE
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW) ;* disable all database controls
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.ENTRY_ID':@RM ; Props = 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.ENTRY_DT':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.CLOSE_DATE' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
EnterBy = Vals[1,@RM]
|
||||||
|
EnterDTM = Vals[COL2()+1,@RM]
|
||||||
|
CloseDt = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
|
||||||
|
IF EnterBy = '' THEN Vals = 1:@RM ELSE Vals = 0:@RM
|
||||||
|
IF EnterDTM = '' THEN Vals := 1:@RM ELSE Vals := 0:@RM
|
||||||
|
IF CloseDt = '' THEN Vals := 1 ELSE Vals := 0
|
||||||
|
|
||||||
|
Props = 'ENABLED':@RM:'ENABLED':@RM:'ENABLED'
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
ACNo = Get_Property(@WINDOW,'ID')
|
||||||
|
|
||||||
|
IF ACNo = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.NEW_BUTTON','ENABLED',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.NEW_BUTTON','ENABLED',0)
|
||||||
|
END
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.QUOTE_GROUP','ENABLED',0)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.QUOTE_GROUP','ENABLED',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
QCtrl = @WINDOW:'.QUOTE_TABLE'
|
||||||
|
|
||||||
|
QuoteList = Get_Property(QCtrl,'LIST')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(QuoteList,@FM) + (QuoteList NE '')
|
||||||
|
QStatFirst = QuoteList<I,COL$QSTATUS>[1,1]
|
||||||
|
|
||||||
|
IF QStatFirst NE 'O' AND QStatFirst NE '' THEN
|
||||||
|
stat = Send_Message(QCtrl,'COLOR_BY_POS',COL$QSTATUS,I,YELLOW$)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
TotalList = Get_Property(@WINDOW:'.TOTALS_TABLE','LIST') ;* One line edit table 3 columns wide
|
||||||
|
|
||||||
|
Balance = TotalList<1,3>
|
||||||
|
IF Balance NE '' THEN
|
||||||
|
IF Balance <= 0 THEN
|
||||||
|
stat = Send_Message(@WINDOW:'.TOTALS_TABLE','COLOR_BY_POS',3,1,RED$)
|
||||||
|
END ELSE
|
||||||
|
stat = Send_Message(@WINDOW:'.TOTALS_TABLE','COLOR_BY_POS',3,1,GREEN$)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Page:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Page')
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * This is called from the event handler as a PreRead event * * *
|
||||||
|
|
||||||
|
ProdOrdNo = Get_Property(@WINDOW:'AC_NO','TEXT')
|
||||||
|
|
||||||
|
IF NOT(RowExists('ANNUAL_CONTRACTS',ProdOrdNo)) THEN
|
||||||
|
IF NOT(Security_Check('Annual Contracts',WRITE$)) THEN
|
||||||
|
Security_Err_Msg('Annual Contracts',WRITE$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Forward_Event() ;* passed security, do the read
|
||||||
|
|
||||||
|
EnterBy = Get_Property(@WINDOW:'.ENTRY_ID','TEXT')
|
||||||
|
IF EnterBy = '' THEN
|
||||||
|
CurrDate = OCONV(Date(),'D4/')
|
||||||
|
Set_Property(@WINDOW:'.ENTRY_ID','TEXT',OCONV(@USER4,'[XLATE_CONV,LSL_USERS*FIRST_LAST]'))
|
||||||
|
Set_Property(@WINDOW:'.ENTRY_DATE','TEXT',CurrDate)
|
||||||
|
Set_Property( @WINDOW:'.CUST_NO', "FOCUS",1)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.TOTALS_TABLE':@RM ; Props = 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.MIN_BALANCE':@RM ; Props := 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.STATUS':@RM ; Props := 'VALUE':@RM
|
||||||
|
Ctrls := @WINDOW:@RM ; Props := 'ID':@RM
|
||||||
|
Ctrls := @WINDOW:@RM ; Props := 'SAVEWARN':@RM
|
||||||
|
Ctrls := @WINDOW:'.CUST_NAME' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
Totals = Vals[1,@RM]
|
||||||
|
MinBalance = Vals[COL2()+1,@RM]
|
||||||
|
Status = Vals[COL2()+1,@RM]
|
||||||
|
ACId = Vals[COL2()+1,@RM]
|
||||||
|
SaveWarn = Vals[COL2()+1,@RM]
|
||||||
|
CustName = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
Totals = OCONV(ICONV(Totals,'MD2'),'MD2') ;* Remove any commas
|
||||||
|
MinBalance = OCONV(ICONV(MinBalance,'MD2'),'MD2')
|
||||||
|
|
||||||
|
OrderTotal = Totals<1,1> ; * This is from a single row edit table -> three columns
|
||||||
|
RelTotal = Totals<1,2>
|
||||||
|
Balance = Totals<1,3>
|
||||||
|
|
||||||
|
IF MinBalance = '' THEN MinBalance = '1001.00' ;* default = $1001.00
|
||||||
|
|
||||||
|
IF Balance <= MinBalance THEN
|
||||||
|
Balance = OCONV(ICONV(Balance,'MD2'),'MD2,$')
|
||||||
|
Mesg = 'The Current Balance on Annual Contract No ':ACID
|
||||||
|
Mesg := ' for ':CustName:' is below minimum at ':Balance
|
||||||
|
|
||||||
|
Recipient = XLATE('NOTIFICATION','ANN_CONT',NOTIFICATION_USER_ID$,'X')
|
||||||
|
|
||||||
|
Create_Note(Recipient,'System','Annual Contract Balance',Mesg,'ANNUAL_CONTRACTS',ACId)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Status = 'C' AND SaveWarn THEN
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<MTYPE$> = 'BNY'
|
||||||
|
MsgInfo<MTEXT$> = 'This contract is closed!':CRLF$:'Are you sure you wish to save changes?'
|
||||||
|
MsgInfo<MICON$> = '!'
|
||||||
|
SaveIt = Msg(@WINDOW,MsgInfo,'')
|
||||||
|
IF SaveIt THEN
|
||||||
|
Result = 1
|
||||||
|
END ELSE
|
||||||
|
Result = 0
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Result = 1 ;* Perform the write event
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF Security_Check('Annual Contracts',Delete$) THEN
|
||||||
|
Result = 1 ;* Proceed with delete
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Annual Contracts',Delete$)
|
||||||
|
Result = 0 ;* Stop event chain
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
New:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ACNo = Get_Property(@WINDOW,'ID')
|
||||||
|
|
||||||
|
IF ACNo = '' THEN
|
||||||
|
NextACNo = NextKey('ANNUAL_CONTRACTS')
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextACNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUACNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
ACKeys = obj_Annual_Contracts('Find')
|
||||||
|
|
||||||
|
IF ACKeys = '' THEN RETURN
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN ACKeys
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = AcKeys
|
||||||
|
TypeOver<PTITLE$> = 'Annual Contracts'
|
||||||
|
TypeOver<PSELECT$> = 2 ;* multiple select
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
ACKeys = Popup(@WINDOW,TypeOver,'COMP_ANN_CONT')
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
IF INDEX(ACKeys,@VM,1) THEN
|
||||||
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
|
Set_Property(@WINDOW,'QBFLIST',ACKeys)
|
||||||
|
GOSUB Refresh
|
||||||
|
Send_Event(@WINDOW,'QBFIRST')
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:ACKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
QuoteDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* DoubleClick event handler for the Quotes Table
|
||||||
|
|
||||||
|
CtrlEntId = @WINDOW:'.QUOTE_TABLE'
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
|
RowData = Get_Property(CtrlEntId,'ROWDATA')
|
||||||
|
ColData = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
|
||||||
|
IF CurrCol = COL$QUOTE_NO THEN
|
||||||
|
IF RowData<1,CurrCol> = '' THEN
|
||||||
|
OPEN 'DICT.QUOTE' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNo:@VM:@FM
|
||||||
|
SearchString := 'STATUS':@VM:'=O':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'QUOTE', DictVar, QuoteKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF QuoteKeys = '' THEN
|
||||||
|
ErrMsg('No Quotes on file for customer ':CustNo)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(QuoteKeys,@VM,1) THEN
|
||||||
|
|
||||||
|
QuoteKeys := @VM
|
||||||
|
CONVERT @VM TO @RM IN QuoteKeys
|
||||||
|
CALL V119('S','','D','R',QuoteKeys,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN QuoteKeys
|
||||||
|
QuoteKeys[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = QuoteKeys
|
||||||
|
TypeOver<PSELECT$> = 1 ;* Single value select
|
||||||
|
TypeOver<PTITLE$> = 'Open Quotes for ':OCONV(CustNo,'[XLATE_CONV,COMPANY*CO_NAME]')
|
||||||
|
|
||||||
|
QuoteKey = Popup(@WINDOW,TypeOver,'QUOTE')
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
QuoteKey = QuoteKeys
|
||||||
|
END
|
||||||
|
|
||||||
|
IF QuoteKey NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',QuoteKey:@RM:CtrlEntId:@RM:CurrPos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.QUOTE in COMM_ANN_CONT.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
QuoteNo = RowData<CurrCol>
|
||||||
|
IF QuoteNo NE '' THEN
|
||||||
|
obj_AppWindow('ViewRelated','QUOTE2':@RM:QuoteNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ;* End of check for null value in column
|
||||||
|
END ;* End of check for Quote No column
|
||||||
|
|
||||||
|
IF CurrCol = COL$QUOTE_PSN THEN
|
||||||
|
PSNNos = RowData<CurrCol>
|
||||||
|
SWAP ', ' WITH @VM IN PSNNos
|
||||||
|
IF PSNNos NE '' THEN
|
||||||
|
obj_AppWindow('ViewRelated','PROD_SPEC':@RM:PSNNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
|
||||||
|
IF CurrCol = COL$PART_NO AND RowData<CurrCol> = '' THEN
|
||||||
|
|
||||||
|
PSNos = RowData<COL$QUOTE_PSN>
|
||||||
|
SWAP ', ' WITH @VM IN PSNos ;* Changed 11/18/2004 JCH
|
||||||
|
PartNos = XLATE('PROD_SPEC',PSNos,PROD_SPEC_CUST_PART_NO$,'X')
|
||||||
|
|
||||||
|
PartsInTable = ColData<COL$PART_NO>
|
||||||
|
|
||||||
|
TableLineCnt = COUNT(PartsInTable,@VM) + (PartsInTable NE '')
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
Test = PartsInTable[-1,1]
|
||||||
|
UNTIL Test NE @VM
|
||||||
|
PartsInTable[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ExistPartCnt = COUNT(PartsInTable,@VM) + (PartsInTable NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO ExistPartCnt
|
||||||
|
PartInTable = PartsInTable<1,I>
|
||||||
|
LOCATE PartInTable IN PartNos USING @VM Setting Pos THEN
|
||||||
|
PartNos = DELETE(PartNos,1,Pos,0)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No parts available on associated PSN or all parts already added.')
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(PartNos,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PTITLE$> = 'Part Numbers on Product Specification ':PSNos
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDOW,TypeOver,'PART_NO')
|
||||||
|
IF PartNos = '' THEN RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
NewPartCnt = COUNT(PartNos,@VM) + (PartNos NE '')
|
||||||
|
|
||||||
|
LinesAvailable = TableLineCnt - (ExistPartCnt + NewPartCnt)
|
||||||
|
|
||||||
|
IF LinesAvailable <= 0 THEN
|
||||||
|
NewLines = ((LinesAvailable*-1) + 1)
|
||||||
|
FOR I = 1 TO NewLines
|
||||||
|
stat = Send_Message(CtrlEntID, "INSERT", -1, STR(@VM,6))
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(PartNos,@VM,1) THEN
|
||||||
|
QuoteNo = RowData<COL$QUOTE_NO>
|
||||||
|
FOR I = 1 TO COUNT(PartNos,@VM) + (PartNos NE '')
|
||||||
|
|
||||||
|
PartNo = PartNos<1,I>
|
||||||
|
TRow = (CurrRow + I - 1)
|
||||||
|
obj_Appwindow('LUValReturn',QuoteNo:@RM:CtrlEntID:@RM:COL$QUOTE_NO:@FM:(CurrRow + I -1))
|
||||||
|
*Send_Event(CtrlEntID,'CALCULATE',COL$PSTATUS)
|
||||||
|
obj_Appwindow('LUValReturn',PartNo:@RM:CtrlEntID:@RM:COL$PART_NO:@FM:(CurrRow + I -1))
|
||||||
|
NEXT I
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LUValReturn',PartNos:@RM:CtrlEntID:@RM:CurrPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
QuotePC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntId = @WINDOW:'.QUOTE_TABLE'
|
||||||
|
|
||||||
|
Ctrls = CtrlEntId:@RM ; Props = 'SELPOS':@RM
|
||||||
|
Ctrls := CtrlEntId:@RM ; Props := 'LIST':@RM
|
||||||
|
Ctrls := CtrlEntId:@RM ; Props := 'ARRAY':@RM
|
||||||
|
Ctrls := CtrlEntId ; Props := 'PREVSELPOS'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
CurrPos = Vals[1,@RM]
|
||||||
|
ListData = Vals[COL2()+1,@RM]
|
||||||
|
ColData = Vals[COL2()+1,@RM]
|
||||||
|
PrevPos = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
PrevCol = PrevPos<1>
|
||||||
|
PrevRow = PrevPos<2>
|
||||||
|
|
||||||
|
|
||||||
|
QStatus = ListData<CurrRow,COL$QSTATUS>
|
||||||
|
PSNNo = ListData<CurrRow,COL$QUOTE_PSN>
|
||||||
|
|
||||||
|
|
||||||
|
QuoteNo = ListData<PrevRow,COL$QUOTE_NO>
|
||||||
|
PSNNos = ListData<PrevRow,COL$QUOTE_PSN>
|
||||||
|
PartNo = ListData<PrevRow,COL$PART_NO>
|
||||||
|
|
||||||
|
SWAP ', ' WITH @VM IN PSNNos
|
||||||
|
|
||||||
|
IF PrevCol = COL$QUOTE_NO AND QuoteNo NE '' THEN
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
QuoteRec = XLATE('QUOTE',QuoteNo,'','X')
|
||||||
|
IF QuoteRec<QUOTE_CUST_NO$> NE CustNO THEN
|
||||||
|
ErrMsg('Quote is for a different customer!')
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevPos)
|
||||||
|
Send_Event(CtrlEntID,'CALCULATE',COL$QSTATUS)
|
||||||
|
Set_Property(CtrlEntID,'SELPOS',PrevPos)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF PrevCol = COL$PART_NO AND PartNo NE '' THEN
|
||||||
|
PSNParts = XLATE('PROD_SPEC',PSNNos,PROD_SPEC_CUST_PART_NO$,'X')
|
||||||
|
|
||||||
|
LOCATE PartNo IN PSNParts USING @VM SETTING Dummy ELSE
|
||||||
|
ErrMsg('Part No is not listed on the associated PSN!')
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevPos)
|
||||||
|
Set_Property(CtrlEntID,'SELPOS',PrevPos)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_NO'
|
||||||
|
|
||||||
|
DataIn = Get_Property(CtrlName,'TEXT')
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'TEXT','') ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCustNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
|
||||||
|
CustNo = Popup(@WINDOW,TypeOver,'CUSTOMER')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',CustNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ViewCust:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','COMPANY':@RM:CustNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUNameNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
|
||||||
|
IF CompNo NE '' THEN
|
||||||
|
|
||||||
|
* This is the pushbutton - show the short name list
|
||||||
|
OPEN 'DICT.NAMES' TO DictVar THEN
|
||||||
|
SearchString = 'CO_ID':@VM:CompNo:@FM
|
||||||
|
Btree.Extract(SearchString,'NAMES',DictVar,NameNos,'',Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NameNos = '' THEN
|
||||||
|
ErrMsg('No names on file for Customer Number ':CompNo)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
IF INDEX(NameNos,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = NameNos
|
||||||
|
TypeOver<PTITLE$> = 'Contact Names for ':XLATE('COMPANY',CompNo,4,'X')
|
||||||
|
NameNo = Popup(@WINDOW,TypeOver,'COMP_NAME')
|
||||||
|
END ELSE
|
||||||
|
NameNo = NameNos
|
||||||
|
END
|
||||||
|
obj_AppWindow('LUValReturn',NameNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.NAMES in COMM_ANN_CONT routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
NameNo = Popup(@WINDOW,'','NAMES')
|
||||||
|
IF NameNo NE '' THEN
|
||||||
|
obj_AppWindow('LUValReturn',NameNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ViewName:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
NameNo = Get_Property(@WINDOW:'.NAME_NO','TEXT')
|
||||||
|
IF NameNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','NAMES':@RM:NameNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ProdOrdDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ACNo = Get_Property(@WINDOW,'ID')
|
||||||
|
CtrlEntID = @WINDOW:'.PROD_ORDER'
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
OrdNo = Get_Property(CtrlEntID,'CELLPOS',COL$PRO_NO:@FM:CurrRow)
|
||||||
|
IF OrdNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','ORDER2':@RM:OrdNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SendMessage:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ACNo = Get_Property(@WINDOW,'ID')
|
||||||
|
IF ACNo = '' THEN RETURN
|
||||||
|
QBFList = Get_Property(@WINDOW,'QBFLIST')
|
||||||
|
IF QBFList = '' THEN
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
Dummy = Dialog_Box('NOTES_ATTACH',@WINDOW,'ANN_CONT*':ACNo:'*':QBFList)
|
||||||
|
IF QBFList = '' THEN
|
||||||
|
obj_Appwindow('LoadFormKeys', @WINDOW:@RM:ACNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
188
LSL2/STPROC/COMM_APPLICATION.txt
Normal file
188
LSL2/STPROC/COMM_APPLICATION.txt
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
COMPILE FUNCTION Comm_Application(Event,CtrlEntId,CtrlClassId,Parm1,Parm2,Parm3)
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property
|
||||||
|
DECLARE FUNCTION Get_Property
|
||||||
|
|
||||||
|
* Application wide event handlers
|
||||||
|
* initially for support of <ALT><O> and <ALT><C> functionality
|
||||||
|
* 9/27/1999 - John C. Henry - J.C. Henry, Inc.
|
||||||
|
|
||||||
|
EQU COL$ TO 1
|
||||||
|
EQU ROW$ TO 2
|
||||||
|
|
||||||
|
|
||||||
|
IF Event = 'READ' THEN
|
||||||
|
Ctrls = CtrlEntId:@RM:CtrlEntId:@RM:CtrlEntId:@RM:CtrlEntId
|
||||||
|
Props = '@PREV_ID':@RM:'@PREV_REC':@RM:'ID':@RM:'RECORD'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
PrevID = Vals[1,@RM]
|
||||||
|
PrevRec = Vals[COL2()+1,@RM]
|
||||||
|
ID = Vals[COL2()+1,@RM]
|
||||||
|
Record = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
IF PrevID = '' THEN Set_Property(CtrlEntId,'@PREV_ID',ID)
|
||||||
|
IF PrevRec = '' THEN Set_Property(CtrlEntId,'@PREV_REC',Record)
|
||||||
|
|
||||||
|
RETURN 1
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Event = 'WRITE' THEN
|
||||||
|
|
||||||
|
Ctrls = CtrlEntId:@RM:CtrlEntId
|
||||||
|
Props = 'ID':@RM:'RECORD'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
ID = Vals[1,@RM]
|
||||||
|
Record = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
Props = '@PREV_ID':@RM:'@PREV_REC'
|
||||||
|
Vals = ID:@RM:Record
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals) ;* Store off ID and record for defaults
|
||||||
|
|
||||||
|
RETURN 1
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF Event = 'PREV_REC' THEN
|
||||||
|
|
||||||
|
* <ALT><C> - Copy previous record
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:@RM:@WINDOW:@RM:@WINDOW
|
||||||
|
Props = 'FOCUS':@RM:'@PREV_REC':@RM:'CTRLMAP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
CtrlName = Vals[1,@RM]
|
||||||
|
PrevRec = Vals[COL2()+1,@RM]
|
||||||
|
CtrlMap = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
CONVERT @FM TO @RM IN CtrlMap
|
||||||
|
|
||||||
|
PosList = Get_Property(CtrlMap,STR('POS':@RM,COUNT(CtrlMap,@RM)):'POS')
|
||||||
|
ConvList = Get_Property(CtrlMap,STR('CONV':@RM,COUNT(CtrlMap,@RM)):'CONV')
|
||||||
|
|
||||||
|
Ctrls = ''
|
||||||
|
Props = ''
|
||||||
|
Vals = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(PosList,@RM) + (PosList NE '')
|
||||||
|
|
||||||
|
Pos = FIELD(PosList,@RM,I)
|
||||||
|
|
||||||
|
IF Pos NE '' AND Pos > 0 THEN
|
||||||
|
Conv = FIELD(ConvList,@RM,I)
|
||||||
|
Ctrl = FIELD(CtrlMap,@RM,I)
|
||||||
|
|
||||||
|
IF INDEX(Pos,@SVM,1) THEN
|
||||||
|
|
||||||
|
* We're in a Multivalued control i.e. edittable
|
||||||
|
|
||||||
|
CtrlArray = ''
|
||||||
|
|
||||||
|
FOR N = 1 TO COUNT(Pos,@SVM) + (Pos NE '')
|
||||||
|
ColPos = FIELD(Pos,@SVM,N)
|
||||||
|
ColConv = FIELD(Conv,@SVM,N)
|
||||||
|
ColValues = PrevRec<ColPos>
|
||||||
|
IF ColConv NE '' THEN
|
||||||
|
ColValues = OCONV(ColValues,ColConv)
|
||||||
|
END
|
||||||
|
|
||||||
|
CtrlArray<N> = ColValues
|
||||||
|
NEXT N
|
||||||
|
|
||||||
|
Ctrls := Ctrl:@RM
|
||||||
|
Props := 'DEFPROP':@RM
|
||||||
|
Vals := CtrlArray:@RM
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
Value = PrevRec<Pos>
|
||||||
|
|
||||||
|
IF Conv NE '' THEN Value = OCONV(Value,Conv)
|
||||||
|
|
||||||
|
Ctrls := FIELD(CtrlMap,@RM,I):@RM
|
||||||
|
Props := 'DEFPROP':@RM
|
||||||
|
Vals := Value:@RM
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Ctrls[-1,1] = ''
|
||||||
|
Props[-1,1] = ''
|
||||||
|
Vals[-1,1] = ''
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
RETURN ''
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Event = 'PREV_VAL' THEN
|
||||||
|
|
||||||
|
* <ALT><O> - Copy previous field value, also works in the keys fields
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:@RM:@WINDOW:@RM:@WINDOW
|
||||||
|
Props = 'FOCUS':@RM:'@PREV_ID':@RM:'@PREV_REC'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
CtrlName = Vals[1,@RM]
|
||||||
|
PrevID = Vals[COL2()+1,@RM]
|
||||||
|
PrevRec = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
Ctrls = CtrlName:@RM:CtrlName:@RM:CtrlName
|
||||||
|
Props = 'POS':@RM:'PART':@RM:'CONV'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
Pos = Vals[1,@RM]
|
||||||
|
Part = Vals[COL2()+1,@RM]
|
||||||
|
Conv = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
IF Index(Pos,@SVM,1) THEN
|
||||||
|
|
||||||
|
* Multi-Valued control i.e. We're in an edit table
|
||||||
|
|
||||||
|
SelPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
SelCol = SelPos<COL$>
|
||||||
|
SelRow = SelPos<ROW$>
|
||||||
|
|
||||||
|
ColPos = FIELD(Pos,@SVM,SelCol)
|
||||||
|
ColConv = FIELD(Conv,@SVM,SelCol)
|
||||||
|
|
||||||
|
Value = PrevRec<ColPos,SelRow>
|
||||||
|
|
||||||
|
IF Conv NE '' THEN Value = OCONV(Value,ColConv)
|
||||||
|
|
||||||
|
Set_Property(CtrlName,'DEFPROP',Value,SelPos)
|
||||||
|
Set_Property(CtrlName,'SELECTION',1,@FM:LEN(Value))
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
* Single valued control
|
||||||
|
|
||||||
|
IF Pos = 0 THEN
|
||||||
|
Value = FIELD(PrevID,'*',Part)
|
||||||
|
END ELSE
|
||||||
|
Value = PrevRec<Pos>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Conv NE '' THEN Value = OCONV(Value,Conv)
|
||||||
|
|
||||||
|
Set_Property(CtrlName,'DEFPROP',Value)
|
||||||
|
Set_Property(CtrlName,'SELECTION',1,@FM:LEN(Value))
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN ''
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN 0
|
311
LSL2/STPROC/COMM_ASM_PART.txt
Normal file
311
LSL2/STPROC/COMM_ASM_PART.txt
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
COMPILE FUNCTION Comm_ASM_Part(Instruction, Parm1,Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for ASM Part window
|
||||||
|
|
||||||
|
08/28/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Set_List_Box_Data
|
||||||
|
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
||||||
|
DECLARE SUBROUTINE Send_Message
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists
|
||||||
|
DECLARE FUNCTION Dialog_Box, obj_WO_Log, MemberOf, obj_NCR, Send_Message, MemberOf, obj_Popup
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_ASM_Part'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Read' ; GOSUB Read
|
||||||
|
CASE Instruction = 'Write' ; GOSUB Write
|
||||||
|
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||||
|
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||||
|
CASE Instruction = 'Close' ; GOSUB Close
|
||||||
|
CASE Instruction = 'LU_ASMPart' ; GOSUB LU_ASMPart
|
||||||
|
CASE Instruction = 'GasesDC' ; GOSUB GasesDC
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
IF NOT(Security_Check('ASM Part',READ$)) THEN
|
||||||
|
Security_Err_Msg('ASM Part',READ$)
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Result = 1
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('DetailReturn')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LU_ASMPart:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
Retval = Popup(@WINDOW,TypeOver,'ASM_MFC')
|
||||||
|
|
||||||
|
IF RetVal = '' THEN RETURN
|
||||||
|
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:RetVal)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
MFC_DC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReactorNo = Get_Property(@WINDOW:'.REACT_NO','TEXT')
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.MFC_FUNC'
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
|
||||||
|
IF CurrCol = COL$MFC_CODE THEN
|
||||||
|
|
||||||
|
CurrMfcCodes = Get_Property(CtrlEntID,'ARRAY')<COL$MFC_CODE> ;* Existing MFC codes in edit table
|
||||||
|
CurrMfcCodesTrimmed = ''
|
||||||
|
FOR I = 1 TO COUNT(CurrMfcCodes,@VM) + (CurrMfcCodes NE '')
|
||||||
|
IF CurrMfcCodes<1,I> NE '' THEN
|
||||||
|
CurrMfcCodesTrimmed<1,I> = CurrMfcCodes<1,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
CurrMfcCodes = CurrMfcCodesTrimmed
|
||||||
|
CurrMfcCodePositions = obj_Popup('CodePosition','REACT_MFC_FUNC':@RM:CurrMfcCodes)
|
||||||
|
|
||||||
|
MfcCodes = Popup(@WINDOW,'','REACT_MFC_FUNC')
|
||||||
|
|
||||||
|
IF MfcCodes = '' THEN RETURN
|
||||||
|
|
||||||
|
NewMfcCodePositions = obj_Popup('CodePosition','REACT_MFC_FUNC':@RM:MfcCodes)
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(NewMfcCodePositions,@VM) + (NewMfcCodePositions NE '')
|
||||||
|
NewMFcCodePosition = NewMfcCodePositions<1,I>
|
||||||
|
MfcCode = MfcCodes<1,I>
|
||||||
|
LOCATE NewMfcCodePosition IN CurrMfcCodePositions BY 'AR' USING @VM SETTING POS ELSE
|
||||||
|
CurrMfcCodePositions = INSERT(CurrMfcCodePositions,1,POS,0,NewMfcCodePosition)
|
||||||
|
|
||||||
|
Send_Message(CtrlEntID,'INSERT',POS,MfcCode:@VM:@VM)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
Send_Event(@WINDOW:'.MFC_FUNC','CALCULATE',COL$MFC_FUNCTION)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
END ;* End of MfcCode column
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF CurrCol = COL$MFC_SERIAL_NO THEN
|
||||||
|
QuoteNo = Get_Property(CtrlEntID,'CELLPOS',COL$QUOTE_NO:@FM:CurrRow)
|
||||||
|
|
||||||
|
IF OrderNo NE '' AND QuoteNo NE '' THEN
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
DetWindow = 'QUOTE2'
|
||||||
|
DetKeys = QuoteNo
|
||||||
|
DefaultRec = ''
|
||||||
|
RetKey = OrderNo
|
||||||
|
RetPage = 1
|
||||||
|
RetCtrl = CtrlEntID
|
||||||
|
RetPos = CurrPos
|
||||||
|
|
||||||
|
oAParms = DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos
|
||||||
|
|
||||||
|
obj_AppWindow('ViewNewDetail',oAParms)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END ;* End of QuoteNo column
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
GasesDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReactorNo = Get_Property(@WINDOW:'.REACT_NO','TEXT')
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.GASES'
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CurrGases = Get_Property(CtrlEntID,'ARRAY') ;* Existing MFC codes in edit table
|
||||||
|
CurrGasesTrimmed = ''
|
||||||
|
FOR I = 1 TO COUNT(CurrGases,@VM) + (CurrGases NE '')
|
||||||
|
IF CurrGases<1,I> NE '' THEN
|
||||||
|
CurrGasesTrimmed<1,I> = CurrGases<1,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
CurrGases = CurrGasesTrimmed
|
||||||
|
CurrGasesPositions = obj_Popup('CodePosition','REACTOR_GASES':@RM:CurrGases)
|
||||||
|
|
||||||
|
Gases = Popup(@WINDOW,'','REACTOR_GASES')
|
||||||
|
|
||||||
|
IF Gases = '' THEN RETURN
|
||||||
|
|
||||||
|
NewGasesPositions = obj_Popup('CodePosition','REACTOR_GASES':@RM:Gases)
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(NewGasesPositions,@VM) + (NewGasesPositions NE '')
|
||||||
|
NewGasesPosition = NewGasesPositions<1,I>
|
||||||
|
Gas = Gases<1,I>
|
||||||
|
LOCATE NewGasesPosition IN CurrGasesPositions BY 'AR' USING @VM SETTING POS ELSE
|
||||||
|
CurrGasesPositions = INSERT(CurrGasesPositions,1,POS,0,NewGasesPosition)
|
||||||
|
|
||||||
|
Send_Message(CtrlEntID,'INSERT',POS,Gas)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
*Send_Event(@WINDOW:'.MFC_FUNC','CALCULATE',COL$MFC_FUNCTION)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
8
LSL2/STPROC/COMM_CLEAN_INSP.txt
Normal file
8
LSL2/STPROC/COMM_CLEAN_INSP.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
COMPILE FUNCTION Comm_Clean_Insp(Instruction,Parm1,Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Moved to new style commuter 'CLEAN_INSP"
|
||||||
|
*/
|
||||||
|
|
||||||
|
RETURN ''
|
||||||
|
|
161
LSL2/STPROC/COMM_COA.txt
Normal file
161
LSL2/STPROC/COMM_COA.txt
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
COMPILE FUNCTION Comm_Coa(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Coawindow
|
||||||
|
|
||||||
|
04/18/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window,Print_Vend_CofA
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Coa'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Write' ; GOSUB Write
|
||||||
|
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||||
|
CASE Instruction = 'Print' ; GOSUB Print
|
||||||
|
CASE Instruction = 'LUCompNo' ; GOSUB LUCompNo
|
||||||
|
CASE Instruction = 'LotNoGF' ; GOSUB LotNoGF
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Center_Window(@WINDOW)
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:Parm1)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ErrMsg('Records may not be modified.')
|
||||||
|
|
||||||
|
Result = 0 ;* No Writes
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ErrMsg('Records may not be modified.')
|
||||||
|
|
||||||
|
Result = 0 ;* No Deletes
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCompNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompKeys = Collect.IXVals('COA', 'COMP_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN CompKeys
|
||||||
|
|
||||||
|
PopOver = ''
|
||||||
|
PopOver<PDISPLAY$> = CompKeys
|
||||||
|
|
||||||
|
CompanyKey = Popup(@WINDOW,PopOver,'COMPANY_COA')
|
||||||
|
|
||||||
|
IF CompanyKey NE '' THEN
|
||||||
|
obj_AppWindow('LUValReturn',CompanyKey:@RM:@WINDOW:'.COMP_NO')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoGF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.COMP_NO','INVALUE')
|
||||||
|
LotNo = Get_Property(@WINDOW:'.LOT_NO','TEXT')
|
||||||
|
|
||||||
|
IF CompNo NE '' AND LotNo = '' THEN
|
||||||
|
OPEN 'DICT.COA' TO DictCOA THEN
|
||||||
|
SearchString = 'COMP_NO':@VM:CompNo:@FM
|
||||||
|
Btree.Extract(SearchString, 'COA', DictCOA, COAKeys, '', '')
|
||||||
|
|
||||||
|
IF COAKeys = '' THEN RETURN
|
||||||
|
|
||||||
|
COAKeys := @VM
|
||||||
|
CONVERT @VM TO @RM IN COAKeys
|
||||||
|
CALL V119('S','','D','R',COAKeys,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN COAKeys
|
||||||
|
COAKeys[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
PopOver = ''
|
||||||
|
PopOver<PDISPLAY$> = COAKeys
|
||||||
|
|
||||||
|
COAKey = Popup(@WINDOW,PopOver,'COA')
|
||||||
|
|
||||||
|
IF COAKey NE '' THEN
|
||||||
|
LotNo = FIELD(COAKey,'*',2)
|
||||||
|
obj_AppWindow('LUValReturn',LotNo:@RM:@WINDOW:'.LOT_NO')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Print:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CoaID = Get_Property(@WINDOW,'ID')
|
||||||
|
|
||||||
|
IF CoaID = '' THEN RETURN
|
||||||
|
|
||||||
|
Print_Vend_CofA( CoaID, PDFPath )
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
178
LSL2/STPROC/COMM_COA_COC.txt
Normal file
178
LSL2/STPROC/COMM_COA_COC.txt
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
COMPILE FUNCTION Comm_Coa_Coc(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Coa_Coc window
|
||||||
|
|
||||||
|
03/03/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Coa_Coc'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'LUCompNo' ; GOSUB LUCompNo
|
||||||
|
CASE Instruction = 'LotDC' ; GOSUB LotDC
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Center_Window(@WINDOW)
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:Parm1)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCompNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CompanyKeys = Collect.IXVals('COA_COC', 'COMP_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN CompanyKeys
|
||||||
|
|
||||||
|
OverRide = ''
|
||||||
|
OverRide<PMODE$> = 'K'
|
||||||
|
OverRide<PDISPLAY$> = CompanyKeys
|
||||||
|
|
||||||
|
CompanyKey = Popup(@WINDOW,OverRide,'COMPANY2')
|
||||||
|
|
||||||
|
IF CompanyKey = '' THEN RETURN
|
||||||
|
|
||||||
|
OPEN 'DICT.COA_COC' TO DictVar THEN
|
||||||
|
|
||||||
|
TableName = 'COA_COC'
|
||||||
|
Flag = ''
|
||||||
|
Option = ''
|
||||||
|
Search = 'COMP_NO':@VM:CompanyKey:@FM
|
||||||
|
|
||||||
|
Btree.Extract(Search, TableName, DictVar, CoaCocKeys, Option, Flag)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
OverRide = ''
|
||||||
|
OverRide<PMODE$> = 'K'
|
||||||
|
OverRide<PDISPLAY$> = CoaCocKeys
|
||||||
|
CoaCocKey = Popup(@WINDOW,OverRide,'COA_COC')
|
||||||
|
|
||||||
|
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:CoaCocKey)
|
||||||
|
|
||||||
|
|
||||||
|
END ;* End of DICT.COA_COC open
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * *
|
||||||
|
LotDC:
|
||||||
|
* * * * * *
|
||||||
|
|
||||||
|
LotList = Get_Property(@WINDOW:'.VEND_LOT_NO','LIST')
|
||||||
|
CurrPos = Get_Property(@WINDOW:'.VEND_LOT_NO','SELPOS')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
LotNo = LotList<CurrRow,1>
|
||||||
|
|
||||||
|
IF LotNo NE '' THEN
|
||||||
|
xlFileName = Get_Property(@WINDOW:'.XLFILENAME','TEXT')
|
||||||
|
Path = Get_Property(@WINDOW:'.PATH','TEXT')
|
||||||
|
|
||||||
|
TestWacker = xlFileName[1,'_']
|
||||||
|
IF LEN(TestWacker) = 6 AND NUM(TestWacker) THEN
|
||||||
|
WackerNo = TestWacker
|
||||||
|
END ELSE
|
||||||
|
WackerNo = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Frame = Get_Property(@WINDOW, "MDIFRAME")
|
||||||
|
|
||||||
|
Code = ''
|
||||||
|
|
||||||
|
Code<-1> = 'Set objExcel = CreateObject("excel.Application")'
|
||||||
|
Code<-1> = 'objExcel.WindowState = 3'
|
||||||
|
Code<-1> = 'objExcel.Visible = True'
|
||||||
|
|
||||||
|
Code<-1> = 'Path = ':QUOTE(Path:xlFileName)
|
||||||
|
Code<-1> = 'objExcel.Workbooks.Open Path'
|
||||||
|
|
||||||
|
Code<-1> = 'objExcel.Sheets("':WackerNo:'_L").Select'
|
||||||
|
|
||||||
|
hScript = Frame:'.SCRIPTCONTROL'
|
||||||
|
|
||||||
|
swap @tm with crlf$ in Code
|
||||||
|
swap @fm with crlf$ in Code
|
||||||
|
|
||||||
|
script = 'function main(argstring)'
|
||||||
|
script := crlf$:''
|
||||||
|
script := crlf$:'result = 0'
|
||||||
|
script := crlf$:code
|
||||||
|
script := crlf$:'main = result'
|
||||||
|
script := crlf$:''
|
||||||
|
script := crlf$:'end function'
|
||||||
|
language = 'VbScript'
|
||||||
|
strResult = Send_Message( hScript, 'Reset')
|
||||||
|
|
||||||
|
Set_Property( hScript ,'Language',language)
|
||||||
|
|
||||||
|
strResult = Send_Message( hScript, 'AddCode', script )
|
||||||
|
strResult = Send_Message( hScript, 'Run', "main","" )
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
82
LSL2/STPROC/COMM_COMPANY2.txt
Normal file
82
LSL2/STPROC/COMM_COMPANY2.txt
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
COMPILE FUNCTION Comm_Company2(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for COMPANY2 window
|
||||||
|
|
||||||
|
002/29/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, SetInitDirOptions
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Make.List,Set_Property, Send_Event
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Fieldcount
|
||||||
|
DECLARE FUNCTION Collect.Ixvals
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Company2'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'LUComp_No' ; GOSUB LUComp_No
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SetInitDirOptions('-R-SD')
|
||||||
|
InitDir "R:\InboundCofA\*."
|
||||||
|
SubDirectories = @FM:DirList()
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.COA_FOLDER','LIST',SubDirectories)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUComp_No:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompKeys = Collect.IXVals('COA', 'COMP_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN CompKeys
|
||||||
|
|
||||||
|
PopOver = ''
|
||||||
|
PopOver<PDISPLAY$> = CompKeys
|
||||||
|
|
||||||
|
CompanyKey = Popup(@WINDOW,PopOver,'COMPANY_COA')
|
||||||
|
IF CompanyKey NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CO_NO','DEFPROP',CompanyKey)
|
||||||
|
Send_Event(@WINDOW,'READ')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
77
LSL2/STPROC/COMM_COMPANY_FIX.txt
Normal file
77
LSL2/STPROC/COMM_COMPANY_FIX.txt
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
COMPILE FUNCTION Comm_Company_Fix(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for COMPANY_FIX window
|
||||||
|
|
||||||
|
002/29/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, SetInitDirOptions
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Make.List,Set_Property, Send_Event, obj_Appwindow
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Fieldcount
|
||||||
|
DECLARE FUNCTION Collect.Ixvals
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Company_Fix'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'LUCustNo' ; GOSUB LUCustNo
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Create')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCustNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
|
||||||
|
CustNo = Popup(@WINDOW,TypeOver,'CUSTOMER')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',CustNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
142
LSL2/STPROC/COMM_COMP_LOOKUP.txt
Normal file
142
LSL2/STPROC/COMM_COMP_LOOKUP.txt
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
COMPILE SUBROUTINE COMM_COMP_LOOKUP( Instruction, Parm1,Parm2 )
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Commuter module for COMP_LOOKUP window
|
||||||
|
|
||||||
|
07/12/2004 - JCH - J.C. Henry, Inc.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE ErrMsg, obj_Appwindow, Set_Property, Btree.Extract, End_Window
|
||||||
|
DECLARE FUNCTION Get_Property
|
||||||
|
|
||||||
|
EQU TRUE$ TO 1
|
||||||
|
EQU FALSE TO 0
|
||||||
|
|
||||||
|
* Sub Clients Table Equates
|
||||||
|
|
||||||
|
EQU COL$CLIENT_NO TO 1
|
||||||
|
EQU COL$CLIENT_TYPE TO 2
|
||||||
|
EQU COL$CLIENT_NAME TO 3
|
||||||
|
EQU COL$CLIENT_COMPANY TO 4
|
||||||
|
EQU COL$CLIENT_DESC TO 5
|
||||||
|
|
||||||
|
|
||||||
|
ReturnVal = ''
|
||||||
|
|
||||||
|
* Dispather
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'OK' ; GOSUB OK
|
||||||
|
CASE Instruction = 'NameChar' ; GOSUB NameChar
|
||||||
|
CASE Instruction = 'TableDC' ; GOSUB TableDC
|
||||||
|
CASE 1
|
||||||
|
ErrMsg('Invalid Instruction ':QUOTE(Instruction):' passed to COMM_COMP_LOOKUP routine')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN ReturnVal
|
||||||
|
|
||||||
|
* * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * *
|
||||||
|
|
||||||
|
CharacterIn = Parm1<1,1>
|
||||||
|
CompType = Parm1<1,2>
|
||||||
|
ReturnToCtrl = Parm1<2>
|
||||||
|
ReturnToPos = FIELD(Parm1,@FM,3,2) ;* Fields 3 and 4
|
||||||
|
|
||||||
|
obj_AppWindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:".NAME","TEXT",CharacterIn)
|
||||||
|
Set_Property(@WINDOW:'.NAME','SELECTION',LEN(CharacterIn)+1:@FM:65534 )
|
||||||
|
Set_Property(@WINDOW,'@COMP_TYPE',CompType)
|
||||||
|
Set_Property(@WINDOW,'@RETURN_TO_CTRL',ReturnToCtrl)
|
||||||
|
Set_Property(@WINDOW,'@RETURN_TO_POS',ReturnToPos)
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NameChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF Instruction = 'NameChar' THEN
|
||||||
|
CharacterIn = Get_Property(@WINDOW:'.NAME','TEXT')
|
||||||
|
END
|
||||||
|
|
||||||
|
IF LEN(CharacterIn) < 3 OR CharacterIn[-1,1] = ' ' THEN RETURN
|
||||||
|
|
||||||
|
CONVERT ' ' TO @VM IN CharacterIn
|
||||||
|
|
||||||
|
SearchCriteria = ''
|
||||||
|
|
||||||
|
IF INDEX(CharacterIn,@VM,1) THEN
|
||||||
|
LastWord = CharacterIn[-1,'B':@VM] ;* Multiple words in name
|
||||||
|
WordCnt = COUNT(CharacterIn,@VM) + (CharacterIn NE '')
|
||||||
|
FOR I = 1 TO WordCnt
|
||||||
|
SearchCriteria := 'CO_NAME_XREF':@VM:CharacterIn<1,I>:']':@FM
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
SearchCriteria = 'CO_NAME_XREF':@VM:CharacterIn:']':@FM
|
||||||
|
END
|
||||||
|
|
||||||
|
CompType = Get_Property(@WINDOW,'@COMP_TYPE') ;* Can be V(endor), C(ustomer) or O(ther)
|
||||||
|
|
||||||
|
OPEN "DICT.COMPANY" To DictVar THEN
|
||||||
|
|
||||||
|
IF CompType NE '' THEN
|
||||||
|
SearchCriteria := 'CO_TYPE':@VM:CompType:@FM
|
||||||
|
END
|
||||||
|
KeyList = ''
|
||||||
|
Option = ''
|
||||||
|
Flag = ''
|
||||||
|
Btree.Extract(SearchCriteria, 'COMPANY',DictVar,KeyList,Option,Flag)
|
||||||
|
KeyCnt = COUNT(KeyList,@VM) + (KeyList NE '')
|
||||||
|
IF KeyList NE '' THEN
|
||||||
|
NameArray = ''
|
||||||
|
ClientTypes = XLATE('COMPANY',KeyList,'CO_TYPE','X')
|
||||||
|
ClientNames = XLATE('COMPANY',KeyList,'CO_NAME','X')
|
||||||
|
ClientDivisions = XLATE('COMPANY',KeyList,'DIVISION','X')
|
||||||
|
ClientCities = XLATE('COMPANY',KeyList,'CITY','X')
|
||||||
|
NameArray = KeyList:@FM:ClientTypes:@FM:ClientNames:@FM:ClientDivisions:@FM:ClientCities
|
||||||
|
|
||||||
|
END
|
||||||
|
Set_Property(@WINDOW:'.LOOKUP_TABLE','DEFPROP',NameArray)
|
||||||
|
IF KeyCnt = 1 THEN
|
||||||
|
Set_Property(@WINDOW:'.LOOKUP_TABLE','SELPOS',1:@FM:1)
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','FOCUS',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.CLIENT for index lookup')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
TableDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CurrPos = Get_Property(@WINDOW:'.LOOKUP_TABLE','SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
LookupList = Get_Property(@WINDOW:'.LOOKUP_TABLE','LIST')
|
||||||
|
CustNo = LookupList<CurrRow,COL$CLIENT_NO>
|
||||||
|
ReturnToCtrl = Get_Property(@WINDOW,'@RETURN_TO_CTRL')
|
||||||
|
ReturnToPos = Get_Property(@WINDOW,'@RETURN_TO_POS')
|
||||||
|
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
|
||||||
|
obj_AppWindow('LUValReturn',CustNo:@RM:ReturnToCtrl:@RM:ReturnToPos:@RM:1) ;* Last Param (SkipCalculate) required when called from collector
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
99
LSL2/STPROC/COMM_CUSTOMER.txt
Normal file
99
LSL2/STPROC/COMM_CUSTOMER.txt
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
COMPILE FUNCTION Comm_Customer(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for CUSTOMER window
|
||||||
|
|
||||||
|
06/24/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, SetInitDirOptions
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Make.List,Set_Property, Send_Event, obj_Appwindow
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Fieldcount
|
||||||
|
DECLARE FUNCTION Collect.Ixvals
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Customer'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Page' ; GOSUB Page
|
||||||
|
CASE Instruction = 'LUCustNo' ; GOSUB LUCustNo
|
||||||
|
CASE 1
|
||||||
|
debug
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Create')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Page:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Page')
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCustNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
CompKeys = Collect.IXVals('COA', 'COMP_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN CompKeys
|
||||||
|
|
||||||
|
PopOver = ''
|
||||||
|
PopOver<PDISPLAY$> = CompKeys
|
||||||
|
|
||||||
|
CompanyKey = Popup(@WINDOW,PopOver,'COMPANY_COA')
|
||||||
|
IF CompanyKey NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CO_NO','DEFPROP',CompanyKey)
|
||||||
|
Send_Event(@WINDOW,'READ')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
818
LSL2/STPROC/COMM_CUSTOMER_EPI.txt
Normal file
818
LSL2/STPROC/COMM_CUSTOMER_EPI.txt
Normal file
@ -0,0 +1,818 @@
|
|||||||
|
COMPILE FUNCTION Comm_Customer_EPI(Instruction, Parm1,Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Customer_Epi () window
|
||||||
|
|
||||||
|
07/08/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Set_List_Box_Data, SetInitDirOptions
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow,ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note, RList
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message, Msg, Security_Check, RowExists, NextKey
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT QUOTE_SIGS_EQU
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT COMPANY_EQU
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Equates for the SHIP_TO_CUST_NO edit table control
|
||||||
|
EQU COL$SAP_NO TO 2
|
||||||
|
EQU COL$COMPANY TO 3
|
||||||
|
EQU COL$ABBREV TO 4
|
||||||
|
EQU COL$ADDRESS TO 5
|
||||||
|
EQU COL$CSZ TO 6
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Customer_EPI'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Read' ; GOSUB Read
|
||||||
|
CASE Instruction = 'Write' ; GOSUB Write
|
||||||
|
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||||
|
CASE Instruction = 'Page' ; GOSUB Page
|
||||||
|
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||||
|
CASE Instruction = 'Close' ; GOSUB Close
|
||||||
|
CASE Instruction = 'New' ; GOSUB New
|
||||||
|
CASE Instruction = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Instruction = 'LUCompNo' ; GOSUB LUCompNo
|
||||||
|
CASE Instruction = 'CompChar' ; GOSUB CompChar
|
||||||
|
CASE Instruction = 'CompNoLF' ; GOSUB CompNoLF
|
||||||
|
CASE Instruction = 'ViewBillTo' ; GOSUB ViewBillTo
|
||||||
|
CASE Instruction = 'ShipToDC' ; GOSUB ShipToDC
|
||||||
|
CASE Instruction = 'Contacts' ; GOSUB Contacts
|
||||||
|
CASE Instruction = 'AnnConts' ; GOSUB AnnConts
|
||||||
|
CASE Instruction = 'Quotes' ; GOSUB Quotes
|
||||||
|
CASE Instruction = 'ProdSpecs' ; GOSUB ProdSpecs
|
||||||
|
CASE Instruction = 'OpenOrders' ; GOSUB OpenOrders
|
||||||
|
CASE Instruction = 'LUIncoCode' ; GOSUB LUIncoCode
|
||||||
|
CASE Instruction = 'LUShipDocDir' ; GOSUB LUShipDocDir
|
||||||
|
CASE Instruction = 'LUShipDataDir' ; GOSUB LUShipDataDir
|
||||||
|
CASE Instruction = 'LUExportName' ; GOSUB LUExportName
|
||||||
|
CASE Instruction = 'EnableCheckBoxes' ; GOSUB EnableCheckBoxes
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction ':QUOTE(Instruction):' passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Change the security tables to match the table names after conversion and take this note out
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
IF NOT(Security_Check('Company',READ$)) THEN
|
||||||
|
Security_Err_Msg('Company',READ$)
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Set_List_Box_Data(@WINDOW)
|
||||||
|
|
||||||
|
* Provides compatibility with the existing messaging attachment system
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
PassedKeys = FIELD(Parm1,'*',1)
|
||||||
|
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Send_Event(@WINDOW,'PAGE',1)
|
||||||
|
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF Security_Check('Company',EDIT$) THEN
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* enable all database controls
|
||||||
|
END ELSE
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW) ;* disable all database controls
|
||||||
|
END
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.ENTRY_ID':@RM ; Props = 'TEXT':@RM
|
||||||
|
Ctrls := @WINDOW:'.ENTRY_DT' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
EnterBy = Vals[1,@RM]
|
||||||
|
EnterDTM = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
IF EnterBy = '' THEN Vals = 1:@RM ELSE Vals = 0:@RM
|
||||||
|
IF EnterDTM = '' THEN Vals := 1 ELSE Vals := 0
|
||||||
|
|
||||||
|
Props = 'ENABLED':@RM:'ENABLED'
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW,'ID')
|
||||||
|
|
||||||
|
IF CompNo = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.NEW_BUTTON','ENABLED',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.NEW_BUTTON','ENABLED',0)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
IF N NE COL$SAP_NO THEN
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
END
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT Line
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
ShipList = Get_Property(@WINDOW:'.SHIP_TO_CUST_NO','LIST')
|
||||||
|
FOR I = 1 TO COUNT(ShipList,@FM) + (ShipList NE '')
|
||||||
|
IF ShipList<I,COL$SAP_NO> NE '' THEN
|
||||||
|
stat = Send_Message(@WINDOW:'.SHIP_TO_CUST_NO','COLOR_BY_POS',COL$SAP_NO,I,SAP_READ_ONLY$)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
GoSub EnableCheckBoxes
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Page:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Page')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * This is called from the event handler as a PreRead event * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
|
||||||
|
IF NOT(RowExists('COMPANY',CompNo)) THEN
|
||||||
|
IF NOT(Security_Check('Company',WRITE$)) THEN
|
||||||
|
Security_Err_Msg('Company',WRITE$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Forward_Event() ;* passed security, do the read
|
||||||
|
|
||||||
|
EnterBy = Get_Property(@WINDOW:'.ENTRY_ID','TEXT')
|
||||||
|
IF EnterBy = '' THEN
|
||||||
|
CurrDate = OCONV(Date(),'D4/')
|
||||||
|
Set_Property(@WINDOW:'.ENTRY_ID','TEXT',OCONV(@USER4,'[XLATE_CONV,LSL_USERS*FIRST_LAST]'))
|
||||||
|
Set_Property(@WINDOW:'.ENTRY_DATE','TEXT',CurrDate)
|
||||||
|
Set_Property( @WINDOW:'.VISION_CUST_NO', 'FOCUS',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompType = Get_Property(@WINDOW:'.CO_TYPE','INVALUE')
|
||||||
|
|
||||||
|
IF CompType = '' THEN Set_Property(@WINDOW:'.CO_TYPE','TEXT','C')
|
||||||
|
|
||||||
|
Result = 1
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
*IF Security_Check('Company',Delete$) THEN
|
||||||
|
* Result = 1 ;* Proceed with delete
|
||||||
|
*END ELSE
|
||||||
|
Security_Err_Msg('Company',Delete$)
|
||||||
|
Result = 0 ;* Stop event chain
|
||||||
|
*END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
New:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompanyNo = Get_Property(@WINDOW,'ID')
|
||||||
|
|
||||||
|
IF CompanyNo = '' THEN
|
||||||
|
NextCompanyNo = NextKey('COMPANY')
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCompanyNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CompChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CO_NO'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW, "QBFSTATUS") THEN RETURN ;* QBFStatus returns 1 if QBF is active
|
||||||
|
|
||||||
|
|
||||||
|
DataIn = Get_Property(CtrlName,'TEXT')
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'TEXT','') ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCompNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
|
||||||
|
CustNo = Popup(@WINDOW,TypeOver,'CUSTOMER')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',CustNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CompNoLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CO_NO'
|
||||||
|
|
||||||
|
DataIn = Get_Property(CtrlName,'TEXT')
|
||||||
|
|
||||||
|
IF LEN(DataIn) = 6 AND NUM(DataIn) AND DataIn[1,1] = 0 THEN
|
||||||
|
* Must be a Vision Part No
|
||||||
|
OPEN 'DICT.COMPANY' TO DictCompany ELSE
|
||||||
|
ErrMsg('Unable to open "DICT.COMPANY" for lookup in COMM_CUSTOMER_EPI - CompNoLF Method.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SearchString = 'VISION_CUST_NO':@VM:DataIn:@FM
|
||||||
|
Option = ''
|
||||||
|
Flag = ''
|
||||||
|
Btree.Extract(SearchString,'COMPANY',DictCompany,CompNos,Option,Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CompNos = '' THEN
|
||||||
|
ErrMsg('No customer with Vision Customer No ':QUOTE(DataIn):' on file.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Index(CompNos,@VM,1) THEN
|
||||||
|
DEBUG
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LUValReturn',CompNos:@RM:CtrlName:@RM:'')
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUNameNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
|
||||||
|
IF CompNo NE '' THEN
|
||||||
|
|
||||||
|
* This is the pushbutton - show the short name list
|
||||||
|
|
||||||
|
OPEN 'DICT.NAMES' TO DictVar THEN
|
||||||
|
SearchString = 'CO_ID':@VM:CompNo:@FM
|
||||||
|
Btree.Extract(SearchString,'NAMES',DictVar,NameNos,'',Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NameNos = '' THEN
|
||||||
|
ErrMsg('No names on file for Customer Number ':CompNo)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
IF INDEX(NameNos,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = NameNos
|
||||||
|
TypeOver<PTITLE$> = 'Contact Names for ':XLATE('COMPANY',CompNo,4,'X')
|
||||||
|
NameNo = Popup(@WINDOW,TypeOver,'COMP_NAME')
|
||||||
|
END ELSE
|
||||||
|
NameNo = NameNos
|
||||||
|
END
|
||||||
|
obj_AppWindow('LUValReturn',NameNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.NAMES in COMM_ANN_CONT routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
NameNo = Popup(@WINDOW,'','NAMES')
|
||||||
|
IF NameNo NE '' THEN
|
||||||
|
obj_AppWindow('LUValReturn',NameNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ViewName:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
NameNo = Get_Property(@WINDOW:'.NAME_NO','TEXT')
|
||||||
|
IF NameNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','NAMES':@RM:NameNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ViewBillTo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
BillToCustNo = Get_Property(@WINDOW:'.BILL_TO_CUST_NO','TEXT')
|
||||||
|
IF BillToCustNo NE '' THEN
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
Set_Property(@WINDOW:'.CO_NO','TEXT',BillToCustNo)
|
||||||
|
Send_Event(@WINDOW:'.CO_NO','LOSTFOCUS')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ShipToDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntId = @WINDOW:'.SHIP_TO_CUST_NO'
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
|
RowData = Get_Property(CtrlEntId,'ROWDATA')
|
||||||
|
ColData = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
IF RowData<1,1> = '' THEN RETURN
|
||||||
|
|
||||||
|
ShipToCustNo = RowData<1,1>
|
||||||
|
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
Set_Property(@WINDOW:'.CO_NO','TEXT',ShipToCustNo)
|
||||||
|
Send_Event(@WINDOW:'.CO_NO','LOSTFOCUS')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Contacts:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
IF CompNo = '' THEN RETURN
|
||||||
|
|
||||||
|
IF Security_Check('Names',Read$) THEN
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = 'WITH CO_ID "':CompNo:'" BY LAST BY FIRST'
|
||||||
|
|
||||||
|
NameNos = Popup(@WINDOW,TypeOver,'SHOW_NAMES')
|
||||||
|
|
||||||
|
IF NameNos = CHAR(27) THEN RETURN ;* Canceled
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
ParamToPass = NameNos:'*':CompNo
|
||||||
|
Start_Window( 'NAMES', @WINDOW, ParamToPass, '', '' )
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Names',Read$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
AnnConts:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
IF CompNo = '' THEN RETURN
|
||||||
|
|
||||||
|
IF Security_Check('Annual Contracts',Read$) THEN
|
||||||
|
|
||||||
|
OPEN 'DICT.ANNUAL_CONTRACTS' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CompNo:@FM
|
||||||
|
*SearchString := 'STATUS':@VM:'O':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'ANNUAL_CONTRACTS',DictVar,ACIDs,'',Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ACIDs= '' THEN
|
||||||
|
ErrMsg('No Annual Contracts on file for Customer Number ':CustNo)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
IF INDEX(ACIDs,@VM,1) THEN
|
||||||
|
|
||||||
|
ACIDs := @VM
|
||||||
|
CONVERT @VM TO @RM IN ACIDs
|
||||||
|
CALL V119('S','','D','R',ACIDs,'')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
CONVERT @RM TO @VM IN ACIDs
|
||||||
|
ACIDs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = ACIDs
|
||||||
|
TypeOver<PSELECT$> = 2
|
||||||
|
TypeOver<PTITLE$> = 'Annual Contracts for ':XLATE('COMPANY',CompNo,4,'X')
|
||||||
|
ACIDs = Popup(@WINDOW,TypeOver,'COMP_ANN_CONT')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
obj_AppWindow('ViewRelated','ANN_CONT':@RM:ACIDs)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ANNUAL_CONTRACTS in COMM_PROD_ORD routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Annual Contracts',Read$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Quotes:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
IF CompNo = '' THEN RETURN
|
||||||
|
|
||||||
|
IF Security_Check('Quote',Read$) THEN
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = 'WITH CUST_NO "':CompNo:'" BY-DSND ENTRY_DATE'
|
||||||
|
|
||||||
|
QuoteNos = Popup(@WINDOW,TypeOver,'SHOW_QUOTES')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NameNos NE '' THEN
|
||||||
|
obj_AppWindow('ViewRelated','QUOTE2':@RM:QuoteNos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Quote',Read$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ProdSpecs:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
IF CompNo = '' THEN RETURN
|
||||||
|
|
||||||
|
|
||||||
|
IF Security_Check('Prod Spec',Read$) THEN
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = 'WITH CUST_ID "':CompNo:'" BY-DSND REV_DATE'
|
||||||
|
|
||||||
|
PSNos = Popup(@WINDOW,TypeOver,'SHOW_PROD_SPEC')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF PSNos NE '' THEN
|
||||||
|
obj_AppWindow('ViewRelated','PROD_SPEC':@RM:PSNos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Prod Spec',Read$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OpenOrders:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CompNo = Get_Property(@WINDOW:'.CO_NO','TEXT')
|
||||||
|
IF CompNo = '' THEN RETURN
|
||||||
|
|
||||||
|
IF Security_Check('Order',Read$) THEN
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = 'WITH CUST_NO "':CompNo:'" AND WITH CURR_STATUS NE "C" BY-DSND ENTRY_DATE'
|
||||||
|
|
||||||
|
OrderNos = Popup(@WINDOW,TypeOver,'SHOW_ORDERS')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NameNos NE '' THEN
|
||||||
|
obj_AppWindow('ViewRelated','ORDER2':@RM:OrderNos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
Security_Err_Msg('Order',Read$)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUIncoCode:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Result = Popup(@WINDOW,'','INCO_CODES')
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',Result:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
Send_Event(@WINDOW:'.INCO_DESC','CALCULATE')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUShipDocDir:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Directory = "R:\Ship_eMail\" ;* Hard Coded Directory
|
||||||
|
|
||||||
|
SetInitDirOptions("D")
|
||||||
|
InitDir Directory:'*.*'
|
||||||
|
|
||||||
|
SubDirList = ''
|
||||||
|
|
||||||
|
List = DirList()
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
Line = List[1,@FM]
|
||||||
|
List[1,Col2()] = ""
|
||||||
|
UNTIL Line = ''
|
||||||
|
IF Line NE '.' AND Line NE '..' THEN
|
||||||
|
SubDirList<1,-1> = Line
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = SubDirList
|
||||||
|
TypeOver<PTITLE$> = Directory
|
||||||
|
|
||||||
|
SubDir = Popup(@WINDOW,TypeOver,'SINGLE_COLUMN')
|
||||||
|
|
||||||
|
IF SubDir ='' OR SubDir = CHAR(27) THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SHIP_DOC_DIR','DEFPROP',Directory:SubDir)
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUShipDataDir:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Directory = "R:\Ship_Data\" ;* Hard Coded Directory
|
||||||
|
|
||||||
|
SetInitDirOptions("D")
|
||||||
|
InitDir Directory:'*.*'
|
||||||
|
|
||||||
|
SubDirList = ''
|
||||||
|
|
||||||
|
List = DirList()
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
Line = List[1,@FM]
|
||||||
|
List[1,Col2()] = ""
|
||||||
|
UNTIL Line = ''
|
||||||
|
IF Line NE '.' AND Line NE '..' THEN
|
||||||
|
SubDirList<1,-1> = Line
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = SubDirList
|
||||||
|
TypeOver<PTITLE$> = Directory
|
||||||
|
|
||||||
|
SubDir = Popup(@WINDOW,TypeOver,'SINGLE_COLUMN')
|
||||||
|
|
||||||
|
IF SubDir ='' OR SubDir = CHAR(27) THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SHIP_DATA_DIR','DEFPROP',Directory:SubDir)
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUExportName:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
|
||||||
|
RList('SELECT EXPORTS BY NAME WITH NAME [] "_SYSTEM_"', TARGET_ACTIVELIST$, '', '', '' )
|
||||||
|
|
||||||
|
|
||||||
|
Result = PopUp(@WINDOW,'','SHOW_EXPORTS')
|
||||||
|
|
||||||
|
IF Result NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',Result:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * * * *
|
||||||
|
EnableCheckBoxes:
|
||||||
|
* * * * * * * * *
|
||||||
|
Set_Property(@Window:'.SHIP_DATA_FLAG', 'ENABLED', True$)
|
||||||
|
Set_Property(@Window:'.SHIP_DOC_FLAG', 'ENABLED', True$)
|
||||||
|
ShipDocFlag = Get_Property(@Window:'.SHIP_DOC_FLAG', 'DEFPROP')
|
||||||
|
If ShipDocFlag EQ True$ then
|
||||||
|
Set_Property(@Window:'.COB_AUTO_TX_DOC_FLAG', 'ENABLED', True$)
|
||||||
|
end else
|
||||||
|
Set_Property(@Window:'.COB_AUTO_TX_DOC_FLAG', 'ENABLED', False$)
|
||||||
|
end
|
||||||
|
|
||||||
|
ShipDataFlag = Get_Property(@Window:'.SHIP_DATA_FLAG', 'DEFPROP')
|
||||||
|
If ShipDataFlag EQ True$ then
|
||||||
|
Set_Property(@Window:'.STANDARD_COA', 'ENABLED', True$)
|
||||||
|
Set_Property(@Window:'.COB_AUTO_FTP_FLAG', 'ENABLED', True$)
|
||||||
|
end else
|
||||||
|
Set_Property(@Window:'.STANDARD_COA', 'ENABLED', False$)
|
||||||
|
Set_Property(@Window:'.COB_AUTO_FTP_FLAG', 'ENABLED', False$)
|
||||||
|
end
|
||||||
|
StandardCOAFlag = Get_Property(@Window:'.STANDARD_COA', 'DEFPROP')
|
||||||
|
If ShipDataFlag EQ True$ AND StandardCOAFlag = True$ then
|
||||||
|
Set_Property(@Window:'.CMB_FTP_SERVER', 'ENABLED', True$)
|
||||||
|
Set_Property(@Window:'.FTP_DIRECTORY', 'ENABLED', True$)
|
||||||
|
end else
|
||||||
|
Set_Property(@Window:'.CMB_FTP_SERVER', 'ENABLED', False$)
|
||||||
|
Set_Property(@Window:'.FTP_DIRECTORY', 'ENABLED', False$)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
337
LSL2/STPROC/COMM_CUST_TW_PART.txt
Normal file
337
LSL2/STPROC/COMM_CUST_TW_PART.txt
Normal file
@ -0,0 +1,337 @@
|
|||||||
|
COMPILE FUNCTION Comm_Cust_TW_Part(CtrlEntID,Event,Parm1, Parm2, Parm3, Parm4, Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for CUST_TW_PART (Test Wafer Use) window
|
||||||
|
|
||||||
|
12/2/2010 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Btree.Extract
|
||||||
|
DECLARE SUBROUTINE Send_Event, obj_TW_Use, Security_Err_Msg, Post_Event, Start_Window
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg
|
||||||
|
DECLARE FUNCTION obj_Quote, Security_Check
|
||||||
|
|
||||||
|
$INSERT QUOTE_SIGS_EQU
|
||||||
|
$INSERT NOTIFICATION_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT ANNUAL_CONTRACTS_EQU
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Cust_TW_Part'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE CtrlEntID = @WINDOW AND Event = 'CREATE' ; GOSUB Create
|
||||||
|
CASE CtrlEntID = @WINDOW AND Event = 'READ' ; GOSUB Read
|
||||||
|
CASE CtrlEntID = @WINDOW AND Event = 'DELETE' ; GOSUB Delete
|
||||||
|
CASE CtrlEntID = @WINDOW AND Event = 'CLEAR' ; GOSUB Refresh
|
||||||
|
CASE CtrlEntID = @WINDOW AND Event[1,3] = 'QBF' ; GOSUB Refresh
|
||||||
|
|
||||||
|
CASE CtrlEntID = @WINDOW:'.CUST_NO'
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CHAR' ; GOSUB CustChar
|
||||||
|
CASE Event = 'LOSTFOCUS' ; GOSUB LU_TWPartNo
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE CtrlEntID = @WINDOW:'.LU_CUSTOMER' AND Event = 'CLICK' ; GOSUB LUCustNo
|
||||||
|
CASE CtrlEntID = @WINDOW:'.LU_TW_PART' AND Event = 'CLICK' ; GOSUB LU_TWPartNo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine':CRLF$:CtrlEntID:' - ':Event
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
* Provides compatibility with the existing messaging attachment system
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
PassedKeys = FIELD(Parm1,'*',1)
|
||||||
|
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
IOOptions = Get_Property(@WINDOW,'IOOPTIONS')
|
||||||
|
IOOptions<10> = 1 ;* Check for required fields on WRITE event
|
||||||
|
IOOptions<11> = 1 ;* Create READ event on QBF load
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'IOOPTIONS',IOOptions)
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
|
||||||
|
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
|
||||||
|
|
||||||
|
IF RowExists('ORDER_DET',OrderNo:'*':ItemNo) THEN
|
||||||
|
IF NOT(Security_Check('Order',EDIT$)) THEN
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW) ;* disable all database controls
|
||||||
|
Set_Property(@WINDOW,'@READONLY',1)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
IF NOT(Security_Check('Order',WRITE$)) THEN
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
Security_Err_Msg('Order',WRITE$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Post_Event(@WINDOW,'CLOSE')
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
|
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GOTO Refresh
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(Security_Check('Order',DELETE$)) THEN
|
||||||
|
Security_Err_Msg('Order',DELETE$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
*Forward_Event()
|
||||||
|
|
||||||
|
obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* Clear Read Only
|
||||||
|
|
||||||
|
Result = 0
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT Line
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_NO'
|
||||||
|
|
||||||
|
DataIn = Get_Property(CtrlName,'TEXT')
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
*Set_Property(CtrlName,'TEXT','') ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUCustNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
|
||||||
|
CustNo = Popup(@WINDOW,TypeOver,'CUSTOMER')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',CustNo:@RM:FocusControl:@RM:FocusPos)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ViewCust:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','TEXT')
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','CUSTOMER_EPI':@RM:CustNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LU_TWPartNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustNo = Get_Property(@WINDOW:'.CUST_NO','DEFPROP')
|
||||||
|
TWPartNo = Get_Property(@WINDOW:'.TW_PART_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF TWPartNo NE '' THEN RETURN
|
||||||
|
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
OPEN 'CUST_TW_PART' TO FileIn THEN
|
||||||
|
SELECT FileIn
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PMODE$> = 'C'
|
||||||
|
TypeOver<PDISPLAY$> = '0'
|
||||||
|
|
||||||
|
CustTWPartKeys = Popup(@WINDOW,TypeOver,'CUST_TW_PART')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
IF NOT(NUM(CustNo)) THEN
|
||||||
|
* Doing customer lookup based on typed in name
|
||||||
|
Set_Property(CtrlName,'TEXT','') ;* Clear characters input
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNo:@FM
|
||||||
|
OPEN 'DICT.CUST_TW_PART' TO DictVar ELSE
|
||||||
|
ErrMsg('Unable to open DICT.CUST_TW_PART for index lookup.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Options = ''
|
||||||
|
Flag = ''
|
||||||
|
|
||||||
|
BTREE.EXTRACT(SearchString, 'CUST_TW_PART', DictVar, CustTWPartKeys, Options, flag)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CustTWPartKeys = '' THEN
|
||||||
|
ErrMsg('No TW Part Numbers on file for Customer ':QUOTE(CustNo):'.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = CustTWPartKeys
|
||||||
|
|
||||||
|
CustTWPartKeys = Popup(@WINDOW,TypeOver,'CUST_TW_PART')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
END ;* End of check for null Customer numer
|
||||||
|
|
||||||
|
IF CustTWPartKeys NE '' THEN
|
||||||
|
|
||||||
|
IF INDEX(CustTWPartKeys,@VM,1) THEN
|
||||||
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
|
Set_Property(@WINDOW,'QBFLIST',CustTWPartKeys)
|
||||||
|
Send_Event(@WINDOW,'QBFFIRST')
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CustTWPartKeys)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
329
LSL2/STPROC/COMM_DIALOG_CARTON_PACK.txt
Normal file
329
LSL2/STPROC/COMM_DIALOG_CARTON_PACK.txt
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Carton_Pack(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for PACK_CARTON dialog window.
|
||||||
|
|
||||||
|
9/16/2003 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Send_Message
|
||||||
|
DECLARE FUNCTION obj_WM_Out
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$ORDER_NO TO 1 ;* Order Line Item edit table column equates
|
||||||
|
EQU COL$LINE_NO TO 2
|
||||||
|
EQU COL$STEP_NO TO 3
|
||||||
|
EQU COL$CASS_NO TO 4
|
||||||
|
EQU COL$RDS_NO TO 5
|
||||||
|
EQU COL$PART_NO TO 6
|
||||||
|
EQU COL$LOT_NO TO 7
|
||||||
|
EQU COL$REJECT TO 8
|
||||||
|
EQU COL$WAFER_QTY TO 9
|
||||||
|
|
||||||
|
EQU COL$CASS1 TO 1 ;* Carton edit table column equates
|
||||||
|
EQU COL$CASS2 TO 2
|
||||||
|
EQU COL$CASS3 TO 3
|
||||||
|
EQU COL$CASS4 TO 4
|
||||||
|
EQU COL$CASS5 TO 5
|
||||||
|
EQU COL$CASS6 TO 6
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT COC_EQU
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Carton_Pack'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Instructions = 'Create':@FM
|
||||||
|
Instructions := 'PackCarton':@FM
|
||||||
|
Instructions := 'PackNext':@FM
|
||||||
|
Instructions := 'UnpackCarton':@FM
|
||||||
|
Instructions := 'PrintLabels':@FM ;* This functions as the 'OK' button
|
||||||
|
Instructions := 'Cancel'
|
||||||
|
|
||||||
|
RetVal = ''
|
||||||
|
|
||||||
|
LOCATE Instruction IN Instructions USING @FM SETTING Pos THEN
|
||||||
|
ON Pos GOSUB Create,PackCarton,PackNext,UnpackCarton,PrintLabels,Cancel
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN RetVal
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
COCId = Parm1
|
||||||
|
|
||||||
|
IF COCId = '' THEN GOTO Cancel ;* Nothing to do
|
||||||
|
|
||||||
|
* get the current style
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.CASSETTES', 'STYLE')
|
||||||
|
|
||||||
|
/* the style property can be in hex format but bitor only works with decimal integers */
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
AddStyle = 512 ;* MultiLine Select
|
||||||
|
|
||||||
|
Style = BitOr(Style, AddStyle)
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES', "STYLE", Style)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT','Packing Cartons for Certicate of Compliance: ':COCId)
|
||||||
|
|
||||||
|
Void = Center_Window(@WINDOW)
|
||||||
|
|
||||||
|
COCRec = XLATE('COC',COCId,'','X')
|
||||||
|
|
||||||
|
WONo = COCRec<coc_wo$>
|
||||||
|
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||||
|
|
||||||
|
OrderNo = WORec<WO_LOG_ORDER_NO$>
|
||||||
|
OrderRec = XLATE('ORDER',OrderNo,'','X')
|
||||||
|
|
||||||
|
RDSNos = COCRec<COC_RDS_NO$>
|
||||||
|
WOStepNos = COCRec<COC_WO_STEP$>
|
||||||
|
CassNos = COCRec<COC_CASS_NO$>
|
||||||
|
|
||||||
|
|
||||||
|
RDSList = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(WOStepNos,@VM) + (WOStepNos NE '')
|
||||||
|
WMOutKey = WONo:'*':WOStepNos<1,I>:'*':CassNos<1,I>
|
||||||
|
IF RDSNos<1,I> = '' THEN
|
||||||
|
RdsNo = ''
|
||||||
|
WfrsOut = XLATE('WM_OUT',WMOutKey,'WFRS_OUT','X')
|
||||||
|
WfrsRej = XLATE('WM_OUT',WMOutKey,'WFRS_REJ','X')
|
||||||
|
|
||||||
|
PartNo = obj_WM_Out('GetPartNoQtys',WMOutKey)<1> ; IF INDEX(PartNo,@VM,1) THEN PartNo = 'Multi'
|
||||||
|
LotNo = obj_WM_Out('GetLotNos',WMOutKey) ; IF INDEX(LotNo,@VM,1) THEN LotNo = 'Multi'
|
||||||
|
OrderItem = obj_WM_Out('GetOrderItems',WMOutKey) ; IF INDEX(OrderItem,@VM,1) THEN OrderItem = 'Multi'
|
||||||
|
END ELSE
|
||||||
|
RdsNo = RDSNos<1,I>
|
||||||
|
RDSRec = XLATE('RDS',RDSNo,'','X')
|
||||||
|
WfrsOut = XLATE('RDS',RDSNo,'WFRS_OUT','X')
|
||||||
|
WfrsRej = XLATE('RDS',RDSNo,'TOT_REJ','X')
|
||||||
|
PartNo = RDSRec<RDS_PART_NUM$>
|
||||||
|
LotNo = RDSRec<RDS_LOT_NUM$>
|
||||||
|
OrderItem = RDSRec<RDS_ORDER_ITEM$>
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RDSList<I,COL$ORDER_NO> = OrderNo
|
||||||
|
RDSList<I,COL$LINE_NO> = OrderItem
|
||||||
|
RDSList<I,COL$STEP_NO> = WOStepNos<1,I>
|
||||||
|
RDSList<I,COL$CASS_NO> = CassNos<1,I>
|
||||||
|
RDSList<I,COL$RDS_NO> = RDSNo
|
||||||
|
RDSList<I,COL$PART_NO> = PartNo
|
||||||
|
RDSList<I,COL$LOT_NO> = LotNo
|
||||||
|
|
||||||
|
RDSList<I,COL$REJECT> = WfrsRej
|
||||||
|
RDSList<I,COL$WAFER_QTY> = WfrsOut
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','LIST',RDSList)
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CassList = Get_Property(@WINDOW:'.CASSETTES','LIST')
|
||||||
|
|
||||||
|
IF CassList<1,1> = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.PRINT_LABEL_BUTTON','ENABLED',1)
|
||||||
|
Set_Property(@WINDOW:'.PACK_BUTTON','ENABLED',0)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.PRINT_LABEL_BUTTON','ENABLED',0)
|
||||||
|
Set_Property(@WINDOW:'.PACK_BUTTON','ENABLED',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
CartonList = Get_Property(@WINDOW:'.CARTONS','LIST')
|
||||||
|
IF CartonList<1,1> = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.UNPACK_BUTTON','ENABLED',0)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.UNPACK_BUTTON','ENABLED',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PackCarton:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SelectedRows = Get_Property(@WINDOW:'.CASSETTES','SELPOS')<2> ;* Returns list of selected row numbers
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM in SelectedRows
|
||||||
|
|
||||||
|
SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '')
|
||||||
|
|
||||||
|
IF SelCnt > 6 THEN
|
||||||
|
ErrMsg('Maximum of 6 cassettes per carton permitted.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
IF SelCnt = 0 THEN RETURN
|
||||||
|
|
||||||
|
Cassettes = ''
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
Cassette = Get_Property(@WINDOW:'.CASSETTES','CELLPOS',0:@FM:SelectedRows<I>) ;* Retrive rows of data
|
||||||
|
Cassettes<-1> = Cassette
|
||||||
|
NEXT I
|
||||||
|
CONVERT @VM TO '|' IN Cassettes
|
||||||
|
|
||||||
|
CartonList = Get_Property(@WINDOW:'.CARTONS','LIST')
|
||||||
|
|
||||||
|
CartonCnt = COUNT(CartonList,@FM) + (CartonList NE '')
|
||||||
|
NextCartonNo = 1 ;* Find next empty carton number
|
||||||
|
LOOP
|
||||||
|
UNTIL CartonList<NextCartonNo,COL$CASS1> = ''
|
||||||
|
NextCartonNo += 1
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF NextCartonNo = CartonCnt THEN
|
||||||
|
Dummy = Send_Message(@WINDOW:'.CARTONS', "INSERT", -1, @VM:@VM:@VM:@VM:@VM)
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CARTONS','SELPOS',COL$CASS1:@FM:NextCartonNo)
|
||||||
|
Set_Property(@WINDOW:'.CARTONS','ROWDATA',Cassettes) ;* Fill carton with Cassette data
|
||||||
|
|
||||||
|
FOR I = SelCnt TO 1 STEP -1
|
||||||
|
Send_Message(@WINDOW:'.CASSETTES','DELETE',SelectedRows<I>) ;* Remove Cassette rows from list
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PackNext:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CartonPack = Get_Property(@WINDOW:'.CASS_PER_CARTON','TEXT')
|
||||||
|
IF CartonPack = '' THEN RETURN
|
||||||
|
|
||||||
|
SelColumns = ''
|
||||||
|
FOR I = 1 TO CartonPack
|
||||||
|
SelColumns<1,-1> = I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','SELPOS',1:@FM:SelColumns)
|
||||||
|
|
||||||
|
GOTO PackCarton
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
UnpackCarton:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CartonData = Get_Property(@WINDOW:'.CARTONS','ROWDATA')
|
||||||
|
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM IN CartonData
|
||||||
|
CONVERT '|' TO @VM IN CartonData
|
||||||
|
|
||||||
|
CartonCnt = COUNT(CartonData,@VM) + (CartonData NE '')
|
||||||
|
|
||||||
|
CassList = Get_Property(@WINDOW:'.CASSETTES','LIST')
|
||||||
|
|
||||||
|
CassCnt = COUNT(CassList,@FM) + (CassList NE '')
|
||||||
|
|
||||||
|
CassSortArray = ''
|
||||||
|
FOR I = 1 TO CassCnt
|
||||||
|
SortKey = CassList<I,COL$ORDER_NO>:CassList<I,COL$LINE_NO>:CassList<I,COL$STEP_NO>:CassList<I,COL$CASS_NO>
|
||||||
|
UNTIL SortKey = '' ;* Found empty line
|
||||||
|
LOCATE SortKey IN CassSortArray BY 'AR' USING @VM SETTING Pos ELSE
|
||||||
|
CassSortArray = INSERT(CassSortArray,1,Pos,0,SortKey)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
FOR I = 1 TO CartonCnt
|
||||||
|
SortKey = CartonData<I,COL$ORDER_NO>:CartonData<I,COL$LINE_NO>:CartonData<I,COL$STEP_NO>:CartonData<I,COL$CASS_NO>
|
||||||
|
UNTIL SortKey = ''
|
||||||
|
LOCATE SortKey IN CassSortArray BY 'AR' USING @VM SETTING Pos ELSE
|
||||||
|
CassSortArray = INSERT(CassSortArray,1,Pos,0,SortKey)
|
||||||
|
CassList = INSERT(CassList,Pos,0,0,CartonData<I>)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','LIST',CassList) ;* Put cassettes back in the list of cassettes
|
||||||
|
|
||||||
|
CurrCartonRow = Get_Property(@WINDOW:'.CARTONS','SELPOS')<2>
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.CARTONS','DELETE',CurrCartonRow) ;* Remove cassettes from carton
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PrintLabels:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CartonList = Get_Property(@WINDOW:'.CARTONS','LIST')
|
||||||
|
|
||||||
|
SWAP '|' WITH @SVM IN CartonList
|
||||||
|
|
||||||
|
* Strip out any blank columns or rows left from the edit table
|
||||||
|
|
||||||
|
CartonData = ''
|
||||||
|
CLCnt = COUNT(CartonList,@FM) + (CartonList NE '')
|
||||||
|
FOR I = 1 TO CLCnt
|
||||||
|
UNTIL CartonList<I,1> = ''
|
||||||
|
FOR N = 1 TO 6
|
||||||
|
UNTIL CartonList<I,N,1> = ''
|
||||||
|
CartonData<I,N> = CartonList<I,N>
|
||||||
|
NEXT N
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,CartonData)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
699
LSL2/STPROC/COMM_DIALOG_CASS_MET_EXPORT.txt
Normal file
699
LSL2/STPROC/COMM_DIALOG_CASS_MET_EXPORT.txt
Normal file
@ -0,0 +1,699 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Cass_Met_Export(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Cass_Met_Exportwindow.
|
||||||
|
|
||||||
|
10/28/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT WM_OUT_EQUATES
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'CustPNDC' ; GOSUB CustPNDC
|
||||||
|
CASE Method = 'SubPNDC' ; GOSUB SubPNDC
|
||||||
|
CASE Method = 'LotNoDC' ; GOSUB LotNoDC
|
||||||
|
CASE Method = 'PSNoDC' ; GOSUB PSNoDC
|
||||||
|
CASE Method = 'WONoDC' ; GOSUB WONoDC
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SubPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Substrate Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PartNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Substrate Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Lot Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'LOT_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
LotNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
|
RawLotNo = RawLotNos<1,I>
|
||||||
|
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
LotNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF LotNos = '' THEN
|
||||||
|
ErrMsg('No Lot Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
LotNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN LotNos
|
||||||
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN LotNos
|
||||||
|
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PSNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Product Specifications..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PS_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PSNs = ''
|
||||||
|
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
|
||||||
|
RawPSN = RawPSNs<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PSNs = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PSNs = '' THEN
|
||||||
|
ErrMsg('No Product Specifications on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PSNs := @VM
|
||||||
|
CONVERT @VM TO @RM IN PSNs
|
||||||
|
CALL V119('S','','D','R',PSNs,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PSNs
|
||||||
|
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PSNs
|
||||||
|
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PSNs NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN PSNs
|
||||||
|
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WONoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WOKeys = Collect.IXVals('WM_OUT', 'WO_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN WOKeys
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = WOKeys
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
|
||||||
|
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN WOKeys
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','LIST',WOKeys)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Customer numbers *
|
||||||
|
|
||||||
|
SearchString = 'MAKEUP_BOX':@VM:'0':@VM:'':@FM
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVar = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVar NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
|
* LotNumbers *
|
||||||
|
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = LotNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR LotNos = ''
|
||||||
|
LotNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN SearchString := 'LOT_NO':@VM:LotNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Cust Part Number *
|
||||||
|
|
||||||
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = CustPNs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR CustPNs = ''
|
||||||
|
CustPNS[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM
|
||||||
|
|
||||||
|
* Substrate Part Numbers *
|
||||||
|
|
||||||
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = SubPartNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR SubPartNos = ''
|
||||||
|
SubPartNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
|
* PSN Nos *
|
||||||
|
|
||||||
|
PS_NOs = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = PS_NOs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR PS_NOs = ''
|
||||||
|
PS_NOs[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF PS_NOs NE '' THEN SearchString := 'SHIP_PSN':@VM:PS_NOs:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* WO Nos *
|
||||||
|
|
||||||
|
WO_NOs = Get_Property(@WINDOW:'.WO_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = WO_NOs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR WO_NOs = ''
|
||||||
|
WO_NOs[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF WO_NOs NE '' THEN SearchString := 'WO_NO':@VM:WO_NOs:@FM
|
||||||
|
|
||||||
|
* Entry Dates *
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
SearchString := 'RDS_FINAL_SIG_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SearchString := 'RDS_FINAL_SIG_DT':@VM:'<=':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
* Fudge the dates - '~' is not inclusive of the end dates
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
SearchString := 'RDS_FINAL_SIG_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'DICT.WO_MAT' TO DictVar THEN
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting WO_MAT Recrods..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'WO_MAT',DictVar,WMOKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WMOKeys)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_MAT in routine COMM_DIALOG_CASS_MET_EXPORT')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
149
LSL2/STPROC/COMM_DIALOG_CASS_QTY_CHANGE.txt
Normal file
149
LSL2/STPROC/COMM_DIALOG_CASS_QTY_CHANGE.txt
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Cass_Qty_Change(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Cass_Qty_Change window.
|
||||||
|
|
||||||
|
06/06/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$CASS_NO TO 1
|
||||||
|
EQU COL$BATCH_NO TO 2
|
||||||
|
EQU COL$LOT_NO TO 3
|
||||||
|
EQU COL$CURR_QTY TO 4
|
||||||
|
EQU COL$CUST_PART_NO TO 5
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Cass_Qty_Chg'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
WONo = Parm1[1,@FM]
|
||||||
|
CassKeys = Parm1[COL2()+1,@FM]
|
||||||
|
|
||||||
|
Title = 'Work Order: ':WONo:' - Cassette Qty Change'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',Title)
|
||||||
|
|
||||||
|
CassCnt = COUNT(CassKeys,@VM) + (CassKeys NE '')
|
||||||
|
|
||||||
|
CassettesList = ''
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO CassCnt
|
||||||
|
CassKey = CassKeys<1,I>
|
||||||
|
WOMatRec = XLATE('WO_MAT',CassKey,'','X')
|
||||||
|
CassettesList<I,1> = CassKey[-1,'B*']
|
||||||
|
CassettesList<I,2> = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||||
|
CassettesList<I,3> = WOMatRec<WO_MAT_LOT_NO$>
|
||||||
|
CassettesList<I,4> = WOMatRec<WO_MAT_WAFER_QTY$>
|
||||||
|
CassettesList<I,5> = WOMatRec<WO_MAT_CUST_PART_NO$>
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','LIST',CassettesList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.CASSETTES':@RM ; Props = 'SELPOS':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASSETTES':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NEW_CASS_QTY':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.REASON' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
SelCassette = Vals[1,@RM]
|
||||||
|
CassArray = Vals[COL2()+1,@RM]
|
||||||
|
NewCassQty = Vals[COL2()+1,@RM]
|
||||||
|
Reason = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
IF SelCassette = '' THEN
|
||||||
|
ErrMsg('You must select a cassette to change!')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.CASSETTES')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NewCassQty = '' THEN
|
||||||
|
ErrMsg('New Cassette Qty is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.NEW_CASS_QTY')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Reason = '' THEN
|
||||||
|
ErrMsg('Reason is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.REVISION')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SelectedLine = SelCassette<2>
|
||||||
|
|
||||||
|
CassNo = CassArray<COL$CASS_NO,SelectedLine>
|
||||||
|
OrgCassQty = CassArray<COL$CURR_QTY,SelectedLine>
|
||||||
|
|
||||||
|
Result = CassNo:@FM:Reason:@FM:OrgCassQty:@FM:NewCassQty
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
91
LSL2/STPROC/COMM_DIALOG_CHANGE_LOG.txt
Normal file
91
LSL2/STPROC/COMM_DIALOG_CHANGE_LOG.txt
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Change_Log(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Change_Log window.
|
||||||
|
|
||||||
|
07/13/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Send_Event, Btree.Extract
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Change_Log'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'RecentChanges' ; GOSUB RecentChanges
|
||||||
|
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Send_Event(@WINDOW:'.ORDER_CHANGES','CLICK')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
RecentChanges:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
OPEN 'DICT.ORDER_CHANGE' TO DictVar ELSE
|
||||||
|
Errmsg('Unable to open "DICT.ORDER_CHANGE" for index lookup')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SearchString = 'TS_DT':@VM:'>=':OCONV(Date()-90,'D4/'):@FM
|
||||||
|
|
||||||
|
option = ''
|
||||||
|
flag = ''
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER_CHANGE', DictVar, OCKeys, option, flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OCKeys = '' THEN RETURN
|
||||||
|
|
||||||
|
OCKeys := @VM
|
||||||
|
CONVERT @VM TO @RM IN OCKeys
|
||||||
|
CALL V119('S','','D','R',OCKeys,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN OCKeys
|
||||||
|
OCKeys[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = OCkeys
|
||||||
|
|
||||||
|
OrderNo = Popup(@WINDOW,TypeOver,'ORDER_CHANGE_LOG')
|
||||||
|
|
||||||
|
IF OrderNo NE '' THEN
|
||||||
|
obj_Appwindow('ViewRelated','ORDER2':@RM:OrderNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
781
LSL2/STPROC/COMM_DIALOG_COC_QUERY.txt
Normal file
781
LSL2/STPROC/COMM_DIALOG_COC_QUERY.txt
Normal file
@ -0,0 +1,781 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_COC_Query(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_COC_Query window.
|
||||||
|
|
||||||
|
10/28/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract, Comm_Dialog_Order_Find
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Utility, Key_Sort, Msg, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT COC_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_COC_Query'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'WONoDC' ; GOSUB WONoDC
|
||||||
|
CASE Method = 'PONoDC' ; GOSUB PONoDC
|
||||||
|
CASE Method = 'LotDC' ; GOSUB LotDC
|
||||||
|
CASE Method = 'PartDC' ; GOSUB PartDC
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'SelectStatusCodes' ; GOSUB SelectStatusCodes
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.USER_ID','INVALUE',@USER4)
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',2,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
stat = Send_Message(@WINDOW:'.CURR_STATUS','COLOR_BY_POS',2,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PONoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting PO Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.ORDER' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PO_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER', DictVar, OrderKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OrderKeys NE '' THEN
|
||||||
|
RawPONos = XLATE('ORDER',OrderKeys,ORDER_PO_NO$,'X')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PONos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPONos,@VM) + (RawPONos NE '')
|
||||||
|
RawPONo = RawPONos<1,I>
|
||||||
|
LOCATE RawPONo IN PONos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PONos = INSERT(PONos,1,Pos,0,RawPONo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PONos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PONos = '' THEN
|
||||||
|
ErrMsg('No Purchase Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PONos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PONos
|
||||||
|
CALL V119('S','','D','R',PONos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PONos
|
||||||
|
PONos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PONos
|
||||||
|
PONos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PONos NE '' THEN
|
||||||
|
PONos := @VM:@VM
|
||||||
|
Set_Property(@WINDOW:'.PO_NO','DEFPROP',PONos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WONoDC:
|
||||||
|
* * * * * * *
|
||||||
|
DEBUG
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Work Order Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.COC' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'WO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'COC', DictVar, ShipmentKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ShipmentKeys NE '' THEN
|
||||||
|
RawWONos = XLATE('COC',ShipmentKeys,COC_WO$,'X')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
WONos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawWONos,@VM) + (RawWONos NE '')
|
||||||
|
RawWONo = RawWONos<1,I>
|
||||||
|
LOCATE RawWONo IN WONos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
WONos = INSERT(WONos,1,Pos,0,RawWONo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
WONos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF WONos = '' THEN
|
||||||
|
ErrMsg('No Work Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
WONos := @VM
|
||||||
|
CONVERT @VM TO @RM IN WONos
|
||||||
|
CALL V119('S','','D','R',WONos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN WONos
|
||||||
|
WONos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = WONos
|
||||||
|
WONos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF WONos NE '' THEN
|
||||||
|
WONos := @VM:@VM
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','DEFPROP',WONos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.COC in COMM_DIALOG_COC_QUERY.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting PO Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.ORDER' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PO_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER', DictVar, OrderKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OrderKeys NE '' THEN
|
||||||
|
RawPONos = XLATE('ORDER',OrderKeys,ORDER_PO_NO$,'X')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PONos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPONos,@VM) + (RawPONos NE '')
|
||||||
|
RawPONo = RawPONos<1,I>
|
||||||
|
LOCATE RawPONo IN PONos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PONos = INSERT(PONos,1,Pos,0,RawPONo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PONos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PONos = '' THEN
|
||||||
|
ErrMsg('No Purchase Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PONos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PONos
|
||||||
|
CALL V119('S','','D','R',PONos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PONos
|
||||||
|
PONos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PONos
|
||||||
|
PONos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PONos NE '' THEN
|
||||||
|
PONos := @VM:@VM
|
||||||
|
Set_Property(@WINDOW:'.PO_NO','DEFPROP',PONos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PartDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
OrderNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
OrderNo = XLATE('WO_LOG',WOKey,WO_LOG_ORDER_NO$,'X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
LOCATE OrderNo IN OrderNos<Pos> BY 'DR' USING @VM SETTING OPos ELSE
|
||||||
|
OrderNos = INSERT(OrderNos,Pos,OPos,0,OrderNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Purchase Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
debug
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectStatusCodes:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = @WINDOW:'.CURR_STATUS'
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 2 ;* Multiple select
|
||||||
|
|
||||||
|
StatusCodes = Popup(@WINDOW,TypeOver,'RDS_CURR_STATUS')
|
||||||
|
|
||||||
|
IF StatusCodes NE '' THEN
|
||||||
|
ExistingArray = ''
|
||||||
|
FOR I = 1 TO COUNT(StatusCodes,@VM) + (StatusCodes NE '') + 1
|
||||||
|
ExistingArray<1,I> = StatusCodes<1,I>
|
||||||
|
ExistingArray<2,I> = OCONV(StatusCodes<1,I>,'[RDS_CURR_STATUS_CONV]')
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CURR_STATUS','DEFPROP',ExistingArray)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
open 'DICT.COC' to DictCOCTable else
|
||||||
|
Void = msg( '', 'Unable to open DICT.COC...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
SearchStr = ''
|
||||||
|
|
||||||
|
CustIds = Get_Property(@WINDOW:'.CUSTOMER_INFO','ARRAY')<1>
|
||||||
|
EntryDateFrom = Get_Property(@WINDOW:'.ENTRY_DATE_FROM','TEXT')
|
||||||
|
EntryDateThru = Get_Property(@WINDOW:'.ENTRY_DATE_THRU','TEXT')
|
||||||
|
EntryIds = Get_Property(@WINDOW:'.ENTRY_IDS','ARRAY')<1>
|
||||||
|
Wo = Get_Property(@WINDOW:'.WO','ARRAY')
|
||||||
|
Po = Get_Property(@WINDOW:'.PO','ARRAY')
|
||||||
|
swap @vm:@vm with '' in Wo
|
||||||
|
if Wo[-1,1] = @vm then Wo[-1,1] = ''
|
||||||
|
swap @vm:@vm with '' in Po
|
||||||
|
if Po[-1,1] = @vm then Po[-1,1] = ''
|
||||||
|
swap @vm:@vm with '' in CustIds
|
||||||
|
if CustIds[-1,1] = @vm then CustIds[-1,1] = ''
|
||||||
|
swap @vm:@vm with '' in EntryIds
|
||||||
|
if EntryIds[-1,1] = @vm then EntryIds[-1,1] = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if CustIds then
|
||||||
|
SearchStr<-1> = 'WO_CUST_NO_SHIP_TO':@vm:CustIds
|
||||||
|
end
|
||||||
|
if EntryDateFrom and EntryDateThru then
|
||||||
|
SearchStr<-1> = 'ENTRY_DATE':@vm:EntryDateFrom:'...':EntryDateThru
|
||||||
|
end else
|
||||||
|
if EntryDateFrom then
|
||||||
|
SearchStr<-1> = 'ENTRY_DATE':@vm:'>=':EntryDateFrom
|
||||||
|
end
|
||||||
|
if EntryDateThru then
|
||||||
|
SearchStr<-1> = 'ENTRY_DATE':@vm:'<=':EntryDateThru
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if EntryIds then
|
||||||
|
SearchStr<-1> = 'ENTRY_ID':@vm:EntryIds
|
||||||
|
end
|
||||||
|
if Wo then
|
||||||
|
SearchStr<-1> = 'WO':@vm:Wo
|
||||||
|
end
|
||||||
|
if Po then
|
||||||
|
SearchStr<-1> = 'PO':@VM:Po
|
||||||
|
end
|
||||||
|
if SearchStr then
|
||||||
|
SearchStr := @fm
|
||||||
|
Void = utility( 'CURSOR', 'H' )
|
||||||
|
* do a btree.extract
|
||||||
|
btree.extract( SearchStr, 'COC', DictCOCTable, Keys, '', Flag )
|
||||||
|
if Flag <> 0 then
|
||||||
|
Void = msg( '', 'Error while extracting COC records...' )
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
if Keys then
|
||||||
|
convert @vm to @fm in Keys
|
||||||
|
Keys = key_sort( Keys, 'COC', 'CUST_NAME_BILL_TO':@fm:'#ENTRY_DATE', 1 )
|
||||||
|
end_dialog( @window, Keys )
|
||||||
|
end else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'No records found meeting your criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
end
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
end else
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'You have not entered any search criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'DICT.RDS' TO DictRDSTable ELSE
|
||||||
|
ErrMsg( 'Unable to open DICT.RDS...' )
|
||||||
|
End_Dialog( @WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
WONos = Get_Property(@WINDOW:'.WO','ARRAY')<1>
|
||||||
|
Reactors = Get_Property(@WINDOW:'.REACTORS','ARRAY')<1>
|
||||||
|
PSNs = Get_Property(@WINDOW:'.PSN_NOS','ARRAY')<1>
|
||||||
|
QuoteNos = Get_Property(@WINDOW:'.QUOTE_NOS','ARRAY')<1>
|
||||||
|
PONos = Get_Property(@WINDOW:'.PO','ARRAY')<1>
|
||||||
|
PartNos = Get_Property(@WINDOW:'.PART_NUM','ARRAY')<1>
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NUM','ARRAY')<1>
|
||||||
|
CurrStatusCds = Get_Property(@WINDOW:'.CURR_STATUS','ARRAY')<1>
|
||||||
|
CustIds = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<1>
|
||||||
|
|
||||||
|
SWAP @VM:@VM WITH '' IN WONos ; IF WONos[-1,1] = @VM THEN WONos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN Reactors ; IF Reactors[-1,1] = @VM THEN Reactors[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PSNs ; IF PSNs[-1,1] = @VM THEN PSNs[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN QuoteNos ; IF QuoteNos[-1,1] = @VM THEN QuoteNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PONos ; IF PONos[-1,1] = @VM THEN PONos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PartNos ; IF PartNos[-1,1] = @VM THEN PartNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN LotNos ; IF LotNos[-1,1] = @VM THEN LotNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN CurrStatusCds ; IF CurrStatusCds[-1,1] = @VM THEN CurrStatusCds[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN CustIDs ; IF CustIDs[-1,1] = @VM THEN CustIds[-1,1] = ''
|
||||||
|
|
||||||
|
DateInFrom = Get_Property(@WINDOW:'.DATE_IN_FROM','TEXT')
|
||||||
|
DateInThru = Get_Property(@WINDOW:'.DATE_IN_THRU','TEXT')
|
||||||
|
DateOutFrom = Get_Property(@WINDOW:'.DATE_OUT_FROM','TEXT')
|
||||||
|
DateOutThru = Get_Property(@WINDOW:'.DATE_OUT_THRU','TEXT')
|
||||||
|
TimeInFrom = Get_Property(@WINDOW:'.TIME_IN_FROM','TEXT')
|
||||||
|
TimeInThru = Get_Property(@WINDOW:'.TIME_IN_THRU','TEXT')
|
||||||
|
TimeOutFrom = Get_Property(@WINDOW:'.TIME_OUT_FROM','TEXT')
|
||||||
|
TimeOutThru = Get_Property(@WINDOW:'.TIME_OUT_THRU','TEXT')
|
||||||
|
|
||||||
|
SearchStr = ''
|
||||||
|
|
||||||
|
IF WONos THEN SearchStr<-1> = 'WO':@VM:WONos
|
||||||
|
IF Reactors THEN SearchStr<-1> = 'REACTOR':@VM:Reactors
|
||||||
|
IF PSNs THEN SearchStr<-1> = 'PROD_SPEC_ID':@VM:PSNs
|
||||||
|
IF QuoteNos THEN SearchStr<-1> = 'QUOTE_NO':@VM:QuoteNos
|
||||||
|
IF PONos THEN SearchStr<-1> = 'PO':@VM:PONos
|
||||||
|
IF PartNos THEN SearchStr<-1> = 'PART_NUM':@VM:PartNos
|
||||||
|
IF LotNos THEN SearchStr<-1> = 'LOT_NUM':@VM:LotNos
|
||||||
|
IF CurrStatusCds THEN SearchStr<-1> = 'CURR_STATUS':@VM:CurrStatusCds
|
||||||
|
IF CustIds THEN SearchStr<-1> = 'CUST_NO':@VM:CustIds
|
||||||
|
|
||||||
|
|
||||||
|
IF DateInFrom AND DateInThru THEN
|
||||||
|
SearchStr<-1> = 'DATE_IN':@VM:DateInFrom:'...':DateInThru
|
||||||
|
END ELSE
|
||||||
|
IF DateInFrom THEN SearchStr<-1> = 'DATE_IN':@VM:'>=':DateInFrom
|
||||||
|
IF DateInThru THEN SearchStr<-1> = 'DATE_IN':@VM:'<=':DateInThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF DateOutFrom and DateOutThru THEN
|
||||||
|
SearchStr<-1> = 'DATE_OUT':@VM:DateOutFrom:'...':DateOutThru
|
||||||
|
END ELSE
|
||||||
|
IF DateOutFrom THEN SearchStr<-1> = 'DATE_OUT':@VM:'>=':DateOutFrom
|
||||||
|
IF DateOutThru THEN SearchStr<-1> = 'DATE_OUT':@VM:'<=':DateOutThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TimeInFrom and TimeInThru THEN
|
||||||
|
SearchStr<-1> = 'TIME_IN':@VM:TimeInFrom:'...':TimeInThru
|
||||||
|
END ELSE
|
||||||
|
IF TimeInFrom THEN SearchStr<-1> = 'TIME_IN':@VM:'>=':TimeInFrom
|
||||||
|
IF TimeInThru THEN SearchStr<-1> = 'TIME_IN':@VM:'<=':TimeInThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TimeOutFrom and TimeOutThru THEN
|
||||||
|
SearchStr<-1> = 'TIME_OUT':@VM:TimeOutFrom:'...':TimeOutThru
|
||||||
|
END ELSE
|
||||||
|
IF TimeOutFrom THEN SearchStr<-1> = 'TIME_OUT':@VM:'>=':TimeOutFrom
|
||||||
|
IF TimeOutThru THEN SearchStr<-1> = 'TIME_OUT':@VM:'<=':TimeOutThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SearchStr THEN
|
||||||
|
SearchStr := @FM
|
||||||
|
Void = Utility( 'CURSOR', 'H' )
|
||||||
|
* do a btree.extract
|
||||||
|
Btree.Extract( SearchStr, 'RDS', DictRDSTable, RDSNos, '', Flag )
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
End_Dialog( @WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RDSNos THEN
|
||||||
|
CONVERT @VM TO @FM IN RDSNos
|
||||||
|
RDSNos = Key_Sort( RDSNos, 'RDS', 'CUST_NAME':@fm:'WO':@fm:'RUN_ORDER_NUM', 0 )
|
||||||
|
End_Dialog( @WINDOW, RDSNos )
|
||||||
|
END ELSE
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'No records found meeting your criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
END
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
END ELSE
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'You have not entered any search criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
116
LSL2/STPROC/COMM_DIALOG_CUST_INFO.txt
Normal file
116
LSL2/STPROC/COMM_DIALOG_CUST_INFO.txt
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Cust_Info(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Cust_Info window.
|
||||||
|
|
||||||
|
08/06/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Cust_Info'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Title = Parm1[1,@FM]
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',Title)
|
||||||
|
|
||||||
|
Vals = FIELD(Parm1,@FM,2,99)
|
||||||
|
CONVERT @FM TO @RM IN Vals
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.COMPANY':@RM ; Props = 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ATTENTION':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ADDRESS':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CITY':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ST':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ZIP':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.COUNTRY' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.COMPANY':@RM ; Props = 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ATTENTION':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ADDRESS':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CITY':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ST':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.ZIP':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.COUNTRY' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
CONVERT @RM TO @FM IN Vals
|
||||||
|
|
||||||
|
Addr = Vals<3>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
UNTIL Addr[-1,1] NE @TM OR Addr = ''
|
||||||
|
Addr[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
Vals<3> = Addr
|
||||||
|
CONVERT @FM TO @RM IN Vals
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Vals)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
99
LSL2/STPROC/COMM_DIALOG_DATE.txt
Normal file
99
LSL2/STPROC/COMM_DIALOG_DATE.txt
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Date(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Date window.
|
||||||
|
|
||||||
|
09/21/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg,
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Utility, Msg, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Date'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'PickDt' ; GOSUB PickDt
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Note = Parm1<1>
|
||||||
|
DateLabel = Parm1<2>
|
||||||
|
|
||||||
|
IF Note NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.NOTE_TEXT','DEFPROP',Note)
|
||||||
|
END
|
||||||
|
IF DateLabel NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.GENERIC_DT_LABEL','TEXT',DateLabel)
|
||||||
|
END
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PickDt:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1
|
||||||
|
IF ReturnCtrl = '' THEN
|
||||||
|
ReturnCtrl = Get_Property(@WINDOW,'@FOCUS')
|
||||||
|
END ELSE
|
||||||
|
IF INDEX(ReturnCtrl,'.',1) ELSE
|
||||||
|
ReturnCtrl = @WINDOW:'.':ReturnCtrl
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
ReturnVal = OCONV(Dialog_Box("POPUP_MONTH",@WINDOW),'D4/')
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',ReturnVal:@RM:ReturnCtrl:@RM:'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
GenericDt= Get_Property(@WINDOW:'.GENERIC_DT','TEXT')
|
||||||
|
|
||||||
|
|
||||||
|
End_Dialog( @WINDOW, GenericDt )
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
89
LSL2/STPROC/COMM_DIALOG_DATE_RANGE.txt
Normal file
89
LSL2/STPROC/COMM_DIALOG_DATE_RANGE.txt
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Date_Range(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Date_Range window.
|
||||||
|
|
||||||
|
08/07/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg,
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Utility, Msg, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Date_Range'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'PickDt' ; GOSUB PickDt
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PickDt:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1
|
||||||
|
IF ReturnCtrl = '' THEN
|
||||||
|
ReturnCtrl = Get_Property(@WINDOW,'@FOCUS')
|
||||||
|
END ELSE
|
||||||
|
IF INDEX(ReturnCtrl,'.',1) ELSE
|
||||||
|
ReturnCtrl = @WINDOW:'.':ReturnCtrl
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
ReturnVal = OCONV(Dialog_Box("POPUP_MONTH",@WINDOW),'D4/')
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',ReturnVal:@RM:ReturnCtrl:@RM:'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
StartDt = Get_Property(@WINDOW:'.START_DT','TEXT')
|
||||||
|
EndDt = Get_Property(@WINDOW:'.END_DT','TEXT')
|
||||||
|
|
||||||
|
End_Dialog( @WINDOW, StartDt:@FM:EndDt )
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
699
LSL2/STPROC/COMM_DIALOG_EPIPRO_EXPORT.txt
Normal file
699
LSL2/STPROC/COMM_DIALOG_EPIPRO_EXPORT.txt
Normal file
@ -0,0 +1,699 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_EpiPro_Export(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_EpiPro_Exportwindow.
|
||||||
|
|
||||||
|
10/28/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT WM_OUT_EQUATES
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'CustPNDC' ; GOSUB CustPNDC
|
||||||
|
CASE Method = 'SubPNDC' ; GOSUB SubPNDC
|
||||||
|
CASE Method = 'LotNoDC' ; GOSUB LotNoDC
|
||||||
|
CASE Method = 'PSNoDC' ; GOSUB PSNoDC
|
||||||
|
CASE Method = 'WONoDC' ; GOSUB WONoDC
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SubPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Substrate Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PartNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Substrate Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Lot Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'LOT_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
LotNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
|
RawLotNo = RawLotNos<1,I>
|
||||||
|
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
LotNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF LotNos = '' THEN
|
||||||
|
ErrMsg('No Lot Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
LotNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN LotNos
|
||||||
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN LotNos
|
||||||
|
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PSNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Product Specifications..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PS_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PSNs = ''
|
||||||
|
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
|
||||||
|
RawPSN = RawPSNs<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PSNs = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PSNs = '' THEN
|
||||||
|
ErrMsg('No Product Specifications on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PSNs := @VM
|
||||||
|
CONVERT @VM TO @RM IN PSNs
|
||||||
|
CALL V119('S','','D','R',PSNs,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PSNs
|
||||||
|
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PSNs
|
||||||
|
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PSNs NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN PSNs
|
||||||
|
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WONoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WOKeys = Collect.IXVals('WM_OUT', 'WO_NO')
|
||||||
|
|
||||||
|
CONVERT @FM TO @VM IN WOKeys
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = WOKeys
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
|
||||||
|
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN WOKeys
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','LIST',WOKeys)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
If @USER4 EQ 'DANIEL_ST' then debug
|
||||||
|
* Customer numbers *
|
||||||
|
|
||||||
|
SearchString = 'MAKEUP_BOX':@VM:'0':@FM
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVar = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVar NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
|
* LotNumbers *
|
||||||
|
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = LotNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR LotNos = ''
|
||||||
|
LotNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN SearchString := 'LOT_NO':@VM:LotNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Cust Part Number *
|
||||||
|
|
||||||
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = CustPNs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR CustPNs = ''
|
||||||
|
CustPNS[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM
|
||||||
|
|
||||||
|
* Substrate Part Numbers *
|
||||||
|
|
||||||
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = SubPartNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR SubPartNos = ''
|
||||||
|
SubPartNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
|
* PSN Nos *
|
||||||
|
|
||||||
|
PS_NOs = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = PS_NOs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR PS_NOs = ''
|
||||||
|
PS_NOs[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF PS_NOs NE '' THEN SearchString := 'PS_NO':@VM:PS_NOs:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* WO Nos *
|
||||||
|
|
||||||
|
WO_NOs = Get_Property(@WINDOW:'.WO_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = WO_NOs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR WO_NOs = ''
|
||||||
|
WO_NOs[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF WO_NOs NE '' THEN SearchString := 'WO_NO':@VM:WO_NOs:@FM
|
||||||
|
|
||||||
|
* Entry Dates *
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
SearchString := 'SUP_VER_SIG_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SearchString := 'SUP_VER_SIG_DT':@VM:'<=':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
* Fudge the dates - '~' is not inclusive of the end dates
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
SearchString := 'SUP_VER_SIG_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'DICT.WM_OUT' TO DictVar THEN
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting WM_OUT Recrods..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'WM_OUT',DictVar,WMOKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WMOKeys)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WM_OUT in routine COMM_DIALOG_EPIPRO_EXPORT')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
393
LSL2/STPROC/COMM_DIALOG_EPI_PRO_MET.txt
Normal file
393
LSL2/STPROC/COMM_DIALOG_EPI_PRO_MET.txt
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Epi_Pro_Met(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Epi_Pro_Met window.
|
||||||
|
|
||||||
|
05/17/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Send_Event, obj_RDS_Test
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, ErrMsg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, obj_Test_Point_Map, obj_RDS_Test
|
||||||
|
Declare function Error_Services, MemberOf, Get_EventStatus
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RDS_TEST_EQUATES
|
||||||
|
$INSERT RDS_LAYER_EQUATES
|
||||||
|
$INSERT REACT_RUN_EQUATES
|
||||||
|
$INSERT REACTOR_EQUATES
|
||||||
|
$INSERT RDS_EPILOAD
|
||||||
|
$INSERT NCR_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
|
||||||
|
EQU ORP$THICK_READS TO 1
|
||||||
|
EQU ORP$SHEET_RHO_READS TO 2
|
||||||
|
EQU ORP$HGCV1_READS TO 3
|
||||||
|
|
||||||
|
EQU EPI_READS$READ_NO TO 1
|
||||||
|
EQU EPI_READS$THICKNESS TO 2
|
||||||
|
EQU EPI_READS$SHEET_RHO TO 3
|
||||||
|
EQU EPI_READS$HGCV1 TO 4
|
||||||
|
EQU EPI_READS$HGCV2 TO 5
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Epi_Pro_Met'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'Done' ; GOSUB Done
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'ReadingsDel' ; GOSUB ReadingsDel
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
MetNo = FIELD(Parm1,@FM,1)
|
||||||
|
|
||||||
|
IF MetNo = '' THEN
|
||||||
|
ErrMsg('Null MetNo passed to Dialog Box...')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
MetRec = XLATE('RDS_TEST',MetNo,'','X')
|
||||||
|
|
||||||
|
RDSNo = MetRec<RDS_TEST_RDS_NO$>
|
||||||
|
LSId = MetRec<RDS_TEST_LS_ID$>
|
||||||
|
Zone = MetRec<RDS_TEST_ZONE$>
|
||||||
|
TestPointMap = MetRec<RDS_TEST_TEST_POINT_MAP$>
|
||||||
|
|
||||||
|
IF Zone = '' THEN MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS','X')
|
||||||
|
IF Zone = 1 THEN MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS_Z1','X')
|
||||||
|
IF Zone = 2 THEN MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS_Z2','X')
|
||||||
|
|
||||||
|
RdsLSKeys = XLATE('RDS',RDSNo,RDS_RDS_LAYER_KEYS$,'X')
|
||||||
|
ReactorNo = XLATE('REACT_RUN',RDSNo,REACT_RUN_REACTOR$,'X')
|
||||||
|
ReactType = XLATE('REACTOR',ReactorNo,REACTOR_REACT_TYPE$,'X')
|
||||||
|
|
||||||
|
IF INDEX(RdsLSKeys,@VM,1) THEN
|
||||||
|
* Multiple layers
|
||||||
|
|
||||||
|
DepTimeTargets = ''
|
||||||
|
LSCnt = COUNT(RdsLSKeys,@VM) + (RdsLSKeys NE '')
|
||||||
|
|
||||||
|
DepTimeTargets = XLATE('RDS_LAYER',RdsLSKeys,RDS_LAYER_EPI_TIME$,'X')
|
||||||
|
DepTimeTargets = OCONV(DepTimeTargets,'MD1')
|
||||||
|
|
||||||
|
LS1DepTime = ''
|
||||||
|
LS2DepTime = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO LSCnt
|
||||||
|
RdsLSKey = RdsLSKeys<1,I>
|
||||||
|
IF INDEX(RdsLSKey,'L1',1) THEN LS1DepTime = DepTimeTargets<1,I>
|
||||||
|
IF INDEX(RdsLSKey,'L2',1) THEN LS2DepTime = DepTimeTargets<1,I>
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
IF LS1DepTime = '' THEN ErrorMsg = 'Deposit Time for LS1 has not been enterered yet.'
|
||||||
|
IF LS2DepTime = '' THEN ErrorMsg = 'Deposit Time for LS2 has not been enterered yet.'
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
Set_Property('RDS_TEST.MET_NO','DEFPROP',MeTNo)
|
||||||
|
Send_Event('RDS_TEST','READ')
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
TotDepTime = LS1DepTime + LS2DepTime
|
||||||
|
LS1Ratio = LS1DepTime/TotDepTime
|
||||||
|
END
|
||||||
|
MetReadings = ''
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(MetKeys,@VM) + (MetKeys NE '')
|
||||||
|
MetKey = MetKeys<1,I>
|
||||||
|
LMetReadings = obj_RDS_Test('GetReadSet',MetKey)
|
||||||
|
|
||||||
|
IF I = 1 THEN
|
||||||
|
MetReadings<1> = LMetReadings<1> ;* Line Numbers
|
||||||
|
MetReadings<3> = LMetReadings<3> ;* SheetRho
|
||||||
|
MetReadings<4> = LMetReadings<4> ;* Hgcv
|
||||||
|
END
|
||||||
|
|
||||||
|
IF I = 2 THEN
|
||||||
|
MetReadings<5> = LMetReadings<4> ;* Hgcv
|
||||||
|
END
|
||||||
|
|
||||||
|
IF I = 3 THEN
|
||||||
|
MetReadings<2> = LMetReadings<2> ;* Thickness readings
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
LS1Ratio = 1
|
||||||
|
MetReadings = obj_RDS_Test('GetReadSet',MetNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.MET_NO':@RM ; Props = 'TEXT':@RM ; Vals = MetNo:@RM
|
||||||
|
Ctrls := @WINDOW:'.RDS_NO':@RM ; Props := 'TEXT':@RM ; Vals := RDSNo:@RM
|
||||||
|
Ctrls := @WINDOW:'.LS_ID':@RM ; Props := 'TEXT':@RM ; Vals := LSId:@RM
|
||||||
|
Ctrls := @WINDOW:'.ZONE':@RM ; Props := 'TEXT':@RM ; Vals := Zone:@RM
|
||||||
|
Ctrls := @WINDOW:'.TEST_POINT_MAP':@RM ; Props := 'TEXT':@RM ; Vals := TestPointMap:@RM
|
||||||
|
Ctrls := @WINDOW:'.L1_RATIO' ; Props := 'TEXT' ; Vals := LS1Ratio
|
||||||
|
|
||||||
|
IF MetReadings<1> NE '' THEN
|
||||||
|
|
||||||
|
CONVERT @FM TO @RM IN MetReadings
|
||||||
|
oTPM_Parms = TestPointMap:@RM:MetReadings
|
||||||
|
Results = obj_Test_Point_Map('PointToResult',oTPM_Parms)
|
||||||
|
ThicknessArray = FIELD(Results,@FM,2,4)
|
||||||
|
|
||||||
|
Ctrls := @RM:@WINDOW:'.THICKNESS' ; Props := @RM:'DEFPROP' ; Vals := @RM:ThicknessArray<1>
|
||||||
|
Ctrls := @RM:@WINDOW:'.SHEETRHO' ; Props := @RM:'DEFPROP' ; Vals := @RM:ThickNessArray<2>
|
||||||
|
Ctrls := @RM:@WINDOW:'.HGCV1' ; Props := @RM:'DEFPROP' ; Vals := @RM:ThicknessArray<3>
|
||||||
|
Ctrls := @RM:@WINDOW:'.HGCV2' ; Props := @RM:'DEFPROP' ; Vals := @RM:ThickNessArray<4>
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE LSId = 'L1'
|
||||||
|
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',RCV_BLUE$)
|
||||||
|
|
||||||
|
CASE LSId = 'L2'
|
||||||
|
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',PRE_BLUE$)
|
||||||
|
|
||||||
|
CASE LSId = '2'
|
||||||
|
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',INP_BLUE$)
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
Set_Property(@WINDOW:'.LS_ID','BACKCOLOR',GREEN$)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Done:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.TEST_POINT_MAP':@RM ; Props = 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.MET_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.THICKNESS':@RM ; Props := 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.SHEETRHO':@RM ; Props := 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.HGCV1':@RM ; Props := 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.HGCV2':@RM ; Props := 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.L1_RATIO' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
TestPointMap = Vals[1,@RM]
|
||||||
|
MetNo = Vals[COL2()+1,@RM]
|
||||||
|
ThickReads = Vals[COL2()+1,@RM]
|
||||||
|
SheetRhoReads = Vals[COL2()+1,@RM]
|
||||||
|
HgCV1ResReads = Vals[COL2()+1,@RM]
|
||||||
|
HgCV2ResReads = Vals[COL2()+1,@RM]
|
||||||
|
L1Ratio = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
ReadingNos = ''
|
||||||
|
|
||||||
|
|
||||||
|
FOR I = 1 TO 9
|
||||||
|
ReadingNos<1,I> = I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
oTPM_Parms = TestPointMap:@RM:ReadingNos:@RM:ThickReads:@RM:SheetRhoReads:@RM:HgCV1ResReads:@RM:HgCV2ResReads
|
||||||
|
|
||||||
|
EpiReads = obj_Test_Point_Map('ResultToPoint',oTPM_Parms)
|
||||||
|
|
||||||
|
MetRec = XLATE('RDS_TEST',MetNo,'','X')
|
||||||
|
|
||||||
|
Zone = MetRec<RDS_TEST_ZONE$>
|
||||||
|
RDSNo = MetRec<RDS_TEST_RDS_NO$>
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Zone = '1' ; MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS_Z1','X')
|
||||||
|
CASE Zone = '2' ; MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS_Z2','X')
|
||||||
|
CASE 1 ; MetKeys = XLATE('REACT_RUN',RDSNo,'MET_KEYS','X')
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
UpdatesAllowed = True$ ; // Flag to determine if cassette has not been signed for FQA. Assumed not signed yet.
|
||||||
|
Override = False$ ; // Assume no override for now.
|
||||||
|
|
||||||
|
IF INDEX(MetKeys,@VM,1) THEN
|
||||||
|
LOCATE MetNo IN MetKeys USING @VM SETTING Pos THEN
|
||||||
|
MetKeys = DELETE(MetKeys,1,Pos,0)
|
||||||
|
END
|
||||||
|
oRTParms_L1 = ''
|
||||||
|
oRTParms_L2 = ''
|
||||||
|
|
||||||
|
|
||||||
|
FOR J = 1 TO COUNT(EpiReads<1>,@VM) + (EpiReads<1> NE '')
|
||||||
|
oRTParms_L1<ORP$THICK_READS,J> = OCONV(ICONV(EpiReads<EPI_READS$THICKNESS,J> * L1Ratio, 'MD2'),'MD2')
|
||||||
|
oRTParms_L2<ORP$THICK_READS,J> = EpiReads<EPI_READS$THICKNESS,J> - oRTParms_L1<ORP$THICK_READS,J>
|
||||||
|
|
||||||
|
IF EpiReads<EPI_READS$SHEET_RHO,J> NE '' THEN
|
||||||
|
|
||||||
|
oRTParms_L1<ORP$SHEET_RHO_READS,J> = EpiReads<EPI_READS$SHEET_RHO,J>
|
||||||
|
oRTParms_L2<ORP$SHEET_RHO_READS,J> = ''
|
||||||
|
EpiReads<EPI_READS$SHEET_RHO,J> = ''
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
oRTParms_L1<ORP$SHEET_RHO_READS,J> = ''
|
||||||
|
oRTParms_L2<ORP$SHEET_RHO_READS,J> = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
IF EpiReads<EPI_READS$HGCV1,J> NE '' THEN
|
||||||
|
oRTParms_L1<ORP$HGCV1_READS,J> = EpiReads<EPI_READS$HGCV1,J>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF EpiReads<EPI_READS$HGCV2,J> NE '' THEN
|
||||||
|
oRTParms_L2<ORP$HGCV1_READS,J> = EpiReads<EPI_READS$HGCV2,J>
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT J
|
||||||
|
|
||||||
|
CONVERT @FM TO @RM IN oRTParms_L1
|
||||||
|
CONVERT @FM TO @RM IN oRTParms_L2
|
||||||
|
|
||||||
|
obj_RDS_Test('SetReadSet',MetKeys<1,1>:@RM:oRTParms_L1,Override)
|
||||||
|
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
* IF Get_Status(errCode) THEN
|
||||||
|
FileError = @File.Error
|
||||||
|
ErrorNumber = FileError<1>
|
||||||
|
ErrorMessage = FileError<2>
|
||||||
|
* Message = Error_Services('GetMessage')
|
||||||
|
* ErrorNumber = Message[1, ':']
|
||||||
|
* ErrorMessage = Message[Col2() + 1, ':']
|
||||||
|
If ErrorNumber EQ '104' then
|
||||||
|
MsgStruct = ''
|
||||||
|
MsgStruct<MCOL$> = -1
|
||||||
|
MsgStruct<MROW$> = -1
|
||||||
|
// Users belonging to the SPEC_CHANGE security group will be allowed to override the block. However, these
|
||||||
|
// users must confirm that this is what they want.
|
||||||
|
If MemberOf(@User4, 'SPEC_CHANGE') then
|
||||||
|
Override = Msg(@Window, MsgStruct, 'YESNO', '', 'RDS Test' : @FM : ErrorMessage : @TM : @TM : 'Please confirm that you want to override.')
|
||||||
|
If Override EQ True$ then
|
||||||
|
obj_RDS_Test('SetReadSet',MetKeys<1,1>:@RM:oRTParms_L1,Override)
|
||||||
|
end else
|
||||||
|
UpdatesAllowed = False$
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
UpdatesAllowed = False$
|
||||||
|
Msg(@Window, MsgStruct, 'OK', '', 'RDS Test' : @FM : ErrorMessage)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If UpdatesAllowed EQ True$ then
|
||||||
|
obj_RDS_Test('SetReadSet',MetKeys<1,2>:@RM:oRTParms_L2,Override)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
end
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
If UpdatesAllowed EQ True$ then
|
||||||
|
|
||||||
|
oRTParms = ''
|
||||||
|
oRTParms<ORP$THICK_READS> = EpiReads<EPI_READS$THICKNESS>
|
||||||
|
oRTParms<ORP$SHEET_RHO_READS> = EpiReads<EPI_READS$SHEET_RHO>
|
||||||
|
oRTParms<ORP$HGCV1_READS> = EpiReads<EPI_READS$HGCV1>
|
||||||
|
|
||||||
|
CONVERT @FM TO @RM IN oRTParms
|
||||||
|
|
||||||
|
obj_RDS_Test('SetReadSet',MetNo:@RM:oRTParms,Override)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Message = Error_Services('GetMessage')
|
||||||
|
ErrorNumber = Message[1, ':']
|
||||||
|
ErrorMessage = Message[Col2() + 1, ':']
|
||||||
|
If ErrorNumber EQ 'FS104' then
|
||||||
|
MsgStruct = ''
|
||||||
|
MsgStruct<MCOL$> = -1
|
||||||
|
MsgStruct<MROW$> = -1
|
||||||
|
// Users belonging to the SPEC_CHANGE security group will be allowed to override the block. However, these
|
||||||
|
// users must confirm that this is what they want.
|
||||||
|
If MemberOf(@User4, 'SPEC_CHANGE') then
|
||||||
|
Override = Msg(@Window, MsgStruct, 'YESNO', '', 'RDS Test' : @FM : ErrorMessage : @TM : @TM : 'Please confirm that you want to override.')
|
||||||
|
If Override EQ True$ then
|
||||||
|
obj_RDS_Test('SetReadSet',MetKeys<1,1>:@RM:oRTParms,Override)
|
||||||
|
end else
|
||||||
|
UpdatesAllowed = False$
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
UpdatesAllowed = False$
|
||||||
|
Msg(@Window, MsgStruct, 'OK', '', 'RDS Test' : @FM : ErrorMessage)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
Set_Property('RDS_TEST.MET_NO','DEFPROP',MetNo)
|
||||||
|
Send_Event('RDS_TEST','READ')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReadingsDel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DeletedRowIndex = Parm1
|
||||||
|
DeletedRowText = Parm2
|
||||||
|
|
||||||
|
CurrCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
Dummy = Send_Message(CurrCtrl, "INSERT",DeletedRowIndex, DeletedRowText)
|
||||||
|
|
||||||
|
ErrMsg('Rows may not be inserted or deleted.')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
158
LSL2/STPROC/COMM_DIALOG_HOLD.txt
Normal file
158
LSL2/STPROC/COMM_DIALOG_HOLD.txt
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Hold(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Hold window.
|
||||||
|
|
||||||
|
06/09/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Hold'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'LU_UserID' ; GOSUB LU_UserID
|
||||||
|
CASE Method = 'UserIDLF' ; GOSUB UserIDLF
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Transition = Parm1<1>
|
||||||
|
TableName = Parm1<2>
|
||||||
|
HoldType = Parm1<3>
|
||||||
|
|
||||||
|
IF HoldType = '' THEN HoldType = 'HOLD'
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Transition = 'ON' AND HoldType = 'HOLD'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Hold On')
|
||||||
|
WinText = 'Hold Change'
|
||||||
|
|
||||||
|
CASE Transition = 'OFF' AND HoldType = 'HOLD'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Hold Off')
|
||||||
|
WinText = 'Hold Change'
|
||||||
|
|
||||||
|
CASE Transition = 'ON' AND HoldType = 'SHOLD'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Ship Hold On')
|
||||||
|
WinText = 'Ship Hold Change'
|
||||||
|
|
||||||
|
CASE Transition = 'OFF' AND HoldType = 'SHOLD'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Ship Hold Off')
|
||||||
|
WinText = 'Ship Hold Change'
|
||||||
|
|
||||||
|
CASE Transition = 'ESC'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Start Escalation')
|
||||||
|
WinText = TableName:' Escalation Change'
|
||||||
|
|
||||||
|
CASE Transition = 'D-ESC'
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL_FIX','TEXT','Stop Escalation')
|
||||||
|
WinText = TableName:' Escalation Change'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',WinText) ; * Window title in top bar
|
||||||
|
|
||||||
|
UserName = OCONV(@USER4,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.USER_ID','DEFPROP',@USER4)
|
||||||
|
Set_Property(@WINDOW:'.USER_NAME','DEFPROP',UserName)
|
||||||
|
Set_Property(@WINDOW:'.REASON','FOCUS',1)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LU_UserID:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
TypeOver<PDISPLAY$> = 'BY LAST_FIRST'
|
||||||
|
|
||||||
|
UserID = Popup(@WINDOW,TypeOver,'SHOW_USERS')
|
||||||
|
|
||||||
|
IF UserID NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.USER_ID','DEFPROP',UserID)
|
||||||
|
END ELSE
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
UserIDLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
UserID = Get_Property(@WINDOW:'.USER_ID','DEFPROP')
|
||||||
|
|
||||||
|
UserName = OCONV(UserID,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
Set_Property(@WINDOW:'.USER_NAME','DEFPROP',UserName)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
UserID = Get_Property(@WINDOW:'.USER_ID','DEFPROP')
|
||||||
|
Reason = Get_Property(@WINDOW:'.REASON','DEFPROP')
|
||||||
|
Extended = Get_Property(@WINDOW:'.HOLD_EXTENDED','CHECK')
|
||||||
|
|
||||||
|
Result = UserID:@FM:Reason:@FM:Extended
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
729
LSL2/STPROC/COMM_DIALOG_LOAD_EPI_PRO.txt
Normal file
729
LSL2/STPROC/COMM_DIALOG_LOAD_EPI_PRO.txt
Normal file
@ -0,0 +1,729 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Load_Epi_Pro(Method, Parm1, Parm2)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Load_Epi_Pro window.
|
||||||
|
|
||||||
|
03/13/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, obj_RDS2, Send_Event, RDS_React_Run, Send_Info
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, obj_WM_IN, obj_WM_Wfrs, obj_React_Status
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, obj_WM_In, Send_Message, obj_NCR, obj_WM_Wfrs
|
||||||
|
DECLARE FUNCTION SRP_Array, Database_Services, Set_Property
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RDS_TEST_EQUATES
|
||||||
|
$INSERT EPI_SUSCEPTOR_EQUATES
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT EPI_PART_EQUATES
|
||||||
|
$INSERT RDS_EPILOAD
|
||||||
|
$INSERT WO_STEP_EQU
|
||||||
|
$INSERT NCR_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU COL$WM_CASS_IN TO 1
|
||||||
|
EQU COL$WM_SLOT_IN TO 2
|
||||||
|
|
||||||
|
EQU COL$POCKET TO 1
|
||||||
|
EQU COL$USAGE TO 2
|
||||||
|
EQU COL$ZONE TO 3
|
||||||
|
EQU COL$IN_CASS TO 4
|
||||||
|
EQU COL$IN_SLOT TO 5
|
||||||
|
EQU COL$WAFER_TYPE TO 6
|
||||||
|
EQU COL$OUT_CASS TO 7
|
||||||
|
EQU COL$OUT_SLOT TO 8
|
||||||
|
|
||||||
|
EQU COL$NCR_NO TO 1
|
||||||
|
EQU COL$CASS_NO TO 2
|
||||||
|
EQU COL$SLOT_NO TO 3
|
||||||
|
|
||||||
|
EQU EDITABLE$ TO 4
|
||||||
|
EQU PROTECTED$ TO 8 ;* Protected - Edittable COLSTYLE constants
|
||||||
|
EQU MULTILINE_STYLE$ TO 512 ;* MultiLine Select
|
||||||
|
EQU LOCKED$ TO 8192
|
||||||
|
EQU DROPDOWN_STYLE$ TO 131072
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Load_Epi_Pro'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'LoadMat' ; GOSUB LoadMat
|
||||||
|
CASE Method = 'ReturnMat' ; GOSUB ReturnMat
|
||||||
|
CASE Method = 'ReactIR' ; GOSUB ReactIR
|
||||||
|
CASE Method = 'ReactDR' ; GOSUB ReactDR
|
||||||
|
CASE Method = 'TestRun' ; GOSUB TestRun
|
||||||
|
CASE Method = 'ConfigComp' ; GOSUB ConfigComp
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* get the current style
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.WM_IN', 'STYLE')
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.WM_IN', "STYLE", Style)
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'')
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,DROPDOWN_STYLE$)
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles)
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY')
|
||||||
|
|
||||||
|
RDSNo = FIELD(Parm1,@FM,1)
|
||||||
|
CurrentLoad = FIELD(Parm1,@FM,2,99)
|
||||||
|
|
||||||
|
IF RDSNo = '' THEN
|
||||||
|
ErrMsg('Null RDS No passed to Dialog Box...')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
RDSRec = XLATE('RDS',RDSNo,'','X')
|
||||||
|
|
||||||
|
ReactorNo = RDSRec<RDS_REACTOR$>
|
||||||
|
WONo = RDSRec<RDS_WO$>
|
||||||
|
WOStep = FIELD(RDSRec<RDS_WO_STEP_KEY$>,'*',2)
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.RDS_NO':@RM:@WINDOW:'.WO_NO':@RM:@WINDOW:'.WO_STEP':@RM:@WINDOW:'.REACTOR_NO'
|
||||||
|
Props = 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP'
|
||||||
|
Vals = RDSNo:@RM:WONo:@RM:WOStep:@RM:ReactorNo
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
LoadCnt = 0
|
||||||
|
OpenCnt = 0
|
||||||
|
|
||||||
|
RCtrl = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
|
||||||
|
TestInCass = CurrentLoad<COL$IN_CASS> ;* 6/2/2009 JCH Better test for loaded wafers added
|
||||||
|
CONVERT @VM TO '' IN TestInCass ;* 6/2/2009 JCH
|
||||||
|
|
||||||
|
IF TestInCass = '' THEN
|
||||||
|
|
||||||
|
EpiPartNo = XLATE('WO_LOG',WONo,WO_LOG_EPI_PART_NO$,'X')
|
||||||
|
SubWaferSize = XLATE('EPI_PART',EpiPartNo,EPI_PART_SUB_WAFER_SIZE$,'X')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE SubWaferSize = '150 mm 6 in'
|
||||||
|
EpiSusceptor = XLATE('EPI_SUSCEPTOR','6','','X')
|
||||||
|
|
||||||
|
CASE SubWaferSize = '125 mm 5 in'
|
||||||
|
EpiSusceptor = XLATE('EPI_SUSCEPTOR','5','','X')
|
||||||
|
|
||||||
|
CASE SubWaferSize = '200 mm 8 in'
|
||||||
|
EpiSusceptor = XLATE('EPI_SUSCEPTOR','8','','X')
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Epi Part: ':QUOTE(EpiPartNo):' has a wafer size of ':SubWaferSize:'.':CRLF$:CRLF$
|
||||||
|
ErrorMsg := 'The EpiPRO reactors cannot process wafers of this size.'
|
||||||
|
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Pockets = EpiSusceptor<EPI_SUSCEPTOR_POCKET_NO$>
|
||||||
|
Zones = EpiSusceptor<EPI_SUSCEPTOR_POCKET_ZONE$>
|
||||||
|
PTypes = EpiSusceptor<EPI_SUSCEPTOR_POCKET_TYPE$>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(Pockets,@VM) + (Pockets NE '')
|
||||||
|
Set_Property(RCtrl,'CELLPOS',Pockets<1,I>,COL$POCKET:@FM:I) ;* Loads Pocket Numbers - Default data from Susceptor Record
|
||||||
|
Set_Property(RCtrl,'CELLPOS',PTypes<1,I>,COL$USAGE:@FM:I) ;* Test pockets
|
||||||
|
Set_Property(RCtrl,'CELLPOS',Zones<1,I>,COL$ZONE:@FM:I) ;* Zones
|
||||||
|
OpenCnt += 1
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(CurrentLoad<1>,@VM) + (CurrentLoad<1> NE '')
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$POCKET,I>,COL$POCKET:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$USAGE,I>,COL$USAGE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$ZONE,I>,COL$ZONE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$IN_CASS,I>,COL$IN_CASS:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$IN_SLOT,I>,COL$IN_SLOT:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$WAFER_TYPE,I>,COL$WAFER_TYPE:@FM:I)
|
||||||
|
LoadCnt += 1
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@OPEN_POCKETS',OpenCnt)
|
||||||
|
|
||||||
|
|
||||||
|
IF LoadCnt = 0 AND OpenCnt = 0 THEN
|
||||||
|
ErrMsg('LoadCnt = 0 and OpenCnt = 0, internal program error.')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE LoadCnt > 0
|
||||||
|
|
||||||
|
* Loaded
|
||||||
|
|
||||||
|
BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}'
|
||||||
|
BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\b\f0\fs20 Return Material to Inbound Cassette\par'
|
||||||
|
BriefTxt := '\b0\par'
|
||||||
|
BriefTxt := ' 1.) Return Material to Inbound Cassette\b\par'
|
||||||
|
BriefTxt := '\b0\par'
|
||||||
|
BriefTxt := '}'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CONFIG_COMPLETE','VISIBLE',0)
|
||||||
|
Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',0)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','VISIBLE',0)
|
||||||
|
Set_Property(@WINDOW:'.RETURN_MATERIAL','VISIBLE',1)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0)
|
||||||
|
Set_Property(@WINDOW:'.RETURN_MATERIAL','ENABLED',1)
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'')
|
||||||
|
|
||||||
|
ReactorStyles<COL$USAGE> = BitAnd(ReactorStyles<COL$USAGE>,BitNot(DROPDOWN_STYLE$))
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitAnd(ReactorStyles<COL$WAFER_TYPE>,BitNot(DROPDOWN_STYLE$))
|
||||||
|
|
||||||
|
|
||||||
|
ReactorStyles<COL$POCKET> = BitOr(ReactorStyles<COL$POCKET>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$ZONE> = BitOr(ReactorStyles<COL$ZONE>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$IN_CASS> = BitOr(ReactorStyles<COL$IN_CASS>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$IN_SLOT> = BitOr(ReactorStyles<COL$IN_SLOT>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitOr(ReactorStyles<COL$WAFER_TYPE>,PROTECTED$)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'')
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'')
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles)
|
||||||
|
|
||||||
|
|
||||||
|
CASE OpenCnt > 0
|
||||||
|
|
||||||
|
* Ready to Load
|
||||||
|
|
||||||
|
BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}'
|
||||||
|
BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\b\f0\fs20\par'
|
||||||
|
BriefTxt := ' Load Material into EPIPro Reactor\par'
|
||||||
|
BriefTxt := '\b0\par'
|
||||||
|
BriefTxt := ' 1.) Configure Pocket Utilization & Wafer Types\par'
|
||||||
|
BriefTxt := ' 2.) Check Load Configuration Complete checkbox\par'
|
||||||
|
BriefTxt := ' 3.) Verify Inbound Material\par'
|
||||||
|
BriefTxt := ' 4.) Load Material into Reactor\par'
|
||||||
|
BriefTxt := '\par'
|
||||||
|
BriefTxt := '}'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CONFIG_COMPLETE','VISIBLE',1)
|
||||||
|
Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',1)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','VISIBLE',1)
|
||||||
|
Set_Property(@WINDOW:'.RETURN_MATERIAL','VISIBLE',0)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0)
|
||||||
|
Set_Property(@WINDOW:'.RETURN_MATERIAL','ENABLED',0)
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'')
|
||||||
|
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,DROPDOWN_STYLE$)
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitOr(ReactorStyles<COL$WAFER_TYPE>,DROPDOWN_STYLE$)
|
||||||
|
|
||||||
|
ReactorStyles<COL$POCKET> = BitAnd(ReactorStyles<COL$POCKET>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$ZONE> = BitAnd(ReactorStyles<COL$ZONE>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$IN_CASS> = BitAnd(ReactorStyles<COL$IN_CASS>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$IN_SLOT> = BitAnd(ReactorStyles<COL$IN_SLOT>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitAnd(ReactorStyles<COL$WAFER_TYPE>,BitNot(PROTECTED$))
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY')
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'':@VM:'TEST')
|
||||||
|
|
||||||
|
Set_Property('SYSTEM','FOCUS',@WINDOW:'.REACTOR_TABLE')
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.BRIEF_EDITBOX','RTFTEXT',BriefTxt)
|
||||||
|
|
||||||
|
WOStepKey = RDSRec<RDS_WO_STEP_KEY$>
|
||||||
|
|
||||||
|
WONo = WOStepKey[1,'*']
|
||||||
|
WOStep = WOStepKey[COL2()+1,'*']
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RecordLocked = False$
|
||||||
|
InboundMat = Get_Property(@Window:'.WM_IN', 'ARRAY')
|
||||||
|
If InboundMat NE '' then
|
||||||
|
CassNos = InboundMat<1>
|
||||||
|
CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If CassNos NE '' then
|
||||||
|
For each CassNo in CassNos using @VM setting vPos
|
||||||
|
WMInKey = WONo:'*1*':CassNo
|
||||||
|
RecordLocked = Database_Services('IsKeyIDLocked', 'WM_IN', WMInKey)
|
||||||
|
If RecordLocked then
|
||||||
|
LockOwner = Xlate('WM_IN', WMInKey, 'LOCKED_BY', 'X')
|
||||||
|
If LockOwner NE '' then
|
||||||
|
DisplayName = Oconv(LockOwner,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
end else
|
||||||
|
DisplayName = 'an unknown user'
|
||||||
|
end
|
||||||
|
MsgParms = ''
|
||||||
|
MsgParms<1> = 'Record Locked'
|
||||||
|
MsgParms<2> = 'The WM_IN record for this RDS is locked by ':DisplayName:'. Only one user session at a time can edit an RDS.'
|
||||||
|
Msg(@Window, '', 'OK', '', MsgParms)
|
||||||
|
// Disable Load button
|
||||||
|
Set_Property(@Window:'.LOAD_MATERIAL', 'ENABLED', -1)
|
||||||
|
Set_Property(@Window:'.TEST_RUN', 'ENABLED', -1)
|
||||||
|
end
|
||||||
|
Until RecordLocked EQ True$
|
||||||
|
Next CassNo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
WMILocks = Get_Property(@WINDOW,'@LOCKED_WFRS')
|
||||||
|
|
||||||
|
IF WMILocks NE '' THEN
|
||||||
|
obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:WMILocks) ; * Remove locks on the wafer slots
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_WFRS','')
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
|
||||||
|
IF RDSNo NE '' THEN
|
||||||
|
Set_Property('RDS.RDS_NO','DEFPROP',RDSNo)
|
||||||
|
Send_Event('RDS','READ')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RCtrl = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
WMICtrl = @WINDOW:'.WM_IN'
|
||||||
|
|
||||||
|
ReactorList = Get_Property(RCtrl,'LIST')
|
||||||
|
WMInList = Get_Property(WMICtrl,'LIST')
|
||||||
|
|
||||||
|
OpenTestCnt = 0
|
||||||
|
OpenProdCnt = 0
|
||||||
|
|
||||||
|
LineColor = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ReactorList,@FM) + (ReactorList NE '')
|
||||||
|
|
||||||
|
IF ReactorList<I,COL$POCKET> NE '' THEN
|
||||||
|
|
||||||
|
|
||||||
|
IF ReactorList<I,COL$USAGE> = 'TEST' THEN
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,YELLOW$)
|
||||||
|
IF ReactorList<I,COL$WAFER_TYPE> = '' THEN OpenTestCnt += 1
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ReactorList<I,COL$USAGE> = 'DUMMY' THEN
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,WHITE$)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ReactorList<I,COL$USAGE> = 'PROD' OR ReactorList<I,COL$USAGE> = '' THEN
|
||||||
|
Set_Property(RCtrl,'CELLPOS','',COL$USAGE:@FM:I)
|
||||||
|
Zone = ReactorList<I,COL$ZONE>
|
||||||
|
IF Zone = 1 THEN LineColor = RCV_BLUE$
|
||||||
|
IF Zone = 2 THEN LineColor = PRE_BLUE$
|
||||||
|
IF Zone = 3 THEN LineColor = INP_BLUE$
|
||||||
|
IF Zone = 4 THEN LineColor = POS_BLUE$
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,LineColor)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF (ReactorList<I,COL$USAGE> = '' OR ReactorList<I,COL$USAGE> = 'PROD') AND ReactorList<I,COL$WAFER_TYPE> = '' THEN OpenProdCnt += 1
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.OPEN_PROD_POCKETS','DEFPROP',OpenProdCnt)
|
||||||
|
Set_Property(@WINDOW:'.OPEN_TEST_POCKETS','DEFPROP',OpenTestCnt)
|
||||||
|
|
||||||
|
|
||||||
|
ReadyToLoad = 0
|
||||||
|
|
||||||
|
WMICnt = COUNT(WMInList,@FM) + (WMInList NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO WMICnt
|
||||||
|
IF WMInList<I,COL$WM_CASS_IN> NE '' THEN ReadyToLoad = 1
|
||||||
|
UNTIL ReadyToLoad
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||||
|
BlockLoad = Xlate('RDS', RDSNo, 'BLOCK_LOAD', 'X')
|
||||||
|
|
||||||
|
If BlockLoad EQ True$ then ReadyToLoad = False$
|
||||||
|
|
||||||
|
IF ReadyToLoad THEN
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LoadMat:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WMInLoadList = Get_Property(@WINDOW:'.WM_IN','LIST')
|
||||||
|
ReactorList = Get_Property(@WINDOW:'.REACTOR_TABLE','LIST')
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
|
||||||
|
SelectedRows = ''
|
||||||
|
WMIWaferKeys = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(WMInLoadList,@FM) + (WMInLoadList NE '')
|
||||||
|
IF WMInLoadList<I,COL$WM_CASS_IN> NE '' AND WMInLoadList<I,COL$WM_SLOT_IN> NE '' THEN
|
||||||
|
WMIWaferKeys<1,-1> = WONo:'*':WOStep:'*':WMInLoadList<I,COL$WM_CASS_IN>:'*':WMInLoadList<I,COL$WM_SLOT_IN>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
OrgColor = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
obj_RDS2('LoadMat',RDSNo:@RM:ReactorList:@RM:WMIWaferKeys)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
WMILocks = Get_Property(@WINDOW,'@LOCKED_WFRS')
|
||||||
|
|
||||||
|
IF WMILocks NE '' THEN
|
||||||
|
obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:WMILocks) ; * Remove locks on the wafer slots
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_WFRS','')
|
||||||
|
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
Set_Property('RDS.RDS_NO','DEFPROP',RDSNo)
|
||||||
|
Send_Event('RDS','READ')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
GOSUB REFRESH
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReturnMat:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
|
||||||
|
IF RDSNo = '' THEN RETURN
|
||||||
|
|
||||||
|
OrgColor = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
obj_RDS2('ReturnMat',RDSNo)
|
||||||
|
|
||||||
|
Send_Info(STR(' ',60)) ;** - Messaging - **
|
||||||
|
Dummy = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',OrgColor) ;** - Messaging - **
|
||||||
|
|
||||||
|
IF Get_Status(ErrCode) THEN
|
||||||
|
ErrMsg(ErrCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOTO Close
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactIR:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
|
||||||
|
IF RowIndex = '' THEN RETURN
|
||||||
|
|
||||||
|
CtrlID = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
|
||||||
|
Dummy = Send_Message(CtrlID,'DELETE',RowIndex)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactDR:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
RowData = Parm2
|
||||||
|
|
||||||
|
IF RowIndex = '' THEN RETURN
|
||||||
|
|
||||||
|
CtrlID = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
|
||||||
|
Dummy = Send_Message(CtrlID, "INSERT", RowIndex, RowData)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
TestRun:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReactorArray = Get_Property(@WINDOW:'.REACTOR_TABLE','ARRAY')
|
||||||
|
|
||||||
|
Usage = ReactorArray<COL$USAGE>
|
||||||
|
|
||||||
|
IF INDEX(Usage,'PROD',1) = 0 THEN
|
||||||
|
LineCnt = COUNT(Usage,@VM) + (Usage NE '')
|
||||||
|
FOR I = 1 To LineCnt
|
||||||
|
IF ReactorArray<COL$POCKET,I> NE '' AND Usage<1,I> = '' THEN
|
||||||
|
ReactorArray<COL$USAGE,I> = 'DUMMY'
|
||||||
|
END
|
||||||
|
Set_Property(@WINDOW:'.REACTOR_TABLE','ARRAY',ReactorArray)
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ConfigComp:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
|
||||||
|
CComp = Get_Property(@WINDOW:'.CONFIG_COMPLETE','CHECK')
|
||||||
|
|
||||||
|
IF CComp THEN
|
||||||
|
|
||||||
|
* Check for more pockets configured than avaible inbound wafers *
|
||||||
|
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
|
||||||
|
RemainingWafers = obj_WM_In('RemainingSlots',WONo:@RM:WoStep)
|
||||||
|
|
||||||
|
RWCnt = COUNT(RemainingWafers,@FM) + (RemainingWafers NE '')
|
||||||
|
|
||||||
|
OpenProdPockets = Get_Property(@WINDOW:'.OPEN_PROD_POCKETS','DEFPROP')
|
||||||
|
OpenTestPockets = Get_Property(@WINDOW:'.OPEN_TEST_POCKETS','DEFPROP')
|
||||||
|
|
||||||
|
OpenPockets = OpenProdPockets + OpenTestPockets
|
||||||
|
|
||||||
|
IF OpenPockets > RWCnt THEN
|
||||||
|
Title = 'EpiPRO Reactor Load Configuration'
|
||||||
|
Message = 'There are more slots configured for loading (':OpenPockets:') than WMI wafers remaining to load (':RWCnt:').':CRLF$:CRLF$
|
||||||
|
Message := 'Change ':(OpenPockets - RWCnt):' additional pockets to DUMMY load to correct.'
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MICON$> = '*'
|
||||||
|
|
||||||
|
Msg(@WINDOW,TypeOver,'OK','',Title:@FM:Message)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CONFIG_COMPLETE','CHECK',0)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
END ;* End of check for more open slots than WMI wafers remaining to be used.
|
||||||
|
|
||||||
|
|
||||||
|
* "lock down" reactor setup fields from further changes *
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'')
|
||||||
|
|
||||||
|
ReactorStyles<COL$USAGE> = BitAnd(ReactorStyles<COL$USAGE>,BitNot(DROPDOWN_STYLE$))
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitAnd(ReactorStyles<COL$WAFER_TYPE>,BitNot(DROPDOWN_STYLE$))
|
||||||
|
|
||||||
|
ReactorStyles<COL$POCKET> = BitOr(ReactorStyles<COL$POCKET>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$ZONE> = BitOr(ReactorStyles<COL$ZONE>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$IN_CASS> = BitOr(ReactorStyles<COL$IN_CASS>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$IN_SLOT> = BitOr(ReactorStyles<COL$IN_SLOT>,PROTECTED$)
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitOr(ReactorStyles<COL$WAFER_TYPE>,PROTECTED$)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'')
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'')
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',0)
|
||||||
|
|
||||||
|
* Build list of WMI wafers to load *
|
||||||
|
|
||||||
|
NeededProduct = FIELD(RemainingWafers,@FM,1,OpenPockets)
|
||||||
|
|
||||||
|
WMIWaferKeys = ''
|
||||||
|
WMICnt = COUNT(NeededProduct,@FM) + (NeededProduct NE '')
|
||||||
|
FOR I = 1 TO WMICnt
|
||||||
|
WMIWaferKeys<1,I> = WONo:'*':WOStep:'*':NeededProduct<I,1>:'*':NeededProduct<I,2>
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
LockedWMIKeys = obj_WM_Wfrs('LockSet','WMI_WFRS':@RM:WMIWaferKeys)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_WFRS',LockedWMIKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR M = 1 TO OpenPockets
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS',NeededProduct<M,1>,1:@FM:M)
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS',NeededProduct<M,2>,2:@FM:M)
|
||||||
|
NEXT M
|
||||||
|
|
||||||
|
FOR M = OpenPockets + 1 TO 25
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS','',1:@FM:M)
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS','',2:@FM:M)
|
||||||
|
NEXT M
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'')
|
||||||
|
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,DROPDOWN_STYLE$)
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitOr(ReactorStyles<COL$WAFER_TYPE>,DROPDOWN_STYLE$)
|
||||||
|
|
||||||
|
ReactorStyles<COL$POCKET> = BitAnd(ReactorStyles<COL$POCKET>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$USAGE> = BitAnd(ReactorStyles<COL$USAGE>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$ZONE> = BitAnd(ReactorStyles<COL$ZONE>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$IN_CASS> = BitAnd(ReactorStyles<COL$IN_CASS>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$IN_SLOT> = BitAnd(ReactorStyles<COL$IN_SLOT>,BitNot(PROTECTED$))
|
||||||
|
ReactorStyles<COL$WAFER_TYPE> = BitAnd(ReactorStyles<COL$WAFER_TYPE>,BitNot(PROTECTED$))
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY')
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'':@VM:'TEST')
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',1)
|
||||||
|
|
||||||
|
LockedWMIKeys = Get_Property(@WINDOW,'@LOCKED_WFRS')
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:LockedWMIKeys)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_WFRS','')
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR M = 1 TO 25
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS','',1:@FM:M)
|
||||||
|
Set_Property(@WINDOW:'.WM_IN','CELLPOS','',2:@FM:M)
|
||||||
|
NEXT M
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RecordLocked = False$
|
||||||
|
InboundMat = Get_Property(@Window:'.WM_IN', 'ARRAY')
|
||||||
|
If InboundMat NE '' then
|
||||||
|
CassNos = InboundMat<1>
|
||||||
|
CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If CassNos NE '' then
|
||||||
|
For each CassNo in CassNos using @VM setting vPos
|
||||||
|
WMInKey = WONo:'*1*':CassNo
|
||||||
|
RecordLocked = Database_Services('IsKeyIDLocked', 'WM_IN', WMInKey)
|
||||||
|
If RecordLocked then
|
||||||
|
LockOwner = Xlate('WM_IN', WMInKey, 'LOCKED_BY', 'X')
|
||||||
|
If LockOwner NE '' then
|
||||||
|
DisplayName = Oconv(LockOwner,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
end else
|
||||||
|
DisplayName = 'an unknown user'
|
||||||
|
end
|
||||||
|
MsgParms = ''
|
||||||
|
MsgParms<1> = 'Record Locked'
|
||||||
|
MsgParms<2> = 'The WM_OUT record for this RDS is locked by ':DisplayName:'. Only one user session at a time can edit an RDS.'
|
||||||
|
Msg(@Window, '', 'OK', '', MsgParms)
|
||||||
|
// Disable Load button
|
||||||
|
Set_Property(@Window:'.LOAD_MATERIAL', 'ENABLED', -1)
|
||||||
|
Set_Property(@Window:'.TEST_RUN', 'ENABLED', -1)
|
||||||
|
Set_Property(@Window:'.CONFIG_COMPLETE', 'ENABLED', -1)
|
||||||
|
end
|
||||||
|
Until RecordLocked EQ True$
|
||||||
|
Next CassNo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
406
LSL2/STPROC/COMM_DIALOG_LOT_NO_CHANGE.txt
Normal file
406
LSL2/STPROC/COMM_DIALOG_LOT_NO_CHANGE.txt
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Lot_No_Change(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Lot_No_Change window.
|
||||||
|
|
||||||
|
05/06/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
|
||||||
|
EQU COL$WM_CASS_NO TO 1
|
||||||
|
EQU COL$WM_LOT_NO TO 2
|
||||||
|
EQU COL$WM_RDS_NO TO 3
|
||||||
|
|
||||||
|
EQU COL$LOT_NO TO 1
|
||||||
|
EQU COL$CASS_NOS TO 2
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Lot_No_Change'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OrgLotNoLF' ; GOSUB OrgLotNoLF
|
||||||
|
CASE Method = 'NewLotNoLF' ; GOSUB NewLotNoLF
|
||||||
|
CASE Method = 'CassNoLF' ; GOSUB CassNoLF
|
||||||
|
CASE Method = 'SelectCassettes' ; GOSUB SelectCassettes
|
||||||
|
CASE Method = 'SelectOriginal' ; GOSUB SelectOriginal
|
||||||
|
CASE Method = 'SelectNew' ; GOSUB SelectNew
|
||||||
|
CASE Method = 'LULotNo' ; GOSUB LULotNo
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'LotNoPC' ; GOSUB LotNoPC
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
WONo = Parm1[1,@FM]
|
||||||
|
|
||||||
|
Title = 'Work Order: ':WONo:' - Lot No Change'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',Title)
|
||||||
|
|
||||||
|
OPEN 'DICT.WO_MAT' TO DictVar ELSE
|
||||||
|
ErrMsg('Unable to open "DICT.WO_MAT" for index lookup in COMM_DIALOG_LOT_NO_CHANGE routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
SearchString = 'WO_NO':@VM:WONo:@FM
|
||||||
|
WOMatKeys = ''
|
||||||
|
Flag = ''
|
||||||
|
Btree.Extract(SearchString, 'WO_MAT', DictVar, WOMatKeys, '', Flag)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(WOMatKeys,@VM,1) THEN
|
||||||
|
|
||||||
|
WOMatKeys := @VM
|
||||||
|
CONVERT @VM TO @RM IN WOMatKeys
|
||||||
|
CALL V119('S','','A','R',WOMatKeys,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN WOMatKeys
|
||||||
|
WOMatKeys[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
NULL
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WOMatList = ''
|
||||||
|
LotNoArray = ''
|
||||||
|
|
||||||
|
LotNos = ''
|
||||||
|
CassNos = ''
|
||||||
|
RDSNos = ''
|
||||||
|
|
||||||
|
OPEN 'WO_MAT' TO WOMatTable ELSE
|
||||||
|
ErrMsg('Unable to open "WO_MAT" for reads in COMM_DIALOG_LOT_NO_CHANGE - Create Event')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
kCnt = COUNT(WOMatKeys,@VM) + (WOMatKeys NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO kCnt
|
||||||
|
WOMatKey = WOMatKeys<1,I>
|
||||||
|
|
||||||
|
READ WOMatRec FROM WOMatTable,WOMatKey THEN
|
||||||
|
|
||||||
|
CassNo = FIELD(WOMatKey,'*',2)
|
||||||
|
LotNo = WOMatRec<WO_MAT_LOT_NO$>
|
||||||
|
RDSNos = WOMatRec<WO_MAT_RDS_NO$>
|
||||||
|
|
||||||
|
SWAP @VM WITH ', ' IN RDSNos
|
||||||
|
|
||||||
|
WOMatList<I> = CassNo:@VM:LotNo:@VM:RDSNos
|
||||||
|
|
||||||
|
LOCATE LotNo IN LotNos USING @FM SETTING Pos THEN
|
||||||
|
LOCATE CassNo IN CassNos<Pos> USING @VM SETTING vPos ELSE
|
||||||
|
CassNos = INSERT(CassNos,Pos,vPos,0,CassNo)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotNos = INSERT(LotNos,Pos,0,0,LotNo)
|
||||||
|
CassNos = INSERT(CassNos,Pos,0,0,CassNo)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WO_MAT_KEYS','LIST',WOMatList)
|
||||||
|
|
||||||
|
SWAP @VM WITH ', ' IN CassNos
|
||||||
|
CONVERT @FM TO @VM IN CassNos
|
||||||
|
CONVERT @FM TO @VM IN LotNos
|
||||||
|
|
||||||
|
LotNoArray = LotNos:@FM:CassNos
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.LOT_NOS','DEFPROP',LotNoArray)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.LOT_NOS'
|
||||||
|
|
||||||
|
CurrList = Get_Property(CtrlEntID,'LIST')
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CurrLotNo = CurrList<CurrRow,COL$LOT_NO>
|
||||||
|
CurrCassNos = CurrList<CurrRow,COL$CASS_NOS>
|
||||||
|
|
||||||
|
WOMatCtrl = @WINDOW:'.WO_MAT_KEYS'
|
||||||
|
WOMatList = Get_Property(WOMatCtrl,'LIST')
|
||||||
|
|
||||||
|
LineCnt = COUNT(WOMatList,@FM) + (WOMatList NE '')
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
LineLotNo = WOMatList<Line,COL$WM_LOT_NO>
|
||||||
|
|
||||||
|
IF LineLotNo = CurrLotNo THEN
|
||||||
|
stat = Send_Message(WOMatCtrl,'COLOR_BY_POS',0,Line,YELLOW$)
|
||||||
|
END ELSE
|
||||||
|
stat = Send_Message(WOMatCtrl,'COLOR_BY_POS',0,Line,GREEN$)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LULotNo:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * * * NOT USED JCH - Remove when done on 2 DEC 2016 **********************************************
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
LotList = Get_Property(@WINDOW,'@LOT_NOS')
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = LotList
|
||||||
|
|
||||||
|
RetVal = Popup(@WINDOW,TypeOver,'CUST_LOT_NO')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectOriginal:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.LOT_NOS'
|
||||||
|
|
||||||
|
CurrList = Get_Property(CtrlEntID,'LIST')
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CurrLotNo = CurrList<CurrRow,COL$LOT_NO>
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.ORG_LOT_NO','DEFPROP',CurrLotNo)
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OrgLotNoLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
OrgLotNo = Get_Property(@WINDOW:'.ORG_LOT_NO','TEXT')
|
||||||
|
IF OrgLotNo = '' THEN RETURN
|
||||||
|
|
||||||
|
ValidLotNos = Get_Property(@WINDOW,'@LOT_NOS')
|
||||||
|
|
||||||
|
LOCATE OrgLotNo IN ValidLotNos USING @VM SETTING Pos ELSE
|
||||||
|
ErrMsg('Lot No:':QUOTE(OrgLotNo):' is not on this Work Order!')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.ORG_LOT_NO')
|
||||||
|
Set_Property(@WINDOW:'.ORG_LOT_NO','TEXT','')
|
||||||
|
END
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectNew:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.LOT_NOS'
|
||||||
|
|
||||||
|
CurrList = Get_Property(CtrlEntID,'LIST')
|
||||||
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
|
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CurrLotNo = CurrList<CurrRow,COL$LOT_NO>
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.NEW_LOT_NO','DEFPROP',CurrLotNo)
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NewLotNoLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectCassettes:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
WOMatCtrl = @WINDOW:'.WO_MAT_KEYS'
|
||||||
|
|
||||||
|
WOMatKeyList = Get_Property(WOMatCtrl,'LIST')
|
||||||
|
|
||||||
|
SlotSelection = Get_Property(WOMatCtrl,'SELPOS')
|
||||||
|
SelectedRows = SlotSelection<2>
|
||||||
|
|
||||||
|
CONVERT @VM TO @FM in SelectedRows
|
||||||
|
|
||||||
|
SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '')
|
||||||
|
IF SelCnt = 0 THEN
|
||||||
|
ErrMsg('No WO Cassettes selected.')
|
||||||
|
RETURN
|
||||||
|
End
|
||||||
|
|
||||||
|
CassNoDisp = ''
|
||||||
|
For I = 1 To SelCnt
|
||||||
|
SelectedRow = SelectedRows<I>
|
||||||
|
CassNoDisp<-1> = WOMatKeyList<SelectedRow,COL$WM_CASS_NO>
|
||||||
|
Next I
|
||||||
|
|
||||||
|
Swap @FM With ', ' In CassNoDisp
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASS_NOS','DEFPROP',CassNoDisp)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CassNoLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.ORG_LOT_NO':@RM ; Props = 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NEW_LOT_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.REASON':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASS_NOS' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props)
|
||||||
|
|
||||||
|
OrgLotNo = Vals[1,@RM]
|
||||||
|
NewLotNo = Vals[COL2()+1,@RM]
|
||||||
|
Reason = Vals[COL2()+1,@RM]
|
||||||
|
CassNos = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
Swap ', ' With @VM In CassNos
|
||||||
|
|
||||||
|
|
||||||
|
IF OrgLotNo = '' THEN
|
||||||
|
ErrMsg('Original Lot Number is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.ORG_LOT_NO')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NewLotNo = '' THEN
|
||||||
|
ErrMsg('New Lot Number is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.NEW_LOT_NO')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Reason = '' THEN
|
||||||
|
ErrMsg('Reason is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.REVISION')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF CassNos = '' THEN
|
||||||
|
ErrMsg('CassNos is a required field and must be filled in.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.CASS_NOS')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
Result = OrgLotNo
|
||||||
|
Result<2> = NewLotNo
|
||||||
|
Result<3> = Reason
|
||||||
|
Result<4> = CassNos
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
764
LSL2/STPROC/COMM_DIALOG_MAT_SCAN.txt
Normal file
764
LSL2/STPROC/COMM_DIALOG_MAT_SCAN.txt
Normal file
@ -0,0 +1,764 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Mat_Scan(Instruction, Parm1,Parm2)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Mat_Scan (Material - Barcode Scan) window
|
||||||
|
|
||||||
|
10/24/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, Dialog_Box, obj_WO_Mat_Log, Logging_Services
|
||||||
|
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, obj_Appwindow, End_Dialog, End_Window
|
||||||
|
DECLARE SUBROUTINE Send_Message, Print_Cass_Ship_Label, Print_SAP_Cass_Ship_Label, Post_Event
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, Logging_Services
|
||||||
|
DECLARE FUNCTION obj_Schedule, Dialog_Box, Utility, obj_WO_Mat, Database_Services, Environment_Services, Start_Window, End_Window
|
||||||
|
|
||||||
|
$INSERT RDS_EQUATES
|
||||||
|
$INSERT REACT_RUN_EQUATES
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
|
||||||
|
Equ Tab$ to \09\
|
||||||
|
Equ CRLF$ to \0D0A\
|
||||||
|
Equ LF$ to \0A\
|
||||||
|
Equ Comma$ to ','
|
||||||
|
|
||||||
|
EQU COL$LABEL_SCAN TO 1
|
||||||
|
EQU COL$CURR_STATUS TO 2
|
||||||
|
EQU COL$CURR_LOC TO 3
|
||||||
|
EQU COL$CR_COMP TO 4
|
||||||
|
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WoMatLog'
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Material Log.csv'
|
||||||
|
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'Notes'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||||
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Mat_Scan'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'OK' ; GOSUB OK
|
||||||
|
CASE Instruction = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Instruction = 'CassIDPC' ; GOSUB CassIDPC
|
||||||
|
CASE Instruction = 'LocLF' ; GOSUB LocLF
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF @User4 EQ 'DAN_CR' OR @User4 EQ 'DON_T' OR @User4 EQ 'MADELINE_S' OR @User4 EQ 'JUSTIN_H' OR @User4 EQ 'JOSEPH_F' THEN
|
||||||
|
Set_Property(@WINDOW:'.BTN_NEW','VISIBLE',True$)
|
||||||
|
END
|
||||||
|
IF NOT(Security_Check('RDS',READ$)) THEN
|
||||||
|
Security_Err_Msg('RDS',READ$)
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
IF Parm1<1,1> = 'Ship' THEN
|
||||||
|
WONo = Parm1<1,2>[-1,'B ']
|
||||||
|
Set_Property(@WINDOW,'@WONO',WONo)
|
||||||
|
Set_Property(@WINDOW,'@SHIPMENT',1)
|
||||||
|
Set_Property(@WINDOW,'TEXT',Parm1<1,2>)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scan WO ':WONo:' Shipment')
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'@SHIPMENT','')
|
||||||
|
Set_Property(@WINDOW:'@WONO','')
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Send_Event(@WINDOW,'PAGE',1)
|
||||||
|
|
||||||
|
GOTO Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WindowLabel = Get_Property(@WINDOW:'.WINDOW_LABEL','TEXT')
|
||||||
|
|
||||||
|
IF INDEX(WindowLabel,' IN ',1) THEN
|
||||||
|
BackColor = GREEN$
|
||||||
|
END ELSE
|
||||||
|
BackColor = YELLOW$
|
||||||
|
END
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CASS_IDS'
|
||||||
|
CassArray = Get_Property(CtrlName,'DEFPROP')
|
||||||
|
CassStatuses = CassArray<COL$CURR_STATUS> ;* Second Column
|
||||||
|
CurrLocations = CassArray<COL$CURR_LOC>
|
||||||
|
CurrCRCompFlags = ICONV(CassArray<COL$CR_COMP>,'B')
|
||||||
|
|
||||||
|
Location = Get_Property(@WINDOW:'.LOCATION_CODE','DEFPROP')
|
||||||
|
SWAP '\J' WITH '*' IN Location
|
||||||
|
|
||||||
|
Beeped = 0
|
||||||
|
FOR I = 1 TO COUNT(CassStatuses,@VM) + (CassStatuses NE '')
|
||||||
|
CassStatus = CassStatuses<1,I>
|
||||||
|
CurrLocation = CurrLocations<1,I>
|
||||||
|
CurrCRCompFlag = CurrCRCompFlags<1,I>
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Location[-3,3] = 'PTO' AND CurrLocation NE ''
|
||||||
|
|
||||||
|
IF CurrCRCompFlag OR CassStatus = 'Verify Qty' THEN
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,GREEN$)
|
||||||
|
END ELSE
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,RED$)
|
||||||
|
IF NOT(Beeped) THEN
|
||||||
|
void = Utility('BEEP')
|
||||||
|
Beeped = 1
|
||||||
|
END
|
||||||
|
END
|
||||||
|
CASE Location[-2,2] = 'SB' AND CurrLocation NE ''
|
||||||
|
IF INDEX(CassStatus,'-',1) THEN
|
||||||
|
CassStatus = FIELD(CassStatus,'-',1)
|
||||||
|
CassStatus = TRIM(CassStatus)
|
||||||
|
END
|
||||||
|
IF CassStatus[-4,4] NE 'Ship' THEN
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,RED$)
|
||||||
|
IF NOT(Beeped) THEN
|
||||||
|
void = Utility('BEEP')
|
||||||
|
Beeped = 1
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,GREEN$)
|
||||||
|
END
|
||||||
|
CASE 1
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,GREEN$)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF Beeped = 1 THEN
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','ENABLED',0)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','ENABLED',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
LastLabel = CassArray<COL$LABEL_SCAN>[-1,'B':@VM]
|
||||||
|
IF LastLabel NE '' THEN
|
||||||
|
Send_Message(CtrlName, "INSERT", -1,'':@VM :'') ;* Insert blank row at bottom of the list
|
||||||
|
Set_Property(CtrlName,'SELPOS',1:@FM:-1) ;* Move cursor down
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
LocCd = Get_Property(@WINDOW:'.LOCATION_CODE','DEFPROP')
|
||||||
|
|
||||||
|
IF LocCd = '' THEN
|
||||||
|
ErrMsg('Missing Location Code')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SWAP '/J' WITH '*' IN LocCd
|
||||||
|
|
||||||
|
WhCd = LocCd[1,'*']
|
||||||
|
LocCd = LocCd[COL2()+1,'*']
|
||||||
|
|
||||||
|
CassIDs = Get_Property(@WINDOW:'.CASS_IDS','ARRAY')<1>
|
||||||
|
LOOP
|
||||||
|
UNTIL CassIDs[-1,1] NE @VM OR CassIDs = ''
|
||||||
|
CassIDs[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CassIDs<1,1> = '' THEN RETURN
|
||||||
|
|
||||||
|
TestCassID = CassIDs<1,1>
|
||||||
|
Convert '*' to '.' in TestCassID
|
||||||
|
Action = 'PLACE' ;* Default Action
|
||||||
|
|
||||||
|
PrintLabelWOs = ''
|
||||||
|
PLSteps = ''
|
||||||
|
PLCassNos = ''
|
||||||
|
PLRDSNos = ''
|
||||||
|
|
||||||
|
IF INDEX(TestCassID,'.',2) THEN EpiPRO = 1 ELSE EpiPRO = 0
|
||||||
|
IF INDEX(TestCassID,'.',1) THEN GaN = 1 ELSE GaN = 0
|
||||||
|
|
||||||
|
IF LocCd = 'PTO' THEN
|
||||||
|
|
||||||
|
PrintLabelWOs = Get_Property(@WINDOW,'@WONO') ;
|
||||||
|
|
||||||
|
FOR I = 1 To COUNT(CassIDs,@VM) + (CassIDs NE '')
|
||||||
|
CassID = CassIDs<1,I>
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EpiPRO EQ True$
|
||||||
|
IF CassID[1,1] = 'O' THEN CassID[1,1] = ''
|
||||||
|
IF CassID[1,1] = 'I' THEN CassID[1,1] = ''
|
||||||
|
|
||||||
|
WONo = FIELD(CassID,'.',1)
|
||||||
|
StepNo = FIELD(CassID,'.',2)
|
||||||
|
CassNo = FIELD(CassID,'.',3)
|
||||||
|
RDSNo = ''
|
||||||
|
CASE GaN EQ True$
|
||||||
|
IF CassID[1,1] = 'O' THEN CassID[1,1] = ''
|
||||||
|
IF CassID[1,1] = 'I' THEN CassID[1,1] = ''
|
||||||
|
Convert '*' to '.' in CassID
|
||||||
|
WONo = FIELD(CassID,'.',1)
|
||||||
|
StepNo = 1
|
||||||
|
CassNo = FIELD(CassID,'.',2)
|
||||||
|
RDSNo = ''
|
||||||
|
CASE Otherwise$
|
||||||
|
RDSNo = CassID
|
||||||
|
|
||||||
|
ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
|
||||||
|
|
||||||
|
WONo = ReactRunRec<REACT_RUN_WO_NO$>
|
||||||
|
StepNo = ReactRunRec<REACT_RUN_WO_STEP$>
|
||||||
|
CassNo = ReactRunRec<REACT_RUN_CASS_NO$>
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
PLSteps<1,-1> = StepNo ;
|
||||||
|
PLCassNos<1,-1> = CassNo ;
|
||||||
|
PLRDSNos<1,-1> = RDSNo ;
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
WOCnt = COUNT(PrintLabelWOs,@FM) + (PrintLabelWOs NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO WOCnt
|
||||||
|
PrintLabelWO = PrintLabelWOs<I>
|
||||||
|
PrintLabelProdOrd = XLATE('WO_LOG',PrintLabelWO,WO_LOG_PROD_ORD_NO$,'X')
|
||||||
|
|
||||||
|
IF PrintLabelProdOrd NE '' THEN
|
||||||
|
Print_SAP_Cass_Ship_Label(PrintLabelWO,PLSteps<I>,PLCassNos<I>,PLRDSNos<I>)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'@SHIPMENT') THEN
|
||||||
|
IF INDEX(TestCassID,'.',2) THEN EpiPRO = 1 ELSE EpiPRO = 0
|
||||||
|
|
||||||
|
Result = '' ;* This gets returned to COMM_SHIPMENT and placed on the shipment record
|
||||||
|
|
||||||
|
FOR I = 1 To COUNT(CassIDs,@VM) + (CassIDs NE '')
|
||||||
|
CassID = CassIDs<1,I>
|
||||||
|
|
||||||
|
IF NOT(EpiPRO) THEN
|
||||||
|
RDSNo = CassID
|
||||||
|
ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
|
||||||
|
WONo = ReactRunRec<REACT_RUN_WO_NO$>
|
||||||
|
StepNo = ReactRunRec<REACT_RUN_WO_STEP$>
|
||||||
|
CassNo = ReactRunRec<REACT_RUN_CASS_NO$>
|
||||||
|
|
||||||
|
Result<-1> = StepNo:@VM:CassNo:@VM:RDSNo
|
||||||
|
END ELSE
|
||||||
|
IF CassID[1,1] = 'O' THEN CassID[1,1] = ''
|
||||||
|
IF CassID[1,1] = 'I' THEN CassID[1,1] = ''
|
||||||
|
Step = FIELD(CassID,'.',2)
|
||||||
|
CassNo = FIELD(CassID,'.',3)
|
||||||
|
Result<-1> = Step:@VM:CassNo
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Action = 'SHIP'
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
CurrDTM = OCONV(Date(),'D2/'):' ':OCONV(Time(),'MTS')
|
||||||
|
|
||||||
|
WONos = ''
|
||||||
|
CassNos = ''
|
||||||
|
|
||||||
|
CassCnt = COUNT(CassIDs,@VM) + (CassIDs NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO CassCnt
|
||||||
|
CassID = CassIDs<1,I>
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ( (EpiPro EQ True$) or (GaN EQ True$) )
|
||||||
|
IF CassID[1,1] = 'I' OR CassID[1,1] = 'O' THEN CassID[1,1] = '' ;* Skip the first character (I or O)
|
||||||
|
Convert '*' to '.' in CassID
|
||||||
|
WONos<1,I> = CassID[1,'.']
|
||||||
|
CassNos<1,I> = CassID[-1,'B.']
|
||||||
|
CASE Otherwise$
|
||||||
|
* Numeric CassID is an RDS
|
||||||
|
ReactRunRec = XLATE('REACT_RUN',CassID,'','X')
|
||||||
|
WONos<1,I> = ReactRunRec<REACT_RUN_WO_NO$>
|
||||||
|
CassNos<1,I> = ReactRunRec<REACT_RUN_CASS_NO$>
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
UserID = @USER4
|
||||||
|
IF UserID = '' THEN UserID = @USERNAME
|
||||||
|
|
||||||
|
LogFile = 'WO_MAT' ;* Changed so all scans are logged in the WO_MAT table 12/3/2006
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
// Log form contents
|
||||||
|
FormContents = Get_Property(@Window:'.CASS_IDS', 'LIST')
|
||||||
|
|
||||||
|
NumRows = DCount(FormContents, @FM)
|
||||||
|
LogContents = ''
|
||||||
|
For Row = 1 to NumRows
|
||||||
|
Cass = FormContents<Row, 1>
|
||||||
|
IF Cass NE '' THEN
|
||||||
|
LogContents<-1> = FormContents<Row>
|
||||||
|
END
|
||||||
|
Next Row
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = '*** Form Contents ***'
|
||||||
|
LogData<2, 1> = LoggingDTM
|
||||||
|
LogData<2, 2> = @User4
|
||||||
|
LogData<3> = LogContents
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @FM, @VM)
|
||||||
|
|
||||||
|
// Log Material Log parameters
|
||||||
|
LogData<1> = ' '
|
||||||
|
LogData<2> = '*** Material Log Parameters ***'
|
||||||
|
LogData<3> = 'LogFile: ':LogFile
|
||||||
|
LogData<4> = 'CurrDTM: ':CurrDTM
|
||||||
|
LogData<5> = 'Action: ':Action
|
||||||
|
LogData<6> = 'WhCd: ':WhCd
|
||||||
|
LogData<7> = 'LocCd: ':LocCd
|
||||||
|
LogData<8> = 'WONos: ':WONos
|
||||||
|
LogData<9> = 'CassNos: ':CassNos
|
||||||
|
LogData<10> = 'UserID: ':UserID
|
||||||
|
LogData<11> = 'CassIDs: ':CassIDs
|
||||||
|
LogData<12> = ' '
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @FM, @VM)
|
||||||
|
|
||||||
|
obj_WO_Mat_Log('Create',LogFile:@RM:CurrDTM:@RM:Action:@RM:WhCd:@RM:LocCd:@RM:WONos:@RM:CassNos:@RM:UserID:@RM:CassIDs)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Errmsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'@SHIPMENT') THEN
|
||||||
|
End_Dialog(@WINDOW,Result) ;* Move this down and replace the CLEAR when called from the Shipment window
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * * *
|
||||||
|
CassIDPC:
|
||||||
|
* * * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.CASS_IDS'
|
||||||
|
|
||||||
|
Shipment = Get_Property(@WINDOW, '@SHIPMENT') ;* Shipment flag
|
||||||
|
AtWONo = Get_Property(@WINDOW, '@WONO')
|
||||||
|
Location = Get_Property(@WINDOW:'.LOCATION_CODE','DEFPROP')[-1,'B*']
|
||||||
|
|
||||||
|
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
|
||||||
|
PrevCol = PrevSelPos<1>
|
||||||
|
PrevRow = PrevSelPos<2>
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
ListData = Get_Property(CtrlEntId,'LIST')
|
||||||
|
ArrayData = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
|
||||||
|
IF ListData<CurrRow,CurrCol> = '' THEN
|
||||||
|
|
||||||
|
ColPointer = CurrCol
|
||||||
|
LinePointer = CurrRow
|
||||||
|
ColCnt = 1
|
||||||
|
|
||||||
|
* Find the first non-empty cell
|
||||||
|
LOOP
|
||||||
|
Test = ListData<LinePointer,(ColPointer) >
|
||||||
|
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
|
||||||
|
ColPointer -= 1
|
||||||
|
IF ColPointer = 0 THEN
|
||||||
|
ColPointer = ColCnt
|
||||||
|
LinePointer -= 1
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
* Move one past the non empty cell
|
||||||
|
BEGIN CASE
|
||||||
|
CASE LinePointer = 0
|
||||||
|
* Empty Table
|
||||||
|
LinePointer = 1
|
||||||
|
CoilPointer = 1
|
||||||
|
CASE ColPointer = ColCnt
|
||||||
|
LinePointer += 1
|
||||||
|
ColPointer = 1
|
||||||
|
CASE 1
|
||||||
|
ColPointer += 1
|
||||||
|
END CASE
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ListData<PrevRow,PrevCol> NE '' AND PrevCol = COL$LABEL_SCAN THEN
|
||||||
|
ScanCassID = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF ScanCassID[1,2] = '1T' THEN
|
||||||
|
Swap '1T' with '' in ScanCassID
|
||||||
|
Set_Property(CtrlEntId,"CELLPOS",ScanCassID,PrevSelPos)
|
||||||
|
END
|
||||||
|
CassID = ScanCassID
|
||||||
|
* Check for data already in the list (repeat scan)
|
||||||
|
TestArray = ArrayData<1> ;* First Column
|
||||||
|
TestArray<1,PrevRow> = '' ;* Remove the label just scanned
|
||||||
|
LOCATE CassID IN TestArray USING @VM SETTING Pos THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* Label Data already scanned
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(CassID,'.',2) THEN
|
||||||
|
EpiPRO = 1
|
||||||
|
GaN = 0
|
||||||
|
END ELSE IF INDEX(CassID,'.',1) THEN
|
||||||
|
GaN = 1
|
||||||
|
EpiPRO = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
CONVERT '.' TO '*' IN CassID
|
||||||
|
Test = ''
|
||||||
|
CurrStatus = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE CassID[1,1] = 'I'
|
||||||
|
* WM_IN table
|
||||||
|
TestKey = CassID[2,99]
|
||||||
|
Test = XLATE('WM_IN',TestKey,'','X')
|
||||||
|
CurrStatus = OCONV(XLATE('WM_IN',TestKey,'CURR_STATUS','X'),'[WM_IN_CURR_STATUS_CONV]')
|
||||||
|
TestWO = FIELD(TestKey,'*',1)
|
||||||
|
|
||||||
|
IF Location = 'PTO' THEN
|
||||||
|
IF AtWONo = '' THEN
|
||||||
|
Set_Property(@WINDOW,'@WONO',TestWO)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scanning WO ':TestWO)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
WOMatKey = TestWO:'*':FIELD(TestKey,'*',3)
|
||||||
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
|
|
||||||
|
IF LastPTO THEN
|
||||||
|
MsgHead = 'Cassette already scanned through the PTO'
|
||||||
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
|
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
|
IF NOT(OK) THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* User opted out of rescan and print
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
CASE CassID[1,1] = 'O'
|
||||||
|
* GaN or EPP
|
||||||
|
TestKey = CassID[2,99]
|
||||||
|
|
||||||
|
IF GaN THEN
|
||||||
|
Test = XLATE('WO_MAT',TestKey,'','X')
|
||||||
|
END ELSE
|
||||||
|
Test = XLATE('WM_OUT',TestKey,'','X')
|
||||||
|
END
|
||||||
|
|
||||||
|
CurrStatus = OCONV(XLATE('WM_OUT',TestKey,'CURR_STATUS','X'),'[WM_OUT_CURR_STATUS_CONV]')
|
||||||
|
TestWO = FIELD(TestKey,'*',1)
|
||||||
|
|
||||||
|
IF Location = 'PTO' THEN
|
||||||
|
IF AtWONo = '' THEN
|
||||||
|
Set_Property(@WINDOW,'@WONO',TestWO)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scanning WO ':TestWO)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF (FIELD(TestKey,'*',3)) THEN
|
||||||
|
WOMatKey = TestWO:'*':FIELD(TestKey,'*',3)
|
||||||
|
END ELSE
|
||||||
|
WOMatKey = TestWO:'*':FIELD(TestKey,'*',2)
|
||||||
|
END
|
||||||
|
|
||||||
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
|
|
||||||
|
IF LastPTO THEN
|
||||||
|
|
||||||
|
MsgHead = 'Cassette already scanned through PTO'
|
||||||
|
|
||||||
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
|
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
|
IF NOT(OK) THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* User opted out of rescan and print
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
CASE ( INDEX(CassID,'*',1) AND NOT(INDEX(CassID,'*',2)) OR INDEX(CassID,'.',1) AND NOT(INDEX(CassID,'.',2)) )
|
||||||
|
* This is a WO_MAT format label
|
||||||
|
TestKey = CassID
|
||||||
|
Test = XLATE('WO_MAT',TestKey,'','X')
|
||||||
|
CurrStatus = OCONV(XLATE('WO_MAT',TestKey,'CURR_STATUS','X'),'[WO_MAT_CURR_STATUS_CONV]')
|
||||||
|
TestWO = FIELD(TestKey,'*',1)
|
||||||
|
|
||||||
|
IF Location = 'PTO' THEN
|
||||||
|
IF AtWONo = '' THEN
|
||||||
|
Set_Property(@WINDOW,'@WONO',TestWO)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scanning WO ':TestWO)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
WOMatKey = TestKey
|
||||||
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
|
|
||||||
|
IF LastPTO THEN
|
||||||
|
MsgHead = 'Cassette already scanned through the PTO'
|
||||||
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
|
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
|
IF NOT(OK) THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* User opted out of rescan and print
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
CASE INDEX(CassID,'*',2)
|
||||||
|
* EpiPRO material indeterminate direction
|
||||||
|
TestKey = CassID
|
||||||
|
Test = XLATE('WM_IN',TestKey,'','X')
|
||||||
|
CurrStatus = OCONV(XLATE('WM_IN',TestKey,'CURR_STATUS','X'),'[WM_IN_CURR_STATUS_CONV]')
|
||||||
|
|
||||||
|
IF Test = '' THEN
|
||||||
|
Test = XLATE('WM_OUT',TestKey,'','X')
|
||||||
|
CurrStatus = OCONV(XLATE('WM_OUT',TestKey,'CURR_STATUS','X'),'[WM_OUT_CURR_STATUS_CONV]')
|
||||||
|
END
|
||||||
|
|
||||||
|
TestWO = FIELD(TestKey,'*',1)
|
||||||
|
|
||||||
|
IF Location = 'PTO' THEN
|
||||||
|
IF AtWONo = '' THEN
|
||||||
|
Set_Property(@WINDOW,'@WONO',TestWO)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scanning WO ':TestWO)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
WOMatKey = FIELD(TestKey,'*',3)
|
||||||
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
|
|
||||||
|
IF LastPTO THEN
|
||||||
|
MsgHead = 'Cassette already scanned through the PTO'
|
||||||
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
|
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
|
IF NOT(OK) THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* User opted out of rescan and print
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ReactRunRec = XLATE('REACT_RUN',CassID,'','X')
|
||||||
|
|
||||||
|
IF ReactRunRec EQ '' THEN
|
||||||
|
RDSRec = XLATE('RDS',CassID,'','X')
|
||||||
|
TestWO = RDSRec<RDS_WO$>
|
||||||
|
CassNo = RDSRec<RDS_CASS_NO$>
|
||||||
|
END ELSE
|
||||||
|
TestWO = ReactRunRec<REACT_RUN_WO_NO$>
|
||||||
|
CassNo = ReactRunRec<REACT_RUN_CASS_NO$>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Location = 'PTO' THEN
|
||||||
|
IF AtWONo = '' THEN
|
||||||
|
Set_Property(@WINDOW,'@WONO',TestWO)
|
||||||
|
Set_Property(@WINDOW:'.WINDOW_LABEL','TEXT','Scanning WO ':TestWO)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
WOMatKey = TestWO:'*':CassNo
|
||||||
|
Test = XLATE('WO_MAT',WOMatKey,'','X')
|
||||||
|
CurrStatus = OCONV(XLATE('WO_MAT',WOMatKey,'CURR_STATUS','X'),'[WO_MAT_CURR_STATUS_CONV]')
|
||||||
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
|
SAPBatchNo = Test<WO_MAT_SAP_BATCH_NO$>
|
||||||
|
|
||||||
|
IF LastPTO THEN
|
||||||
|
MsgHead = 'Cassette already scanned through the PTO'
|
||||||
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
|
OK = Msg(@WINDOW,'','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
|
IF NOT(OK) THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* User opted out of rescan and print
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
WoMatAction = Database_Services('ReadDataColumn', 'WO_MAT',WoMatKey, 8)
|
||||||
|
SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X')
|
||||||
|
hasPack = Index(WoMatAction, 'PACK', 1) > 0
|
||||||
|
IF ( (Location EQ 'PTO') AND (hasPack EQ False$) ) THEN
|
||||||
|
MsgHead = 'Cassette is missing Packaging scan'
|
||||||
|
MsgText = 'Unable to print SAP label without packaging scan.':CRLF$
|
||||||
|
MsgText := 'Please return cassette #':CassID:' to warehouse manager.'
|
||||||
|
OK = Msg(@WINDOW, '', 'OK', '', MsgHead:@FM:MsgText)
|
||||||
|
Set_Property(CtrlEntID, 'SELPOS', PrevSelPos);*remove entry from grid
|
||||||
|
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
||||||
|
LogFile = 'WO_MAT'
|
||||||
|
CurrDTM = OCONV(Date(),'D2/'):' ':OCONV(Time(),'MTS')
|
||||||
|
Action = 'PLACE'
|
||||||
|
WhCd = '1K'
|
||||||
|
LocCd = 'PTI'
|
||||||
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
|
UserID = @User4
|
||||||
|
Tag = 'Missing Packaging Scan'
|
||||||
|
obj_WO_Mat_Log('Create',LogFile:@RM:CurrDTM:@RM:Action:@RM:WhCd:@RM:LocCd:@RM:WONo:@RM:CassNo:@RM:UserID:@RM:Tag)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
IF ( (Location EQ 'PTO') AND (SAPBatchNo EQ '') ) THEN
|
||||||
|
MsgHead = 'Cassette does not have SAP Batch ID'
|
||||||
|
MsgText = 'Unable to print SAP label without SAP Batch ID.':CRLF$
|
||||||
|
MsgText := 'Please return cassette #':CassID:' to warehouse manager.'
|
||||||
|
OK = Msg(@WINDOW, '', 'OK', '', MsgHead:@FM:MsgText)
|
||||||
|
Set_Property(CtrlEntID, 'SELPOS', PrevSelPos);*remove entry from grid
|
||||||
|
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
||||||
|
//write log entry, showing SAP ID missing in tag
|
||||||
|
LogFile = 'WO_MAT'
|
||||||
|
CurrDTM = OCONV(Date(),'D2/'):' ':OCONV(Time(),'MTS')
|
||||||
|
Action = 'PLACE'
|
||||||
|
WhCd = '1K'
|
||||||
|
LocCd = 'PTI'
|
||||||
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
|
UserID = @User4
|
||||||
|
Tag = 'Missing SAP Batch ID'
|
||||||
|
obj_WO_Mat_Log('Create',LogFile:@RM:CurrDTM:@RM:Action:@RM:WhCd:@RM:LocCd:@RM:WONo:@RM:CassNo:@RM:UserID:@RM:Tag)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
CRComp = obj_WO_Mat('CRComp',WOMatKey:@RM:@RM)
|
||||||
|
CRComp = OCONV(CRComp,'B')
|
||||||
|
CurrLoc = XLATE('WO_MAT',WOmatKey,'CURR_LOCATION','X')
|
||||||
|
|
||||||
|
AtWONo = Get_Property(@WINDOW,'@WONO')
|
||||||
|
IF AtWONo NE '' THEN
|
||||||
|
IF TestWO NE AtWONo THEN
|
||||||
|
ErrMsg('':@VM:'Process Error':@SVM:'Label Scanned is NOT part of WO ':AtWoNo)
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* Work Order scanned doesn't match 1st WO scanned or passed in from the Shipment
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Test = '' THEN
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) ;* No corresponding data record found for label scanned
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',CurrStatus,2:@FM:PrevRow) ;* Load Current Status
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',CurrLoc,3:@FM:PrevRow) ;* Load Current Location
|
||||||
|
Set_Property(CtrlEntID,'CELLPOS',CRComp,4:@FM:PrevRow) ;* Load Cleanroom Complete flag
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LocLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
DataIn = Get_Property(@WINDOW:'.LOCATION_CODE','DEFPROP')
|
||||||
|
|
||||||
|
IF DataIn = '' THEN RETURN
|
||||||
|
|
||||||
|
SWAP '/J' WITH '*' IN DataIn
|
||||||
|
|
||||||
|
IF DataIn = '1K*PTI' THEN
|
||||||
|
ErrMsg('PTI scans may not be done with this form. Use the PTI Material Scan form instead.')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','DEFPROP','')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','FOCUS',1)
|
||||||
|
END ELSE IF DataIn = '1K*PTO' THEN
|
||||||
|
ErrMsg('PTO scans may not be done with this form. Use the PTO Material Scan form instead.')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','DEFPROP','')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','FOCUS',1)
|
||||||
|
void = End_Window(@WINDOW)
|
||||||
|
void = Start_Window( 'NDW_PTO_MAT_SCAN', '', '', '', '' )
|
||||||
|
END ELSE IF RowExists('LOCATION',DataIn) THEN
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','DEFPROP',DataIn)
|
||||||
|
END ELSE
|
||||||
|
ErrMsg(QUOTE(DataIn):' is not a valid location in the LOCATION table.')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','DEFPROP','')
|
||||||
|
Set_Property(@WINDOW:'.LOCATION_CODE','FOCUS',1)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
277
LSL2/STPROC/COMM_DIALOG_NCR_REJ_SLOT.txt
Normal file
277
LSL2/STPROC/COMM_DIALOG_NCR_REJ_SLOT.txt
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_NCR_Rej_Slot(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_NCR_Rej_Slot window.
|
||||||
|
|
||||||
|
08/20/2008 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Send_Event, obj_RDS_Test
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, ErrMsg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, obj_Test_Point_Map, obj_RDS_Test
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
$INSERT NCR_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU WFR_COL$SLOT TO 1
|
||||||
|
EQU WFR_COL$WAFER_ID TO 2
|
||||||
|
EQU WFR_COL$SLOT_NCR TO 3
|
||||||
|
EQU WFR_COL$MET_NO TO 4
|
||||||
|
EQU WFR_COL$MOVED_TO_SLOT TO 5
|
||||||
|
EQU WFR_COL$REPLACED_BY TO 6
|
||||||
|
|
||||||
|
EQU NCR_COL$SLOT_NO TO 1
|
||||||
|
EQU NCR_COL$WAFER_ID TO 2
|
||||||
|
EQU NCR_COL$PREV_NCR TO 3
|
||||||
|
EQU NCR_COL$REJ_MET_NO TO 4
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_NCR_Rej_Slot'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'WOMatClick' ; GOSUB WOMatClick
|
||||||
|
CASE Method = 'RejWafers' ; GOSUB RejWafers
|
||||||
|
CASE Method = 'RepWafers' ; GOSUB RepWafers
|
||||||
|
CASE Method = 'Apply' ; GOSUB Apply
|
||||||
|
CASE MEthod = 'Cancel' ; GOSUB Cancel
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
* get the current style
|
||||||
|
|
||||||
|
EQU MULTILINE_STYLE$ TO 512 ;* MultiLine Select
|
||||||
|
|
||||||
|
* Set Material Slot edit table to multi-line select
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.WO_MAT_SLOT', 'STYLE')
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.WO_MAT_SLOT', "STYLE", Style)
|
||||||
|
|
||||||
|
|
||||||
|
* Set NCR Reject Wafers edit table to multi-line select
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.SLOT_REJECT', 'STYLE')
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT', "STYLE", Style)
|
||||||
|
|
||||||
|
|
||||||
|
CONVERT '/' TO @RM IN Parm1
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.WO_MAT_SLOT':@RM ; Props = 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.SLOT_REJECT':@RM ; Props := 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NCR_NO' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Parm1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WOMatClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WO_MAT_SLOT','LIST')
|
||||||
|
|
||||||
|
SlotSelection = Get_Property(@WINDOW:'.WO_MAT_SLOT','SELPOS')
|
||||||
|
|
||||||
|
SelectedLines = SlotSelection<2>
|
||||||
|
SelCnt = COUNT(SelectedLines,@VM) + (SelectedLines NE '')
|
||||||
|
|
||||||
|
BadLines = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
LineNo = SelectedLines<1,I>
|
||||||
|
IF SlotList<LineNo,WFR_COL$WAFER_ID> = '' THEN
|
||||||
|
BadLines<1,-1> = LineNo
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
IF BadLines NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.WO_MAT_SLOT','SELPOS',1:@FM:BadLines)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Apply:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.WO_MAT_SLOT':@RM ; Props = 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.SLOT_REJECT':@RM ; Props := 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NCR_NO' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props,Parm1)
|
||||||
|
|
||||||
|
WOMatSlotArray = Vals[1,@RM]
|
||||||
|
NCRRejList = Vals[COL2()+1,@RM]
|
||||||
|
WONo = Vals[COL2()+1,@RM]
|
||||||
|
CassNo = Vals[COL2()+1,@RM]
|
||||||
|
NCRNo = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WOMatSlotArray:@RM:NCRRejList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
RejWafers:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
NCRNo = Get_Property(@WINDOW:'.NCR_NO','DEFPROP')
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WO_MAT_SLOT','LIST')
|
||||||
|
|
||||||
|
SlotSelection = Get_Property(@WINDOW:'.WO_MAT_SLOT','SELPOS')
|
||||||
|
SelectedSlots = SlotSelection<2>
|
||||||
|
|
||||||
|
IF SelectedSlots = '' THEN RETURN
|
||||||
|
SelCnt = COUNT(SelectedSlots,@VM) + (SelectedSlots NE '')
|
||||||
|
|
||||||
|
WaferArray = Get_Property(@WINDOW:'.SLOT_REJECT','ARRAY')
|
||||||
|
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
SlotLine = SelectedSlots<1,I>
|
||||||
|
SlotNo = SlotList<SlotLine,1>
|
||||||
|
WaferID = SlotList<SlotLine,2>
|
||||||
|
PrevNCR = SlotList<SlotLine,3>
|
||||||
|
RejMetNo = SlotList<SLotLine,4>
|
||||||
|
|
||||||
|
LOCATE SlotNo IN WaferArray<1> BY 'AR' USING @VM SETTING POS ELSE
|
||||||
|
WaferArray = INSERT(WaferArray,1,Pos,0,SlotNo)
|
||||||
|
WaferArray = INSERT(WaferArray,2,Pos,0,WaferID)
|
||||||
|
WaferArray = INSERT(WaferArray,3,Pos,0,PrevNCR)
|
||||||
|
WaferArray = INSERT(WaferArray,4,Pos,0,RejMetNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
SlotList<SlotLine,WFR_COL$WAFER_ID> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$SLOT_NCR> = NCRNo
|
||||||
|
SlotList<SlotLine,WFR_COL$REPLACED_BY> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$MET_NO> = ''
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT','ARRAY',WaferArray)
|
||||||
|
Set_Property(@WINDOW:'.WO_MAT_SLOT','LIST',SlotList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
RepWafers:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WaferList = Get_Property(@WINDOW:'.SLOT_REJECT','LIST')
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||||
|
|
||||||
|
|
||||||
|
WaferSelection = Get_Property(@WINDOW:'.SLOT_REJECT','SELPOS')
|
||||||
|
SelectedWafers = WaferSelection<2>
|
||||||
|
|
||||||
|
IF SelectedWafers = '' THEN RETURN
|
||||||
|
|
||||||
|
SelCnt = COUNT(SelectedWafers,@VM) + (SelectedWafers NE '')
|
||||||
|
WaferCnt = COUNT(WaferList,@FM) + (WaferList NE '')
|
||||||
|
|
||||||
|
IF SelCnt = WaferCnt THEN
|
||||||
|
ErrMesg = 'There must be at least one rejected wafer on the NCR. '
|
||||||
|
ErrMesg := 'If you are moving wafers from one slot to another, '
|
||||||
|
ErrMesg := 'reject wafers from the cassette and then replace '
|
||||||
|
ErrMesg := 'from the NCR.':CRLF$:CRLF$
|
||||||
|
ErrMesg := 'If you are going to delete the NCR completely, '
|
||||||
|
ErrMesg := 'you do not need to replace the wafers. The program '
|
||||||
|
ErrMesg := 'will replace them during the NCR delete process.'
|
||||||
|
ErrMsg(ErrMesg)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WO_MAT_SLOT','LIST')
|
||||||
|
|
||||||
|
FOR I = SelCnt TO 1 STEP -1
|
||||||
|
SelectedWafer = SelectedWafers<1,I>
|
||||||
|
|
||||||
|
SlotNo = WaferList<SelectedWafer,NCR_COL$SLOT_NO>
|
||||||
|
WaferID = WaferList<SelectedWafer,NCR_COL$WAFER_ID>
|
||||||
|
PrevNCR = WaferList<SelectedWafer,NCR_COL$PREV_NCR>
|
||||||
|
RejMetNo = WaferList<SelectedWafer,NCR_COL$REJ_MET_NO>
|
||||||
|
|
||||||
|
WaferList = DELETE(WaferList,SelectedWafer,0,0)
|
||||||
|
|
||||||
|
SlotList<SlotNo,WFR_COL$SLOT> = SlotNo
|
||||||
|
SlotList<SlotNo,WFR_COL$WAFER_ID> = WaferID
|
||||||
|
SlotList<SlotNo,WFR_COL$SLOT_NCR> = PrevNCR
|
||||||
|
SlotList<SlotNo,WFR_COL$MET_NO> = RejMetNo
|
||||||
|
IF PrevNCR NE '' THEN
|
||||||
|
SlotList<SlotNo,WFR_COL$REPLACED_BY> = WaferID
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT','LIST',WaferList)
|
||||||
|
Set_Property(@WINDOW:'.WO_MAT_SLOT','LIST',SlotList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
333
LSL2/STPROC/COMM_DIALOG_NCR_SRJ_EPI.txt
Normal file
333
LSL2/STPROC/COMM_DIALOG_NCR_SRJ_EPI.txt
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_NCR_SRJ_Epi(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_NCR_SRJ_EPI window.
|
||||||
|
|
||||||
|
01/20/2009 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Send_Event, obj_RDS_Test
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, ErrMsg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, obj_Test_Point_Map, obj_RDS_Test
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
$INSERT NCR_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU WFR_COL$OUT_SLOT TO 1
|
||||||
|
EQU WFR_COL$RDS TO 2
|
||||||
|
EQU WFR_COL$POCKET TO 3
|
||||||
|
EQU WFR_COL$ZONE TO 4
|
||||||
|
EQU WFR_COL$IN_CASS TO 5
|
||||||
|
EQU WFR_COL$IN_SLOT TO 6
|
||||||
|
EQU WFR_COL$SLOT_NCR TO 7
|
||||||
|
EQU WFR_COL$MU_WO_NO TO 8
|
||||||
|
EQU WFR_COL$MU_STEP TO 9
|
||||||
|
EQU WFR_COL$MU_CASS TO 10
|
||||||
|
EQU WFR_COL$MU_SLOT TO 11
|
||||||
|
EQU WFR_COL$UM_CASS_ID TO 12
|
||||||
|
EQU WFR_COL$UM_SLOT TO 13
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EQU NCR_COL$OUT_CASS TO 1 ;* EpiPRO slot information
|
||||||
|
EQU NCR_COL$OUT_SLOT TO 2
|
||||||
|
EQU NCR_COL$RDS TO 3
|
||||||
|
EQU NCR_COL$POCKET TO 4
|
||||||
|
EQU NCR_COL$ZONE TO 5
|
||||||
|
EQU NCR_COL$IN_CASS TO 6
|
||||||
|
EQU NCR_COL$IN_SLOT TO 7
|
||||||
|
EQU NCR_COL$PREV_NCR TO 8
|
||||||
|
EQU NCR_COL$MU_WO_NO TO 9
|
||||||
|
EQU NCR_COL$MU_STEP TO 10
|
||||||
|
EQU NCR_COL$MU_CASS TO 11
|
||||||
|
EQU NCR_COL$MU_SLOT TO 12
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_NCR_Rej_Slot'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'WOMatClick' ; GOSUB WOMatClick
|
||||||
|
CASE Method = 'RejWafers' ; GOSUB RejWafers
|
||||||
|
CASE Method = 'RepWafers' ; GOSUB RepWafers
|
||||||
|
CASE Method = 'Apply' ; GOSUB Apply
|
||||||
|
CASE MEthod = 'Cancel' ; GOSUB Cancel
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
* get the current style
|
||||||
|
|
||||||
|
EQU MULTILINE_STYLE$ TO 512 ;* MultiLine Select
|
||||||
|
|
||||||
|
* Set Material Slot edit table to multi-line select
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.WM_OUT_SLOT', 'STYLE')
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_SLOT', "STYLE", Style)
|
||||||
|
|
||||||
|
|
||||||
|
* Set NCR Reject Wafers edit table to multi-line select
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.SLOT_REJECT', 'STYLE')
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT', "STYLE", Style)
|
||||||
|
|
||||||
|
|
||||||
|
CONVERT '/' TO @RM IN Parm1
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.WM_OUT_SLOT':@RM ; Props = 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.SLOT_REJECT':@RM ; Props := 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.WO_STEP_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NCR_NO' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Parm1)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
WOMatClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WM_OUT_SLOT','LIST')
|
||||||
|
NCRNo = Get_Property(@WINDOW:'.NCR_NO','DEFPROP')
|
||||||
|
|
||||||
|
SlotSelection = Get_Property(@WINDOW:'.WM_OUT_SLOT','SELPOS')
|
||||||
|
|
||||||
|
SelectedLines = SlotSelection<2>
|
||||||
|
SelCnt = COUNT(SelectedLines,@VM) + (SelectedLines NE '')
|
||||||
|
|
||||||
|
BadLines = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
LineNo = SelectedLines<1,I>
|
||||||
|
a1 = SlotList<LineNo,WFR_COL$SLOT_NCR>
|
||||||
|
a1 = SlotList<LineNo,WFR_COL$UM_CASS_ID>
|
||||||
|
IF SlotList<LineNo,WFR_COL$SLOT_NCR> = NCRNo OR SlotList<LineNo,WFR_COL$UM_CASS_ID> NE '' THEN
|
||||||
|
BadLines<1,-1> = LineNo
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
IF BadLines NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_SLOT','SELPOS',1:@FM:BadLines)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Apply:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.WM_OUT_SLOT':@RM ; Props = 'ARRAY':@RM
|
||||||
|
Ctrls := @WINDOW:'.SLOT_REJECT':@RM ; Props := 'LIST':@RM
|
||||||
|
Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM
|
||||||
|
Ctrls := @WINDOW:'.NCR_NO' ; Props := 'DEFPROP'
|
||||||
|
|
||||||
|
Vals = Get_Property(Ctrls,Props,Parm1)
|
||||||
|
|
||||||
|
WOMatSlotArray = Vals[1,@RM]
|
||||||
|
NCRRejList = Vals[COL2()+1,@RM]
|
||||||
|
WONo = Vals[COL2()+1,@RM]
|
||||||
|
CassNo = Vals[COL2()+1,@RM]
|
||||||
|
NCRNo = Vals[COL2()+1,@RM]
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WOMatSlotArray:@RM:NCRRejList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
RejWafers:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
NCRNo = Get_Property(@WINDOW:'.NCR_NO','DEFPROP')
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WM_OUT_SLOT','LIST')
|
||||||
|
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||||
|
|
||||||
|
SlotSelection = Get_Property(@WINDOW:'.WM_OUT_SLOT','SELPOS')
|
||||||
|
SelectedSlots = SlotSelection<2>
|
||||||
|
|
||||||
|
IF SelectedSlots = '' THEN RETURN
|
||||||
|
SelCnt = COUNT(SelectedSlots,@VM) + (SelectedSlots NE '')
|
||||||
|
|
||||||
|
WaferArray = Get_Property(@WINDOW:'.SLOT_REJECT','ARRAY')
|
||||||
|
|
||||||
|
FOR I = 1 TO SelCnt
|
||||||
|
SlotLine = SelectedSlots<1,I>
|
||||||
|
OutSlotNo = SlotList<SlotLine,WFR_COL$OUT_SLOT>
|
||||||
|
RDSNo = SlotList<SlotLine,WFR_COL$RDS>
|
||||||
|
Pocket = SlotList<SlotLine,WFR_COL$POCKET>
|
||||||
|
Zone = SlotList<SlotLine,WFR_COL$ZONE>
|
||||||
|
InCass = SlotList<SlotLine,WFR_COL$IN_CASS>
|
||||||
|
InSlotNo = SlotList<SlotLine,WFR_COL$IN_SLOT>
|
||||||
|
PrevNCR = SlotList<SlotLine,WFR_COL$SLOT_NCR>
|
||||||
|
MUWONo = SlotList<SlotLine,WFR_COL$MU_WO_NO>
|
||||||
|
MUWOStep = SlotList<SlotLine,WFR_COL$MU_STEP>
|
||||||
|
MUCassID = SlotList<SlotLine,WFR_COL$MU_CASS>
|
||||||
|
MUSlot = SlotList<SlotLine,WFR_COL$MU_SLOT>
|
||||||
|
|
||||||
|
LOCATE OutSlotNo IN WaferArray<NCR_COL$OUT_SLOT> BY 'AR' USING @VM SETTING POS ELSE
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$OUT_CASS,Pos,0,CassNo)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$OUT_SLOT,Pos,0,OutSlotNo)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$RDS,Pos,0,RDSNo)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$POCKET,Pos,0,Pocket)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$ZONE,Pos,0,Zone)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$IN_CASS,Pos,0,InCass)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$IN_SLOT,Pos,0,InSlotNo)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$PREV_NCR,Pos,0,PrevNCR)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$MU_WO_NO,Pos,0,MUWONo)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$MU_STEP,Pos,0,MUWOStep)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$MU_CASS,Pos,0,MUCassID)
|
||||||
|
WaferArray = INSERT(WaferArray,NCR_COL$MU_SLOT,Pos,0,MUSlot)
|
||||||
|
END
|
||||||
|
|
||||||
|
SlotList<SlotLine,WFR_COL$RDS> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$POCKET> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$ZONE> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$IN_CASS> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$IN_SLOT> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$SLOT_NCR> = NCRNo
|
||||||
|
SlotList<SlotLine,WFR_COL$MU_WO_NO> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$MU_STEP> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$MU_CASS> = ''
|
||||||
|
SlotList<SlotLine,WFR_COL$MU_SLOT> = ''
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT','ARRAY',WaferArray)
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_SLOT','LIST',SlotList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
RepWafers:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WaferList = Get_Property(@WINDOW:'.SLOT_REJECT','LIST')
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||||
|
|
||||||
|
|
||||||
|
WaferSelection = Get_Property(@WINDOW:'.SLOT_REJECT','SELPOS')
|
||||||
|
SelectedWafers = WaferSelection<2>
|
||||||
|
|
||||||
|
IF SelectedWafers = '' THEN RETURN
|
||||||
|
|
||||||
|
SelCnt = COUNT(SelectedWafers,@VM) + (SelectedWafers NE '')
|
||||||
|
WaferCnt = COUNT(WaferList,@FM) + (WaferList NE '')
|
||||||
|
|
||||||
|
IF SelCnt = WaferCnt THEN
|
||||||
|
ErrMesg = 'There must be at least one rejected wafer on the NCR. '
|
||||||
|
ErrMesg := 'If you are moving wafers from one slot to another, '
|
||||||
|
ErrMesg := 'reject wafers from the cassette and then replace '
|
||||||
|
ErrMesg := 'from the NCR.':CRLF$:CRLF$
|
||||||
|
ErrMesg := 'If you are going to delete the NCR completely, '
|
||||||
|
ErrMesg := 'you do not need to replace the wafers. The program '
|
||||||
|
ErrMesg := 'will replace them during the NCR delete process.'
|
||||||
|
ErrMsg(ErrMesg)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SlotList = Get_Property(@WINDOW:'.WM_OUT_SLOT','LIST')
|
||||||
|
|
||||||
|
FOR I = SelCnt TO 1 STEP -1
|
||||||
|
SelectedWafer = SelectedWafers<1,I>
|
||||||
|
|
||||||
|
|
||||||
|
OutSlot = WaferList<SelectedWafer,NCR_COL$OUT_SLOT>
|
||||||
|
RDSNo = WaferList<SelectedWafer,NCR_COL$RDS>
|
||||||
|
Pocket = WaferList<SelectedWafer,NCR_COL$POCKET>
|
||||||
|
Zone = WaferList<SelectedWafer,NCR_COL$ZONE>
|
||||||
|
InCass = WaferList<SelectedWafer,NCR_COL$IN_CASS>
|
||||||
|
InSlot = WaferList<SelectedWafer,NCR_COL$IN_SLOT>
|
||||||
|
PrevNCR = WaferList<SelectedWafer,NCR_COL$PREV_NCR>
|
||||||
|
MUWONo = WaferList<SelectedWafer,NCR_COL$MU_WO_NO>
|
||||||
|
MUWOStep = WaferList<SelectedWafer,NCR_COL$MU_STEP>
|
||||||
|
MUCassID = WaferList<SelectedWafer,NCR_COL$MU_CASS>
|
||||||
|
MUSlot = WaferList<SelectedWafer,NCR_COL$MU_SLOT>
|
||||||
|
|
||||||
|
WaferList = DELETE(WaferList,SelectedWafer,0,0) ;* Removes rejected wafer from NCR list
|
||||||
|
|
||||||
|
SlotList<OutSlot,WFR_COL$OUT_SLOT> = OutSlot
|
||||||
|
SlotList<OutSlot,WFR_COL$RDS> = RDSNo
|
||||||
|
SlotList<OutSlot,WFR_COL$POCKET> = Pocket
|
||||||
|
SlotList<OutSlot,WFR_COL$ZONE> = Zone
|
||||||
|
SlotList<OutSlot,WFR_COL$IN_CASS> = InCass
|
||||||
|
SlotList<OutSlot,WFR_COL$IN_SLOT> = InSlot
|
||||||
|
SlotList<OutSlot,WFR_COL$SLOT_NCR> = PrevNCR
|
||||||
|
SlotList<OutSlot,WFR_COL$MU_WO_NO> = MUWONo
|
||||||
|
SlotList<OutSlot,WFR_COL$MU_STEP> = MUWOStep
|
||||||
|
SlotList<OutSlot,WFR_COL$MU_CASS> = MUCassID
|
||||||
|
SlotList<OutSlot,WFR_COL$MU_SLOT> = MUSlot
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SLOT_REJECT','LIST',WaferList)
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_SLOT','LIST',SlotList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
157
LSL2/STPROC/COMM_DIALOG_OPEN_QUOTES.txt
Normal file
157
LSL2/STPROC/COMM_DIALOG_OPEN_QUOTES.txt
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Open_Quotes(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Open_Quotes window.
|
||||||
|
|
||||||
|
01/07/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Message
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Open_Quotes'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'ItemDC' ; GOSUB ItemDC
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
CustNo = Parm1
|
||||||
|
CustNo = '6622'
|
||||||
|
IF CustNo = '' THEN RETURN
|
||||||
|
|
||||||
|
OPEN 'DICT.QUOTE' TO DictVar ELSE
|
||||||
|
ErrMsg('Unable to open DICT.QUOTE in COMM_DIALOG_OPEN_QUOTES!')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNo:@FM
|
||||||
|
SearchString := 'STATUS':@VM:'O':@FM
|
||||||
|
|
||||||
|
Option = ''
|
||||||
|
Flag = ''
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
Btree.Extract(SearchString, 'QUOTE' ,DictVar, OpenQuotes, Option, Flag)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
IF OpenQuotes = '' THEN
|
||||||
|
ErrMsg('No open quotes on file for customer ':CustNo:'.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
QuoteList = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(OpenQuotes,@VM) + (OpenQuotes NE '')
|
||||||
|
QuoteDetKeys = XLATE('QUOTE',OpenQuotes<1,I>,35,'X')
|
||||||
|
QuoteList<-1> = '1-1: ':OpenQuotes<1,I>
|
||||||
|
|
||||||
|
CustPartNos = ''
|
||||||
|
FOR J = 1 TO COUNT(QuoteDetKeys,@VM) + (QuoteDetKeys NE '')
|
||||||
|
QuoteDetKey = QuoteDetKeys<1,J>
|
||||||
|
ItemNo = FIELD(QuoteDetKey,'*',2)
|
||||||
|
|
||||||
|
QuoteDetRec = XLATE('QUOTE_DET',QuoteDetKey,'','X')
|
||||||
|
CustPartNos = QuoteDetRec<12>
|
||||||
|
ProcSteps = QuoteDetRec<8>
|
||||||
|
ProcPSNs = QuoteDetRec<9>
|
||||||
|
ProcDescs = QuoteDetRec<10>
|
||||||
|
|
||||||
|
DetString = ''
|
||||||
|
FOR K = 1 TO COUNT(ProcSteps,@VM) + (ProcSteps NE '')
|
||||||
|
DetString<1,-1> = 'Step ':ProcSteps<1,K>:' PSN: ':ProcPSNs<1,K>:' ':ProcDescs<1,K>
|
||||||
|
NEXT K
|
||||||
|
SWAP @VM WITH ', ' IN DetString
|
||||||
|
QuoteList<-1> = '2-2: Item ':ItemNo:': ':DetString
|
||||||
|
|
||||||
|
NEXT J
|
||||||
|
IF CustPartNos = '' THEN
|
||||||
|
CustPartNos = XLATE('QUOTE',OpenQuotes<1,I>,'CUST_PART_NUMS','X')
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR L = 1 TO COUNT(CustPartNos,@VM) + (CustPartNos NE '')
|
||||||
|
QuoteList<-1> = '3-3: Cust Part No: ':CustPartNos<1,L>
|
||||||
|
NEXT L
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.OPEN_QUOTES','LIST_EX',QuoteList)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.OPEN_QUOTES','EXPAND',0,3)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ItemDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
660
LSL2/STPROC/COMM_DIALOG_ORDER_FIND.txt
Normal file
660
LSL2/STPROC/COMM_DIALOG_ORDER_FIND.txt
Normal file
@ -0,0 +1,660 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Order_Find(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Order_Find window.
|
||||||
|
|
||||||
|
08/16/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'PONoDC' ; GOSUB PONoDC
|
||||||
|
CASE Method = 'AnnContDC' ; GOSUB AnnContDC
|
||||||
|
CASE Method = 'QuoteDC' ; GOSUB QuoteDC
|
||||||
|
CASE Method = 'CustPNDC' ; GOSUB CustPNDC
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PONoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting PO Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.ORDER' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PO_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER', DictVar, OrderKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OrderKeys NE '' THEN
|
||||||
|
RawPONos = XLATE('ORDER',OrderKeys,ORDER_PO_NO$,'X')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PONos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPONos,@VM) + (RawPONos NE '')
|
||||||
|
RawPONo = RawPONos<1,I>
|
||||||
|
LOCATE RawPONo IN PONos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PONos = INSERT(PONos,1,Pos,0,RawPONo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PONos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PONos = '' THEN
|
||||||
|
ErrMsg('No Purchase Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PONos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PONos
|
||||||
|
CALL V119('S','','D','R',PONos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PONos
|
||||||
|
PONos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PONos
|
||||||
|
PONos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PONos NE '' THEN
|
||||||
|
PONos := @VM:@VM
|
||||||
|
Set_Property(@WINDOW:'.PO_NO','DEFPROP',PONos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
AnnContDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
OPEN 'DICT.ANNUAL_CONTRACTS' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ANNUAL_CONTRACTS', DictVar, ACNos, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ACNos = '' THEN
|
||||||
|
ErrMsg('No Annual Contracts on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
ACNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN ACNos
|
||||||
|
CALL V119('S','','D','R',ACNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN ACNos
|
||||||
|
acNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = ACNos
|
||||||
|
ACNos = Popup(@WINDow,TypeOver,'CUST_ANN_CONT')
|
||||||
|
|
||||||
|
IF ACNos NE '' THEN
|
||||||
|
ACNos := @VM:@VM
|
||||||
|
Set_Property(@WINDOW:'.ANN_CONT','DEFPROP',ACNos)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ANNUAL_CONTRACTS in COMM_DIALOG_ORDER_FIND routine.')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
QuoteDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Quotes..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.ORDER' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'QUOTE_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER', DictVar, OrderKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OrderKeys NE '' THEN
|
||||||
|
QuoteNos = ''
|
||||||
|
OrderNos = ''
|
||||||
|
FOR N = 1 TO COUNT(OrderKeys,@VM) + (OrderKeys NE '')
|
||||||
|
OrderKey = OrderKeys<1,N>
|
||||||
|
RawQuoteNos = XLATE('ORDER',OrderKey,'QUOTE_NO','X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawQuoteNos,@VM) + (RawQuoteNos NE '')
|
||||||
|
RawQuoteNo = RawQuoteNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawQuoteNo IN QuoteNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
QuoteNos = INSERT(QuoteNos,1,Pos,0,RawQuoteNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
QuoteNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF QuoteNos = '' THEN
|
||||||
|
ErrMsg('No Quotes on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
QuoteNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN QuoteNos
|
||||||
|
CALL V119('S','','D','R',QuoteNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN QuoteNos
|
||||||
|
QuoteNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = QuoteNos
|
||||||
|
QuoteNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF QuoteNos NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN QuoteNos
|
||||||
|
Set_Property(@WINDOW:'.QUOTE','LIST',QuoteNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
OrderNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
OrderNo = XLATE('WO_LOG',WOKey,WO_LOG_ORDER_NO$,'X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
LOCATE OrderNo IN OrderNos<Pos> BY 'DR' USING @VM SETTING OPos ELSE
|
||||||
|
OrderNos = INSERT(OrderNos,Pos,OPos,0,OrderNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Purchase Orders on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
debug
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_ORDER_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Customer numbers *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVar = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVar NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ORdCustNos = ''
|
||||||
|
FOR I = 1 TO COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
ORdCustNos<1,I> = ';':CustNos<1,I>
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM:'CUST_BILL_TO':@VM:ORdCustNos:@FM
|
||||||
|
|
||||||
|
* Annual contracts *
|
||||||
|
|
||||||
|
ACNos = Get_Property(@WINDOW:'.ANN_CONT','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = ACNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR ACNos = ''
|
||||||
|
ACNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF ACNos NE '' THEN SearchString := 'AC_ID':@VM:ACNos:@FM
|
||||||
|
|
||||||
|
* Work Orders *
|
||||||
|
|
||||||
|
WONos = Get_Property(@WINDOW:'.WO_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = WONos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR WONos = ''
|
||||||
|
WONos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF WONos NE '' THEN SearchString := 'WO_KEYS':@VM:WONos:@FM
|
||||||
|
|
||||||
|
* Quotes *
|
||||||
|
|
||||||
|
QuoteNos = Get_Property(@WINDOW:'.QUOTE','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = QuoteNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR QuoteNos = ''
|
||||||
|
QuoteNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF QuoteNos NE '' THEN SearchString := 'QUOTE_NO':@VM:QuoteNos:@FM
|
||||||
|
|
||||||
|
* PONos *
|
||||||
|
|
||||||
|
PONos = Get_Property(@WINDOW:'.PO_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = PONos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR PONos = ''
|
||||||
|
PONos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF PONos NE '' THEN SearchString := 'PO_NO':@VM:PONos:@FM
|
||||||
|
|
||||||
|
* Start and End Dates
|
||||||
|
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:'<=':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
* Fudge the dates - '~' is not inclusive of the end dates
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
OrdStatus = Get_Property(@WINDOW:'.STATUS','VALUE')
|
||||||
|
|
||||||
|
IF OrdStatus NE 'I' THEN
|
||||||
|
IF OrdStatus = 1 THEN
|
||||||
|
SearchString := 'CLOSE_DATE':@VM:'#':@FM
|
||||||
|
END ELSE
|
||||||
|
SearchString := 'CLOSE_DATE':@VM:'=':@FM
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
OPEN 'DICT.ORDER' TO DictVar THEN
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Orders..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'ORDER',DictVar,OrderKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,OrderKeys)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER in routine COMM_DIALOG_ORDER_FIND')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
138
LSL2/STPROC/COMM_DIALOG_PACKED_SHIPMENTS.txt
Normal file
138
LSL2/STPROC/COMM_DIALOG_PACKED_SHIPMENTS.txt
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Packed_Shipments(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Packed_Shipments window.
|
||||||
|
|
||||||
|
03/05/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Message
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$SHIP_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
EQU COL$WO_NO TO 3
|
||||||
|
EQU COL$TRACKING_NO TO 4
|
||||||
|
|
||||||
|
$INSERT COC_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Packed_Shipments'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'SelectShipments' ; GOSUB SelectShipments
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectShipments:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
StartDt = Date() - 15
|
||||||
|
|
||||||
|
OPEN 'DICT.COC' TO DictVar THEN
|
||||||
|
SearchString = 'ENTRY_DATE':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
SearchString := 'CURR_STATUS':@VM:'PACK':@FM
|
||||||
|
|
||||||
|
Flag = ''
|
||||||
|
Btree.Extract(SearchString, 'COC', DictVar, ShipKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ShipKeys = '' THEN
|
||||||
|
ErrMsg("No Shipments (COC's) on file for last 5 days.")
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
OpenShipKeys = ''
|
||||||
|
CurrStatuses = XLATE('COC',ShipKeys,'CURR_STATUS','X')
|
||||||
|
FOR I = 1 TO COUNT(ShipKeys,@VM) + (ShipKeys NE '')
|
||||||
|
IF CurrStatuses<1,I> NE 'COMP' THEN
|
||||||
|
OpenShipKeys<1,-1> = ShipKeys<1,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
OpenShipKeys := @VM
|
||||||
|
CONVERT @VM TO @RM IN OpenShipKeys
|
||||||
|
CALL V119('S','','D','R',OpenShipKeys,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN OpenShipKeys
|
||||||
|
OpenShipKeys[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
TypeOver<PDISPLAY$> = OpenShipKeys
|
||||||
|
TypeOver<PSELECT$> = 2 ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E'
|
||||||
|
ShipData = Popup(@WINDOW,TypeOver,'COC_QUERY')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ShipData = '' THEN RETURN
|
||||||
|
|
||||||
|
ArrayData = ''
|
||||||
|
FOR I = 1 TO COUNT(ShipData,@FM) + (ShipData NE '')
|
||||||
|
ArrayData<1,I> = ShipData<I,1>
|
||||||
|
ArrayData<2,I> = ShipData<I,2>
|
||||||
|
ArrayData<3,I> = ShipData<I,4>
|
||||||
|
ArrayData<4,I> = ''
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SHIPMENTS','DEFPROP',ArrayData)
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
158
LSL2/STPROC/COMM_DIALOG_PASSDOWN.txt
Normal file
158
LSL2/STPROC/COMM_DIALOG_PASSDOWN.txt
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Passdown(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_React_Event window.
|
||||||
|
|
||||||
|
01/10/2007 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, RList, Obj_React_Event
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$REACT_NO TO 1
|
||||||
|
EQU COL$REACT_TYPE TO 2
|
||||||
|
EQU COL$RED_PRESS TO 3
|
||||||
|
EQU COL$WAFER_SIZE TO 4
|
||||||
|
EQU COL$TOOL_LOC TO 5
|
||||||
|
EQU COL$ASSIGNMENT TO 6
|
||||||
|
EQU COL$ESC_HOURS TO 7
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Passdown'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'LUReactor' ; GOSUB LUReactor
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'PostEntries' ; GOSUB PostEntries
|
||||||
|
CASE Method = 'ReactNoGF' ; GOSUB ReactNoGF
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactNoGF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Don't add a return here
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactor:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
|
||||||
|
|
||||||
|
IF ReactData = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
|
||||||
|
|
||||||
|
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
|
||||||
|
ColCnt = 7
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PostEntries:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
|
||||||
|
Comment = Get_Property(@WINDOW:'.COMMENT','DEFPROP')
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
TestChar = ReactNos[-1,1]
|
||||||
|
UNTIL TestChar NE @VM OR ReactNos = ''
|
||||||
|
ReactNos[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
EventKeys = '' ;* Keys to return to the REACT_EVENT window for a browse of the newly created records
|
||||||
|
|
||||||
|
IF ReactNos NE '' AND Comment NE '' THEN
|
||||||
|
|
||||||
|
EventDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') ;* Same DTM for all new records
|
||||||
|
EventType = 'PD' ;* Passdown
|
||||||
|
LoggedBy = @USER4
|
||||||
|
|
||||||
|
ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO ReactCnt
|
||||||
|
ReactNo = ReactNos<1,I>
|
||||||
|
CurrMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X')
|
||||||
|
|
||||||
|
obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
|
||||||
|
EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,EventKeys)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
250
LSL2/STPROC/COMM_DIALOG_PASSDOWN_RPT.txt
Normal file
250
LSL2/STPROC/COMM_DIALOG_PASSDOWN_RPT.txt
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Passdown_Rpt(Method, Parm1, Parm2)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Passdown_Rpt window.
|
||||||
|
|
||||||
|
09/24/2013 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, RList, Reduce
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info, FSMsg, PlaceDialog
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg, SRP_Array
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
Equ NEW_EXIST$ To 0 ; * Reduce Mode 0
|
||||||
|
Equ NEXT_CUR$ To 1
|
||||||
|
Equ ADD_EXIST$ to 2
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Passdown_Rpt'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'LUReactor' ; GOSUB LUReactor
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
// -2 Centers the dialog in the screen and makes it visible.
|
||||||
|
PlaceDialog(-2, -2)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
*stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactor:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.REACT_NO'
|
||||||
|
|
||||||
|
CurrReactNos = Get_Property(CtrlEntID,'ARRAY')<1> ;* Existing React_Nos
|
||||||
|
CurrReactNosTrimmed = ''
|
||||||
|
FOR I = 1 TO COUNT(CurrReactNos,@VM) + (CurrReactNos NE '')
|
||||||
|
IF CurrReactNos<1,I> NE '' THEN
|
||||||
|
CurrReactNosTrimmed<1,I> = CurrReactNos<1,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
CurrReactNos = CurrReactNosTrimmed
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 2 ;* Multiple Selections
|
||||||
|
|
||||||
|
NewReactNos = Popup(@WINDOW,TypeOver,'REACTORS')
|
||||||
|
|
||||||
|
IF NewReactNos = '' OR NewReactNos = CHAR(27) THEN RETURN
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(NewReactNos,@VM) + (NewReactNos NE '')
|
||||||
|
NewReactNo = NewReactNos<1,I>
|
||||||
|
LOCATE NewReactNo IN CurrReactNos BY 'AL' USING @VM SETTING POS ELSE
|
||||||
|
CurrReactNos = INSERT(CurrReactNos,1,POS,0,NewReactNo)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'DEFPROP',CurrReactNos)
|
||||||
|
*Send_Event(CtrlEntID,'CALCULATE',2)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'CANCEL')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
* ReactorNo *
|
||||||
|
|
||||||
|
ReactNos = Get_Property(@WINDOW:'.REACT_NO','DEFPROP')
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
TestChar = ReactNos[-1,1]
|
||||||
|
UNTIL TestChar NE @VM OR ReactNos = ''
|
||||||
|
ReactNos[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
* Start and End Dates
|
||||||
|
|
||||||
|
StartDt = OCONV(ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D'),'D4/')
|
||||||
|
EndDt = OCONV(ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D'),'D4/')
|
||||||
|
|
||||||
|
RetReactNos = ReactNos ;* Save ReactNos for use in the report heading
|
||||||
|
|
||||||
|
Flag = ""
|
||||||
|
Done = False$
|
||||||
|
CursorVar = ""
|
||||||
|
|
||||||
|
* Clears all cursors
|
||||||
|
For counter = 0 To 8
|
||||||
|
ClearSelect counter
|
||||||
|
Next counter
|
||||||
|
|
||||||
|
|
||||||
|
ReduceStartDt = OCONV(ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D') - 1,'D4/')
|
||||||
|
ReduceEndDt = OCONV(ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D') + 1,'D4/')
|
||||||
|
SortList = ''
|
||||||
|
|
||||||
|
Mode = NEXT_CUR$
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
ReduceScript = 'WITH {EVENT_DT} GT ':QUOTE(ReduceStartDt):' AND WITH {EVENT_TYPE} EQ "PD"'
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
ReduceScript = 'WITH {EVENT_DT} LT ':QUOTE(ReduceEndDt):' AND WITH {EVENT_TYPE} EQ "PD"'
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
ReduceScript = 'WITH {EVENT_DT} BETWEEN ':QUOTE(ReduceStartDt):' AND ':QUOTE(ReduceEndDt):' AND WITH {EVENT_TYPE} EQ "PD"'
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ReduceScript = 'WITH {EVENT_TYPE} EQ "PD"'
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Reactor Events..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
EventKeys = ''
|
||||||
|
TableName = "REACT_EVENT"
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Reduce(ReduceScript, SortList, Mode, TableName, Cursorvar, Flag)
|
||||||
|
If Flag then
|
||||||
|
Select TableName By SortList Using Cursorvar then
|
||||||
|
Open TableName To FileVar then
|
||||||
|
Loop
|
||||||
|
ReadNext Key Using Cursorvar By AT Else Done = True$
|
||||||
|
Until Done
|
||||||
|
EventKeys<0, -1> = Key
|
||||||
|
Repeat
|
||||||
|
|
||||||
|
IF ReactNos NE '' THEN
|
||||||
|
Open 'DICT.':TableName to DictVar then
|
||||||
|
Flag = ''
|
||||||
|
Option = ''
|
||||||
|
RxEvents = ''
|
||||||
|
|
||||||
|
SearchString = 'REACT_NO'
|
||||||
|
For each ReactNo in ReactNos using @VM setting vPos
|
||||||
|
|
||||||
|
SearchString := @VM : ReactNo
|
||||||
|
|
||||||
|
Next ReactNo
|
||||||
|
SearchString := @FM
|
||||||
|
Btree.Extract(SearchString, TableName, DictVar, RxEvents, '', Flag)
|
||||||
|
If Flag NE 0 then
|
||||||
|
ErrorMsg = 'Process Error':@FM:'Error calling Btree.Extract. Please contact FI for assistance.'
|
||||||
|
end
|
||||||
|
EventKeys = SRP_Array('Join', EventKeys, RxEvents, 'AND', @VM)
|
||||||
|
END
|
||||||
|
|
||||||
|
end
|
||||||
|
End Else
|
||||||
|
ErrorMsg = 'Process Error':@FM:'Error opening REACT_EVENT table. Please contact FI for assistance.'
|
||||||
|
End
|
||||||
|
End Else
|
||||||
|
ErrorMsg = 'Process Error':@FM:'Error selecting REACT_EVENT table. Please contact FI for assistance.'
|
||||||
|
end
|
||||||
|
End Else
|
||||||
|
ErrorMsg = 'Process Error':@FM:'Error calling Reduce subroutine. Please contact FI for assistance.'
|
||||||
|
End
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
If ErrorMsg NE '' then ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
EventKeys = SRP_Array('SortRows', EventKeys, 'AR1':@FM:'DN2', 'LIST', @VM, '*')
|
||||||
|
End_Dialog(@WINDOW,EventKeys:@FM:RetReactNos:@FM:StartDt:@FM:EndDt)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
423
LSL2/STPROC/COMM_DIALOG_PO_NO_CHANGE.txt
Normal file
423
LSL2/STPROC/COMM_DIALOG_PO_NO_CHANGE.txt
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_PO_No_Change(Method, Parm1)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_PO_No_Change window.
|
||||||
|
|
||||||
|
02/20/2017 - David Klotz & Francois Rivard
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract
|
||||||
|
DECLARE SUBROUTINE RList, obj_Tables
|
||||||
|
DECLARE SUBROUTINE Print_WO_Mat_In_Labels, Print_WMI_Labels, Print_WMO_Labels, Print_Cass_Labels
|
||||||
|
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, MemberOf
|
||||||
|
DECLARE FUNCTION obj_Tables
|
||||||
|
DECLARE FUNCTION Msg, Obj_WO_Step
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT COMPANY_EQUATES
|
||||||
|
$INSERT CUST_EPI_PART_EQUATES
|
||||||
|
$INSERT EPI_PART_EQUATES
|
||||||
|
$INSERT LSL_USERS_EQU
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT NOTIFICATION_EQU
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT PROD_SPEC_EQU
|
||||||
|
$INSERT PROD_VER_EQUATES
|
||||||
|
$INSERT QUOTE_EQU
|
||||||
|
$INSERT QUOTE_DET_EQU
|
||||||
|
$INSERT QUOTE_SIGS_EQU
|
||||||
|
$INSERT RDS_EQUATES
|
||||||
|
$INSERT REACT_RUN_EQUATES
|
||||||
|
$INSERT SECURITY_RIGHTS_EQU
|
||||||
|
$INSERT WM_IN_EQUATES
|
||||||
|
$INSERT WM_OUT_EQUATES
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT WO_STEP_EQU
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
|
||||||
|
$INSERT ORDER_EQU
|
||||||
|
$INSERT ORDER_DET_EQU
|
||||||
|
|
||||||
|
EQU COL$CASSETTES TO 1
|
||||||
|
EQU TARGET_ACTIVELIST$ TO 5
|
||||||
|
|
||||||
|
EQU COL$WO_PARAM_CASSETTE TO 1
|
||||||
|
EQU COL$WO_PARAM_RDS TO 2
|
||||||
|
EQU COL$WO_PARAM_LOT TO 3
|
||||||
|
EQU COL$WO_PARAM_PO TO 4
|
||||||
|
* EQU COL$WO_PARAM_HOT_LOT TO 5
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_PO_No_Change'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'NewPONoLF' ; GOSUB NewPONoLF
|
||||||
|
CASE Method = 'SelectAll' ; GOSUB SelectAll
|
||||||
|
CASE Method = 'ClearAll' ; GOSUB ClearAll
|
||||||
|
CASE Method = 'PrintLabels' ; GOSUB PrintLabels
|
||||||
|
CASE Method = 'Update' ; GOSUB Update
|
||||||
|
CASE Method = 'Exit' ; GOSUB Exit
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
WONo = Parm1[1,@FM]
|
||||||
|
|
||||||
|
/* Initialize the window's header with the Work Order number */
|
||||||
|
Title = 'Work Order: ':WONo:' - Change PO Number'
|
||||||
|
Set_Property(@WINDOW,'TEXT',Title)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WO_NO','TEXT',WONo)
|
||||||
|
|
||||||
|
GOSUB RefreshCassettesList
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
**********
|
||||||
|
NewPONoLF:
|
||||||
|
**********
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
************
|
||||||
|
PrintLabels:
|
||||||
|
************
|
||||||
|
|
||||||
|
RDSListCtrl = @WINDOW:'.WO_NO'
|
||||||
|
WONo = Get_Property(RDSListCtrl, 'TEXT')
|
||||||
|
|
||||||
|
IF (WONo NE '') THEN
|
||||||
|
|
||||||
|
WOSteps = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')
|
||||||
|
|
||||||
|
IF INDEX(WOSteps,@VM,1) THEN
|
||||||
|
Buttons = ''
|
||||||
|
FOR I = 1 TO COUNT(WOSteps,@VM) + (WOSteps NE '')
|
||||||
|
Buttons<I> = 'Step ':I
|
||||||
|
NEXT I
|
||||||
|
SWAP @FM WITH ',' IN Buttons
|
||||||
|
Buttons = 'B':Buttons
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTEXT$> = 'Which Work Order step do you wish to print labels for?'
|
||||||
|
TypeOver<MTYPE$> = Buttons
|
||||||
|
TypeOver<MICON$> = '?'
|
||||||
|
TypeOver<MCAPTION$> = 'MultiStep WorkOrder Selection'
|
||||||
|
WOStep = Msg(@window, TypeOver)
|
||||||
|
MultiStepFlag = WOStep
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
WOStep = 1
|
||||||
|
MultiStepFlag = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
IF (WOStep = 1) THEN
|
||||||
|
PSNo = XLATE('WO_STEP',WONo:'*1',WO_STEP_PROD_SPEC_ID$,'X')
|
||||||
|
ReactorType = XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X')
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ReactorType = 'GAN'
|
||||||
|
Print_WO_Mat_In_Labels(WONo,'')
|
||||||
|
|
||||||
|
CASE ReactorType = 'EPP' OR ReactorType = 'P'
|
||||||
|
Print_WMI_Labels(WONo,1)
|
||||||
|
Print_WMO_Labels(WONo,1)
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
RDSNos = XLATE('WO_STEP',WOSteps<1,1>,WO_STEP_RDS_KEY$,'X')
|
||||||
|
IF INDEX(RDSNos,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = RDSNos
|
||||||
|
TypeOver<PFIELD$> = 2
|
||||||
|
TypeOver<PTYPE$> = 'K'
|
||||||
|
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
|
||||||
|
END ELSE
|
||||||
|
RDSKeys = RDSNos
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RDSKeys = '' THEN
|
||||||
|
ErrMsg('No RDS Numbers Selected or Work Order Not Yet Released to Production.')
|
||||||
|
END ELSE
|
||||||
|
CONVERT @VM TO @FM IN RDSKeys
|
||||||
|
Print_Cass_Labels(RDSKeys,MultiStepFlag) ;* Updated labels with Akrion Bar Codes
|
||||||
|
END
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Adjusting Step ":WOStep:" Scheduled Quantities..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
RDSNos = obj_WO_Step('AdjStepRDSQtys', WOStep:@RM:WOSteps)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode) ;* Display error from the update
|
||||||
|
Msg(@WINDOW,MsgUp) ;* Take down the processing message
|
||||||
|
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WONo) ;* Reload the data in the form
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF INDEX(RDSNos,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = RDSNos
|
||||||
|
TypeOver<PFIELD$> = 2
|
||||||
|
TypeOver<PTYPE$> = 'K'
|
||||||
|
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
|
||||||
|
END ELSE
|
||||||
|
RDSKeys = RDSNos
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RDSKeys = '' THEN
|
||||||
|
ErrMsg('No RDS Numbers Selected or Work Order Not Yet Released to Production.')
|
||||||
|
END ELSE
|
||||||
|
CONVERT @VM TO @FM IN RDSKeys
|
||||||
|
Print_Cass_Labels(RDSKeys,MultiStepFlag) ;* Updated labels with Akrion Bar Codes
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('WARNING: WO number is missing.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectAll:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RDSListCtrl = @WINDOW:'.RDSNOS'
|
||||||
|
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
|
||||||
|
|
||||||
|
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
|
||||||
|
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
|
||||||
|
|
||||||
|
FOR RDSListIndex = 1 TO RDSListCount
|
||||||
|
IF NOT(Inlist(SelectedItems<2>, RDSListIndex, @VM)) THEN
|
||||||
|
Set_Property(RDSListCtrl, 'SELPOS', '1':@FM:RDSListindex)
|
||||||
|
END
|
||||||
|
NEXT RDSListIndex
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
*********
|
||||||
|
ClearAll:
|
||||||
|
*********
|
||||||
|
|
||||||
|
RDSListCtrl = @WINDOW:'.RDSNOS'
|
||||||
|
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
|
||||||
|
|
||||||
|
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
|
||||||
|
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
|
||||||
|
|
||||||
|
FOR RDSListIndex = 1 TO RDSListCount
|
||||||
|
IF Inlist(SelectedItems<2>, RDSListIndex, @VM) THEN
|
||||||
|
Set_Property(RDSListCtrl, 'SELPOS', '1':@FM:RDSListindex)
|
||||||
|
END
|
||||||
|
NEXT RDSListIndex
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
*********************
|
||||||
|
RefreshCassettesList:
|
||||||
|
*********************
|
||||||
|
|
||||||
|
OPEN 'DICT.RDS' TO DictVar THEN
|
||||||
|
RDSNos = ''
|
||||||
|
Flag = ''
|
||||||
|
SearchString = 'WO':@VM:WONo:@FM
|
||||||
|
Btree.Extract(SearchString, 'RDS', DictVar, RDSNos, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open "DICT.RDS" for index lookup in COMM_DIALOG_PO_NO_CHANGE routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF INDEX(RDSNos,@VM,1) THEN /* Sort only if two or more records are found */
|
||||||
|
RDSNos := @VM /* Need a trailer delimiter */
|
||||||
|
CONVERT @VM TO @RM IN RDSNos
|
||||||
|
CALL V119('S','','A','R',RDSNos,'') /* Sort the RDS numbers in ascending order */
|
||||||
|
CONVERT @RM TO @VM IN RDSNos
|
||||||
|
RDSNos[-1,1] = '' /* Strip previous added trailing delimiter */
|
||||||
|
END ELSE
|
||||||
|
NULL
|
||||||
|
END
|
||||||
|
|
||||||
|
OPEN 'RDS' TO RDS_Table ELSE
|
||||||
|
ErrMsg('Unable to open "RDS" for reads in COMM_DIALOG_PO_NO_CHANGE - Create Event')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
RDS_List = ''
|
||||||
|
RDSListCount = 0
|
||||||
|
kCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
|
||||||
|
|
||||||
|
FOR I = 1 TO kCnt
|
||||||
|
RDSNo = RDSNos<1,I>
|
||||||
|
READ RDS_Rec FROM RDS_Table,RDSNo THEN
|
||||||
|
PONo = RDS_Rec<RDS_PO$>
|
||||||
|
CassNo = RDS_Rec<RDS_CASS_NO$>
|
||||||
|
LotNo = RDS_Rec<RDS_LOT_NUM$>
|
||||||
|
|
||||||
|
OPEN 'DICT.WO_MAT' TO DictVar THEN
|
||||||
|
SearchString = 'WO_NO':@VM:WONo:@FM
|
||||||
|
WO_MAT_Keys = ''
|
||||||
|
Flag = ''
|
||||||
|
Btree.Extract(SearchString, 'WO_MAT', DictVar, WO_MAT_Keys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open "DICT.WO_MAT" for index lookup in COMM_DIALOG_PO_NO_CHANGE routine.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
OPEN 'WO_MAT' TO WO_MAT_Table ELSE
|
||||||
|
ErrMsg('Unable to open "WO_MAT" for reads in COMM_DIALOG_PO_NO_CHANGE - Create Event')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
CassetteFound = 0
|
||||||
|
CassettesCount = COUNT(WO_MAT_Keys,@VM) + (WO_MAT_Keys NE '')
|
||||||
|
FOR CassettesLoopIndex = 1 TO CassettesCount
|
||||||
|
WO_MAT_Key = WO_MAT_Keys<1, CassettesLoopIndex>
|
||||||
|
WO_MAT_Key_Cass = FIELD(WO_MAT_Key,'*',2)
|
||||||
|
IF (WO_MAT_Key_Cass = CassNo) THEN
|
||||||
|
READ WO_MAT_Rec FROM WO_MAT_Table,WO_MAT_Key THEN
|
||||||
|
IF (WO_MAT_Rec<WO_MAT_SHIP_NO$> = '') THEN
|
||||||
|
RDSListCount = RDSListCount + 1
|
||||||
|
IF (WO_MAT_Rec<WO_MAT_HOT_LOT$> = 1) THEN
|
||||||
|
HotLot = 'Hot'
|
||||||
|
END ELSE
|
||||||
|
HotLot = ''
|
||||||
|
END
|
||||||
|
RDS_List<RDSListCount> = CassNo:@VM:RDSNo:@VM:LotNo:@VM:PONo:@VM:HotLot
|
||||||
|
END
|
||||||
|
END
|
||||||
|
CassetteFound = 1
|
||||||
|
END
|
||||||
|
UNTIL CassetteFound = 1
|
||||||
|
NEXT CassettesLoopIndex
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.RDSNOS','LIST',RDS_List)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
******
|
||||||
|
Close:
|
||||||
|
******
|
||||||
|
End_Dialog(@WINDOW,'Exit')
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
*****
|
||||||
|
Exit:
|
||||||
|
*****
|
||||||
|
End_Dialog(@WINDOW,'Exit')
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
*******
|
||||||
|
Update:
|
||||||
|
*******
|
||||||
|
|
||||||
|
RDSListCtrl = @WINDOW:'.WO_NO'
|
||||||
|
WONo = Get_Property(RDSListCtrl, 'TEXT')
|
||||||
|
|
||||||
|
IF (WONo NE '') THEN
|
||||||
|
|
||||||
|
NewPONumberCtrl = @WINDOW:'.NEW_PO_NO'
|
||||||
|
NewPONumber = TRIM(Get_Property(NewPONumberCtrl, 'DEFPROP'))
|
||||||
|
|
||||||
|
RDSListCtrl = @WINDOW:'.RDSNOS'
|
||||||
|
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
|
||||||
|
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
|
||||||
|
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
|
||||||
|
SelectedItemsCount = COUNT(SelectedItems<2>,@VM) + (SelectedItems<2> NE '')
|
||||||
|
|
||||||
|
IF (SelectedItemsCount > 0) THEN
|
||||||
|
|
||||||
|
Cassettes = ''
|
||||||
|
FOR RDSListIndex = 1 TO RDSListCount
|
||||||
|
IF (Inlist(SelectedItems<2>, RDSListIndex, @VM)) THEN
|
||||||
|
Cassettes := RDSKeyList<RDSListIndex, COL$CASSETTES>:@VM
|
||||||
|
END
|
||||||
|
NEXT RDSListIndex
|
||||||
|
Cassettes[-1,1] = ''
|
||||||
|
|
||||||
|
***********************************************
|
||||||
|
* Update the RDS table with the new PO number *
|
||||||
|
***********************************************
|
||||||
|
IF (NewPONumber NE '') THEN
|
||||||
|
OPEN 'RDS' TO RDSTable ELSE
|
||||||
|
ErrMsg("ERROR! OBJ_WO_LOG :ChangePONo : Unable to open the RDS Table!")
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
RLIST('SELECT REACT_RUN WITH WO_NO = ':QUOTE(WONo):' ',TARGET_ACTIVELIST$,'','','')
|
||||||
|
Done = 0
|
||||||
|
LOOP
|
||||||
|
READNEXT RDSNo ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
READ RDSRec FROM RDSTable,RDSNo THEN
|
||||||
|
PONo = RDSRec<RDS_PO$>
|
||||||
|
RONo = XLATE('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
|
||||||
|
LOCATE RONo IN Cassettes USING @VM SETTING Pos THEN
|
||||||
|
RDSRec<RDS_PO$> = NewPONumber
|
||||||
|
WRITE RDSRec ON RDSTable,RDSNo THEN
|
||||||
|
Null
|
||||||
|
END
|
||||||
|
obj_Tables('WriteRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
|
||||||
|
Result = 'PO Number Changed'
|
||||||
|
END
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
/* After making the update, refresh the LIST of cassettes */
|
||||||
|
GOSUB RefreshCassettesList
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('INFO: A new PO number value is required.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.NEW_PO_NO')
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('WARNING: WO number is missing.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
211
LSL2/STPROC/COMM_DIALOG_RDS_QUERY.txt
Normal file
211
LSL2/STPROC/COMM_DIALOG_RDS_QUERY.txt
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_RDS_Query(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_RDS_Query window.
|
||||||
|
|
||||||
|
03/24/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract, Comm_Dialog_Order_Find
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Utility, Key_Sort, Msg, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_RDS_Query'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'SelectStatusCodes' ; GOSUB SelectStatusCodes
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.USER_ID','INVALUE',@USER4)
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',2,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
stat = Send_Message(@WINDOW:'.CURR_STATUS','COLOR_BY_POS',2,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SelectStatusCodes:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = @WINDOW:'.CURR_STATUS'
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 2 ;* Multiple select
|
||||||
|
|
||||||
|
StatusCodes = Popup(@WINDOW,TypeOver,'RDS_CURR_STATUS')
|
||||||
|
|
||||||
|
IF StatusCodes NE '' THEN
|
||||||
|
ExistingArray = ''
|
||||||
|
FOR I = 1 TO COUNT(StatusCodes,@VM) + (StatusCodes NE '') + 1
|
||||||
|
ExistingArray<1,I> = StatusCodes<1,I>
|
||||||
|
ExistingArray<2,I> = OCONV(StatusCodes<1,I>,'[RDS_CURR_STATUS_CONV]')
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CURR_STATUS','DEFPROP',ExistingArray)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
OPEN 'DICT.RDS' TO DictRDSTable ELSE
|
||||||
|
ErrMsg( 'Unable to open DICT.RDS...' )
|
||||||
|
End_Dialog( @WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
WONos = Get_Property(@WINDOW:'.WO','ARRAY')<1>
|
||||||
|
Reactors = Get_Property(@WINDOW:'.REACTORS','ARRAY')<1>
|
||||||
|
PSNs = Get_Property(@WINDOW:'.PSN_NOS','ARRAY')<1>
|
||||||
|
QuoteNos = Get_Property(@WINDOW:'.QUOTE_NOS','ARRAY')<1>
|
||||||
|
PONos = Get_Property(@WINDOW:'.PO','ARRAY')<1>
|
||||||
|
PartNos = Get_Property(@WINDOW:'.PART_NUM','ARRAY')<1>
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NUM','ARRAY')<1>
|
||||||
|
CurrStatusCds = Get_Property(@WINDOW:'.CURR_STATUS','ARRAY')<1>
|
||||||
|
CustIds = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<1>
|
||||||
|
|
||||||
|
SWAP @VM:@VM WITH '' IN WONos ; IF WONos[-1,1] = @VM THEN WONos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN Reactors ; IF Reactors[-1,1] = @VM THEN Reactors[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PSNs ; IF PSNs[-1,1] = @VM THEN PSNs[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN QuoteNos ; IF QuoteNos[-1,1] = @VM THEN QuoteNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PONos ; IF PONos[-1,1] = @VM THEN PONos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN PartNos ; IF PartNos[-1,1] = @VM THEN PartNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN LotNos ; IF LotNos[-1,1] = @VM THEN LotNos[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN CurrStatusCds ; IF CurrStatusCds[-1,1] = @VM THEN CurrStatusCds[-1,1] = ''
|
||||||
|
SWAP @VM:@VM WITH '' IN CustIDs ; IF CustIDs[-1,1] = @VM THEN CustIds[-1,1] = ''
|
||||||
|
|
||||||
|
DateInFrom = Get_Property(@WINDOW:'.DATE_IN_FROM','TEXT')
|
||||||
|
DateInThru = Get_Property(@WINDOW:'.DATE_IN_THRU','TEXT')
|
||||||
|
DateOutFrom = Get_Property(@WINDOW:'.DATE_OUT_FROM','TEXT')
|
||||||
|
DateOutThru = Get_Property(@WINDOW:'.DATE_OUT_THRU','TEXT')
|
||||||
|
TimeInFrom = Get_Property(@WINDOW:'.TIME_IN_FROM','TEXT')
|
||||||
|
TimeInThru = Get_Property(@WINDOW:'.TIME_IN_THRU','TEXT')
|
||||||
|
TimeOutFrom = Get_Property(@WINDOW:'.TIME_OUT_FROM','TEXT')
|
||||||
|
TimeOutThru = Get_Property(@WINDOW:'.TIME_OUT_THRU','TEXT')
|
||||||
|
|
||||||
|
SearchStr = ''
|
||||||
|
|
||||||
|
IF WONos THEN SearchStr<-1> = 'WO':@VM:WONos
|
||||||
|
IF Reactors THEN SearchStr<-1> = 'REACTOR':@VM:Reactors
|
||||||
|
IF PSNs THEN SearchStr<-1> = 'PROD_SPEC_ID':@VM:PSNs
|
||||||
|
IF QuoteNos THEN SearchStr<-1> = 'QUOTE_NO':@VM:QuoteNos
|
||||||
|
IF PONos THEN SearchStr<-1> = 'PO':@VM:PONos
|
||||||
|
IF PartNos THEN SearchStr<-1> = 'PART_NUM':@VM:PartNos
|
||||||
|
IF LotNos THEN SearchStr<-1> = 'LOT_NUM':@VM:LotNos
|
||||||
|
IF CurrStatusCds THEN SearchStr<-1> = 'CURR_STATUS':@VM:CurrStatusCds
|
||||||
|
IF CustIds THEN SearchStr<-1> = 'CUST_NO':@VM:CustIds
|
||||||
|
|
||||||
|
|
||||||
|
IF DateInFrom AND DateInThru THEN
|
||||||
|
SearchStr<-1> = 'DATE_IN':@VM:DateInFrom:'...':DateInThru
|
||||||
|
END ELSE
|
||||||
|
IF DateInFrom THEN SearchStr<-1> = 'DATE_IN':@VM:'>=':DateInFrom
|
||||||
|
IF DateInThru THEN SearchStr<-1> = 'DATE_IN':@VM:'<=':DateInThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF DateOutFrom and DateOutThru THEN
|
||||||
|
SearchStr<-1> = 'DATE_OUT':@VM:DateOutFrom:'...':DateOutThru
|
||||||
|
END ELSE
|
||||||
|
IF DateOutFrom THEN SearchStr<-1> = 'DATE_OUT':@VM:'>=':DateOutFrom
|
||||||
|
IF DateOutThru THEN SearchStr<-1> = 'DATE_OUT':@VM:'<=':DateOutThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TimeInFrom and TimeInThru THEN
|
||||||
|
SearchStr<-1> = 'TIME_IN':@VM:TimeInFrom:'...':TimeInThru
|
||||||
|
END ELSE
|
||||||
|
IF TimeInFrom THEN SearchStr<-1> = 'TIME_IN':@VM:'>=':TimeInFrom
|
||||||
|
IF TimeInThru THEN SearchStr<-1> = 'TIME_IN':@VM:'<=':TimeInThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF TimeOutFrom and TimeOutThru THEN
|
||||||
|
SearchStr<-1> = 'TIME_OUT':@VM:TimeOutFrom:'...':TimeOutThru
|
||||||
|
END ELSE
|
||||||
|
IF TimeOutFrom THEN SearchStr<-1> = 'TIME_OUT':@VM:'>=':TimeOutFrom
|
||||||
|
IF TimeOutThru THEN SearchStr<-1> = 'TIME_OUT':@VM:'<=':TimeOutThru
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SearchStr THEN
|
||||||
|
SearchStr := @FM
|
||||||
|
Void = Utility( 'CURSOR', 'H' )
|
||||||
|
* do a btree.extract
|
||||||
|
Btree.Extract( SearchStr, 'RDS', DictRDSTable, RDSNos, '', Flag )
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
End_Dialog( @WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RDSNos THEN
|
||||||
|
CONVERT @VM TO @FM IN RDSNos
|
||||||
|
RDSNos = Key_Sort( RDSNos, 'RDS', 'CUST_NAME':@fm:'WO':@fm:'RUN_ORDER_NUM', 0 )
|
||||||
|
End_Dialog( @WINDOW, RDSNos )
|
||||||
|
END ELSE
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'No records found meeting your criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
END
|
||||||
|
Void = utility( 'CURSOR', 'A' )
|
||||||
|
END ELSE
|
||||||
|
MsgInfo = ''
|
||||||
|
MsgInfo<mtext$> = 'You have not entered any search criteria...'
|
||||||
|
MsgInfo<micon$> = '!'
|
||||||
|
Void = msg( '', MsgInfo )
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
197
LSL2/STPROC/COMM_DIALOG_RDS_VAL_CHANGE.txt
Normal file
197
LSL2/STPROC/COMM_DIALOG_RDS_VAL_CHANGE.txt
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_RDS_Val_Change(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_RDS_Val_Change window.
|
||||||
|
|
||||||
|
06/06/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_RDS_Val_Chg'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'InsertRow' ; GOSUB InsertRow
|
||||||
|
CASE Method = 'DeleteRow' ; GOSUB DeleteRow
|
||||||
|
CASE Method = 'SetCommitDt' ; GOSUB SetCommitDt
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.CASSETTES', 'STYLE')
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
AddStyle = 512 ;* MultiLine Select
|
||||||
|
MultiStyle = BitOr(Style, AddStyle)
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES', 'STYLE', MultiStyle)
|
||||||
|
|
||||||
|
CassetteList = Parm1
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','LIST',CassetteList)
|
||||||
|
Set_Property(@WINDOW,'@ORG_CASS_LIST',CassetteList)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CASSETTES'
|
||||||
|
ActiveList = Get_Property(CtrlName,'LIST')
|
||||||
|
OrgList = Get_Property(@WINDOW,'@ORG_CASS_LIST')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ActiveList,@FM) + (ActiveList NE '')
|
||||||
|
ActiveLine = ActiveList<I>
|
||||||
|
FOR K = 1 TO COUNT(ActiveLine,@VM) + (ActiveLine NE '')
|
||||||
|
IF ActiveList<I,K> NE OrgList<I,K> THEN
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',K,I,YELLOW$)
|
||||||
|
END ELSE
|
||||||
|
stat = Send_Message(CtrlName,'COLOR_BY_POS',K,I,GREEN$)
|
||||||
|
END
|
||||||
|
NEXT K
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
InsertRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CASSETTES'
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
|
||||||
|
DeletedItem = Send_Message(CtrlName, "DELETE", RowIndex)
|
||||||
|
|
||||||
|
ErrMsg('Rows may not be inserted in this table.')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
DeleteRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CASSETTES'
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
RowData = Parm2
|
||||||
|
|
||||||
|
InsertedPosition = Send_Message(CtrlName, "INSERT", RowIndex, RowData)
|
||||||
|
|
||||||
|
ErrMsg('Rows may not be deleted from this table.')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SetCommitDt:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SelectedLines = Get_Property(@WINDOW:'.CASSETTES','SELPOS')<2>
|
||||||
|
|
||||||
|
IF SelectedLines = '' THEN
|
||||||
|
ErrMsg('You must have at least one line selected in order to change a commit date.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
CommitDt = Get_Property(@WINDOW:'.COMMIT_DT','TEXT')
|
||||||
|
|
||||||
|
IF CommitDt = '' THEN
|
||||||
|
ErrMsg('Please enter the new commit date you wish to use.')
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.COMMIT_DT')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(SelectedLines,@VM) + (SelectedLines NE '')
|
||||||
|
SelectedLine = SelectedLines<1,I>
|
||||||
|
Set_Property(@WINDOW:'.CASSETTES','CELLPOS',CommitDt,4:@FM:SelectedLine) ;* Column 4 is the commit date
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CASSETTES'
|
||||||
|
ActiveList = Get_Property(CtrlName,'LIST')
|
||||||
|
OrgList = Get_Property(@WINDOW,'@ORG_CASS_LIST')
|
||||||
|
|
||||||
|
RDSNos = ''
|
||||||
|
CommitDts = ''
|
||||||
|
HotLots = ''
|
||||||
|
MUBoxes = ''
|
||||||
|
CassNos = ''
|
||||||
|
|
||||||
|
ResultCnt = 1
|
||||||
|
FOR I = 1 TO COUNT(ActiveList,@FM) + (ActiveList NE '')
|
||||||
|
ActiveLine = ActiveList<I>
|
||||||
|
OrgLine = OrgList<I>
|
||||||
|
IF ActiveLine NE OrgLine THEN
|
||||||
|
CassNos<1,ResultCnt> = ActiveLine<1,1>
|
||||||
|
RDSNos<1,ResultCnt> = ActiveLine<1,2>
|
||||||
|
CommitDts<1,ResultCnt> = ActiveLine<1,4>
|
||||||
|
HotLots<1,ResultCnt> = ActiveLine<1,3>
|
||||||
|
MUBoxes<1,ResultCnt> = ActiveLine<1,6>
|
||||||
|
ResultCnt += 1
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Result = RDSNos:@FM:CommitDts:@FM:HotLots:@FM:MUBoxes:@FM:CassNos
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
248
LSL2/STPROC/COMM_DIALOG_REACT_COMP_LU.txt
Normal file
248
LSL2/STPROC/COMM_DIALOG_REACT_COMP_LU.txt
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_React_Comp_LU(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_React_Comp_LU window.
|
||||||
|
|
||||||
|
10/24/2013 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, RList, Send_Message
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT REACT_SERVS_EQUATES
|
||||||
|
$INSERT REACT_COMP_EQUATES
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_React_Comp_LU'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.NAVIGATOR'
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'DBLCK' ; GOSUB NavigatorDC
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SelectSent = "SELECT REACT_COMP WITH CLASS = 'Group' BY DESC"
|
||||||
|
|
||||||
|
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
OPEN 'REACT_COMP' TO ReactCompTable ELSE
|
||||||
|
ErrMsg('Unable to Open "REACT_COMP" table for read')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
PrevSystem = ''
|
||||||
|
PrevItem = ''
|
||||||
|
PrevAction = ''
|
||||||
|
|
||||||
|
DispLine = 1
|
||||||
|
DispList = ''
|
||||||
|
|
||||||
|
|
||||||
|
IndentLvl = 1
|
||||||
|
IndentLvlKeys = ''
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
READNEXT ReactCompID ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
IndentLvlKeys<IndentLvl,-1> = ReactCompID
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
DispList = ''
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IndentLvlKey = IndentLvlKeys<IndentLvl,1>
|
||||||
|
IndentLvlKeys = DELETE(IndentLvlKeys,IndentLvl,1,0)
|
||||||
|
|
||||||
|
READ ReactCompRec FROM ReactCompTable,IndentLvlKey THEN
|
||||||
|
|
||||||
|
Class = ReactCompRec<REACT_COMP_CLASS$>
|
||||||
|
Desc = ReactCompRec<REACT_COMP_DESC$>
|
||||||
|
|
||||||
|
DispList := IndentLvl:'-':IndentLvl:':':Class:' - ':Desc:@FM
|
||||||
|
|
||||||
|
IF ReactCompRec<REACT_COMP_SUB_COMP$> NE '' THEN
|
||||||
|
IndentLvl += 1
|
||||||
|
IndentLvlKeys<IndentLvl> = ReactCompRec<REACT_COMP_SUB_COMP$>
|
||||||
|
END
|
||||||
|
|
||||||
|
END ;* End of ReactComprec read.
|
||||||
|
|
||||||
|
IF IndentLvlKeys<IndentLvl> = '' THEN
|
||||||
|
IndentLvl -= 1
|
||||||
|
IF IndentLvlKeys[-1,1] = @FM THEN
|
||||||
|
IndentLvlKeys[-1,1] = ''
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
UNTIL IndentLvlKeys = ''
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.NAVIGATOR', 'LIST', DispList)
|
||||||
|
|
||||||
|
*Send_Message(@WINDOW:'.NAVIGATOR', 'EXPAND', 0, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NavigatorDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactor:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
|
||||||
|
|
||||||
|
IF ReactData = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
|
||||||
|
|
||||||
|
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
|
||||||
|
ColCnt = 7
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUEventTYpe:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
EventTypes = Popup(@WINDOW,TypeOver,'REACT_EVENT_TYPE')
|
||||||
|
|
||||||
|
IF EventTypes = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.EVENT_TYPE','LIST',EventTypes)
|
||||||
|
|
||||||
|
LineCnt = COUNT(EventTypes,@FM) + (EventTypes NE '')
|
||||||
|
ColCnt = 2
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.EVENT_TYPE','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,EventKeys)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
290
LSL2/STPROC/COMM_DIALOG_REACT_EVENT_QUERY.txt
Normal file
290
LSL2/STPROC/COMM_DIALOG_REACT_EVENT_QUERY.txt
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_React_Event_Query(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_React_Event window.
|
||||||
|
|
||||||
|
01/10/2007 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, RList
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$REACT_NO TO 1
|
||||||
|
EQU COL$REACT_TYPE TO 2
|
||||||
|
EQU COL$RED_PRESS TO 3
|
||||||
|
EQU COL$WAFER_SIZE TO 4
|
||||||
|
EQU COL$TOOL_LOC TO 5
|
||||||
|
EQU COL$ASSIGNMENT TO 6
|
||||||
|
EQU COL$ESC_HOURS TO 7
|
||||||
|
|
||||||
|
EQU COL$EVENT_CD TO 1
|
||||||
|
EQU COL$EVENT_TYPE TO 2
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'LUReactor' ; GOSUB LUReactor
|
||||||
|
CASE Method = 'LUEventType' ; GOSUB LUEventType
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'StartDtGF' ; GOSUB StartDtGF
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactor:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
|
||||||
|
|
||||||
|
IF ReactData = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
|
||||||
|
|
||||||
|
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
|
||||||
|
ColCnt = 7
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUEventTYpe:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
EventTypes = Popup(@WINDOW,TypeOver,'REACT_EVENT_TYPE')
|
||||||
|
|
||||||
|
IF EventTypes = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.EVENT_TYPE','LIST',EventTypes)
|
||||||
|
|
||||||
|
LineCnt = COUNT(EventTypes,@FM) + (EventTypes NE '')
|
||||||
|
ColCnt = 2
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.EVENT_TYPE','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
IF RetVal NE '' THEN
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
StartDtGF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
StartDt = Get_Property(@WINDOW:'.START_DT','DEFPROP')
|
||||||
|
|
||||||
|
IF StartDt = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.START_DT','DEFPROP',OCONV(Date(),'D4/'))
|
||||||
|
Set_Property(@WINDOW:'.START_DT','SELECTION',1:@FM:99)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
|
||||||
|
* ReactorNo *
|
||||||
|
|
||||||
|
ReactNos = Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
TestChar = ReactNos[-1,1]
|
||||||
|
UNTIL TestChar NE @VM OR ReactNos = ''
|
||||||
|
ReactNos[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
* Event Types *
|
||||||
|
|
||||||
|
EventTypes = Get_Property(@WINDOW:'.EVENT_TYPE','DEFPROP')<COL$EVENT_CD>
|
||||||
|
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
TestChar = EventTypes[-1,1]
|
||||||
|
UNTIL TestChar NE @VM OR EventTypes = ''
|
||||||
|
EventTypes[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
* Start and End Dates
|
||||||
|
|
||||||
|
StartDt = OCONV(ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D'),'D4')
|
||||||
|
EndDt = OCONV(ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D'),'D4')
|
||||||
|
|
||||||
|
|
||||||
|
SelectSent = 'SELECT REACT_EVENT '
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
|
||||||
|
SelectSent := 'WITH EVENT_DT GE ':QUOTE(StartDt)
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SelectSent := 'WITH EVENT_DT LE ':QUOTE(EndDt)
|
||||||
|
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
SelectSent := 'WITH EVENT_DT GE ':QUOTE(StartDt):' AND WITH EVENT_DT LE ':QUOTE(EndDt)
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ReactNos NE '' THEN
|
||||||
|
|
||||||
|
SWAP @VM WITH '" "' in ReactNos
|
||||||
|
|
||||||
|
SelectSent := ' AND WITH REACT_NO ':QUOTE(ReactNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF EventTypes NE '' THEN
|
||||||
|
SWAP @VM WITH '" "' IN EventTypes
|
||||||
|
SelectSent := ' AND WITH EVENT_TYPE ':QUOTE(EventTypes)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF ReactNos = '' THEN
|
||||||
|
SelectSent := ' BY REACT_NO'
|
||||||
|
END
|
||||||
|
|
||||||
|
SelectSent := ' BY-DSND EVENT_DTM'
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Reactor Events..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END ELSE
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
END
|
||||||
|
|
||||||
|
EventKeys = ''
|
||||||
|
Done = ''
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
READNEXT EventKey ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
EventKeys := EventKey:@VM
|
||||||
|
REPEAT
|
||||||
|
EventKeys [-1,1] = ''
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,EventKeys)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
240
LSL2/STPROC/COMM_DIALOG_REACT_SERV_LU.txt
Normal file
240
LSL2/STPROC/COMM_DIALOG_REACT_SERV_LU.txt
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_React_Serv_LU(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_React_Serv_LU window.
|
||||||
|
|
||||||
|
10/24/2013 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, RList, Send_Message
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RLIST_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT REACT_SERVS_EQUATES
|
||||||
|
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU TAB$ TO \09\
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_React_Serv_LU'
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrCode = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE EntID = @WINDOW
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'CREATE' ; GOSUB Create
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE EntID = @WINDOW:'.NAVIGATOR'
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Event = 'DBLCK' ; GOSUB NavigatorDC
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
|
||||||
|
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
SelectSent = 'SELECT REACT_SERVS BY REACT_SYSTEM BY REACT_ITEM BY ACTION BY SVC_DESC'
|
||||||
|
|
||||||
|
|
||||||
|
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
OPEN 'REACT_SERVS' TO ReactServTable ELSE
|
||||||
|
ErrMsg('Unable to Open "REACT_SERVS" table for read')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Done = 0
|
||||||
|
PrevSystem = ''
|
||||||
|
PrevItem = ''
|
||||||
|
PrevAction = ''
|
||||||
|
|
||||||
|
DispLine = 1
|
||||||
|
DispList = ''
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
READNEXT ReactServID ELSE Done = 1
|
||||||
|
UNTIL Done
|
||||||
|
READ ReactServRec FROM ReactServTable,ReactServID THEN
|
||||||
|
|
||||||
|
System = ReactServRec<REACT_SERVS_REACT_SYSTEM$>
|
||||||
|
Item = ReactServRec<REACT_SERVS_REACT_ITEM$>
|
||||||
|
Action = ReactServRec<REACT_SERVS_ACTION$>
|
||||||
|
SvcDesc = ReactServRec<REACT_SERVS_SVC_DESC$>
|
||||||
|
|
||||||
|
IF System = '' THEN System = 'N/A'
|
||||||
|
|
||||||
|
IF System NE PrevSystem THEN
|
||||||
|
DispList := '1-1:':'System - ':System:@FM
|
||||||
|
PrevSystem = System
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Item NE PrevItem THEN
|
||||||
|
DispList := '2-2:':Item:@FM
|
||||||
|
PrevItem = Item
|
||||||
|
END
|
||||||
|
|
||||||
|
IF Action NE PrevAction THEN
|
||||||
|
DispList := '3-3:':Action:@FM
|
||||||
|
PrevAction = Action
|
||||||
|
END
|
||||||
|
|
||||||
|
IF SvcDesc NE '' THEN
|
||||||
|
DispList := '4-4:':SvcDesc:@FM
|
||||||
|
END
|
||||||
|
|
||||||
|
END ;* End of ReactServRec read.
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.NAVIGATOR', 'LIST', DispList)
|
||||||
|
|
||||||
|
*Send_Message(@WINDOW:'.NAVIGATOR', 'EXPAND', 0, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
NavigatorDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUReactor:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
|
||||||
|
|
||||||
|
IF ReactData = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
|
||||||
|
|
||||||
|
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
|
||||||
|
ColCnt = 7
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUEventTYpe:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
|
||||||
|
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = '2' ;* Multiple Select
|
||||||
|
TypeOver<PTYPE$> = 'E' ;* Return entire row
|
||||||
|
|
||||||
|
EventTypes = Popup(@WINDOW,TypeOver,'REACT_EVENT_TYPE')
|
||||||
|
|
||||||
|
IF EventTypes = '' THEN RETURN
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.EVENT_TYPE','LIST',EventTypes)
|
||||||
|
|
||||||
|
LineCnt = COUNT(EventTypes,@FM) + (EventTypes NE '')
|
||||||
|
ColCnt = 2
|
||||||
|
|
||||||
|
FOR Line = 1 TO LineCnt
|
||||||
|
FOR Column = 2 TO ColCnt
|
||||||
|
stat = Send_Message(@WINDOW:'.EVENT_TYPE','COLOR_BY_POS',Column,Line,GREEN$)
|
||||||
|
NEXT Column
|
||||||
|
NEXT Line
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,EventKeys)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
249
LSL2/STPROC/COMM_DIALOG_SAP_COMM.txt
Normal file
249
LSL2/STPROC/COMM_DIALOG_SAP_COMM.txt
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_SAP_Comm( Instruction, Parm1 )
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter Module for SAP Communications Window
|
||||||
|
|
||||||
|
J.C. Henry, Inc. - John C. Henry
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Center_Window,StatusLine,Set_Property,End_Dialog, Send_Event, Set_Status, Adios, obj_SAP, obj_Notes, obj_Post_Log, RList, SAP_Services
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, obj_Tables, Post_Event, Send_INfo, ShowWindow, obj_Appwindow, Send_Dyn,ErrLog, obj_WO_Mat_Log, Sleepery, Yield, SRP_Stopwatch, SRP_TCPClient
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status,Dialog_Box, FindWindow, Utility, SAP_Services, Database_Services, SRP_TCPClient
|
||||||
|
|
||||||
|
$INSERT QUOTE_SIGS_EQU
|
||||||
|
$INSERT NOTIFICATION_EQU
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$INSERT LOGICAL
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
EQU InBoundLimit$ TO 20
|
||||||
|
EQU OutBoundLimit$ TO 10
|
||||||
|
EQU DEFAULT_INTERVAL$ TO 10 /* Seconds */
|
||||||
|
|
||||||
|
$INSERT ENVIRON_CONSTANTS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_SAP_Comm routine'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Instructions = 'Create'
|
||||||
|
Instructions := @FM:'Timer'
|
||||||
|
Instructions := @FM:'StartStop'
|
||||||
|
Instructions := @FM:'CommStartStop'
|
||||||
|
Instructions := @FM:'Close'
|
||||||
|
|
||||||
|
RetVal = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Timer' ; GOSUB Timer
|
||||||
|
CASE Instruction EQ @Window : '.LOG_ON' AND Parm1 EQ 'CLICK' ; GoSub LOG_ON.CLICK
|
||||||
|
CASE Instruction EQ @Window : '.TRANS_QTY' AND Parm1 EQ 'LOSTFOCUS' ; GoSub TRANS_QTY.LOSTFOCUS
|
||||||
|
CASE Instruction EQ @Window : '.SAP_HOLD_START_DTM' AND Parm1 EQ 'LOSTFOCUS' ; GoSub SAP_HOLD_START_DTM.LOSTFOCUS
|
||||||
|
CASE Instruction EQ @Window : '.SAP_HOLD_STOP_DTM' AND Parm1 EQ 'LOSTFOCUS' ; GoSub SAP_HOLD_STOP_DTM.LOSTFOCUS
|
||||||
|
CASE Instruction = 'Close' ; GOSUB Close
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction ':QUOTE(Instruction):' passed to routine'
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrTitle:@SVM:ErrorMsg)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN RetVal
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
|
otParms = 'SYSOBJ':@RM:'SAP_COMM'
|
||||||
|
obj_Tables('LockRec',otParms) ;* Places lock on fictional record
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrorMsg = ErrTitle:@SVM:'Another SAP Communications Server is already running.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
Post_Event(@WINDOW,'CLOSE')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LOCKED',1) ;* Set ad-hoc property '@LOCKED' to true
|
||||||
|
Set_Property(@WINDOW,'TIMER','0':@FM:'1000') ;* Set timer event to start in 1000 msecs (1 second). Do not set for auto-repeat. Let the TIMER event handle this.
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.TRANS_QTY', 'INVALUE', SAP_Services('GetSAPTransactionLimit'))
|
||||||
|
Set_Property(@WINDOW:'.SAP_HOLD_START_DTM', 'INVALUE', SAP_Services('GetSAPHoldStartDateTime'))
|
||||||
|
Set_Property(@WINDOW:'.SAP_HOLD_STOP_DTM', 'INVALUE', SAP_Services('GetSAPHoldStopDateTime'))
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
LOG_ON.CLICK:
|
||||||
|
|
||||||
|
LoggingFlag = Get_Property(@Window : '.LOG_ON', 'CHECK')
|
||||||
|
SAP_Services('SetTransactionLoggingFlag', LoggingFlag)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
TRANS_QTY.LOSTFOCUS:
|
||||||
|
|
||||||
|
TransactionLimit = Get_Property(@Window : '.TRANS_QTY', 'TEXT')
|
||||||
|
SAP_Services('SetSAPTransactionLimit', TransactionLimit)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
SAP_HOLD_START_DTM.LOSTFOCUS:
|
||||||
|
|
||||||
|
HoldStartDTM = Get_Property(@Window : '.SAP_HOLD_START_DTM', 'INVALUE')
|
||||||
|
SAP_Services('SetSAPHoldStartDateTime', HoldStartDTM)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
SAP_HOLD_STOP_DTM.LOSTFOCUS:
|
||||||
|
|
||||||
|
HoldStopDTM = Get_Property(@Window : '.SAP_HOLD_STOP_DTM', 'INVALUE')
|
||||||
|
SAP_Services('SetSAPHoldStopDateTime', HoldStopDTM)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
UNLOCK ALL
|
||||||
|
NumWindows = Utility('WINCOUNT')
|
||||||
|
If NumWindows EQ 1 then Set_Property('SYSTEM','IDLEPROC','ADIOS')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Timer:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.CURR_TIME','TEXT',OCONV( Time(), 'MTHS' )) ;* Clock on window
|
||||||
|
|
||||||
|
LastTime = Get_Property(@WINDOW,'@LAST_TIME')
|
||||||
|
|
||||||
|
* * * Added 1/29/2015 JCH/DKK * * *
|
||||||
|
|
||||||
|
*** Used to temporarily stop the SAP interface during specified time periods, like SAP-PI outage, EOM procesing, VM backups.
|
||||||
|
|
||||||
|
SAPOutage = SAP_Services('GetSAPOutageFlag')
|
||||||
|
IF SAPOutage THEN
|
||||||
|
Set_Property(@WINDOW:'.BACKUP_HOLD','VISIBLE',1)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.BACKUP_HOLD','VISIBLE',0)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF LastTime > Time() THEN
|
||||||
|
Set_Property(@WINDOW,'@LAST_TIME', Time()) ;* Midnight -> clock resets to 0
|
||||||
|
LastTime = Time()
|
||||||
|
// Call the SRPEngineService and pass it the command
|
||||||
|
Command = 'RUN SAP_SERVICES "SendReconcile"'
|
||||||
|
TCPServerSettings@ = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TCPIP_SETTINGS')
|
||||||
|
TcpClientHandle = 0
|
||||||
|
If SRP_TcpClient(TcpClientHandle, 'CONNECT', TCPServerSettings@<1>, TCPServerSettings@<2>) then
|
||||||
|
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||||
|
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||||
|
end
|
||||||
|
* obj_SAP('SendReconcile') ;* WIP Recom data sent to SAP once each day at midnight
|
||||||
|
END
|
||||||
|
|
||||||
|
CommOn = Get_Property(@WINDOW,'@COMM_ACTIVE')
|
||||||
|
CommOnTime = Get_Property(@WINDOW,'@COMM_ACTIVE_TIME')
|
||||||
|
|
||||||
|
IF CommOn THEN
|
||||||
|
Send_Info('Comm Active...')
|
||||||
|
IF Time() - CommOnTime > 22 THEN
|
||||||
|
Set_Property(@WINDOW,'@COMM_ACTIVE',0) ;* FTP window timeout takes about 21 seconds
|
||||||
|
Set_Property(@WINDOW,'@COMM_ACTIVE_TIME','') ;* Hold off retrying until
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Interval = DEFAULT_INTERVAL$
|
||||||
|
IF Time() >= (LastTime + Interval) Then ;* SAP_Comm cycle time setting = 10 sec - changed to 8 sec -dkk 1/14/15
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LAST_TIME', Time())
|
||||||
|
|
||||||
|
END ;* End of comm interval time check
|
||||||
|
|
||||||
|
END ;* End of check for @COMM_ON flag
|
||||||
|
|
||||||
|
|
||||||
|
*********************************************
|
||||||
|
* Refresh the SAP Buffer Outbound Qty Count *
|
||||||
|
*********************************************
|
||||||
|
|
||||||
|
OutboundQty = SAP_Services('GetOutboundPending')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.OUTBOUND_QTY','TEXT', OutboundQty)
|
||||||
|
|
||||||
|
If (OutboundQty >= OutBoundLimit$) Then
|
||||||
|
OutBoundMsgSent = Get_Property(@Window,'@OutBoundMsgSent')
|
||||||
|
If (OutBoundMsgSent NE True$) Then
|
||||||
|
Recipients = XLATE('NOTIFICATION', 'FI_SUPPORT', 'USER_ID', 'X')
|
||||||
|
SentFrom = 'OI Admin'
|
||||||
|
Subject = 'SAP Comm OUTBOUND Pending Buffer'
|
||||||
|
Message = 'SAP Comm OUTBOUND Pending Buffer is filling up with ':OutboundQty:' records not sent. Check SAP interface.'
|
||||||
|
AttachWindow = ''
|
||||||
|
AttachKey = ''
|
||||||
|
SendToGroup = ''
|
||||||
|
|
||||||
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@OutBoundMsgSent', True$)
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
Set_Property(@WINDOW,'@OutBoundMsgSent', False$)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
************************************************
|
||||||
|
* Refresh the SAP Buffer Inbound Pending Count *
|
||||||
|
************************************************
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
InboundPending = SAP_Services('GetInboundPending')
|
||||||
|
If InboundPending < 0 then InboundPending = 0
|
||||||
|
Set_Property(@WINDOW:'.INBOUND_PENDING','TEXT', InboundPending)
|
||||||
|
|
||||||
|
If (InboundPending >= InBoundLimit$) Then
|
||||||
|
|
||||||
|
InBoundMsgSent = Get_Property(@Window,'@InBoundMsgSent')
|
||||||
|
If (InBoundMsgSent NE True$) Then
|
||||||
|
Recipients = XLATE('NOTIFICATION', 'FI_SUPPORT', 'USER_ID', 'X')
|
||||||
|
SentFrom = 'OI Admin'
|
||||||
|
Subject = 'SAP Comm INBOUND Pending Buffer'
|
||||||
|
Message = 'SAP Comm INBOUND Pending Buffer is filling up with ':InBoundPending:' records not received. Check SAP interface.'
|
||||||
|
AttachWindow = ''
|
||||||
|
AttachKey = ''
|
||||||
|
SendToGroup = ''
|
||||||
|
|
||||||
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@InBoundMsgSent', True$)
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
Set_Property(@WINDOW,'@InBoundMsgSent', False$)
|
||||||
|
end
|
||||||
|
|
||||||
|
Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield(); Yield()
|
||||||
|
Sleepery(500)
|
||||||
|
Set_Property(@WINDOW,'TIMER','0':@FM:'1000') ;* Set the next timer event to start in 1000 msecs (1 second).
|
||||||
|
|
||||||
|
RETURN
|
81
LSL2/STPROC/COMM_DIALOG_TEXT.txt
Normal file
81
LSL2/STPROC/COMM_DIALOG_TEXT.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Text(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Text window.
|
||||||
|
|
||||||
|
06/09/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Text'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
WindowTitle = Parm1<1>
|
||||||
|
TextIn = Parm1<2>
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',WindowTitle)
|
||||||
|
Set_Property(@WINDOW:'.TEXT_BOX','DEFPROP',TextIn)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Text = Get_Property(@WINDOW:'.TEXT_BOX','DEFPROP')
|
||||||
|
|
||||||
|
Result = Text
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
241
LSL2/STPROC/COMM_DIALOG_TOOL_MODE.txt
Normal file
241
LSL2/STPROC/COMM_DIALOG_TOOL_MODE.txt
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Tool_Mode(Method, Parm1, Parm2, Parm3)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Tool_Mode window.
|
||||||
|
|
||||||
|
10/23/2007 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, obj_Tool_Log
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, SRP_Array
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
$insert IR_INSERTS
|
||||||
|
$INSERT TOOL_EQUATES
|
||||||
|
|
||||||
|
ErrCode = ''
|
||||||
|
ErrorMsg = ''
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Tool_Mode'
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
Begin Case
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'LU_UserID' ; GOSUB LU_UserID
|
||||||
|
CASE Method = 'UserIDLF' ; GOSUB UserIDLF
|
||||||
|
CASE Method = 'LU_ChgToMode' ; GOSUB LU_ChgToMode
|
||||||
|
Case Method = 'EnableOK' ; GOSUB EnableOK
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
End Case
|
||||||
|
|
||||||
|
Return Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
ToolID = Parm1
|
||||||
|
ToolRec = XLATE('TOOL', ToolID, '', 'X')
|
||||||
|
ToolDesc = ToolRec<TOOL_TOOL_DESC$>
|
||||||
|
ToolProc = ToolRec<TOOL_TOOL_PROC$>
|
||||||
|
|
||||||
|
CurrMode = XLATE('TOOL', ToolID, 'CURR_MODE', 'X')<1,1>
|
||||||
|
|
||||||
|
IF CurrMode EQ "" THEN
|
||||||
|
obj_Tool_Log('InitialLog', ToolID)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
CurrMode = 'OUT'
|
||||||
|
END
|
||||||
|
|
||||||
|
* Window title in top bar
|
||||||
|
|
||||||
|
WinText = 'Tool Mode Change - ':ToolDesc
|
||||||
|
Set_Property(@WINDOW, 'TEXT', WinText)
|
||||||
|
|
||||||
|
UserName = Oconv(@USER4, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.USER_ID', 'DEFPROP', @USER4)
|
||||||
|
Set_Property(@WINDOW:'.USER_NAME', 'DEFPROP', UserName)
|
||||||
|
Set_Property(@WINDOW:'.REASON', 'FOCUS', 1)
|
||||||
|
Set_Property(@WINDOW:'.TOOL_ID', 'DEFPROP', ToolID)
|
||||||
|
Set_Property(@WINDOW:'.CURR_MODE', 'DEFPROP', CurrMode)
|
||||||
|
|
||||||
|
ModeData = XLATE('SYSREPOSPOPUPS', 'LSL2**TOOL_MODE', '8', 'X')
|
||||||
|
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.NEW_MODE':@RM ; Props = 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.NEW_MODE_GROUP':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.CHG_TO_MODE':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LU_CHG_TO_MODE':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.CHG_TO_MODE_LABEL' ; Props := 'VISIBLE'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*IF ToolProc = 'G' THEN
|
||||||
|
|
||||||
|
* GaN process
|
||||||
|
|
||||||
|
Vals = '0':@RM:'0':@RM:'1':@RM:'1':@RM:'1'
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
*END ELSE
|
||||||
|
/*
|
||||||
|
* Si Process
|
||||||
|
|
||||||
|
Vals = '1':@RM:'1':@RM:'0':@RM:'0':@RM:'0'
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
|
||||||
|
TextVals = ''
|
||||||
|
ValueVals = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ModeData,@VM) + (ModeData NE '')
|
||||||
|
ModeID = ModeData<1,I,1>
|
||||||
|
ModeDesc = ModeData<1,I,2>
|
||||||
|
IF ModeID NE CurrMode THEN
|
||||||
|
TextVals := ModeDesc:@RM
|
||||||
|
ValueVals := ModeID:@RM
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
*TextVals[-1,1] = '' ;* Leave the hanging @RM -> These are concatenated a few lines down
|
||||||
|
ValueVals[-1,1] = ''
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.NEW_MODE.LABELFORMODE1':@RM:@WINDOW:'.NEW_MODE.LABELFORMODE2':@RM:@WINDOW:'.NEW_MODE.LABELFORMODE3':@RM
|
||||||
|
Ctrls := @WINDOW:'.NEW_MODE.LABELFORMODE1':@RM:@WINDOW:'.NEW_MODE.LABELFORMODE2':@RM:@WINDOW:'.NEW_MODE.LABELFORMODE3'
|
||||||
|
|
||||||
|
Props = 'TEXT':@RM:'TEXT':@RM:'TEXT':@RM:'VALUE':@RM:'VALUE':@RM:'VALUE'
|
||||||
|
Vals = TextVals:ValueVals
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
DefVal = ValueVals[1,@RM]
|
||||||
|
Set_Property(@WINDOW:'.NEW_MODE', 'VALUE', DefVal)
|
||||||
|
*/
|
||||||
|
|
||||||
|
*END ;* End of check for Process flag
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LU_UserID:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PSELECT$> = 1
|
||||||
|
TypeOver<PDISPLAY$> = 'BY LAST_FIRST'
|
||||||
|
|
||||||
|
UserID = Popup(@WINDOW,TypeOver,'SHOW_USERS')
|
||||||
|
|
||||||
|
IF UserID NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.USER_ID','DEFPROP',UserID)
|
||||||
|
END ELSE
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
UserIDLF:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
UserID = Get_Property(@WINDOW:'.USER_ID','DEFPROP')
|
||||||
|
|
||||||
|
UserName = OCONV(UserID,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
Set_Property(@WINDOW:'.USER_NAME','DEFPROP',UserName)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LU_ChgToMode:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = @WINDOW:'.':Parm1
|
||||||
|
|
||||||
|
|
||||||
|
NewMode = Popup(@WINDOW,'','TOOL_MODE')
|
||||||
|
|
||||||
|
IF NewMode = '' THEN RETURN
|
||||||
|
|
||||||
|
obj_AppWindow('LUValReturn',NewMode:@RM:ReturnCtrl)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * *
|
||||||
|
|
||||||
|
UserID = Get_Property(@WINDOW:'.USER_ID', 'DEFPROP')
|
||||||
|
Reason = Get_Property(@WINDOW:'.REASON', 'DEFPROP')
|
||||||
|
ChgToMode = Get_Property(@WINDOW:'.CHG_TO_MODE','DEFPROP')
|
||||||
|
|
||||||
|
Result = UserID:@FM:Reason:@FM:ChgToMode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
EnableOK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ChgToMode = Get_Property(@WINDOW:'.CHG_TO_MODE','DEFPROP')
|
||||||
|
ValidModes = Xlate('SYSREPOSPOPUPS', 'LSL2**TOOL_MODE', 'DISPLAY', 'X')
|
||||||
|
ValidModes = SRP_Array('Rotate', ValidModes, @VM, @SVM)
|
||||||
|
ValidModes = ValidModes<0, 1>
|
||||||
|
Locate ChgToMode in ValidModes using @SVM setting vsPos then
|
||||||
|
Enabled = True$
|
||||||
|
end else
|
||||||
|
Enabled = False$
|
||||||
|
end
|
||||||
|
Set_Property(@Window:'.OK_BUTTON', 'ENABLED', Enabled)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
370
LSL2/STPROC/COMM_DIALOG_TOOL_STATUS.txt
Normal file
370
LSL2/STPROC/COMM_DIALOG_TOOL_STATUS.txt
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Tool_Status(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Tool_Status window.
|
||||||
|
|
||||||
|
10/18/2007 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, Tool_Services, Error_Services
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, obj_Tool_Log
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
DECLARE FUNCTION obj_Tool, SRP_Array, Error_Services
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU FONTBLUE$ TO 16711680 ;* \FF0000\
|
||||||
|
EQU FONTRED$ TO 255 ;* \0000FF\
|
||||||
|
EQU APPYELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT TOOL_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Tool_Status'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'TBClick' ; GOSUB TBClick
|
||||||
|
CASE Method = 'Timer' ; GOSUB Refresh
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ScreenSize = Get_Property('SYSTEM','SIZE')
|
||||||
|
DialogSize = Get_Property(@WINDOW,'SIZE')
|
||||||
|
|
||||||
|
wScreen = ScreenSize<3>
|
||||||
|
hScreen = ScreenSize<4>
|
||||||
|
|
||||||
|
xDialog = DialogSize<1>
|
||||||
|
yDialog = DialogSize<2>
|
||||||
|
wDialog = DialogSize<3>
|
||||||
|
hDialog = DialogSize<4>
|
||||||
|
|
||||||
|
DialogSize<1> = (wScreen - wDialog)/2
|
||||||
|
DialogSize<2> = 580; //496 ;* 50 pixels @ top + 444 pixel dialog above + 2 pixel space
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'SIZE',DialogSize:@FM:-1)
|
||||||
|
|
||||||
|
CurSize = Get_Property(@Window, "SIZE")
|
||||||
|
MinW = CurSize<3>
|
||||||
|
MinH = CurSize<4>
|
||||||
|
MaxW = CurSize<3>
|
||||||
|
MaxH = CurSize<4>
|
||||||
|
Set_Property(@Window,"TRACKINGSIZE",MinW:@FM:MinH:@FM:MaxW:@FM:MaxH)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TIMER',60000:@FM:40000)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'VISIBLE',1)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ToolIDs = obj_Tool('KeysByType') ;* All tool IDs sorted by TOOL_TYPE
|
||||||
|
|
||||||
|
CleansTools = ''
|
||||||
|
MetrologyTools = ''
|
||||||
|
InspectionTools = ''
|
||||||
|
TransferTools = ''
|
||||||
|
QuartzTools = ''
|
||||||
|
OtherTools = ''
|
||||||
|
|
||||||
|
CTCnt = 0
|
||||||
|
MTCnt = 0
|
||||||
|
ITCnt = 0
|
||||||
|
TRCnt = 0
|
||||||
|
QZCnt = 0
|
||||||
|
OtherCnt = 0
|
||||||
|
|
||||||
|
DispTools = ''
|
||||||
|
|
||||||
|
For Each ToolID in ToolIDs using @VM
|
||||||
|
ToolRec = XLATE('TOOL',ToolID,'','X')
|
||||||
|
ToolType = ToolRec<TOOL_TOOL_TYPE$>
|
||||||
|
ToolDesc = ToolRec<TOOL_TOOL_DESC$>
|
||||||
|
ToolMode = XLATE('TOOL', ToolID, 'CURR_MODE', 'X')<1,1>
|
||||||
|
ToolHrs = OCONV(XLATE('TOOL', ToolID, 'CURR_MODE_HRS', 'X'), 'MD2')
|
||||||
|
PMStatus = XLATE('TOOL', ToolID, 'PM_STATUS', 'X')
|
||||||
|
IF ToolRec<TOOL_ACTIVE_ESCALATION$> = '' THEN
|
||||||
|
ToolEsc = 0
|
||||||
|
END ELSE
|
||||||
|
ToolEsc = 1
|
||||||
|
ToolHrs = XLATE('TOOL_ESC',ToolRec<TOOL_ACTIVE_ESCALATION$>,'ELAPSED_HRS','X')
|
||||||
|
ToolHrs = OCONV(ToolHrs,'MD2')
|
||||||
|
END
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE INDEX(ToolType,'Cleans',1)
|
||||||
|
SortPriority = 1
|
||||||
|
* CTCnt += 1
|
||||||
|
* CleansTools<CTCnt,1> = ToolID
|
||||||
|
* CleansTools<CTCnt,2> = ToolDesc
|
||||||
|
* CleansTools<CTCnt,3> = ToolMode
|
||||||
|
* CleansTools<CTCnt,4> = ToolHrs
|
||||||
|
* CleansTools<CTCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
CASE ToolType = 'Metrology'
|
||||||
|
SortPriority = 2
|
||||||
|
* MTCnt += 1
|
||||||
|
* MetrologyTools<MTCnt,1> = ToolID
|
||||||
|
* MetrologyTools<MTCnt,2> = ToolDesc
|
||||||
|
* MetrologyTools<MTCnt,3> = ToolMode
|
||||||
|
* MetrologyTools<MTCnt,4> = ToolHrs
|
||||||
|
* MetrologyTools<MTCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
CASE ToolType = 'Inspection'
|
||||||
|
SortPriority = 3
|
||||||
|
* ITCnt += 1
|
||||||
|
* InspectionTools<ITCnt,1> = ToolID
|
||||||
|
* InspectionTools<ITCnt,2> = ToolDesc
|
||||||
|
* InspectionTools<ITCnt,3> = ToolMode
|
||||||
|
* InspectionTools<ITCnt,4> = ToolHrs
|
||||||
|
* InspectionTools<ITCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
CASE ToolType = 'Transfer'
|
||||||
|
SortPriority = 4
|
||||||
|
* TRCnt += 1
|
||||||
|
* TransferTools<TRCnt,1> = ToolID
|
||||||
|
* TransferTools<TRCnt,2> = ToolDesc
|
||||||
|
* TransferTools<TRCnt,3> = ToolMode
|
||||||
|
* TransferTools<TRCnt,4> = ToolHrs
|
||||||
|
* TransferTools<TRCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
CASE ToolType = 'Quartz'
|
||||||
|
SortPriority = 5
|
||||||
|
* QZCnt += 1
|
||||||
|
* QuartzTools<QZCnt,1> = ToolID
|
||||||
|
* QuartzTools<QZCnt,2> = ToolDesc
|
||||||
|
* QuartzTools<QZCnt,3> = ToolMode
|
||||||
|
* QuartzTools<QZCnt,4> = ToolHrs
|
||||||
|
* QuartzTools<QZCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
CASE 1
|
||||||
|
SortPriority = 6
|
||||||
|
* OtherCnt += 1
|
||||||
|
* OtherTools<OtherCnt,1> = ToolID
|
||||||
|
* OtherTools<OtherCnt,2> = ToolDesc
|
||||||
|
* OtherTools<OtherCnt,3> = ''
|
||||||
|
* OtherTools<OtherCnt,4> = ToolHrs
|
||||||
|
* OtherTools<OtherCnt,5> = ToolEsc
|
||||||
|
*
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
DispTools := ToolID : @VM : ToolDesc : @VM : ToolMode : @VM : ToolHrs : @VM : ToolEsc : @VM : SortPriority : @VM: PMStatus : @FM
|
||||||
|
|
||||||
|
Next ToolID
|
||||||
|
|
||||||
|
DispTools[-1, 1] = ''
|
||||||
|
DispTools = SRP_Array('SortRows', DispTools, 'AR6' : @FM : 'AL1', 'LIST', @FM, @VM)
|
||||||
|
|
||||||
|
* CTColCnt = INT(CTCnt/6)
|
||||||
|
* IF MOD(CTCnt,6) > 0 THEN CTColCnt += 1
|
||||||
|
* CTPnlCnt = CTColCnt * 6
|
||||||
|
* CleansTools := STR(@FM:@VM,CTPnlCnt - CTCnt)
|
||||||
|
*
|
||||||
|
* MTColCnt = INT(MTCnt/6)
|
||||||
|
* IF MOD(MTCnt,6) > 0 THEN MTColCnt += 1
|
||||||
|
* MTPnlCnt = MTColCnt * 6
|
||||||
|
* MetrologyTools := STR(@FM:@VM,MTPnlCnt - MTCnt)
|
||||||
|
*
|
||||||
|
* ITColCnt = INT(ITCnt/6)
|
||||||
|
* IF MOD(ITCnt,6) > 0 THEN ITColCnt += 1
|
||||||
|
* ITPnlCnt = ITColCnt * 6
|
||||||
|
* InspectionTools := STR(@FM:@VM,ITPnlCnt - ITCnt)
|
||||||
|
*
|
||||||
|
* TRColCnt = INT(TRCnt/6)
|
||||||
|
* IF MOD(TRCnt,6) > 0 THEN TRColCnt += 1
|
||||||
|
* TRPnlCnt = TRColCnt * 6
|
||||||
|
* TransferTools := STR(@FM:@VM,TRPnlCnt - TRCnt)
|
||||||
|
*
|
||||||
|
* QZColCnt = INT(QZCnt/6)
|
||||||
|
* IF MOD(TRCnt,6) > 0 THEN QZColCnt += 1
|
||||||
|
* QZPnlCnt = QZColCnt * 6
|
||||||
|
* QuartzTools := STR(@FM:@VM,QZPnlCnt - QZCnt)
|
||||||
|
*
|
||||||
|
* OtherColCnt = INT(OtherCnt/6)
|
||||||
|
* IF MOD(OtherCnt,6) > 0 THEN OtherColCnt += 1
|
||||||
|
* OtherPnlCnt = OtherColCnt * 6
|
||||||
|
* OtherTools := STR(@FM:@VM,OtherPnlCnt - OtherCnt)
|
||||||
|
|
||||||
|
* DispTools = ''
|
||||||
|
* IF CleansTools NE '' THEN DispTools := CleansTools
|
||||||
|
* IF MetrologyTools NE '' THEN DispTools := @FM:MetrologyTools
|
||||||
|
* IF InspectionTools NE '' THEN DispTools := @FM:InspectionTools
|
||||||
|
* IF TransferTools NE '' THEN DispTools := @FM:TransferTools
|
||||||
|
* IF QuartzTools NE '' THEN DispTools := @FM:QuartzTools
|
||||||
|
* IF OtherTools NE '' THEN DispTools := @FM:OtherTools
|
||||||
|
|
||||||
|
GreenButton = '.\BMPS\GreenButton.png'
|
||||||
|
RedButton = '.\BMPS\RedButton.png'
|
||||||
|
YellowButton = '.\BMPS\YellowButton.png'
|
||||||
|
GrayButton = '.\BMPS\GrayButton.png'
|
||||||
|
QuestionButton = '.\BMPS\help_32.bmp'
|
||||||
|
|
||||||
|
DefaultBackColor = Get_Property(@WINDOW,'BACKCOLOR')
|
||||||
|
|
||||||
|
NumTools = DCount(DispTools, @FM)
|
||||||
|
|
||||||
|
FOR I = 1 TO NumTools
|
||||||
|
|
||||||
|
ToolID = DispTools<I,1>
|
||||||
|
ToolDesc = DispTools<I,2>
|
||||||
|
ToolStatus = DispTools<I,3>
|
||||||
|
ToolHrs = DispTools<I,4>
|
||||||
|
ToolEsc = DispTools<I,5>
|
||||||
|
PMStatus = DispTools<I,7>
|
||||||
|
|
||||||
|
IF ToolID NE '' THEN
|
||||||
|
|
||||||
|
* If ( (ToolID EQ 'BIORAD2') or (ToolID EQ 'BIORAD3') or (ToolID EQ 'BIORAD4') or (ToolID EQ 'BIORAD5') ) then
|
||||||
|
Begin Case
|
||||||
|
Case PMStatus EQ 'OVERDUE'
|
||||||
|
BackColor = RED$
|
||||||
|
Case PMStatus EQ 'CURRENTLY_DUE'
|
||||||
|
BackColor = ORANGE$
|
||||||
|
Case PMStatus EQ 'DUE_SOON'
|
||||||
|
BackColor = YELLOW$
|
||||||
|
Case PMStatus EQ 'NOT_SCHEDULED'
|
||||||
|
BackColor = DefaultBackColor
|
||||||
|
Case PMStatus EQ 'NOT_DUE'
|
||||||
|
BackColor = GREEN$
|
||||||
|
Case PMStatus EQ 'ERROR'
|
||||||
|
BackColor = BRED$
|
||||||
|
End Case
|
||||||
|
* end else
|
||||||
|
* BackColor = DefaultBackColor
|
||||||
|
* end
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.TP':I,'TEXT',ToolDesc)
|
||||||
|
Set_Property(@WINDOW:'.TP':I,'@TOOLID',ToolID)
|
||||||
|
Set_Property(@WINDOW:'.TT':I,'TEXT',ToolHrs)
|
||||||
|
Set_Property(@WINDOW:'.TT':I,'FORECOLOR',FONTBLUE$)
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'ENABLED',1)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.TP':I, 'BACKCOLOR', BackColor)
|
||||||
|
Set_Property(@WINDOW:'.TB':I, 'BACKCOLOR', BackColor)
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ToolStatus = 'PROD'
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP',GreenButton)
|
||||||
|
|
||||||
|
CASE ToolStatus[-3,3] = 'MTC' or ToolStatus = 'QUAL_OVERDUE' or ToolStatus EQ 'VER_FAILED'
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP',RedButton)
|
||||||
|
|
||||||
|
CASE ToolStatus = 'LIM' OR ToolStatus = 'QUAL' OR ToolStatus = 'EWORK' or ToolStatus EQ 'VER'
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP',YellowButton)
|
||||||
|
|
||||||
|
CASE ToolStatus = 'OUT' OR ToolStatus = 'FACILITIES (UnSched)'
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP',GrayButton)
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP',QuestionButton)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.TP':I,'TEXT','')
|
||||||
|
Set_Property(@WINDOW:'.TT':I,'TEXT','')
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'ENABLED',0)
|
||||||
|
Set_Property(@WINDOW:'.TB':I,'BITMAP','')
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
* Set_Property(@WINDOW, 'VISIBLE', 1)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
TBClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
CtrlName = FIELD(CtrlEntID,'.',2)
|
||||||
|
|
||||||
|
CONVERT 'B' TO 'P' In CtrlEntID ;* Buttons are named 'TB':n
|
||||||
|
ToolID = Get_Property(CtrlEntID,'@TOOLID') ;* Properties are on panels named 'TP':n
|
||||||
|
|
||||||
|
* Check and lock
|
||||||
|
|
||||||
|
Open "TOOL" to hTable then
|
||||||
|
DialogWin = "DIALOG_TOOL_MODE"
|
||||||
|
DialogKey = DialogWin:"*":ToolID
|
||||||
|
|
||||||
|
Lock hTable, DialogKey then
|
||||||
|
ModeChangeParms = Dialog_Box("DIALOG_TOOL_MODE", @WINDOW, ToolID)
|
||||||
|
Unlock hTable, DialogKey
|
||||||
|
end else
|
||||||
|
Mtext = "Another user is currently updating this tool's status."
|
||||||
|
Msg(@Window, "", "ERROR", "", "Update Tool Status" :@FM: Mtext)
|
||||||
|
ModeChangeParms = "Cancel"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
* Cancel returned from dialog box
|
||||||
|
|
||||||
|
IF ModeChangeParms = 'Cancel' THEN RETURN
|
||||||
|
|
||||||
|
UserID = ModeChangeParms[1,@FM]
|
||||||
|
Reason = ModeChangeParms[COL2()+1,@FM]
|
||||||
|
NewMode = ModeChangeParms[COL2()+1,@FM]
|
||||||
|
|
||||||
|
* Two users trying to update at same time leaves more than one current mode. Take the first one.
|
||||||
|
|
||||||
|
CurrModeDTM = XLATE('TOOL', ToolID, TOOL_CURR_MODE_KEY$, 'X')<1,1>
|
||||||
|
CurrModeDTM = FIELD(CurrModeDTM,'*',2)
|
||||||
|
CurrModeDTM = OCONV(CurrModeDTM,'DT4/^S')
|
||||||
|
|
||||||
|
Parms = ToolID:@RM
|
||||||
|
Parms := CurrModeDTM:@RM
|
||||||
|
Parms := NewMode:@RM
|
||||||
|
Parms := Reason
|
||||||
|
|
||||||
|
//obj_Tool_Log('SetMode', Parms)
|
||||||
|
Tool_Services('ChangeToolMode', ToolID, NewMode, Reason, @User4, 0)
|
||||||
|
* IF Get_Status(errCode) THEN
|
||||||
|
* Errmsg(errCode)
|
||||||
|
* RETURN
|
||||||
|
* END
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Error_Services('DisplayError')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
GoSub Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
647
LSL2/STPROC/COMM_DIALOG_UNLOAD_EPI_PRO.txt
Normal file
647
LSL2/STPROC/COMM_DIALOG_UNLOAD_EPI_PRO.txt
Normal file
@ -0,0 +1,647 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_Unload_Epi_Pro(Method, Parm1, Parm2)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_Unload_Epi_Pro window.
|
||||||
|
|
||||||
|
05/01/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, obj_RDS2, Send_Event, RDS_React_Run, Post_Event, obj_Tables
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, obj_WM_Out, obj_WM_Wfrs, obj_React_Status, Send_Info
|
||||||
|
DECLARE SUBROUTINE Database_Services
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, obj_WM_Out, Send_Message, obj_NCR, ETMethod, obj_WM_Wfrs, obj_Tables
|
||||||
|
DECLARE FUNCTION Set_Property, SRP_Array, Database_Services
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT RDS_EQU
|
||||||
|
$INSERT RDS_TEST_EQUATES
|
||||||
|
$INSERT REACTOR_EQUATES
|
||||||
|
$INSERT RDS_EPILOAD
|
||||||
|
$INSERT NCR_EQU
|
||||||
|
$INSERT EPI_SUSCEPTOR_EQUATES
|
||||||
|
$INSERT PROD_SPEC_EQUATES
|
||||||
|
$INSERT PRS_STAGE_EQUATES
|
||||||
|
$INSERT EPI_PART_EQUATES
|
||||||
|
$INSERT QUOTE_SPEC_EQU
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT WM_OUT_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU COL$WM_OUT_CASS TO 1
|
||||||
|
EQU COL$WM_OUT_SLOT TO 2
|
||||||
|
|
||||||
|
EQU COL$POCKET TO 1
|
||||||
|
EQU COL$USAGE TO 2
|
||||||
|
EQU COL$ZONE TO 3
|
||||||
|
EQU COL$IN_CASS TO 4
|
||||||
|
EQU COL$IN_SLOT TO 5
|
||||||
|
EQU COL$WAFER_TYPE TO 6
|
||||||
|
EQU COL$OUT_CASS TO 7
|
||||||
|
EQU COL$OUT_SLOT TO 8
|
||||||
|
EQU COL$OUT_NCR TO 9
|
||||||
|
|
||||||
|
EQU COL$NCR_NO TO 1
|
||||||
|
EQU COL$NCR_POCKET TO 2
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Load_Epi_Pro'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
|
||||||
|
CASE Method = 'ReloadProduct' ; GOSUB ReloadProduct
|
||||||
|
CASE Method = 'UnloadProduct' ; GOSUB UnloadProduct
|
||||||
|
CASE Method = 'ReactIR' ; GOSUB ReactIR
|
||||||
|
CASE Method = 'ReactDR' ; GOSUB ReactDR
|
||||||
|
CASE Method = 'SlotOverview' ; GOSUB SlotOverview
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
* get the current style
|
||||||
|
|
||||||
|
EQU MULTILINE_STYLE$ TO 512 ;* MultiLine Select
|
||||||
|
EQU DROPDOWN_STYLE$ TO 131072
|
||||||
|
|
||||||
|
Style = Get_Property(@WINDOW:'.REACTOR_TABLE', 'STYLE')
|
||||||
|
|
||||||
|
|
||||||
|
IF Style [1,2] _EQC "0x" THEN
|
||||||
|
CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE
|
||||||
|
Style = ICONV(Style [3,99], "MX")
|
||||||
|
END
|
||||||
|
|
||||||
|
Style = BitOr(Style, MULTILINE_STYLE$)
|
||||||
|
Set_Property(@WINDOW:'.REACTOR_TABLE', "STYLE", Style)
|
||||||
|
|
||||||
|
RDSNo = FIELD(Parm1,@FM,1)
|
||||||
|
CurrentLoad = FIELD(Parm1,@FM,2,99)
|
||||||
|
|
||||||
|
IF RDSNo = '' THEN
|
||||||
|
ErrMsg('Null RDS No passed to Dialog Box...')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
otParmsRDS = 'RDS':@RM:RDSNo
|
||||||
|
RDSRec = obj_Tables('ReadRec',otParmsRDS)
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
* BlockUnload = Xlate('RDS', RDSNo, 'BLOCK_UNLOAD', 'X')
|
||||||
|
*
|
||||||
|
* If BlockUnload EQ True$ then
|
||||||
|
* Set_Property(@Window:'.UNLOAD_PRODUCT', 'ENABLED', False$)
|
||||||
|
* end
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_RDS',otParmsRDS)
|
||||||
|
|
||||||
|
|
||||||
|
ReactorNo = RDSRec<RDS_REACTOR$>
|
||||||
|
WONo = RDSRec<RDS_WO$>
|
||||||
|
WOStepKey = RDSRec<RDS_WO_STEP_KEY$>
|
||||||
|
WOStep = FIELD(WOStepKey,'*',2)
|
||||||
|
|
||||||
|
otParms = 'WO_LOG':@RM:WONo:'*Unload' ;* Added 7/8/2009 JCH * * * * * * *
|
||||||
|
obj_Tables('LockRec',otParms) ;* Places lock on fictional record
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrorMsg = 'Another workstation is currently Unloading a Reactor Run for this Work Order.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
|
||||||
|
obj_Tables('UnlockRec',otParmsRDS)
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LOCKED',otParms)
|
||||||
|
|
||||||
|
PSNo = XLATE('WO_STEP',WOStepKey,1,'X')
|
||||||
|
*ReactorType = XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X') ;* Variable not used progrqam 8/27/2014 JCH
|
||||||
|
PSType = XLATE('PROD_SPEC',PSNo,'SPEC_TYPE','X') ;* New reference 8/22/2012 JCH
|
||||||
|
EpiPN = XLATE('WO_LOG',WONo,WO_LOG_EPI_PART_NO$,'X')
|
||||||
|
|
||||||
|
*SubstrateSpec = XLATE('PROD_SPEC',PSNo,PROD_SPEC_SPEC_SUBSTRATE$,'X')
|
||||||
|
|
||||||
|
SubPostClean = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_CLEAN_TOOL$,'X') ;* SubstrateSpec<1,QSSubPostClean$>
|
||||||
|
WaferSize = XLATE('EPI_PART',EpiPN,EPI_PART_SUB_WAFER_SIZE$,'X') ;* SubstrateSpec<1,QSSubWaferSize$>
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE WaferSize = '125 mm 5 in' ; EpiSusceptorKey = '5'
|
||||||
|
CASE WaferSize = '150 mm 6 in' ; EpiSusceptorKey = '6'
|
||||||
|
CASE WaferSize = '200 mm 8 in' ; EpiSusceptorKey = '8'
|
||||||
|
CASE 1
|
||||||
|
ErrMsg('Unknown Wafer Size ':QUOTE(WaferSize):' in PSN ':PSNo)
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
EpiSusceptorRec = XLATE('EPI_SUSCEPTOR',EpiSusceptorKey,'','X')
|
||||||
|
|
||||||
|
Pockets = EpiSusceptorRec<EPI_SUSCEPTOR_POCKET_NO$>
|
||||||
|
Zones = EpiSusceptorRec<EPI_SUSCEPTOR_POCKET_ZONE$>
|
||||||
|
PTypes = EpiSusceptorRec<EPI_SUSCEPTOR_POCKET_TYPE$>
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.RDS_NO':@RM:@WINDOW:'.WO_NO':@RM:@WINDOW:'.WO_STEP':@RM:@WINDOW:'.REACTOR_NO'
|
||||||
|
Props = 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP'
|
||||||
|
Vals = RDSNo:@RM:WONo:@RM:WOStep:@RM:ReactorNo
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
ProdLoadCnt = 0
|
||||||
|
ProdUnloadCnt = 0
|
||||||
|
|
||||||
|
|
||||||
|
RCtrl = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
IF CurrentLoad<1,1> = '' THEN
|
||||||
|
|
||||||
|
PocketCnt = COUNT(Pockets,@VM) + (Pockets NE '')
|
||||||
|
FOR I = 1 TO PocketCnt
|
||||||
|
Set_Property(RCtrl,'CELLPOS',Pockets<1,I>,COL$POCKET:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',PTypes<1,I>,COL$USAGE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',Zones<1,I>,COL$ZONE:@FM:I)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@LAST_POCKET',I-1)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
* Use load data previously saved on the RDS
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(CurrentLoad<1>,@VM) + (CurrentLoad<1> NE '')
|
||||||
|
|
||||||
|
Usage = CurrentLoad<COL$USAGE,I>
|
||||||
|
WfrType = CurrentLoad<COL$WAFER_TYPE,I>
|
||||||
|
OutCass = CurrentLoad<COL$OUT_CASS,I>
|
||||||
|
OutSlot = CurrentLoad<COL$OUT_SLOT,I>
|
||||||
|
|
||||||
|
IF WfrType = 'PROD' AND Usage = '' AND OutCass = '' THEN
|
||||||
|
ProdLoadCnt += 1 ;* Product wafers to be unloaded
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OutCass NE '' THEN
|
||||||
|
ProdUnloadCnt += 1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$POCKET,I>,COL$POCKET:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',Usage,COL$USAGE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$ZONE,I>,COL$ZONE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$IN_CASS,I>,COL$IN_CASS:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$IN_SLOT,I>,COL$IN_SLOT:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',WfrType,COL$WAFER_TYPE:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',OutCass,COL$OUT_CASS:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$OUT_SLOT,I>,COL$OUT_SLOT:@FM:I)
|
||||||
|
Set_Property(RCtrl,'CELLPOS',CurrentLoad<COL$OUT_NCR,I>,COL$OUT_NCR:@FM:I)
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ProdLoadCnt > 0 AND ProdUnloadCnt = 0
|
||||||
|
|
||||||
|
BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}'
|
||||||
|
BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\ri200\b\f0\fs20\par Unload Product from EpiPro Reactor\par'
|
||||||
|
BriefTxt := '\b0\par'
|
||||||
|
BriefTxt := ' 1.) Verify Outbound Cassette and Slots\par'
|
||||||
|
BriefTxt := ' 2.) Unload Product into Outbound Cassette\par}'
|
||||||
|
|
||||||
|
Title = 'Unload Product from EpiPro Reactor'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.UNLOAD_PRODUCT','VISIBLE',1)
|
||||||
|
Set_Property(@WINDOW:'.RELOAD_PRODUCT','VISIBLE',0)
|
||||||
|
|
||||||
|
CASE ProdLoadCnt = 0 AND ProdUnloadCnt > 0
|
||||||
|
|
||||||
|
BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}'
|
||||||
|
BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\ri200\b\f0\fs20\par Return Product to EpiPro Reactor\par'
|
||||||
|
BriefTxt := '\b0\par'
|
||||||
|
BriefTxt := ' 1.) Return Product to Reactor\par'
|
||||||
|
BriefTxt := '\par}'
|
||||||
|
|
||||||
|
Title = 'Return Product to EpiPro Reactor'
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.UNLOAD_PRODUCT','VISIBLE',0)
|
||||||
|
Set_Property(@WINDOW:'.RELOAD_PRODUCT','VISIBLE',1)
|
||||||
|
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
|
||||||
|
ErrMsg('No wafers loaded in Reactor.') ;* Not yet loaded
|
||||||
|
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.BRIEF_EDITBOX','RTFTEXT',BriefTxt)
|
||||||
|
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','LIST',STR(@VM:@FM,25)) ;* Put empty lines in WM_OUT_TABLE
|
||||||
|
|
||||||
|
IF ProdLoadCnt > 0 THEN
|
||||||
|
|
||||||
|
AllOpenSlotIDs = obj_WM_Out('NextOpenSlots',WONo:@RM:WoStep) ;* Get a list of all open WMO slots on this work order
|
||||||
|
|
||||||
|
OpenSlotIDs = FIELD(AllOpenSlotIDs,@FM,1,ProdLoadCnt) ;* Take the number needed to unload the reactor load
|
||||||
|
|
||||||
|
IF OpenSlotIDs = '' THEN
|
||||||
|
|
||||||
|
ErrMsg('No open WM_OUT slots available to unload into.')
|
||||||
|
|
||||||
|
obj_Tables('UnlockRec',Get_Property(@WINDOW,'@LOCKED'))
|
||||||
|
obj_Tables('UnlockRec',Get_Property(@WINDOW,'@LOCKED_RDS'))
|
||||||
|
|
||||||
|
GOTO Cancel
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','LIST',STR(@VM:@FM,25))
|
||||||
|
|
||||||
|
WMOWaferKeys = ''
|
||||||
|
|
||||||
|
FOR M = 1 TO ProdLoadCnt
|
||||||
|
|
||||||
|
OpenSlotID = OpenSlotIDs<M>
|
||||||
|
OpenCass = OpenSlotID<1,1>
|
||||||
|
OpenSlot = OpenSlotID<1,2>
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','CELLPOS',OpenCass,COL$WM_OUT_CASS:@FM:M) ;* Load Available WMO slots into WM_OUT array
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','CELLPOS',OpenSlot,COL$WM_OUT_SLOT:@FM:M)
|
||||||
|
|
||||||
|
WMOWaferKey = WONo:'*':WOStep:'*':OpenCass:'*':OpenSlot
|
||||||
|
WMOWaferKeys<1,-1> = WMOWaferKey
|
||||||
|
|
||||||
|
NEXT M
|
||||||
|
|
||||||
|
FOR M = ProdLoadCnt + 1 TO 25
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','CELLPOS','',COL$WM_OUT_CASS:@FM:M) ;* Put blank lines from last Slot to bottom of display
|
||||||
|
Set_Property(@WINDOW:'.WM_OUT_TABLE','CELLPOS','',COL$WM_OUT_SLOT:@FM:M)
|
||||||
|
NEXT M
|
||||||
|
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
LockedWMOKeys = obj_WM_Wfrs('LockSet','WMO_WFRS':@RM:WMOWaferKeys) ;* This locks the cass/slots available to unload into
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
obj_Tables('UnlockRec',Get_Property(@WINDOW,'@LOCKED'))
|
||||||
|
obj_Tables('UnlockRec',Get_Property(@WINDOW,'@LOCKED_RDS'))
|
||||||
|
|
||||||
|
GOTO Cancel
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW,'@LOCKED_WFRS',LockedWMOKeys)
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
RecordLocked = False$
|
||||||
|
OutboundMat = Get_Property(@Window:'.WM_OUT_TABLE', 'ARRAY')
|
||||||
|
If OutboundMat NE '' then
|
||||||
|
CassNos = OutboundMat<1>
|
||||||
|
CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If CassNos NE '' then
|
||||||
|
For each CassNo in CassNos using @VM setting vPos
|
||||||
|
WMOutKey = WONo:'*1*':CassNo
|
||||||
|
RecordLocked = Database_Services('IsKeyIDLocked', 'WM_OUT', WMOutKey)
|
||||||
|
If RecordLocked then
|
||||||
|
LockOwner = Xlate('WM_OUT', WMOutKey, 'LOCKED_BY', 'X')
|
||||||
|
If LockOwner NE '' then
|
||||||
|
DisplayName = Oconv(LockOwner,'[XLATE_CONV,LSL_USERS*FIRST_LAST]')
|
||||||
|
end else
|
||||||
|
DisplayName = 'an unknown user'
|
||||||
|
end
|
||||||
|
MsgParms = ''
|
||||||
|
MsgParms<1> = 'Record Locked'
|
||||||
|
MsgParms<2> = 'The WM_OUT record for this RDS is locked by ':DisplayName:'. Only one user session at a time can edit an RDS.'
|
||||||
|
Msg(@Window, '', 'OK', '', MsgParms)
|
||||||
|
// Disable Unload button
|
||||||
|
Set_Property(@Window:'.UNLOAD_PRODUCT', 'ENABLED', -1)
|
||||||
|
Set_Property(@Window:'.RELOAD_PRODUCT', 'ENABLED', -1)
|
||||||
|
Set_Property(@Window:'.SLOT_STATUS', 'ENABLED', -1)
|
||||||
|
// Clear JCH semaphore locks and close the form
|
||||||
|
GOSUB ClearLocks
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
end
|
||||||
|
Until RecordLocked EQ True$
|
||||||
|
Next CassNo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
|
||||||
|
GOSUB ClearLocks ;* Added 3/2/2010 JCH
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
|
||||||
|
Set_Property('RDS_UNLOAD.RDS_NO','DEFPROP',RDSNo)
|
||||||
|
Post_Event('RDS_UNLOAD','READ')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RCtrl = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
ReactorList = Get_Property(RCtrl,'LIST')
|
||||||
|
|
||||||
|
LastPocket = Get_Property(@WINDOW,'@LAST_POCKET')
|
||||||
|
OpenTestCnt = 0
|
||||||
|
OpenProdCnt = 0
|
||||||
|
LineColor = ''
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ReactorList,@FM) + (ReactorList NE '')
|
||||||
|
|
||||||
|
IF ReactorList<I,COL$POCKET> NE '' THEN
|
||||||
|
IF ReactorList<I,COL$USAGE> = 'PROD' THEN
|
||||||
|
Set_Property(RCtrl,'CELLPOS','',COL$USAGE:@FM:I)
|
||||||
|
END
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ReactorList<I,COL$OUT_NCR> NE ''
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,RED$)
|
||||||
|
|
||||||
|
CASE ReactorList<I,COL$USAGE> = 'TEST'
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,YELLOW$)
|
||||||
|
|
||||||
|
CASE ReactorList<I,COL$USAGE> = 'DUMMY'
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,WHITE$)
|
||||||
|
|
||||||
|
CASE ReactorList<I,COL$USAGE> = 'PROD' OR ReactorList<I,COL$USAGE> = ''
|
||||||
|
Zone = ReactorList<I,COL$ZONE>
|
||||||
|
IF Zone = 1 THEN LineColor = RCV_BLUE$
|
||||||
|
IF Zone = 2 THEN LineColor = PRE_BLUE$
|
||||||
|
IF Zone = 3 THEN LineColor = INP_BLUE$
|
||||||
|
IF Zone = 4 THEN LineColor = POS_BLUE$
|
||||||
|
Send_Message(RCtrl,'COLOR_BY_POS',0,I,LineColor)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
END
|
||||||
|
SelectedRows = Get_Property(RCtrl,'SELPOS')
|
||||||
|
Set_Property(RCtrl,'SELPOS',SelectedRows) ;* This is a toggle - turns OFF any turned ON ************************
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReloadProduct:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
ReactorList = Get_Property(@WINDOW:'.REACTOR_TABLE','LIST') ;* Updated Reactor load data
|
||||||
|
|
||||||
|
WafersPulled = ''
|
||||||
|
NCRPresent = ''
|
||||||
|
|
||||||
|
FOR RP = 1 TO COUNT(ReactorList,@FM) + (ReactorList NE '')
|
||||||
|
IF ReactorList<RP,COL$OUT_CASS> NE '' AND ReactorList<RP,COL$WAFER_TYPE> = 'PROD' AND ReactorList<RP,COL$USAGE> = '' THEN
|
||||||
|
|
||||||
|
|
||||||
|
CassNo = ReactorList<RP,COL$OUT_CASS>
|
||||||
|
SlotNo = ReactorList<RP,COL$OUT_SLOT>
|
||||||
|
Pocket = ReactorList<RP,COL$POCKET>
|
||||||
|
|
||||||
|
WMOutRec = XLATE('WM_OUT',WONo:'*':WOStep:'*':CassNo,'','X')
|
||||||
|
|
||||||
|
LOCATE SlotNo IN WMOutRec<WM_OUT_SLOT_NO$> USING @VM SETTING Pos THEN
|
||||||
|
IF WMOutRec<WM_OUT_RDS$,Pos> = '' THEN WafersPulled = 1
|
||||||
|
IF WMOutRec<WM_OUT_SLOT_NCR$,Pos> NE '' THEN NCRPresent = 1
|
||||||
|
END
|
||||||
|
IF WafersPulled THEN ErrorMsg = 'Wafers pulled from WM_OUT ':SlotNo:' cannot reload reactor.'
|
||||||
|
IF NCRPresent THEN ErrorMsg = 'NCR issued for Slot No ':SlotNo:' in WM_OUT. Cannot reload reactor.'
|
||||||
|
IF ErrorMsg NE '' THEN
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
GOTO Close
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
NEXT RP
|
||||||
|
|
||||||
|
OrgColor = Set_Property('DIALOG_UNLOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB ClearLocks ;* Added 3/2/2010 JCH
|
||||||
|
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
|
||||||
|
obj_RDS2('ReloadEpi',RDSNo)
|
||||||
|
|
||||||
|
Send_Info(STR(' ',60)) ;** - Messaging - **
|
||||||
|
Dummy = Set_Property('DIALOG_UNLOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',OrgColor) ;** - Messaging - **
|
||||||
|
|
||||||
|
IF Get_Status(ErrCode) THEN
|
||||||
|
ErrMsg(ErrCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOTO Close
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
UnloadProduct:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReactCtrl = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
WMOutCtrl = @WINDOW:'.WM_OUT_TABLE'
|
||||||
|
|
||||||
|
* Get PROD wafers in the reactor
|
||||||
|
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||||
|
|
||||||
|
|
||||||
|
ReactorList = Get_Property(ReactCtrl,'LIST') ;* Updated Reactor load data
|
||||||
|
AvailSlotKeys = Get_Property(@WINDOW,'@LOCKED_WFRS') ;* Available & locked outbound slots
|
||||||
|
|
||||||
|
OrgColor = Set_Property('DIALOG_UNLOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging
|
||||||
|
|
||||||
|
orParms = RDSNo:@RM:ReactorList:@RM:AvailSlotKeys
|
||||||
|
|
||||||
|
GOSUB ClearLocks ;* Added 3/2/2010 JCH
|
||||||
|
|
||||||
|
Abort = False$
|
||||||
|
// Lock outbound cassette records BEFORE modifying any records!
|
||||||
|
CassNos = AvailSlotKeys
|
||||||
|
Swap @VM with @FM in CassNos
|
||||||
|
Swap '*' with @VM in CassNos
|
||||||
|
CassNos = SRP_Array('Rotate', CassNos, @FM, @VM)
|
||||||
|
CassNos = CassNos<3>
|
||||||
|
CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
|
||||||
|
For each CassNo in CassNos using @VM
|
||||||
|
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||||
|
HaveLock = Database_Services('GetKeyIDLock', 'WM_OUT', WMOKey)
|
||||||
|
If HaveLock EQ False$ then
|
||||||
|
Abort = True$
|
||||||
|
ErrMsg('Error unloading RDS. Outbound cassette ':WMOKey:' is locked!')
|
||||||
|
end
|
||||||
|
Until Abort
|
||||||
|
Next CassNo
|
||||||
|
|
||||||
|
If Abort EQ False$ then
|
||||||
|
Set_Status(0)
|
||||||
|
obj_RDS2('UnloadEpi',orParms)
|
||||||
|
// Successfully unloaded RDS. Unlock necessary WM_OUT records.
|
||||||
|
For each CassNo in CassNos using @VM
|
||||||
|
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||||
|
HaveLock = Database_Services('IsKeyIDLocked', 'WM_OUT', WMOKey)
|
||||||
|
If HaveLock then
|
||||||
|
Database_Services('ReleaseKeyIDLock', 'WM_OUT', WMOKey)
|
||||||
|
end
|
||||||
|
Next CassNo
|
||||||
|
|
||||||
|
Send_Info(STR(' ',60)) ;** - Messaging - **
|
||||||
|
Dummy = Set_Property('DIALOG_UNLOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',OrgColor) ;** - Messaging - **
|
||||||
|
|
||||||
|
IF Get_Status(ErrCode) THEN
|
||||||
|
ErrMsg(ErrCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOTO Close
|
||||||
|
end else
|
||||||
|
// Failed to lock necessary WM_OUT records. Unlock those set by this user.
|
||||||
|
For each CassNo in CassNos using @VM
|
||||||
|
WMOKey = WONo:'*':WOStep:'*':CassNo
|
||||||
|
HaveLock = Database_Services('IsKeyIDSelfLocked', 'WM_OUT', WMOKey)
|
||||||
|
If HaveLock then
|
||||||
|
Database_Services('ReleaseKeyIDLock', 'WM_OUT', WMOKey)
|
||||||
|
end
|
||||||
|
Next CassNo
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactIR:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
|
||||||
|
IF RowIndex = '' THEN RETURN
|
||||||
|
|
||||||
|
CtrlID = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
|
||||||
|
Dummy = Send_Message(CtrlID,'DELETE',RowIndex)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactDR:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RowIndex = Parm1
|
||||||
|
RowData = Parm2
|
||||||
|
|
||||||
|
IF RowIndex = '' THEN RETURN
|
||||||
|
|
||||||
|
CtrlID = @WINDOW:'.REACTOR_TABLE'
|
||||||
|
|
||||||
|
Dummy = Send_Message(CtrlID, "INSERT", RowIndex, RowData)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ClearLocks:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WMOLocks = Get_Property(@WINDOW,'@LOCKED_WFRS') ;* Lock on Wafer Slots
|
||||||
|
RDSLocks = Get_Property(@WINDOW,'@LOCKED_RDS')
|
||||||
|
WinLock = Get_Property(@WINDOW,'@LOCKED')
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
IF WMOLocks NE '' THEN obj_WM_Wfrs('UnlockSet','WMO_WFRS':@RM:WMOLocks) ;* Remove locks on the wafer slots
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
IF RDSLocks NE '' THEN obj_Tables('UnlockRec',RDSLocks) ;* Unlocks the RDS Record
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Set_Status(0)
|
||||||
|
IF WinLock NE '' THEN obj_Tables('UnlockRec',WinLock) ;* Removes WO unload window lock
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SlotOverview:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
||||||
|
WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP')
|
||||||
|
|
||||||
|
DisplayList = obj_WM_Out('SlotStatus',WONo:@RM:WOStep)
|
||||||
|
|
||||||
|
CONVERT @VM TO @SVM IN DisplayList
|
||||||
|
CONVERT @FM TO @VM IN DisplayList
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = DisplayList
|
||||||
|
|
||||||
|
void = Popup(@WINDOW,TypeOver,'WM_OUT_SLOT_STATUS')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
161
LSL2/STPROC/COMM_DIALOG_WO_CASS_QTY.txt
Normal file
161
LSL2/STPROC/COMM_DIALOG_WO_CASS_QTY.txt
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_WO_Cass_Qty(Method, Parm1, Parm2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_WO_Cass_Qty window.
|
||||||
|
|
||||||
|
08/20/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Send_Message
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_WO_Cass_Qty'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'Close' ; GOSUB Close
|
||||||
|
CASE Method = 'InsertRow' ; GOSUB InsertRow
|
||||||
|
CASE Method = 'DeleteRow' ; GOSUB DeleteRow
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Title = Parm1[1,@FM]
|
||||||
|
LotQty = Parm1[COL2()+1,@FM]
|
||||||
|
CassCnt = Parm1[COL2()+1,@FM]
|
||||||
|
CassQty = Parm1[COL2()+1,@FM]
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'TEXT',Title)
|
||||||
|
Set_Property(@WINDOW:'.LOT_QTY','TEXT',LotQty)
|
||||||
|
|
||||||
|
IF CassQty = '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CASS_QTYS','ARRAY',STR(@VM,CassCnt-1))
|
||||||
|
END ELSE
|
||||||
|
CONVERT @SVM TO @VM IN CassQty
|
||||||
|
Set_Property(@WINDOW:'.CASS_QTYS','ARRAY',CassQty)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
LotQty = Get_Property(@WINDOW:'.LOT_QTY','TEXT',LotQty)
|
||||||
|
CassQtys = Get_Property(@WINDOW:'.CASS_QTYS','ARRAY')
|
||||||
|
|
||||||
|
LotQty = ICONV(LotQty,'MD0')
|
||||||
|
CassQtyTot = SUM(CassQtys)
|
||||||
|
|
||||||
|
Remainder = LotQty - CassQtyTot
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.REMAINDER','TEXT',Remainder)
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Remainder > 0
|
||||||
|
Set_Property(@WINDOW:'.REMAINDER','BACKCOLOR',YELLOW$)
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','ENABLED',0)
|
||||||
|
|
||||||
|
CASE Remainder = 0
|
||||||
|
Set_Property(@WINDOW:'.REMAINDER','BACKCOLOR',GREEN$)
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','ENABLED',1)
|
||||||
|
|
||||||
|
CASE Remainder < 0
|
||||||
|
Set_Property(@WINDOW:'.REMAINDER','BACKCOLOR',RED$)
|
||||||
|
Set_Property(@WINDOW:'.OK_BUTTON','ENABLED',0)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
InsertRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.CASS_QTYS'
|
||||||
|
RowIndex = Parm1
|
||||||
|
Dummy = Send_Message(CtrlEntID, "DELETE", RowIndex)
|
||||||
|
|
||||||
|
ErrMsg('Close this window and change the quantity in the Cass Cnt field to increase the number of cassettes.')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
DeleteRow:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.CASS_QTYS'
|
||||||
|
RowIndex = Parm1
|
||||||
|
DeletedRow = Parm2
|
||||||
|
|
||||||
|
Dummy = Send_Message(CtrlEntID, "INSERT", RowIndex, DeletedRow)
|
||||||
|
|
||||||
|
ErrMsg('Close this window and change the quantity in the Cass Cnt field to decrease the number of cassettes.')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CassQtys = Get_Property(@WINDOW:'.CASS_QTYS','ARRAY',CassQty)
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
UNTIL CassQtys[-1,1] NE @VM OR CassQtys = ''
|
||||||
|
CassQtys[-1,1] = ''
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
CONVERT @VM TO @SVM IN CassQtys
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,CassQtys)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
496
LSL2/STPROC/COMM_DIALOG_WO_DUE_IN.txt
Normal file
496
LSL2/STPROC/COMM_DIALOG_WO_DUE_IN.txt
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_WO_Due_In(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_WO_Due_In window.
|
||||||
|
|
||||||
|
05/18/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT ORDER_DET_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'CustPNDC' ; GOSUB CustPNDC
|
||||||
|
CASE Method = 'LotNoDC' ; GOSUB LotNoDC
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Lot Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.ORDER_DET' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'CUST_LOT_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'ORDER_DET', DictVar, OrdDetKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
IF OrdDetKeys NE '' THEN
|
||||||
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
LotNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
|
RawLotNo = RawLotNos<1,I>
|
||||||
|
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
LotNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF LotNos = '' THEN
|
||||||
|
ErrMsg('No Lot Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
LotNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN LotNos
|
||||||
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN LotNos
|
||||||
|
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* Customer numbers *
|
||||||
|
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVar = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVar NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* LotNumbers *
|
||||||
|
|
||||||
|
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = LotNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR LotNos = ''
|
||||||
|
LotNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN SearchString := 'CUST_LOT_NO':@VM:LotNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Cust Part Number *
|
||||||
|
|
||||||
|
|
||||||
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = CustPNs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR CustPNs = ''
|
||||||
|
CustPNS[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustPNs NE '' THEN SearchString := 'CUST_PN':@VM:CustPNs:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Substrate Part Numbers *
|
||||||
|
|
||||||
|
|
||||||
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = SubPartNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR SubPartNos = ''
|
||||||
|
SubPartNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
|
OPEN 'DICT.ORDER_DET' TO DictVar THEN
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Orders..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'ORDER_DET',DictVar,OrderDetKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF OrderDetKeys NE '' THEN
|
||||||
|
IF INDEX(OrderDetKeys,@VM,1) THEN
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = OrderDetKeys
|
||||||
|
TypeOver<PMODE$> = 'K'
|
||||||
|
TypeOver<PSELECT$> = 2 ;* Multiple selection allowed
|
||||||
|
TypeOver<PTYPE$> = 'K'
|
||||||
|
|
||||||
|
OrderDetKeys = Popup(@WINDOW,TypeOver,'ORDER_DETAIL')
|
||||||
|
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
DisplayList = ''
|
||||||
|
LineCnt = 1
|
||||||
|
FOR I = 1 TO COUNT(OrderDetKeys,@VM) + (OrderDetKeys NE '')
|
||||||
|
OrderDetKey = OrderDetKeys<1,I>
|
||||||
|
OrderDetRec = XLATE('ORDER_DET',OrderDetKey,'','X')
|
||||||
|
OrderNo = OrderDetKey[1,'*'] ;* Order No
|
||||||
|
OrderItem = FIELD(OrderDetKey,'*',2)
|
||||||
|
OrderItemDesc = OrderDetRec<ORDER_DET_ITEM_DESC$>
|
||||||
|
CustPartNo = OrderDetRec<ORDER_DET_CUST_PN$>
|
||||||
|
WONo = OrderDetRec<ORDER_DET_WO_NO$>
|
||||||
|
CustLotNos = OrderDetRec<ORDER_DET_CUST_LOT_NO$>
|
||||||
|
FOR N = 1 TO COUNT(CustLotNos,@VM) + (CustLotNos NE '')
|
||||||
|
DisplayList<LineCnt,1> = WONo
|
||||||
|
DisplayList<LineCnt,2> = CustLotNos<1,N>
|
||||||
|
DisplayList<LineCnt,3> = CustPartNo
|
||||||
|
DisplayList<LineCnt,4> = OrderNo
|
||||||
|
DisplayList<LineCnt,5> = OrderItem
|
||||||
|
DisplayList<LineCnt,6> = OrderItemDesc
|
||||||
|
LineCnt += 1
|
||||||
|
NEXT N
|
||||||
|
NEXT I
|
||||||
|
IF DisplayList = '' THEN
|
||||||
|
ErrMsg('Selected Order Items are missing Customer Lot information.')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
CONVERT @VM:@FM TO @SVM:@VM IN DisplayList
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = DisplayList
|
||||||
|
WONo = PopUp(@WINDOW,TypeOver,'WO_LOTS_DUE_IN')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
WONo = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_WO_NO$,'X')
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('No Work Orders with Material Due In found for specified Orders')
|
||||||
|
WONo = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WONo)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.ORDER_DET in routine COMM_DIALOG_WO_LOG_FIND')
|
||||||
|
End_Dialog(@WINDOW,'')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
754
LSL2/STPROC/COMM_DIALOG_WO_FIND.txt
Normal file
754
LSL2/STPROC/COMM_DIALOG_WO_FIND.txt
Normal file
@ -0,0 +1,754 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_WO_Find(Method, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_WO_Find window.
|
||||||
|
|
||||||
|
01/14/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
EQU COL$REACT_TYPE TO 1
|
||||||
|
|
||||||
|
|
||||||
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
|
EQU RED$ TO 255 + (128*256) + (128*65536)
|
||||||
|
EQU BLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU WHITE$ TO 255 + (255*256) + (255*65536)
|
||||||
|
EQU YELLOW$ TO 255 + (255*256) + (202*65536)
|
||||||
|
EQU LTBLUE$ TO 128 + (255*256) + (255*65536)
|
||||||
|
EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
||||||
|
|
||||||
|
EQU DTS_MULTIROW$ TO 512
|
||||||
|
EQU DTS_LARGEDATA$ TO 4096
|
||||||
|
|
||||||
|
$INSERT WO_LOG_EQU
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
|
CASE Method = 'CustDC' ; GOSUB CustDC
|
||||||
|
CASE Method = 'CustPNDC' ; GOSUB CustPNDC
|
||||||
|
CASE Method = 'SubPNDC' ; GOSUB SubPNDC
|
||||||
|
CASE Method = 'LotNoDC' ; GOSUB LotNoDC
|
||||||
|
CASE Method = 'PSNoDC' ; GOSUB PSNoDC
|
||||||
|
CASE Method = 'ReactTypeDC' ; GOSUB ReactTypeDC
|
||||||
|
CASE Method = 'LUDate' ; GOSUB LUDate
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustChar:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
|
ReturnToCtrl = CtrlName
|
||||||
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
|
IF NOT(NUM(DataIn)) THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
IF CustNo NE '' THEN
|
||||||
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
|
IF CustCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO CustCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
|
CustNo = CustNos<1,I>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
|
||||||
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
SubPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Substrate Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
PartNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Substrate Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LotNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Lot Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'LOT_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
LotNos = ''
|
||||||
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
|
RawLotNo = RawLotNos<1,I>
|
||||||
|
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
LotNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF LotNos = '' THEN
|
||||||
|
ErrMsg('No Lot Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
LotNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN LotNos
|
||||||
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN LotNos
|
||||||
|
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PSNoDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Product Specifications..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'PS_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PSNs = ''
|
||||||
|
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
|
||||||
|
RawPSN = RawPSNs<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
|
||||||
|
END
|
||||||
|
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PSNs = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PSNs = '' THEN
|
||||||
|
ErrMsg('No Product Specifications on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PSNs := @VM
|
||||||
|
CONVERT @VM TO @RM IN PSNs
|
||||||
|
CALL V119('S','','D','R',PSNs,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PSNs
|
||||||
|
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PSNs
|
||||||
|
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PSNs NE '' THEN
|
||||||
|
CONVERT @VM TO @FM IN PSNs
|
||||||
|
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
ReactTypeDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlName = @WINDOW:'.REACT_TYPE'
|
||||||
|
|
||||||
|
RTypeList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
RType = RTypeList<CurrRow,COL$REACT_TYPE>
|
||||||
|
LineCnt = COUNT(RTypeList,@FM) + (RTypeList NE '')
|
||||||
|
IF RType = '' THEN
|
||||||
|
RTypes = Popup(@WINDOW,'','REACTOR_TYPE')
|
||||||
|
rCnt = COUNT(RTypes,@VM) + (RTypes NE '')
|
||||||
|
IF rCnt > LineCnt THEN
|
||||||
|
FOR I = 1 TO rCnt
|
||||||
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
|
NEXT I
|
||||||
|
END
|
||||||
|
|
||||||
|
FOR I = CurrRow TO CurrRow + rCnt
|
||||||
|
RType = RTypes<1,I>
|
||||||
|
*CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
|
Set_Property(CtrlName,'CELLPOS',RType,COL$REACT_TYPE:@FM:I)
|
||||||
|
*Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
|
*Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
|
END
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
CustPNDC:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
PartNos = ''
|
||||||
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
|
WOKey = WOKeys<1,N>
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
NEXT N
|
||||||
|
END ELSE
|
||||||
|
PartNos = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Msg(@WINDOW,MsgUp)
|
||||||
|
|
||||||
|
IF PartNos = '' THEN
|
||||||
|
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
PartNos := @VM
|
||||||
|
CONVERT @VM TO @RM IN PartNos
|
||||||
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
CONVERT @RM TO @VM IN PartNos
|
||||||
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
||||||
|
IF Get_Status(errCode) THEN DEBUG
|
||||||
|
|
||||||
|
IF PartNos NE '' THEN
|
||||||
|
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUDate:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
PerformQuery:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* Customer numbers *
|
||||||
|
|
||||||
|
SearchString = ''
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVar = CustNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVar NE '' OR CustNos = ''
|
||||||
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
|
* LotNumbers *
|
||||||
|
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = LotNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR LotNos = ''
|
||||||
|
LotNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF LotNos NE '' THEN SearchString := 'LOT_NO':@VM:LotNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Cust Part Number *
|
||||||
|
|
||||||
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = CustPNs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR CustPNs = ''
|
||||||
|
CustPNS[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* Substrate Part Numbers *
|
||||||
|
|
||||||
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = SubPartNos[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR SubPartNos = ''
|
||||||
|
SubPartNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * Reactor Type * * * * *
|
||||||
|
|
||||||
|
ReactTypes = Get_Property(@WINDOW:'.REACT_TYPE','ARRAY')<COL$REACT_TYPE>
|
||||||
|
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = ReactTypes[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR ReactTypes = ''
|
||||||
|
ReactTypes[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF ReactTypes NE '' THEN SearchString := 'REACT_TYPE':@VM:ReactTypes:@FM
|
||||||
|
|
||||||
|
|
||||||
|
* PSN Nos *
|
||||||
|
|
||||||
|
PS_NOs = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
LastVal = PS_NOs[-1,'B':@VM]
|
||||||
|
UNTIL LastVal NE '' OR PS_NOs = ''
|
||||||
|
PS_NOs[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF PS_NOs NE '' THEN SearchString := 'PS_NO':@VM:PS_NOs:@FM
|
||||||
|
|
||||||
|
* Entry Dates *
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:'>=':StartDt:@FM
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:'<=':EndDt:@FM
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
* Fudge the dates - '~' is not inclusive of the end dates
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
SearchString := 'ENTRY_DATE':@VM:StartDt:'~':EndDt:@FM
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
|
* RX Dates *
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_END_DT','TEXT'),'D')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
|
SearchString := 'RX_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt = '' AND EndDt NE ''
|
||||||
|
SearchString := 'RX_DT':@VM:'<=':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
|
* Fudge the dates - '~' is not inclusive of the end dates
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
SearchString := 'RX_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
NULL
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
OrdStatus = Get_Property(@WINDOW:'.STATUS','VALUE')
|
||||||
|
|
||||||
|
IF OrdStatus NE 'I' THEN
|
||||||
|
IF OrdStatus = 1 THEN
|
||||||
|
SearchString := 'CLOSE_DATE':@VM:'#':@FM
|
||||||
|
END ELSE
|
||||||
|
SearchString := 'CLOSE_DATE':@VM:'=':@FM
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Orders..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
|
* display the processing message and do the processing
|
||||||
|
|
||||||
|
MsgUp = Msg(@window, Def)
|
||||||
|
|
||||||
|
Btree.Extract(SearchString,'WO_LOG',DictVar,WOKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
|
Msg(@window, MsgUp)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,WOKeys)
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in routine COMM_DIALOG_WO_LOG_FIND')
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
573
LSL2/STPROC/COMM_DIALOG_WO_SCAN.txt
Normal file
573
LSL2/STPROC/COMM_DIALOG_WO_SCAN.txt
Normal file
@ -0,0 +1,573 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_WO_Scan(Method, Parm1)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_WO_Scan window.
|
||||||
|
|
||||||
|
08/12/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Extract_SI_Keys, Logging_Services
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract, Error_Services
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Send_Message, Set_FSError, Environment_Services
|
||||||
|
DECLARE FUNCTION obj_Vendor_Code, Msg, Error_Services, Logging_Services
|
||||||
|
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$LQP_LOT TO 1 ;* Equates for Lot_Qty... edit table controls used to scan in label data
|
||||||
|
EQU COL$LQP_QTY TO 2
|
||||||
|
EQU COL$LQP_PART TO 3 ;* This is either Cust Part No OR Substrate Part Number depending on which control is visible
|
||||||
|
EQU COL$LQP_VENDOR TO 4 ;* Vendor code on the Substrate screen 7/14/2011 JCH for SAP
|
||||||
|
|
||||||
|
EQU CA$ITEM_NO TO 1 ;* Equates for Checking Array passed to Scan routine
|
||||||
|
EQU CA$LOT_NO TO 2
|
||||||
|
EQU CA$LOT_QTY TO 3
|
||||||
|
EQU CA$CUST_PART_NO TO 4
|
||||||
|
EQU CA$SUB_PART_NO TO 5
|
||||||
|
EQU CA$SCANNED_LOT_QTY TO 6
|
||||||
|
EQU CA$VERIFY_PART_NO TO 7
|
||||||
|
EQU CA$SUB_SUPP_BY TO 8
|
||||||
|
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Receiving'
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Receiving Log.csv'
|
||||||
|
Headers = 'Logging DTM' : @FM : 'User' : @FM : 'Scan Data'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
|
||||||
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_WO_Scan'
|
||||||
|
ErrorMsg = ''
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'FieldClick' ; GOSUB FieldClick
|
||||||
|
CASE Method = 'LQP' ; GOSUB LQP
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
VendorDef = Parm1[1,@FM]
|
||||||
|
|
||||||
|
CheckArray = FIELD(Parm1,@FM,2,999)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@VENDOR_DEF',VendorDef)
|
||||||
|
|
||||||
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
|
Set_Property(@WINDOW:'.OPEN_QTY','TEXT',OCONV(OpenQty,'MD0,')) ;* 12/6/2011 JCH
|
||||||
|
|
||||||
|
Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
|
Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
|
||||||
|
Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
FieldClick:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
||||||
|
|
||||||
|
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.WINDOW_LABEL_FIX' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ControlSelection = 'LQ' ; Vals = '1':@RM:'0':@RM:'0':@RM:'Customer Wafers'
|
||||||
|
CASE ControlSelection = 'LQP' ; Vals = '0':@RM:'1':@RM:'0':@RM:'Customer Wafers'
|
||||||
|
CASE ControlSelection = 'LQSP' ; Vals = '0':@RM:'0':@RM:'1':@RM:'Substrates'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
||||||
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
|
||||||
|
|
||||||
|
IF TotalScannedQty < OpenQty THEN
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LQP:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
StripANSI = Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
|
||||||
|
SkipSubANSI = Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
|
||||||
|
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY' ; ColCnt = 2
|
||||||
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY_PART' ; ColCnt = 3
|
||||||
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY_SUB_PART' ; ColCnt = 4
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
|
||||||
|
PrevCol = PrevSelPos<1>
|
||||||
|
PrevRow = PrevSelPos<2>
|
||||||
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
ListData = Get_Property(CtrlEntId,'LIST')
|
||||||
|
|
||||||
|
IF ListData<CurrRow,CurrCol> = '' THEN
|
||||||
|
ColPointer = CurrCol
|
||||||
|
LinePointer = CurrRow
|
||||||
|
|
||||||
|
* Find the first non-empty cell
|
||||||
|
LOOP
|
||||||
|
Test = ListData<LinePointer,(ColPointer) >
|
||||||
|
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
|
||||||
|
ColPointer -= 1
|
||||||
|
IF ColPointer = 0 THEN
|
||||||
|
ColPointer = ColCnt
|
||||||
|
LinePointer -= 1
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
* Move one past the non empty cell
|
||||||
|
BEGIN CASE
|
||||||
|
CASE LinePointer = 0
|
||||||
|
* Empty Table
|
||||||
|
LinePointer = 1
|
||||||
|
CoilPointer = 1
|
||||||
|
CASE ColPointer = ColCnt
|
||||||
|
LinePointer += 1
|
||||||
|
ColPointer = 1
|
||||||
|
CASE 1
|
||||||
|
ColPointer += 1
|
||||||
|
END CASE
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
||||||
|
END
|
||||||
|
|
||||||
|
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
|
||||||
|
ValidationScan = Trim(ListData<PrevRow,PrevCol>)
|
||||||
|
Convert @Lower_Case to @Upper_Case in ValidationScan
|
||||||
|
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
|
||||||
|
//DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
|
||||||
|
//FYI - conversion would only work when separated from above line
|
||||||
|
Convert '/' to '' in ValidationScan
|
||||||
|
If ValidationScan NE '' then
|
||||||
|
Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
IF ListData<PrevRow,PrevCol> NE '' THEN
|
||||||
|
BEGIN CASE
|
||||||
|
CASE PrevCol = COL$LQP_LOT
|
||||||
|
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLot = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawLot[1,2] = '1T' OR RawLot[1,2] = '2T' THEN
|
||||||
|
LotNo = RawLot[3,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
|
||||||
|
|
||||||
|
* Don't check Customer Lot Numbers if scanning substrates
|
||||||
|
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_QTY
|
||||||
|
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLotQty = ListData<PrevRow,PrevCol>
|
||||||
|
IF RawLotQty[1,1] = 'Q' THEN
|
||||||
|
LotQty = RawLotQty[2,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotQty = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NOT(NUM(LotQty)) THEN
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot Qty ':QUOTE(LotQty):' is not a number!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
|
||||||
|
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_PART
|
||||||
|
// Check scanned part number for 5 segments. If there are 5 segments then use segments 3 and 4
|
||||||
|
// to make the actual part number.
|
||||||
|
ScannedPartNo = Trim(ListData<PrevRow, PrevCol>)
|
||||||
|
If DCount(ScannedPartNo, '-') EQ 5 then
|
||||||
|
RawPartNo = ''
|
||||||
|
If ScannedPartNo[1, 1] _EQC 'P' then RawPartNo := 'P'
|
||||||
|
If ScannedPartNo[1, 1] _EQC 'S' then RawPartNo := 'S'
|
||||||
|
RawPartNo := Field(ScannedPartNo, '-', 3, 2)
|
||||||
|
ListData<PrevRow, PrevCol> = RawPartNo
|
||||||
|
end
|
||||||
|
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF StripANSI AND NOT(SkipSubAnsi) THEN ;***************************************
|
||||||
|
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawPartNo[1,1] _EQC 'P' OR RawPartNo[1,1] _EQC 'S' THEN
|
||||||
|
PartNo = RawPartNo[2,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
PartNo = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
|
||||||
|
* Check Customer Part Numbers
|
||||||
|
LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
|
||||||
|
PartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
* Check Substrate Part Numbers
|
||||||
|
LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
END ;* End of check for Customer supplied or Inventory substrate part number
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_VENDOR
|
||||||
|
|
||||||
|
SubSuppBy = CheckArray<CA$SUB_SUPP_BY>
|
||||||
|
|
||||||
|
IF StripANSI AND NOT(SkipSubAnsi) THEN
|
||||||
|
RawVendCode = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawVendCode[1,2] = '1V' THEN
|
||||||
|
VendCode = RawVendCode[3,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
VendCode = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RowExists('SEMI_VEND_CODE', VendCode) OR SubSuppBy = 'C' ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Vendor Code ':QUOTE(VendCode):' not found in':@TM:'Vendor Codes on file!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
VendCode = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',VendCode,PrevSelPos)
|
||||||
|
|
||||||
|
*IF VendCode NE 'NA' THEN
|
||||||
|
ExpectedCode = Get_Property(@WINDOW,'@VENDOR_DEF')
|
||||||
|
|
||||||
|
IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
|
||||||
|
void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
|
||||||
|
END
|
||||||
|
*END ELSE
|
||||||
|
* void = Msg(@WINDOW,'','NA_CODE_USED')
|
||||||
|
*END
|
||||||
|
|
||||||
|
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
||||||
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
|
|
||||||
|
IF TotalScannedQty >= OpenQty THEN
|
||||||
|
|
||||||
|
Resp = Msg(@WINDOW,'','WO_REC_COMPLETE')
|
||||||
|
|
||||||
|
GOTO OK
|
||||||
|
END
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
END
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
Message = Error_Services('GetMessage')
|
||||||
|
TypeOver<MTEXT$> = Message
|
||||||
|
Msg(@Window, TypeOver, 'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
||||||
|
Error_Services('Clear')
|
||||||
|
end else
|
||||||
|
GOSUB Refresh
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' ; Props := 'VISIBLE'
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ControlSelection = 'LQ' ; Ctrl = @WINDOW:'.LOT_QTY'
|
||||||
|
CASE ControlSelection = 'LQP' ; Ctrl = @WINDOW:'.LOT_QTY_PART'
|
||||||
|
CASE ControlSelection = 'LQSP' ; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
ListData = Get_Property(Ctrl,'LIST')
|
||||||
|
|
||||||
|
TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
|
||||||
|
TimeStamp = ICONV(TimeStamp,'DT')
|
||||||
|
IF TimeStamp = '' THEN
|
||||||
|
ErrMsg('Invalid Received DateTime data entered. "mm/dd/yy hh:mm:ss" is the basic format.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY> = '' ;* Clear scanned lot quantities column
|
||||||
|
|
||||||
|
LineCnt = 1
|
||||||
|
LOOP
|
||||||
|
TestVal = ListData<LineCnt,1>
|
||||||
|
UNTIL TestVal = ''
|
||||||
|
LotNo = TRIM(ListData<LineCnt,1>)
|
||||||
|
Qty = TRIM(ListData<LineCnt,2>)
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQ' THEN
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
|
CustPartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQP' THEN
|
||||||
|
CustPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQSP' THEN
|
||||||
|
|
||||||
|
SubPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
|
Vendor = TRIM(ListData<LineCnt,4>) ;* Added 7/14/2011 JCH for SAP
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,1> ;* Changed 2/8/2010 from ' = 1 ' JCH
|
||||||
|
CustPartNo = CheckArray<CA$CUST_PART_NO,1>
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
Vendor = ''
|
||||||
|
END
|
||||||
|
|
||||||
|
Result<1,LineCnt> = LineCnt
|
||||||
|
Result<2,LineCnt> = LotNo ;* Lot No
|
||||||
|
Result<3,LineCnt> = Qty
|
||||||
|
Result<4,LineCnt> = CustPartNo ;* PartNo
|
||||||
|
Result<5,LineCnt> = SubPartNo ;* Substrate Part No
|
||||||
|
Result<6,LineCnt> = Vendor ;* Substrate Vendor Code
|
||||||
|
Result<7,LineCnt> = OCONV(TimeStamp,'DT')
|
||||||
|
Result<8,LineCnt> = @USER4
|
||||||
|
Result<9,LineCnt> = OrderItemNo
|
||||||
|
|
||||||
|
LineCnt += 1
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF ControlSelection NE 'LQSP' THEN
|
||||||
|
|
||||||
|
* Orders with Epi supplied substrates don't have any lot quantities to check against.
|
||||||
|
|
||||||
|
ProblemQtyLots = ''
|
||||||
|
FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
|
||||||
|
IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
|
||||||
|
* Lot quantity mismatch
|
||||||
|
ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF ProblemQtyLots NE '' THEN
|
||||||
|
LineCnt = 1
|
||||||
|
LOOP
|
||||||
|
TestVal = ListData<LineCnt,1>
|
||||||
|
UNTIL TestVal = ''
|
||||||
|
LotNo = TRIM(ListData<LineCnt,1>)
|
||||||
|
LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
|
||||||
|
stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$) ;* Flag all the lines with lot numbers having qty problems
|
||||||
|
END
|
||||||
|
LineCnt += 1
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
||||||
|
NumRows = DCount(Result, @FM)
|
||||||
|
NullFound = False$
|
||||||
|
For LineIndex = 1 to NumRows
|
||||||
|
Row = Result<LineIndex>
|
||||||
|
NumVals = DCount(Row, @VM)
|
||||||
|
For ValIndex = 1 to NumVals
|
||||||
|
Val = Row<0, ValIndex>
|
||||||
|
If Val EQ '' then NullFound = True$
|
||||||
|
Next ValIndex
|
||||||
|
Until NullFound
|
||||||
|
Next LineIndex
|
||||||
|
If NullFound EQ True$ then
|
||||||
|
ErrMsg('Missing value found in scanned data! Verify your labels and restart your scan operation.')
|
||||||
|
Result = 'Cancel'
|
||||||
|
end
|
||||||
|
|
||||||
|
ScanResult = Result
|
||||||
|
Swap @VM with ' | ' in ScanResult
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = LoggingDTM
|
||||||
|
LogData<2> = @User4
|
||||||
|
LogData<3> = ScanResult
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
438
LSL2/STPROC/COMM_DIALOG_WO_SCAN_SUBSTRATES.txt
Normal file
438
LSL2/STPROC/COMM_DIALOG_WO_SCAN_SUBSTRATES.txt
Normal file
@ -0,0 +1,438 @@
|
|||||||
|
COMPILE FUNCTION Comm_Dialog_WO_Scan_Substrates(Method, Parm1)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Dialog_WO_Scan window.
|
||||||
|
|
||||||
|
08/12/2004 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Extract_SI_Keys
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Send_Message
|
||||||
|
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$LQP_LOT TO 1 ;* Equates for Lot_Qty... edit table controls used to scan in label data
|
||||||
|
EQU COL$LQP_QTY TO 2
|
||||||
|
EQU COL$LQP_PART TO 3 ;* This is either Cust Part No OR Substrate Part Number depending on which control is visible
|
||||||
|
|
||||||
|
|
||||||
|
EQU CA$ITEM_NO TO 1 ;* Equates for Checking Array passed to Scan routine
|
||||||
|
EQU CA$LOT_NO TO 2
|
||||||
|
EQU CA$LOT_QTY TO 3
|
||||||
|
EQU CA$CUST_PART_NO TO 4
|
||||||
|
EQU CA$SUB_PART_NO TO 5
|
||||||
|
EQU CA$SCANNED_LOT_QTY TO 6
|
||||||
|
EQU CA$VERIFY_PART_NO TO 7
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Dialog_WO_Scan'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
|
CASE Method = 'LQP' ; GOSUB LQP
|
||||||
|
CASE 1
|
||||||
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
OrderNo = Parm1[1,@FM]
|
||||||
|
CheckArray = FIELD(Parm1,@FM,2,999)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'@ORDER_NO',OrderNo)
|
||||||
|
Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
|
TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
|
Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
|
||||||
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
|
||||||
|
Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Close:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Cancel:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,'Cancel')
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
||||||
|
TotalOrderQty = SUM(CheckArray<CA$LOT_QTY>)
|
||||||
|
|
||||||
|
Set_Property(@WINDOW:'.ORDER_QTY','TEXT',OCONV(TotalOrderQty,'MD0,'))
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
|
||||||
|
|
||||||
|
IF TotalScannedQty = TotalOrderQty THEN
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
|
||||||
|
END ELSE
|
||||||
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)
|
||||||
|
END
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LQP:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
StripANSI = Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
|
||||||
|
SkipSubANSI = Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
|
||||||
|
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
IF CtrlEntID = @WINDOW:'.LOT_QTY' THEN ColCnt = 2 ELSE ColCnt = 3
|
||||||
|
|
||||||
|
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
|
||||||
|
PrevCol = PrevSelPos<1>
|
||||||
|
PrevRow = PrevSelPos<2>
|
||||||
|
|
||||||
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
|
ListData = Get_Property(CtrlEntId,'LIST')
|
||||||
|
|
||||||
|
IF ListData<CurrRow,CurrCol> = '' THEN
|
||||||
|
|
||||||
|
ColPointer = CurrCol
|
||||||
|
LinePointer = CurrRow
|
||||||
|
|
||||||
|
* Find the first non-empty cell
|
||||||
|
|
||||||
|
LOOP
|
||||||
|
Test = ListData<LinePointer,(ColPointer) >
|
||||||
|
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
|
||||||
|
ColPointer -= 1
|
||||||
|
IF ColPointer = 0 THEN
|
||||||
|
ColPointer = ColCnt
|
||||||
|
LinePointer -= 1
|
||||||
|
END
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
* Move one past the non empty cell
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE LinePointer = 0
|
||||||
|
* Empty Table
|
||||||
|
LinePointer = 1
|
||||||
|
CoilPointer = 1
|
||||||
|
|
||||||
|
CASE ColPointer = ColCnt
|
||||||
|
LinePointer += 1
|
||||||
|
ColPointer = 1
|
||||||
|
|
||||||
|
CASE 1
|
||||||
|
ColPointer += 1
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
IF ListData<PrevRow,PrevCol> NE '' THEN
|
||||||
|
BEGIN CASE
|
||||||
|
CASE PrevCol = COL$LQP_LOT
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLot = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawLot[1,2] = '1T' THEN
|
||||||
|
LotNo = RawLot[3,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
|
||||||
|
|
||||||
|
* Don't check Customer Lot Numbers if scanning substrates
|
||||||
|
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
|
||||||
|
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_QTY
|
||||||
|
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLotQty = ListData<PrevRow,PrevCol>
|
||||||
|
IF RawLotQty[1,1] = 'Q' THEN
|
||||||
|
LotQty = RawLotQty[2,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotQty = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NOT(NUM(LotQty)) THEN
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot Qty ':QUOTE(LotQty):' is not a number!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
|
||||||
|
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_PART
|
||||||
|
|
||||||
|
IF StripANSI AND NOT(SkipSubAnsi) THEN ;***************************************
|
||||||
|
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawPartNo[1,1] = 'P' OR RawPartNo[1,1] = 'S' THEN
|
||||||
|
PartNo = RawPartNo[2,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No'
|
||||||
|
Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
PartNo = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
|
||||||
|
|
||||||
|
* Check Customer Part Numbers
|
||||||
|
|
||||||
|
LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
|
||||||
|
|
||||||
|
PartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
* Check Substrate Part Numbers
|
||||||
|
|
||||||
|
LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
END
|
||||||
|
END ;* End of check for Customer supplied or Inventory substrate part number
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
OK:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
|
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' ; Props := 'VISIBLE'
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE ControlSelection = 'LQ' ; Ctrl = @WINDOW:'.LOT_QTY'
|
||||||
|
CASE ControlSelection = 'LQP' ; Ctrl = @WINDOW:'.LOT_QTY_PART'
|
||||||
|
CASE ControlSelection = 'LQSP' ; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
ListData = Get_Property(Ctrl,'LIST')
|
||||||
|
|
||||||
|
|
||||||
|
TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
|
||||||
|
TimeStamp = ICONV(TimeStamp,'DT')
|
||||||
|
IF TimeStamp = '' THEN
|
||||||
|
ErrMsg('Invalid Received DateTime data entered. "mm/dd/yy hh:mm:ss" is the basic format.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
* TimeStamp = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT')
|
||||||
|
|
||||||
|
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY> = '' ;* Clear scanned lot quantities column
|
||||||
|
|
||||||
|
LineCnt = 1
|
||||||
|
LOOP
|
||||||
|
TestVal = ListData<LineCnt,1>
|
||||||
|
UNTIL TestVal = ''
|
||||||
|
LotNo = TRIM(ListData<LineCnt,1>)
|
||||||
|
Qty = TRIM(ListData<LineCnt,2>)
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQ' THEN
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
|
CustPartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",COL$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQP' THEN
|
||||||
|
CustPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",COL$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IF ControlSelection = 'LQSP' THEN
|
||||||
|
|
||||||
|
SubPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
|
OrderItemNo = CheckArray<CA$ITEM_NO,1> ;* Changed 2/8/2010 from ' = 1 ' JCH
|
||||||
|
CustPartNo = CheckArray<CA$CUST_PART_NO,1>
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
Result<1,LineCnt> = LineCnt
|
||||||
|
Result<2,LineCnt> = LotNo ;* Lot No
|
||||||
|
Result<3,LineCnt> = Qty
|
||||||
|
Result<4,LineCnt> = CustPartNo ;* PartNo
|
||||||
|
Result<5,LineCnt> = SubPartNo ;* Substrate Part No
|
||||||
|
Result<6,LineCnt> = OCONV(TimeStamp,'DT')
|
||||||
|
Result<7,LineCnt> = @USER4
|
||||||
|
Result<8,LineCnt> = OrderItemNo
|
||||||
|
LineCnt += 1
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
IF ControlSelection NE 'LQSP' THEN
|
||||||
|
|
||||||
|
* Orders with Epi supplied substrates don't have any lot quantities to check against.
|
||||||
|
|
||||||
|
ProblemQtyLots = ''
|
||||||
|
FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
|
||||||
|
IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
|
||||||
|
* Lot quantity mismatch
|
||||||
|
ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
IF ProblemQtyLots NE '' THEN
|
||||||
|
LineCnt = 1
|
||||||
|
LOOP
|
||||||
|
TestVal = ListData<LineCnt,1>
|
||||||
|
UNTIL TestVal = ''
|
||||||
|
LotNo = TRIM(ListData<LineCnt,1>)
|
||||||
|
LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
|
||||||
|
stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$) ;* Flag all the lines with lot numbers having qty problems
|
||||||
|
END
|
||||||
|
LineCnt += 1
|
||||||
|
REPEAT
|
||||||
|
|
||||||
|
ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Result)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
181
LSL2/STPROC/COMM_EPI_SUSCEPTOR.txt
Normal file
181
LSL2/STPROC/COMM_EPI_SUSCEPTOR.txt
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
COMPILE FUNCTION Comm_Epi_Susceptor(Instruction, Parm1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Commuter module for Epi_Susceptor Window
|
||||||
|
|
||||||
|
10/31/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window,Print_Vend_CofA
|
||||||
|
DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow
|
||||||
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Collect.Ixvals
|
||||||
|
DECLARE FUNCTION Send_Message
|
||||||
|
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT APPCOLORS
|
||||||
|
|
||||||
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
EQU COL$POCKET TO 1
|
||||||
|
EQU COL$ZONE TO 2
|
||||||
|
EQU COL$USAGE TO 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ErrTitle = 'Error in Comm_Epi_Susceptor'
|
||||||
|
ErrorMsg = ''
|
||||||
|
|
||||||
|
Result = ''
|
||||||
|
|
||||||
|
BEGIN CASE
|
||||||
|
CASE Instruction = 'Create' ; GOSUB Create
|
||||||
|
CASE Instruction = 'Refresh' ; GOSUB Refresh
|
||||||
|
CASE Instruction = 'Clear' ; GOSUB Clear
|
||||||
|
CASE Instruction = 'Read' ; GOSUB Read
|
||||||
|
CASE Instruction = 'Write' ; GOSUB Write
|
||||||
|
CASE Instruction = 'Delete' ; GOSUB Delete
|
||||||
|
CASE Instruction = 'LUConfigID' ; GOSUB LUConfigID
|
||||||
|
CASE 1
|
||||||
|
ErrorMsg = 'Unknown Instruction passed to routine.'
|
||||||
|
ErrMsg(ErrorMsg)
|
||||||
|
END CASE
|
||||||
|
|
||||||
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Create:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Center_Window(@WINDOW)
|
||||||
|
|
||||||
|
EQU DROPDOWN_STYLE$ TO 131072
|
||||||
|
|
||||||
|
ReactorStyles = Send_Message(@WINDOW:'.POCKET_NO','COLSTYLE',0,'')
|
||||||
|
|
||||||
|
ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,DROPDOWN_STYLE$)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.POCKET_NO','COLSTYLE',0,ReactorStyles)
|
||||||
|
|
||||||
|
Send_Message(@WINDOW:'.POCKET_NO','COLFORMAT',COL$USAGE,'':@VM:'TEST')
|
||||||
|
|
||||||
|
IF Parm1 NE '' THEN
|
||||||
|
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:Parm1)
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Read:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
GOSUB Refresh
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Clear:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Refresh:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
* QBF buttons
|
||||||
|
|
||||||
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
|
END ELSE
|
||||||
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
|
ETCtrls = ETSymbolics<1>
|
||||||
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Write:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
Result = 1 ;* Security hook
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
Delete:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
ErrMsg('Records may not be modified.')
|
||||||
|
|
||||||
|
Result = 0 ;* Security hook
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
* * * * * * *
|
||||||
|
LUConfigID:
|
||||||
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
EpiSusID = Popup(@WINDOW,'','EPI_SUSCEPTOR')
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg(errCode)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF EpiSusID NE '' THEN obj_Appwindow('LUValReturn',EpiSusID:@RM:@WINDOW:'.CONFIG_ID') ;* Loads form key
|
||||||
|
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user