Compare commits
137 Commits
06-16-a
...
722bc63bdb
Author | SHA1 | Date | |
---|---|---|---|
722bc63bdb | |||
1f2777cd18 | |||
10bf8bf878 | |||
1a572a31b2 | |||
098f740585 | |||
89bb3e479b | |||
60522d74c1 | |||
3561b41a7b | |||
a636198128 | |||
adc247fd4c | |||
a094971d7d | |||
47b54f6a16 | |||
804258a167 | |||
6d552ab824 | |||
2fbf41d528 | |||
ba2faa8c9f | |||
0a2d53d173 | |||
844de71599 | |||
494988d394 | |||
e1c7544fac | |||
6d5c9c0ab7 | |||
a8dff61cfa | |||
09d2d13e63 | |||
14331fcf49 | |||
667831a003 | |||
82b74f0b96 | |||
f4f63c28e3 | |||
1f2b73797b | |||
54eaf15598 | |||
fffadaa1c3 | |||
a6da80dc3c | |||
3125225639 | |||
f54331eb0e | |||
847483f603 | |||
88281fff05 | |||
8499d03ef8 | |||
3186ec1ad6 | |||
898f21b73d | |||
f7ee12a78d | |||
475df5ba54 | |||
28a8a10ba2 | |||
6934799e92 | |||
03f42dedea | |||
033e3baee8 | |||
4bfae8e7b7 | |||
0f0c735023 | |||
4eee1b0f0a | |||
e2e8731316 | |||
a21f41fd29 | |||
2bbc5c065d | |||
9e54865e1e | |||
c7f1f86249 | |||
c89bb6b3d4 | |||
71daf317f0 | |||
a48f47ddc9 | |||
6396264e64 | |||
8f233705a2 | |||
b159e1aa27 | |||
de2e6af5f7 | |||
84da66ccd5 | |||
49e77a769f | |||
490bfe21d4 | |||
2aaed8944e | |||
ef104f889c | |||
ea156489f1 | |||
e1a44a7687 | |||
c890a25d46 | |||
836b8c47a9 | |||
aabd4c3a91 | |||
b607432be4 | |||
3debdce91e | |||
4689b861d7 | |||
350116fddc | |||
59aed72156 | |||
e97162dc1e | |||
2a6c0afddf | |||
b53e805929 | |||
804b590773 | |||
cd64511871 | |||
2226f3112b | |||
184d2c2cba | |||
5830705c7d | |||
1d32ec4fbb | |||
eb85afaf35 | |||
269e5f9bd4 | |||
d4ce96337b | |||
af6cd757de | |||
ce252bf885 | |||
28d5b81b30 | |||
563871008e | |||
272b2ce7d8 | |||
14c77d9edf | |||
d15cd38daf | |||
e3dbea2b7a | |||
01fa3f8202 | |||
98ac420462 | |||
5ca3778719 | |||
5d27afcd68 | |||
c786fce37b | |||
b796060529 | |||
ff0036d4c2 | |||
fd55fe06a9 | |||
653ba1619f | |||
8f25d78fe6 | |||
521c35af8f | |||
d021ab64b9 | |||
df5b217fe7 | |||
8415e99055 | |||
da208b2908 | |||
7b7f501145 | |||
03e85359d1 | |||
401c03d752 | |||
a878c9bb2e | |||
60b5386f27 | |||
46f070e9cc | |||
2180ba3fb4 | |||
c6910c14c2 | |||
38e7b6e276 | |||
e523f2085d | |||
7b386fe856 | |||
bcdfbe0534 | |||
52499b7616 | |||
1db89a3d3f | |||
de67e45c9a | |||
3becd9cf4d | |||
d570e3cfef | |||
49f6cf505a | |||
17e320923f | |||
c4a3edece2 | |||
273b7f67a6 | |||
5cb17c6d52 | |||
0c7a1d55e2 | |||
b2c9e500f8 | |||
2f6b376ece | |||
357b7ede64 | |||
60493b3413 | |||
76327e9dbc |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
LSL2/STPROC/TEST_DANIEL*.txt
|
LSL2/STPROC/TEST_DANIEL*.txt
|
||||||
LSL2/STPROC/TEST_DAKOTA.txt
|
LSL2/STPROC/TEST_DAKOTA.txt
|
||||||
LSL2/STPROC/JONATHAN_SERVICES.txt
|
LSL2/STPROC/JONATHAN_SERVICES.txt
|
||||||
|
LSL2/STPROC/CHASE_SERVICES.txt
|
@ -21,75 +21,77 @@
|
|||||||
"<1,12>": "SCOPE #3",
|
"<1,12>": "SCOPE #3",
|
||||||
"<1,13>": "SCOPE #4",
|
"<1,13>": "SCOPE #4",
|
||||||
"<1,14>": "SCOPE #5",
|
"<1,14>": "SCOPE #5",
|
||||||
"<1,15>": "SP1 1",
|
"<1,15>": "SCOPE #6",
|
||||||
"<1,16>": "TENCOR1",
|
"<1,16>": "SP1 1",
|
||||||
"<1,17>": "TENCOR2",
|
"<1,17>": "TENCOR1",
|
||||||
"<1,18>": "TENCOR3",
|
"<1,18>": "TENCOR2",
|
||||||
"<1,19>": "BIORAD2",
|
"<1,19>": "TENCOR3",
|
||||||
"<1,20>": "BIORAD3",
|
"<1,20>": "BIORAD2",
|
||||||
"<1,21>": "BIORAD4",
|
"<1,21>": "BIORAD3",
|
||||||
"<1,22>": "BIORAD5",
|
"<1,22>": "BIORAD4",
|
||||||
"<1,23>": "CDE4",
|
"<1,23>": "BIORAD5",
|
||||||
"<1,24>": "CDE5",
|
"<1,24>": "CDE4",
|
||||||
"<1,25>": "CDE6",
|
"<1,25>": "CDE5",
|
||||||
"<1,26>": "HGCV1",
|
"<1,26>": "CDE6",
|
||||||
"<1,27>": "HGCV2",
|
"<1,27>": "HGCV1",
|
||||||
"<1,28>": "HGCV3",
|
"<1,28>": "HGCV2",
|
||||||
"<1,29>": "SPV",
|
"<1,29>": "HGCV3",
|
||||||
"<1,30>": "SRP",
|
"<1,30>": "SPV",
|
||||||
"<1,31>": "BELLJAR",
|
"<1,31>": "SRP",
|
||||||
"<1,32>": "6INLESS",
|
"<1,32>": "BELLJAR",
|
||||||
"<1,33>": "6INLESS2",
|
"<1,33>": "6INLESS",
|
||||||
"<1,34>": "6MACTRONIX #1",
|
"<1,34>": "6INLESS2",
|
||||||
"<1,35>": "6MACTRONIX #2",
|
"<1,35>": "6MACTRONIX #1",
|
||||||
"<1,36>": "6MACTRONIX #3",
|
"<1,36>": "6MACTRONIX #2",
|
||||||
"<1,37>": "6MACTRONIX #4",
|
"<1,37>": "6MACTRONIX #3",
|
||||||
"<1,38>": "8INLESS",
|
"<1,38>": "6MACTRONIX #4",
|
||||||
"<1,39>": "8INLESS2",
|
"<1,39>": "8INLESS",
|
||||||
"<1,40>": "BAGGER1",
|
"<1,40>": "8INLESS2",
|
||||||
"<1,41>": "BAGGER2",
|
"<1,41>": "BAGGER1",
|
||||||
"<1,42>": "BAGGER3",
|
"<1,42>": "BAGGER2",
|
||||||
"<1,43>": "BAGGER4",
|
"<1,43>": "BAGGER3",
|
||||||
"<1,44>": "6INFF01",
|
"<1,44>": "BAGGER4",
|
||||||
"<1,45>": "6INFF02",
|
"<1,45>": "6INFF01",
|
||||||
"<1,46>": "6INFF03",
|
"<1,46>": "6INFF02",
|
||||||
"<1,47>": "6INFF04",
|
"<1,47>": "6INFF03",
|
||||||
"<1,48>": "6INFF05",
|
"<1,48>": "6INFF04",
|
||||||
"<1,49>": "6INFF06",
|
"<1,49>": "6INFF05",
|
||||||
"<1,50>": "6INFF07",
|
"<1,50>": "6INFF06",
|
||||||
"<1,51>": "6INFF08",
|
"<1,51>": "6INFF07",
|
||||||
"<1,52>": "6INFF09",
|
"<1,52>": "6INFF08",
|
||||||
"<1,53>": "6INFF10",
|
"<1,53>": "6INFF09",
|
||||||
"<1,54>": "8INNF01",
|
"<1,54>": "6INFF10",
|
||||||
"<1,55>": "8INNF02",
|
"<1,55>": "8INNF01",
|
||||||
"<1,56>": "8INNF03",
|
"<1,56>": "8INNF02",
|
||||||
"<1,57>": "8INNF04",
|
"<1,57>": "8INNF03",
|
||||||
"<1,58>": "8INNF05",
|
"<1,58>": "8INNF04",
|
||||||
"<1,59>": "8INFF01",
|
"<1,59>": "8INNF05",
|
||||||
"<1,60>": "8INFF02",
|
"<1,60>": "8INFF01",
|
||||||
"<1,61>": "8INFF03",
|
"<1,61>": "8INFF02",
|
||||||
"<1,62>": "8INFF04",
|
"<1,62>": "8INFF03",
|
||||||
"<1,63>": "MACTRONIX #1",
|
"<1,63>": "8INFF04",
|
||||||
"<1,64>": "MACTRONIX #2 ",
|
"<1,64>": "MACTRONIX #1",
|
||||||
"<1,65>": "MACTRONIX #3",
|
"<1,65>": "MACTRONIX #2 ",
|
||||||
"<1,66>": "MACTRONIX #4",
|
"<1,66>": "MACTRONIX #3",
|
||||||
"<1,67>": "MACTRONIX #5",
|
"<1,67>": "MACTRONIX #4",
|
||||||
"<1,68>": "MACTRONIX #6",
|
"<1,68>": "MACTRONIX #5",
|
||||||
"<1,69>": "MACTRONIX #7",
|
"<1,69>": "MACTRONIX #6",
|
||||||
"<1,70>": "TALL_PITCH1",
|
"<1,70>": "MACTRONIX #7",
|
||||||
"<1,71>": "TALL_PITCH2",
|
"<1,71>": "TALL_PITCH1",
|
||||||
"<1,72>": "TALL_PITCH3",
|
"<1,72>": "TALL_PITCH2",
|
||||||
"<1,73>": "TALL_PITCH4",
|
"<1,73>": "TALL_PITCH3",
|
||||||
"<1,74>": "WC6INCH1",
|
"<1,74>": "TALL_PITCH4",
|
||||||
"<1,75>": "WC6INCH2",
|
"<1,75>": "WC6INCH1",
|
||||||
"<1,76>": "WC6INCH3",
|
"<1,76>": "WC6INCH2",
|
||||||
"<1,77>": "WC6INCH4",
|
"<1,77>": "WC6INCH3",
|
||||||
"<1,78>": "WC8INCH1",
|
"<1,78>": "WC6INCH4",
|
||||||
"<1,79>": "WC8INCH2",
|
"<1,79>": "WC8INCH1",
|
||||||
"<1,80>": "WC8INCH3",
|
"<1,80>": "WC8INCH2",
|
||||||
"<1,81>": "ELLP01",
|
"<1,81>": "WC8INCH3",
|
||||||
"<1,82>": "LEAKCHK01",
|
"<1,82>": "ELLP01",
|
||||||
"<1,83>": "LEAKCHK02"
|
"<1,83>": "LEAKCHK01",
|
||||||
|
"<1,84>": "LEAKCHK02",
|
||||||
|
"<1,85>": "TBI #1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "declare function set_printer, Get_Property\r\ndeclare subroutine record_lock, Set_Property\r\n$insert msg_equates\r\n$insert lsl_users_equ\r\n\r\n*Void = Set_Property('SYSTSEM','IDLEPROC','')\r\nVoid = Set_Property(@WINDOW,'TIMER','')\r\n\r\n\r\nUNLOCK All\r\n/*\r\nDEAD - 1/27/2005 JCH\r\n* will write out the x and y coords for the user, so the menu comes up at the last used\r\n* location\r\nWinSize = get_property( @window, 'SIZE' )\r\nX = WinSize<1>\r\nY = WinSize<2>\r\nXsize = WinSize<3>\r\nYsize = WinSize<4>\r\n\r\nIF @USERNAME = 'BRYCE_BARB' THEN DEBUG\r\n\r\nopen 'LSL_USERS' to LSLUsersTableVar else\r\n MsgInfo = ''\r\n MsgInfo<mtext$> = 'Unable to open LSL_USERS...'\r\n MsgInfo<mcol$> = -2\r\n MsgInfo<mrow$> = -2\r\n Void = msg( '', MsgInfo )\r\nend\r\n\r\nread UserRec from LSLUsersTableVar, @user4 then\r\n\t \r\n\t*UserRec = xlate( 'LSL_USERS', @user4, '', 'X' )\r\n\tUserRec<lsl_users_menu_xpos$> = X\r\n\tUserRec<lsl_users_menu_ypos$> = Y\r\n\tUserRec<lsl_users_menu_xsize$> = Xsize\r\n\tUserRec<lsl_users_menu_ysize$> = Ysize\r\n\twrite UserRec on LSLUsersTableVar, @user4 else Null\r\n\r\nEND;* End of User Rec Read\r\n*/\r\n\r\nRETURN 1\r\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "DECLARE FUNCTION Start_Window\r\n\r\nvoid = Start_Window('REACT_STATUS_EVEN',@WINDOW,'')\r\nvoid = Start_Window('REACT_STATUS_ODD',@WINDOW,'')\r\n\r\nvoid = Start_Window('TOOL_STATUS',@WINDOW,'')\r\n\r\n\r\nRETURN 1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "declare subroutine forward_event\r\n\r\nforward_event( x, y, Width, Height )\r\n*.group_1->size = -10:@fm:-10:@fm:Width:@fm:Height\r\nRETURN 0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "\r\nDeclare subroutine Post_Event, Set_Property\r\n\r\n*If @User4 EQ 'ERIK_L' then Set_Property(@Window, '@CLOSE', 1)\r\n\r\nClose = Get_Property(@Window, '@CLOSE')\r\n\r\nCurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')\r\n\r\nOPEN 'SYSLISTS' TO ListsFile THEN\r\n\tStation = @STATION\r\n\tStation = Station[1,'_']\t\t\r\n\tListKey = Station:'*KEEP_ALIVE'\r\n\tListRec = @USERNAME:@FM:CurrDTM\r\n\tWRITE ListRec ON ListsFile,ListKey ELSE NULL\r\nEND \r\n\r\n\r\nRETURN 1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,402 +0,0 @@
|
|||||||
{
|
|
||||||
"header": {
|
|
||||||
"version": 1,
|
|
||||||
"type": "record"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"record1": {
|
|
||||||
"<1>": "1010",
|
|
||||||
"<2>": "1",
|
|
||||||
"<3>": ""
|
|
||||||
},
|
|
||||||
"record2": {
|
|
||||||
"<1>": {
|
|
||||||
"<1,1>": "LSL_MAIN",
|
|
||||||
"<1,2>": "",
|
|
||||||
"<1,3>": "WINDOW",
|
|
||||||
"<1,4>": "",
|
|
||||||
"<1,5>": "147",
|
|
||||||
"<1,6>": "181",
|
|
||||||
"<1,7>": "-631",
|
|
||||||
"<1,8>": "-427",
|
|
||||||
"<1,9>": "Infineon Technologies",
|
|
||||||
"<1,10>": {
|
|
||||||
"<1,10,1>": "0x92C70000",
|
|
||||||
"<1,10,2>": "0x0"
|
|
||||||
},
|
|
||||||
"<1,11>": {
|
|
||||||
"<1,11,1>": "0x100",
|
|
||||||
"<1,11,2>": "0x80000000"
|
|
||||||
},
|
|
||||||
"<1,12>": "0",
|
|
||||||
"<1,13>": "-2",
|
|
||||||
"<1,14>": "0",
|
|
||||||
"<1,15>": "",
|
|
||||||
"<1,16>": "",
|
|
||||||
"<1,17>": "",
|
|
||||||
"<1,18>": "",
|
|
||||||
"<1,19>": "",
|
|
||||||
"<1,20>": "",
|
|
||||||
"<1,21>": "",
|
|
||||||
"<1,22>": "",
|
|
||||||
"<1,23>": "",
|
|
||||||
"<1,24>": {
|
|
||||||
"<1,24,1>": "0",
|
|
||||||
"<1,24,2>": "0",
|
|
||||||
"<1,24,3>": "0",
|
|
||||||
"<1,24,4>": "0",
|
|
||||||
"<1,24,5>": "0",
|
|
||||||
"<1,24,6>": "0"
|
|
||||||
},
|
|
||||||
"<1,25>": "0",
|
|
||||||
"<1,26>": "0",
|
|
||||||
"<1,27>": "",
|
|
||||||
"<1,28>": "",
|
|
||||||
"<1,29>": "",
|
|
||||||
"<1,30>": "",
|
|
||||||
"<1,31>": "",
|
|
||||||
"<1,32>": {
|
|
||||||
"<1,32,1>": "0x7FFFE",
|
|
||||||
"<1,32,2>": "0xF001E988"
|
|
||||||
},
|
|
||||||
"<1,33>": "",
|
|
||||||
"<1,34>": "LSL2*IMAGE*ICO*DATASET",
|
|
||||||
"<1,35>": "",
|
|
||||||
"<1,36>": "",
|
|
||||||
"<1,37>": {
|
|
||||||
"<1,37,1>": "0x10001",
|
|
||||||
"<1,37,2>": "0x10001"
|
|
||||||
},
|
|
||||||
"<1,38>": {
|
|
||||||
"<1,38,1>": "1",
|
|
||||||
"<1,38,2>": "1"
|
|
||||||
},
|
|
||||||
"<1,39>": "",
|
|
||||||
"<1,40>": "0",
|
|
||||||
"<1,41>": "",
|
|
||||||
"<1,42>": "",
|
|
||||||
"<1,43>": "",
|
|
||||||
"<1,44>": "",
|
|
||||||
"<1,45>": "",
|
|
||||||
"<1,46>": "",
|
|
||||||
"<1,47>": "",
|
|
||||||
"<1,48>": "",
|
|
||||||
"<1,49>": "",
|
|
||||||
"<1,50>": "",
|
|
||||||
"<1,51>": "",
|
|
||||||
"<1,52>": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"record3": {
|
|
||||||
"<1>": {
|
|
||||||
"<1,1>": "MDICLIENT",
|
|
||||||
"<1,2>": "RTIMDICLIENT",
|
|
||||||
"<1,3>": "MDICLIENT",
|
|
||||||
"<1,4>": "LSL_MAIN",
|
|
||||||
"<1,5>": "3",
|
|
||||||
"<1,6>": "7",
|
|
||||||
"<1,7>": "-625",
|
|
||||||
"<1,8>": "-607",
|
|
||||||
"<1,9>": "",
|
|
||||||
"<1,10>": {
|
|
||||||
"<1,10,1>": "0x56B00000",
|
|
||||||
"<1,10,2>": "0x0"
|
|
||||||
},
|
|
||||||
"<1,11>": {
|
|
||||||
"<1,11,1>": "0xC000",
|
|
||||||
"<1,11,2>": "0x80000000"
|
|
||||||
},
|
|
||||||
"<1,12>": "1",
|
|
||||||
"<1,13>": "-2",
|
|
||||||
"<1,14>": "0",
|
|
||||||
"<1,15>": "",
|
|
||||||
"<1,16>": "",
|
|
||||||
"<1,17>": "",
|
|
||||||
"<1,18>": "",
|
|
||||||
"<1,19>": "",
|
|
||||||
"<1,20>": "",
|
|
||||||
"<1,21>": "",
|
|
||||||
"<1,22>": "",
|
|
||||||
"<1,23>": "",
|
|
||||||
"<1,24>": "",
|
|
||||||
"<1,25>": "0",
|
|
||||||
"<1,26>": "0",
|
|
||||||
"<1,27>": "",
|
|
||||||
"<1,28>": "",
|
|
||||||
"<1,29>": "",
|
|
||||||
"<1,30>": "",
|
|
||||||
"<1,31>": "",
|
|
||||||
"<1,32>": {
|
|
||||||
"<1,32,1>": "0x7fffc",
|
|
||||||
"<1,32,2>": "0xf001c808"
|
|
||||||
},
|
|
||||||
"<1,33>": "",
|
|
||||||
"<1,34>": "",
|
|
||||||
"<1,35>": "",
|
|
||||||
"<1,36>": "",
|
|
||||||
"<1,37>": "",
|
|
||||||
"<1,38>": "",
|
|
||||||
"<1,39>": "",
|
|
||||||
"<1,40>": "1"
|
|
||||||
},
|
|
||||||
"<2>": ""
|
|
||||||
},
|
|
||||||
"record4": {
|
|
||||||
"<1>": {
|
|
||||||
"<1,1>": {
|
|
||||||
"<1,1,1>": "MENU",
|
|
||||||
"<1,1,2>": "4",
|
|
||||||
"<1,1,3>": "",
|
|
||||||
"<1,1,4>": "",
|
|
||||||
"<1,1,5>": "0",
|
|
||||||
"<1,1,6>": "0",
|
|
||||||
"<1,1,7>": "0",
|
|
||||||
"<1,1,8>": "0",
|
|
||||||
"<1,1,9>": "12",
|
|
||||||
"<1,1,10>": "",
|
|
||||||
"<1,1,11>": "0",
|
|
||||||
"<1,1,12>": ""
|
|
||||||
},
|
|
||||||
"<1,2>": {
|
|
||||||
"<1,2,1>": "POPUP",
|
|
||||||
"<1,2,2>": "1",
|
|
||||||
"<1,2,3>": "",
|
|
||||||
"<1,2,4>": "&File",
|
|
||||||
"<1,2,5>": "0",
|
|
||||||
"<1,2,6>": "0",
|
|
||||||
"<1,2,7>": "0",
|
|
||||||
"<1,2,8>": "0",
|
|
||||||
"<1,2,9>": "",
|
|
||||||
"<1,2,10>": "",
|
|
||||||
"<1,2,11>": "0",
|
|
||||||
"<1,2,12>": ""
|
|
||||||
},
|
|
||||||
"<1,3>": {
|
|
||||||
"<1,3,1>": "ITEM",
|
|
||||||
"<1,3,2>": "",
|
|
||||||
"<1,3,3>": "",
|
|
||||||
"<1,3,4>": "E&xit\tAlt+F4",
|
|
||||||
"<1,3,5>": "0",
|
|
||||||
"<1,3,6>": "0",
|
|
||||||
"<1,3,7>": "0",
|
|
||||||
"<1,3,8>": "1139",
|
|
||||||
"<1,3,9>": "",
|
|
||||||
"<1,3,10>": "",
|
|
||||||
"<1,3,11>": "0",
|
|
||||||
"<1,3,12>": ""
|
|
||||||
},
|
|
||||||
"<1,4>": {
|
|
||||||
"<1,4,1>": "POPUP",
|
|
||||||
"<1,4,2>": "2",
|
|
||||||
"<1,4,3>": "",
|
|
||||||
"<1,4,4>": "&DataWindows",
|
|
||||||
"<1,4,5>": "0",
|
|
||||||
"<1,4,6>": "0",
|
|
||||||
"<1,4,7>": "0",
|
|
||||||
"<1,4,8>": "0",
|
|
||||||
"<1,4,9>": "",
|
|
||||||
"<1,4,10>": "",
|
|
||||||
"<1,4,11>": "0",
|
|
||||||
"<1,4,12>": ""
|
|
||||||
},
|
|
||||||
"<1,5>": {
|
|
||||||
"<1,5,1>": "ITEM",
|
|
||||||
"<1,5,2>": "",
|
|
||||||
"<1,5,3>": "",
|
|
||||||
"<1,5,4>": "&Company",
|
|
||||||
"<1,5,5>": "0",
|
|
||||||
"<1,5,6>": "0",
|
|
||||||
"<1,5,7>": "0",
|
|
||||||
"<1,5,8>": "0",
|
|
||||||
"<1,5,9>": "",
|
|
||||||
"<1,5,10>": "",
|
|
||||||
"<1,5,11>": "0",
|
|
||||||
"<1,5,12>": ""
|
|
||||||
},
|
|
||||||
"<1,6>": {
|
|
||||||
"<1,6,1>": "ITEM",
|
|
||||||
"<1,6,2>": "",
|
|
||||||
"<1,6,3>": "",
|
|
||||||
"<1,6,4>": "&Personal Names",
|
|
||||||
"<1,6,5>": "0",
|
|
||||||
"<1,6,6>": "0",
|
|
||||||
"<1,6,7>": "0",
|
|
||||||
"<1,6,8>": "0",
|
|
||||||
"<1,6,9>": "",
|
|
||||||
"<1,6,10>": "",
|
|
||||||
"<1,6,11>": "0",
|
|
||||||
"<1,6,12>": ""
|
|
||||||
},
|
|
||||||
"<1,7>": {
|
|
||||||
"<1,7,1>": "POPUP",
|
|
||||||
"<1,7,2>": "2",
|
|
||||||
"<1,7,3>": "",
|
|
||||||
"<1,7,4>": "&Messages",
|
|
||||||
"<1,7,5>": "0",
|
|
||||||
"<1,7,6>": "0",
|
|
||||||
"<1,7,7>": "0",
|
|
||||||
"<1,7,8>": "0",
|
|
||||||
"<1,7,9>": "",
|
|
||||||
"<1,7,10>": "",
|
|
||||||
"<1,7,11>": "0",
|
|
||||||
"<1,7,12>": ""
|
|
||||||
},
|
|
||||||
"<1,8>": {
|
|
||||||
"<1,8,1>": "ITEM",
|
|
||||||
"<1,8,2>": "",
|
|
||||||
"<1,8,3>": "",
|
|
||||||
"<1,8,4>": "&New",
|
|
||||||
"<1,8,5>": "0",
|
|
||||||
"<1,8,6>": "0",
|
|
||||||
"<1,8,7>": "0",
|
|
||||||
"<1,8,8>": "0",
|
|
||||||
"<1,8,9>": "",
|
|
||||||
"<1,8,10>": "",
|
|
||||||
"<1,8,11>": "0",
|
|
||||||
"<1,8,12>": ""
|
|
||||||
},
|
|
||||||
"<1,9>": {
|
|
||||||
"<1,9,1>": "ITEM",
|
|
||||||
"<1,9,2>": "",
|
|
||||||
"<1,9,3>": "",
|
|
||||||
"<1,9,4>": "&Check/View",
|
|
||||||
"<1,9,5>": "0",
|
|
||||||
"<1,9,6>": "0",
|
|
||||||
"<1,9,7>": "0",
|
|
||||||
"<1,9,8>": "0",
|
|
||||||
"<1,9,9>": "",
|
|
||||||
"<1,9,10>": "",
|
|
||||||
"<1,9,11>": "0",
|
|
||||||
"<1,9,12>": ""
|
|
||||||
},
|
|
||||||
"<1,10>": {
|
|
||||||
"<1,10,1>": "POPUP",
|
|
||||||
"<1,10,2>": "2",
|
|
||||||
"<1,10,3>": "",
|
|
||||||
"<1,10,4>": "&Help",
|
|
||||||
"<1,10,5>": "0",
|
|
||||||
"<1,10,6>": "0",
|
|
||||||
"<1,10,7>": "0",
|
|
||||||
"<1,10,8>": "0",
|
|
||||||
"<1,10,9>": "",
|
|
||||||
"<1,10,10>": "",
|
|
||||||
"<1,10,11>": "0",
|
|
||||||
"<1,10,12>": ""
|
|
||||||
},
|
|
||||||
"<1,11>": {
|
|
||||||
"<1,11,1>": "ITEM",
|
|
||||||
"<1,11,2>": "",
|
|
||||||
"<1,11,3>": "",
|
|
||||||
"<1,11,4>": "&Help\tF1",
|
|
||||||
"<1,11,5>": "0",
|
|
||||||
"<1,11,6>": "0",
|
|
||||||
"<1,11,7>": "0",
|
|
||||||
"<1,11,8>": "112",
|
|
||||||
"<1,11,9>": "",
|
|
||||||
"<1,11,10>": "",
|
|
||||||
"<1,11,11>": "0",
|
|
||||||
"<1,11,12>": ""
|
|
||||||
},
|
|
||||||
"<1,12>": {
|
|
||||||
"<1,12,1>": "ITEM",
|
|
||||||
"<1,12,2>": "",
|
|
||||||
"<1,12,3>": "",
|
|
||||||
"<1,12,4>": "&About\tCtrl+F1",
|
|
||||||
"<1,12,5>": "0",
|
|
||||||
"<1,12,6>": "0",
|
|
||||||
"<1,12,7>": "0",
|
|
||||||
"<1,12,8>": "624",
|
|
||||||
"<1,12,9>": "",
|
|
||||||
"<1,12,10>": "",
|
|
||||||
"<1,12,11>": "0",
|
|
||||||
"<1,12,12>": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"<2>": {
|
|
||||||
"<2,1>": "",
|
|
||||||
"<2,2>": {
|
|
||||||
"<2,2,1>": {
|
|
||||||
"<2,2,1,1>": "E",
|
|
||||||
"<2,2,1,2>": "CLOSE",
|
|
||||||
"<2,2,1,3>": "@WINDOW",
|
|
||||||
"<2,2,1,4>": "",
|
|
||||||
"<2,2,1,5>": "",
|
|
||||||
"<2,2,1,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,2>": {
|
|
||||||
"<2,2,2,1>": "R",
|
|
||||||
"<2,2,2,2>": "EXECUTE",
|
|
||||||
"<2,2,2,3>": "LSL2*OIWINEXE**COMPANY",
|
|
||||||
"<2,2,2,4>": {
|
|
||||||
"<2,2,2,4,1>": "CreateParam",
|
|
||||||
"<2,2,2,4,2>": "LSL_MAIN"
|
|
||||||
},
|
|
||||||
"<2,2,2,5>": "",
|
|
||||||
"<2,2,2,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,3>": {
|
|
||||||
"<2,2,3,1>": "R",
|
|
||||||
"<2,2,3,2>": "EXECUTE",
|
|
||||||
"<2,2,3,3>": "LSL2*OIWINEXE**P_NAMES",
|
|
||||||
"<2,2,3,4>": {
|
|
||||||
"<2,2,3,4,1>": "CreateParam",
|
|
||||||
"<2,2,3,4,2>": "LSL_MAIN"
|
|
||||||
},
|
|
||||||
"<2,2,3,5>": "",
|
|
||||||
"<2,2,3,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,4>": {
|
|
||||||
"<2,2,4,1>": "R",
|
|
||||||
"<2,2,4,2>": "EXECUTE",
|
|
||||||
"<2,2,4,3>": "LSL2*OIWINEXE**NOTES",
|
|
||||||
"<2,2,4,4>": {
|
|
||||||
"<2,2,4,4,1>": "CreateParam",
|
|
||||||
"<2,2,4,4,2>": "LSL_MAIN"
|
|
||||||
},
|
|
||||||
"<2,2,4,5>": "",
|
|
||||||
"<2,2,4,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,5>": {
|
|
||||||
"<2,2,5,1>": "R",
|
|
||||||
"<2,2,5,2>": "EXECUTE",
|
|
||||||
"<2,2,5,3>": "LSL2*OIWINEXE**NOTE_PTRS",
|
|
||||||
"<2,2,5,4>": {
|
|
||||||
"<2,2,5,4,1>": "CreateParam",
|
|
||||||
"<2,2,5,4,2>": "LSL_MAIN"
|
|
||||||
},
|
|
||||||
"<2,2,5,5>": "",
|
|
||||||
"<2,2,5,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,6>": {
|
|
||||||
"<2,2,6,1>": "E",
|
|
||||||
"<2,2,6,2>": "HELP",
|
|
||||||
"<2,2,6,3>": "@FOCUS",
|
|
||||||
"<2,2,6,4>": "",
|
|
||||||
"<2,2,6,5>": "",
|
|
||||||
"<2,2,6,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,7>": {
|
|
||||||
"<2,2,7,1>": "E",
|
|
||||||
"<2,2,7,2>": "NOTES",
|
|
||||||
"<2,2,7,3>": "@FOCUS",
|
|
||||||
"<2,2,7,4>": "",
|
|
||||||
"<2,2,7,5>": "",
|
|
||||||
"<2,2,7,6>": ""
|
|
||||||
},
|
|
||||||
"<2,2,8>": ""
|
|
||||||
},
|
|
||||||
"<2,3>": {
|
|
||||||
"<2,3,1>": "FILE.EXIT",
|
|
||||||
"<2,3,2>": "DATAWINDOWS.COMPANY",
|
|
||||||
"<2,3,3>": "DATAWINDOWS.PERSONAL_NAMES",
|
|
||||||
"<2,3,4>": "MESSAGES.NEW",
|
|
||||||
"<2,3,5>": "MESSAGES.CHECK/VIEW",
|
|
||||||
"<2,3,6>": "HELP.HELP",
|
|
||||||
"<2,3,7>": "HELP.ABOUT",
|
|
||||||
"<2,3,8>": ""
|
|
||||||
},
|
|
||||||
"<2,4>": "0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -572,7 +572,7 @@
|
|||||||
"<3,8>": "28",
|
"<3,8>": "28",
|
||||||
"<3,9>": "",
|
"<3,9>": "",
|
||||||
"<3,10>": {
|
"<3,10>": {
|
||||||
"<3,10,1>": "0x5E000080",
|
"<3,10,1>": "0x5E000088",
|
||||||
"<3,10,2>": "0x200"
|
"<3,10,2>": "0x200"
|
||||||
},
|
},
|
||||||
"<3,11>": {
|
"<3,11>": {
|
||||||
@ -739,7 +739,7 @@
|
|||||||
"<4,8>": "28",
|
"<4,8>": "28",
|
||||||
"<4,9>": "",
|
"<4,9>": "",
|
||||||
"<4,10>": {
|
"<4,10>": {
|
||||||
"<4,10,1>": "0x5E000080",
|
"<4,10,1>": "0x5E000088",
|
||||||
"<4,10,2>": "0x200"
|
"<4,10,2>": "0x200"
|
||||||
},
|
},
|
||||||
"<4,11>": {
|
"<4,11>": {
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -78,7 +78,7 @@
|
|||||||
"<1,31>": "",
|
"<1,31>": "",
|
||||||
"<1,32>": "",
|
"<1,32>": "",
|
||||||
"<1,33>": "",
|
"<1,33>": "",
|
||||||
"<1,34>": "",
|
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
|
||||||
"<1,35>": "",
|
"<1,35>": "",
|
||||||
"<1,36>": "",
|
"<1,36>": "",
|
||||||
"<1,37>": {
|
"<1,37>": {
|
||||||
@ -18233,7 +18233,7 @@
|
|||||||
"<120,33>": "",
|
"<120,33>": "",
|
||||||
"<120,34>": "",
|
"<120,34>": "",
|
||||||
"<120,35>": "",
|
"<120,35>": "",
|
||||||
"<120,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<120,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<120,37>": "",
|
"<120,37>": "",
|
||||||
"<120,38>": "",
|
"<120,38>": "",
|
||||||
"<120,39>": "",
|
"<120,39>": "",
|
||||||
@ -18430,7 +18430,7 @@
|
|||||||
"<121,33>": "",
|
"<121,33>": "",
|
||||||
"<121,34>": "",
|
"<121,34>": "",
|
||||||
"<121,35>": "",
|
"<121,35>": "",
|
||||||
"<121,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<121,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<121,37>": "",
|
"<121,37>": "",
|
||||||
"<121,38>": "",
|
"<121,38>": "",
|
||||||
"<121,39>": "",
|
"<121,39>": "",
|
||||||
@ -18627,7 +18627,7 @@
|
|||||||
"<122,33>": "",
|
"<122,33>": "",
|
||||||
"<122,34>": "",
|
"<122,34>": "",
|
||||||
"<122,35>": "",
|
"<122,35>": "",
|
||||||
"<122,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<122,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<122,37>": "",
|
"<122,37>": "",
|
||||||
"<122,38>": "",
|
"<122,38>": "",
|
||||||
"<122,39>": "",
|
"<122,39>": "",
|
||||||
@ -18824,7 +18824,7 @@
|
|||||||
"<123,33>": "",
|
"<123,33>": "",
|
||||||
"<123,34>": "",
|
"<123,34>": "",
|
||||||
"<123,35>": "",
|
"<123,35>": "",
|
||||||
"<123,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<123,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<123,37>": "",
|
"<123,37>": "",
|
||||||
"<123,38>": "",
|
"<123,38>": "",
|
||||||
"<123,39>": "",
|
"<123,39>": "",
|
||||||
@ -19021,7 +19021,7 @@
|
|||||||
"<124,33>": "",
|
"<124,33>": "",
|
||||||
"<124,34>": "",
|
"<124,34>": "",
|
||||||
"<124,35>": "",
|
"<124,35>": "",
|
||||||
"<124,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<124,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<124,37>": "",
|
"<124,37>": "",
|
||||||
"<124,38>": "",
|
"<124,38>": "",
|
||||||
"<124,39>": "",
|
"<124,39>": "",
|
||||||
@ -19218,7 +19218,7 @@
|
|||||||
"<125,33>": "",
|
"<125,33>": "",
|
||||||
"<125,34>": "",
|
"<125,34>": "",
|
||||||
"<125,35>": "",
|
"<125,35>": "",
|
||||||
"<125,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<125,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<125,37>": "",
|
"<125,37>": "",
|
||||||
"<125,38>": "",
|
"<125,38>": "",
|
||||||
"<125,39>": "",
|
"<125,39>": "",
|
||||||
@ -19415,7 +19415,7 @@
|
|||||||
"<126,33>": "",
|
"<126,33>": "",
|
||||||
"<126,34>": "",
|
"<126,34>": "",
|
||||||
"<126,35>": "",
|
"<126,35>": "",
|
||||||
"<126,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<126,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<126,37>": "",
|
"<126,37>": "",
|
||||||
"<126,38>": "",
|
"<126,38>": "",
|
||||||
"<126,39>": "",
|
"<126,39>": "",
|
||||||
@ -19612,7 +19612,7 @@
|
|||||||
"<127,33>": "",
|
"<127,33>": "",
|
||||||
"<127,34>": "",
|
"<127,34>": "",
|
||||||
"<127,35>": "",
|
"<127,35>": "",
|
||||||
"<127,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<127,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<127,37>": "",
|
"<127,37>": "",
|
||||||
"<127,38>": "",
|
"<127,38>": "",
|
||||||
"<127,39>": "",
|
"<127,39>": "",
|
||||||
@ -19809,7 +19809,7 @@
|
|||||||
"<128,33>": "",
|
"<128,33>": "",
|
||||||
"<128,34>": "",
|
"<128,34>": "",
|
||||||
"<128,35>": "",
|
"<128,35>": "",
|
||||||
"<128,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<128,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<128,37>": "",
|
"<128,37>": "",
|
||||||
"<128,38>": "",
|
"<128,38>": "",
|
||||||
"<128,39>": "",
|
"<128,39>": "",
|
||||||
@ -20006,7 +20006,7 @@
|
|||||||
"<129,33>": "",
|
"<129,33>": "",
|
||||||
"<129,34>": "",
|
"<129,34>": "",
|
||||||
"<129,35>": "",
|
"<129,35>": "",
|
||||||
"<129,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<129,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<129,37>": "",
|
"<129,37>": "",
|
||||||
"<129,38>": "",
|
"<129,38>": "",
|
||||||
"<129,39>": "",
|
"<129,39>": "",
|
||||||
@ -20203,7 +20203,7 @@
|
|||||||
"<130,33>": "",
|
"<130,33>": "",
|
||||||
"<130,34>": "",
|
"<130,34>": "",
|
||||||
"<130,35>": "",
|
"<130,35>": "",
|
||||||
"<130,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<130,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<130,37>": "",
|
"<130,37>": "",
|
||||||
"<130,38>": "",
|
"<130,38>": "",
|
||||||
"<130,39>": "",
|
"<130,39>": "",
|
||||||
@ -20400,7 +20400,7 @@
|
|||||||
"<131,33>": "",
|
"<131,33>": "",
|
||||||
"<131,34>": "",
|
"<131,34>": "",
|
||||||
"<131,35>": "",
|
"<131,35>": "",
|
||||||
"<131,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<131,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<131,37>": "",
|
"<131,37>": "",
|
||||||
"<131,38>": "",
|
"<131,38>": "",
|
||||||
"<131,39>": "",
|
"<131,39>": "",
|
||||||
@ -20597,7 +20597,7 @@
|
|||||||
"<132,33>": "",
|
"<132,33>": "",
|
||||||
"<132,34>": "",
|
"<132,34>": "",
|
||||||
"<132,35>": "",
|
"<132,35>": "",
|
||||||
"<132,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<132,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<132,37>": "",
|
"<132,37>": "",
|
||||||
"<132,38>": "",
|
"<132,38>": "",
|
||||||
"<132,39>": "",
|
"<132,39>": "",
|
||||||
@ -20794,7 +20794,7 @@
|
|||||||
"<133,33>": "",
|
"<133,33>": "",
|
||||||
"<133,34>": "",
|
"<133,34>": "",
|
||||||
"<133,35>": "",
|
"<133,35>": "",
|
||||||
"<133,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<133,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<133,37>": "",
|
"<133,37>": "",
|
||||||
"<133,38>": "",
|
"<133,38>": "",
|
||||||
"<133,39>": "",
|
"<133,39>": "",
|
||||||
@ -20991,7 +20991,7 @@
|
|||||||
"<134,33>": "",
|
"<134,33>": "",
|
||||||
"<134,34>": "",
|
"<134,34>": "",
|
||||||
"<134,35>": "",
|
"<134,35>": "",
|
||||||
"<134,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<134,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<134,37>": "",
|
"<134,37>": "",
|
||||||
"<134,38>": "",
|
"<134,38>": "",
|
||||||
"<134,39>": "",
|
"<134,39>": "",
|
||||||
@ -21188,7 +21188,7 @@
|
|||||||
"<135,33>": "",
|
"<135,33>": "",
|
||||||
"<135,34>": "",
|
"<135,34>": "",
|
||||||
"<135,35>": "",
|
"<135,35>": "",
|
||||||
"<135,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<135,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<135,37>": "",
|
"<135,37>": "",
|
||||||
"<135,38>": "",
|
"<135,38>": "",
|
||||||
"<135,39>": "",
|
"<135,39>": "",
|
||||||
@ -21385,7 +21385,7 @@
|
|||||||
"<136,33>": "",
|
"<136,33>": "",
|
||||||
"<136,34>": "",
|
"<136,34>": "",
|
||||||
"<136,35>": "",
|
"<136,35>": "",
|
||||||
"<136,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<136,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<136,37>": "",
|
"<136,37>": "",
|
||||||
"<136,38>": "",
|
"<136,38>": "",
|
||||||
"<136,39>": "",
|
"<136,39>": "",
|
||||||
@ -21582,7 +21582,7 @@
|
|||||||
"<137,33>": "",
|
"<137,33>": "",
|
||||||
"<137,34>": "",
|
"<137,34>": "",
|
||||||
"<137,35>": "",
|
"<137,35>": "",
|
||||||
"<137,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<137,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<137,37>": "",
|
"<137,37>": "",
|
||||||
"<137,38>": "",
|
"<137,38>": "",
|
||||||
"<137,39>": "",
|
"<137,39>": "",
|
||||||
@ -21779,7 +21779,7 @@
|
|||||||
"<138,33>": "",
|
"<138,33>": "",
|
||||||
"<138,34>": "",
|
"<138,34>": "",
|
||||||
"<138,35>": "",
|
"<138,35>": "",
|
||||||
"<138,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<138,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<138,37>": "",
|
"<138,37>": "",
|
||||||
"<138,38>": "",
|
"<138,38>": "",
|
||||||
"<138,39>": "",
|
"<138,39>": "",
|
||||||
@ -21976,7 +21976,7 @@
|
|||||||
"<139,33>": "",
|
"<139,33>": "",
|
||||||
"<139,34>": "",
|
"<139,34>": "",
|
||||||
"<139,35>": "",
|
"<139,35>": "",
|
||||||
"<139,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<139,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<139,37>": "",
|
"<139,37>": "",
|
||||||
"<139,38>": "",
|
"<139,38>": "",
|
||||||
"<139,39>": "",
|
"<139,39>": "",
|
||||||
@ -22173,7 +22173,7 @@
|
|||||||
"<140,33>": "",
|
"<140,33>": "",
|
||||||
"<140,34>": "",
|
"<140,34>": "",
|
||||||
"<140,35>": "",
|
"<140,35>": "",
|
||||||
"<140,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<140,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<140,37>": "",
|
"<140,37>": "",
|
||||||
"<140,38>": "",
|
"<140,38>": "",
|
||||||
"<140,39>": "",
|
"<140,39>": "",
|
||||||
@ -22370,7 +22370,7 @@
|
|||||||
"<141,33>": "",
|
"<141,33>": "",
|
||||||
"<141,34>": "",
|
"<141,34>": "",
|
||||||
"<141,35>": "",
|
"<141,35>": "",
|
||||||
"<141,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<141,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<141,37>": "",
|
"<141,37>": "",
|
||||||
"<141,38>": "",
|
"<141,38>": "",
|
||||||
"<141,39>": "",
|
"<141,39>": "",
|
||||||
@ -22567,7 +22567,7 @@
|
|||||||
"<142,33>": "",
|
"<142,33>": "",
|
||||||
"<142,34>": "",
|
"<142,34>": "",
|
||||||
"<142,35>": "",
|
"<142,35>": "",
|
||||||
"<142,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<142,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<142,37>": "",
|
"<142,37>": "",
|
||||||
"<142,38>": "",
|
"<142,38>": "",
|
||||||
"<142,39>": "",
|
"<142,39>": "",
|
||||||
@ -22764,7 +22764,7 @@
|
|||||||
"<143,33>": "",
|
"<143,33>": "",
|
||||||
"<143,34>": "",
|
"<143,34>": "",
|
||||||
"<143,35>": "",
|
"<143,35>": "",
|
||||||
"<143,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<143,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<143,37>": "",
|
"<143,37>": "",
|
||||||
"<143,38>": "",
|
"<143,38>": "",
|
||||||
"<143,39>": "",
|
"<143,39>": "",
|
||||||
@ -22961,7 +22961,7 @@
|
|||||||
"<144,33>": "",
|
"<144,33>": "",
|
||||||
"<144,34>": "",
|
"<144,34>": "",
|
||||||
"<144,35>": "",
|
"<144,35>": "",
|
||||||
"<144,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<144,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<144,37>": "",
|
"<144,37>": "",
|
||||||
"<144,38>": "",
|
"<144,38>": "",
|
||||||
"<144,39>": "",
|
"<144,39>": "",
|
||||||
@ -23158,7 +23158,7 @@
|
|||||||
"<145,33>": "",
|
"<145,33>": "",
|
||||||
"<145,34>": "",
|
"<145,34>": "",
|
||||||
"<145,35>": "",
|
"<145,35>": "",
|
||||||
"<145,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<145,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<145,37>": "",
|
"<145,37>": "",
|
||||||
"<145,38>": "",
|
"<145,38>": "",
|
||||||
"<145,39>": "",
|
"<145,39>": "",
|
||||||
@ -23355,7 +23355,7 @@
|
|||||||
"<146,33>": "",
|
"<146,33>": "",
|
||||||
"<146,34>": "",
|
"<146,34>": "",
|
||||||
"<146,35>": "",
|
"<146,35>": "",
|
||||||
"<146,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<146,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<146,37>": "",
|
"<146,37>": "",
|
||||||
"<146,38>": "",
|
"<146,38>": "",
|
||||||
"<146,39>": "",
|
"<146,39>": "",
|
||||||
@ -23552,7 +23552,7 @@
|
|||||||
"<147,33>": "",
|
"<147,33>": "",
|
||||||
"<147,34>": "",
|
"<147,34>": "",
|
||||||
"<147,35>": "",
|
"<147,35>": "",
|
||||||
"<147,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<147,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<147,37>": "",
|
"<147,37>": "",
|
||||||
"<147,38>": "",
|
"<147,38>": "",
|
||||||
"<147,39>": "",
|
"<147,39>": "",
|
||||||
@ -23749,7 +23749,7 @@
|
|||||||
"<148,33>": "",
|
"<148,33>": "",
|
||||||
"<148,34>": "",
|
"<148,34>": "",
|
||||||
"<148,35>": "",
|
"<148,35>": "",
|
||||||
"<148,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<148,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<148,37>": "",
|
"<148,37>": "",
|
||||||
"<148,38>": "",
|
"<148,38>": "",
|
||||||
"<148,39>": "",
|
"<148,39>": "",
|
||||||
@ -23946,7 +23946,7 @@
|
|||||||
"<149,33>": "",
|
"<149,33>": "",
|
||||||
"<149,34>": "",
|
"<149,34>": "",
|
||||||
"<149,35>": "",
|
"<149,35>": "",
|
||||||
"<149,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<149,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<149,37>": "",
|
"<149,37>": "",
|
||||||
"<149,38>": "",
|
"<149,38>": "",
|
||||||
"<149,39>": "",
|
"<149,39>": "",
|
||||||
@ -24293,7 +24293,7 @@
|
|||||||
"<151,33>": "",
|
"<151,33>": "",
|
||||||
"<151,34>": "",
|
"<151,34>": "",
|
||||||
"<151,35>": "",
|
"<151,35>": "",
|
||||||
"<151,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<151,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<151,37>": "",
|
"<151,37>": "",
|
||||||
"<151,38>": "",
|
"<151,38>": "",
|
||||||
"<151,39>": "",
|
"<151,39>": "",
|
||||||
@ -24490,7 +24490,7 @@
|
|||||||
"<152,33>": "",
|
"<152,33>": "",
|
||||||
"<152,34>": "",
|
"<152,34>": "",
|
||||||
"<152,35>": "",
|
"<152,35>": "",
|
||||||
"<152,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<152,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<152,37>": "",
|
"<152,37>": "",
|
||||||
"<152,38>": "",
|
"<152,38>": "",
|
||||||
"<152,39>": "",
|
"<152,39>": "",
|
||||||
@ -24687,7 +24687,7 @@
|
|||||||
"<153,33>": "",
|
"<153,33>": "",
|
||||||
"<153,34>": "",
|
"<153,34>": "",
|
||||||
"<153,35>": "",
|
"<153,35>": "",
|
||||||
"<153,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<153,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<153,37>": "",
|
"<153,37>": "",
|
||||||
"<153,38>": "",
|
"<153,38>": "",
|
||||||
"<153,39>": "",
|
"<153,39>": "",
|
||||||
@ -24884,7 +24884,7 @@
|
|||||||
"<154,33>": "",
|
"<154,33>": "",
|
||||||
"<154,34>": "",
|
"<154,34>": "",
|
||||||
"<154,35>": "",
|
"<154,35>": "",
|
||||||
"<154,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<154,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<154,37>": "",
|
"<154,37>": "",
|
||||||
"<154,38>": "",
|
"<154,38>": "",
|
||||||
"<154,39>": "",
|
"<154,39>": "",
|
||||||
@ -25081,7 +25081,7 @@
|
|||||||
"<155,33>": "",
|
"<155,33>": "",
|
||||||
"<155,34>": "",
|
"<155,34>": "",
|
||||||
"<155,35>": "",
|
"<155,35>": "",
|
||||||
"<155,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<155,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<155,37>": "",
|
"<155,37>": "",
|
||||||
"<155,38>": "",
|
"<155,38>": "",
|
||||||
"<155,39>": "",
|
"<155,39>": "",
|
||||||
@ -25278,7 +25278,7 @@
|
|||||||
"<156,33>": "",
|
"<156,33>": "",
|
||||||
"<156,34>": "",
|
"<156,34>": "",
|
||||||
"<156,35>": "",
|
"<156,35>": "",
|
||||||
"<156,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<156,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<156,37>": "",
|
"<156,37>": "",
|
||||||
"<156,38>": "",
|
"<156,38>": "",
|
||||||
"<156,39>": "",
|
"<156,39>": "",
|
||||||
@ -25475,7 +25475,7 @@
|
|||||||
"<157,33>": "",
|
"<157,33>": "",
|
||||||
"<157,34>": "",
|
"<157,34>": "",
|
||||||
"<157,35>": "",
|
"<157,35>": "",
|
||||||
"<157,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<157,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<157,37>": "",
|
"<157,37>": "",
|
||||||
"<157,38>": "",
|
"<157,38>": "",
|
||||||
"<157,39>": "",
|
"<157,39>": "",
|
||||||
@ -25672,7 +25672,7 @@
|
|||||||
"<158,33>": "",
|
"<158,33>": "",
|
||||||
"<158,34>": "",
|
"<158,34>": "",
|
||||||
"<158,35>": "",
|
"<158,35>": "",
|
||||||
"<158,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<158,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<158,37>": "",
|
"<158,37>": "",
|
||||||
"<158,38>": "",
|
"<158,38>": "",
|
||||||
"<158,39>": "",
|
"<158,39>": "",
|
||||||
@ -25869,7 +25869,7 @@
|
|||||||
"<159,33>": "",
|
"<159,33>": "",
|
||||||
"<159,34>": "",
|
"<159,34>": "",
|
||||||
"<159,35>": "",
|
"<159,35>": "",
|
||||||
"<159,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<159,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<159,37>": "",
|
"<159,37>": "",
|
||||||
"<159,38>": "",
|
"<159,38>": "",
|
||||||
"<159,39>": "",
|
"<159,39>": "",
|
||||||
@ -26066,7 +26066,7 @@
|
|||||||
"<160,33>": "",
|
"<160,33>": "",
|
||||||
"<160,34>": "",
|
"<160,34>": "",
|
||||||
"<160,35>": "",
|
"<160,35>": "",
|
||||||
"<160,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<160,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<160,37>": "",
|
"<160,37>": "",
|
||||||
"<160,38>": "",
|
"<160,38>": "",
|
||||||
"<160,39>": "",
|
"<160,39>": "",
|
||||||
@ -26263,7 +26263,7 @@
|
|||||||
"<161,33>": "",
|
"<161,33>": "",
|
||||||
"<161,34>": "",
|
"<161,34>": "",
|
||||||
"<161,35>": "",
|
"<161,35>": "",
|
||||||
"<161,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<161,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<161,37>": "",
|
"<161,37>": "",
|
||||||
"<161,38>": "",
|
"<161,38>": "",
|
||||||
"<161,39>": "",
|
"<161,39>": "",
|
||||||
@ -26460,7 +26460,7 @@
|
|||||||
"<162,33>": "",
|
"<162,33>": "",
|
||||||
"<162,34>": "",
|
"<162,34>": "",
|
||||||
"<162,35>": "",
|
"<162,35>": "",
|
||||||
"<162,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<162,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<162,37>": "",
|
"<162,37>": "",
|
||||||
"<162,38>": "",
|
"<162,38>": "",
|
||||||
"<162,39>": "",
|
"<162,39>": "",
|
||||||
@ -26657,7 +26657,7 @@
|
|||||||
"<163,33>": "",
|
"<163,33>": "",
|
||||||
"<163,34>": "",
|
"<163,34>": "",
|
||||||
"<163,35>": "",
|
"<163,35>": "",
|
||||||
"<163,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<163,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<163,37>": "",
|
"<163,37>": "",
|
||||||
"<163,38>": "",
|
"<163,38>": "",
|
||||||
"<163,39>": "",
|
"<163,39>": "",
|
||||||
@ -26854,7 +26854,7 @@
|
|||||||
"<164,33>": "",
|
"<164,33>": "",
|
||||||
"<164,34>": "",
|
"<164,34>": "",
|
||||||
"<164,35>": "",
|
"<164,35>": "",
|
||||||
"<164,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<164,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<164,37>": "",
|
"<164,37>": "",
|
||||||
"<164,38>": "",
|
"<164,38>": "",
|
||||||
"<164,39>": "",
|
"<164,39>": "",
|
||||||
@ -27051,7 +27051,7 @@
|
|||||||
"<165,33>": "",
|
"<165,33>": "",
|
||||||
"<165,34>": "",
|
"<165,34>": "",
|
||||||
"<165,35>": "",
|
"<165,35>": "",
|
||||||
"<165,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<165,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<165,37>": "",
|
"<165,37>": "",
|
||||||
"<165,38>": "",
|
"<165,38>": "",
|
||||||
"<165,39>": "",
|
"<165,39>": "",
|
||||||
@ -27248,7 +27248,7 @@
|
|||||||
"<166,33>": "",
|
"<166,33>": "",
|
||||||
"<166,34>": "",
|
"<166,34>": "",
|
||||||
"<166,35>": "",
|
"<166,35>": "",
|
||||||
"<166,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<166,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<166,37>": "",
|
"<166,37>": "",
|
||||||
"<166,38>": "",
|
"<166,38>": "",
|
||||||
"<166,39>": "",
|
"<166,39>": "",
|
||||||
@ -27445,7 +27445,7 @@
|
|||||||
"<167,33>": "",
|
"<167,33>": "",
|
||||||
"<167,34>": "",
|
"<167,34>": "",
|
||||||
"<167,35>": "",
|
"<167,35>": "",
|
||||||
"<167,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<167,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<167,37>": "",
|
"<167,37>": "",
|
||||||
"<167,38>": "",
|
"<167,38>": "",
|
||||||
"<167,39>": "",
|
"<167,39>": "",
|
||||||
@ -27642,7 +27642,7 @@
|
|||||||
"<168,33>": "",
|
"<168,33>": "",
|
||||||
"<168,34>": "",
|
"<168,34>": "",
|
||||||
"<168,35>": "",
|
"<168,35>": "",
|
||||||
"<168,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<168,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<168,37>": "",
|
"<168,37>": "",
|
||||||
"<168,38>": "",
|
"<168,38>": "",
|
||||||
"<168,39>": "",
|
"<168,39>": "",
|
||||||
@ -27839,7 +27839,7 @@
|
|||||||
"<169,33>": "",
|
"<169,33>": "",
|
||||||
"<169,34>": "",
|
"<169,34>": "",
|
||||||
"<169,35>": "",
|
"<169,35>": "",
|
||||||
"<169,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<169,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<169,37>": "",
|
"<169,37>": "",
|
||||||
"<169,38>": "",
|
"<169,38>": "",
|
||||||
"<169,39>": "",
|
"<169,39>": "",
|
||||||
@ -28036,7 +28036,7 @@
|
|||||||
"<170,33>": "",
|
"<170,33>": "",
|
||||||
"<170,34>": "",
|
"<170,34>": "",
|
||||||
"<170,35>": "",
|
"<170,35>": "",
|
||||||
"<170,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<170,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<170,37>": "",
|
"<170,37>": "",
|
||||||
"<170,38>": "",
|
"<170,38>": "",
|
||||||
"<170,39>": "",
|
"<170,39>": "",
|
||||||
@ -28233,7 +28233,7 @@
|
|||||||
"<171,33>": "",
|
"<171,33>": "",
|
||||||
"<171,34>": "",
|
"<171,34>": "",
|
||||||
"<171,35>": "",
|
"<171,35>": "",
|
||||||
"<171,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<171,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<171,37>": "",
|
"<171,37>": "",
|
||||||
"<171,38>": "",
|
"<171,38>": "",
|
||||||
"<171,39>": "",
|
"<171,39>": "",
|
||||||
@ -28430,7 +28430,7 @@
|
|||||||
"<172,33>": "",
|
"<172,33>": "",
|
||||||
"<172,34>": "",
|
"<172,34>": "",
|
||||||
"<172,35>": "",
|
"<172,35>": "",
|
||||||
"<172,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<172,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<172,37>": "",
|
"<172,37>": "",
|
||||||
"<172,38>": "",
|
"<172,38>": "",
|
||||||
"<172,39>": "",
|
"<172,39>": "",
|
||||||
@ -28627,7 +28627,7 @@
|
|||||||
"<173,33>": "",
|
"<173,33>": "",
|
||||||
"<173,34>": "",
|
"<173,34>": "",
|
||||||
"<173,35>": "",
|
"<173,35>": "",
|
||||||
"<173,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<173,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<173,37>": "",
|
"<173,37>": "",
|
||||||
"<173,38>": "",
|
"<173,38>": "",
|
||||||
"<173,39>": "",
|
"<173,39>": "",
|
||||||
@ -28824,7 +28824,7 @@
|
|||||||
"<174,33>": "",
|
"<174,33>": "",
|
||||||
"<174,34>": "",
|
"<174,34>": "",
|
||||||
"<174,35>": "",
|
"<174,35>": "",
|
||||||
"<174,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<174,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<174,37>": "",
|
"<174,37>": "",
|
||||||
"<174,38>": "",
|
"<174,38>": "",
|
||||||
"<174,39>": "",
|
"<174,39>": "",
|
||||||
@ -29021,7 +29021,7 @@
|
|||||||
"<175,33>": "",
|
"<175,33>": "",
|
||||||
"<175,34>": "",
|
"<175,34>": "",
|
||||||
"<175,35>": "",
|
"<175,35>": "",
|
||||||
"<175,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<175,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<175,37>": "",
|
"<175,37>": "",
|
||||||
"<175,38>": "",
|
"<175,38>": "",
|
||||||
"<175,39>": "",
|
"<175,39>": "",
|
||||||
@ -29218,7 +29218,7 @@
|
|||||||
"<176,33>": "",
|
"<176,33>": "",
|
||||||
"<176,34>": "",
|
"<176,34>": "",
|
||||||
"<176,35>": "",
|
"<176,35>": "",
|
||||||
"<176,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<176,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<176,37>": "",
|
"<176,37>": "",
|
||||||
"<176,38>": "",
|
"<176,38>": "",
|
||||||
"<176,39>": "",
|
"<176,39>": "",
|
||||||
@ -29415,7 +29415,7 @@
|
|||||||
"<177,33>": "",
|
"<177,33>": "",
|
||||||
"<177,34>": "",
|
"<177,34>": "",
|
||||||
"<177,35>": "",
|
"<177,35>": "",
|
||||||
"<177,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<177,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<177,37>": "",
|
"<177,37>": "",
|
||||||
"<177,38>": "",
|
"<177,38>": "",
|
||||||
"<177,39>": "",
|
"<177,39>": "",
|
||||||
@ -29612,7 +29612,7 @@
|
|||||||
"<178,33>": "",
|
"<178,33>": "",
|
||||||
"<178,34>": "",
|
"<178,34>": "",
|
||||||
"<178,35>": "",
|
"<178,35>": "",
|
||||||
"<178,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<178,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<178,37>": "",
|
"<178,37>": "",
|
||||||
"<178,38>": "",
|
"<178,38>": "",
|
||||||
"<178,39>": "",
|
"<178,39>": "",
|
||||||
@ -29809,7 +29809,7 @@
|
|||||||
"<179,33>": "",
|
"<179,33>": "",
|
||||||
"<179,34>": "",
|
"<179,34>": "",
|
||||||
"<179,35>": "",
|
"<179,35>": "",
|
||||||
"<179,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<179,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<179,37>": "",
|
"<179,37>": "",
|
||||||
"<179,38>": "",
|
"<179,38>": "",
|
||||||
"<179,39>": "",
|
"<179,39>": "",
|
||||||
@ -30006,7 +30006,7 @@
|
|||||||
"<180,33>": "",
|
"<180,33>": "",
|
||||||
"<180,34>": "",
|
"<180,34>": "",
|
||||||
"<180,35>": "",
|
"<180,35>": "",
|
||||||
"<180,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
"<180,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
|
||||||
"<180,37>": "",
|
"<180,37>": "",
|
||||||
"<180,38>": "",
|
"<180,38>": "",
|
||||||
"<180,39>": "",
|
"<180,39>": "",
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,10 @@
|
|||||||
"<8,2>": {
|
"<8,2>": {
|
||||||
"<8,2,1>": "Update QA Metrology Specs",
|
"<8,2,1>": "Update QA Metrology Specs",
|
||||||
"<8,2,2>": "QA_MET"
|
"<8,2,2>": "QA_MET"
|
||||||
|
},
|
||||||
|
"<8,3>": {
|
||||||
|
"<8,3,1>": "Update RDS Layer Parameters",
|
||||||
|
"<8,3,2>": "UPDATE_RDS_LAYER"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"<9>": {
|
"<9>": {
|
||||||
@ -46,29 +50,21 @@
|
|||||||
"<9,1,1>": "1",
|
"<9,1,1>": "1",
|
||||||
"<9,1,2>": "20",
|
"<9,1,2>": "20",
|
||||||
"<9,1,3>": "L",
|
"<9,1,3>": "L",
|
||||||
"<9,1,4>": "",
|
"<9,1,4>": "L",
|
||||||
"<9,1,5>": "",
|
"<9,1,5>": "",
|
||||||
"<9,1,6>": "Window Option"
|
"<9,1,6>": "Window Option"
|
||||||
},
|
},
|
||||||
"<9,2>": {
|
"<9,2>": {
|
||||||
"<9,2,1>": "2",
|
"<9,2,1>": "2",
|
||||||
"<9,2,2>": "0",
|
"<9,2,2>": "0",
|
||||||
"<9,2,3>": "L",
|
"<9,2,3>": "R",
|
||||||
"<9,2,4>": "",
|
"<9,2,4>": "R",
|
||||||
"<9,2,5>": "",
|
"<9,2,5>": "",
|
||||||
"<9,2,6>": ""
|
"<9,2,6>": "2"
|
||||||
},
|
|
||||||
"<9,3>": {
|
|
||||||
"<9,3,1>": "",
|
|
||||||
"<9,3,2>": "",
|
|
||||||
"<9,3,3>": "",
|
|
||||||
"<9,3,4>": "",
|
|
||||||
"<9,3,5>": "",
|
|
||||||
"<9,3,6>": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"<10>": "L",
|
"<10>": "L",
|
||||||
"<11>": "3",
|
"<11>": "2",
|
||||||
"<12>": "Engineering Options",
|
"<12>": "Engineering Options",
|
||||||
"<13>": "2",
|
"<13>": "2",
|
||||||
"<14>": "F",
|
"<14>": "F",
|
||||||
@ -91,8 +87,18 @@
|
|||||||
"<31>": "0",
|
"<31>": "0",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "0",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "Tahoma",
|
"<6,1,1>": "Tahoma",
|
||||||
@ -76,11 +76,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "0",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "Tahoma",
|
"<6,1,1>": "Tahoma",
|
||||||
@ -84,11 +84,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "0",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-1",
|
"<2>": "-1",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "Tahoma",
|
"<6,1,1>": "Tahoma",
|
||||||
@ -53,24 +53,28 @@
|
|||||||
"<8,5,2>": "Graphite Machining Services Inc"
|
"<8,5,2>": "Graphite Machining Services Inc"
|
||||||
},
|
},
|
||||||
"<8,6>": {
|
"<8,6>": {
|
||||||
"<8,6,1>": "NRD",
|
"<8,6,1>": "MERSEN",
|
||||||
"<8,6,2>": "Nuclecel"
|
"<8,6,2>": "Mersen USA GS Corp."
|
||||||
},
|
},
|
||||||
"<8,7>": {
|
"<8,7>": {
|
||||||
"<8,7,1>": "SGL",
|
"<8,7,1>": "NRD",
|
||||||
"<8,7,2>": "SGL Group"
|
"<8,7,2>": "Nuclecel"
|
||||||
},
|
},
|
||||||
"<8,8>": {
|
"<8,8>": {
|
||||||
"<8,8,1>": "TOYO",
|
"<8,8,1>": "SGL",
|
||||||
"<8,8,2>": "Toyo Tanso USA"
|
"<8,8,2>": "SGL Group"
|
||||||
},
|
},
|
||||||
"<8,9>": {
|
"<8,9>": {
|
||||||
"<8,9,1>": "WACOM",
|
"<8,9,1>": "TOYO",
|
||||||
"<8,9,2>": "WaCom"
|
"<8,9,2>": "Toyo Tanso USA"
|
||||||
},
|
},
|
||||||
"<8,10>": {
|
"<8,10>": {
|
||||||
"<8,10,1>": "XYCARB",
|
"<8,10,1>": "WACOM",
|
||||||
"<8,10,2>": "Xycarb Ceramic"
|
"<8,10,2>": "WaCom"
|
||||||
|
},
|
||||||
|
"<8,11>": {
|
||||||
|
"<8,11,1>": "XYCARB",
|
||||||
|
"<8,11,2>": "Xycarb Ceramic"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"<9>": {
|
"<9>": {
|
||||||
@ -89,14 +93,6 @@
|
|||||||
"<9,2,4>": "C",
|
"<9,2,4>": "C",
|
||||||
"<9,2,5>": "",
|
"<9,2,5>": "",
|
||||||
"<9,2,6>": "Description"
|
"<9,2,6>": "Description"
|
||||||
},
|
|
||||||
"<9,3>": {
|
|
||||||
"<9,3,1>": "",
|
|
||||||
"<9,3,2>": "",
|
|
||||||
"<9,3,3>": "",
|
|
||||||
"<9,3,4>": "",
|
|
||||||
"<9,3,5>": "",
|
|
||||||
"<9,3,6>": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"<10>": "L",
|
"<10>": "L",
|
||||||
@ -124,7 +120,17 @@
|
|||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "1",
|
"<33>": "1",
|
||||||
"<34>": "16777215",
|
"<34>": "16777215",
|
||||||
"<35>": "16777215"
|
"<35>": "16777215",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "MS Sans Serif",
|
"<6,1,1>": "MS Sans Serif",
|
||||||
@ -143,11 +143,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "1",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "MS Sans Serif",
|
"<6,1,1>": "MS Sans Serif",
|
||||||
@ -93,8 +93,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0"
|
"<32>": "0",
|
||||||
|
"<33>": "0",
|
||||||
|
"<34>": "-2",
|
||||||
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -149,4 +149,3 @@ end api
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -67,25 +67,22 @@ END
|
|||||||
RETURN Result
|
RETURN Result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
Create:
|
Create:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
IF MemberOf(@USER4,'CALIBRATION') ELSE
|
||||||
IF MemberOf(@USER4,'CALIBRATION') ELSE
|
|
||||||
ErrMsg('Only authorized personnel may update the Calibration List.')
|
ErrMsg('Only authorized personnel may update the Calibration List.')
|
||||||
End_Window(@WINDOW)
|
End_Window(@WINDOW)
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
|
obj_Appwindow('Create',@WINDOW)
|
||||||
|
|
||||||
obj_Appwindow('Create',@WINDOW)
|
Set_List_Box_Data( @WINDOW )
|
||||||
|
// Use to determine whether or not the New Calibration label was just clicked
|
||||||
Set_List_Box_Data( @WINDOW )
|
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
||||||
// Use to determine whether or not the New Calibration label was just clicked
|
GOSUB Refresh
|
||||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
|
||||||
GOSUB Refresh
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -95,41 +92,41 @@ Clear:
|
|||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'@READONLY') THEN
|
IF Get_Property(@WINDOW,'@READONLY') THEN
|
||||||
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
|
||||||
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
Refresh:
|
Refresh:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* QBF buttons
|
* QBF buttons
|
||||||
|
|
||||||
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
|
||||||
Ctrls := @WINDOW:'.QBF_PREV_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_ABS_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
Ctrls := @WINDOW:'.QBF_NEXT_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_LAST_FIX':@RM ; Props := 'ENABLED':@RM
|
||||||
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
|
||||||
END ELSE
|
END ELSE
|
||||||
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
|
||||||
END
|
END
|
||||||
|
|
||||||
Set_Property(Ctrls,Props,Vals)
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
* Turn edit table symbolic column backgrounds to green
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
|
||||||
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
||||||
|
|
||||||
ETCtrls = ETSymbolics<1>
|
ETCtrls = ETSymbolics<1>
|
||||||
ETCols = ETSymbolics<2>
|
ETCols = ETSymbolics<2>
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
ETCtrl = ETCtrls<1,I>
|
ETCtrl = ETCtrls<1,I>
|
||||||
ETList = Get_Property(ETCtrl,'LIST')
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
@ -139,37 +136,32 @@ FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
|||||||
NEXT N
|
NEXT N
|
||||||
END
|
END
|
||||||
NEXT Line
|
NEXT Line
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
Read:
|
Read:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF RowExists('CALIB_LIST',CLNo) ELSE
|
IF RowExists('CALIB_LIST',CLNo) ELSE
|
||||||
IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
|
IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
|
||||||
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
|
||||||
Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
|
Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
|
||||||
|
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
GOSUB Refresh
|
GOSUB Refresh
|
||||||
// Use to determine whether or not the New Calibration button was just clicked and print if it was
|
// Use to determine whether or not the New Calibration button was just clicked and print if it was
|
||||||
PrintCheck = Get_Property(@Window : '.CALIBRATIONS', '@PrintLabel')
|
PrintCheck = Get_Property(@Window : '.CALIBRATIONS', '@PrintLabel')
|
||||||
If PrintCheck EQ True$ then
|
If PrintCheck EQ True$ then
|
||||||
Gosub PrintMostRecentLabel
|
Gosub PrintMostRecentLabel
|
||||||
end
|
end
|
||||||
// Reset flag after read regardless
|
// Reset flag after read regardless
|
||||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -187,14 +179,6 @@ RETURN
|
|||||||
Delete:
|
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
|
RETURN
|
||||||
|
|
||||||
@ -203,13 +187,12 @@ RETURN
|
|||||||
NewItem:
|
NewItem:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF CLNo = '' THEN
|
IF CLNo = '' THEN
|
||||||
NextCLNo = NextKey('CALIB_LIST')
|
NextCLNo = NextKey('CALIB_LIST')
|
||||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -218,37 +201,35 @@ RETURN
|
|||||||
LUCalibItem:
|
LUCalibItem:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLKeys = Popup(@WINDOW,'','CALIB_LIST')
|
CLKeys = Popup(@WINDOW,'','CALIB_LIST')
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
CONVERT @VM TO @FM IN CLKeys
|
CONVERT @VM TO @FM IN CLKeys
|
||||||
|
|
||||||
IF INDEX(CLKeys,@FM,1) THEN
|
IF INDEX(CLKeys,@FM,1) THEN
|
||||||
Send_Event(@WINDOW,'QBFINIT')
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
Set_Property(@WINDOW,'QBFLIST',CLKeys)
|
Set_Property(@WINDOW,'QBFLIST',CLKeys)
|
||||||
GOSUB Refresh
|
GOSUB Refresh
|
||||||
Send_Event(@WINDOW,'QBFIRST')
|
Send_Event(@WINDOW,'QBFIRST')
|
||||||
END ELSE
|
END ELSE
|
||||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
LUCalibItemType:
|
LUCalibItemType:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLItemType = Popup(@WINDOW,'','CALIB_LIST_TYPE')
|
CLItemType = Popup(@WINDOW,'','CALIB_LIST_TYPE')
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
IF CLItemType NE '' THEN
|
IF CLItemType NE '' THEN
|
||||||
obj_AppWindow('LUValReturn',CLItemType:@RM:@WINDOW:'.CL_TYPE')
|
obj_AppWindow('LUValReturn',CLItemType:@RM:@WINDOW:'.CL_TYPE')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -257,27 +238,24 @@ RETURN
|
|||||||
LUCalibItemLoc:
|
LUCalibItemLoc:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLItemLoc = Popup(@WINDOW,'','CALIB_LIST_LOC')
|
CLItemLoc = Popup(@WINDOW,'','CALIB_LIST_LOC')
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
||||||
|
|
||||||
IF CLItemLoc NE '' THEN
|
IF CLItemLoc NE '' THEN
|
||||||
obj_AppWindow('LUValReturn',CLItemLoc:@RM:@WINDOW:'.CAL_LOC')
|
obj_AppWindow('LUValReturn',CLItemLoc:@RM:@WINDOW:'.CAL_LOC')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * *
|
* * * * * *
|
||||||
Close:
|
Close:
|
||||||
* * * * * *
|
* * * * * *
|
||||||
|
|
||||||
|
obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
||||||
|
|
||||||
obj_Notes('Inbox',@USER4) ;* Checks for any new messages
|
Send_Event('MASTER_CALIB_LIST','CREATE')
|
||||||
|
|
||||||
Send_Event('MASTER_CALIB_LIST','CREATE')
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -287,18 +265,18 @@ RETURN
|
|||||||
CalibrationsDC:
|
CalibrationsDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
||||||
|
|
||||||
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
||||||
CurrCol = CurrPos<1>
|
CurrCol = CurrPos<1>
|
||||||
CurrRow = CurrPos<2>
|
CurrRow = CurrPos<2>
|
||||||
|
|
||||||
CalDt = Get_Property(CtrlEntID,'CELLPOS',COL$CAL_DT:@FM:CurrRow)
|
CalDt = Get_Property(CtrlEntID,'CELLPOS',COL$CAL_DT:@FM:CurrRow)
|
||||||
|
|
||||||
CalDt = ICONV(CalDt,'D')
|
CalDt = ICONV(CalDt,'D')
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF CLNo NE '' AND CalDt NE '' THEN
|
IF CLNo NE '' AND CalDt NE '' THEN
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
Send_Event(@WINDOW,'WRITE')
|
Send_Event(@WINDOW,'WRITE')
|
||||||
@ -314,8 +292,7 @@ IF CLNo NE '' AND CalDt NE '' THEN
|
|||||||
|
|
||||||
obj_Appwindow('ViewNewDetail', oaParms)
|
obj_Appwindow('ViewNewDetail', oaParms)
|
||||||
|
|
||||||
|
END
|
||||||
END
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -324,11 +301,11 @@ RETURN
|
|||||||
NewCalibClick:
|
NewCalibClick:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
CtrlEntID = @WINDOW:'.CALIBRATIONS'
|
||||||
|
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF CLNo NE '' THEN
|
IF CLNo NE '' THEN
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
||||||
Send_Event(@WINDOW,'WRITE')
|
Send_Event(@WINDOW,'WRITE')
|
||||||
@ -346,17 +323,18 @@ IF CLNo NE '' THEN
|
|||||||
// New Calibration label was just clicked, set to true
|
// New Calibration label was just clicked, set to true
|
||||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
|
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
*********************
|
*********************
|
||||||
PrintMostRecentLabel:
|
PrintMostRecentLabel:
|
||||||
*********************
|
*********************
|
||||||
|
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF CLNo NE '' THEN
|
IF CLNo NE '' THEN
|
||||||
TableList = Get_Property(@WINDOW:'.CALIBRATIONS', 'LIST')
|
TableList = Get_Property(@WINDOW:'.CALIBRATIONS', 'LIST')
|
||||||
EquipmentID = Get_Property(@WINDOW:'.EQ_DESC', 'TEXT')
|
EquipmentID = Get_Property(@WINDOW:'.EQ_DESC', 'TEXT')
|
||||||
LastCalibration = Get_Property(@WINDOW:'.LAST_CAL_DT', 'TEXT')
|
LastCalibration = Get_Property(@WINDOW:'.LAST_CAL_DT', 'TEXT')
|
||||||
@ -365,10 +343,7 @@ IF CLNo NE '' THEN
|
|||||||
NextCalibration = Get_Property(@WINDOW:'.NEXT_CAL_DT', 'TEXT')
|
NextCalibration = Get_Property(@WINDOW:'.NEXT_CAL_DT', 'TEXT')
|
||||||
CalibratedBy = TableList<1,2>
|
CalibratedBy = TableList<1,2>
|
||||||
Labeling_Services('PrintCalibrationLabel', EquipmentID, LastCalibration, NextCalibration, CalibratedBy, FrequencyVal, FrequencyUnit, '')
|
Labeling_Services('PrintCalibrationLabel', EquipmentID, LastCalibration, NextCalibration, CalibratedBy, FrequencyVal, FrequencyUnit, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,4 +136,3 @@ CreateHALCollection:
|
|||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
258
LSL2/STPROC/CLEAN_API.txt
Normal file
258
LSL2/STPROC/CLEAN_API.txt
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
Function Clean_API(@API)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
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 : Clean_API
|
||||||
|
|
||||||
|
Description : API logic for the Clean resource.
|
||||||
|
|
||||||
|
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
|
||||||
|
|
||||||
|
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
|
||||||
|
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
|
||||||
|
FullEndpointURL - The URL submitted by the client, including query params.
|
||||||
|
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
|
||||||
|
EndpointSegment - The URL endpoint segment.
|
||||||
|
ParentURL - The URL path preceeding the current endpoint.
|
||||||
|
CurrentAPI - The name of this stored procedure.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
|
||||||
|
- APIPattern must follow this structure Clean[.ID.[<Property>]]
|
||||||
|
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
|
||||||
|
Examples:
|
||||||
|
- Clean.POST
|
||||||
|
- Clean.ID.PUT
|
||||||
|
- Clean.ID.firstName.GET
|
||||||
|
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
|
||||||
|
services do not rely upon anything being returned in the response. This is what the
|
||||||
|
various services like SetResponseBody and SetResponseStatus services are for. A response
|
||||||
|
value is only helpful if the developers want to use it for debug purposes.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
06/18/25 xxx Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare function OI_Wizard_Services, Lot_Operation_Services, Database_Services, Lot_Services, Clean_Services
|
||||||
|
Declare subroutine Clean_Services, Lot_Services
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$insert API_SETUP
|
||||||
|
$insert HTTP_INSERTS
|
||||||
|
$insert OI_WIZARD_EQUATES
|
||||||
|
$insert LOT_OPERATION_EQUATES
|
||||||
|
|
||||||
|
GoToAPI else
|
||||||
|
// The specific resource endpoint doesn't have a API handler yet.
|
||||||
|
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Response OR ''
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Endpoint Handlers
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
API clean.ID.HEAD
|
||||||
|
API clean.ID.GET
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
CleanRecId = EndpointSegment
|
||||||
|
CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Http_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API clean.ID.markcleanrecordcomplete.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
CleanRecId = ParentSegment
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
|
||||||
|
CleanTool = SRP_JSON(objBody, 'GetValue', 'CleanTool')
|
||||||
|
CleanRecipe = SRP_JSON(objBody, 'GetValue', 'CleanRecipe')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
Clean_Services('MarkCleanRecComplete', CleanRecId, CleanRecipe, CleanTool, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
|
||||||
|
HTTP_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API clean.createcleanrecord.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotId = SRP_JSON(objBody, 'GetValue', 'LotId')
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
CleanRecId = Clean_Services('CreateNewCleanRecord', LotId, LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
|
||||||
|
HTTP_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API clean.getnewcleanoperationparams.HEAD
|
||||||
|
API clean.getnewcleanoperationparams.GET
|
||||||
|
|
||||||
|
JSONCollection = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
If ValidSession then
|
||||||
|
Body = HTTP_Services('GetHTTPGetString')
|
||||||
|
If Body NE '' then
|
||||||
|
RequestJson = HTTP_Services('DecodePercentString', Body)
|
||||||
|
LotId = Http_Services('GetQueryField', 'LotId')
|
||||||
|
objJSONResponse = ''
|
||||||
|
If SRP_Json(objJSONResponse, 'New', 'Object') then
|
||||||
|
//Available Tools
|
||||||
|
If SRP_Json(objCleanTools, 'New', 'Array') then
|
||||||
|
CleanTools = Clean_Services('GetCleanToolOptions')
|
||||||
|
for each CleanTool in CleanTools using @FM
|
||||||
|
SRP_Json(objCleanTools, 'AddValue', CleanTool, 'String')
|
||||||
|
Next CleanTool
|
||||||
|
SRP_Json(objJsonResponse, 'Set', 'CleanToolOptions', objCleanTools)
|
||||||
|
SRP_Json(objCleanTools, 'Release')
|
||||||
|
end
|
||||||
|
//Available Recipes
|
||||||
|
If SRP_Json(objCleanRecipes, 'New', 'Array') then
|
||||||
|
CleanRecipes = Clean_Services('GetCleanRecipeOptions')
|
||||||
|
for each Recipe in CleanRecipes using @VM
|
||||||
|
SRP_Json(objCleanRecipes, 'AddValue', Recipe, 'String')
|
||||||
|
Next Recipe
|
||||||
|
SRP_Json(objJsonResponse, 'Set', 'CleanRecipeOptions', objCleanRecipes)
|
||||||
|
SRP_Json(objCleanRecipes, 'Release')
|
||||||
|
end
|
||||||
|
JsonResponse = SRP_Json(objJsonResponse, 'Stringify', 'Styled')
|
||||||
|
SRP_Json(objJsonResponse, 'Release')
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error when creating JSON response.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'No body was sent with the request.')
|
||||||
|
end
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
HTTP_Services('SetResponseStatus', 201, 'Success')
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseBody', JsonResponse, False$, 'application/hal+json')
|
||||||
|
end else
|
||||||
|
HTTP_Services('SetResponseStatus', 400, Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end api
|
@ -72,11 +72,12 @@ $insert WM_OUT_EQUATES
|
|||||||
$insert WO_LOG_EQUATES
|
$insert WO_LOG_EQUATES
|
||||||
$insert ROTR_EQUATES
|
$insert ROTR_EQUATES
|
||||||
$insert WO_MAT_EQUATES
|
$insert WO_MAT_EQUATES
|
||||||
|
$Insert IFX_EQUATES
|
||||||
|
|
||||||
Equ Comma$ to ','
|
Equ Comma$ to ','
|
||||||
|
|
||||||
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
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 Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Service_Services
|
||||||
Declare subroutine Qa_Services
|
Declare subroutine Qa_Services
|
||||||
|
|
||||||
If KeyID then GoSub Initialize_System_Variables
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
@ -799,96 +800,15 @@ WRITE_RECORD:
|
|||||||
|
|
||||||
WONo = Record<CLEAN_INSP_WO_NO$>
|
WONo = Record<CLEAN_INSP_WO_NO$>
|
||||||
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
EpiPro = (ReactType EQ 'EPP')
|
|
||||||
GaN = (ReactType EQ 'GAN')
|
|
||||||
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||||
Stage = Record<CLEAN_INSP_STAGE$>
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
|
||||||
If Stage EQ 'LWI' then
|
If Stage EQ 'LWI' then
|
||||||
RDSNo = Record<CLEAN_INSP_RDS_NO$>
|
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'UpdatePostCISampleQty':SD$:Name)
|
||||||
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
|
end
|
||||||
Next RecipeIndex
|
|
||||||
Database_Services('WriteDataRow', 'CLEAN_INSP', PostCIKey, PostCIRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If NonEpiPro then
|
If NonEpiPro then
|
||||||
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
|
||||||
Stage = {STAGE}
|
|
||||||
|
|
||||||
WOMatKey = {WO_MAT_KEY}
|
WOMatKey = {WO_MAT_KEY}
|
||||||
// Update failed wafer list
|
Service_Services('PostProcedure', 'QA_SERVICES', 'UpdateFailedWafers':SD$:WOMatKey)
|
||||||
QA_Services('UpdateFailedWafers', WOMatKey)
|
Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'PushSigProfileToWoMat':SD$:Name)
|
||||||
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[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
|
|
||||||
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[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
|
|
||||||
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[-1, 'B':@VM]
|
|
||||||
WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
|
|
||||||
SigProfUpdate = True$
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If SigProfUpdate then
|
|
||||||
NumSteps = DCount(WOMatSigProf, @VM)
|
|
||||||
WOMatRec<WO_MAT_SIGNATURE$> = Field(WOMatSigs, @VM, 1, NumSteps)
|
|
||||||
WOMatRec<WO_MAT_SIG_DTM$> = Field(WOMatSigDTMs, @VM, 1, NumSteps)
|
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -945,4 +865,3 @@ Restore_System_Variables:
|
|||||||
@FILE.ERROR = OrigFileError
|
@FILE.ERROR = OrigFileError
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,8 @@ $Insert PRS_STAGE_EQUATES
|
|||||||
$Insert WO_MAT_EQUATES
|
$Insert WO_MAT_EQUATES
|
||||||
|
|
||||||
Declare function Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
|
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, Btree.Extract
|
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services
|
||||||
|
Declare subroutine Transaction_Services, Btree.Extract
|
||||||
|
|
||||||
GoToService
|
GoToService
|
||||||
|
|
||||||
@ -439,11 +440,13 @@ Service UpdateAllCleanInsp(WOMatKey)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
|
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
|
||||||
// This is specifically used to have the latest defectivity data
|
// This is specifically used to have the latest defectivity data
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
Service GetLatestDefectCINoByRDSId(RDSNo)
|
Service GetLatestDefectCINoByRDSId(RDSNo)
|
||||||
|
|
||||||
LatestCINo = ''
|
LatestCINo = ''
|
||||||
LatestInspDtm = ''
|
LatestInspDtm = ''
|
||||||
Open 'DICT CLEAN_INSP' to @DICT then
|
Open 'DICT CLEAN_INSP' to @DICT then
|
||||||
@ -464,6 +467,136 @@ Service GetLatestDefectCINoByRDSId(RDSNo)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
Response = LatestCINo
|
Response = LatestCINo
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service PushSigProfileToWoMat(CleanInspKey)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
If (CleanInspKey NE '') then
|
||||||
|
If RowExists('CLEAN_INSP', CleanInspKey) then
|
||||||
|
Record = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WONo = Record<CLEAN_INSP_WO_NO$>
|
||||||
|
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
|
||||||
|
NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
|
||||||
|
If NonEpiPro then
|
||||||
|
// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
|
||||||
|
Stage = Record<CLEAN_INSP_STAGE$>
|
||||||
|
WOMatKey = Xlate('CLEAN_INSP', CleanInspKey, 'WO_MAT_KEY', 'X')
|
||||||
|
If WOMatKey NE '' then
|
||||||
|
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||||
|
WOMatSigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||||
|
WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||||
|
WOMatSigsOrig = WOMatSigs
|
||||||
|
WOMatSigDTMsOrig = WOMatSigDTMs
|
||||||
|
|
||||||
|
InspSig = Record<CLEAN_INSP_INSP_SIG$>
|
||||||
|
InspSigDTM = Record<CLEAN_INSP_INSP_SIG_DTM$>
|
||||||
|
CleanSig = Record<CLEAN_INSP_CLEAN_SIG$>
|
||||||
|
CleanSigDTM = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
|
||||||
|
ScanSig = Record<CLEAN_INSP_SCAN_SIG$>
|
||||||
|
ScanSigDTM = Record<CLEAN_INSP_SCAN_SIG_DTM$>
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'I'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = InspSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'C'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = CleanSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
WOMatStage = '1':Stage:'S'
|
||||||
|
Locate WOMatStage in WOMatSigProf using @VM setting vPos then
|
||||||
|
WOMatSigs<0, vPos> = ScanSig[-1, 'B':@VM]
|
||||||
|
WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
|
||||||
|
end
|
||||||
|
|
||||||
|
NumSteps = DCount(WOMatSigProf, @VM)
|
||||||
|
WOMatSigs = Field(WOMatSigs, @VM, 1, NumSteps)
|
||||||
|
WOMatSigDTMs = Field(WOMatSigDTMs, @VM, 1, NumSteps)
|
||||||
|
If WOMatSigs NE WOMatSigsOrig then
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSigs)
|
||||||
|
end
|
||||||
|
If WOMatSigDTMs NE WOMatSigDTMsOrig then
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTMs)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null WO_MAT_KEY returned for CLEAN_INSP ':CleanInspKey:'.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service UpdatePostCISampleQty(CleanInspKey)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
|
If CleanInspKey NE '' then
|
||||||
|
If RowExists('CLEAN_INSP', CleanInspKey) then
|
||||||
|
Record = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
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
|
||||||
|
UpdatePostRec = False$
|
||||||
|
For RecipeIndex = 1 to NumRecipes
|
||||||
|
CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
||||||
|
If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
|
||||||
|
UpdatePostRec = True$
|
||||||
|
PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
|
||||||
|
end
|
||||||
|
Next RecipeIndex
|
||||||
|
If UpdatePostRec then
|
||||||
|
PostCISpecSampQty = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'CLEAN_INSP', PostCIKey, CLEAN_INSP_SPEC_SS_SAMP_QTY$, PostCISpecSampQty)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
217
LSL2/STPROC/CLEAN_SERVICES.txt
Normal file
217
LSL2/STPROC/CLEAN_SERVICES.txt
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
Compile function Clean_Services(@Service, @Params)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare Function Database_Services, Error_Services, Logging_Services, Datetime
|
||||||
|
Declare Function RTI_CreateGUID, Tool_Services, SRP_Json, Date_Services
|
||||||
|
Declare Subroutine Database_Services, Error_Services, Logging_Services, SRP_Json, Lot_Event_Services
|
||||||
|
|
||||||
|
$insert LOGICAL
|
||||||
|
$Insert CLEAN_EQUATES
|
||||||
|
$Insert LOT_EQUATES
|
||||||
|
$Insert LOT_OPERATION_EQUATES
|
||||||
|
$Insert TOOL_EQUATES
|
||||||
|
$Insert TOOL_CLASS_EQUATES
|
||||||
|
|
||||||
|
Options Stage = 'LWI',
|
||||||
|
|
||||||
|
GoToService
|
||||||
|
|
||||||
|
Return Response or ""
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// SERVICES
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Service CreateNewCleanRecord(LotId, LotOperationId, UserId)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
CleanRecId = ''
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
//ToDo check Lot Operation Exists
|
||||||
|
//Checks complete, create the CLEAN record
|
||||||
|
TransDtm = Datetime()
|
||||||
|
CleanRecId = RTI_CreateGUID()
|
||||||
|
CleanRec = ''
|
||||||
|
CleanRec<CLEAN_LOT_ID$> = LotId
|
||||||
|
CleanRec<CLEAN_LOT_OPERATION_ID$> = LotOperationId
|
||||||
|
CleanRec<CLEAN_CLEAN_START_DTM$> = TransDtm
|
||||||
|
CleanRec<CLEAN_CLEAN_START_USER_ID$> = UserId
|
||||||
|
Database_Services('WriteDataRow', 'CLEAN', CleanRecId, CleanRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If LotOperationId NE '' then
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
LotOperationRec<LOT_OPERATION_CLEAN_ID$> = CleanRecId
|
||||||
|
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, LotOperationRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'CLEAN_START', 'Created clean record.', '', UserId)
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
//Todo add error message
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
Response = CleanRecId
|
||||||
|
end else
|
||||||
|
// Todo: Add logging
|
||||||
|
ErrorMessage = 'Error Creating a new clean record: ' : ErrorMessage
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
End Service
|
||||||
|
|
||||||
|
Service ConvertCleanRecToJson(CleanRecId)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
CleanRecJson = ''
|
||||||
|
|
||||||
|
If RowExists('CLEAN', CleanRecId) then
|
||||||
|
CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
objJson = ''
|
||||||
|
If SRP_Json(objJson, 'New', 'Object') then
|
||||||
|
SRP_Json(objJson, 'SetValue', 'CleanId', CleanRecId, 'String')
|
||||||
|
SRP_Json(objJson, 'SetValue', 'LotId', CleanRec<CLEAN_LOT_ID$>, 'String')
|
||||||
|
LegacyLotId = Database_Services('ReadDataColumn', 'LOT', CleanRec<CLEAN_LOT_ID$>, LOT_LEGACY_LOT_ID$)
|
||||||
|
SRP_Json(objJson, 'SetValue', 'LegacyLotId', LegacyLotId, 'String')
|
||||||
|
SRP_Json(objJson, 'SetValue', 'Recipe', CleanRec<CLEAN_RECIPE$>, 'String')
|
||||||
|
SRP_Json(objJson, 'SetValue', 'Tool', CleanRec<CLEAN_TOOL$>, 'String')
|
||||||
|
SRP_Json(objJson, 'SetValue', 'StartUser', CleanRec<CLEAN_CLEAN_START_USER_ID$>, 'String')
|
||||||
|
StartDtm = Date_Services('ConvertDateTimeToISO8601', CleanRec<CLEAN_CLEAN_START_DTM$>)
|
||||||
|
if StartDtm NE '' then
|
||||||
|
SRP_Json(objJson, 'SetValue', 'StartDtm', StartDtm)
|
||||||
|
end
|
||||||
|
SRP_Json(objJson, 'SetValue', 'StopUser', CleanRec<CLEAN_CLEAN_STOP_USER_ID$>, 'String')
|
||||||
|
StopDtm = Date_Services('ConvertDateTimeToISO8601', CleanRec<CLEAN_CLEAN_STOP_DTM$>)
|
||||||
|
if StopDtm NE '' then
|
||||||
|
SRP_Json(objJson, 'SetValue', 'StopDtm', StopDtm, 'String')
|
||||||
|
end
|
||||||
|
SRP_Json(objJson, 'SetValue', 'LotOperationId', CleanRec<CLEAN_LOT_OPERATION_ID$>, 'String')
|
||||||
|
CleanRecJson = SRP_Json(objJson, 'Stringify', 'Styled')
|
||||||
|
SRP_Json(objJson, 'Release')
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error creating clean record json'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean record not found.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
Response = CleanRecJson
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error getting clean record : ' : ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service MarkCleanRecComplete(CleanRecId, CleanRecipe, CleanTool, CleanUser)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
TransDtm = Datetime()
|
||||||
|
|
||||||
|
If RowExists('CLEAN', CleanRecId) then
|
||||||
|
CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
|
||||||
|
If CleanRec<CLEAN_CLEAN_START_DTM$> NE '' then
|
||||||
|
If CleanRec<CLEAN_TOOL$> EQ '' AND CleanRec<CLEAN_RECIPE$> EQ '' then
|
||||||
|
if RowExists('LSL_USERS', CleanUser) then
|
||||||
|
If CleanRec<CLEAN_COMPLETE_DTM$> EQ '' then
|
||||||
|
CleanRec<CLEAN_TOOL$> = CleanTool
|
||||||
|
CleanRec<CLEAN_RECIPE$> = CleanRecipe
|
||||||
|
CleanRec<CLEAN_CLEAN_STOP_USER_ID$> = CleanUser
|
||||||
|
CleanRec<CLEAN_CLEAN_STOP_DTM$> = TransDtm
|
||||||
|
Database_Services('WriteDataRow', 'CLEAN', CleanRecId, CleanRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
LotId = CleanRec<CLEAN_LOT_ID$>
|
||||||
|
Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'CLEAN', 'Clean completed', CleanTool, CleanUser)
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean is already signed off.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean tool or clean recipe is missing.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean has already been logged.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean has not been started.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Clean record not found.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage NE '' then
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service ValidateCleanRecord(CleanRecId)
|
||||||
|
|
||||||
|
//ErrorMessage = ''
|
||||||
|
CleanRecValid = False$
|
||||||
|
|
||||||
|
* If CleanRecId NE '' then
|
||||||
|
* If RowExists('CLEAN', CleanRecId) then
|
||||||
|
* CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
|
||||||
|
* SpecTool = CleanRec<CLEAN_TOOL$>
|
||||||
|
* ToolUsed = CleanRec<CLEAN_RECIPE$>
|
||||||
|
* If ToolUsed EQ SpecTool AND ToolUsed NE '' then
|
||||||
|
* SpecRecipe = CleanRec<CLEAN_SPEC_RECIPE$>
|
||||||
|
* RecipeUsed = CleanRec<CLEAN_RECIPE$>
|
||||||
|
* If RecipeUsed EQ SpecRecipe AND RecipeUsed NE '' then
|
||||||
|
* CleanRecValid = True$
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
* end else
|
||||||
|
* ErrorMessage = 'Clean record not found in CLEAN database.'
|
||||||
|
* end
|
||||||
|
* end else
|
||||||
|
* ErrorMessage = 'Clean ID was null.'
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* If ErrorMessage EQ '' then
|
||||||
|
* Response = CleanRecValid
|
||||||
|
* end else
|
||||||
|
* // Todo: Add logging
|
||||||
|
* ErrorMessage = 'Error validating clean record: ' : ErrorMessage
|
||||||
|
* Error_Services('Add', ErrorMessage)
|
||||||
|
* end
|
||||||
|
|
||||||
|
Response = CleanRecValid
|
||||||
|
End Service
|
||||||
|
|
||||||
|
Service GetCleanToolOptions(CleanRecId)
|
||||||
|
|
||||||
|
If RowExists('CLEAN', CleanRecId) then
|
||||||
|
CleanTools = Database_Services('ReadDataColumn', 'CLEAN', CleanRecId, CLEAN_SPEC_CLEAN_TOOL$, True$, 0, False$)
|
||||||
|
end else
|
||||||
|
CleanTools = Tool_Services('GetTools', 'AKRION')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = CleanTools
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service GetCleanRecipeOptions(CleanRecId)
|
||||||
|
|
||||||
|
If RowExists('CLEAN', CleanRecId) then
|
||||||
|
Recipes = Database_Services('ReadDataColumn', 'CLEAN', CleanRecId, CLEAN_SPEC_CLEAN_RECIPE$, True$, 0, False$)
|
||||||
|
end else
|
||||||
|
//Todo: Make this smarter, so as to block out pre-epi recipes
|
||||||
|
Recipes = XLATE('TOOL_CLASS','AKRION',TOOL_CLASS_RECIPES$,'X')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = Recipes
|
||||||
|
|
||||||
|
end service
|
@ -6,17 +6,22 @@ COMPILE FUNCTION Comm_Dialog_Cass_Met_Export(Method, Parm1)
|
|||||||
10/28/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
10/28/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
$INSERT LOGICAL
|
||||||
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
$INSERT WM_OUT_EQUATES
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
|
||||||
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, Btree.Extract, Msg, Send_Info
|
||||||
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window
|
||||||
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
DECLARE FUNCTION SRP_Array
|
||||||
|
|
||||||
EQU CRLF$ TO \0D0A\
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
EQU COL$CUST_NAME TO 2
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
|
|
||||||
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
@ -30,11 +35,6 @@ EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
|||||||
EQU DTS_MULTIROW$ TO 512
|
EQU DTS_MULTIROW$ TO 512
|
||||||
EQU DTS_LARGEDATA$ TO 4096
|
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'
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
ErrorMsg = ''
|
ErrorMsg = ''
|
||||||
|
|
||||||
@ -66,12 +66,9 @@ RETURN Result
|
|||||||
Create:
|
Create:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
obj_AppWindow('Create')
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
GOSUB Refresh
|
||||||
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
|
||||||
|
|
||||||
GOSUB Refresh
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -80,9 +77,8 @@ RETURN
|
|||||||
Refresh:
|
Refresh:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* Turn edit table symbolic column backgrounds to green
|
* Turn edit table symbolic column backgrounds to green
|
||||||
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$)
|
||||||
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -91,25 +87,19 @@ RETURN
|
|||||||
CustChar:
|
CustChar:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
CurrRow = CurrPos<2>
|
IF LEN(DataIn) > 2 THEN
|
||||||
|
|
||||||
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
|
||||||
|
|
||||||
IF LEN(DataIn) > 2 THEN
|
|
||||||
|
|
||||||
ReturnToCtrl = CtrlName
|
ReturnToCtrl = CtrlName
|
||||||
ReturnToPos = CurrPos
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
IF NOT(NUM(DataIn)) THEN
|
IF NOT(NUM(DataIn)) THEN
|
||||||
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -118,18 +108,15 @@ RETURN
|
|||||||
CustPC:
|
CustPC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
CurrCol = CurrPos<1>
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
CurrRow = CurrPos<2>
|
IF CustNo NE '' THEN
|
||||||
|
|
||||||
CustNo = CustList<CurrRow,COL$CUST_NO>
|
|
||||||
IF CustNo NE '' THEN
|
|
||||||
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -138,17 +125,14 @@ RETURN
|
|||||||
CustDC:
|
CustDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
CurrCol = CurrPos<1>
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
CurrRow = CurrPos<2>
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
CustNo = CustList<CurrRow,COL$CUST_NO>
|
|
||||||
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
|
||||||
IF CustNo = '' THEN
|
|
||||||
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
IF CustCnt > LineCnt THEN
|
IF CustCnt > LineCnt THEN
|
||||||
@ -156,7 +140,6 @@ IF CustNo = '' THEN
|
|||||||
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM) ; * Add blank lines
|
||||||
NEXT I
|
NEXT I
|
||||||
END
|
END
|
||||||
|
|
||||||
FOR I = CurrRow TO CurrRow + CustCnt
|
FOR I = CurrRow TO CurrRow + CustCnt
|
||||||
CustNo = CustNos<1,I>
|
CustNo = CustNos<1,I>
|
||||||
CustName = XLATE('COMPANY',CustNo,4,'X')
|
CustName = XLATE('COMPANY',CustNo,4,'X')
|
||||||
@ -164,10 +147,10 @@ IF CustNo = '' THEN
|
|||||||
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
|
||||||
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
NEXT I
|
NEXT I
|
||||||
|
END ELSE
|
||||||
END ELSE
|
|
||||||
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -175,79 +158,52 @@ RETURN
|
|||||||
SubPNDC:
|
SubPNDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
CustNos = CustArray<COL$CUST_NO>
|
LOOP
|
||||||
|
|
||||||
LOOP
|
|
||||||
LastCustNo = CustNos[-1,'B':@VM]
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
UNTIL LastCustNo NE '' OR CustNos = ''
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
CustNos[COL1(),99] = ''
|
||||||
REPEAT
|
REPEAT
|
||||||
|
IF CustNos NE '' then
|
||||||
IF CustNos = '' THEN RETURN
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
|
||||||
* 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 = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
SearchString := 'ORD_SUB_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
IF Get_Status(errCode) THEN
|
IF Not(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 = ''
|
PartNos = ''
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawPartNos = XLATE('WO_LOG',WOKeys,'ORD_SUB_PART_NO','X')
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
RawPartNo = RawPartNos<1,I>
|
RawPartNo = RawPartNos<1,I>
|
||||||
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
END ELSE
|
|
||||||
PartNos = ''
|
|
||||||
END
|
END
|
||||||
|
IF PartNos NE '' THEN
|
||||||
Msg(@WINDOW,MsgUp)
|
|
||||||
|
|
||||||
IF PartNos = '' THEN
|
|
||||||
ErrMsg('No Substrate Part Numbers on file for specified customer.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
PartNos := @VM
|
PartNos := @VM
|
||||||
CONVERT @VM TO @RM IN PartNos
|
CONVERT @VM TO @RM IN PartNos
|
||||||
CALL V119('S','','D','R',PartNos,'')
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PartNos
|
CONVERT @RM TO @VM IN PartNos
|
||||||
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
PartNos[-1,1] = ''
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PartNos
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
IF PartNos NE '' THEN Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
||||||
IF PartNos NE '' THEN
|
END else
|
||||||
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
ErrMsg('No Substrate Part Numbers on file for specified customer.')
|
||||||
END
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg(errCode)
|
||||||
END ELSE
|
end
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
end else
|
||||||
END
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_CASS_MET_EXPORT.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -256,172 +212,144 @@ RETURN
|
|||||||
LotNoDC:
|
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 = ''
|
LotNos = ''
|
||||||
|
WOKeys = ''
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF CustNos NE '' then
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Not(Get_Status(errCode)) THEN
|
||||||
|
Query = 'LOT_NO':@VM:'#':@FM
|
||||||
|
dWoMat = ''
|
||||||
|
WOMatWONos = ''
|
||||||
|
Open 'DICT.WO_MAT' to dWoMat then
|
||||||
|
Flag = ''
|
||||||
|
WOMatKeys = ''
|
||||||
|
Btree.Extract(Query, 'WO_MAT', dWoMat, WOMatKeys, 'E', Flag)
|
||||||
|
If Not(Get_status(errCode)) then
|
||||||
|
If WOMatKeys NE '' then
|
||||||
|
WOMatWONos = SRP_Array('Rotate', WOMatKeys, @VM, '*')
|
||||||
|
WOMatWONos = Delete(WOMatWONos, 0, 2, 0)
|
||||||
|
Convert '*' to @VM in WOMatWONos
|
||||||
|
WOMatWONos = SRP_Array('Clean', WOMatWONos, 'TrimAndMakeUnique', @VM)
|
||||||
|
WOKeys = SRP_Array('Join', WOKeys, WOMatWONos, 'OR', @VM)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg('Error querying LOT_NO field of the WO_MAT table.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg('Error opening DICT.WO_MAT table in order to query on LOT_NO field')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X')
|
||||||
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
RawLotNo = RawLotNos<1,I>
|
RawLotNo = RawLotNos<1,I>
|
||||||
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
END ELSE
|
|
||||||
LotNos = ''
|
|
||||||
END
|
END
|
||||||
|
IF LotNos NE '' THEN
|
||||||
Msg(@WINDOW,MsgUp)
|
|
||||||
|
|
||||||
IF LotNos = '' THEN
|
|
||||||
ErrMsg('No Lot Numbers on file for specified customer.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
LotNos := @VM
|
LotNos := @VM
|
||||||
CONVERT @VM TO @RM IN LotNos
|
CONVERT @VM TO @RM IN LotNos
|
||||||
CALL V119('S','','D','R',LotNos,'')
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN LotNos
|
CONVERT @RM TO @VM IN LotNos
|
||||||
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
LotNos[-1,1] = ''
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = LotNos
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
IF LotNos NE '' THEN Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
IF LotNos NE '' THEN
|
END else
|
||||||
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
ErrMsg('No Lot Numbers on file for specified customer.')
|
||||||
|
end
|
||||||
|
END ELSE
|
||||||
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_CASS_MET_EXPORT.')
|
||||||
END
|
END
|
||||||
|
end
|
||||||
|
|
||||||
END ELSE
|
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
|
||||||
END
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
PSNoDC:
|
PSNoDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
WOKeys = ''
|
||||||
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 = ''
|
PSNs = ''
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If CustNos NE '' then
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
|
IF Not(Get_Status(errCode)) THEN
|
||||||
|
Query = 'PROD_SPEC_ID':@VM:'#':@FM
|
||||||
|
dWOStep = ''
|
||||||
|
WOStepWONos = ''
|
||||||
|
Open 'DICT.WO_STEP' to dWOStep then
|
||||||
|
Flag = ''
|
||||||
|
WOStepKeys = ''
|
||||||
|
Btree.Extract(Query, 'WO_STEP', dWOStep, WOStepKeys, 'E', Flag)
|
||||||
|
If Not(Get_Status(ErrCode)) then
|
||||||
|
If WOStepKeys NE '' then
|
||||||
|
WOStepWONos = SRP_Array('Rotate', WOStepKeys, @VM, '*')
|
||||||
|
WOStepWONos = Delete(WOStepWONos, 0, 2, 0)
|
||||||
|
Convert '*' to @VM in WOStepWONos
|
||||||
|
WOStepWONos = SRP_Array('Clean', WOStepWONos, 'TrimAndMakeUnique', @VM)
|
||||||
|
WOKeys = SRP_Array('Join', WOKeys, WOStepWONos, 'OR', @VM)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error querying PROD_SPEC_ID field in WO_STEP table.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error opening DICT.WO_STEP table in order to query on PROD_SPEC_ID field. Error code: ':ErrCode
|
||||||
|
end
|
||||||
|
END else
|
||||||
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
WOKey = WOKeys<1,N>
|
WOKey = WOKeys<1,N>
|
||||||
RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
|
RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
|
||||||
|
|
||||||
FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
|
FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
|
||||||
RawPSN = RawPSNs<1,I>
|
RawPSN = RawPSNs<1,I>
|
||||||
|
|
||||||
LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
|
LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
|
PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
|
||||||
END
|
END
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
NEXT N
|
NEXT N
|
||||||
END ELSE
|
|
||||||
PSNs = ''
|
|
||||||
END
|
END
|
||||||
|
IF PSNs NE '' THEN
|
||||||
Msg(@WINDOW,MsgUp)
|
|
||||||
|
|
||||||
IF PSNs = '' THEN
|
|
||||||
ErrMsg('No Product Specifications on file for specified customer.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
PSNs := @VM
|
PSNs := @VM
|
||||||
CONVERT @VM TO @RM IN PSNs
|
CONVERT @VM TO @RM IN PSNs
|
||||||
CALL V119('S','','D','R',PSNs,'')
|
CALL V119('S','','D','R',PSNs,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PSNs
|
CONVERT @RM TO @VM IN PSNs
|
||||||
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PSNs
|
TypeOver<PDISPLAY$> = PSNs
|
||||||
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
IF PSNs NE '' THEN
|
IF PSNs NE '' THEN
|
||||||
CONVERT @VM TO @FM IN PSNs
|
CONVERT @VM TO @FM IN PSNs
|
||||||
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
||||||
END
|
END
|
||||||
|
END else
|
||||||
|
ErrMsg('No Product Specifications on file for specified customer.')
|
||||||
END ELSE
|
end
|
||||||
|
END ELSE
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -430,65 +358,43 @@ RETURN
|
|||||||
WONoDC:
|
WONoDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
WOKeys = Collect.IXVals('WM_OUT', 'WO_NO')
|
WOKeys = Collect.IXVals('WM_OUT', 'WO_NO')
|
||||||
|
CONVERT @FM TO @VM IN WOKeys
|
||||||
CONVERT @FM TO @VM IN WOKeys
|
IF Not(Get_Status(errCode)) THEN
|
||||||
|
IF WOKeys NE '' THEN
|
||||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
|
||||||
|
|
||||||
IF WOKeys NE '' THEN
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = WOKeys
|
TypeOver<PDISPLAY$> = WOKeys
|
||||||
TypeOver<PMODE$> = 'K'
|
TypeOver<PMODE$> = 'K'
|
||||||
|
|
||||||
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
||||||
IF Get_Status(errCode) THEN
|
IF Not(Get_Status(errCode)) THEN
|
||||||
ErrMsg(errCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
IF WOKeys NE '' THEN
|
IF WOKeys NE '' THEN
|
||||||
CONVERT @VM TO @FM IN WOKeys
|
CONVERT @VM TO @FM IN WOKeys
|
||||||
Set_Property(@WINDOW:'.WO_NO','LIST',WOKeys)
|
Set_Property(@WINDOW:'.WO_NO','LIST',WOKeys)
|
||||||
END
|
END
|
||||||
END
|
END else
|
||||||
RETURN
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
END
|
||||||
|
end else
|
||||||
|
ErrMsg(ErrCode)
|
||||||
|
end
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
CustPNDC:
|
CustPNDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
CustNos = CustArray<COL$CUST_NO>
|
CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF CustNos NE '' then
|
||||||
LOOP
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
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_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
|
||||||
IF Get_Status(errCode) THEN
|
IF Not(Get_Status(errCode)) THEN
|
||||||
Msg(@WINDOW,MsgUp)
|
|
||||||
ErrMsg(errCode)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
IF WOKeys NE '' THEN
|
IF WOKeys NE '' THEN
|
||||||
PartNos = ''
|
PartNos = ''
|
||||||
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
|
||||||
@ -496,64 +402,49 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
|
||||||
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
RawPartNo = RawPartNos<1,I>
|
RawPartNo = RawPartNos<1,I>
|
||||||
|
|
||||||
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
|
||||||
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
NEXT N
|
NEXT N
|
||||||
END ELSE
|
END ELSE
|
||||||
PartNos = ''
|
PartNos = ''
|
||||||
END
|
END
|
||||||
|
IF PartNos NE '' THEN
|
||||||
Msg(@WINDOW,MsgUp)
|
|
||||||
|
|
||||||
IF PartNos = '' THEN
|
|
||||||
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
PartNos := @VM
|
PartNos := @VM
|
||||||
CONVERT @VM TO @RM IN PartNos
|
CONVERT @VM TO @RM IN PartNos
|
||||||
CALL V119('S','','D','R',PartNos,'')
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PartNos
|
CONVERT @RM TO @VM IN PartNos
|
||||||
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
PartNos[-1,1] = ''
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PartNos
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
IF PartNos NE '' THEN Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
IF PartNos NE '' THEN
|
END else
|
||||||
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
ErrMsg('No Customer Part Numbers on file for specified customer.')
|
||||||
END
|
end
|
||||||
|
END else
|
||||||
END ELSE
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
END ELSE
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
LUDate:
|
LUDate:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
ReturnCtrl = Parm1[1,@RM]
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
IF RetVal NE '' THEN obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
|
||||||
RetVal = OCONV(DateSelected, 'D4/')
|
|
||||||
|
|
||||||
IF RetVal NE '' THEN
|
|
||||||
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
|
||||||
END
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -565,93 +456,40 @@ Cancel:
|
|||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
PerformQuery:
|
PerformQuery:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* Customer numbers *
|
SearchString = 'MAKEUP_BOX':@VM:'0':@VM:'':@FM
|
||||||
|
|
||||||
SearchString = 'MAKEUP_BOX':@VM:'0':@VM:'':@FM
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
LotNos = SRP_Array('Clean', LotNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF LotNos NE '' THEN SearchString := 'LOT_NO':@VM:LotNos:@FM
|
||||||
|
|
||||||
LOOP
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
LastVar = CustNos[-1,'B':@VM]
|
CustPNs = SRP_Array('Clean', CustPNs, 'TrimAndMakeUnique', @VM)
|
||||||
UNTIL LastVar NE '' OR CustNos = ''
|
IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
SubPartNos = SRP_Array('Clean', SubPartNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
* LotNumbers *
|
PS_NOs = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
|
||||||
|
PS_NOs = SRP_Array('Clean', PS_NOs, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF PS_NOs NE '' THEN SearchString := 'SHIP_PSN':@VM:PS_NOs:@FM
|
||||||
|
|
||||||
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
WO_NOs = Get_Property(@WINDOW:'.WO_NO','ARRAY')<1>
|
||||||
|
WO_NOs = SRP_Array('Clean', WO_NOs, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF WO_NOs NE '' THEN SearchString := 'WO_NO':@VM:WO_NOs:@FM
|
||||||
|
|
||||||
LOOP
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
LastVal = LotNos[-1,'B':@VM]
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
UNTIL LastVal NE '' OR LotNos = ''
|
|
||||||
LotNos[COL1(),99] = '' ;* Trim trailing blanks
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
IF LotNos NE '' THEN SearchString := 'LOT_NO':@VM:LotNos:@FM
|
BEGIN CASE
|
||||||
|
|
||||||
|
|
||||||
* 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 = ''
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
SearchString := 'RDS_FINAL_SIG_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
SearchString := 'RDS_FINAL_SIG_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
@ -664,36 +502,21 @@ BEGIN CASE
|
|||||||
EndDt += 1
|
EndDt += 1
|
||||||
SearchString := 'RDS_FINAL_SIG_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
SearchString := 'RDS_FINAL_SIG_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
CASE 1
|
CASE Otherwise$
|
||||||
NULL
|
NULL
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
|
|
||||||
OPEN 'DICT.WO_MAT' TO DictVar THEN
|
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)
|
Btree.Extract(SearchString,'WO_MAT',DictVar,WMOKeys,'',flag)
|
||||||
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
IF Not(Get_Status(errCode)) THEN
|
||||||
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
ErrMsg(errCode)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
End_Dialog(@WINDOW,WMOKeys)
|
End_Dialog(@WINDOW,WMOKeys)
|
||||||
|
end else
|
||||||
END ELSE
|
ErrMsg(errCode)
|
||||||
|
end
|
||||||
|
END ELSE
|
||||||
ErrMsg('Unable to open DICT.WO_MAT in routine COMM_DIALOG_CASS_MET_EXPORT')
|
ErrMsg('Unable to open DICT.WO_MAT in routine COMM_DIALOG_CASS_MET_EXPORT')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -556,8 +556,6 @@ UnloadProduct:
|
|||||||
Next CassNo
|
Next CassNo
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -639,3 +637,4 @@ SlotOverview:
|
|||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,24 +1,30 @@
|
|||||||
COMPILE FUNCTION Comm_Dialog_WO_Find(Method, Parm1)
|
COMPILE FUNCTION Comm_Dialog_WO_Find(Method, Parm1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Commuter module for Dialog_WO_Find window.
|
Commuter module for Dialog_WO_Find window.
|
||||||
|
|
||||||
01/14/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
01/14/2005 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg
|
DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, Btree.Extract, Msg, Send_Info
|
||||||
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Btree.Extract, Msg, Send_Info
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window
|
||||||
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
|
||||||
|
DECLARE FUNCTION SRP_Array
|
||||||
|
|
||||||
|
$INSERT LOGICAL
|
||||||
|
$INSERT PS_EQUATES
|
||||||
|
$INSERT POPUP_EQUATES
|
||||||
|
$INSERT MSG_EQUATES
|
||||||
|
$INSERT WO_LOG_EQUATES
|
||||||
|
$INSERT WO_STEP_EQUATES
|
||||||
|
$INSERT WO_MAT_EQUATES
|
||||||
|
|
||||||
EQU CRLF$ TO \0D0A\
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
|
|
||||||
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
EQU COL$CUST_NO TO 1 ;* Customer edit table column equates
|
||||||
EQU COL$CUST_NAME TO 2
|
EQU COL$CUST_NAME TO 2
|
||||||
|
|
||||||
EQU COL$REACT_TYPE TO 1
|
EQU COL$REACT_TYPE TO 1
|
||||||
|
|
||||||
|
|
||||||
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
EQU LTGREY$ TO 229 + (229*256) + (229*65536) ;* JCH standard colors for edittable backgrounds
|
||||||
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
EQU GREY$ TO 192 + (192*256) + (192*65536)
|
||||||
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
EQU GREEN$ TO 192 + (220*256) + (192*65536)
|
||||||
@ -32,17 +38,13 @@ EQU PURPLE$ TO 225 + (181*256) + (255*65536)
|
|||||||
EQU DTS_MULTIROW$ TO 512
|
EQU DTS_MULTIROW$ TO 512
|
||||||
EQU DTS_LARGEDATA$ TO 4096
|
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'
|
ErrTitle = 'Error in Comm_Dialog_Order_Find'
|
||||||
ErrorMsg = ''
|
ErrorMsg = ''
|
||||||
|
|
||||||
Result = ''
|
Result = ''
|
||||||
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
|
|
||||||
CASE Method = 'Create' ; GOSUB Create
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
CASE Method = 'CustChar' ; GOSUB CustChar
|
CASE Method = 'CustChar' ; GOSUB CustChar
|
||||||
CASE Method = 'CustPC' ; GOSUB CustPC
|
CASE Method = 'CustPC' ; GOSUB CustPC
|
||||||
@ -56,7 +58,7 @@ BEGIN CASE
|
|||||||
CASE Method = 'Cancel' ; GOSUB Cancel
|
CASE Method = 'Cancel' ; GOSUB Cancel
|
||||||
CASE Method = 'Refresh' ; GOSUB Refresh
|
CASE Method = 'Refresh' ; GOSUB Refresh
|
||||||
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
CASE Method = 'PerformQuery' ; GOSUB PerformQuery
|
||||||
CASE 1
|
CASE Otherwise$
|
||||||
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
|
||||||
|
|
||||||
END CASE
|
END CASE
|
||||||
@ -68,12 +70,11 @@ RETURN Result
|
|||||||
Create:
|
Create:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
obj_AppWindow('Create')
|
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
||||||
|
|
||||||
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
|
GOSUB Refresh
|
||||||
|
|
||||||
GOSUB Refresh
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -82,9 +83,9 @@ RETURN
|
|||||||
Refresh:
|
Refresh:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* Turn edit table symbolic column backgrounds to green
|
* 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
|
stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$) ;* Turn names column all rows green
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -93,25 +94,20 @@ RETURN
|
|||||||
CustChar:
|
CustChar:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
||||||
CustArray = Get_Property(CtrlName,'ARRAY') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
|
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
||||||
CurrRow = CurrPos<2>
|
|
||||||
|
|
||||||
DataIn = CustArray<COL$CUST_NO,CurrRow>
|
|
||||||
|
|
||||||
IF LEN(DataIn) > 2 THEN
|
|
||||||
|
|
||||||
|
IF LEN(DataIn) > 2 THEN
|
||||||
ReturnToCtrl = CtrlName
|
ReturnToCtrl = CtrlName
|
||||||
ReturnToPos = CurrPos
|
ReturnToPos = CurrPos
|
||||||
|
|
||||||
IF NOT(NUM(DataIn)) THEN
|
IF NOT(NUM(DataIn)) THEN
|
||||||
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
Set_Property(CtrlName,'CELLPOS','',CurrPos) ;* Clear characters input
|
||||||
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -120,18 +116,15 @@ RETURN
|
|||||||
CustPC:
|
CustPC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
CurrCol = CurrPos<1>
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
CurrRow = CurrPos<2>
|
IF CustNo NE '' THEN
|
||||||
|
|
||||||
CustNo = CustList<CurrRow,COL$CUST_NO>
|
|
||||||
IF CustNo NE '' THEN
|
|
||||||
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -140,17 +133,14 @@ RETURN
|
|||||||
CustDC:
|
CustDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.CUST_INFO'
|
CtrlName = @WINDOW:'.CUST_INFO'
|
||||||
|
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
CustList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
CurrCol = CurrPos<1>
|
CustNo = CustList<CurrRow,COL$CUST_NO>
|
||||||
CurrRow = CurrPos<2>
|
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
||||||
|
IF CustNo = '' THEN
|
||||||
CustNo = CustList<CurrRow,COL$CUST_NO>
|
|
||||||
LineCnt = COUNT(CustList,@FM) + (CustList NE '')
|
|
||||||
IF CustNo = '' THEN
|
|
||||||
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
CustNos = Popup(@WINDOW,'','CUSTOMER')
|
||||||
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
|
||||||
IF CustCnt > LineCnt THEN
|
IF CustCnt > LineCnt THEN
|
||||||
@ -167,9 +157,10 @@ IF CustNo = '' THEN
|
|||||||
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
END ELSE
|
END ELSE
|
||||||
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -177,26 +168,23 @@ RETURN
|
|||||||
SubPNDC:
|
SubPNDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
CustNos = CustArray<COL$CUST_NO>
|
LOOP
|
||||||
|
|
||||||
LOOP
|
|
||||||
LastCustNo = CustNos[-1,'B':@VM]
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
UNTIL LastCustNo NE '' OR CustNos = ''
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
IF CustNos = '' THEN RETURN
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
* display the processing message and do the processing
|
* display the processing message and do the processing
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Substrate Part Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
Def = ""
|
MsgUp = Msg(@window, Def)
|
||||||
Def<MTEXT$> = "Selecting Substrate Part Numbers..."
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
Def<MTYPE$> = "U"
|
|
||||||
|
|
||||||
MsgUp = Msg(@window, Def)
|
|
||||||
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|
||||||
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
SearchString := 'SUB_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
@ -209,7 +197,7 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
|
|
||||||
IF WOKeys NE '' THEN
|
IF WOKeys NE '' THEN
|
||||||
RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X') ;* Calculated field
|
RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X') ;* Calculated field
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
PartNos = ''
|
PartNos = ''
|
||||||
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
|
||||||
RawPartNo = RawPartNos<1,I>
|
RawPartNo = RawPartNos<1,I>
|
||||||
@ -232,24 +220,22 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
PartNos := @VM
|
PartNos := @VM
|
||||||
CONVERT @VM TO @RM IN PartNos
|
CONVERT @VM TO @RM IN PartNos
|
||||||
CALL V119('S','','D','R',PartNos,'')
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PartNos
|
CONVERT @RM TO @VM IN PartNos
|
||||||
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PartNos
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
IF PartNos NE '' THEN
|
IF PartNos NE '' THEN
|
||||||
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
END ELSE
|
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -258,25 +244,22 @@ RETURN
|
|||||||
LotNoDC:
|
LotNoDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
|
||||||
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
LOOP
|
||||||
|
|
||||||
LOOP
|
|
||||||
LastCustNo = CustNos[-1,'B':@VM]
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
UNTIL LastCustNo NE '' OR CustNos = ''
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
IF CustNos = '' THEN RETURN
|
IF CustNos = '' THEN RETURN
|
||||||
|
* display the processing message and do the processing
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Lot Numbers..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
* display the processing message and do the processing
|
MsgUp = Msg(@window, Def)
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
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 = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'LOT_NO':@VM:'#':@FM
|
SearchString := 'LOT_NO':@VM:'#':@FM
|
||||||
|
|
||||||
@ -289,7 +272,7 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
|
|
||||||
IF WOKeys NE '' THEN
|
IF WOKeys NE '' THEN
|
||||||
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X') ;* Calculated field
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
LotNos = ''
|
LotNos = ''
|
||||||
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
|
||||||
RawLotNo = RawLotNos<1,I>
|
RawLotNo = RawLotNos<1,I>
|
||||||
@ -312,57 +295,49 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
LotNos := @VM
|
LotNos := @VM
|
||||||
CONVERT @VM TO @RM IN LotNos
|
CONVERT @VM TO @RM IN LotNos
|
||||||
CALL V119('S','','D','R',LotNos,'')
|
CALL V119('S','','D','R',LotNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN LotNos
|
CONVERT @RM TO @VM IN LotNos
|
||||||
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
LotNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = LotNos
|
TypeOver<PDISPLAY$> = LotNos
|
||||||
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
LotNos = Popup(@WINDow,TypeOver,'CUST_PO') ;****** Need a popup
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
IF LotNos NE '' THEN
|
IF LotNos NE '' THEN
|
||||||
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
END ELSE
|
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
PSNoDC:
|
PSNoDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
CustNos = CustArray<COL$CUST_NO>
|
LOOP
|
||||||
|
|
||||||
LOOP
|
|
||||||
LastCustNo = CustNos[-1,'B':@VM]
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
UNTIL LastCustNo NE '' OR CustNos = ''
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
IF CustNos = '' THEN RETURN
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
* display the processing message and do the processing
|
* display the processing message and do the processing
|
||||||
|
Def = ""
|
||||||
|
Def<MTEXT$> = "Selecting Product Specifications..."
|
||||||
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
Def = ""
|
MsgUp = Msg(@window, Def)
|
||||||
Def<MTEXT$> = "Selecting Product Specifications..."
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
Def<MTYPE$> = "U"
|
|
||||||
|
|
||||||
MsgUp = Msg(@window, Def)
|
|
||||||
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|
||||||
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'PS_NO':@VM:'#':@FM
|
SearchString := 'PS_NO':@VM:'#':@FM
|
||||||
|
|
||||||
@ -405,45 +380,39 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
PSNs := @VM
|
PSNs := @VM
|
||||||
CONVERT @VM TO @RM IN PSNs
|
CONVERT @VM TO @RM IN PSNs
|
||||||
CALL V119('S','','D','R',PSNs,'')
|
CALL V119('S','','D','R',PSNs,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PSNs
|
CONVERT @RM TO @VM IN PSNs
|
||||||
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
PSNs[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PSNs
|
TypeOver<PDISPLAY$> = PSNs
|
||||||
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
IF PSNs NE '' THEN
|
IF PSNs NE '' THEN
|
||||||
CONVERT @VM TO @FM IN PSNs
|
CONVERT @VM TO @FM IN PSNs
|
||||||
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
END ELSE
|
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
ReactTypeDC:
|
ReactTypeDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.REACT_TYPE'
|
CtrlName = @WINDOW:'.REACT_TYPE'
|
||||||
|
RTypeList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
||||||
RTypeList = Get_Property(CtrlName,'LIST') ;* Customer Information table
|
CurrPos = Get_Property(CtrlName,'SELPOS')
|
||||||
|
CurrCol = CurrPos<1>
|
||||||
CurrPos = Get_Property(CtrlName,'SELPOS')
|
CurrRow = CurrPos<2>
|
||||||
CurrCol = CurrPos<1>
|
RType = RTypeList<CurrRow,COL$REACT_TYPE>
|
||||||
CurrRow = CurrPos<2>
|
LineCnt = COUNT(RTypeList,@FM) + (RTypeList NE '')
|
||||||
|
IF RType = '' THEN
|
||||||
RType = RTypeList<CurrRow,COL$REACT_TYPE>
|
|
||||||
LineCnt = COUNT(RTypeList,@FM) + (RTypeList NE '')
|
|
||||||
IF RType = '' THEN
|
|
||||||
RTypes = Popup(@WINDOW,'','REACTOR_TYPE')
|
RTypes = Popup(@WINDOW,'','REACTOR_TYPE')
|
||||||
rCnt = COUNT(RTypes,@VM) + (RTypes NE '')
|
rCnt = COUNT(RTypes,@VM) + (RTypes NE '')
|
||||||
IF rCnt > LineCnt THEN
|
IF rCnt > LineCnt THEN
|
||||||
@ -454,50 +423,40 @@ IF RType = '' THEN
|
|||||||
|
|
||||||
FOR I = CurrRow TO CurrRow + rCnt
|
FOR I = CurrRow TO CurrRow + rCnt
|
||||||
RType = RTypes<1,I>
|
RType = RTypes<1,I>
|
||||||
*CustName = XLATE('COMPANY',CustNo,4,'X')
|
|
||||||
Set_Property(CtrlName,'CELLPOS',RType,COL$REACT_TYPE:@FM:I)
|
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
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
END ELSE
|
|
||||||
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
CustPNDC:
|
CustPNDC:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')
|
||||||
|
|
||||||
CustNos = CustArray<COL$CUST_NO>
|
CustNos = CustArray<COL$CUST_NO>
|
||||||
|
|
||||||
LOOP
|
LOOP
|
||||||
LastCustNo = CustNos[-1,'B':@VM]
|
LastCustNo = CustNos[-1,'B':@VM]
|
||||||
UNTIL LastCustNo NE '' OR CustNos = ''
|
UNTIL LastCustNo NE '' OR CustNos = ''
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
IF CustNos = '' THEN RETURN
|
IF CustNos = '' THEN RETURN
|
||||||
|
|
||||||
* display the processing message and do the processing
|
* display the processing message and do the processing
|
||||||
|
|
||||||
Def = ""
|
Def = ""
|
||||||
Def<MTEXT$> = "Selecting Part Numbers..."
|
Def<MTEXT$> = "Selecting Part Numbers..."
|
||||||
Def<MTYPE$> = "U"
|
Def<MTYPE$> = "U"
|
||||||
|
|
||||||
MsgUp = Msg(@window, Def)
|
MsgUp = Msg(@window, Def)
|
||||||
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
SearchString = 'CUST_NO':@VM:CustNos:@VM:@FM
|
||||||
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
SearchString := 'CUST_PART_NO':@VM:'#':@FM
|
||||||
|
|
||||||
@ -520,7 +479,6 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
NEXT N
|
NEXT N
|
||||||
END ELSE
|
END ELSE
|
||||||
PartNos = ''
|
PartNos = ''
|
||||||
@ -536,7 +494,7 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
PartNos := @VM
|
PartNos := @VM
|
||||||
CONVERT @VM TO @RM IN PartNos
|
CONVERT @VM TO @RM IN PartNos
|
||||||
CALL V119('S','','D','R',PartNos,'')
|
CALL V119('S','','D','R',PartNos,'')
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
CONVERT @RM TO @VM IN PartNos
|
CONVERT @RM TO @VM IN PartNos
|
||||||
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
PartNos[-1,1] = '' ;* Strip trailing delimiter
|
||||||
|
|
||||||
@ -544,36 +502,32 @@ OPEN 'DICT.WO_LOG' TO DictVar THEN
|
|||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = PartNos
|
TypeOver<PDISPLAY$> = PartNos
|
||||||
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
PartNos = Popup(@WINDow,TypeOver,'CUST_PO') ;* Needs a popup
|
||||||
IF Get_Status(errCode) THEN DEBUG
|
IF Get_Status(errCode) THEN ErrMsg(errCode)
|
||||||
|
|
||||||
IF PartNos NE '' THEN
|
IF PartNos NE '' THEN
|
||||||
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
|
||||||
END
|
END
|
||||||
|
|
||||||
END ELSE
|
END ELSE
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
LUDate:
|
LUDate:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
ReturnCtrl = Parm1[1,@RM]
|
ReturnCtrl = Parm1[1,@RM]
|
||||||
|
|
||||||
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')
|
||||||
|
|
||||||
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
DateSelected = Dialog_Box('POPUP_YEAR',@WINDOW)
|
||||||
|
|
||||||
RetVal = OCONV(DateSelected, 'D4/')
|
|
||||||
|
|
||||||
|
|
||||||
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
|
||||||
|
|
||||||
|
RetVal = OCONV(DateSelected, 'D4/')
|
||||||
|
|
||||||
|
obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -585,96 +539,33 @@ Cancel:
|
|||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
PerformQuery:
|
PerformQuery:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* Customer numbers *
|
SearchString = ''
|
||||||
|
|
||||||
SearchString = ''
|
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
||||||
|
CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
|
||||||
CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
|
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
||||||
|
|
||||||
LOOP
|
CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
|
||||||
LastVar = CustNos[-1,'B':@VM]
|
CustPNs = SRP_Array('Clean', CustPNs, 'TrimAndMakeUnique', @VM)
|
||||||
UNTIL LastVar NE '' OR CustNos = ''
|
IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM
|
||||||
CustNos[COL1(),99] = '' ;* Trim trailing blanks
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM
|
SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
|
||||||
|
SubPartNos = SRP_Array('Clean', SubPartNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF SubPartNos NE '' THEN SearchString := 'ORD_SUB_PART_NO':@VM:SubPartNos:@FM
|
||||||
|
|
||||||
* LotNumbers *
|
ReactTypes = Get_Property(@WINDOW:'.REACT_TYPE','ARRAY')<COL$REACT_TYPE>
|
||||||
|
ReactTypes = SRP_Array('Clean', ReactTypes, 'TrimAndMakeUnique', @VM)
|
||||||
|
IF ReactTypes NE '' THEN SearchString := 'REACT_TYPE':@VM:ReactTypes:@FM
|
||||||
|
|
||||||
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')
|
||||||
|
|
||||||
LOOP
|
BEGIN CASE
|
||||||
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 = ''
|
CASE StartDt NE '' AND EndDt = ''
|
||||||
SearchString := 'ENTRY_DATE':@VM:'>=':StartDt:@FM
|
SearchString := 'ENTRY_DATE':@VM:'>=':StartDt:@FM
|
||||||
|
|
||||||
@ -682,73 +573,134 @@ BEGIN CASE
|
|||||||
SearchString := 'ENTRY_DATE':@VM:'<=':EndDt:@FM
|
SearchString := 'ENTRY_DATE':@VM:'<=':EndDt:@FM
|
||||||
|
|
||||||
CASE StartDt NE '' AND EndDt NE ''
|
CASE StartDt NE '' AND EndDt NE ''
|
||||||
* Fudge the dates - '~' is not inclusive of the end dates
|
// Modify the dates by one day. The '~' operator is not inclusive of the end dates.
|
||||||
StartDt -= 1
|
StartDt -= 1
|
||||||
EndDt += 1
|
EndDt += 1
|
||||||
SearchString := 'ENTRY_DATE':@VM:StartDt:'~':EndDt:@FM
|
SearchString := 'ENTRY_DATE':@VM:StartDt:'~':EndDt:@FM
|
||||||
|
|
||||||
CASE 1
|
CASE Otherwise$
|
||||||
NULL
|
NULL
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
|
StartDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_START_DT','TEXT'),'D')
|
||||||
|
EndDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_END_DT','TEXT'),'D')
|
||||||
|
|
||||||
* RX Dates *
|
OrdStatus = Get_Property(@WINDOW:'.STATUS','VALUE')
|
||||||
|
|
||||||
StartDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_START_DT','TEXT'),'D')
|
IF OrdStatus NE 'I' THEN
|
||||||
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
|
IF OrdStatus = 1 THEN
|
||||||
SearchString := 'CLOSE_DATE':@VM:'#':@FM
|
SearchString := 'CLOSE_DATE':@VM:'#':@FM
|
||||||
END ELSE
|
END ELSE
|
||||||
SearchString := 'CLOSE_DATE':@VM:'=':@FM
|
SearchString := 'CLOSE_DATE':@VM:'=':@FM
|
||||||
END
|
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
|
||||||
|
|
||||||
End_Dialog(@WINDOW,WOKeys)
|
WONos = ''
|
||||||
|
|
||||||
END ELSE
|
If SearchString NE '' then
|
||||||
|
OPEN 'DICT.WO_LOG' TO DictVar THEN
|
||||||
|
Btree.Extract(SearchString,'WO_LOG',DictVar,WOKeys,'',flag)
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrorMsg = 'Error querying WO_LOG table with supplied fields.'
|
||||||
|
end
|
||||||
|
END ELSE
|
||||||
ErrMsg('Unable to open DICT.WO_LOG in routine COMM_DIALOG_WO_LOG_FIND')
|
ErrMsg('Unable to open DICT.WO_LOG in routine COMM_DIALOG_WO_LOG_FIND')
|
||||||
END
|
END
|
||||||
|
end
|
||||||
|
|
||||||
|
LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
|
||||||
|
LotNos = SRP_Array('Clean', LotNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If LotNos NE '' then
|
||||||
|
Query = 'LOT_NO':@VM:LotNos:@FM
|
||||||
|
dWoMat = ''
|
||||||
|
WOMatWONos = ''
|
||||||
|
Open 'DICT.WO_MAT' to dWoMat then
|
||||||
|
Flag = ''
|
||||||
|
WOMatKeys = ''
|
||||||
|
Btree.Extract(Query, 'WO_MAT', dWoMat, WOMatKeys, 'E', Flag)
|
||||||
|
If Not(Get_status(errCode)) then
|
||||||
|
If WOMatKeys NE '' then
|
||||||
|
WOMatWONos = SRP_Array('Rotate', WOMatKeys, @VM, '*')
|
||||||
|
WOMatWONos = Delete(WOMatWONos, 0, 2, 0)
|
||||||
|
Convert '*' to @VM in WOMatWONos
|
||||||
|
WOMatWONos = SRP_Array('Clean', WOMatWONos, 'TrimAndMakeUnique', @VM)
|
||||||
|
WOKeys = SRP_Array('Join', WOKeys, WOMatWONos, 'OR', @VM)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error querying LOT_NO field of the WO_MAT table.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error opening DICT.WO_MAT table in order to query on LOT_NO field'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
PSNos = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
|
||||||
|
PSNos = SRP_Array('Clean', PSNos, 'TrimAndMakeUnique', @VM)
|
||||||
|
If PSNos NE '' then
|
||||||
|
Query = 'PROD_SPEC_ID':@VM:PSNos:@FM
|
||||||
|
dWOStep = ''
|
||||||
|
WOStepWONos = ''
|
||||||
|
Open 'DICT.WO_STEP' to dWOStep then
|
||||||
|
Flag = ''
|
||||||
|
WOStepKeys = ''
|
||||||
|
Btree.Extract(Query, 'WO_STEP', dWOStep, WOStepKeys, 'E', Flag)
|
||||||
|
If Not(Get_Status(ErrCode)) then
|
||||||
|
If WOStepKeys NE '' then
|
||||||
|
WOStepWONos = SRP_Array('Rotate', WOStepKeys, @VM, '*')
|
||||||
|
WOStepWONos = Delete(WOStepWONos, 0, 2, 0)
|
||||||
|
Convert '*' to @VM in WOStepWONos
|
||||||
|
WOStepWONos = SRP_Array('Clean', WOStepWONos, 'TrimAndMakeUnique', @VM)
|
||||||
|
WOKeys = SRP_Array('Join', WOKeys, WOStepWONos, 'OR', @VM)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error querying PROD_SPEC_ID field in WO_STEP table.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error opening DICT.WO_STEP table in order to query on PROD_SPEC_ID field. Error code: ':ErrCode
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If ( (StartDt NE '') or (EndDt NE '') ) then
|
||||||
|
Begin Case
|
||||||
|
Case ( (StartDt NE '') and (EndDt EQ '') )
|
||||||
|
Query = 'RX_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
Case ( (StartDt EQ '') and (EndDt NE '') )
|
||||||
|
Query = 'RX_DT':@VM:'<=':OConv(EndDt, 'D4/'):@FM
|
||||||
|
|
||||||
|
Case ( (StartDt NE '') and (EndDt NE '') )
|
||||||
|
// Modify the dates by one day. The '~' operator is not inclusive of the end dates.
|
||||||
|
StartDt -= 1
|
||||||
|
EndDt += 1
|
||||||
|
Query = 'RX_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
|
||||||
|
End case
|
||||||
|
dWOMat = ''
|
||||||
|
WOMatWONos = ''
|
||||||
|
Open 'DICT.WO_MAT' to dWOMat then
|
||||||
|
Flag = ''
|
||||||
|
WOMatKeys = ''
|
||||||
|
Btree.Extract(Query, 'WO_MAT', dWOMat, WOMatKeys, 'E', Flag)
|
||||||
|
If Not(Get_Status(ErrCode)) then
|
||||||
|
If WOMatKeys NE '' then
|
||||||
|
WOMatWONos = SRP_Array('Rotate', WOMatKeys, @VM, '*')
|
||||||
|
WOMatWONos = Delete(WOMatWONos, 0, 2, 0)
|
||||||
|
Convert '*' to @VM in WOMatWONos
|
||||||
|
WOMatWONos = SRP_Array('Clean', WOMatWONos, 'TrimAndMakeUnique', @VM)
|
||||||
|
WOKeys = SRP_Array('Join', WOKeys, WOMatWONos, 'OR', @VM)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error querying on RX_DT field in WO_MAT table.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error opening DICT.WO_MAT table in order to query on RX_DT field.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
WOKeys = SRP_Array('SortSimpleList', WOKeys, 'DescendingNumbers', @VM)
|
||||||
|
End_Dialog(@WINDOW,WOKeys)
|
||||||
|
end else
|
||||||
|
Msg(@Window, '', 'OK', '', 'Process Error':@FM:ErrorMsg)
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,11 +10,12 @@ COMPILE FUNCTION Comm_Dialog_WO_Scan(Method, Parm1)
|
|||||||
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Extract_SI_Keys, Logging_Services
|
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 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 Get_Property, Get_Status, Dialog_Box, Send_Message, Set_FSError, Environment_Services
|
||||||
DECLARE FUNCTION obj_Vendor_Code, Msg, Error_Services, Logging_Services
|
DECLARE FUNCTION obj_Vendor_Code, Msg, Error_Services, Logging_Services, Error_Services, Service_Services
|
||||||
|
|
||||||
$INSERT LOGICAL
|
$INSERT LOGICAL
|
||||||
$INSERT MSG_EQUATES
|
$INSERT MSG_EQUATES
|
||||||
$INSERT APPCOLORS
|
$INSERT APPCOLORS
|
||||||
|
$INSERT IFX_EQUATES
|
||||||
|
|
||||||
EQU CRLF$ TO \0D0A\
|
EQU CRLF$ TO \0D0A\
|
||||||
|
|
||||||
@ -31,6 +32,8 @@ EQU CA$SUB_PART_NO TO 5
|
|||||||
EQU CA$SCANNED_LOT_QTY TO 6
|
EQU CA$SCANNED_LOT_QTY TO 6
|
||||||
EQU CA$VERIFY_PART_NO TO 7
|
EQU CA$VERIFY_PART_NO TO 7
|
||||||
EQU CA$SUB_SUPP_BY TO 8
|
EQU CA$SUB_SUPP_BY TO 8
|
||||||
|
EQU CA$WO_NO TO 9
|
||||||
|
EQU CA$REC_DTM TO 10
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Receiving'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Receiving'
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
@ -48,7 +51,6 @@ Result = ''
|
|||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE Method = 'Create' ; GOSUB Create
|
CASE Method = 'Create' ; GOSUB Create
|
||||||
CASE Method = 'OK' ; GOSUB OK
|
CASE Method = 'OK' ; GOSUB OK
|
||||||
CASE Method = 'Cancel' ; GOSUB Cancel
|
|
||||||
CASE Method = 'FieldClick' ; GOSUB FieldClick
|
CASE Method = 'FieldClick' ; GOSUB FieldClick
|
||||||
CASE Method = 'LQP' ; GOSUB LQP
|
CASE Method = 'LQP' ; GOSUB LQP
|
||||||
CASE 1
|
CASE 1
|
||||||
@ -61,47 +63,47 @@ RETURN Result
|
|||||||
Create:
|
Create:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
VendorDef = Parm1[1,@FM]
|
VendorDef = Parm1[1,@FM]
|
||||||
|
|
||||||
CheckArray = FIELD(Parm1,@FM,2,999)
|
CheckArray = FIELD(Parm1,@FM,2,999)
|
||||||
|
|
||||||
Set_Property(@WINDOW,'@VENDOR_DEF',VendorDef)
|
Set_Property(@WINDOW,'@VENDOR_DEF',VendorDef)
|
||||||
|
|
||||||
OpenQty = CheckArray<CA$LOT_QTY>
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
Set_Property(@WINDOW:'.OPEN_QTY','TEXT',OCONV(OpenQty,'MD0,')) ;* 12/6/2011 JCH
|
Set_Property(@WINDOW:'.OPEN_QTY','TEXT',OCONV(OpenQty,'MD0,')) ;* 12/6/2011 JCH
|
||||||
|
|
||||||
Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
|
Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
|
||||||
obj_AppWindow('Create')
|
obj_AppWindow('Create')
|
||||||
|
|
||||||
TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
||||||
Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
|
Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
|
||||||
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
|
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
|
||||||
Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
|
Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
|
||||||
|
|
||||||
GOSUB Refresh
|
GOSUB Refresh
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
FieldClick:
|
FieldClick:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
||||||
|
|
||||||
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
||||||
|
|
||||||
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
||||||
Ctrls := @WINDOW:'.LOT_QTY_PART':@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:'.LOT_QTY_SUB_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
Ctrls := @WINDOW:'.WINDOW_LABEL_FIX' ; Props := 'TEXT'
|
Ctrls := @WINDOW:'.WINDOW_LABEL_FIX' ; Props := 'TEXT'
|
||||||
|
|
||||||
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE ControlSelection = 'LQ' ; Vals = '1':@RM:'0':@RM:'0':@RM:'Customer Wafers'
|
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 = 'LQP' ; Vals = '0':@RM:'1':@RM:'0':@RM:'Customer Wafers'
|
||||||
CASE ControlSelection = 'LQSP' ; Vals = '0':@RM:'0':@RM:'1':@RM:'Substrates'
|
CASE ControlSelection = 'LQSP' ; Vals = '0':@RM:'0':@RM:'1':@RM:'Substrates'
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
Set_Property(Ctrls,Props,Vals)
|
Set_Property(Ctrls,Props,Vals)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -109,11 +111,15 @@ RETURN
|
|||||||
Close:
|
Close:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* * * * * * *
|
ProcIds = Get_Property(@Window, '@PROC_IDS')
|
||||||
Cancel:
|
|
||||||
* * * * * * *
|
|
||||||
|
|
||||||
End_Dialog(@WINDOW,'Cancel')
|
If ProcIds NE '' then
|
||||||
|
Response = ProcIds
|
||||||
|
end else
|
||||||
|
Response = 'Cancel'
|
||||||
|
end
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Response)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -122,46 +128,47 @@ RETURN
|
|||||||
Refresh:
|
Refresh:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
||||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
||||||
OpenQty = CheckArray<CA$LOT_QTY>
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
|
|
||||||
Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
|
Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
|
||||||
|
|
||||||
IF TotalScannedQty < OpenQty THEN
|
IF TotalScannedQty < OpenQty THEN
|
||||||
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
|
||||||
END ELSE
|
END ELSE
|
||||||
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)
|
Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)
|
||||||
END
|
END
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
LQP:
|
LQP:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
|
CtrlEntID = Get_Property(@WINDOW,'FOCUS')
|
||||||
StripANSI = Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
|
StripANSI = Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
|
||||||
SkipSubANSI = Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
|
SkipSubANSI = Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
|
||||||
|
|
||||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE CtrlEntID = @WINDOW:'.LOT_QTY' ; ColCnt = 2
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY' ; ColCnt = 2
|
||||||
CASE CtrlEntID = @WINDOW:'.LOT_QTY_PART' ; ColCnt = 3
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY_PART' ; ColCnt = 3
|
||||||
CASE CtrlEntID = @WINDOW:'.LOT_QTY_SUB_PART' ; ColCnt = 4
|
CASE CtrlEntID = @WINDOW:'.LOT_QTY_SUB_PART' ; ColCnt = 4
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
|
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
|
||||||
PrevCol = PrevSelPos<1>
|
PrevCol = PrevSelPos<1>
|
||||||
PrevRow = PrevSelPos<2>
|
PrevRow = PrevSelPos<2>
|
||||||
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
CurrPos = Get_Property(CtrlEntId,'SELPOS')
|
||||||
CurrCol = CurrPos<1>
|
CurrCol = CurrPos<1>
|
||||||
CurrRow = CurrPos<2>
|
CurrRow = CurrPos<2>
|
||||||
ListData = Get_Property(CtrlEntId,'LIST')
|
ListData = Get_Property(CtrlEntId,'LIST')
|
||||||
|
|
||||||
IF ListData<CurrRow,CurrCol> = '' THEN
|
IF ListData<CurrRow,CurrCol> = '' THEN
|
||||||
ColPointer = CurrCol
|
ColPointer = CurrCol
|
||||||
LinePointer = CurrRow
|
LinePointer = CurrRow
|
||||||
|
|
||||||
@ -188,20 +195,20 @@ IF ListData<CurrRow,CurrCol> = '' THEN
|
|||||||
ColPointer += 1
|
ColPointer += 1
|
||||||
END CASE
|
END CASE
|
||||||
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
||||||
END
|
END
|
||||||
|
|
||||||
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
|
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
|
||||||
ValidationScan = Trim(ListData<PrevRow,PrevCol>)
|
ValidationScan = Trim(ListData<PrevRow,PrevCol>)
|
||||||
Convert @Lower_Case to @Upper_Case in ValidationScan
|
Convert @Lower_Case to @Upper_Case in ValidationScan
|
||||||
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
|
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
|
||||||
//DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
|
//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
|
//FYI - conversion would only work when separated from above line
|
||||||
Convert '/' to '' in ValidationScan
|
Convert '/' to '' in ValidationScan
|
||||||
If ValidationScan NE '' then
|
If ValidationScan NE '' then
|
||||||
Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
|
Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
IF ListData<PrevRow,PrevCol> NE '' THEN
|
IF ListData<PrevRow,PrevCol> NE '' THEN
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE PrevCol = COL$LQP_LOT
|
CASE PrevCol = COL$LQP_LOT
|
||||||
@ -356,7 +363,23 @@ If Error_Services('NoError') then
|
|||||||
IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
|
IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
|
||||||
void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
|
void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
END
|
end
|
||||||
|
|
||||||
|
ProcIds = Get_Property(@Window, '@PROC_IDS')
|
||||||
|
ListData = Get_Property(CtrlEntId, 'LIST')
|
||||||
|
WONo = CheckArray<CA$WO_NO - 1>
|
||||||
|
RecDtm = CheckArray<CA$REC_DTM - 1>
|
||||||
|
ScanLotNo = ListData<PrevRow, 1>
|
||||||
|
ScanQty = ListData<PrevRow, 2>
|
||||||
|
ScanSubPartNo = ListData<PrevRow, 3>
|
||||||
|
ScanVendor = ListData<PrevRow, 4>
|
||||||
|
ProcIds<-1> = Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'ReceiveReleaseCassette':SD$:WONo:SD$:@User4:SD$:ScanLotNo:SD$:ScanQty:SD$:ScanSubPartNo:SD$:ScanVendor:SD$:RecDtm)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Set_Property(@Window, '@PROC_IDS', ProcIds)
|
||||||
|
end else
|
||||||
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
|
Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Error submitting scan data to server for processing')
|
||||||
|
end
|
||||||
|
|
||||||
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
||||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
@ -373,9 +396,9 @@ If Error_Services('NoError') then
|
|||||||
|
|
||||||
END CASE
|
END CASE
|
||||||
END
|
END
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('HasError') then
|
If Error_Services('HasError') then
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<MTYPE$> = 'B&Rescan'
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
Message = Error_Services('GetMessage')
|
Message = Error_Services('GetMessage')
|
||||||
@ -384,9 +407,9 @@ If Error_Services('HasError') then
|
|||||||
Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
|
Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
|
||||||
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
||||||
Error_Services('Clear')
|
Error_Services('Clear')
|
||||||
end else
|
end else
|
||||||
GOSUB Refresh
|
GOSUB Refresh
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -395,36 +418,36 @@ RETURN
|
|||||||
OK:
|
OK:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
CtrlEntID = @WINDOW:'.FIELD_RADIO'
|
||||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
ControlSelection = Get_Property(CtrlEntID,'VALUE')
|
||||||
|
|
||||||
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM
|
||||||
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM
|
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM
|
||||||
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' ; Props := 'VISIBLE'
|
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' ; Props := 'VISIBLE'
|
||||||
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE ControlSelection = 'LQ' ; Ctrl = @WINDOW:'.LOT_QTY'
|
CASE ControlSelection = 'LQ' ; Ctrl = @WINDOW:'.LOT_QTY'
|
||||||
CASE ControlSelection = 'LQP' ; Ctrl = @WINDOW:'.LOT_QTY_PART'
|
CASE ControlSelection = 'LQP' ; Ctrl = @WINDOW:'.LOT_QTY_PART'
|
||||||
CASE ControlSelection = 'LQSP' ; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
|
CASE ControlSelection = 'LQSP' ; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
|
||||||
END CASE
|
END CASE
|
||||||
|
|
||||||
ListData = Get_Property(Ctrl,'LIST')
|
ListData = Get_Property(Ctrl,'LIST')
|
||||||
|
|
||||||
TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
|
TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
|
||||||
TimeStamp = ICONV(TimeStamp,'DT')
|
TimeStamp = ICONV(TimeStamp,'DT')
|
||||||
IF TimeStamp = '' THEN
|
IF TimeStamp = '' THEN
|
||||||
ErrMsg('Invalid Received DateTime data entered. "mm/dd/yy hh:mm:ss" is the basic format.')
|
ErrMsg('Invalid Received DateTime data entered. "mm/dd/yy hh:mm:ss" is the basic format.')
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
CheckArray<CA$SCANNED_LOT_QTY> = '' ;* Clear scanned lot quantities column
|
CheckArray<CA$SCANNED_LOT_QTY> = '' ;* Clear scanned lot quantities column
|
||||||
|
|
||||||
LineCnt = 1
|
LineCnt = 1
|
||||||
LOOP
|
LOOP
|
||||||
TestVal = ListData<LineCnt,1>
|
TestVal = ListData<LineCnt,1>
|
||||||
UNTIL TestVal = ''
|
UNTIL TestVal = ''
|
||||||
LotNo = TRIM(ListData<LineCnt,1>)
|
LotNo = TRIM(ListData<LineCnt,1>)
|
||||||
Qty = TRIM(ListData<LineCnt,2>)
|
Qty = TRIM(ListData<LineCnt,2>)
|
||||||
|
|
||||||
@ -488,9 +511,9 @@ UNTIL TestVal = ''
|
|||||||
Result<9,LineCnt> = OrderItemNo
|
Result<9,LineCnt> = OrderItemNo
|
||||||
|
|
||||||
LineCnt += 1
|
LineCnt += 1
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
IF ControlSelection NE 'LQSP' THEN
|
IF ControlSelection NE 'LQSP' THEN
|
||||||
|
|
||||||
* Orders with Epi supplied substrates don't have any lot quantities to check against.
|
* Orders with Epi supplied substrates don't have any lot quantities to check against.
|
||||||
|
|
||||||
@ -517,37 +540,44 @@ IF ControlSelection NE 'LQSP' THEN
|
|||||||
ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
|
ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
END ELSE
|
END ELSE
|
||||||
*
|
*
|
||||||
END
|
END
|
||||||
|
|
||||||
NumRows = DCount(Result, @FM)
|
NumRows = DCount(Result, @FM)
|
||||||
NullFound = False$
|
NullFound = False$
|
||||||
For LineIndex = 1 to NumRows
|
For LineIndex = 1 to NumRows
|
||||||
Row = Result<LineIndex>
|
Row = Result<LineIndex>
|
||||||
NumVals = DCount(Row, @VM)
|
NumVals = DCount(Row, @VM)
|
||||||
For ValIndex = 1 to NumVals
|
For ValIndex = 1 to NumVals
|
||||||
Val = Row<0, ValIndex>
|
Val = Row<0, ValIndex>
|
||||||
If Val EQ '' then NullFound = True$
|
If Val EQ '' then NullFound = True$
|
||||||
Next ValIndex
|
Next ValIndex
|
||||||
Until NullFound
|
Until NullFound
|
||||||
Next LineIndex
|
Next LineIndex
|
||||||
If NullFound EQ True$ then
|
If NullFound EQ True$ then
|
||||||
ErrMsg('Missing value found in scanned data! Verify your labels and restart your scan operation.')
|
ErrMsg('Missing value found in scanned data! Verify your labels and restart your scan operation.')
|
||||||
Result = 'Cancel'
|
Result = 'Cancel'
|
||||||
end
|
end
|
||||||
|
|
||||||
ScanResult = Result
|
ScanResult = Result
|
||||||
Swap @VM with ' | ' in ScanResult
|
Swap @VM with ' | ' in ScanResult
|
||||||
|
|
||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
LogData<2> = @User4
|
LogData<2> = @User4
|
||||||
LogData<3> = ScanResult
|
LogData<3> = ScanResult
|
||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
|
|
||||||
End_Dialog(@WINDOW,Result)
|
ProcIds = Get_Property(@Window, '@PROC_IDS')
|
||||||
|
|
||||||
|
If ProcIds NE '' then
|
||||||
|
Response = ProcIds
|
||||||
|
end else
|
||||||
|
Response = 'Cancel'
|
||||||
|
end
|
||||||
|
|
||||||
|
End_Dialog(@WINDOW,Response)
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
@ -858,3 +858,4 @@ Result = ReturnData
|
|||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ COMPILE FUNCTION Comm_PRS_Stage(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
|||||||
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Security_Err_Msg
|
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Security_Err_Msg
|
||||||
DECLARE SUBROUTINE Send_Message, Btree.Extract, Comm_Prod_Spec, Forward_Event, Post_Event
|
DECLARE SUBROUTINE Send_Message, Btree.Extract, Comm_Prod_Spec, Forward_Event, Post_Event
|
||||||
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Start_Window, MemberOf, Security_Check
|
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Start_Window, MemberOf, Security_Check
|
||||||
DECLARE FUNCTION Comm_Prod_Spec
|
DECLARE FUNCTION Comm_Prod_Spec, obj_Popup
|
||||||
|
|
||||||
|
|
||||||
$INSERT POPUP_EQUATES
|
$INSERT POPUP_EQUATES
|
||||||
@ -192,7 +192,6 @@ NEXT I
|
|||||||
|
|
||||||
Send_Message(@WINDOW:'.MET_TEST','COLFORMAT',COL$MET_PROP,PropCodes)
|
Send_Message(@WINDOW:'.MET_TEST','COLFORMAT',COL$MET_PROP,PropCodes)
|
||||||
|
|
||||||
|
|
||||||
* Class Tools is set in the POSCHANGED event for the edit table.
|
* Class Tools is set in the POSCHANGED event for the edit table.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -235,6 +234,23 @@ Read:
|
|||||||
|
|
||||||
GOSUB Refresh
|
GOSUB Refresh
|
||||||
|
|
||||||
|
* Met Property Descriptions *
|
||||||
|
|
||||||
|
PSNo = Get_Property(@WINDOW : '.PS_NO', 'TEXT')
|
||||||
|
Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP')
|
||||||
|
|
||||||
|
Props = Xlate('PRS_STAGE', PSNo:'*':Stage, PRS_STAGE_MET_PROP$, 'X')
|
||||||
|
|
||||||
|
PropDescs = obj_Popup('CodeDesc','MET_PROPERTY':@RM:Props)
|
||||||
|
|
||||||
|
CtrlEntID = @WINDOW:'.MET_TEST'
|
||||||
|
DescCount = DCount(PropDescs, @VM)
|
||||||
|
FOR Row = 1 to DescCount
|
||||||
|
PropDesc = PropDescs<1, Row>
|
||||||
|
|
||||||
|
Set_Property(CtrlEntId,"CELLPOS",PropDesc,COL$MET_PROP_DESC:@FM:Row)
|
||||||
|
Next Row
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -764,6 +780,12 @@ BEGIN CASE
|
|||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
CASE CurrCol = COL$MET_PROP_DESC
|
||||||
|
|
||||||
|
PropCode = CurrLine<1,COL$MET_PROP>
|
||||||
|
|
||||||
|
DefProp = obj_Popup('CodeDesc','MET_PROPERTY':@RM:PropCode)
|
||||||
|
|
||||||
|
|
||||||
CASE CurrCol = COL$MET_MIN AND CurrLine<1,COL$MET_MIN> = ''
|
CASE CurrCol = COL$MET_MIN AND CurrLine<1,COL$MET_MIN> = ''
|
||||||
MetTest = CurrLine<1,COL$MET_TEST>
|
MetTest = CurrLine<1,COL$MET_TEST>
|
||||||
@ -1229,3 +1251,4 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2015,7 +2015,7 @@ HoldClick:
|
|||||||
HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType:@FM:Stage:@FM:Interrupted)
|
HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType:@FM:Stage:@FM:Interrupted)
|
||||||
|
|
||||||
If HoldData NE 'Cancel' then
|
If HoldData NE 'Cancel' then
|
||||||
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, '')
|
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, @User4)
|
||||||
IF Error_Services("HasError") THEN
|
IF Error_Services("HasError") THEN
|
||||||
ErrCode = Error_Services("GetMessage")
|
ErrCode = Error_Services("GetMessage")
|
||||||
ErrMsg(errCode)
|
ErrMsg(errCode)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ COMPILE FUNCTION Comm_WO_Mat(Instruction, Parm1,Parm2)
|
|||||||
10/18/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
10/18/2006 - John C. Henry, J.C. Henry & Co., Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message
|
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Wo_Mat_Services
|
||||||
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
||||||
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services
|
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services
|
||||||
|
|
||||||
@ -627,6 +627,7 @@ MakeUpClick:
|
|||||||
LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
|
LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
|
||||||
end else
|
end else
|
||||||
LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
|
LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
|
||||||
|
RDSNo = LotID
|
||||||
end
|
end
|
||||||
|
|
||||||
If LotId NE '' then
|
If LotId NE '' then
|
||||||
@ -636,12 +637,22 @@ MakeUpClick:
|
|||||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||||
If Proceed EQ True$ then
|
If Proceed EQ True$ then
|
||||||
|
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||||
|
If EpiPro EQ False$ then
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
|
||||||
|
InvalidRequest = True$
|
||||||
|
END else
|
||||||
Set_Property(@WINDOW,'SAVEWARN', False$)
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
Send_Event(@WINDOW,'CLEAR')
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
If (CheckValue EQ True$) then
|
||||||
IF Get_Status(errCode) THEN
|
Wo_Mat_Services('MakeupFlagOn', RDSNo)
|
||||||
ErrMsg(errCode)
|
end
|
||||||
END
|
end
|
||||||
|
end else
|
||||||
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
InvalidRequest = True$
|
InvalidRequest = True$
|
||||||
end
|
end
|
||||||
|
@ -17,11 +17,11 @@ DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindo
|
|||||||
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
|
||||||
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables
|
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables
|
||||||
DECLARE SUBROUTINE SRP_Stopwatch, Update_Index, Database_Services, obj_RDS, Create_Dialog, Dialog_Box
|
DECLARE SUBROUTINE SRP_Stopwatch, Update_Index, Database_Services, obj_RDS, Create_Dialog, Dialog_Box
|
||||||
DECLARE SUBROUTINE Sleepery
|
DECLARE SUBROUTINE Sleepery, Wo_Mat_Services
|
||||||
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists
|
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists
|
||||||
DECLARE FUNCTION Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Signature_Services
|
DECLARE FUNCTION Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Signature_Services
|
||||||
DECLARE FUNCTION MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services
|
DECLARE FUNCTION MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services
|
||||||
DECLARE FUNCTION Database_Services, RetStack, Datetime, Error_Services
|
DECLARE FUNCTION Database_Services, RetStack, Datetime, Error_Services, Rds_Services
|
||||||
|
|
||||||
$INSERT POPUP_EQUATES
|
$INSERT POPUP_EQUATES
|
||||||
$INSERT LOGICAL
|
$INSERT LOGICAL
|
||||||
@ -434,7 +434,7 @@ RejMat:
|
|||||||
WfrID = SlotList<SelectedRows<I>, COL$WAFER_ID>
|
WfrID = SlotList<SelectedRows<I>, COL$WAFER_ID>
|
||||||
PrevNCR = SlotList<SelectedRows<I>, COL$SLOT_NCR>
|
PrevNCR = SlotList<SelectedRows<I>, COL$SLOT_NCR>
|
||||||
MUWfrID = SlotList<SelectedRows<I>, COL$MU_WAFER_ID>
|
MUWfrID = SlotList<SelectedRows<I>, COL$MU_WAFER_ID>
|
||||||
If ( (MetNo NE '') or (WfrID EQ '') or (PrevNCR NE '' and MUWfrID EQ '') ) then
|
If (WfrID EQ '') then
|
||||||
AllSlotsPermitted = False$
|
AllSlotsPermitted = False$
|
||||||
IneligibleSlots<0, -1> = SlotNo
|
IneligibleSlots<0, -1> = SlotNo
|
||||||
end
|
end
|
||||||
@ -830,9 +830,19 @@ AddMakeup:
|
|||||||
|
|
||||||
FieldNo = WO_MAT_MAKEUP_BOX$
|
FieldNo = WO_MAT_MAKEUP_BOX$
|
||||||
CheckValue = 1
|
CheckValue = 1
|
||||||
|
EpiCheck = Rds_Services('IsEpiPro', RDSNo)
|
||||||
|
|
||||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||||
|
|
||||||
|
If EpiCheck EQ False$ then
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
|
||||||
|
Return
|
||||||
|
END else
|
||||||
|
Wo_Mat_Services('MakeupFlagOn', RDSNo)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
SlotWaferIDs = Xlate('WO_MAT', WOMatKey, 'SLOT_WAFER_ID', 'X')
|
SlotWaferIDs = Xlate('WO_MAT', WOMatKey, 'SLOT_WAFER_ID', 'X')
|
||||||
Convert @VM to '' in SlotWaferIDs
|
Convert @VM to '' in SlotWaferIDs
|
||||||
|
|
||||||
@ -1057,6 +1067,7 @@ MakeUpLot:
|
|||||||
|
|
||||||
If Not(InvalidRequest) then
|
If Not(InvalidRequest) then
|
||||||
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||||
|
EpiCheck = Rds_Services('IsEpiPro', RDSNo)
|
||||||
If RDSNo NE '' then
|
If RDSNo NE '' then
|
||||||
Parms = ''
|
Parms = ''
|
||||||
Parms<1> = RDSNo ; // Cassette to verify wafer count of.
|
Parms<1> = RDSNo ; // Cassette to verify wafer count of.
|
||||||
@ -1064,12 +1075,22 @@ MakeUpLot:
|
|||||||
Parms<3> = 'MU' ; // Wafer counter tool location
|
Parms<3> = 'MU' ; // Wafer counter tool location
|
||||||
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
|
||||||
If Proceed EQ True$ then
|
If Proceed EQ True$ then
|
||||||
|
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||||
|
If EpiCheck EQ False$ then
|
||||||
|
IF Get_Status(errCode) THEN
|
||||||
|
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
|
||||||
|
InvalidRequest = True$
|
||||||
|
END else
|
||||||
Set_Property(@WINDOW,'SAVEWARN', False$)
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
Send_Event(@WINDOW,'CLEAR')
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
If (CheckValue EQ True$) then
|
||||||
IF Get_Status(errCode) THEN
|
Wo_Mat_Services('MakeupFlagOn', RDSNo)
|
||||||
ErrMsg(errCode)
|
end
|
||||||
END
|
end
|
||||||
|
end else
|
||||||
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
InvalidRequest = True$
|
InvalidRequest = True$
|
||||||
end
|
end
|
||||||
@ -1214,3 +1235,5 @@ return
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -213,4 +213,3 @@ UpdateHALItem:
|
|||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
|
Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
|
||||||
#pragma precomp SRP_PreCompiler
|
|
||||||
|
|
||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
This is a utility function. For each record found in SQL_BACKLOG, it makes
|
This is a utility function. For each record found in SQL_BACKLOG, it makes
|
||||||
sure the identified record is copied to SQL. Then the backlog record is
|
sure the identified record is copied to SQL. Then the backlog record is
|
||||||
@ -10,14 +8,16 @@ Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
|
|||||||
-------
|
-------
|
||||||
08/10/2010 KRF Original Programmer
|
08/10/2010 KRF Original Programmer
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
$Insert APP_INSERTS
|
$Insert APP_INSERTS
|
||||||
|
|
||||||
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Copy_Pending_Records_To_Sql
|
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Copy_Pending_Records_To_Sql
|
||||||
Declare function GetTickCount, Database_Services, SRP_TcpClient, Datetime, Environment_Services
|
Declare function GetTickCount, Database_Services, SRP_TcpClient, Datetime, Environment_Services
|
||||||
|
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
Main:
|
||||||
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
|
||||||
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
|
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
||||||
|
|
||||||
Copy_Pending_Records_To_Sql()
|
Copy_Pending_Records_To_Sql()
|
||||||
|
|
||||||
@ -86,8 +86,9 @@ Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
|||||||
If Skip EQ False$ then
|
If Skip EQ False$ then
|
||||||
TcpClientHandle = 0
|
TcpClientHandle = 0
|
||||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||||
|
ServerPort = Environment_Services('GetScrapeServerPort')
|
||||||
Convert '\' to '' in ServerIP
|
Convert '\' to '' in ServerIP
|
||||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
|
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
|
||||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||||
end
|
end
|
||||||
@ -97,8 +98,7 @@ Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
||||||
end
|
end
|
||||||
|
|
||||||
Return
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
47
LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
Normal file
47
LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
Compile function Copy_LOT_EVENT_Record_To_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Copies the given LOT_EVENT record to the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
06/10/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
$insert LOT_EVENT_EQUATES
|
||||||
|
|
||||||
|
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// Parse record into a dimensioned array for speed
|
||||||
|
Dim Rec(13)
|
||||||
|
MatParse Record into Rec
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
// List of data fields and their values
|
||||||
|
DataFields = "LOT_ID" :@VM:SQL_Format(Rec(LOT_EVENT_LOT_ID$), "STR"):@FM
|
||||||
|
DataFields := "LOT_EVENT_TYPE" :@VM:SQL_Format(Rec(LOT_EVENT_LOT_EVENT_TYPE$), "STR"):@FM
|
||||||
|
DataFields := "EVENT_DATETIME" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_DATETIME$), "DATETIME"):@FM
|
||||||
|
DataFields := "EVENT_NOTE" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_NOTE$), "STR"):@FM
|
||||||
|
DataFields := "EQUIPMENT_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EQUIPMENT_ID$), "STR"):@FM
|
||||||
|
DataFields := "EVENT_REDUCE_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_REDUCE_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "EVENT_BONUS_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BONUS_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "EVENT_BEGIN_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BEGIN_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "EVENT_END_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_END_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "EVENT_OPERATION_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATION_ID$), "STR"):@FM
|
||||||
|
DataFields := "EVENT_OPERATOR_ID" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATOR_ID$), "STR"):@FM
|
||||||
|
DataFields := "SEQUENCE" :@VM:SQL_Format(Rec(LOT_EVENT_SEQUENCE$), "INT"):@FM
|
||||||
|
DataFields := "CHRON_ID" :@VM:SQL_Format(Rec(LOT_EVENT_CHRON_ID$), "INT")
|
||||||
|
|
||||||
|
// Symbolics
|
||||||
|
|
||||||
|
// Write the data to the SQL database
|
||||||
|
Ans = SQL_Write(Connection, "LOT_EVENT", Keys, DataFields);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
35
LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
Normal file
35
LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Compile function Copy_LOT_EVENT_TYPE_Record_To_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Copies the given OPERATION record to the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
06/19/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
$insert LOT_EVENT_TYPE_EQUATES
|
||||||
|
|
||||||
|
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// Parse record into a dimensioned array for speed
|
||||||
|
Dim Rec(2)
|
||||||
|
MatParse Record into Rec
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
// List of data fields and their values
|
||||||
|
DataFields = "DESCRIPTION" :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.DESCRIPTION$), "STR"):@FM
|
||||||
|
DataFields := "WIP_TRANS_TYPE" :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.WIP_TRANS_TYPE$), "STR")
|
||||||
|
|
||||||
|
// Symbolics
|
||||||
|
|
||||||
|
// Write the data to the SQL database
|
||||||
|
Ans = SQL_Write(Connection, "LOT_EVENT_TYPE", Keys, DataFields);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
Return Ans
|
57
LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
Normal file
57
LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
Compile function Copy_LOT_OPERATION_Record_To_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Copies the given LOT_OPERATION record to the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
06/19/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
$insert LOT_OPERATION_EQUATES
|
||||||
|
|
||||||
|
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// Parse record into a dimensioned array for speed
|
||||||
|
Dim Rec(25)
|
||||||
|
MatParse Record into Rec
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
// List of data fields and their values
|
||||||
|
DataFields = "LOT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_LOT_ID$), "STR"):@FM
|
||||||
|
DataFields := "OPERATION_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_ID$), "STR"):@FM
|
||||||
|
DataFields := "DATETIME_IN" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_IN$), "DATETIME"):@FM
|
||||||
|
DataFields := "DATETIME_OUT" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_OUT$), "DATETIME"):@FM
|
||||||
|
DataFields := "EQUIPMENT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_EQUIPMENT_ID$), "STR"):@FM
|
||||||
|
DataFields := "WAFER_IN_QTY" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_IN_QTY$), "INT"):@FM
|
||||||
|
DataFields := "WAFER_OUT_QTY" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_OUT_QTY$), "INT"):@FM
|
||||||
|
DataFields := "OPERATOR_IN_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_IN_ID$), "STR"):@FM
|
||||||
|
DataFields := "OPERATOR_OUT_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_OUT_ID$), "STR"):@FM
|
||||||
|
DataFields := "OPERATION_SEQUENCE" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_SEQUENCE$), "INT"):@FM
|
||||||
|
DataFields := "REWORK" :@VM:SQL_Format(Rec(LOT_OPERATION_REWORK$), "BIT"):@FM
|
||||||
|
DataFields := "DATETIME_START" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_START$), "DATETIME"):@FM
|
||||||
|
DataFields := "DATETIME_STOP" :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_STOP$), "DATETIME"):@FM
|
||||||
|
DataFields := "CLEAN_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_ID$), "STR"):@FM
|
||||||
|
DataFields := "PACKAGING_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_ID$), "STR"):@FM
|
||||||
|
DataFields := "WAFER_COUNTER_ID" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_ID$), "STR"):@FM
|
||||||
|
DataFields := "OPERATION_TYPE" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_TYPE$), "STR"):@FM
|
||||||
|
DataFields := "OPERATION_CLASS" :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_CLASS$), "STR"):@FM
|
||||||
|
DataFields := "MET_TEST_TYPE_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "MET_TEST_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "PACKAGING_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "CLEAN_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "WAFER_COUNTER_REQUIRED" :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
|
||||||
|
|
||||||
|
// Symbolics
|
||||||
|
|
||||||
|
// Write the data to the SQL database
|
||||||
|
Ans = SQL_Write(Connection, "LOT_OPERATION", Keys, DataFields);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
51
LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
Normal file
51
LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
Compile function Copy_LOT_Record_To_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Copies the given LOT record to the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
06/10/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
$insert LOT_EQUATES
|
||||||
|
|
||||||
|
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// Parse record into a dimensioned array for speed
|
||||||
|
Dim Rec(23)
|
||||||
|
MatParse Record into Rec
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
// List of data fields and their values
|
||||||
|
DataFields = "TYPE" :@VM:SQL_Format(Rec(LOT_TYPE$), "STR"):@FM
|
||||||
|
DataFields := "PROD_ID" :@VM:SQL_Format(Rec(LOT_PROD_ID$), "STR"):@FM
|
||||||
|
DataFields := "ORIG_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_ORIG_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "WAFER_QTY" :@VM:SQL_Format(Rec(LOT_WAFER_QTY$), "INT"):@FM
|
||||||
|
DataFields := "VENDOR_PART_NO" :@VM:SQL_Format(Rec(LOT_VENDOR_PART_NO$), "STR"):@FM
|
||||||
|
DataFields := "VENDOR_LOT_NO" :@VM:SQL_Format(Rec(LOT_VENDOR_LOT_NO$), "STR"):@FM
|
||||||
|
DataFields := "VENDOR_CODE" :@VM:SQL_Format(Rec(LOT_VENDOR_CODE$), "STR"):@FM
|
||||||
|
DataFields := "[OPEN]" :@VM:SQL_Format(Rec(LOT_OPEN$), "BIT"):@FM
|
||||||
|
DataFields := "HOLD" :@VM:SQL_Format(Rec(LOT_HOLD$), "BIT"):@FM
|
||||||
|
DataFields := "HOT" :@VM:SQL_Format(Rec(LOT_HOT$), "BIT"):@FM
|
||||||
|
DataFields := "LEGACY_LOT_ID" :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_ID$), "STR"):@FM
|
||||||
|
DataFields := "MOST_RECENT_LOT_EVENT_ID" :@VM:SQL_Format(Rec(LOT_MOST_RECENT_LOT_EVENT_ID$), "STR"):@FM
|
||||||
|
DataFields := "LEGACY_LOT_TYPE" :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_TYPE$), "STR"):@FM
|
||||||
|
DataFields := "WO_LOG_ID" :@VM:SQL_Format(Rec(LOT_WO_LOG_ID$), "INT"):@FM
|
||||||
|
DataFields := "PROD_SPEC_ID" :@VM:SQL_Format(Rec(LOT_PROD_SPEC_ID$), "INT"):@FM
|
||||||
|
DataFields := "EPI_PART_NO" :@VM:SQL_Format(Rec(LOT_EPI_PART_NO$), "STR"):@FM
|
||||||
|
DataFields := "PROD_VER_NO" :@VM:SQL_Format(Rec(LOT_PROD_VER_NO$), "STR")
|
||||||
|
|
||||||
|
// Symbolics
|
||||||
|
|
||||||
|
// Write the data to the SQL database
|
||||||
|
Ans = SQL_Write(Connection, "LOT", Keys, DataFields);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
43
LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
Normal file
43
LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Compile function Copy_OPERATION_Record_To_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Copies the given OPERATION record to the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
06/19/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
$insert OPERATION_EQUATES
|
||||||
|
|
||||||
|
Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// Parse record into a dimensioned array for speed
|
||||||
|
Dim Rec(10)
|
||||||
|
MatParse Record into Rec
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
// List of data fields and their values
|
||||||
|
DataFields = "ACTIVE" :@VM:SQL_Format(Rec(OPERATION_ACTIVE$), "BIT"):@FM
|
||||||
|
DataFields := "CLASS_ID" :@VM:SQL_Format(Rec(OPERATION_CLASS_ID$), "STR"):@FM
|
||||||
|
DataFields := "OPERATION_DESCRIPTION" :@VM:SQL_Format(Rec(OPERATION_OPERATION_DESCRIPTION$), "STR"):@FM
|
||||||
|
DataFields := "TYPE" :@VM:SQL_Format(Rec(OPERATION_TYPE$), "STR"):@FM
|
||||||
|
DataFields := "REWORK" :@VM:SQL_Format(Rec(OPERATION_REWORK$), "BIT"):@FM
|
||||||
|
DataFields := "MET_TEST_TYPE_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "MET_TEST_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_MET_TEST_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "PACKAGING_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_PACKAGING_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "CLEAN_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_CLEAN_REQUIRED$), "BIT"):@FM
|
||||||
|
DataFields := "WAFER_COUNTER_REQUIRED" :@VM:SQL_Format(Rec(OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
|
||||||
|
|
||||||
|
// Symbolics
|
||||||
|
|
||||||
|
// Write the data to the SQL database
|
||||||
|
Ans = SQL_Write(Connection, "OPERATION", Keys, DataFields);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
Return Ans
|
@ -1,6 +1,4 @@
|
|||||||
Compile subroutine Copy_Pending_Records_To_SQL(VOID)
|
Compile subroutine Copy_Pending_Records_To_SQL(VOID)
|
||||||
#pragma precomp SRP_PreCompiler
|
|
||||||
|
|
||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
This is a utility function. For each record found in SQL_PENDING, it makes
|
This is a utility function. For each record found in SQL_PENDING, it makes
|
||||||
sure the identified record is copied to SQL.
|
sure the identified record is copied to SQL.
|
||||||
@ -9,28 +7,34 @@ Compile subroutine Copy_Pending_Records_To_SQL(VOID)
|
|||||||
-------
|
-------
|
||||||
02/06/2023 DJS Adapted from Copy_Backlog_Records_To_SQL
|
02/06/2023 DJS Adapted from Copy_Backlog_Records_To_SQL
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
$Insert APP_INSERTS
|
$Insert APP_INSERTS
|
||||||
|
|
||||||
|
EQU FIVE_MINUTES$ to 0.003472
|
||||||
|
EQU SECONDS_PER_DAY$ to 86400
|
||||||
|
EQU THIRTY_MINUTES$ to 1800
|
||||||
|
|
||||||
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Database_Services
|
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Database_Services
|
||||||
Declare function GetTickCount, Database_Services, SRP_TcpClient, Datetime, Database_Services, Environment_Services
|
Declare function GetTickCount, Database_Services, SRP_TcpClient, Datetime, Database_Services, Environment_Services
|
||||||
|
|
||||||
// This only needs to be called every once in a while (e.g. 5 minutes ~ 0.003472)
|
Main:
|
||||||
Run = False$
|
|
||||||
CurrDtm = Datetime()
|
// This only needs to be called every once in a while (e.g. 5 minutes ~ 0.003472)
|
||||||
LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
|
Run = False$
|
||||||
If LastRunDtm NE '' then
|
CurrDtm = Datetime()
|
||||||
|
LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
|
||||||
|
If LastRunDtm NE '' then
|
||||||
TimeDiff = CurrDtm - LastRunDtm
|
TimeDiff = CurrDtm - LastRunDtm
|
||||||
If TimeDiff GT 0.003472 then
|
If TimeDiff GT FIVE_MINUTES$ then
|
||||||
Run = True$
|
Run = True$
|
||||||
LastRunDtm = CurrDtm
|
LastRunDtm = CurrDtm
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Run = True$
|
Run = True$
|
||||||
LastRunDtm = CurrDtm
|
LastRunDtm = CurrDtm
|
||||||
end
|
end
|
||||||
|
|
||||||
If Run then
|
If Run then
|
||||||
Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
|
Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
|
Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
|
||||||
@ -48,9 +52,9 @@ If Run then
|
|||||||
|
|
||||||
Read Rec from pTable, Key then
|
Read Rec from pTable, Key then
|
||||||
TransDtm = Rec<1>
|
TransDtm = Rec<1>
|
||||||
ElapSecs = (CurrDtm - TransDtm) * 86400
|
ElapSecs = (CurrDtm - TransDtm) * SECONDS_PER_DAY$
|
||||||
If ElapSecs LT 1800 then
|
If ElapSecs LT THIRTY_MINUTES$ then
|
||||||
// Retry recent pending transactions (1800 seconds = 30 minutes)
|
// Retry recent pending transactions (i.e., those submitted in the last 30 minutes)
|
||||||
Table = Key[1, "*"]
|
Table = Key[1, "*"]
|
||||||
Locate Table in NonCriticalTables using @FM setting Dummy then
|
Locate Table in NonCriticalTables using @FM setting Dummy then
|
||||||
ID = Key[Col2() + 1, Len(Key)]
|
ID = Key[Col2() + 1, Len(Key)]
|
||||||
@ -81,9 +85,10 @@ If Run then
|
|||||||
|
|
||||||
TcpClientHandle = 0
|
TcpClientHandle = 0
|
||||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||||
|
ServerPort = Environment_Services('GetScrapeServerPort')
|
||||||
Convert '\' to '' in ServerIP
|
Convert '\' to '' in ServerIP
|
||||||
|
|
||||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
|
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
|
||||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||||
end
|
end
|
||||||
@ -99,8 +104,7 @@ If Run then
|
|||||||
end
|
end
|
||||||
Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
|
Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Return
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,20 +22,29 @@ Compile function Copy_Record_To_SQL(Table, Key, LogError, pKey)
|
|||||||
09/23/2010 KRF Added logic to set @DICT, @ID, and @RECORD so handlers
|
09/23/2010 KRF Added logic to set @DICT, @ID, and @RECORD so handlers
|
||||||
can use symbolics
|
can use symbolics
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
$insert Microsoft_Ado_Equates
|
$Insert APP_INSERTS
|
||||||
|
$Insert MICROSOFT_ADO_EQUATES
|
||||||
If Assigned(LogError) else LogError = 0
|
|
||||||
|
|
||||||
Declare subroutine SRP_Com, Sql_Services
|
Declare subroutine SRP_Com, Sql_Services
|
||||||
Declare function SRP_Com, Environment_Services, Datetime, Sql_Services, Error_Services, Database_Services
|
Declare function SRP_Com, Environment_Services, Datetime, Sql_Services, Error_Services, Database_Services, Unassigned
|
||||||
Ans = ""
|
|
||||||
|
|
||||||
// Make sure table is uppercase
|
Main:
|
||||||
Convert @LOWER_CASE to @UPPER_CASE in Table
|
|
||||||
|
|
||||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
If Unassigned(LogError) then LogError = False$
|
||||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
If Unassigned(pKey) then pKey = ''
|
||||||
|
Ans = ""
|
||||||
|
Done = False$
|
||||||
|
// Make sure table is uppercase
|
||||||
|
Convert @LOWER_CASE to @UPPER_CASE in Table
|
||||||
|
|
||||||
|
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||||
|
Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
||||||
|
|
||||||
|
Open 'SQL_PENDING' to pTable then
|
||||||
|
|
||||||
|
If pKey NE '' then Lock pTable, pKey else Done = True$
|
||||||
|
|
||||||
|
If Not(Done) then
|
||||||
// The expected name of the handler
|
// The expected name of the handler
|
||||||
Handler = "COPY_":Table:"_RECORD_TO_SQL"
|
Handler = "COPY_":Table:"_RECORD_TO_SQL"
|
||||||
|
|
||||||
@ -53,12 +62,10 @@ Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
|||||||
Open "DICT.":Table to @DICT then null
|
Open "DICT.":Table to @DICT then null
|
||||||
@ID = Key
|
@ID = Key
|
||||||
Ans = Function(@Handler(Connection, Key, @RECORD))
|
Ans = Function(@Handler(Connection, Key, @RECORD))
|
||||||
If Ans EQ '' then
|
If (Ans EQ '') then
|
||||||
If Assigned(pKey) then
|
If Assigned(pKey) then
|
||||||
If pKey NE '' then
|
If (pKey NE '') then
|
||||||
Open 'SQL_PENDING' to pTable then
|
Delete pTable, pKey else Null
|
||||||
Delete pTable, pKey else null
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -68,7 +75,8 @@ Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
|
Ans = 'Unable to open connection to SQL server. SQL connection error: '
|
||||||
|
Ans := SRP_Com(Connection, "ERROR")
|
||||||
end
|
end
|
||||||
SRP_Com(Connection, "CALL", "Close")
|
SRP_Com(Connection, "CALL", "Close")
|
||||||
SRP_Com(Connection, "RELEASE")
|
SRP_Com(Connection, "RELEASE")
|
||||||
@ -93,6 +101,8 @@ Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
|||||||
|
|
||||||
If Assigned(pKey) then
|
If Assigned(pKey) then
|
||||||
If (pKey NE '') then
|
If (pKey NE '') then
|
||||||
|
// Call unlock here in case we ran into an error above
|
||||||
|
Unlock pTable, pKey else Null
|
||||||
// Always log the result
|
// Always log the result
|
||||||
Open 'SQL_LOG' to hLog then
|
Open 'SQL_LOG' to hLog then
|
||||||
If Ans EQ '' then
|
If Ans EQ '' then
|
||||||
@ -111,9 +121,9 @@ Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Return Ans
|
Return Ans
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ Declare function SQL_Write, SQL_Write_MV, SQL_Format
|
|||||||
Ans = ""
|
Ans = ""
|
||||||
|
|
||||||
// Parse record into a dimensioned array for speed
|
// Parse record into a dimensioned array for speed
|
||||||
Dim Rec(82)
|
Dim Rec(86)
|
||||||
MatParse Record into Rec
|
MatParse Record into Rec
|
||||||
|
|
||||||
// List of key names and their values
|
// List of key names and their values
|
||||||
@ -38,7 +38,7 @@ DataFields := "CYCLE_TIME" :@VM:SQL_Format(Rec(WO_LOG_CYCLE_TIME$),
|
|||||||
DataFields := "UNIT_PRICE" :@VM:SQL_Format(Rec(WO_LOG_UNIT_PRICE$), "STR"):@FM
|
DataFields := "UNIT_PRICE" :@VM:SQL_Format(Rec(WO_LOG_UNIT_PRICE$), "STR"):@FM
|
||||||
DataFields := "ORDER_NO" :@VM:SQL_Format(Rec(WO_LOG_ORDER_NO$), "STR"):@FM
|
DataFields := "ORDER_NO" :@VM:SQL_Format(Rec(WO_LOG_ORDER_NO$), "STR"):@FM
|
||||||
DataFields := "RX_DTM" :@VM:SQL_Format(Rec(WO_LOG_RX_DTM$), "DATETIME"):@FM
|
DataFields := "RX_DTM" :@VM:SQL_Format(Rec(WO_LOG_RX_DTM$), "DATETIME"):@FM
|
||||||
DataFields := "OUT_CASS_LOAD_QTY":@VM:SQL_Format(Rec(WO_LOG_OUT_CASS_LOAD_QTY$), "INT"):@FM
|
DataFields := "OUT_CASS_LOAD_QTY" :@VM:SQL_Format(Rec(WO_LOG_OUT_CASS_LOAD_QTY$), "INT"):@FM
|
||||||
DataFields := "PART_NO" :@VM:SQL_Format(Rec(WO_LOG_PART_NO$), "STR"):@FM
|
DataFields := "PART_NO" :@VM:SQL_Format(Rec(WO_LOG_PART_NO$), "STR"):@FM
|
||||||
DataFields := "PROD_ORD_NO" :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO$), "STR"):@FM
|
DataFields := "PROD_ORD_NO" :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO$), "STR"):@FM
|
||||||
DataFields := "WO_START_DTM" :@VM:SQL_Format(Rec(WO_LOG_WO_START_DTM$), "DATETIME"):@FM
|
DataFields := "WO_START_DTM" :@VM:SQL_Format(Rec(WO_LOG_WO_START_DTM$), "DATETIME"):@FM
|
||||||
@ -50,13 +50,16 @@ DataFields := "ORD_SUB_PART_REV" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_REV$),
|
|||||||
DataFields := "CUST_PO_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_PO_NO$), "STR"):@FM
|
DataFields := "CUST_PO_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_PO_NO$), "STR"):@FM
|
||||||
DataFields := "SAP_ORD_QTY" :@VM:SQL_Format(Rec(WO_LOG_SAP_ORD_QTY$), "INT"):@FM
|
DataFields := "SAP_ORD_QTY" :@VM:SQL_Format(Rec(WO_LOG_SAP_ORD_QTY$), "INT"):@FM
|
||||||
DataFields := "CUST_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_NO$), "STR"):@FM
|
DataFields := "CUST_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_NO$), "STR"):@FM
|
||||||
DataFields := "CUST_PART_INBOUND":@VM:SQL_Format(Rec(WO_LOG_CUST_PART_INBOUND$), "STR"):@FM
|
DataFields := "CUST_PART_INBOUND" :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_INBOUND$), "STR"):@FM
|
||||||
DataFields := "CUST_SUB_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_PART_NO$), "STR"):@FM
|
DataFields := "CUST_SUB_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_PART_NO$), "STR"):@FM
|
||||||
DataFields := "CUST_SUB_MFR" :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_MFR$), "STR"):@FM
|
DataFields := "CUST_SUB_MFR" :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_MFR$), "STR"):@FM
|
||||||
DataFields := "PROD_ORD_NO_TMP" :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO_TMP$), "STR"):@FM
|
DataFields := "PROD_ORD_NO_TMP" :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO_TMP$), "STR"):@FM
|
||||||
DataFields := "ORIGIN" :@VM:SQL_Format(Rec(WO_LOG_ORIGIN$), "STR"):@FM
|
DataFields := "ORIGIN" :@VM:SQL_Format(Rec(WO_LOG_ORIGIN$), "STR"):@FM
|
||||||
DataFields := "INCO_CODE" :@VM:SQL_Format(Rec(WO_LOG_INCO_CODE$), "STR"):@FM
|
DataFields := "INCO_CODE" :@VM:SQL_Format(Rec(WO_LOG_INCO_CODE$), "STR"):@FM
|
||||||
DataFields := "HOT_FLAG" :@VM:SQL_Format(Rec(WO_LOG_HOT_FLAG$), "BIT"):@FM
|
DataFields := "HOT_FLAG" :@VM:SQL_Format(Rec(WO_LOG_HOT_FLAG$), "BIT"):@FM
|
||||||
|
DataFields := "CURR_STATUS_STATIC" :@VM:SQL_Format(Rec(WO_LOG_CURR_STATUS_STATIC$), "STR"):@FM
|
||||||
|
DataFields := "REL_QTY" :@VM:SQL_Format(Rec(WO_LOG_REL_QTY_STATIC$), "INT"):@FM
|
||||||
|
DataFields := "UNREL_QTY" :@VM:SQL_Format(Rec(WO_LOG_UNREL_QTY_STATIC$), "INT"):@FM
|
||||||
|
|
||||||
// Symbolics
|
// Symbolics
|
||||||
DataFields := "START_DT" :@VM:SQL_Format({START_DT}, "DATE"):@FM
|
DataFields := "START_DT" :@VM:SQL_Format({START_DT}, "DATE"):@FM
|
||||||
@ -68,9 +71,7 @@ DataFields := "CYCLE_TIME_WIP" :@VM:SQL_Format({CYCLE_TIME_WIP},
|
|||||||
DataFields := "CYCLE_TIME_DELTA" :@VM:SQL_Format({CYCLE_TIME_DELTA}, "DEC", 1):@FM
|
DataFields := "CYCLE_TIME_DELTA" :@VM:SQL_Format({CYCLE_TIME_DELTA}, "DEC", 1):@FM
|
||||||
DataFields := "CYCLE_TIME_QA_SHIP" :@VM:SQL_Format({CYCLE_TIME_QA_SHIP}, "DEC", 1):@FM
|
DataFields := "CYCLE_TIME_QA_SHIP" :@VM:SQL_Format({CYCLE_TIME_QA_SHIP}, "DEC", 1):@FM
|
||||||
DataFields := "CYCLE_TIME_REL_FIRST_VER":@VM:SQL_Format({CYCLE_TIME_REL_FIRST_VER}, "DEC", 1):@FM
|
DataFields := "CYCLE_TIME_REL_FIRST_VER":@VM:SQL_Format({CYCLE_TIME_REL_FIRST_VER}, "DEC", 1):@FM
|
||||||
DataFields := "SAP_TOT_WFR_QTY" :@VM:SQL_Format({SAP_TOT_WFR_QTY}, "STR"):@FM
|
DataFields := "SAP_TOT_WFR_QTY" :@VM:SQL_Format({SAP_TOT_WFR_QTY}, "STR")
|
||||||
DataFields := "REL_QTY" :@VM:SQL_Format({REL_QTY}, "INT"):@FM
|
|
||||||
DataFields := "UNREL_QTY" :@VM:SQL_Format({UNREL_QTY}, "INT")
|
|
||||||
|
|
||||||
// Write the data to the SQL database
|
// Write the data to the SQL database
|
||||||
Ans = SQL_Write(Connection, "WO_LOG", Keys, DataFields)
|
Ans = SQL_Write(Connection, "WO_LOG", Keys, DataFields)
|
||||||
@ -349,3 +350,4 @@ If Ans EQ "" AND CassIdSap NE "" then
|
|||||||
end
|
end
|
||||||
|
|
||||||
Return Ans
|
Return Ans
|
||||||
|
|
||||||
|
@ -609,7 +609,6 @@ Service ReadDataRow(TableName, KeyID, NotExpired, ExpirationDuration, IgnoreMFSR
|
|||||||
Memory_Services('SetValue', ServiceKeyID, DataRow)
|
Memory_Services('SetValue', ServiceKeyID, DataRow)
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Error reading ' : KeyID : ' from the ' : TableName : ' table in the ' : Service : ' service. Error = ' : @File_Error<1>)
|
Error_Services('Add', 'Error reading ' : KeyID : ' from the ' : TableName : ' table in the ' : Service : ' service. Error = ' : @File_Error<1>)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -943,11 +942,9 @@ Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutine
|
|||||||
Error_Services('Add', 'Error writing ' : KeyID : ' to the ' : TableName : ' table in the ' : Service : ' service. Error message: ':ErrorMsg)
|
Error_Services('Add', 'Error writing ' : KeyID : ' to the ' : TableName : ' table in the ' : Service : ' service. Error message: ':ErrorMsg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
* If Error_Services('NoError') then
|
|
||||||
If IgnoreAllLocks EQ False$ then
|
If IgnoreAllLocks EQ False$ then
|
||||||
Database_Services('ReleaseKeyIDLock', TableName, KeyID)
|
Database_Services('ReleaseKeyIDLock', TableName, KeyID)
|
||||||
end
|
end
|
||||||
* end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
|
Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
|
||||||
end
|
end
|
||||||
@ -958,6 +955,68 @@ Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutine
|
|||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// WriteDataColumn
|
||||||
|
//
|
||||||
|
// TableName. The linear hash database table name. - [REQUIRED]
|
||||||
|
// KeyID. The KeyID to the database table. - [REQUIRED]
|
||||||
|
// ColumnNo. Column number of the table to write. - [REQUIRED]
|
||||||
|
//
|
||||||
|
// Writes a value to a column for the indicated Key ID and database table.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Service WriteDataColumn(TableName, KeyID, ColumnNo, Value, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks)
|
||||||
|
|
||||||
|
If TableName NE '' AND KeyID NE '' AND ColumnNo NE '' then
|
||||||
|
|
||||||
|
If ( Num(ColumnNo) and (ColumnNo GT 0) ) then
|
||||||
|
If Unassigned(Value) then Value = ''
|
||||||
|
If IgnoreSelfLock NE True$ then IgnoreSelfLock = False$
|
||||||
|
If IgnoreMFSRoutines NE True$ then IgnoreMFSRoutines = False$
|
||||||
|
If IgnoreAllLocks NE True$ then IgnoreAllLocks = False$
|
||||||
|
If IgnoreAllLocks then
|
||||||
|
HaveLock = True$
|
||||||
|
end else
|
||||||
|
HaveLock = Database_Services('GetKeyIDLock', TableName, KeyID, IgnoreSelfLock)
|
||||||
|
end
|
||||||
|
If HaveLock EQ True$ then
|
||||||
|
TableHandle = Database_Services('GetTableHandle', TableName)
|
||||||
|
If IgnoreMFSRoutines then
|
||||||
|
MFSList = TableHandle<1, 1> ; // MFS routines are @SVM delimited.
|
||||||
|
NumMFS = DCount(MFSList, @SVM)
|
||||||
|
For MFSCnt = NumMFS to 1 Step -1
|
||||||
|
MFSRoutine = MFSList<0, 0, MFSCnt>
|
||||||
|
If (MFSRoutine NE 'SI.MFS') AND (MFSRoutine NE 'RTP57') then
|
||||||
|
MFSList = Delete(MFSList, 0, 0, MFSCnt)
|
||||||
|
end
|
||||||
|
Next MFSCnt
|
||||||
|
TableHandle<1, 1> = MFSList
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
WriteV Value on TableHandle, KeyID, ColumnNo then
|
||||||
|
Memory_Services('SetValue', ServiceModule : '*' : 'ReadDataColumn' : '*' : TableName : '*' : KeyID : '*' : ColumnNo, Value)
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error writing value ' : Quote(Value) ' to column number ' : ColumnNo : ' to key ' : KeyID |
|
||||||
|
: ' of table ' : TableName : ' in the ' : Service : ' service.'
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If IgnoreAllLocks EQ False$ then
|
||||||
|
Database_Services('ReleaseKeyIDLock', TableName, KeyID)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'ColumnNo was not a number or was not greater than zero in the ' :Service : ' service.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'TableName, KeyID, or ColumnNo argument was missing in the ' : Service : ' service.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// UnlockKeyID
|
// UnlockKeyID
|
||||||
//
|
//
|
||||||
@ -1043,5 +1102,3 @@ end service
|
|||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,6 +220,13 @@ Service GetWeekNum(InputDate)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
Service ConvertDateTimeToISO8601(DatetimeToConv)
|
||||||
|
|
||||||
|
Response = OConv(DatetimeToConv, "[SRP_DATETIME,()YYYY-MM-DD hh:mm:ss.000Z]")
|
||||||
|
swap ' ' with 'T' in Response
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
|
30
LSL2/STPROC/DELETE_LOT_EVENT_RECORD_FROM_SQL.txt
Normal file
30
LSL2/STPROC/DELETE_LOT_EVENT_RECORD_FROM_SQL.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Compile function Delete_LOT_EVENT_Record_From_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Deletes the given LOT_EVENT record from the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
08/15/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
Declare function SQL_Delete, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
!! Delete records from MV tables first !!
|
||||||
|
|
||||||
|
// Currently no multi-value (child) tables
|
||||||
|
|
||||||
|
// LOT_EVENT
|
||||||
|
If Ans EQ "" then
|
||||||
|
Ans = SQL_Delete(Connection, "LOT_EVENT", Keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
30
LSL2/STPROC/DELETE_LOT_EVENT_TYPE_RECORD_FROM_SQL.txt
Normal file
30
LSL2/STPROC/DELETE_LOT_EVENT_TYPE_RECORD_FROM_SQL.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Compile function Delete_LOT_EVENT_TYPE_Record_From_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Deletes the given LOT_EVENT_TYPE record from the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
08/15/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
Declare function SQL_Delete, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
!! Delete records from MV tables first !!
|
||||||
|
|
||||||
|
// Currently no multi-value (child) tables
|
||||||
|
|
||||||
|
// LOT_EVENT_TYPE
|
||||||
|
If Ans EQ "" then
|
||||||
|
Ans = SQL_Delete(Connection, "LOT_EVENT_TYPE", Keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
30
LSL2/STPROC/DELETE_LOT_OPERATION_RECORD_FROM_SQL.txt
Normal file
30
LSL2/STPROC/DELETE_LOT_OPERATION_RECORD_FROM_SQL.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Compile function Delete_LOT_OPERATION_Record_From_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Deletes the given LOT_OPERATION record from the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
08/15/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
Declare function SQL_Delete, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
!! Delete records from MV tables first !!
|
||||||
|
|
||||||
|
// Currently no multi-value (child) tables
|
||||||
|
|
||||||
|
// LOT_OPERATION
|
||||||
|
If Ans EQ "" then
|
||||||
|
Ans = SQL_Delete(Connection, "LOT_OPERATION", Keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
30
LSL2/STPROC/DELETE_LOT_RECORD_FROM_SQL.txt
Normal file
30
LSL2/STPROC/DELETE_LOT_RECORD_FROM_SQL.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Compile function Delete_LOT_Record_From_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Deletes the given LOT record from the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
08/15/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
Declare function SQL_Delete, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
!! Delete records from MV tables first !!
|
||||||
|
|
||||||
|
// Currently no multi-value (child) tables
|
||||||
|
|
||||||
|
// LOT
|
||||||
|
If Ans EQ "" then
|
||||||
|
Ans = SQL_Delete(Connection, "LOT", Keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
30
LSL2/STPROC/DELETE_OPERATION_RECORD_FROM_SQL.txt
Normal file
30
LSL2/STPROC/DELETE_OPERATION_RECORD_FROM_SQL.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Compile function Delete_OPERATION_Record_From_SQL(Connection, Key, Record)
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
Deletes the given OPERATION record from the MSSQL database.
|
||||||
|
|
||||||
|
History
|
||||||
|
-------
|
||||||
|
08/15/2025 DJS Original Programmer
|
||||||
|
\*****************************************************************************/
|
||||||
|
|
||||||
|
Declare function SQL_Delete, SQL_Format
|
||||||
|
Ans = ""
|
||||||
|
|
||||||
|
// List of key names and their values
|
||||||
|
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// Multi-valued Fields
|
||||||
|
|
||||||
|
!! Delete records from MV tables first !!
|
||||||
|
|
||||||
|
// Currently no multi-value (child) tables
|
||||||
|
|
||||||
|
// OPERATION
|
||||||
|
If Ans EQ "" then
|
||||||
|
Ans = SQL_Delete(Connection, "OPERATION", Keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Ans
|
||||||
|
|
@ -18,23 +18,31 @@ Compile function Delete_Record_From_SQL(Table, Key, LogError, pKey)
|
|||||||
-------
|
-------
|
||||||
09/15/2010 KRF Original Programmer
|
09/15/2010 KRF Original Programmer
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
$Insert APP_INSERTS
|
||||||
$insert Microsoft_Ado_Equates
|
$insert MICROSOFT_ADO_EQUATES
|
||||||
|
|
||||||
If Assigned(LogError) else LogError = 0
|
|
||||||
|
|
||||||
Declare subroutine Sql_Services, SRP_COM
|
Declare subroutine Sql_Services, SRP_COM
|
||||||
Declare function Sql_Services, Error_Services, SRP_COM, Environment_Services
|
Declare function Sql_Services, Error_Services, SRP_COM, Environment_Services, Unassigned
|
||||||
Ans = ""
|
|
||||||
|
|
||||||
// Make sure table is uppercase
|
Main:
|
||||||
Convert @LOWER_CASE to @UPPER_CASE in Table
|
|
||||||
|
|
||||||
// The expected name of the handler
|
If Unassigned(LogError) then LogError = False$
|
||||||
Handler = "DELETE_":Table:"_RECORD_FROM_SQL"
|
If Unassigned(pKey) then pKey = ''
|
||||||
|
Ans = ""
|
||||||
|
Done = False$
|
||||||
|
// Make sure table is uppercase
|
||||||
|
Convert @LOWER_CASE to @UPPER_CASE in Table
|
||||||
|
|
||||||
// Find the stored procedure that handles this table
|
Open 'SQL_PENDING' to pTable then
|
||||||
Open "SYSOBJ" to hSysObj then
|
|
||||||
|
If pKey NE '' then Lock pTable, pKey else Done = True$
|
||||||
|
|
||||||
|
If Not(Done) then
|
||||||
|
// The expected name of the handler
|
||||||
|
Handler = "DELETE_":Table:"_RECORD_FROM_SQL"
|
||||||
|
|
||||||
|
// Find the stored procedure that handles this table
|
||||||
|
Open "SYSOBJ" to hSysObj then
|
||||||
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
||||||
// Connect to the ODBC/ADO
|
// Connect to the ODBC/ADO
|
||||||
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
||||||
@ -44,10 +52,10 @@ Open "SYSOBJ" to hSysObj then
|
|||||||
// Read the record and call the handler
|
// Read the record and call the handler
|
||||||
If Key NE "" then
|
If Key NE "" then
|
||||||
Ans = Function(@Handler(Connection, Key))
|
Ans = Function(@Handler(Connection, Key))
|
||||||
If Ans EQ '' then
|
If (Ans EQ '') then
|
||||||
If Assigned(pKey) then
|
If Assigned(pKey) then
|
||||||
Open 'SQL_PENDING' to pTable then
|
If (pKey NE '') then
|
||||||
Delete pTable, pKey else null
|
Delete pTable, pKey else Null
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -61,9 +69,9 @@ Open "SYSOBJ" to hSysObj then
|
|||||||
Ans = "Unable to create ADO connection."
|
Ans = "Unable to create ADO connection."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
If LogError AND Len(Ans) then
|
If LogError AND Len(Ans) then
|
||||||
Open "SQL_ERROR" to hSqlError then
|
Open "SQL_ERROR" to hSqlError then
|
||||||
Read Errors from hSqlError, Date() then
|
Read Errors from hSqlError, Date() then
|
||||||
Errors := @FM:Table:@VM:Key:@VM:Ans
|
Errors := @FM:Table:@VM:Key:@VM:Ans
|
||||||
@ -73,11 +81,14 @@ If LogError AND Len(Ans) then
|
|||||||
Write Errors to hSqlError, Date()
|
Write Errors to hSqlError, Date()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// Always log the result
|
// Always log the result
|
||||||
|
|
||||||
If Assigned(pKey) then
|
If Assigned(pKey) then
|
||||||
|
If (pKey NE '') then
|
||||||
|
// Call unlock here in case an error was encountered above
|
||||||
|
Unlock pTable, pKey else Null
|
||||||
Open 'SQL_LOG' to hLog then
|
Open 'SQL_LOG' to hLog then
|
||||||
If Ans EQ '' then
|
If Ans EQ '' then
|
||||||
Result = 'PROCESSED'
|
Result = 'PROCESSED'
|
||||||
@ -92,7 +103,10 @@ If Assigned(pKey) then
|
|||||||
end
|
end
|
||||||
Write Log to hLog, CurrDate
|
Write Log to hLog, CurrDate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Return Ans
|
Return Ans
|
||||||
|
|
||||||
|
@ -590,7 +590,9 @@ Service SetupDevServices()
|
|||||||
BaselineServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
|
BaselineServices = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
|
||||||
BaselineServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
|
BaselineServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
|
||||||
BaselineServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups':@VM
|
BaselineServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups':@VM
|
||||||
BaselineServices := 'Update Security Groups':@VM:'Auto Scheduler'
|
BaselineServices := 'Update Security Groups':@VM:'Auto Scheduler':@VM:'Update NICA Orders':@VM:'Process Procedure Queue':@VM
|
||||||
|
BaselineServices := 'Process Transaction Queue':@VM:'Update Open Work Order Statuses':@VM:'Update Work Order Wafer Quantities':@VM
|
||||||
|
BaselineServices := 'Process Mona Requests'
|
||||||
|
|
||||||
Query = "SELECT SERVICES"
|
Query = "SELECT SERVICES"
|
||||||
|
|
||||||
|
@ -94,4 +94,3 @@ API engineinfo.ID.GET
|
|||||||
end
|
end
|
||||||
|
|
||||||
end api
|
end api
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Function Environment_Services(@Service, @Params)
|
|||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
$insert LOGICAL
|
$insert APP_INSERTS
|
||||||
$insert SERVICE_SETUP
|
$insert SERVICE_SETUP
|
||||||
$insert SRPMail_Inserts
|
$insert SRPMail_Inserts
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ Service IsProd()
|
|||||||
|
|
||||||
Machine = Environment_Services('GetServer')
|
Machine = Environment_Services('GetServer')
|
||||||
IsProd = False$
|
IsProd = False$
|
||||||
If Machine _NEC "messa012" and Machine _NEC "mestsa01ec" and Machine _NEC "mestsa09ec" and Machine _NEC "mestsa010ec" and Machine _NEC "mestsa011ec" and Machine _NEC "mestsa012ec" and Machine _NEC "MESTST1010" and Machine _NEC "MESTST1009" then
|
If Machine _NEC "messa012" and Machine _NEC "mestsa01ec" and Machine _NEC "mestsa09ec" and Machine _NEC "mestsa010ec" and Machine _NEC "mestsa011ec" and Machine _NEC "mestsa012ec" and Machine _NEC "mestsa024ec" and Machine _NEC "MESTST1010" and Machine _NEC "MESTST1009" then
|
||||||
IsProd = True$
|
IsProd = True$
|
||||||
end
|
end
|
||||||
Response = IsProd
|
Response = IsProd
|
||||||
@ -123,6 +123,7 @@ Service GetApplicationRootIP()
|
|||||||
Case Machine EQ 'MESTSA010EC' ; ApplicationRootIP = '\\10.95.140.63'
|
Case Machine EQ 'MESTSA010EC' ; ApplicationRootIP = '\\10.95.140.63'
|
||||||
Case Machine EQ 'MESTSA011EC' ; ApplicationRootIP = '\\10.95.140.64'
|
Case Machine EQ 'MESTSA011EC' ; ApplicationRootIP = '\\10.95.140.64'
|
||||||
Case Machine EQ 'MESTSA012EC' ; ApplicationRootIP = '\\10.95.140.65'
|
Case Machine EQ 'MESTSA012EC' ; ApplicationRootIP = '\\10.95.140.65'
|
||||||
|
Case Machine EQ 'MESTSA024EC' ; ApplicationRootIP = '\\10.95.140.66'
|
||||||
Case Machine EQ 'MESSA012' ; ApplicationRootIP = '\\10.95.176.50'
|
Case Machine EQ 'MESSA012' ; ApplicationRootIP = '\\10.95.176.50'
|
||||||
Case Machine EQ 'MESST5201' ; ApplicationRootIP = '\\10.95.140.14'
|
Case Machine EQ 'MESST5201' ; ApplicationRootIP = '\\10.95.140.14'
|
||||||
Case Machine EQ 'MESST5202' ; ApplicationRootIP = '\\10.95.140.14'
|
Case Machine EQ 'MESST5202' ; ApplicationRootIP = '\\10.95.140.14'
|
||||||
@ -325,6 +326,7 @@ Service GetLocalRootPath()
|
|||||||
Case Machine EQ 'MESTSA010EC' ; LocalRootPath = 'D:'
|
Case Machine EQ 'MESTSA010EC' ; LocalRootPath = 'D:'
|
||||||
Case Machine EQ 'MESTSA011EC' ; LocalRootPath = 'D:'
|
Case Machine EQ 'MESTSA011EC' ; LocalRootPath = 'D:'
|
||||||
Case Machine EQ 'MESTSA012EC' ; LocalRootPath = 'D:'
|
Case Machine EQ 'MESTSA012EC' ; LocalRootPath = 'D:'
|
||||||
|
Case Machine EQ 'MESTSA024EC' ; LocalRootPath = 'D:'
|
||||||
Case Machine EQ 'MESST6501' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
Case Machine EQ 'MESST6501' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
||||||
Case Machine EQ 'MESST6502' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
Case Machine EQ 'MESST6502' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
||||||
Case Machine EQ 'MESTST1006' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
Case Machine EQ 'MESTST1006' ; LocalRootPath = 'C:' ; // This is a map to the user's actual C drive.
|
||||||
@ -553,6 +555,30 @@ Service GetEnvironmentVariable(VariableName)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetServiceManagerPort()
|
||||||
|
|
||||||
|
FilePath = Drive():'\SRPEngineServer.ini'
|
||||||
|
OSRead IniFile from FilePath then
|
||||||
|
CharIndex = Index(IniFile, 'Port', 1)
|
||||||
|
Line = IniFile[CharIndex, 'F':CRLF$]
|
||||||
|
Response = Trim(Line[-1, 'B='])
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service GetScrapeServerPort()
|
||||||
|
|
||||||
|
FilePath = Drive():'\SRPEngineServerScrape.ini'
|
||||||
|
OSRead IniFile from FilePath then
|
||||||
|
CharIndex = Index(IniFile, 'Port', 1)
|
||||||
|
Line = IniFile[CharIndex, 'F':CRLF$]
|
||||||
|
Response = Trim(Line[-1, 'B='])
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1,272 +0,0 @@
|
|||||||
COMPILE SUBROUTINE Export_WO_Log( Dummy )
|
|
||||||
|
|
||||||
DECLARE FUNCTION Msg, Dialog_Box, Utility, obj_Export, obj_WO_Log
|
|
||||||
DECLARE FUNCTION Set_Printer, Get_Printer, obj_Install, Utility, obj_MUWafers, Database_Services
|
|
||||||
|
|
||||||
DECLARE SUBROUTINE Btree.Extract, RList, END_Dialog, Make.List, Msg, ErrMsg, SetInitDirOptions
|
|
||||||
|
|
||||||
$INSERT LSL_USERS_EQU
|
|
||||||
$INSERT MSG_EQUATES
|
|
||||||
$INSERT RLIST_EQUATES
|
|
||||||
$INSERT OIPRINT_EQUATES
|
|
||||||
$INSERT WO_LOG_EQUATES
|
|
||||||
$INSERT WO_STEP_EQU
|
|
||||||
$INSERT WO_MAT_EQUATES
|
|
||||||
$INSERT COMPANY_EQU
|
|
||||||
$INSERT QUOTE_EQU
|
|
||||||
$INSERT QUOTE_SPEC_EQU
|
|
||||||
$INSERT RECIPE_EQU
|
|
||||||
$INSERT ORDER_DET_EQU
|
|
||||||
$INSERT PROD_SPEC_EQUATES
|
|
||||||
$insert PROD_VER_EQUATES
|
|
||||||
$INSERT EXCEL_EQU
|
|
||||||
|
|
||||||
CRLF$ = \0D0A\
|
|
||||||
|
|
||||||
OPEN 'WO_STEP' TO WOStepTable ELSE
|
|
||||||
ErrMsg('Unable to open "WO_STEP" table in EXPORT_WO_LOG routine.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
OPEN 'DICT.WO_STEP' TO DictWOStep ELSE
|
|
||||||
ErrMsg('Unable to open "DICT.WO_STEP" table in EXPORT_WO_LOG routine.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
Def = ""
|
|
||||||
Def<MTEXT$> = "Selecting Uncheduled Work Orders..."
|
|
||||||
Def<MTYPE$> = "U"
|
|
||||||
|
|
||||||
MsgUp = Msg(@window, Def)
|
|
||||||
|
|
||||||
* SelectSent = 'SELECT WO_STEP WITH SCHEDULED NE "Yes" '
|
|
||||||
Declare subroutine SRP_Stopwatch
|
|
||||||
SRP_Stopwatch('Reset')
|
|
||||||
SRP_Stopwatch('Start', 'StartDate')
|
|
||||||
StartDate = Oconv(Date() - 182, 'D4/')
|
|
||||||
SelectSent = 'SELECT WO_LOG WITH ENTRY_DATE GE ' : Quote(StartDate)
|
|
||||||
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
|
||||||
SRP_Stopwatch('Stop', 'StartDate')
|
|
||||||
SRP_Stopwatch('Start', 'Schedule')
|
|
||||||
SelectSent = 'SELECT WO_LOG WITH SCHEDULED NE "Yes" '
|
|
||||||
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
|
||||||
SRP_Stopwatch('Stop', 'Schedule')
|
|
||||||
* SRP_Stopwatch('ShowAll')
|
|
||||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS NE "CL" "COMP" '
|
|
||||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS = "NEW" "RTP" "RTS" "RX" "INPR" '
|
|
||||||
*RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
|
||||||
|
|
||||||
WOLogKeys = ''
|
|
||||||
Done = 0
|
|
||||||
LOOP
|
|
||||||
READNEXT WOLogKey ELSE Done = 1
|
|
||||||
UNTIL Done
|
|
||||||
WOLogKeys<-1> = WOLogKey
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
CONVERT @VM TO @FM IN WOLogKeys
|
|
||||||
|
|
||||||
IF WOLogKeys = '' THEN
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
ErrMsg('No Work Orders remain unscheduled.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
|
|
||||||
Make.List('',WOLogKeys,'','')
|
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
ErrMsg(errCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
Results = ''
|
|
||||||
Results<1,1> = 'Spec Type'
|
|
||||||
Results<1,2> = 'WO'
|
|
||||||
Results<1,3> = 'Customer'
|
|
||||||
Results<1,4> = 'Qty'
|
|
||||||
Results<1,5> = 'PSN'
|
|
||||||
Results<1,6> = 'Cust Part Numbers'
|
|
||||||
Results<1,7> = 'Reactor Type'
|
|
||||||
Results<1,8> = 'Sched Reacts'
|
|
||||||
Results<1,9> = 'Inch'
|
|
||||||
Results<1,10> = 'Tube Press Type'
|
|
||||||
Results<1,11> = 'Epi Gases'
|
|
||||||
Results<1,12> = 'Dopant L1'
|
|
||||||
Results<1,13> = 'Cap/Burst Gases'
|
|
||||||
Results<1,14> = 'Thick Target'
|
|
||||||
Results<1,15> = 'Res Target'
|
|
||||||
Results<1,16> = 'Expected Rx Dt'
|
|
||||||
Results<1,17> = 'Received Date'
|
|
||||||
Results<1,18> = 'Promised Ship'
|
|
||||||
Results<1,19> = 'Qual'
|
|
||||||
Results<1,20> = 'Blkd'
|
|
||||||
Results<1,21> = 'MU Wfrs'
|
|
||||||
|
|
||||||
Done = 0
|
|
||||||
LineCnt = 1
|
|
||||||
LOOP
|
|
||||||
READNEXT WOLogKey ELSE Done = 1
|
|
||||||
UNTIL Done
|
|
||||||
|
|
||||||
WONo = WOLogKey
|
|
||||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
|
||||||
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
|
||||||
|
|
||||||
CassCustPNs = XLATE('WO_MAT',WOMatKeys,WO_MAT_CUST_PART_NO$,'X')
|
|
||||||
CustPNs = ''
|
|
||||||
FOR I = 1 TO COUNT(CassCustPNs,@VM) + (CassCustPNs NE '')
|
|
||||||
LOCATE CassCustPNs<1,I> IN CustPNs USING @VM SETTING POS ELSE
|
|
||||||
CustPNs = INSERT(CustPNs,1,Pos,0,CassCustPNs<1,I>)
|
|
||||||
END
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
CompanyName = XLATE( 'COMPANY', WORec<WO_LOG_CUST_NO$>,COMPANY_CO_NAME$,'X')
|
|
||||||
SWAP ',' WITH '-' IN CompanyName
|
|
||||||
|
|
||||||
WaferQty = SUM(XLATE('WO_MAT',WOMatKeys,WO_MAT_WAFER_QTY$,'X'))
|
|
||||||
IF WaferQty > 0 THEN
|
|
||||||
ExpectedRxDts = ''
|
|
||||||
END ELSE
|
|
||||||
OrderNo = WORec<WO_LOG_ORDER_NO$>
|
|
||||||
OrderItems = WORec<WO_LOG_ORDER_ITEM$>
|
|
||||||
OrderDetKeys = ''
|
|
||||||
FOR N = 1 TO COUNT(OrderItems,@VM) + (OrderItems NE '')
|
|
||||||
OrderDetKeys<1,N> = OrderNo:'*':OrderItems<1,N>
|
|
||||||
NEXT N
|
|
||||||
WaferQty = SUM(XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_ITEM_QTY$,'X'))
|
|
||||||
ExpectedRxDts = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_EXP_RX_DT$,'X')
|
|
||||||
END
|
|
||||||
|
|
||||||
MUWafers = obj_MUWafers('AvailWafers',WONo:@RM:WORec:@RM:0:@RM:1)
|
|
||||||
ShipThickTarget = XLATE('WO_LOG',WONo,'SHIP_THICK_TARGET','X')
|
|
||||||
ShipResTarget = XLATE('WO_LOG',WONo,'SHIP_RES_TARGET','X')
|
|
||||||
|
|
||||||
CustPSNs = XLATE('WO_STEP',WORec<34>,1,'X')
|
|
||||||
|
|
||||||
SWAP @VM WITH '\' IN CustPNs
|
|
||||||
|
|
||||||
* PSNo = WOStepRec<WO_STEP_PROD_SPEC_ID$>
|
|
||||||
ProdVerNo = WORec<WO_LOG_PROD_VER_NO$>
|
|
||||||
ProdVerRow = Database_Services('ReadDataRow', 'PROD_VER', ProdVerNo)
|
|
||||||
PSNo = ProdVerRow<PROD_VER_PROC_STEP_PSN$>
|
|
||||||
|
|
||||||
PSReactType = OCONV(XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X'),'[REACT_TYPE_CONV]')
|
|
||||||
|
|
||||||
WaferSize = xlate( 'PROD_SPEC', PSNo, 'SUB_WAFER_SIZE', 'X' )
|
|
||||||
SWAP 75 WITH '' IN WaferSize
|
|
||||||
SWAP 100 WITH '' IN WaferSize
|
|
||||||
SWAP 125 WITH '' IN WaferSize
|
|
||||||
SWAP 150 WITH '' IN WaferSize
|
|
||||||
SWAP 200 WITH '' IN WaferSize
|
|
||||||
SWAP 'mm' WITH '' IN WaferSize
|
|
||||||
WaferSize = trim( WaferSize )
|
|
||||||
|
|
||||||
RecipeId = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
|
||||||
EPIGases = XLATE( 'RECIPE', RecipeId, RECIPE_EPI_GASES$, 'X' )
|
|
||||||
|
|
||||||
* Reactors = WOStepRec<WO_STEP_REACTORS$>
|
|
||||||
Reactors = Xlate('PROD_SPEC', PSNo, PROD_SPEC_QUAL_REACTS$, 'X')
|
|
||||||
* BlockedReactors = WOStepRec<WO_STEP_BLOCKED_REACTORS$>
|
|
||||||
BlockedReactors = Xlate('PROD_SPEC', PSNo, PROD_SPEC_BLOCKED_REACTS$, 'X')
|
|
||||||
SchedReactors = XLATE('WO_LOG',WONo,'SCHED_REACTS','X')
|
|
||||||
|
|
||||||
CONVERT @VM TO ',' IN Reactors
|
|
||||||
CONVERT @VM TO ',' IN BlockedReactors
|
|
||||||
|
|
||||||
IF WaferQty > 0 THEN
|
|
||||||
LineCnt += 1
|
|
||||||
Results<LineCnt,1> = OCONV(XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ),'[SPEC_TYPE_CONV]') ;* Spec Type
|
|
||||||
Results<LineCnt,2> = OCONV(WONo,'MD0') ;* WO
|
|
||||||
Results<LineCnt,3> = CompanyName ;* Company Name
|
|
||||||
Results<LineCnt,4> = OCONV(WaferQty,'MDO') ;* Wafer Qty
|
|
||||||
Results<LineCnt,5> = OCONV(PSNo,'MD0') ;* Prod Spec ID
|
|
||||||
Results<LineCnt,6> = CustPNs ;* Customer Part Numbers
|
|
||||||
Results<LineCnt,7> = PSReactType ;* Reactor type for Prod Spec
|
|
||||||
Results<LineCnt,8> = SchedReactors
|
|
||||||
Results<LineCnt,9> = WaferSize ;* Wafer Size
|
|
||||||
Results<LineCnt,10> = XLATE( 'PROD_SPEC', PSNo, 'TUBE_PRESSURE_TYPE', 'X' ) ;* Tube Pressure Type
|
|
||||||
Results<LineCnt,11> = EPIGases
|
|
||||||
Results<LineCnt,12> = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' ) ;* Dopant L1
|
|
||||||
Results<LineCnt,13> = XLATE( 'RECIPE', RecipeId, RECIPE_CAP_BURST_GASES$, 'X' ) ;* Cap Burst Gases
|
|
||||||
Results<LineCnt,14> = ShipThickTarget
|
|
||||||
Results<LineCnt,15> = ShipResTarget
|
|
||||||
Results<LineCnt,16> = OCONV(ExpectedRxDts<1,1>,'D4/')
|
|
||||||
Results<LineCnt,17> = OCONV(XLATE('WO_MAT',WONo:'*1',WO_MAT_RX_DTM$,'X')[1,'.'],'D4/')
|
|
||||||
Results<LineCnt,18> = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D4/')
|
|
||||||
Results<LineCnt,19> = Reactors
|
|
||||||
Results<LineCnt,20> = BlockedReactors
|
|
||||||
Results<LineCnt,21> = MUWafers
|
|
||||||
TempLine = Results<LineCnt>
|
|
||||||
CONVERT '"' TO '' IN TempLine
|
|
||||||
Results<LineCnt> = TempLine
|
|
||||||
END
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
PasteBlob = Results
|
|
||||||
|
|
||||||
* * * * * *
|
|
||||||
|
|
||||||
SWAP @VM WITH CHAR(9) IN PasteBlob
|
|
||||||
SWAP @FM WITH CRLF$ IN PasteBlob
|
|
||||||
CALL Set_Property('CLIPBOARD', 'TEXT', PasteBlob)
|
|
||||||
|
|
||||||
|
|
||||||
ExportColCnt = 20
|
|
||||||
|
|
||||||
|
|
||||||
* * * Paste it into a blank Excel Sheet
|
|
||||||
|
|
||||||
xlApp = OleCreateInstance("excel.Application")
|
|
||||||
|
|
||||||
IF OleStatus() THEN
|
|
||||||
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
|
|
||||||
ErrorMsg = 'Excel failed to start.':CRLF$:CRLF$
|
|
||||||
ErrorMsg := 'The data from this export is on your clipboard and can be pasted into Excel on your local machine using <Ctrl><V> .'
|
|
||||||
|
|
||||||
ErrMsg(ErrorMsg)
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
xlWorkBooks = OleGetProperty(xlApp, "Workbooks")
|
|
||||||
xlWorkBook = OleCallMethod(xlWorkBooks,'Add')
|
|
||||||
|
|
||||||
* * * wait a second
|
|
||||||
|
|
||||||
Now = Time()
|
|
||||||
LOOP
|
|
||||||
CALL Yield()
|
|
||||||
WHILE Time() EQ Now
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
OlePutProperty(XlApp, 'Visible', xlSheetVisible)
|
|
||||||
|
|
||||||
void = OleCallMethod(xlWorkBook,'Activate')
|
|
||||||
xlActiveSheet = OleGetProperty(xlWorkBook,'ActiveSheet')
|
|
||||||
void = OleCallMethod(xlActiveSheet,'Paste')
|
|
||||||
|
|
||||||
eXcelCols = obj_Export('ExcelCol',TextColNos) ;* Returns alpha Excel columns from numeric columns
|
|
||||||
|
|
||||||
FirstLastCols = obj_Export('ExcelCol',1:@VM:ExportColCnt)
|
|
||||||
|
|
||||||
FirstColumn = FirstLastCols[1,@VM]
|
|
||||||
LastColumn = FirstLastCols[COL2()+1,@VM]
|
|
||||||
|
|
||||||
range = OleGetProperty(xlActiveSheet,'Range',FirstColumn:'1:':LastColumn:'1')
|
|
||||||
font = OleGetProperty(range,'Font')
|
|
||||||
|
|
||||||
OlePutProperty(font,'FontStyle','Bold')
|
|
||||||
OlePutProperty(font,'UnderLine',xlUnderlineStyleSingle)
|
|
||||||
|
|
||||||
column = OleGetProperty(xlActiveSheet,'Columns',FirstColumn:':':LastColumn)
|
|
||||||
void = OleCallMethod(column,'AutoFit')
|
|
||||||
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,263 +0,0 @@
|
|||||||
COMPILE SUBROUTINE Export_WO_Log_Orig( Dummy )
|
|
||||||
|
|
||||||
DECLARE FUNCTION Msg, Dialog_Box, Utility, obj_Export, obj_WO_Log
|
|
||||||
DECLARE FUNCTION Set_Printer, Get_Printer, obj_Install, Utility, obj_MUWafers
|
|
||||||
|
|
||||||
DECLARE SUBROUTINE Btree.Extract, RList, END_Dialog, Make.List, Msg, ErrMsg, SetInitDirOptions
|
|
||||||
|
|
||||||
$INSERT LSL_USERS_EQU
|
|
||||||
$INSERT MSG_EQUATES
|
|
||||||
$INSERT RLIST_EQUATES
|
|
||||||
$INSERT OIPRINT_EQUATES
|
|
||||||
$INSERT WO_LOG_EQU
|
|
||||||
$INSERT WO_STEP_EQU
|
|
||||||
$INSERT WO_MAT_EQUATES
|
|
||||||
$INSERT COMPANY_EQU
|
|
||||||
$INSERT QUOTE_EQU
|
|
||||||
$INSERT QUOTE_SPEC_EQU
|
|
||||||
$INSERT RECIPE_EQU
|
|
||||||
$INSERT ORDER_DET_EQU
|
|
||||||
$INSERT PROD_SPEC_EQUATES
|
|
||||||
$INSERT EXCEL_EQU
|
|
||||||
|
|
||||||
CRLF$ = \0D0A\
|
|
||||||
|
|
||||||
OPEN 'WO_STEP' TO WOStepTable ELSE
|
|
||||||
ErrMsg('Unable to open "WO_STEP" table in EXPORT_WO_LOG routine.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
OPEN 'DICT.WO_STEP' TO DictWOStep ELSE
|
|
||||||
ErrMsg('Unable to open "DICT.WO_STEP" table in EXPORT_WO_LOG routine.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
Def = ""
|
|
||||||
Def<MTEXT$> = "Selecting Uncheduled Work Orders..."
|
|
||||||
Def<MTYPE$> = "U"
|
|
||||||
|
|
||||||
MsgUp = Msg(@window, Def)
|
|
||||||
|
|
||||||
SelectSent = 'SELECT WO_STEP WITH SCHEDULED NE "Yes" '
|
|
||||||
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
|
||||||
|
|
||||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS NE "CL" "COMP" '
|
|
||||||
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS = "NEW" "RTP" "RTS" "RX" "INPR" '
|
|
||||||
*RList(SelectSent,TARGET_ACTIVELIST$,'','','')
|
|
||||||
|
|
||||||
WOStepKeys = ''
|
|
||||||
Done = 0
|
|
||||||
LOOP
|
|
||||||
READNEXT WOStepKey ELSE Done = 1
|
|
||||||
UNTIL Done
|
|
||||||
WOStepKeys<-1> = WOStepKey
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
CONVERT @VM TO @FM IN WOStepKeys
|
|
||||||
|
|
||||||
IF WOStepKeys = '' THEN
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
ErrMsg('No Work Orders remain unscheduled.')
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
|
|
||||||
Make.List('',WOStepKeys,WOStepTable,DictWOStep)
|
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
ErrMsg(errCode)
|
|
||||||
END
|
|
||||||
|
|
||||||
Results = ''
|
|
||||||
Results<1,1> = 'Spec Type'
|
|
||||||
Results<1,2> = 'WO'
|
|
||||||
Results<1,3> = 'Customer'
|
|
||||||
Results<1,4> = 'Qty'
|
|
||||||
Results<1,5> = 'PSN'
|
|
||||||
Results<1,6> = 'Cust Part Numbers'
|
|
||||||
Results<1,7> = 'Reactor Type'
|
|
||||||
Results<1,8> = 'Sched Reacts'
|
|
||||||
Results<1,9> = 'Inch'
|
|
||||||
Results<1,10> = 'Tube Press Type'
|
|
||||||
Results<1,11> = 'Epi Gases'
|
|
||||||
Results<1,12> = 'Dopant L1'
|
|
||||||
Results<1,13> = 'Cap/Burst Gases'
|
|
||||||
Results<1,14> = 'Thick Target'
|
|
||||||
Results<1,15> = 'Res Target'
|
|
||||||
Results<1,16> = 'Expected Rx Dt'
|
|
||||||
Results<1,17> = 'Received Date'
|
|
||||||
Results<1,18> = 'Promised Ship'
|
|
||||||
Results<1,19> = 'Qual'
|
|
||||||
Results<1,20> = 'Blkd'
|
|
||||||
Results<1,21> = 'MU Wfrs'
|
|
||||||
|
|
||||||
Done = 0
|
|
||||||
LineCnt = 1
|
|
||||||
LOOP
|
|
||||||
READNEXT WOStepKey ELSE Done = 1
|
|
||||||
UNTIL Done
|
|
||||||
|
|
||||||
READ WOStepRec FROM WOStepTable,WOStepKey THEN
|
|
||||||
|
|
||||||
IF WOStepRec<WO_STEP_SCHEDULED$> NE '1' THEN
|
|
||||||
|
|
||||||
WONo = WOStepKey[1,'*']
|
|
||||||
|
|
||||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
|
||||||
WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
|
|
||||||
|
|
||||||
CassCustPNs = XLATE('WO_MAT',WOMatKeys,WO_MAT_CUST_PART_NO$,'X')
|
|
||||||
CustPNs = ''
|
|
||||||
FOR I = 1 TO COUNT(CassCustPNs,@VM) + (CassCustPNs NE '')
|
|
||||||
LOCATE CassCustPNs<1,I> IN CustPNs USING @VM SETTING POS ELSE
|
|
||||||
CustPNs = INSERT(CustPNs,1,Pos,0,CassCustPNs<1,I>)
|
|
||||||
END
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
CompanyName = XLATE( 'COMPANY', WORec<WO_LOG_CUST_NO$>,COMPANY_CO_NAME$,'X')
|
|
||||||
SWAP ',' WITH '-' IN CompanyName
|
|
||||||
|
|
||||||
WaferQty = SUM(XLATE('WO_MAT',WOMatKeys,WO_MAT_WAFER_QTY$,'X'))
|
|
||||||
IF WaferQty > 0 THEN
|
|
||||||
ExpectedRxDts = ''
|
|
||||||
END ELSE
|
|
||||||
OrderNo = WORec<WO_LOG_ORDER_NO$>
|
|
||||||
OrderItems = WORec<WO_LOG_ORDER_ITEM$>
|
|
||||||
OrderDetKeys = ''
|
|
||||||
FOR N = 1 TO COUNT(OrderItems,@VM) + (OrderItems NE '')
|
|
||||||
OrderDetKeys<1,N> = OrderNo:'*':OrderItems<1,N>
|
|
||||||
NEXT N
|
|
||||||
WaferQty = SUM(XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_ITEM_QTY$,'X'))
|
|
||||||
ExpectedRxDts = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_EXP_RX_DT$,'X')
|
|
||||||
END
|
|
||||||
|
|
||||||
MUWafers = obj_MUWafers('AvailWafers',WONo:@RM:WORec:@RM:0:@RM:1)
|
|
||||||
ShipThickTarget = XLATE('WO_LOG',WONo,'SHIP_THICK_TARGET','X')
|
|
||||||
ShipResTarget = XLATE('WO_LOG',WONo,'SHIP_RES_TARGET','X')
|
|
||||||
|
|
||||||
CustPSNs = XLATE('WO_STEP',@RECORD<34>,1,'X')
|
|
||||||
|
|
||||||
SWAP @VM WITH '\' IN CustPNs
|
|
||||||
|
|
||||||
PSNo = WOStepRec<WO_STEP_PROD_SPEC_ID$>
|
|
||||||
|
|
||||||
PSReactType = OCONV(XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X'),'[REACT_TYPE_CONV]')
|
|
||||||
|
|
||||||
WaferSize = xlate( 'PROD_SPEC', PSNo, 'SUB_WAFER_SIZE', 'X' )
|
|
||||||
SWAP 75 WITH '' IN WaferSize
|
|
||||||
SWAP 100 WITH '' IN WaferSize
|
|
||||||
SWAP 125 WITH '' IN WaferSize
|
|
||||||
SWAP 150 WITH '' IN WaferSize
|
|
||||||
SWAP 200 WITH '' IN WaferSize
|
|
||||||
SWAP 'mm' WITH '' IN WaferSize
|
|
||||||
WaferSize = trim( WaferSize )
|
|
||||||
|
|
||||||
RecipeId = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
|
||||||
EPIGases = XLATE( 'RECIPE', RecipeId, RECIPE_EPI_GASES$, 'X' )
|
|
||||||
|
|
||||||
Reactors = WOStepRec<WO_STEP_REACTORS$>
|
|
||||||
BlockedReactors = WOStepRec<WO_STEP_BLOCKED_REACTORS$>
|
|
||||||
SchedReactors = XLATE('WO_LOG',WONo,'SCHED_REACTS','X')
|
|
||||||
|
|
||||||
CONVERT @VM TO ',' IN Reactors
|
|
||||||
CONVERT @VM TO ',' IN BlockedReactors
|
|
||||||
|
|
||||||
IF WaferQty > 0 THEN
|
|
||||||
LineCnt += 1
|
|
||||||
Results<LineCnt,1> = OCONV(XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ),'[SPEC_TYPE_CONV]') ;* Spec Type
|
|
||||||
Results<LineCnt,2> = OCONV(WONo,'MD0') ;* WO
|
|
||||||
Results<LineCnt,3> = CompanyName ;* Company Name
|
|
||||||
Results<LineCnt,4> = OCONV(WaferQty,'MDO') ;* Wafer Qty
|
|
||||||
Results<LineCnt,5> = OCONV(PSNo,'MD0') ;* Prod Spec ID
|
|
||||||
Results<LineCnt,6> = CustPNs ;* Customer Part Numbers
|
|
||||||
Results<LineCnt,7> = PSReactType ;* Reactor type for Prod Spec
|
|
||||||
Results<LineCnt,8> = SchedReactors
|
|
||||||
Results<LineCnt,9> = WaferSize ;* Wafer Size
|
|
||||||
Results<LineCnt,10> = XLATE( 'PROD_SPEC', PSNo, 'TUBE_PRESSURE_TYPE', 'X' ) ;* Tube Pressure Type
|
|
||||||
Results<LineCnt,11> = EPIGases
|
|
||||||
Results<LineCnt,12> = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' ) ;* Dopant L1
|
|
||||||
Results<LineCnt,13> = XLATE( 'RECIPE', RecipeId, RECIPE_CAP_BURST_GASES$, 'X' ) ;* Cap Burst Gases
|
|
||||||
Results<LineCnt,14> = ShipThickTarget
|
|
||||||
Results<LineCnt,15> = ShipResTarget
|
|
||||||
Results<LineCnt,16> = OCONV(ExpectedRxDts<1,1>,'D4/')
|
|
||||||
Results<LineCnt,17> = OCONV(XLATE('WO_MAT',WONo:'*1',WO_MAT_RX_DTM$,'X')[1,'.'],'D4/')
|
|
||||||
Results<LineCnt,18> = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D4/')
|
|
||||||
Results<LineCnt,19> = Reactors
|
|
||||||
Results<LineCnt,20> = BlockedReactors
|
|
||||||
Results<LineCnt,21> = MUWafers
|
|
||||||
TempLine = Results<LineCnt>
|
|
||||||
CONVERT '"' TO '' IN TempLine
|
|
||||||
Results<LineCnt> = TempLine
|
|
||||||
END
|
|
||||||
END
|
|
||||||
END
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
PasteBlob = Results
|
|
||||||
|
|
||||||
* * * * * *
|
|
||||||
|
|
||||||
SWAP @VM WITH CHAR(9) IN PasteBlob
|
|
||||||
SWAP @FM WITH CRLF$ IN PasteBlob
|
|
||||||
CALL Set_Property('CLIPBOARD', 'TEXT', PasteBlob)
|
|
||||||
|
|
||||||
|
|
||||||
ExportColCnt = 20
|
|
||||||
|
|
||||||
|
|
||||||
* * * Paste it into a blank Excel Sheet
|
|
||||||
|
|
||||||
xlApp = OleCreateInstance("excel.Application")
|
|
||||||
|
|
||||||
IF OleStatus() THEN
|
|
||||||
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
|
|
||||||
ErrorMsg = 'Excel failed to start.':CRLF$:CRLF$
|
|
||||||
ErrorMsg := 'The data from this export is on your clipboard and can be pasted into Excel on your local machine using <Ctrl><V> .'
|
|
||||||
|
|
||||||
ErrMsg(ErrorMsg)
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
xlWorkBooks = OleGetProperty(xlApp, "Workbooks")
|
|
||||||
xlWorkBook = OleCallMethod(xlWorkBooks,'Add')
|
|
||||||
|
|
||||||
* * * wait a second
|
|
||||||
|
|
||||||
Now = Time()
|
|
||||||
LOOP
|
|
||||||
CALL Yield()
|
|
||||||
WHILE Time() EQ Now
|
|
||||||
REPEAT
|
|
||||||
|
|
||||||
OlePutProperty(XlApp, 'Visible', xlSheetVisible)
|
|
||||||
|
|
||||||
void = OleCallMethod(xlWorkBook,'Activate')
|
|
||||||
xlActiveSheet = OleGetProperty(xlWorkBook,'ActiveSheet')
|
|
||||||
void = OleCallMethod(xlActiveSheet,'Paste')
|
|
||||||
|
|
||||||
eXcelCols = obj_Export('ExcelCol',TextColNos) ;* Returns alpha Excel columns from numeric columns
|
|
||||||
|
|
||||||
FirstLastCols = obj_Export('ExcelCol',1:@VM:ExportColCnt)
|
|
||||||
|
|
||||||
FirstColumn = FirstLastCols[1,@VM]
|
|
||||||
LastColumn = FirstLastCols[COL2()+1,@VM]
|
|
||||||
|
|
||||||
range = OleGetProperty(xlActiveSheet,'Range',FirstColumn:'1:':LastColumn:'1')
|
|
||||||
font = OleGetProperty(range,'Font')
|
|
||||||
|
|
||||||
OlePutProperty(font,'FontStyle','Bold')
|
|
||||||
OlePutProperty(font,'UnderLine',xlUnderlineStyleSingle)
|
|
||||||
|
|
||||||
column = OleGetProperty(xlActiveSheet,'Columns',FirstColumn:':':LastColumn)
|
|
||||||
void = OleCallMethod(column,'AutoFit')
|
|
||||||
|
|
||||||
Msg(@window, MsgUp)
|
|
||||||
|
|
||||||
RETURN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -593,15 +593,9 @@ Service RemoveRunID(RunID)
|
|||||||
LogData<2> = @USER4
|
LogData<2> = @USER4
|
||||||
LogData<3> = EtchID
|
LogData<3> = EtchID
|
||||||
Machine = Environment_Services('GetServer')
|
Machine = Environment_Services('GetServer')
|
||||||
If Machine NE 'MESSA01EC' then
|
|
||||||
EmailAddr = 'dstieber@srpcs.com,Dan.Crisp@infineon.com,4805890050@vtext.com,6613649828@txt.att.net'
|
|
||||||
EmailMsg = 'Error removing Run ID: ':RunID:' from APP_INFO*PRERUN_GAN_RUN_IDS'
|
|
||||||
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$, EmailAddr, EmailMsg)
|
|
||||||
end else
|
|
||||||
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
@ -1763,15 +1757,8 @@ Service RemoveCassFromWIP(WOMatKey)
|
|||||||
end else
|
end else
|
||||||
LogData<6> = 'Error removing Cass ID ':WOMatKey:' from queue ':CassQueue:'. Number of attempts: ':NumAttempts:'.'
|
LogData<6> = 'Error removing Cass ID ':WOMatKey:' from queue ':CassQueue:'. Number of attempts: ':NumAttempts:'.'
|
||||||
end
|
end
|
||||||
Machine = Environment_Services('GetServer')
|
|
||||||
If Machine NE 'MESSA01EC' then
|
|
||||||
EmailAddr = 'dstieber@srpcs.com,6613649828@txt.att.net'
|
|
||||||
EmailMsg = 'Error removing Cass ID ':WOMatKey:' from queue ':CassQueue:'.'
|
|
||||||
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$, EmailAddr, EmailMsg)
|
|
||||||
end else
|
|
||||||
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
// Cass not in queue that was passed in. Log this information.
|
// Cass not in queue that was passed in. Log this information.
|
||||||
LogData = ''
|
LogData = ''
|
||||||
@ -1781,15 +1768,8 @@ Service RemoveCassFromWIP(WOMatKey)
|
|||||||
LogData<4> = CassQueue
|
LogData<4> = CassQueue
|
||||||
LogData<5> = CassQueue
|
LogData<5> = CassQueue
|
||||||
LogData<6> = 'Error in ':Service:' service. Cass not in QueueID ':CassQueue:'.'
|
LogData<6> = 'Error in ':Service:' service. Cass not in QueueID ':CassQueue:'.'
|
||||||
Machine = Environment_Services('GetServer')
|
|
||||||
If Machine NE 'MESSA01EC' then
|
|
||||||
EmailAddr = 'dstieber@srpcs.com,6613649828@txt.att.net'
|
|
||||||
EmailMsg = 'Error in ':Service:' service. Cass not in QueueID ':CassQueue:'.'
|
|
||||||
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$, EmailAddr, EmailMsg)
|
|
||||||
end else
|
|
||||||
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
// WOMatKey is null
|
// WOMatKey is null
|
||||||
LogData = ''
|
LogData = ''
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -69,4 +69,3 @@ API healthinfo.GET
|
|||||||
HTTP_Resource_Services('LoremIpsum')
|
HTTP_Resource_Services('LoremIpsum')
|
||||||
|
|
||||||
end api
|
end api
|
||||||
|
|
||||||
|
@ -46,19 +46,19 @@ Compile function Hold_Services(@Service, @Params)
|
|||||||
|
|
||||||
***********************************************************************************************************************/
|
***********************************************************************************************************************/
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
$insert LOGICAL
|
|
||||||
$Insert SERVICE_SETUP
|
|
||||||
|
|
||||||
|
$Insert APP_INSERTS
|
||||||
|
$Insert SERVICE_SETUP
|
||||||
$Insert MSG_EQUATES
|
$Insert MSG_EQUATES
|
||||||
$Insert DICT_EQUATES
|
$Insert DICT_EQUATES
|
||||||
$Insert WO_MAT_EQUATES
|
$Insert WO_MAT_EQUATES
|
||||||
$INSERT NOTIFICATION_EQU
|
$Insert NOTIFICATION_EQU
|
||||||
|
|
||||||
|
|
||||||
Declare function Database_Services, Error_Services, Obj_Wm_In, Obj_Wm_Out, Unassigned, Wm_In_Services, Wm_Out_Services
|
Declare function Database_Services, Error_Services, Obj_Wm_In, Obj_Wm_Out, Unassigned, Wm_In_Services, Wm_Out_Services
|
||||||
Declare function PSN_Services, SRP_Rotate_Array, Datetime, Hold_Services, Memberof, Error_Services, Rds_Services
|
Declare function PSN_Services, SRP_Rotate_Array, Datetime, Hold_Services, Memberof, Error_Services, Rds_Services
|
||||||
|
Declare function Environment_Services, Utility, Logging_Services
|
||||||
Declare subroutine Database_Services, Error_Services, Obj_notes, Hold_Services, Obj_Wm_In, Obj_Wm_Out, Wm_In_Services
|
Declare subroutine Database_Services, Error_Services, Obj_notes, Hold_Services, Obj_Wm_In, Obj_Wm_Out, Wm_In_Services
|
||||||
Declare subroutine Wm_Out_Services, Rds_Services, Lot_Event_Services
|
Declare subroutine Wm_Out_Services, Rds_Services, Lot_Event_Services, Logging_Services
|
||||||
|
|
||||||
GoToService else
|
GoToService else
|
||||||
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
|
||||||
@ -361,29 +361,42 @@ Service OnHold(WOMatKey, HoldEntity, HoldEntityID, HoldType, HoldData, OperatorI
|
|||||||
If Error_Services("NoError") then
|
If Error_Services("NoError") then
|
||||||
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
|
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
|
||||||
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
|
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, True$, HoldType, OperatorID)
|
||||||
//Add in logging lot event
|
LotKey = ''
|
||||||
If UserId EQ '' then
|
|
||||||
UserId = OperatorId
|
|
||||||
end
|
|
||||||
Begin Case
|
Begin Case
|
||||||
Case HoldEntity EQ 'WM_IN'
|
Case HoldEntity EQ 'WM_IN'
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
Lot_Event_Services('CreateLotEvent', WMInKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WM_IN')
|
LotKey = 'I':WMInKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
Case HoldEntity EQ 'WM_OUT'
|
Case HoldEntity EQ 'WM_OUT'
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
Lot_Event_Services('CreateLotEvent', WMOutKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WM_OUT')
|
LotKey = 'O':WMOutKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
Case HoldEntity EQ 'RDS'
|
Case HoldEntity EQ 'RDS'
|
||||||
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
|
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
|
||||||
Lot_Event_Services('CreateLotEvent', RDSNo, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'RDS')
|
LotKey = 'R':RDSNo
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
Case HoldEntity EQ 'WO_MAT'
|
Case HoldEntity EQ 'WO_MAT'
|
||||||
Lot_Event_Services('CreateLotEvent', WOMatKey, CurrDTM, 'HOLD_ON', 'Lot placed on hold.', '', UserId, True$, 'WO_MAT')
|
LotKey = 'W':WOMatKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
End Case
|
End Case
|
||||||
|
Machine = Environment_Services('GetServer')
|
||||||
|
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||||
|
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
||||||
|
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||||
|
LogFileName = LotKey:'.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Lot ':LotKey:' of type ':HoldEntity:' placed on hold by user ':OperatorId
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Lot is already on hold.')
|
Error_Services('Add', 'Lot is already on hold.')
|
||||||
@ -497,29 +510,43 @@ Service OffHold(WOMatKey, HoldEntity, HoldEntityID, HoldType, HoldData, Operator
|
|||||||
If Error_Services("NoError") then
|
If Error_Services("NoError") then
|
||||||
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
|
Hold_Services("HoldNotification", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
|
||||||
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
|
Hold_Services("CreateComment", HoldEntity, HoldEntityID, Reason, False$, HoldType, OperatorID)
|
||||||
//Add in logging lot event
|
LotKey = ''
|
||||||
if UserID EQ '' then
|
|
||||||
UserId = OperatorId
|
|
||||||
end
|
|
||||||
Begin Case
|
Begin Case
|
||||||
Case HoldEntity EQ 'WM_IN'
|
Case HoldEntity EQ 'WM_IN'
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
Lot_Event_Services('CreateLotEvent', WMInKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_IN')
|
LotKey = 'I':WMInKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
Case HoldEntity EQ 'WM_OUT'
|
Case HoldEntity EQ 'WM_OUT'
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
Lot_Event_Services('CreateLotEvent', WMOutKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_OUT')
|
LotKey = 'O':WMOutKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
Case HoldEntity EQ 'RDS'
|
Case HoldEntity EQ 'RDS'
|
||||||
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
|
RDSNo = Xlate('WO_MAT', WOMatKey, WO_MAT_RDS_NO$, 'X')
|
||||||
Lot_Event_Services('CreateLotEvent', RDSNo, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'RDS')
|
LotKey = 'R':RDSNo
|
||||||
Case HoldEntity EQ 'WO_MAT'
|
Case HoldEntity EQ 'WO_MAT'
|
||||||
Lot_Event_Services('CreateLotEvent', WOMatKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WO_MAT')
|
LotKey = WOMatKey
|
||||||
|
Convert '*' to '.' in LotKey
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
|
Machine = Environment_Services('GetServer')
|
||||||
|
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||||
|
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||||
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
||||||
|
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||||
|
LogFileName = LotKey:'.csv'
|
||||||
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||||
|
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||||
|
LogData<2> = Machine
|
||||||
|
LogData<3> = 'Lot ':LotKey:' of type ':HoldEntity:' taken off hold by user ':OperatorId
|
||||||
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Lot is not on hold.')
|
Error_Services('Add', 'Lot is not on hold.')
|
||||||
|
@ -382,7 +382,7 @@ Service GetAllZebraPrinters()
|
|||||||
ZebraPrinterList<6> = 'MESZBRPRT007' : @VM : '10.95.1.13' : @VM : 9100
|
ZebraPrinterList<6> = 'MESZBRPRT007' : @VM : '10.95.1.13' : @VM : 9100
|
||||||
ZebraPrinterList<7> = 'MESZBRPRT008' : @VM : '10.95.164.24' : @VM : 9100
|
ZebraPrinterList<7> = 'MESZBRPRT008' : @VM : '10.95.164.24' : @VM : 9100
|
||||||
ZebraPrinterList<8> = 'MESZBRPRT0011' : @VM : '10.95.15.33' : @VM : 6101
|
ZebraPrinterList<8> = 'MESZBRPRT0011' : @VM : '10.95.15.33' : @VM : 6101
|
||||||
ZebraPrinterList<9> = 'FI_ZEBRA_PRINTER' : @VM : '10.95.164.55' : @VM : 9100
|
ZebraPrinterList<9> = 'FI_ZEBRA_PRINTER' : @VM : '10.95.164.68' : @VM : 9100
|
||||||
If Server EQ 'MESTSA01EC' OR Server EQ 'MESSA01EC' or Server EQ 'MESTSA09EC' |
|
If Server EQ 'MESTSA01EC' OR Server EQ 'MESSA01EC' or Server EQ 'MESTSA09EC' |
|
||||||
or Server EQ 'MESTSA010EC' or Server EQ 'MESTSA011EC' or Server EQ 'MESTSA012EC' then
|
or Server EQ 'MESTSA010EC' or Server EQ 'MESTSA011EC' or Server EQ 'MESTSA012EC' then
|
||||||
ZebraPrinterList<10> = 'JONATHAN_HOME_TEST' : @VM : '192.168.0.123' : @VM : 9100
|
ZebraPrinterList<10> = 'JONATHAN_HOME_TEST' : @VM : '192.168.0.123' : @VM : 9100
|
||||||
|
@ -161,7 +161,3 @@ API Lock.HEAD
|
|||||||
end
|
end
|
||||||
|
|
||||||
end api
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
460
LSL2/STPROC/LOTOPERATION_API.txt
Normal file
460
LSL2/STPROC/LOTOPERATION_API.txt
Normal file
@ -0,0 +1,460 @@
|
|||||||
|
Function Lotoperation_API(@API)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
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 : Lotoperation_API
|
||||||
|
|
||||||
|
Description : API logic for the Lotoperation resource.
|
||||||
|
|
||||||
|
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
|
||||||
|
|
||||||
|
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
|
||||||
|
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
|
||||||
|
FullEndpointURL - The URL submitted by the client, including query params.
|
||||||
|
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
|
||||||
|
EndpointSegment - The URL endpoint segment.
|
||||||
|
ParentURL - The URL path preceeding the current endpoint.
|
||||||
|
CurrentAPI - The name of this stored procedure.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
|
||||||
|
- APIPattern must follow this structure Lotoperation[.ID.[<Property>]]
|
||||||
|
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
|
||||||
|
Examples:
|
||||||
|
- Lotoperation.POST
|
||||||
|
- Lotoperation.ID.PUT
|
||||||
|
- Lotoperation.ID.firstName.GET
|
||||||
|
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
|
||||||
|
services do not rely upon anything being returned in the response. This is what the
|
||||||
|
various services like SetResponseBody and SetResponseStatus services are for. A response
|
||||||
|
value is only helpful if the developers want to use it for debug purposes.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
05/20/25 xxx Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare function OI_Wizard_Services, Lot_Operation_Services, Database_Services, Lot_Services, Clean_Services
|
||||||
|
Declare function Met_Test_Services
|
||||||
|
Declare subroutine Lot_Services, Met_Test_Services, Wafer_Counter_Services
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$insert API_SETUP
|
||||||
|
$insert HTTP_INSERTS
|
||||||
|
$insert OI_WIZARD_EQUATES
|
||||||
|
$insert LOT_OPERATION_EQUATES
|
||||||
|
|
||||||
|
GoToAPI else
|
||||||
|
// The specific resource endpoint doesn't have a API handler yet.
|
||||||
|
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Response OR ''
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Endpoint Handlers
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.HEAD
|
||||||
|
API lotoperation.GET
|
||||||
|
|
||||||
|
HTTP_Resource_Services('LoremIpsum')
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.addoperation.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotId = SRP_JSON(objBody, 'GetValue', 'NewLotOperationData.LotId')
|
||||||
|
OperationId = SRP_JSON(objBody, 'GetValue', 'NewLotOperationData.OperationId')
|
||||||
|
Sequence = SRP_JSON(objBody, 'GetValue', 'NewLotOperationData.Sequence')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
If RowExists('OPERATION', OperationId) then
|
||||||
|
If Sequence NE '' then
|
||||||
|
NewOperationId = Lot_Operation_Services('AddOperationToLot', LotId, OperationId, Sequence, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
LotJsonString = Lot_Services('ConvertLotRecordToJson', LotId, '', UserId)
|
||||||
|
HTTP_Services('SetResponseBody', LotJsonString, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Sequence.'
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Operation.'
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Lot.'
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
API lotoperation.removeoperation.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationIdToRemove')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
LotId = Database_Services('ReadDataColumn', 'LOT_OPERATION', LotOperationId, LOT_OPERATION_LOT_ID$, True$, 0, False$)
|
||||||
|
Removed = Lot_Operation_Services('RemoveLotOperation', LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
LotJsonString = Lot_Services('ConvertLotRecordToJson', LotId, '', UserId)
|
||||||
|
HTTP_Services('SetResponseBody', LotJsonString, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Operation.'
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
API lotoperation.startlotoperation.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'lotOperationId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
LotProcessStarted = Lot_Operation_Services('StartLotOperation', LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
LotOperationJson = Lot_Operation_Services('ConvertRecordToJson', LotOperationId)
|
||||||
|
HTTP_Services('SetResponseBody', LotOperationJson,False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error while moving lot in. ' : Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.completelotoperation.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'lotOperationId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
LotProcessCompleted = Lot_Operation_Services('CompleteLotOperation', LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
LotOperationJson = Lot_Operation_Services('ConvertRecordToJson', LotOperationId)
|
||||||
|
HTTP_Services('SetResponseBody', LotOperationJson)
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.ID.HEAD
|
||||||
|
API lotoperation.ID.GET
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
LotOperationId = EndpointSegment
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
LotOperationJson = Lot_Operation_Services('ConvertRecordToJson', LotOperationId)
|
||||||
|
HTTP_Services('SetResponseBody', LotOperationJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Operation not found in database.'
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.associatemettest.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
|
||||||
|
MetTestId = SRP_JSON(objBody, 'GetValue', 'MetTestId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
Met_Test_Services('AttachMetTestToLotOperation', MetTestId, LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.removemettest.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
|
||||||
|
MetTestId = SRP_JSON(objBody, 'GetValue', 'MetTestId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
Met_Test_Services('RemoveMetTestFromLotOperation', MetTestId, LotOperationId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
HTTP_Services('SetResponseBody', LotJsonString, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lotoperation.associatewafercounter.POST
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPPostString', True$)
|
||||||
|
// The POST string will have been encoded so use percent (URL) decoding.
|
||||||
|
DecodedJSON = HTTP_Services('DecodePercentString', Body)
|
||||||
|
If SRP_JSON(objBody, 'Parse', Body) EQ '' then
|
||||||
|
LotOperationId = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
|
||||||
|
WaferCounterId = SRP_JSON(objBody, 'GetValue', 'WaferCounterId')
|
||||||
|
SRP_JSON(objBody, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
Wafer_Counter_Services('AssociateWaferCounter', LotOperationId, WaferCounterId, UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
@ -38,9 +38,12 @@ Function Lot_API(@API)
|
|||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare function OI_Wizard_Services, Lot_Services, Database_Services, PSN_Services, Clean_Services
|
||||||
|
|
||||||
$insert APP_INSERTS
|
$insert APP_INSERTS
|
||||||
$insert API_SETUP
|
$insert API_SETUP
|
||||||
$insert HTTP_INSERTS
|
$insert HTTP_INSERTS
|
||||||
|
$Insert OI_WIZARD_EQUATES
|
||||||
|
|
||||||
GoToAPI else
|
GoToAPI else
|
||||||
// The specific resource endpoint doesn't have a API handler yet.
|
// The specific resource endpoint doesn't have a API handler yet.
|
||||||
@ -55,3 +58,159 @@ Return Response OR ''
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
API lot.ID.HEAD
|
||||||
|
API lot.ID.GET
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
UserId = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
LotId = EndpointSegment
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
LotJson = Lot_Services('ConvertLotRecordToJson', LotId, '', UserId)
|
||||||
|
HTTP_Services('SetResponseBody', LotJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ResponseCode = 500
|
||||||
|
ErrorMessage = 'Lot not found in database.'
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lot.getlotbylegacylotid.HEAD
|
||||||
|
API lot.getlotbylegacylotid.GET
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
ResponseCode = ''
|
||||||
|
ResponseMessage = ''
|
||||||
|
Body = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
If ValidSession then
|
||||||
|
UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
|
||||||
|
StatusCode = ''
|
||||||
|
Body = HTTP_Services('GetHTTPGetString')
|
||||||
|
|
||||||
|
LegacyLotId = Http_Services('GetQueryField', 'LegacyLotId')
|
||||||
|
LegacyLotType = Http_Services('GetQueryField', 'LegacyLotType')
|
||||||
|
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', LegacyLotId, LegacyLotType)
|
||||||
|
LotJson = Lot_Services('ConvertLotRecordToJson', LotId, '', UserId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
HTTP_Services('SetResponseBody', LotJson, False$, 'application/hal+json')
|
||||||
|
ResponseCode = 200
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
ResponseCode = 500
|
||||||
|
end
|
||||||
|
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid session. Reauthentication required.'
|
||||||
|
ResponseCode = 401
|
||||||
|
end
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
API lot.ID.getrecipeoptions.HEAD
|
||||||
|
API lot.ID.getrecipeoptions.GET
|
||||||
|
|
||||||
|
JSONCollection = ''
|
||||||
|
OIWizardID = ''
|
||||||
|
Cookies = HTTP_Services('GetHTTPCookie')
|
||||||
|
For each Cookie in Cookies using ';'
|
||||||
|
Key = Field(Cookie, '=', 1)
|
||||||
|
If Key EQ 'sessionID' then
|
||||||
|
OIWizardID = Field(Cookie, '=', 2)
|
||||||
|
end
|
||||||
|
Next Cookie
|
||||||
|
|
||||||
|
ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
|
||||||
|
If ValidSession then
|
||||||
|
LotId = EndpointSegment
|
||||||
|
PSN = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_PROD_SPEC_ID$, True$, 0, False$)
|
||||||
|
RecipeParameters = PSN_Services('GetAllMetrologyRecipes', PSN, True$, True$, True$, True$)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If Body NE '' then
|
||||||
|
RequestJson = HTTP_Services('DecodePercentString', Body)
|
||||||
|
objJSONResponse = ''
|
||||||
|
If SRP_Json(objJSONResponse, 'New', 'Object') then
|
||||||
|
//Available Tools
|
||||||
|
If SRP_Json(objCleanTools, 'New', 'Array') then
|
||||||
|
CleanTools = Clean_Services('GetCleanToolOptions')
|
||||||
|
for each CleanTool in CleanTools using @FM
|
||||||
|
SRP_Json(objCleanTools, 'AddValue', CleanTool, 'String')
|
||||||
|
Next CleanTool
|
||||||
|
SRP_Json(objJsonResponse, 'Set', 'CleanToolOptions', objCleanTools)
|
||||||
|
SRP_Json(objCleanTools, 'Release')
|
||||||
|
end
|
||||||
|
//Available Recipes
|
||||||
|
If SRP_Json(objCleanRecipes, 'New', 'Array') then
|
||||||
|
CleanRecipes = Clean_Services('GetCleanRecipeOptions')
|
||||||
|
for each Recipe in CleanRecipes using @VM
|
||||||
|
SRP_Json(objCleanRecipes, 'AddValue', Recipe, 'String')
|
||||||
|
Next Recipe
|
||||||
|
SRP_Json(objJsonResponse, 'Set', 'CleanRecipeOptions', objCleanRecipes)
|
||||||
|
SRP_Json(objCleanRecipes, 'Release')
|
||||||
|
end
|
||||||
|
JsonResponse = SRP_Json(objJsonResponse, 'Stringify', 'Styled')
|
||||||
|
SRP_Json(objJsonResponse, 'Release')
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error when creating JSON response.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'No body was sent with the request.')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
HTTP_Services('SetResponseStatus', 201, 'Success')
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseBody', JsonResponse, False$, 'application/hal+json')
|
||||||
|
end else
|
||||||
|
HTTP_Services('SetResponseStatus', 400, Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,17 +1,65 @@
|
|||||||
Compile function Lot_Event_Services(@Service, @Params)
|
Compile function Lot_Event_Services(@Service, @Params)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
Name : Lot_Event_Services
|
||||||
|
|
||||||
|
Description : Handler program for all LOT_EVENT 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)
|
||||||
|
07/01/25 djs Modified CreateLotEvent to use Transaction Queue instead of Proc Queue to avoid locking
|
||||||
|
errors on LOT table. Updated error throwing.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
Declare function Error_Services, Logging_Services, Environment_Services, Database_Services, RTI_CreateGUID, Lot_Services
|
$Insert SERVICE_SETUP
|
||||||
Declare function Lot_Event_Services
|
$insert APP_INSERTS
|
||||||
|
|
||||||
Declare subroutine Error_Services, Logging_Services, Database_Services, Lot_Services, Service_Services
|
|
||||||
|
|
||||||
$insert LOGICAL
|
|
||||||
$Insert LOT_EVENT_EQUATES
|
$Insert LOT_EVENT_EQUATES
|
||||||
$Insert LOT_EQUATES
|
$Insert LOT_EQUATES
|
||||||
$Insert LOT_OPERATION_EQUATES
|
$Insert LOT_OPERATION_EQUATES
|
||||||
|
|
||||||
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE'
|
Declare function Error_Services, Logging_Services, Environment_Services, Database_Services, RTI_CreateGUID
|
||||||
|
Declare function Lot_Event_Services, Lot_Services, NextKey
|
||||||
|
Declare subroutine Error_Services, Logging_Services, Database_Services, Lot_Services, Service_Services
|
||||||
|
Declare subroutine Transaction_Services
|
||||||
|
|
||||||
|
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE', 'SIGN_FQA', 'UNSIGN_FQA', 'ADD_LOT_OPERATION', 'REMOVE_LOT_OPERATION', 'MET_TEST', 'LOG_WAFER_COUNT', 'PACKAGING'
|
||||||
Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT'
|
Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT'
|
||||||
Options LEGACY_LOT_TYPES = 'RDS', 'WM_OUT', 'WM_IN'
|
Options LEGACY_LOT_TYPES = 'RDS', 'WM_OUT', 'WM_IN'
|
||||||
Options BOOLEAN = 'True', 'False'
|
Options BOOLEAN = 'True', 'False'
|
||||||
@ -20,15 +68,15 @@ GoToService
|
|||||||
|
|
||||||
Return Response or ""
|
Return Response or ""
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// SERVICES
|
// Services
|
||||||
//-----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, EventEquipmentId, OperatorId, IsLegacyLotId=BOOLEAN, LegacyLotType=LEGACY_LOT_TYPES)
|
Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, EventEquipmentId, OperatorId, IsLegacyLotId=BOOLEAN, LegacyLotType=LEGACY_LOT_TYPES)
|
||||||
|
|
||||||
GoSub InitEventLog
|
GoSub InitEventLog
|
||||||
ErrorMessage = ''
|
ErrorMessage = ''
|
||||||
//Handle Legacy Lots
|
// Handle Legacy Lots
|
||||||
If IsLegacyLotId then
|
If IsLegacyLotId then
|
||||||
If LegacyLotType NE '' then
|
If LegacyLotType NE '' then
|
||||||
LegacyLotId = LotId
|
LegacyLotId = LotId
|
||||||
@ -41,8 +89,11 @@ Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, E
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
If RowExists('LOT', LotId) then
|
If RowExists('LOT', LotId) then
|
||||||
|
CurrLotOperation = Lot_Services('GetLotCurrOperationId', LotId)
|
||||||
NewEventId = RTI_CreateGUID()
|
NewEventId = RTI_CreateGUID()
|
||||||
If NewEventId NE '' then
|
If NewEventId NE '' then
|
||||||
|
NextEventChronId = NextKey('LOT_EVENT')
|
||||||
|
If NextEventChronId NE 0 then
|
||||||
NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId)
|
NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
NewEventRec = ''
|
NewEventRec = ''
|
||||||
@ -50,18 +101,24 @@ Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, E
|
|||||||
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
|
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
|
||||||
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
|
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
|
||||||
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
|
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
|
||||||
|
NewEventRec<LOT_EVENT_EVENT_OPERATION_ID$> = CurrLotOperation
|
||||||
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
|
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
|
||||||
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
|
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
|
||||||
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
|
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
|
||||||
|
NewEventRec<LOT_EVENT_CHRON_ID$> = NextEventChronId
|
||||||
Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec)
|
Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', 'SetLatestLotEvent':@VM:LotId:@VM:NewEventId, True$)
|
Transaction_Services('PostWriteFieldTransaction', 'LOT', LotId, LOT_MOST_RECENT_LOT_EVENT_ID$, NewEventId)
|
||||||
|
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage')
|
ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error creating new event. Error calling NextKey("LOT_EVENT") to get LOT_EVENT_CHRON_ID.'
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error creating an event Id.'
|
ErrorMessage = 'Error creating an event Id.'
|
||||||
end
|
end
|
||||||
@ -89,6 +146,7 @@ Service CreateLotEvent(LotId, EventDateTime, EventType=EVENT_TYPES, EventNote, E
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service GetLotEventNextSequence(LotId)
|
Service GetLotEventNextSequence(LotId)
|
||||||
|
|
||||||
ErrorMessage = ''
|
ErrorMessage = ''
|
||||||
@ -111,26 +169,37 @@ Service GetLotEventNextSequence(LotId)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', ErrorMessage)
|
Error_Services('Add', ErrorMessage)
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
//Returns a @FM delimited list of events in sequence
|
|
||||||
|
// Returns a @FM delimited list of events in sequence
|
||||||
Service GetLotEventsInSequence(LotId)
|
Service GetLotEventsInSequence(LotId)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
LotEventsUnsorted = ''
|
LotEventsUnsorted = ''
|
||||||
LotEventsSorted = ''
|
LotEventsSorted = ''
|
||||||
LotEventsToReturn = ''
|
LotEventsToReturn = ''
|
||||||
If LotID NE '' then
|
If LotID NE '' then
|
||||||
//Get Operations
|
// Get Operations
|
||||||
LotEvents = Xlate('LOT', LotId, LOT_LOT_EVENTS$, 'X')
|
LotEvents = Xlate('LOT', LotId, LOT_LOT_EVENTS$, 'X')
|
||||||
for each LotEvent in LotEvents using @VM
|
for each LotEvent in LotEvents using @VM
|
||||||
ThisEventSequence = XLATE('LOT_EVENT', LotEvent, LOT_EVENT_SEQUENCE$, 'X')
|
ThisEventSequence = XLATE('LOT_EVENT', LotEvent, LOT_EVENT_SEQUENCE$, 'X')
|
||||||
LotEventsToReturn<ThisEventSequence> = LotEvent
|
LotEventsToReturn<ThisEventSequence> = LotEvent
|
||||||
Next LotOperation
|
Next LotOperation
|
||||||
end else
|
end else
|
||||||
//error: lot id was null
|
ErrorMsg = 'Error in ':Service:' service. Null LotID passed into service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
Response = LotEventsToReturn
|
Response = LotEventsToReturn
|
||||||
|
end else
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SetLatestLotEvent(LotId, LotEventId)
|
Service SetLatestLotEvent(LotId, LotEventId)
|
||||||
|
|
||||||
ErrorMessage = ''
|
ErrorMessage = ''
|
||||||
@ -148,14 +217,14 @@ Service SetLatestLotEvent(LotId, LotEventId)
|
|||||||
end else
|
end else
|
||||||
ErrorMessage = 'Lot Id ' : LotId : ' not found in LOT table.'
|
ErrorMessage = 'Lot Id ' : LotId : ' not found in LOT table.'
|
||||||
end
|
end
|
||||||
If ErrorMessage NE '' then
|
If ErrorMessage NE '' then Error_Services('Add', ErrorMessage)
|
||||||
Error_Services('Add', ErrorMessage)
|
|
||||||
end
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
/* * * * * * * * * *
|
|
||||||
* INTERNAL GOSUBS
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
* * * * * * * * * */
|
// Internal GoSubs
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
InitEventLog:
|
InitEventLog:
|
||||||
|
|
||||||
@ -170,3 +239,7 @@ InitEventLog:
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
524
LSL2/STPROC/LOT_OPERATION_SERVICES.txt
Normal file
524
LSL2/STPROC/LOT_OPERATION_SERVICES.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
Compile function Lot_Operation_Services(@Service, @Params)
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
Declare function Lot_Services, Database_Services, Error_Services, Srp_Sort_Array, Lot_Operation_Services
|
||||||
|
Declare function RTI_CreateGUID, MemberOf, SRP_JSON, Operation_Services, Datetime, Met_Test_Services, PSN_Services
|
||||||
|
Declare function Date_Services, SRP_Stopwatch
|
||||||
|
Declare subroutine Database_Services, Error_Services, SRP_JSON, Lot_Services, Lot_Event_Services, Lot_Operation_Services, SRP_Stopwatch
|
||||||
|
|
||||||
|
$insert LOGICAL
|
||||||
|
$insert LOT_EQUATES
|
||||||
|
$Insert LOT_OPERATION_EQUATES
|
||||||
|
$Insert OPERATION_EQUATES
|
||||||
|
$Insert MET_TEST_EQUATES
|
||||||
|
$Insert WAFER_COUNTER_EQUATES
|
||||||
|
|
||||||
|
Options OPERATION_TYPE = 'CLEAN', 'THICK_METROLOGY', 'RES_METROLOGY', 'SURFACE_METROLOGY', 'VISUAL_INSPECTION', 'PACKAGING'
|
||||||
|
|
||||||
|
GoToService
|
||||||
|
|
||||||
|
Return Response or ""
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// SERVICES
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Service AddOperationToLot(LotId, OperationId, PrescribedSequence, UserId)
|
||||||
|
|
||||||
|
Operation = ''
|
||||||
|
ErrorMessage = ''
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
If RowExists('OPERATION', OperationId) then
|
||||||
|
OperationActive = XLATE('OPERATION', OperationId, OPERATION_ACTIVE$, 'X')
|
||||||
|
If OperationActive then
|
||||||
|
If PrescribedSequence AND Num(PrescribedSequence) then
|
||||||
|
If Lot_Services('CanUserModifyLot', UserId) then
|
||||||
|
LotCurrOperation = Lot_Services('GetLotCurrOperationId', LotId)
|
||||||
|
CurrOperationSequence = Xlate('LOT_OPERATION', LotCurrOperation, LOT_OPERATION_OPERATION_SEQUENCE$, 'X')
|
||||||
|
If CurrOperationSequence LT PrescribedSequence then
|
||||||
|
//Get Curr Operation Sequence
|
||||||
|
Done = False$
|
||||||
|
LotCurrOperationSequence = Lot_Services('GetLotOperationSequence', LotId)
|
||||||
|
for each Operation in LotCurrOperationSequence using @Fm setting OpPos
|
||||||
|
ThisOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', Operation)
|
||||||
|
ThisOperationSequence = ThisOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||||
|
If ThisOperationSequence GE PrescribedSequence then
|
||||||
|
NewOperationSequence = ThisOperationSequence + 1
|
||||||
|
ThisOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = NewOperationSequence
|
||||||
|
Database_Services('WriteDataRow', 'LOT_OPERATION', Operation, ThisOperationRec)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Done = True$
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Until Done
|
||||||
|
Next Operation
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
LotOperationRecID = RTI_CreateGUID()
|
||||||
|
If Not(RowExists('LOT_OPERATION', LotOperationRecID)) then
|
||||||
|
OperationRec = Database_Services('ReadDataRow', 'OPERATION', OperationId)
|
||||||
|
Class = OperationRec<OPERATION_CLASS_ID$>
|
||||||
|
Type = OperationRec<OPERATION_TYPE$>
|
||||||
|
Rework = OperationRec<OPERATION_REWORK$>
|
||||||
|
ThisNewOperationRec = Database_Services('ReadDataRow', 'OPERATION', OperationId)
|
||||||
|
LotOperationRec = ''
|
||||||
|
LotOperationRec<LOT_OPERATION_LOT_ID$> = LotId
|
||||||
|
LotOperationRec<LOT_OPERATION_OPERATION_ID$> = OperationId
|
||||||
|
LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = PrescribedSequence
|
||||||
|
LotOperationRec<LOT_OPERATION_REWORK$> = Rework
|
||||||
|
LotOperationRec<LOT_OPERATION_OPERATION_TYPE$> = Type
|
||||||
|
LotOperationRec<LOT_OPERATION_OPERATION_CLASS$> = Class
|
||||||
|
LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$> = OperationRec<OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||||
|
LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$> = OperationRec<OPERATION_MET_TEST_REQUIRED$>
|
||||||
|
LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$> = OperationRec<OPERATION_PACKAGING_REQUIRED$>
|
||||||
|
LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$> = OperationRec<OPERATION_CLEAN_REQUIRED$>
|
||||||
|
LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$> = OperationRec<OPERATION_WAFER_COUNTER_REQUIRED$>
|
||||||
|
IsOperationRework = Database_Services('ReadDataColumn', 'OPERATION', OperationId, OPERATION_REWORK$)
|
||||||
|
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationRecId, LotOperationRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
OperationDesc = XLATE('OPERATION', OperationId, OPERATION_OPERATION_DESCRIPTION$, 'X')
|
||||||
|
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'ADD_LOT_OPERATION', 'Added operation ' : Quote(OperationDesc) : ' to lot.', '', UserId)
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Operation already existed, cannot overwrite'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Not allowed to add new operations prior to current operation'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'User ' : UserId : ' does not have permission to modify lots.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid operation sequence entered.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Operation is inactive. Unable to add.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Operation ' : OperationId : 'not found in OPERATION table.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot ' : LotId : ' not found in LOT table.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
Response = Operation
|
||||||
|
end else
|
||||||
|
Error_Services('Add', 'Error in ' : Service : '.' : ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service RemoveLotOperation(LotOperationId, UserId)
|
||||||
|
|
||||||
|
//Todo User permission check
|
||||||
|
ErrorMessage = ''
|
||||||
|
Success = False$
|
||||||
|
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
If Lot_Services('CanUserModifyLot', UserId) then
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||||
|
MoveInTime = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||||
|
MoveOutTime = LotOperationRec<LOT_OPERATION_DATETIME_OUT$>
|
||||||
|
Sequence = LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||||
|
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||||
|
OperationClass = XLATE('OPERATION', OperationId, OPERATION_CLASS_ID$, 'X')
|
||||||
|
If OperationClass NE 'RTF_DEFAULT' AND OperationClass NE 'RTF_DEFAULT_END' then
|
||||||
|
If MoveInTime EQ '' AND MoveOutTime EQ '' then
|
||||||
|
LotOperationRec<LOT_OPERATION_LOT_ID$> = '';//Nulling this value out should disassociated the lot operation record from the lot.
|
||||||
|
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, LotOperationRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Lot_Operation_Services('UpdateLotOperationSequence', LotId, Sequence)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Success = True$
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
OperationDesc = XLATE('OPERATION', OperationId, OPERATION_OPERATION_DESCRIPTION$, 'X')
|
||||||
|
Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'REMOVE_LOT_OPERATION', 'Removed operation ' : Quote(OperationDesc) : ' from lot.', '', UserId)
|
||||||
|
end else
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot has already started processing on operation ' : OperationId
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Unable to remove default operations.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'User ' : UserId : ' does not have permission modify lots.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Operation record not found'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage NE '' then
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = Success
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service UpdateLotOperationSequence(LotId, StartSequence)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
If StartSequence EQ '' then
|
||||||
|
StartSequence = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
LotOperationSequence = Lot_Services('GetLotOperationSequence', LotId)
|
||||||
|
Offset = 0
|
||||||
|
for each LotOperationId in LotOperationSequence using @FM setting SeqPos
|
||||||
|
If LotOperationId NE '' then
|
||||||
|
ThisLotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
OrigSeq = ThisLotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>
|
||||||
|
NewSeq = OrigSeq - Offset
|
||||||
|
ThisLotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$> = NewSeq
|
||||||
|
Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, ThisLotOperationRec)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Offset += 1
|
||||||
|
end
|
||||||
|
Until ErrorMessage NE ''
|
||||||
|
Next LotOperation
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Id not found'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage NE '' then
|
||||||
|
Error_Services('Add', 'Error in ' : Service : ' : ' : ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service GetAvailableSequences(LotId)
|
||||||
|
AvailableSequences = ''
|
||||||
|
|
||||||
|
If RowExists('LOT', LotId) then
|
||||||
|
CurrentLotOperations = Lot_Services('GetLotOperationSequence', LotId)
|
||||||
|
For each LotOperationId in CurrentLotOperations using @FM setting Sequence
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||||
|
OperationClass = Database_Services('ReadDataColumn', 'OPERATION', OperationId, OPERATION_CLASS_ID$)
|
||||||
|
StartDtm = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||||
|
If StartDTM EQ '' then
|
||||||
|
AvailableSequences<1, -1> = Sequence + 1
|
||||||
|
end
|
||||||
|
Next LotOperationId
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = AvailableSequences
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service ConvertRecordToJson(LotOperationId)
|
||||||
|
|
||||||
|
JsonString = ''
|
||||||
|
objJSON = ''
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
If SRP_JSON(objJSON, 'New', 'Object') then
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'LotOperationId', LotOperationId)
|
||||||
|
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||||
|
LegacyLotId = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_LEGACY_LOT_ID$, True$, 0, False$)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'LotOperationId', LotOperationId)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'LotId', LotId, 'String')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'LegacyLotId', LegacyLotId, 'String')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperationId', LotOperationRec<LOT_OPERATION_OPERATION_ID$>, 'String')
|
||||||
|
OperationDesc = XLATE('OPERATION', LotOperationRec<LOT_OPERATION_OPERATION_ID$>, OPERATION_OPERATION_DESCRIPTION$, 'X')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'Description', OperationDesc, 'String')
|
||||||
|
OperationClass = XLATE('OPERATION', LotOperationRec<LOT_OPERATION_OPERATION_ID$>, OPERATION_CLASS_ID$, 'X')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperationClass', OperationClass)
|
||||||
|
DatetimeIn = Date_Services('ConvertDateTimeToISO8601', LotOperationRec<LOT_OPERATION_DATETIME_IN$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'DateTimeIn', DatetimeIn)
|
||||||
|
DatetimeOut = Date_Services('ConvertDateTimeToISO8601', LotOperationRec<LOT_OPERATION_DATETIME_OUT$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'DateTimeOut', DatetimeOut)
|
||||||
|
EquipmentId = LotOperationRec<LOT_OPERATION_EQUIPMENT_ID$>
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'EquipmentId', EquipmentId)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'WaferInQty', LotOperationRec<LOT_OPERATION_WAFER_IN_QTY$>, 'Number')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'WaferOutQty', LotOperationRec<LOT_OPERATION_WAFER_OUT_QTY$>, 'Number')
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperatorInId', LotOperationRec<LOT_OPERATION_OPERATOR_IN_ID$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperatorOutId', LotOperationRec<LOT_OPERATION_OPERATOR_OUT_ID$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperationSequence', LotOperationRec<LOT_OPERATION_OPERATION_SEQUENCE$>)
|
||||||
|
DatetimeStart = Date_Services('ConvertDateTimeToISO8601', LotOperationRec<LOT_OPERATION_DATETIME_START$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'DateTimeStart', DatetimeStart)
|
||||||
|
DatetimeStop = Date_Services('ConvertDateTimeToISO8601', LotOperationRec<LOT_OPERATION_DATETIME_STOP$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'DateTimeStop', DatetimeStop)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'MetTestId', LotOperationRec<LOT_OPERATION_MET_TEST_ID$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'CleanId', LotOperationRec<LOT_OPERATION_CLEAN_ID$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'PackagingId', LotOperationRec<LOT_OPERATION_PACKAGING_ID$>)
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'WaferCounterId', LotOperationRec<LOT_OPERATION_WAFER_COUNTER_ID$>)
|
||||||
|
SRP_JSON(objJson, 'SetValue', 'MetTestTypeRequired', LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>, 'STRING')
|
||||||
|
SRP_JSON(objJson, 'SetValue', 'MetTestRequired', LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>, 'Boolean')
|
||||||
|
SRP_JSON(objJson, 'SetValue', 'PackagingRequired', LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$>, 'Boolean')
|
||||||
|
SRP_JSON(objJson, 'SetValue', 'CleanRequired', LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>, 'Boolean')
|
||||||
|
SRP_JSON(objJson, 'SetValue', 'WaferCounterRequired', LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$>, 'Boolean')
|
||||||
|
PSNo = Xlate('LOT', LotId, LOT_PROD_SPEC_ID$, 'X')
|
||||||
|
RecipeToolInfo = PSN_Services('GetAllMetrologyRecipes', PSNo, True$, True$, True$, True$)
|
||||||
|
objRecipeInfo = ''
|
||||||
|
If SRP_Json(objRecipeInfo, 'New', 'Array') then
|
||||||
|
for each RecipeLine in RecipeToolInfo using @FM
|
||||||
|
If SRP_Json(objRecipeLine, 'New', 'Object') then
|
||||||
|
SRP_Json(objRecipeLine, 'SetValue', 'ToolClass', RecipeLine<1,1>, 'String')
|
||||||
|
SRP_Json(objRecipeLine, 'SetValue', 'Recipe', RecipeLine<1,2>, 'String')
|
||||||
|
SRP_Json(objRecipeLine, 'SetValue', 'Stage', RecipeLine<1,3>, 'String')
|
||||||
|
SRP_Json(objRecipeInfo, 'Add', objRecipeLine)
|
||||||
|
SRP_Json(objRecipeLine, 'Release')
|
||||||
|
end
|
||||||
|
Next RecipeLine
|
||||||
|
SRP_Json(objJSON, 'Set', 'RecipeInfo', objRecipeInfo)
|
||||||
|
SRP_Json(objRecipeInfo, 'Release')
|
||||||
|
end
|
||||||
|
SRP_JSON(objJSON, 'SetValue', 'OperationType', LotOperationRec<LOT_OPERATION_OPERATION_TYPE$>)
|
||||||
|
//Add OPERATION Object
|
||||||
|
OperationJson = Operation_Services('ConvertRecordToJSON', LotOperationRec<LOT_OPERATION_OPERATION_ID$>)
|
||||||
|
If SRP_JSON(objOperationJson, 'Parse', OperationJson) EQ '' then
|
||||||
|
SRP_Json(objJSON, 'Set', 'OperationInfo',objOperationJson)
|
||||||
|
SRP_Json(objOperationJson, 'Release')
|
||||||
|
end
|
||||||
|
//Add Associated MET_TEST JSON Object
|
||||||
|
AssocMetTestIds = LotOperationRec<LOT_OPERATION_MET_TEST_ID$>
|
||||||
|
objAssocMetTest = ''
|
||||||
|
If SRP_Json(objAssocMetTest, 'New', 'Array') then
|
||||||
|
for each MetTestId in AssocMetTestIds using @VM
|
||||||
|
MetTestJson = Met_Test_Services('ConvertRecordToJson', MetTestId)
|
||||||
|
If SRP_Json(objMetTest, 'Parse', MetTestJson) EQ '' then
|
||||||
|
SRP_Json(objAssocMetTest, 'Add', objMetTest)
|
||||||
|
SRP_Json(objMetTest, 'Release')
|
||||||
|
end
|
||||||
|
Next MetTestId
|
||||||
|
SRP_Json(objJSON, 'Set', 'AssociatedMetTests', objAssocMetTest)
|
||||||
|
SRP_Json(objAssocMetTest, 'Release')
|
||||||
|
end
|
||||||
|
//Add Available Met Test Record
|
||||||
|
RequiredClasses = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||||
|
AvailMetTestIds = ''
|
||||||
|
ThisOperationDTMIn = LotOperationRec<LOT_OPERATION_DATETIME_IN$>
|
||||||
|
ThisOperationDTMOut = LotOperationRec<LOT_OPERATION_DATETIME_OUT$>
|
||||||
|
if RequiredClasses NE '' AND DatetimeIn NE '' AND DatetimeOut EQ '' then
|
||||||
|
AvailMetTestIds = Met_Test_Services('GetMetTests', LotId, LegacyLotId, '', True$, RequiredClasses, ThisOperationDTMIn, ThisOperationDTMOut)
|
||||||
|
end
|
||||||
|
objAvailMetTest = ''
|
||||||
|
If SRP_Json(objAvailMetTest, 'New', 'Array') then
|
||||||
|
if AvailMetTestIds NE '' then
|
||||||
|
for each MetTestId in AvailMetTestIds using @VM
|
||||||
|
|
||||||
|
SRP_Stopwatch('Start', 'MetTestJson')
|
||||||
|
MetTestJson = Met_Test_Services('ConvertRecordToJson', MetTestId)
|
||||||
|
SRP_Stopwatch('Stop', 'MetTestJson')
|
||||||
|
totalTime = SRP_Stopwatch('GetBenchmark', 'MetTestJson')
|
||||||
|
If SRP_Json(objMetTest, 'Parse', MetTestJson) EQ '' then
|
||||||
|
SRP_Json(objAvailMetTest, 'Add', objMetTest)
|
||||||
|
SRP_Json(objMetTest, 'Release')
|
||||||
|
end
|
||||||
|
Next MetTestId
|
||||||
|
end
|
||||||
|
SRP_Json(objJSON, 'Set', 'AvailMetTests', objAvailMetTest)
|
||||||
|
SRP_Json(objAvailMetTest, 'Release')
|
||||||
|
end
|
||||||
|
//Add in relevant recipes
|
||||||
|
Recipes = ''
|
||||||
|
ShowThickRecipes = False$
|
||||||
|
ShowResRecipes = False$
|
||||||
|
ShowCleanRecipes = False$
|
||||||
|
ShowSurfscanRecipes = False$
|
||||||
|
IsMetTestReqd = LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>
|
||||||
|
IsCleanRequired = LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>
|
||||||
|
If IsMetTestReqd then
|
||||||
|
MetTestTypeRequired = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||||
|
Begin Case
|
||||||
|
Case MetTestTypeRequired EQ 'TENCOR'
|
||||||
|
ShowSurfscanRecipes = True$
|
||||||
|
Case MetTestTypeRequired EQ 'THICK'
|
||||||
|
ShowThickRecipes = True$
|
||||||
|
Case MetTestTypeRequired EQ 'RES'
|
||||||
|
ShowResRecipes = True$
|
||||||
|
End Case
|
||||||
|
end
|
||||||
|
If IsCleanRequired then
|
||||||
|
ShowCleanRecipes = True$
|
||||||
|
end
|
||||||
|
ProdSpecNo = XLATE('LOT', LotId, LOT_PROD_SPEC_ID$, 'X')
|
||||||
|
Recipes = PSN_Services('GetAllMetrologyRecipes', ProdSpecNo, ShowSurfscanRecipes, ShowCleanRecipes, ShowResRecipes, ShowThickRecipes)
|
||||||
|
If SRP_JSON(objRecipes, 'New', 'Array') then
|
||||||
|
for each Recipe in Recipes using @FM
|
||||||
|
//ToolClass : @VM : Recipe : @VM : Stage
|
||||||
|
ToolClass = Recipe<1,1>
|
||||||
|
RecipeName = Recipe<1,2>
|
||||||
|
Stage = Recipe<1,3>
|
||||||
|
If SRP_JSON(objRecipe, 'New', 'Object') then
|
||||||
|
SRP_JSON(objRecipe, 'SetValue', 'ToolClass', ToolClass, 'String')
|
||||||
|
SRP_JSON(objRecipe, 'SetValue', 'RecipeName', RecipeName, 'String')
|
||||||
|
SRP_JSON(objRecipe, 'SetValue', 'StageName', Stage, 'String')
|
||||||
|
SRP_JSON(objRecipes, 'Add', objRecipe)
|
||||||
|
SRP_JSON(objRecipe, 'Release')
|
||||||
|
end
|
||||||
|
Next Recipe
|
||||||
|
SRP_JSON(objJSON, 'Set', 'RecipeParams', objRecipes)
|
||||||
|
SRP_JSON(objRecipes, 'Release')
|
||||||
|
end
|
||||||
|
JsonString = SRP_JSON(objJSON, 'Stringify', 'Fast')
|
||||||
|
SRP_JSON(objJSON, 'Release')
|
||||||
|
end
|
||||||
|
|
||||||
|
Response = JsonString
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Service StartLotOperation(LotOperationId, UserId)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
If RowExists('LSL_USERS', UserId) then
|
||||||
|
//We can also add additional checks like security checks, training checks, etc here if needed.
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||||
|
LotCurrentLotOpId = Lot_Services('GetLotCurrOperationId', LotId)
|
||||||
|
If LotOperationId EQ LotCurrentLotOpId then
|
||||||
|
LotMovedIn = Lot_Services('IsLotMovedIn', LotId)
|
||||||
|
If Not(LotMovedIn) then
|
||||||
|
Lot_Services('MoveInLot', LotId, UserId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot is already moved into this operation.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid user passed to routine.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Lot Operation passed to routine.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
Response = False$
|
||||||
|
Error_Services('Add', 'Error in ' : Service : '. ' : ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service CompleteLotOperation(LotOperationId, UserId)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
If RowExists('LSL_USERS', UserId) then
|
||||||
|
//We can also add additional checks like security checks, training checks, etc here if needed.
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
LotId = LotOperationRec<LOT_OPERATION_LOT_ID$>
|
||||||
|
LotCurrentLotOpId = Lot_Services('GetLotCurrOperationId', LotId)
|
||||||
|
If LotOperationId EQ LotCurrentLotOpId then
|
||||||
|
LotMovedIn = Lot_Services('IsLotMovedIn', LotId)
|
||||||
|
If LotMovedIn then
|
||||||
|
//Perform Validation for the particular operation here.
|
||||||
|
OperationValid = Lot_Operation_Services('ValidateLotOperation', LotOperationId)
|
||||||
|
If OperationValid then
|
||||||
|
Lot_Services('MoveOutLot', LotId, UserId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Operation has not finished processing and cannot be moved out.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Cannot complete operation because lot is not currently moved in.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
CurrOperationId = Xlate('LOT_OPERATION', LotCurrentLotOpId, LOT_OPERATION_OPERATION_ID$, 'X')
|
||||||
|
CurrOperationDesc = Xlate('OPERATION', CurrOperationId, OPERATION_OPERATION_DESCRIPTION$, 'X')
|
||||||
|
ErrorMessage = 'Cannot complete operation. Lot is currently at ' : CurrOperationDesc
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid user passed to routine.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Invalid Lot Operation passed to routine.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMessage EQ '' then
|
||||||
|
Response = True$
|
||||||
|
end else
|
||||||
|
Response = False$
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
Service ValidateLotOperation(LotOperationId)
|
||||||
|
|
||||||
|
ErrorMessage = ''
|
||||||
|
IsValid = True$
|
||||||
|
If RowExists('LOT_OPERATION', LotOperationId) then
|
||||||
|
LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
|
||||||
|
OperationId = LotOperationRec<LOT_OPERATION_OPERATION_ID$>
|
||||||
|
MetTestRequired = LotOperationRec<LOT_OPERATION_MET_TEST_REQUIRED$>
|
||||||
|
MetTestTypeRequired = LotOperationRec<LOT_OPERATION_MET_TEST_TYPE_REQUIRED$>
|
||||||
|
PackagingRequired = LotOperationRec<LOT_OPERATION_PACKAGING_REQUIRED$>
|
||||||
|
CleanRequired = LotOperationRec<LOT_OPERATION_CLEAN_REQUIRED$>
|
||||||
|
WaferCountRequired = LotOperationRec<LOT_OPERATION_WAFER_COUNTER_REQUIRED$>
|
||||||
|
OperationClass = XLATE('OPERATION', OperationId, OPERATION_CLASS_ID$, 'X')
|
||||||
|
If MetTestRequired then
|
||||||
|
MetTestsInSpec = True$
|
||||||
|
AssociatedMetTestIds = LotOperationRec<LOT_OPERATION_MET_TEST_ID$>
|
||||||
|
If AssociatedMetTestIds NE '' then
|
||||||
|
for each MetTestId in AssociatedMetTestIds using @VM
|
||||||
|
MetTestOoS = Database_Services('ReadDataColumn', 'MET_TEST', MetTestId, MET_TEST.OUT_OF_SPEC$, True$, 0, False)
|
||||||
|
If MetTestOoS AND OperationClass NE 'RTF' AND OperationClass NE 'RTF_DEFAULT' then
|
||||||
|
MetTestsInSpec = False$
|
||||||
|
ErrorMessage = 'An associated Met test record is out of spec.'
|
||||||
|
end
|
||||||
|
Until MetTestsInSpec EQ False$
|
||||||
|
Next MetTestId
|
||||||
|
end else
|
||||||
|
IsValid = False$
|
||||||
|
ErrorMessage = 'Met tests are required and none are assigned.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If PackagingRequired AND IsValid then
|
||||||
|
AssociatedPackagingIds = LotOperationRec<LOT_OPERATION_PACKAGING_ID$>
|
||||||
|
If AssociatedPackagingIds NE '' then
|
||||||
|
|
||||||
|
end else
|
||||||
|
IsValid = False$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If CleanRequired AND IsValid then
|
||||||
|
AssociatedCleanIds = LotOperationRec<LOT_OPERATION_CLEAN_ID$>
|
||||||
|
If AssociatedCleanIds NE '' then
|
||||||
|
IsValid = True$
|
||||||
|
end else
|
||||||
|
IsValid = False$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
If WaferCountRequired AND IsValid then
|
||||||
|
AssociatedWaferCountIds = LotOperationRec<LOT_OPERATION_WAFER_COUNTER_ID$>
|
||||||
|
If AssociatedWaferCountIds NE '' then
|
||||||
|
IsValid = True$
|
||||||
|
end else
|
||||||
|
IsValid = False$
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Lot Operation not found'
|
||||||
|
end
|
||||||
|
If ErrorMessage NE '' then
|
||||||
|
IsValid = False$
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
Response = IsValid
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -132,4 +132,3 @@ CreateHALItem:
|
|||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -62,11 +62,8 @@ Options SCAN_TYPES_PTO = 'LABEL1', 'LABEL2'
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
// Code 3of9 encodes the asterisk and underscore characters. These need to be decoded.
|
|
||||||
//ScanData = Scan_Services('DecodeScanData', ScanData)
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
|
|
||||||
ColumnIndex = ''
|
ColumnIndex = ''
|
||||||
ColumnValue = ''
|
ColumnValue = ''
|
||||||
@ -91,25 +88,31 @@ Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
|
|||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
If ValidLot NE True$ then
|
If ValidLot NE True$ then
|
||||||
// Add error to error stack
|
// Add error to error stack
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
Error_Services('Add', ErrorMessage)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
Response = ScanSubLot
|
|
||||||
end
|
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
Case ScanType EQ 'CASSETTE1'
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
DelimCount = DCount(ScanData, '|')
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
Begin Case
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
If ScanData[1, 2] EQ '1T' then
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
ScanData[1, 2] = ''
|
Case (DelimCount NE 8)
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
ScanData[1,1] = ''
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
end
|
end
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
If INDEX(CassetteID,'.',2) then
|
||||||
RDSType = 'EPP'
|
RDSType = 'EPP'
|
||||||
@ -119,20 +122,14 @@ Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
|
|||||||
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
||||||
end
|
end
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
||||||
|
|
||||||
If RDSType EQ 'EPP' then
|
|
||||||
LotDesc = 'EPP Lot '
|
|
||||||
end else
|
|
||||||
LotDesc = 'RDS Number '
|
|
||||||
end
|
|
||||||
|
|
||||||
If ValidCassetteID EQ True$ then
|
If ValidCassetteID EQ True$ then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
||||||
Error_Services('Add', LotDesc:'Mismatch: ':CassetteID: ' does not match ': Param1)
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
// Check if FQA is signed
|
// Check if FQA is signed
|
||||||
FQASigned = ''
|
FQASigned = ''
|
||||||
WorkOrdNo = Field(WOMatKey, '*', 1)
|
WorkOrdNo = Field(WOMatKey, '*', 1)
|
||||||
@ -148,31 +145,78 @@ Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
|
|||||||
|
|
||||||
FQASigned = Signature_Services('CheckSignature', WOMatKey, QAStage)
|
FQASigned = Signature_Services('CheckSignature', WOMatKey, QAStage)
|
||||||
|
|
||||||
IF NOT(FQASigned) THEN
|
If NOT(FQASigned) then ErrorMsg = 'FQA not signed for ':CassetteID:'!'
|
||||||
Error_Services('Add', 'FQA not signed for ':LotDesc:CassetteID: '!')
|
|
||||||
END
|
|
||||||
|
|
||||||
end else
|
|
||||||
Error_Services('Add', 'Invalid ':LotDesc:CassetteID)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
end else
|
||||||
Response = CassetteID
|
ErrorMsg = 'Invalid Lot ID ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
Response = ''
|
||||||
|
Response<1> = CassetteID
|
||||||
|
Response<2> = SeqNo
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE2'
|
Case ScanType EQ 'CASSETTE2'
|
||||||
Response = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1', Param1)
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
Response = ScanData
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
|
|
||||||
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
|
Cassette1ID = Param1
|
||||||
|
Seq1No = Param2
|
||||||
|
DelimCount = DCount(ScanData, '|')
|
||||||
|
Begin Case
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
Seq2No = Field(ScanData, '|', 8)
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
end
|
If ErrorMsg EQ '' then
|
||||||
end else
|
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Cassette1ID NE '' AND (CassetteID NE Cassette1ID) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Cassette1ID
|
||||||
|
end
|
||||||
|
If Seq1No EQ Seq2No then
|
||||||
|
ErrorMsg = 'FQA Label verification failed due':CRLF$:'to operator double-scanning barcode.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid RDS Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then Response = CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// ProcessPTIScanData
|
// ProcessPTIScanData
|
||||||
//
|
//
|
||||||
@ -183,11 +227,8 @@ end service
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
// Code 3of9 encodes the asterisk and underscore characters. These need to be decoded.
|
|
||||||
//ScanData = Scan_Services('DecodeScanData', ScanData)
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
|
|
||||||
ColumnIndex = ''
|
ColumnIndex = ''
|
||||||
ColumnValue = ''
|
ColumnValue = ''
|
||||||
@ -198,39 +239,42 @@ Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
|
|||||||
Begin Case
|
Begin Case
|
||||||
|
|
||||||
Case ScanType EQ 'SUPPLIER'
|
Case ScanType EQ 'SUPPLIER'
|
||||||
|
|
||||||
ValidLot = False$
|
ValidLot = False$
|
||||||
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
||||||
ScanSubLot = ScanData
|
ScanSubLot = ScanData
|
||||||
|
|
||||||
CassetteID = Param1
|
CassetteID = Param1
|
||||||
If INDEX(CassetteID,'.',2) then
|
If INDEX(CassetteID,'.',2) then
|
||||||
RDSType = 'EPP'
|
RDSType = 'EPP'
|
||||||
end else
|
end else
|
||||||
RDSType = 'SIC'
|
RDSType = 'SIC'
|
||||||
end
|
end
|
||||||
|
|
||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
If ValidLot NE True$ then
|
If ValidLot NE True$ then ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
// Add error to error stack
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
|
||||||
Error_Services('Add', ErrorMessage)
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
Response = ScanSubLot
|
|
||||||
end
|
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
Case ScanType EQ 'CASSETTE1'
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
If ScanData[1, 2] EQ '1T' then
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
ScanData[1, 2] = ''
|
DelimCount = DCount(ScanData, '|')
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
Begin Case
|
||||||
ScanData[1,1] = ''
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') or (ScanData[1, 1] EQ 'I') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
end
|
end
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
If INDEX(CassetteID,'.',2) then
|
||||||
RDSType = 'EPP'
|
RDSType = 'EPP'
|
||||||
@ -238,37 +282,82 @@ Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Para
|
|||||||
RDSType = 'SIC'
|
RDSType = 'SIC'
|
||||||
end
|
end
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType)
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
|
||||||
If ValidCassetteID EQ True$ then
|
If ValidCassetteID EQ True$ then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If Param1 NE '' AND (ScanData NE Param1) then ;*Cassette2 Scan
|
||||||
Error_Services('Add', 'RDS Mismatch: ':CassetteID: ' does not match ': Param1)
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid RDS Number: ':CassetteID)
|
ErrorMsg = 'Invalid Cassette Number: ':CassetteID
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then
|
||||||
Response = CassetteID
|
Response = ''
|
||||||
|
Response<1> = CassetteID
|
||||||
|
Response<2> = SeqNo
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE2'
|
Case ScanType EQ 'CASSETTE2'
|
||||||
Response = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1', Param1)
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
Response = ScanData
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
|
|
||||||
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
|
Cassette1ID = Param1
|
||||||
|
Seq1No = Param2
|
||||||
|
|
||||||
|
DelimCount = DCount(ScanData, '|')
|
||||||
|
Begin Case
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') or (ScanData[1, 1] EQ 'I') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
Seq2No = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType)
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Cassette1ID NE '' AND (CassetteID NE Cassette1ID) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Cassette1ID
|
||||||
|
end
|
||||||
|
If Seq1No EQ Seq2No then
|
||||||
|
ErrorMsg = 'PTI Label verification failed due':CRLF$:'to operator double-scanning barcode.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid Cassette Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then Response = CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
//to do before release of ProcessPTOScanData
|
|
||||||
//1. prerequisite - waiting on newly printed (on/after 10/18/21) labels to make their way through warehouse, though not critical
|
|
||||||
//2. showstopper - need barcode scanners to be able to scan 2D barcodes - currently only 1 such scanner (purchased for shipping but not deployed, given to Cheryl)
|
|
||||||
//3. fix prod print routine to use SRP GetPrinter methods similar to what the Test_Print_SAP_Cass_Ship_Label does
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// ProcessPTOScanData
|
// ProcessPTOScanData
|
||||||
//
|
//
|
||||||
@ -282,11 +371,10 @@ end service
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Location = 'PTO Mat'
|
Location = 'PTO Mat'
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
|
|
||||||
ColumnIndex = ''
|
ColumnIndex = ''
|
||||||
ColumnValue = ''
|
ColumnValue = ''
|
||||||
Cassette1 = ''
|
Cassette1 = ''
|
||||||
@ -295,26 +383,24 @@ Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
|||||||
Begin Case
|
Begin Case
|
||||||
|
|
||||||
Case ScanType EQ 'LABEL1'
|
Case ScanType EQ 'LABEL1'
|
||||||
//determine whether regular NEPP or EPP label scan
|
// Determine whether regular NEPP or EPP label scan
|
||||||
//NEPP should be data matrix scan and have 7 parts, RDS_No is the 3rd
|
// NEPP should be data matrix scan and have 7 parts, RDS_No is the 3rd
|
||||||
//EPP is 1D scan and will have the WMO number (e.g. 170369*1*48)
|
// EPP is 1D scan and will have the WMO number (e.g. 170369*1*48)
|
||||||
// This should be a multi-part 2D datamatrix scan, so there should be a long string separated by pipe symbols.
|
// This should be a multi-part 2D datamatrix scan, so there should be a long string separated by pipe symbols.
|
||||||
// Validate the 1. it is multi-part string and 2. that the RDS number from the string is a) valid RDS number
|
// Validate the 1. it is multi-part string and 2. that the RDS number from the string is a) valid RDS number
|
||||||
// and b) is currently is the proper state to do PTO transaction.
|
// and b) is currently is the proper state to do PTO transaction.
|
||||||
// Strip any standardized prefixes (e.g. '1T', '2T', etc.) as necessary
|
// Strip any standardized prefixes (e.g. '1T', '2T', etc.) as necessary
|
||||||
|
|
||||||
// data from Label1 should have 8 parts (no matter type - Si or EPP), we're looking for the 3rd
|
// Data from Label1 should have 8 parts (no matter type - Si or EPP), we're looking for the 3rd
|
||||||
cnt = DCount(ScanData, '|')
|
cnt = DCount(ScanData, '|')
|
||||||
if cnt NE 8 then
|
if cnt NE 8 then
|
||||||
Cassette1 = 0
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
Error_Services('Add', 'Invalid Lot Label Scan.')
|
|
||||||
return
|
|
||||||
end else
|
end else
|
||||||
//RDS should be 3rd position
|
|
||||||
Cassette1 = Field(ScanData, '|', 3)
|
Cassette1 = Field(ScanData, '|', 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
//strip the prefix encoding
|
If ErrorMsg EQ '' then
|
||||||
|
// Strip the prefix encoding
|
||||||
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
||||||
Cassette1[1, 2] = ''
|
Cassette1[1, 2] = ''
|
||||||
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
@ -352,18 +438,16 @@ Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
|||||||
If Rds_Services('IsPackaged', Cassette1, RDSType) EQ True$ then
|
If Rds_Services('IsPackaged', Cassette1, RDSType) EQ True$ then
|
||||||
ValidCassette1 = True$
|
ValidCassette1 = True$
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', RDSType: ' RDS ':testCass1: ' has not completed packaging.')
|
ErrorMsg = RDSType: ' RDS ':testCass1: ' has not completed packaging.'
|
||||||
return
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', RDSType: ' RDS ':testCass1: ' is currently on hold.')
|
ErrorMsg = RDSType: ' RDS ':testCass1: ' is currently on hold.'
|
||||||
return
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.')
|
ErrorMsg = RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.'
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
StepNo = 1
|
StepNo = 1
|
||||||
IF LastPTO THEN
|
IF LastPTO THEN
|
||||||
@ -374,43 +458,43 @@ Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
|||||||
OK = Msg(@WINDOW, '','YESNO','',MsgHead:@FM:MsgText)
|
OK = Msg(@WINDOW, '','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
IF NOT(OK) THEN
|
IF NOT(OK) THEN
|
||||||
Error_Services('Add', 'Scan Cancelled')
|
ErrorMsg = 'Scan Cancelled'
|
||||||
RETURN
|
|
||||||
END else
|
END else
|
||||||
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
||||||
END
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
If ValidCassette1 EQ True$ then
|
If ValidCassette1 EQ True$ then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
||||||
Error_Services('Add', 'RDS Mismatch: ':Cassette1: ' does not match ': Param1)
|
ErrorMsg = 'RDS Mismatch: ':Cassette1: ' does not match ': Param1
|
||||||
return
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid RDS Number: ':Cassette1)
|
ErrorMsg = 'Invalid RDS Number: ':Cassette1
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then Response = Cassette1
|
||||||
Response = Cassette1
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'LABEL2'
|
Case ScanType EQ 'LABEL2'
|
||||||
cnt = DCount(ScanData, ';')
|
cnt = DCount(ScanData, ';')
|
||||||
if cnt EQ 9 then
|
if cnt EQ 9 then
|
||||||
//Tower is customer and RDS should be 2nd position
|
// Tower is customer and RDS should be 2nd position
|
||||||
Cassette2 = Field(ScanData, ';', 2)
|
Cassette2 = Field(ScanData, ';', 2)
|
||||||
end else if cnt EQ 10 then
|
end else if cnt EQ 10 then
|
||||||
//all other customers and RDS should be 3rd position
|
// All other customers and RDS should be 3rd position
|
||||||
Cassette2 = Field(ScanData, ';', 3)
|
Cassette2 = Field(ScanData, ';', 3)
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid Shipping Label Scan.')
|
ErrorMsg = 'Invalid Shipping Label Scan.'
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
//strip the prefix encoding
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
// Strip the prefix encoding
|
||||||
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
||||||
Cassette2[1, 2] = ''
|
Cassette2[1, 2] = ''
|
||||||
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
@ -427,29 +511,25 @@ Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
|||||||
: 'RDS Label #2: ':testCass2:CRLF$
|
: 'RDS Label #2: ':testCass2:CRLF$
|
||||||
|
|
||||||
ScanMismatch = True$
|
ScanMismatch = True$
|
||||||
gosub ToggleLotHold
|
GoSub ToggleLotHold
|
||||||
Error_Services('Add', ErrorMsg)
|
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then Response = Cassette2
|
||||||
Response = Cassette2
|
|
||||||
end
|
end
|
||||||
|
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
||||||
|
|
||||||
* Write success record in Material Log
|
// Write success record in Material Log
|
||||||
|
|
||||||
RDSKey = CassetteID
|
RDSKey = CassetteID
|
||||||
WMOKey = CassetteID
|
WMOKey = CassetteID
|
||||||
Convert '.' to '*' in WMOKey
|
Convert '.' to '*' in WMOKey
|
||||||
@ -504,40 +584,33 @@ Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
|||||||
errCode = ''
|
errCode = ''
|
||||||
obj_WO_Mat_Log('Create',WOMLParms)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
|
||||||
* aiParms = 'WO_MAT':@RM:WONo:@RM:CassNo:@RM:WhCd:'*':LocCd:@RM:Action:@RM:InvDTM:@RM:UserID:@RM:Tag:@RM:ToolID
|
If Get_Status(errCode) then
|
||||||
* obj_WO_Mat('AddInvTrans', aiParms)
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Errors calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
swap @SVM with CRLF$ in errCode
|
|
||||||
ErrorMsg = 'Errors calling obj_WO_Mat_Log("Create"). Error code: ':errCode:', Len(errCode)=':Len(errCode):'. FI has been notified.'
|
|
||||||
Error_Services('Add', ErrorMsg)
|
Error_Services('Add', ErrorMsg)
|
||||||
if LEN(errCode) > 5 then
|
|
||||||
Gosub SendErrorNotification
|
Gosub SendErrorNotification
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
SendErrorNotification:
|
SendErrorNotification:
|
||||||
|
|
||||||
Recipients = XLATE('NOTIFICATION','FI_SUPPORT',NOTIFICATION_USER_ID$,'X')
|
Recipients = ''
|
||||||
SentFrom = 'MATERIAL_MOVEMENT_SERVICES'
|
SentFrom = 'MATERIAL_MOVEMENT_SERVICES'
|
||||||
Subject = 'ERROR CALLING OBJ_WO_MAT '
|
Subject = 'ERROR CALLING OBJ_WO_MAT '
|
||||||
Message = 'Error occured while attempting to write WO_MAT_LOG at ':Location:' Scan':CRLF$:ErrorMsg
|
Message = 'Error occured while attempting to write WO_MAT_LOG at ':Location:' Scan':CRLF$:ErrorMsg
|
||||||
AttachKey = WoMatKey
|
AttachKey = WoMatKey
|
||||||
AttachWindow = ''
|
AttachWindow = ''
|
||||||
SendToGroup = ''
|
SendToGroup = 'FI_SUPPORT'
|
||||||
|
|
||||||
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
obj_Notes('Create',Parms)
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
ToggleLotHold:
|
ToggleLotHold:
|
||||||
|
|
||||||
If ScanMismatch EQ True$ then
|
If ScanMismatch EQ True$ then
|
||||||
@ -578,22 +651,26 @@ ToggleLotHold:
|
|||||||
// To do: Throw Error
|
// To do: Throw Error
|
||||||
End Case
|
End Case
|
||||||
Convert '*' to '.' in Cassette1
|
Convert '*' to '.' in Cassette1
|
||||||
|
|
||||||
HoldEntityID = Cassette1
|
HoldEntityID = Cassette1
|
||||||
|
|
||||||
// Manually add work order material log entry
|
WOMLParms = LogFile:@RM
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMLParms := LogDTM:@RM
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
WOMLParms := Action:@RM
|
||||||
NumTimestamps = Dcount(WOMatRec<WO_MAT_INV_WH$>, @VM)
|
WOMLParms := WhCd:@RM
|
||||||
NewEntryPos = NumTimestamps + 1
|
WOMLParms := LocCd:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_WH$, NewEntryPos, 0, WhCd)
|
WOMLParms := WONo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_LOCATION$, NewEntryPos, 0, LocCd)
|
WOMLParms := CassNo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_ACTION$, NewEntryPos, 0, Action)
|
WOMLParms := UserID:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_DTM$, NewEntryPos, 0, LogDTM)
|
WOMLParms := Tags:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_USER$, NewEntryPos, 0, UserID)
|
WOMLParms := ToolID
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TAG$, NewEntryPos, 0, Tags)
|
Set_Status(0)
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TOOL_ID$, NewEntryPos, 0, ToolID)
|
errCode = ''
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
If Get_Status(errCode) then
|
||||||
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Error calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
Gosub SendErrorNotification
|
||||||
|
end
|
||||||
|
|
||||||
// Place first cassette on hold
|
// Place first cassette on hold
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
@ -637,24 +714,26 @@ ToggleLotHold:
|
|||||||
ToolID = ''
|
ToolID = ''
|
||||||
HoldEntityID = Cassette2
|
HoldEntityID = Cassette2
|
||||||
|
|
||||||
// Manually add work order material log entry
|
WOMLParms = LogFile:@RM
|
||||||
|
WOMLParms := LogDTM:@RM
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
WOMLParms := Action:@RM
|
||||||
NumTimestamps = Dcount(WOMatRec<WO_MAT_INV_WH$>, @VM)
|
WOMLParms := WhCd:@RM
|
||||||
NewEntryPos = NumTimestamps + 1
|
WOMLParms := LocCd:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_WH$, NewEntryPos, 0, WhCd)
|
WOMLParms := WONo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_LOCATION$, NewEntryPos, 0, LocCd)
|
WOMLParms := CassNo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_ACTION$, NewEntryPos, 0, Action)
|
WOMLParms := UserID:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_DTM$, NewEntryPos, 0, LogDTM)
|
WOMLParms := Tags:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_USER$, NewEntryPos, 0, UserID)
|
WOMLParms := ToolID
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TAG$, NewEntryPos, 0, Tags)
|
Set_Status(0)
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TOOL_ID$, NewEntryPos, 0, ToolID)
|
errCode = ''
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
If Get_Status(errCode) then
|
||||||
//pause before putting second cassette on hold
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Error calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
Gosub SendErrorNotification
|
||||||
|
end
|
||||||
|
|
||||||
// Place second cassette on hold
|
// Place second cassette on hold
|
||||||
|
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
CtrlEntID = False$ ;* Control checked/unchecked
|
CtrlEntID = False$ ;* Control checked/unchecked
|
||||||
OriginFlag = 'PTO' ;* Flag to indicate a hold initiated from the packaging form
|
OriginFlag = 'PTO' ;* Flag to indicate a hold initiated from the packaging form
|
||||||
@ -662,7 +741,8 @@ ToggleLotHold:
|
|||||||
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
|
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
|
||||||
end
|
end
|
||||||
|
|
||||||
gosub SendPTOMismatchNotification
|
GoSub SendPTOMismatchNotification
|
||||||
|
|
||||||
errCode = ''
|
errCode = ''
|
||||||
IF Get_Status(errCode) THEN Error_Services('Add', 'Error code ':errCode:' in ':Service:' service.')
|
IF Get_Status(errCode) THEN Error_Services('Add', 'Error code ':errCode:' in ':Service:' service.')
|
||||||
Error_Services('Add', 'Cassette scans did not match! Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.')
|
Error_Services('Add', 'Cassette scans did not match! Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.')
|
||||||
@ -671,6 +751,7 @@ ToggleLotHold:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
SendPTOMismatchNotification:
|
SendPTOMismatchNotification:
|
||||||
|
|
||||||
// Send scan mismatch notification
|
// Send scan mismatch notification
|
||||||
|
@ -619,18 +619,13 @@ end service
|
|||||||
Service GetAvailableMakeupWafers(WorkOrderNo, KeysOnly=BOOLEAN)
|
Service GetAvailableMakeupWafers(WorkOrderNo, KeysOnly=BOOLEAN)
|
||||||
|
|
||||||
AvailableMakeupWafers = ''
|
AvailableMakeupWafers = ''
|
||||||
|
|
||||||
If WorkOrderNo NE '' then
|
If WorkOrderNo NE '' then
|
||||||
WorkOrderNo = WorkOrderNo[1, '*'] ; // This might be formatted as a WO_MAT Key ID, so strip off the Cassette No.
|
WorkOrderNo = WorkOrderNo[1, '*'] ; // This might be formatted as a WO_MAT Key ID, so strip off the Cassette No.
|
||||||
WOLogRow = Database_Services('ReadDataRow', 'WO_LOG', WorkOrderNo)
|
WOLogRow = Database_Services('ReadDataRow', 'WO_LOG', WorkOrderNo)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WOStepKeys = WOLogRow<WO_LOG_WO_STEP_KEY$>
|
WOStepKeys = WOLogRow<WO_LOG_WO_STEP_KEY$>
|
||||||
WOMatKeys = WOLogRow<WO_LOG_WO_MAT_KEY$>
|
|
||||||
FirstWOMatKey = WOMatKeys<0, 1>
|
|
||||||
WOMatRow = Database_Services('ReadDataRow', 'WO_MAT', FirstWOMatKey)
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
PartNo = WOMatRow<WO_MAT_CUST_PART_NO$>
|
|
||||||
LastWOStepKey = WOStepKeys[-1, 'B' : @VM]
|
LastWOStepKey = WOStepKeys[-1, 'B' : @VM]
|
||||||
|
PartNo = WOLogRow<WO_LOG_EPI_PART_NO$>
|
||||||
WOStepRow = Database_Services('ReadDataRow', 'WO_STEP', LastWOStepKey)
|
WOStepRow = Database_Services('ReadDataRow', 'WO_STEP', LastWOStepKey)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WOStepPSN = WOStepRow<WO_STEP_PROD_SPEC_ID$>
|
WOStepPSN = WOStepRow<WO_STEP_PROD_SPEC_ID$>
|
||||||
@ -751,7 +746,6 @@ Service GetAvailableMakeupWafers(WorkOrderNo, KeysOnly=BOOLEAN)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'WorkOrderNo argument was missing from the ' : Service : ' service.')
|
Error_Services('Add', 'WorkOrderNo argument was missing from the ' : Service : ' service.')
|
||||||
end
|
end
|
||||||
@ -1482,5 +1476,3 @@ ClearCursors:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,6 +11,19 @@ Function Metrology_Services(@Service, @Params)
|
|||||||
Notes : The generic parameters should contain all the necessary information to process the services. Often
|
Notes : The generic parameters should contain all the necessary information to process the services. Often
|
||||||
this will be information like the data Record and Key ID.
|
this will be information like the data Record and Key ID.
|
||||||
|
|
||||||
|
Surface Scan Tool Types:
|
||||||
|
Tencor
|
||||||
|
SP1
|
||||||
|
|
||||||
|
Thickness tool types:
|
||||||
|
Biorad
|
||||||
|
Stratus
|
||||||
|
|
||||||
|
Resistivity (HgCV) Tool Types:
|
||||||
|
CDE
|
||||||
|
4PP
|
||||||
|
SRP
|
||||||
|
|
||||||
Parameters :
|
Parameters :
|
||||||
Service [in] -- Name of the service being requested
|
Service [in] -- Name of the service being requested
|
||||||
Param1-10 [in/out] -- Additional request parameter holders
|
Param1-10 [in/out] -- Additional request parameter holders
|
||||||
@ -70,7 +83,7 @@ $Insert RLIST_EQUATES
|
|||||||
$Insert WM_OUT_EQUATES
|
$Insert WM_OUT_EQUATES
|
||||||
$Insert IQS_VIOL_DATA_EQUATES
|
$Insert IQS_VIOL_DATA_EQUATES
|
||||||
|
|
||||||
Common /MetrologyServices/ MachineType@, RDSNo@
|
Common /MetrologyServices/ MachineType@, LegacyLotId@
|
||||||
|
|
||||||
Equ RETRY_ATTEMPTS$ TO 3
|
Equ RETRY_ATTEMPTS$ TO 3
|
||||||
Equ MINUTES_UNTIL_RETRY$ TO 3
|
Equ MINUTES_UNTIL_RETRY$ TO 3
|
||||||
@ -93,12 +106,12 @@ Equ Comma$ to ','
|
|||||||
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON
|
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON
|
||||||
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Set_Status, QA_Services, obj_Notes
|
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Set_Status, QA_Services, obj_Notes
|
||||||
Declare subroutine Logging_Services, SRP_Send_Mail, SRP_Run_Command, PM_Services, Httpclient_Services
|
Declare subroutine Logging_Services, SRP_Send_Mail, SRP_Run_Command, PM_Services, Httpclient_Services
|
||||||
Declare subroutine Tool_Services, Mona_Services, Reactor_Services
|
Declare subroutine Tool_Services, Mona_Services, Reactor_Services, Met_Test_Services, Met_Test_Services
|
||||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, UCase
|
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, UCase
|
||||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
|
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
|
||||||
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
|
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
|
||||||
Declare function Httpclient_Services, PM_Services, Signature_Services, SRP_Array, Math_Services
|
Declare function Httpclient_Services, PM_Services, Signature_Services, SRP_Array, Math_Services
|
||||||
Declare function Tool_Class_Services, obj_wo_mat
|
Declare function Tool_Class_Services, obj_Wo_Mat, Met_Test_Services, Lot_Services
|
||||||
Declare function SRP_String
|
Declare function SRP_String
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Metrology'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Metrology'
|
||||||
@ -163,6 +176,12 @@ end
|
|||||||
Return Response else ''
|
Return Response else ''
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Service Parameter Options
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
Options MACHINE_TYPES = 'Tencor', 'HgCV', 'CDE', 'Biorad', 'Stratus', 'SP1', 'SPV', 'SRP'
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Services
|
// Services
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -364,16 +383,12 @@ Service GetSP1(Handle)
|
|||||||
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnHazeAvgMean'); // HazeAvg
|
Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnHazeAvgMean'); // HazeAvg
|
||||||
Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].RDS'); // RDSKeyID
|
Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].RDS'); // RDSKeyID
|
||||||
Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Session'); // ScanRecipe
|
Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].Session'); // ScanRecipe
|
||||||
IsMisfit = IndexC(Result<30>, 'MISFIT', 1)
|
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnLpdMean'); // SoDAvg
|
||||||
IF IsMisfit THEN
|
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnLpdMax'); // SoDMax
|
||||||
Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMean'); // SoDAvg
|
Result<1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnLpdMin'); // SoDMin
|
||||||
Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMax'); // SoDMax
|
|
||||||
Result<1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMin'); // SoDMin
|
|
||||||
END ELSE
|
|
||||||
Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMean'); // SoDAvg
|
Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMean'); // SoDAvg
|
||||||
Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMax'); // SoDMax
|
Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMax'); // SoDMax
|
||||||
Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMin'); // SoDMin
|
Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAllMin'); // SoDMin
|
||||||
END
|
|
||||||
Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].MesEntity'); // ScanTool
|
Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].MesEntity'); // ScanTool
|
||||||
Result<44> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAreaMean'); // DCNMM2
|
Result<44> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:'].DcnAreaMean'); // DCNMM2
|
||||||
END
|
END
|
||||||
@ -387,7 +402,7 @@ end service
|
|||||||
//
|
//
|
||||||
// Looks for available Metrology files that are ready to be imported into the MES system.
|
// Looks for available Metrology files that are ready to be imported into the MES system.
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ImportMetrologyFiles(Machine)
|
Service ImportMetrologyFiles(Machine=MACHINE_TYPES)
|
||||||
|
|
||||||
If Machine NE '' then
|
If Machine NE '' then
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
@ -399,36 +414,27 @@ Service ImportMetrologyFiles(Machine)
|
|||||||
|
|
||||||
Begin Case
|
Begin Case
|
||||||
Case Machine _EQC 'Tencor'
|
Case Machine _EQC 'Tencor'
|
||||||
SearchPattern = '*.pdsf';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
|
||||||
Case Machine _EQC 'HgCV'
|
Case Machine _EQC 'HgCV'
|
||||||
SearchPattern = '*.pdsf';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
|
||||||
Case Machine _EQC 'CDE'
|
Case Machine _EQC 'CDE'
|
||||||
SearchPattern = '*.pdsf';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIMAPCDE\Source\MET08RESIMAPCDE\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIMAPCDE\Source\MET08RESIMAPCDE\'
|
||||||
Case Machine _EQC 'Biorad'
|
Case Machine _EQC 'Biorad'
|
||||||
SearchPattern = '*.txt';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRQS408M\Source\MET08THFTIRQS408M\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRQS408M\Source\MET08THFTIRQS408M\'
|
||||||
Case Machine _EQC 'Stratus'
|
Case Machine _EQC 'Stratus'
|
||||||
SearchPattern = '*.txt';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRSTRATUS\Source\MET08THFTIRSTRATUS\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08THFTIRSTRATUS\Source\MET08THFTIRSTRATUS\'
|
||||||
Case Machine _EQC 'SP1'
|
Case Machine _EQC 'SP1'
|
||||||
SearchPattern = '*.txt';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSP1TBI\Source\MET08DDUPSP1TBI\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSP1TBI\Source\MET08DDUPSP1TBI\'
|
||||||
Case Machine _EQC 'SPV'
|
Case Machine _EQC 'SPV'
|
||||||
SearchPattern = '*.txt';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESISRP2100\Source\MET08RESISRP2100\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESISRP2100\Source\MET08RESISRP2100\'
|
||||||
Case Machine _EQC 'SRP'
|
Case Machine _EQC 'SRP'
|
||||||
SearchPattern = '*.txt';
|
|
||||||
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
|
DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
SearchPattern = '*.txt';
|
|
||||||
Error_Services('Add', 'Error in ':Service:' service. Unsupported Machine "':Machine:'" passed into service')
|
Error_Services('Add', 'Error in ':Service:' service. Unsupported Machine "':Machine:'" passed into service')
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
|
SearchPattern = '*.pdsf';
|
||||||
InitDir DataPath:SearchPattern
|
InitDir DataPath:SearchPattern
|
||||||
FileList = DirList()
|
FileList = DirList()
|
||||||
FileNames = ''
|
FileNames = ''
|
||||||
@ -505,7 +511,6 @@ Service ImportMetrologyFiles(Machine)
|
|||||||
RepoPath = Environment_Services('GetApplicationRootPath') : '\Metrology\Run Data Repository\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
|
RepoPath = Environment_Services('GetApplicationRootPath') : '\Metrology\Run Data Repository\MET08ANLYSDIFAAST230\Source\MET08ANLYSDIFAAST230\'
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
IF SearchPattern = '*.pdsf' THEN
|
|
||||||
OSREAD Text FROM DataPath:FileName THEN
|
OSREAD Text FROM DataPath:FileName THEN
|
||||||
json = Metrology_Services('GetJsonFromProcessDataStandardFormat', Text);
|
json = Metrology_Services('GetJsonFromProcessDataStandardFormat', Text);
|
||||||
END ELSE
|
END ELSE
|
||||||
@ -516,31 +521,6 @@ Service ImportMetrologyFiles(Machine)
|
|||||||
END ELSE
|
END ELSE
|
||||||
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to get PDSF json');
|
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to get PDSF json');
|
||||||
END
|
END
|
||||||
END ELSE
|
|
||||||
|
|
||||||
OSREAD RunData FROM DataPath:FileName THEN
|
|
||||||
Set_Status(0)
|
|
||||||
OSWrite RunData to RepoPath:FileName
|
|
||||||
status_code = ''
|
|
||||||
If Get_Status(status_code) then
|
|
||||||
ErrorMessage = 'Error writing run data file to repository: status_code = ' : status_code
|
|
||||||
Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage)
|
|
||||||
Set_Status(0)
|
|
||||||
end
|
|
||||||
|
|
||||||
SWAP '|' WITH @VM IN RunData
|
|
||||||
SWAP CRLF$ WITH @FM IN RunData
|
|
||||||
|
|
||||||
LOOP
|
|
||||||
LastChar = RunData[-1,1]
|
|
||||||
UNTIL LastChar NE @FM
|
|
||||||
RunData[-1,1] = ''
|
|
||||||
REPEAT
|
|
||||||
Convert Tab$ to @FM in RunData
|
|
||||||
END else
|
|
||||||
Metrology_Services('LogResults', '', Machine, 'UID001', 'Read : ' : FileName : ', Size : ' : FileSize)
|
|
||||||
end
|
|
||||||
END
|
|
||||||
|
|
||||||
*************************
|
*************************
|
||||||
* Import metrology data *
|
* Import metrology data *
|
||||||
@ -662,7 +642,12 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
|
|||||||
Begin Case
|
Begin Case
|
||||||
Case Machine _EQC 'Stratus'
|
Case Machine _EQC 'Stratus'
|
||||||
PSN = RunData<9>
|
PSN = RunData<9>
|
||||||
|
QualFile = ( (PSN EQ 'T-Low') or (PSN EQ 'T-Mid') or (PSN EQ 'T-High') or (PSN EQ 'T_LOW') or (PSN EQ 'T_MID') or (PSN EQ 'T_HIGH') )
|
||||||
|
IF QualFile THEN
|
||||||
|
Metrology_Services('ImportStratusQualData', RunData, ResourceID, PSN)
|
||||||
|
END ELSE
|
||||||
Metrology_Services('ImportStratusData', RunData, ResourceID, PSN)
|
Metrology_Services('ImportStratusData', RunData, ResourceID, PSN)
|
||||||
|
END
|
||||||
MachineType@ = 'Stratus'
|
MachineType@ = 'Stratus'
|
||||||
|
|
||||||
Case Machine _EQC 'Biorad'
|
Case Machine _EQC 'Biorad'
|
||||||
@ -723,6 +708,43 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
|
|||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service ImportStratusQualData(RunData, ResourceID, PSN)
|
||||||
|
|
||||||
|
Machine = 'BioRad'
|
||||||
|
URL = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
|
||||||
|
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
|
||||||
|
If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
|
||||||
|
Response = Httpclient_Services('SendHTTPRequest', 'GET', URL, '', '', '', '', '', '', '')
|
||||||
|
If Response NE '' then
|
||||||
|
objJSON = ''
|
||||||
|
If SRP_JSON(objJSON, 'Parse', Response) EQ '' then
|
||||||
|
SumOOS = SRP_JSON(objJSON, 'GetValue', 'Results[1].iq_sum')
|
||||||
|
ToolID = RunData<7>
|
||||||
|
TimeStamp = RunData<2>
|
||||||
|
If SumOOS NE '' then
|
||||||
|
Swap 'T_LOW' with 'T-Low' in PSN
|
||||||
|
Swap 'T_MID' with 'T-Mid' in PSN
|
||||||
|
Swap 'T_HIGH' with 'T-High' in PSN
|
||||||
|
Pass = (SumOOS EQ 0)
|
||||||
|
QualResponse = PM_Services('ProcessQual', PSN, ToolID, TimeStamp, Pass)
|
||||||
|
StatusCode = QualResponse<1>
|
||||||
|
Message = QualResponse<2>
|
||||||
|
Metrology_Services('LogResults', PSN, Machine, StatusCode, Service : ' : ' : Message)
|
||||||
|
end else
|
||||||
|
LogMessage = 'IQS response missing Results[1].iq_sum. Error message: ':SRP_JSON(objJSON, 'GetValue', 'message')
|
||||||
|
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : LogMessage)
|
||||||
|
end
|
||||||
|
SRP_JSON(objJSON, 'Release')
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Failed to parse IQS JSON response')
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service ImportStratusData(RunData, ResourceID, PSN)
|
Service ImportStratusData(RunData, ResourceID, PSN)
|
||||||
|
|
||||||
Machine = 'Stratus'
|
Machine = 'Stratus'
|
||||||
@ -743,7 +765,7 @@ Service ImportStratusData(RunData, ResourceID, PSN)
|
|||||||
ThickAvg = RunData<12>
|
ThickAvg = RunData<12>
|
||||||
Positions = ''
|
Positions = ''
|
||||||
DataPoints = ''
|
DataPoints = ''
|
||||||
|
ToolClass = Xlate('TOOL', Tool, 'CLASS', 'X')
|
||||||
Loop
|
Loop
|
||||||
Position = Trim(RunData<FieldPos>)
|
Position = Trim(RunData<FieldPos>)
|
||||||
DataPoint = Trim(RunData<FieldPos + Offset>)
|
DataPoint = Trim(RunData<FieldPos + Offset>)
|
||||||
@ -767,17 +789,69 @@ Service ImportStratusData(RunData, ResourceID, PSN)
|
|||||||
Case RowExists('WM_OUT', Cassette)
|
Case RowExists('WM_OUT', Cassette)
|
||||||
WorkOrderNo = Field(Cassette, '*', 1)
|
WorkOrderNo = Field(Cassette, '*', 1)
|
||||||
CassNo = Field(Cassette, '*', 3)
|
CassNo = Field(Cassette, '*', 3)
|
||||||
RDSNo@ = Cassette ; // This is used for logging purposes.
|
LegacyLotId@ = Cassette
|
||||||
IsEpiPro = true$
|
IsEpiPro = True$
|
||||||
|
LegacyLotType = 'WM_OUT'
|
||||||
Case RowExists('RDS', RDSNo)
|
Case RowExists('RDS', RDSNo)
|
||||||
WorkOrderNo = Xlate('RDS', RDSNo, 'WO', 'X')
|
WorkOrderNo = Xlate('RDS', RDSNo, 'WO', 'X')
|
||||||
CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X')
|
CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X')
|
||||||
RDSNo@ = RDSNo ; // This is used for logging purposes.
|
LegacyLotId@ = RDSNo
|
||||||
|
LegacyLotType = 'RDS'
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
Error_Services('Add', 'Unrecognized cassette ID ':Cassette:'.')
|
Error_Services('Add', 'Unrecognized cassette ID ':Cassette:'.')
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', LegacyLotId@, LegacyLotType)
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
If Datapoints NE '' then
|
||||||
|
Done = False$
|
||||||
|
For each DataPoint in DataPoints using @VM setting vPos
|
||||||
|
Slot = Positions<0, vPos>
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, LegacyLotId@, ToolClass, Recipe)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, Tool)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestSlot', MetTestId, Slot)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, '', DataPoint)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Done = True$
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
Next DataPoint
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. No DataPoints to import.'
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
// Update WO_MAT record
|
// Update WO_MAT record
|
||||||
StdDev = ''
|
StdDev = ''
|
||||||
@ -804,15 +878,15 @@ Service ImportStratusData(RunData, ResourceID, PSN)
|
|||||||
end
|
end
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||||
If Error_Services('HasError') then
|
If Error_Services('HasError') then
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
// Update the WM_OUT record for EpiPro
|
// Update the WM_OUT record for EpiPro
|
||||||
If IsEpiPro then
|
If IsEpiPro then
|
||||||
NumVals = 0
|
NumVals = 0
|
||||||
WMORec = Database_Services('ReadDataRow', 'WM_OUT', RDSNo@)
|
WMORec = Database_Services('ReadDataRow', 'WM_OUT', LegacyLotId@)
|
||||||
For each Wafer in Positions using @VM setting dPos
|
For each Wafer in Positions using @VM setting dPos
|
||||||
If Wafer NE '' then
|
If Wafer NE '' then
|
||||||
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, Wafer> = DataPoints<0, dPos>
|
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, Wafer> = DataPoints<0, dPos>
|
||||||
@ -830,7 +904,7 @@ Service ImportStratusData(RunData, ResourceID, PSN)
|
|||||||
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
|
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
|
||||||
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
|
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
|
||||||
end
|
end
|
||||||
Database_Services('WriteDataRow', 'WM_OUT', RDSNo@, WMORec, True$, False$, True$)
|
Database_Services('WriteDataRow', 'WM_OUT', LegacyLotId@, WMORec, True$, False$, True$)
|
||||||
end
|
end
|
||||||
|
|
||||||
// Update WO_MAT_QA record
|
// Update WO_MAT_QA record
|
||||||
@ -882,15 +956,15 @@ Service ImportStratusData(RunData, ResourceID, PSN)
|
|||||||
Next Profile
|
Next Profile
|
||||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
|
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID000', Service : ' : Success.')
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID000', Service : ' : Success.')
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -1037,6 +1111,56 @@ Service ImportBioRadData(RunData, ResourceID, IsViewerFile, PSN, FileName)
|
|||||||
Swap ' AM' with 'AM' in Timestamp
|
Swap ' AM' with 'AM' in Timestamp
|
||||||
Swap ' PM' with 'PM' in Timestamp
|
Swap ' PM' with 'PM' in Timestamp
|
||||||
Timestamp = IConv(Timestamp,'DT')
|
Timestamp = IConv(Timestamp,'DT')
|
||||||
|
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSKeyID, 'RDS')
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
ToolId = Field(Filename, ' ', 2, 1)
|
||||||
|
ToolClass = Xlate('TOOL', ToolId, 'CLASS', 'X')
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, RDSKeyID, ToolClass, ScanRecipe, '', RunDataLayer, RunDataZone, '')
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ToolId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If RawDataPoints NE '' then
|
||||||
|
Done = False$
|
||||||
|
For each DataPoint in RawDataPoints using @VM setting vPos
|
||||||
|
Position = Positions<0, vPos>
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, Position, DataPoint)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Done = True$
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
Until Done
|
||||||
|
Next DataPoint
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. No DataPoints to import.'
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
||||||
NumDataPoints = DCount(DataPoints, @VM)
|
NumDataPoints = DCount(DataPoints, @VM)
|
||||||
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
||||||
@ -1255,11 +1379,9 @@ Service ImportBioRadData(RunData, ResourceID, IsViewerFile, PSN, FileName)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service ImportCDEQualData(RunData, ResourceID, PSN)
|
Service ImportCDEQualData(RunData, ResourceID, PSN)
|
||||||
|
|
||||||
Machine = 'CDE'
|
Machine = 'CDE'
|
||||||
ResourceID = Field(FileName, ' ', 1, 1)
|
|
||||||
URL = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
|
URL = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
|
||||||
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
|
TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
|
||||||
If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
|
If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
|
||||||
@ -1289,7 +1411,6 @@ Service ImportCDEQualData(RunData, ResourceID, PSN)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
|
Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
|
||||||
|
|
||||||
Machine = 'CDE'
|
Machine = 'CDE'
|
||||||
@ -1382,6 +1503,57 @@ Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
|
|||||||
Swap ' PM' with 'PM' in Timestamp
|
Swap ' PM' with 'PM' in Timestamp
|
||||||
Timestamp = IConv(Timestamp,'DT')
|
Timestamp = IConv(Timestamp,'DT')
|
||||||
|
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSKeyID, 'RDS')
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
ToolRecipe = Trim(Field(ScanRecipe, '\', 1, 1))
|
||||||
|
ToolPattern = Trim(Field(ScanRecipe, '\', 2, 1))
|
||||||
|
ToolClass = Xlate('TOOL', ToolId, 'CLASS', 'X')
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, RDSKeyID, ToolClass, ToolRecipe, ToolPattern, RunDataLayer, RunDataZone)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ToolId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If RawDatapoints NE '' then
|
||||||
|
Done = False$
|
||||||
|
TempDataPoints = OConv(IConv(RawDatapoints, 'MD':Decimals), 'MD':Decimals)
|
||||||
|
For each DataPoint in TempDataPoints using @VM setting vPos
|
||||||
|
Position = Positions<0, vPos>
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, Position, DataPoint)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Done = True$
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
Until Done
|
||||||
|
Next DataPoint
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. No DataPoints to import.'
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
||||||
NumDataPoints = DCount(DataPoints, @VM)
|
NumDataPoints = DCount(DataPoints, @VM)
|
||||||
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
||||||
@ -1550,7 +1722,7 @@ Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN)
|
|||||||
DataIndex = RDS_TEST_READ_HGCV1_RES$
|
DataIndex = RDS_TEST_READ_HGCV1_RES$
|
||||||
DTMIndex = RDS_TEST_TEST_RUN_HGCV_DTM$
|
DTMIndex = RDS_TEST_TEST_RUN_HGCV_DTM$
|
||||||
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID000', Service : ' : ' : 'Beginning ImportHgCVData')
|
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID000', Service : ' : ' : 'Beginning ImportHgCVData')
|
||||||
RDSNo@ = RDSKeyID
|
LegacyLotId@ = RDSKeyID
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WorkOrderNo = RDSRec<RDS_WO$>
|
WorkOrderNo = RDSRec<RDS_WO$>
|
||||||
@ -1607,23 +1779,83 @@ Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN)
|
|||||||
Positions = ''
|
Positions = ''
|
||||||
DataPoints = ''
|
DataPoints = ''
|
||||||
HgCVDataPoints = ''
|
HgCVDataPoints = ''
|
||||||
|
PhaseDataPoints = ''
|
||||||
Loop
|
Loop
|
||||||
Position = Trim(RunData<FieldPos>)
|
Position = Trim(RunData<FieldPos>)
|
||||||
HgCVDataPoint = Trim(RunData<FieldPos + Offset>)
|
HgCVDataPoint = Trim(RunData<FieldPos + Offset>)
|
||||||
|
PhaseDataPoint = Trim(RunData<FieldPos + PhaseOffset>)
|
||||||
Until Position EQ ''
|
Until Position EQ ''
|
||||||
Positions := Position : @VM
|
Positions := Position : @VM
|
||||||
HgCVDataPoints := HgCVDataPoint : @VM
|
HgCVDataPoints := HgCVDataPoint : @VM
|
||||||
|
PhaseDataPoints := PhaseDataPoint : @VM
|
||||||
FieldPos += FieldPosIncrement
|
FieldPos += FieldPosIncrement
|
||||||
Repeat
|
Repeat
|
||||||
Positions[-1, 1] = '' ; // Strip final @VM
|
Positions[-1, 1] = '' ; // Strip final @VM
|
||||||
HgCVDataPoints[-1, 1] = '' ; // Strip final @VM
|
HgCVDataPoints[-1, 1] = '' ; // Strip final @VM
|
||||||
|
PhaseDataPoints[-1, 1] = '' ; // Strip final @VM
|
||||||
|
RawDataPoints = HgCVDataPoints
|
||||||
|
RawPhaseDataPoints = PhaseDataPoints
|
||||||
HgCVDataPoints = Iconv(HgCVDataPoints, 'MD' : Decimals)
|
HgCVDataPoints = Iconv(HgCVDataPoints, 'MD' : Decimals)
|
||||||
|
PhaseDataPoints = Iconv(PhaseDataPoints, 'MD' : Decimals)
|
||||||
|
|
||||||
Swap ' AM' with 'AM' in Timestamp
|
Swap ' AM' with 'AM' in Timestamp
|
||||||
Swap ' PM' with 'PM' in Timestamp
|
Swap ' PM' with 'PM' in Timestamp
|
||||||
Timestamp = IConv(Timestamp,'DT')
|
Timestamp = IConv(Timestamp,'DT')
|
||||||
|
|
||||||
|
// Recipe field 21
|
||||||
|
// Pattern field 24
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSKeyID, 'RDS')
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
ToolId = RunData<2>
|
||||||
|
ToolRecipe = RunData<21>
|
||||||
|
ToolPattern = RunData<24>
|
||||||
|
ToolClass = Xlate('TOOL', ToolId, 'CLASS', 'X')
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, RDSKeyID, ToolClass, ToolRecipe, ToolPattern, RunDataLayer, RunDataZone)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ToolId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
If RawDataPoints NE '' then
|
||||||
|
Done = False$
|
||||||
|
For each DataPoint in RawDataPoints using @VM setting vPos
|
||||||
|
Position = Positions<0, vPos>
|
||||||
|
PhaseDataPoint = RawPhaseDataPoints<0, vPos>
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, Position, DataPoint, PhaseDataPoint)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Done = True$
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
Until Done
|
||||||
|
Next DataPoint
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. No DataPoints to import.'
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
RDSLayerKeyID = RDSKeyID : '*' : RunDataLayer
|
||||||
NumDataPoints = DCount(HgCVDataPoints, @VM)
|
NumDataPoints = DCount(HgCVDataPoints, @VM)
|
||||||
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
|
||||||
@ -1674,7 +1906,6 @@ Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN)
|
|||||||
PhaseDataPoints[-1, 1] = '' ; // Strip final @VM
|
PhaseDataPoints[-1, 1] = '' ; // Strip final @VM
|
||||||
PhaseDataPoints = Iconv(PhaseDataPoints, 'MD' : Decimals)
|
PhaseDataPoints = Iconv(PhaseDataPoints, 'MD' : Decimals)
|
||||||
DataPoints = HgCVDataPoints
|
DataPoints = HgCVDataPoints
|
||||||
* GoSub CalculateQAData
|
|
||||||
Response = QA_Services('CalculateHgCVData', Datapoints)
|
Response = QA_Services('CalculateHgCVData', Datapoints)
|
||||||
HgCVMin = Response<0, 2>
|
HgCVMin = Response<0, 2>
|
||||||
HgCVMax = Response<0, 3>
|
HgCVMax = Response<0, 3>
|
||||||
@ -1688,23 +1919,12 @@ Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN)
|
|||||||
|
|
||||||
DataPoints = PhaseDataPoints
|
DataPoints = PhaseDataPoints
|
||||||
Response = QA_Services('CalculateHgCVData', Datapoints)
|
Response = QA_Services('CalculateHgCVData', Datapoints)
|
||||||
* GoSub CalculateQAData
|
|
||||||
PhaseMin = Response<0, 2>
|
PhaseMin = Response<0, 2>
|
||||||
PhaseMax = Response<0, 3>
|
PhaseMax = Response<0, 3>
|
||||||
PhaseAvg = Response<0, 1>
|
PhaseAvg = Response<0, 1>
|
||||||
PhaseEdgeMean = Response<0, 4>
|
PhaseEdgeMean = Response<0, 4>
|
||||||
PhaseRangePct = Response<0, 5>
|
PhaseRangePct = Response<0, 5>
|
||||||
// Format data. Round to significant digits.
|
// Format data. Round to significant digits.
|
||||||
* HgCVAvg = Oconv(Iconv(Oconv(HgCVAvg, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* PhaseAvg = Oconv(Iconv(Oconv(PhaseAvg, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* HgCVMin = Oconv(Iconv(Oconv(HgCVMin, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* HgCVMax = Oconv(Iconv(Oconv(HgCVMax, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* PhaseMin = Oconv(Iconv(Oconv(PhaseMin, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* PhaseMax = Oconv(Iconv(Oconv(PhaseMax, 'MD3L'), 'MD3L'), 'MD3L')
|
|
||||||
* HgCVEdgeMean = OConv(IConv(HgCVEdgeMean, 'MD3L'), 'MD3L')
|
|
||||||
* PhaseEdgeMean = Oconv(IConv(PhaseEdgeMean, 'MD3L'), 'MD3L')
|
|
||||||
* HgCVRangePct = Oconv(Iconv(HgCVRangePct, 'MD3L'), 'MD3L')
|
|
||||||
* PhaseRangePct = Oconv(Iconv(PhaseRangePct, 'MD3L'), 'MD3L')
|
|
||||||
WOMatQARec<WO_MAT_QA_RESULT$, vPos> = HgCVAvg : @SVM : PhaseAvg
|
WOMatQARec<WO_MAT_QA_RESULT$, vPos> = HgCVAvg : @SVM : PhaseAvg
|
||||||
WOMatQARec<WO_MAT_QA_MIN_RESULT$, vPos> = HgCVMin : @SVM : PhaseMin
|
WOMatQARec<WO_MAT_QA_MIN_RESULT$, vPos> = HgCVMin : @SVM : PhaseMin
|
||||||
WOMatQARec<WO_MAT_QA_MAX_RESULT$, vPos> = HgCVMax : @SVM : PhaseMax
|
WOMatQARec<WO_MAT_QA_MAX_RESULT$, vPos> = HgCVMax : @SVM : PhaseMax
|
||||||
@ -1854,13 +2074,98 @@ Service ImportTencorData(RunData)
|
|||||||
SoDMin = RunData<41>
|
SoDMin = RunData<41>
|
||||||
ScanTool = RunData<43>
|
ScanTool = RunData<43>
|
||||||
Swap '%' with ' ' in ScanTool
|
Swap '%' with ' ' in ScanTool
|
||||||
RDSNo@ = RDSKeyID
|
LegacyLotId@ = RDSKeyID
|
||||||
Convert @Lower_Case to @Upper_Case in ScanTool
|
Convert @Lower_Case to @Upper_Case in ScanTool
|
||||||
|
|
||||||
Swap ' AM' with 'AM' in Timestamp
|
Swap ' AM' with 'AM' in Timestamp
|
||||||
Swap ' PM' with 'PM' in Timestamp
|
Swap ' PM' with 'PM' in Timestamp
|
||||||
Timestamp = IConv(Timestamp,'DT')
|
Timestamp = IConv(Timestamp,'DT')
|
||||||
|
|
||||||
|
SODWaferArray = ''
|
||||||
|
WaferNos = ''
|
||||||
|
SODVals = ''
|
||||||
|
SortVals = ''
|
||||||
|
SODStartTime = Time()
|
||||||
|
SODWaferArray = QA_Services('GetSODPerWafer', RDSKeyID, ScanRecipe, Timestamp)
|
||||||
|
SODStopTime = Time()
|
||||||
|
TimeTaken = SODStopTime - SODStartTime
|
||||||
|
LogData = ''
|
||||||
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||||
|
LogData<2> = MachineType@
|
||||||
|
LogData<3> = LegacyLotId@
|
||||||
|
LogData<4> = 'Time taken to import SOD data: ':TimeTaken:' seconds.'
|
||||||
|
Logging_Services('AppendLog', objSODPerfLog, LogData, @RM, @FM)
|
||||||
|
If SODWaferArray NE '' then
|
||||||
|
WaferNos = SODWaferArray<1>
|
||||||
|
SODVals = SODWaferArray<2>
|
||||||
|
SortVals = SODWaferArray<3>
|
||||||
|
For each WaferNo in WaferNos using @VM
|
||||||
|
If WaferNo NE '' then QA_Services('PostWaferImageRequest', RDSKeyID, WaferNo, ScanRecipe)
|
||||||
|
Next Wafer
|
||||||
|
end
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSKeyID, 'RDS')
|
||||||
|
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, RDSKeyID, '', ScanRecipe)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ScanTool)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Add SORT property to Tencor surfscan MET_TEST - 'PASS' or 'FAIL' - no min or max
|
||||||
|
//Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SORT')
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Prop 1: SURFACE_SCAN_SUM_OF_DEFECTS_MIN
|
||||||
|
// Prop 2: SURFACE_SCAN_SUM_OF_DEFECTS_MAX
|
||||||
|
// Prop 3: SURFACE_SCAN_SUM_OF_DEFECTS_AVG
|
||||||
|
// Prop 4: SURFACE_SCAN_SUM_OF_DEFECTS (per wafer)
|
||||||
|
// Prop 5: SURFACE_SCAN_HAZE_AVG
|
||||||
|
// Prop 6: SURFACE_SCAN_SORT (per wafer)
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SUM_OF_DEFECTS_MIN')
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SUM_OF_DEFECTS_MAX')
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SUM_OF_DEFECTS_AVG')
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SUM_OF_DEFECTS')
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_HAZE_AVG')
|
||||||
|
Met_Test_Services('AddProperty', MetTestId, 'SURFACE_SCAN_SORT')
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, '', SoDMin, SoDMax, SoDAvg, '', HazeAvg)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
For each WaferNo in WaferNos using @VM setting vPos
|
||||||
|
If WaferNo NE '' then
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, WaferNo, '', '', '', SODVals<0, vPos>, '', SortVals<0, vPos>)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next WaferNo
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
If RowExists('RDS', RDSKeyID) then
|
If RowExists('RDS', RDSKeyID) then
|
||||||
// Try to read the CleanInsp datarow. Use this to identify the RDSKeyID.
|
// Try to read the CleanInsp datarow. Use this to identify the RDSKeyID.
|
||||||
ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSKeyID)
|
ReactRunRec = Database_Services('ReadDataRow', 'REACT_RUN', RDSKeyID)
|
||||||
@ -1894,30 +2199,11 @@ Service ImportTencorData(RunData)
|
|||||||
NumWfrs = 0
|
NumWfrs = 0
|
||||||
Locate ScanRecipe In SpecRecipeList Using @VM Setting RecipeIndex then
|
Locate ScanRecipe In SpecRecipeList Using @VM Setting RecipeIndex then
|
||||||
// Recipe found in spec list
|
// Recipe found in spec list
|
||||||
SpecSampleQty = CleanInspRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
|
|
||||||
SODWaferArray = ''
|
|
||||||
SODStartTime = Time()
|
|
||||||
SODWaferArray = QA_Services('GetSODPerWafer', RDSKeyID, ScanRecipe, Timestamp)
|
|
||||||
SODStopTime = Time()
|
|
||||||
TimeTaken = SODStopTime - SODStartTime
|
|
||||||
LogData = ''
|
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
|
||||||
LogData<2> = MachineType@
|
|
||||||
LogData<3> = RDSNo@
|
|
||||||
LogData<4> = 'Time taken to import SOD data: ':TimeTaken:' seconds.'
|
|
||||||
Logging_Services('AppendLog', objSODPerfLog, LogData, @RM, @FM)
|
|
||||||
If SODWaferArray NE '' then
|
If SODWaferArray NE '' then
|
||||||
WaferNos = SODWaferArray<1>
|
|
||||||
SODVals = SODWaferArray<2>
|
|
||||||
SortVals = SODWaferArray<3>
|
|
||||||
For each Wfr in SODVals using @VM setting vPos
|
|
||||||
NumWfrs += (Wfr NE '')
|
|
||||||
Next Wfr
|
|
||||||
For each WaferNo in WaferNos using @VM
|
For each WaferNo in WaferNos using @VM
|
||||||
If WaferNo NE '' then
|
If WaferNo NE '' then
|
||||||
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanIndex, WaferNo> = SODVals<1,WaferNo>
|
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$, ScanIndex, WaferNo> = SODVals<1,WaferNo>
|
||||||
CleanInspRec<CLEAN_INSP_SCAN_SORT_PER_WAFER$, ScanIndex, WaferNo> = SortVals<1,WaferNo>
|
CleanInspRec<CLEAN_INSP_SCAN_SORT_PER_WAFER$, ScanIndex, WaferNo> = SortVals<1,WaferNo>
|
||||||
QA_Services('PostWaferImageRequest', RDSKeyID, WaferNo, ScanRecipe)
|
|
||||||
end
|
end
|
||||||
Next Wafer
|
Next Wafer
|
||||||
end
|
end
|
||||||
@ -1970,7 +2256,7 @@ Service ImportTencorData(RunData)
|
|||||||
// If statement to gate from production below
|
// If statement to gate from production below
|
||||||
PostStartTime = Time()
|
PostStartTime = Time()
|
||||||
if Indexc(ScanRecipe, 'POST', 1) then
|
if Indexc(ScanRecipe, 'POST', 1) then
|
||||||
//Locate 'POST' in ScanRecipe Using "" setting pPos then
|
// Locate 'POST' in ScanRecipe Using "" setting pPos then
|
||||||
ReactRunRec = Xlate('REACT_RUN',RDSKeyID, '', 'X')
|
ReactRunRec = Xlate('REACT_RUN',RDSKeyID, '', 'X')
|
||||||
WONo = ReactRunRec<REACT_RUN_WO_NO$>;//WONo
|
WONo = ReactRunRec<REACT_RUN_WO_NO$>;//WONo
|
||||||
WOStep = ReactRunRec<REACT_RUN_WO_STEP$>;//WOStep
|
WOStep = ReactRunRec<REACT_RUN_WO_STEP$>;//WOStep
|
||||||
@ -1979,19 +2265,19 @@ Service ImportTencorData(RunData)
|
|||||||
PSNo = XLATE('RDS',RDSKeyID,RDS_PROD_SPEC_ID$,'X');//PSNo
|
PSNo = XLATE('RDS',RDSKeyID,RDS_PROD_SPEC_ID$,'X');//PSNo
|
||||||
DefectSpec = Xlate('PRS_STAGE', PSNo : '*LWI', PRS_STAGE_SURF_DEFECTS$, 'X');//Since there is no set spec for a non-existent stage we need to take one from the unloading step.
|
DefectSpec = Xlate('PRS_STAGE', PSNo : '*LWI', PRS_STAGE_SURF_DEFECTS$, 'X');//Since there is no set spec for a non-existent stage we need to take one from the unloading step.
|
||||||
HazeSpec = Xlate('PRS_STAGE', PSNo : '*LWI', PRS_STAGE_SURF_HAZE$, 'X');//Since there is no set spec for a non-existent stage we need to take one from the unloading step.
|
HazeSpec = Xlate('PRS_STAGE', PSNo : '*LWI', PRS_STAGE_SURF_HAZE$, 'X');//Since there is no set spec for a non-existent stage we need to take one from the unloading step.
|
||||||
//Check if CI was created already(usually during cleans) JRO-9-28
|
// Check if CI was created already(usually during cleans) JRO-9-28
|
||||||
CIStages = ReactRunRec<REACT_RUN_CI_STAGE$>
|
CIStages = ReactRunRec<REACT_RUN_CI_STAGE$>
|
||||||
Locate 'POST' in CIStages using @VM setting sPos then
|
Locate 'POST' in CIStages using @VM setting sPos then
|
||||||
//Existing POST CI record found, fetch it.
|
// Existing POST CI record found, fetch it.
|
||||||
CINo = ReactRunRec<REACT_RUN_CI_NO$,sPos>
|
CINo = ReactRunRec<REACT_RUN_CI_NO$,sPos>
|
||||||
CleanInspRec = Xlate('CLEAN_INSP', CINo,'','X')
|
CleanInspRec = Xlate('CLEAN_INSP', CINo,'','X')
|
||||||
IF CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> NE '' THEN
|
IF CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> NE '' THEN
|
||||||
//Append a value mark to the end of the field so that we can add another set of data
|
// Append a value mark to the end of the field so that we can add another set of data
|
||||||
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> = CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> : @VM
|
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> = CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$> : @VM
|
||||||
END
|
END
|
||||||
exists = True$
|
exists = True$
|
||||||
end else
|
end else
|
||||||
//No Exisiting POST CI record found, Create new CI record
|
// No Exisiting POST CI record found, Create new CI record
|
||||||
exists = False$
|
exists = False$
|
||||||
oCIParms = ''
|
oCIParms = ''
|
||||||
oCIParms = WONo:@RM
|
oCIParms = WONo:@RM
|
||||||
@ -2020,28 +2306,18 @@ Service ImportTencorData(RunData)
|
|||||||
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_INSP_TEST_RUN_DTM$, -1, 0, Timestamp)
|
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_INSP_TEST_RUN_DTM$, -1, 0, Timestamp)
|
||||||
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_SPEC_SURFSCAN_RECIPE$, -1, 0, ScanRecipe)
|
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_SPEC_SURFSCAN_RECIPE$, -1, 0, ScanRecipe)
|
||||||
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_SPEC_SURF_DEFECTS$, -1, 0, DefectSpec)
|
CleanInspRec = Insert(CleanInspRec, CLEAN_INSP_SPEC_SURF_DEFECTS$, -1, 0, DefectSpec)
|
||||||
//Here I am attempting to create the scan details.
|
|
||||||
SODWaferArray = ''
|
|
||||||
SODWaferArray = QA_Services('GetSODPerWafer', RDSKeyID, ScanRecipe, Timestamp)
|
|
||||||
|
|
||||||
|
// Here I am attempting to create the scan details.
|
||||||
If SODWaferArray NE '' then
|
If SODWaferArray NE '' then
|
||||||
WaferNos = SODWaferArray<1>
|
|
||||||
SODVals = SODWaferArray<2>
|
|
||||||
SortVals = SODWaferArray<3>
|
|
||||||
NumRecipes = DCount(CleanInspRec<CLEAN_INSP_SCAN_RECIPE$>, @VM)
|
NumRecipes = DCount(CleanInspRec<CLEAN_INSP_SCAN_RECIPE$>, @VM)
|
||||||
NumWfrs = ''
|
|
||||||
For each Wfr in SODVals using @VM setting vPos
|
|
||||||
NumWfrs += (Wfr NE '')
|
|
||||||
Next Wfr
|
|
||||||
For each WaferNo in WaferNos using @VM
|
For each WaferNo in WaferNos using @VM
|
||||||
If WaferNo NE '' then
|
If WaferNo NE '' then
|
||||||
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$, NumRecipes, WaferNo> = SODVals<1,WaferNo>
|
CleanInspRec<CLEAN_INSP_SCAN_SOD_PER_WAFER$, NumRecipes, WaferNo> = SODVals<1,WaferNo>
|
||||||
CleanInspRec<CLEAN_INSP_SCAN_SORT_PER_WAFER$, NumRecipes, WaferNo> = SortVals<1,WaferNo>
|
CleanInspRec<CLEAN_INSP_SCAN_SORT_PER_WAFER$, NumRecipes, WaferNo> = SortVals<1,WaferNo>
|
||||||
QA_Services('PostWaferImageRequest', RDSKeyID, WaferNo, ScanRecipe)
|
|
||||||
end
|
end
|
||||||
Next Wafer
|
Next Wafer
|
||||||
end
|
end
|
||||||
if exists Eq False$ then
|
If exists EQ False$ then
|
||||||
oCIParms := CleanInspRec ;
|
oCIParms := CleanInspRec ;
|
||||||
CINo = obj_Clean_Insp('Create',oCIParms)
|
CINo = obj_Clean_Insp('Create',oCIParms)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
@ -2054,7 +2330,7 @@ Service ImportTencorData(RunData)
|
|||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS')
|
||||||
LogData<2> = MachineType@
|
LogData<2> = MachineType@
|
||||||
LogData<3> = RDSNo@
|
LogData<3> = LegacyLotId@
|
||||||
LogData<4> = 'Time taken to import POST data: ':TimeTaken:' seconds.'
|
LogData<4> = 'Time taken to import POST data: ':TimeTaken:' seconds.'
|
||||||
Logging_Services('AppendLog', objPOSTPerfLog, LogData, @RM, @FM)
|
Logging_Services('AppendLog', objPOSTPerfLog, LogData, @RM, @FM)
|
||||||
end else
|
end else
|
||||||
@ -2063,7 +2339,7 @@ Service ImportTencorData(RunData)
|
|||||||
ErrorMessage = 'Failed to create CLEAN_INSP record. Error UID002.'
|
ErrorMessage = 'Failed to create CLEAN_INSP record. Error UID002.'
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
//write to existing CI rec.
|
// Write to existing CI rec.
|
||||||
obj_Tables('WriteRec','CLEAN_INSP':@RM:CINo:@RM:@RM:CleanInspRec)
|
obj_Tables('WriteRec','CLEAN_INSP':@RM:CINo:@RM:@RM:CleanInspRec)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
@ -2118,17 +2394,64 @@ Service ImportSP1Data(RunData)
|
|||||||
end
|
end
|
||||||
ScanTool = RunData<43>
|
ScanTool = RunData<43>
|
||||||
DCNMM2 = RunData<44>
|
DCNMM2 = RunData<44>
|
||||||
* Swap '%' with ' ' in ScanTool
|
|
||||||
// The 4th character can be 0 or %, but needs to be ' ' in OpenInsight
|
// The 4th character can be 0 or %, but needs to be ' ' in OpenInsight
|
||||||
ScanTool[4,1] = ' '
|
ScanTool[4,1] = ' '
|
||||||
Convert @Lower_Case to @Upper_Case in ScanTool
|
Convert @Lower_Case to @Upper_Case in ScanTool
|
||||||
Convert @Lower_Case to @Upper_Case in CompareScanRecipe
|
Convert @Lower_Case to @Upper_Case in CompareScanRecipe
|
||||||
* Convert ' ' to '' in CompareScanRecipe
|
|
||||||
|
|
||||||
Swap ' AM' with 'AM' in Timestamp
|
Swap ' AM' with 'AM' in Timestamp
|
||||||
Swap ' PM' with 'PM' in Timestamp
|
Swap ' PM' with 'PM' in Timestamp
|
||||||
Timestamp = IConv(Timestamp,'DT')
|
Timestamp = IConv(Timestamp,'DT')
|
||||||
RDSNo@ = RDSKeyID
|
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', RDSKeyID, 'RDS')
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, RDSKeyID, '', ScanRecipe)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ScanTool)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Prop 1: SURFACE_SCAN_SUM_OF_DEFECTS_MIN
|
||||||
|
// Prop 2: SURFACE_SCAN_SUM_OF_DEFECTS_MAX
|
||||||
|
// Prop 3: SURFACE_SCAN_SUM_OF_DEFECTS_AVG
|
||||||
|
// Prop 4: SURFACE_SCAN_SUM_OF_DEFECTS (per wafer) - Currently not captured for SP1
|
||||||
|
// Prop 5: SURFACE_SCAN_HAZE_AVG
|
||||||
|
Met_Test_Services('RemoveProperty', MetTestId, 'SURFACE_SCAN_SUM_OF_DEFECTS')
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
// Set SOD min, SOD max, SOD avg, and Haze Avg
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, '', SoDMin, SoDMax, SoDAvg, '', HazeAvg)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LegacyLotId@ = RDSKeyID
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WorkOrderNo = RDSRec<RDS_WO$>
|
WorkOrderNo = RDSRec<RDS_WO$>
|
||||||
@ -2520,7 +2843,7 @@ The service does the following actions:
|
|||||||
5. Determines the spec slot by reading the WO_MAT_QA record -> SLOT field
|
5. Determines the spec slot by reading the WO_MAT_QA record -> SLOT field
|
||||||
6. If the detected RunDataSlot matches the spec slot, writes the datapoint to the WO_MAT_QA record - > RESULT field in the same @VM that the iterator is currently set to.
|
6. If the detected RunDataSlot matches the spec slot, writes the datapoint to the WO_MAT_QA record - > RESULT field in the same @VM that the iterator is currently set to.
|
||||||
*/
|
*/
|
||||||
Service ImportBioRadEPPFQAData(RunData, FileName)
|
Service ImportBioRadEPPFQAData(RunData, Filename)
|
||||||
|
|
||||||
Timestamp = RunData<2>
|
Timestamp = RunData<2>
|
||||||
WMOKeyID = RunData<6>
|
WMOKeyID = RunData<6>
|
||||||
@ -2553,15 +2876,66 @@ Service ImportBioRadEPPFQAData(RunData, FileName)
|
|||||||
Positions[-1, 1] = '' ; // Strip final @VM
|
Positions[-1, 1] = '' ; // Strip final @VM
|
||||||
DataPoints[-1, 1] = '' ; // Strip final @VM
|
DataPoints[-1, 1] = '' ; // Strip final @VM
|
||||||
|
|
||||||
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', WMOKeyID, 'WM_OUT')
|
||||||
|
If LotId NE '' then
|
||||||
|
If DCount(LotId, @VM) EQ 1 then
|
||||||
|
// Import into new metrology data structures
|
||||||
|
ToolId = Field(Filename, ' ', 2, 1)
|
||||||
|
ToolClass = Xlate('TOOL', ToolId, 'CLASS', 'X')
|
||||||
|
If DataPoints NE '' then
|
||||||
|
For each DataPoint in DataPoints using @VM setting vPos
|
||||||
|
Slot = Positions<0, vPos>
|
||||||
|
MetTestId = Met_Test_Services('CreateMetTest', LotId, WMOKeyID, ToolClass, ScanRecipe, '', RunDataLayer)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetPropsAndLimits', MetTestId)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
// Failed to set property names and limits based on input data from metrology file. Log this and continue importing data.
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
Error_Services('Clear')
|
||||||
|
end
|
||||||
|
Met_Test_Services('SetMetTestTool', MetTestId, ToolId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestDtm', MetTestId, TimeStamp)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('SetMetTestSlot', MetTestId, Slot)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Met_Test_Services('AddMetTestData', MetTestId, '', DataPoint)
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
|
end
|
||||||
|
Next DataPoint
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. No DataPoints to import.'
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Swap @VM with ',' in LotId
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Number of lot ids returned does not equal 1. Lot ids: ':LotId
|
||||||
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : ErrorMsg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
If Error_Services('HasError') then
|
If Error_Services('HasError') then
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
//Update the WM_OUT record for EpiPro
|
//Update the WM_OUT record for EpiPro
|
||||||
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, DataSlotId> = DataPoints
|
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, DataSlotId> = DataPoints
|
||||||
Database_Services('WriteDataRow', 'WM_OUT', WMOKeyID, WMORec, True$, False$, True$)
|
Database_Services('WriteDataRow', 'WM_OUT', WMOKeyID, WMORec, True$, False$, True$)
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
// Update WO_MAT_QA record
|
// Update WO_MAT_QA record
|
||||||
WOMatQAID = Field(WMOKeyID, '*', 1) : '*' : Field(WMOKeyID, '*', 3)
|
WOMatQAID = Field(WMOKeyID, '*', 1) : '*' : Field(WMOKeyID, '*', 3)
|
||||||
@ -2604,12 +2978,12 @@ Service ImportBioRadEPPFQAData(RunData, FileName)
|
|||||||
Next Profile
|
Next Profile
|
||||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
|
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID000', Service : ' : Success.')
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID000', Service : ' : Success.')
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
Metrology_Services('LogResults', LegacyLotId@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -2735,9 +3109,9 @@ Service GetIQSViolations()
|
|||||||
Database_Services('WriteDataRow', 'CONFIG', 'IQS_VIOL_DATA', ParsedIQSData, True$, False$, True$)
|
Database_Services('WriteDataRow', 'CONFIG', 'IQS_VIOL_DATA', ParsedIQSData, True$, False$, True$)
|
||||||
//Send status of last write time
|
//Send status of last write time
|
||||||
If SRP_Datetime('MinuteSpan', LastWriteTime, SRP_Datetime('Now')) GT 10 then
|
If SRP_Datetime('MinuteSpan', LastWriteTime, SRP_Datetime('Now')) GT 10 then
|
||||||
Mona_Services('SendBufferedStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'CRITICAL')
|
Mona_Services('PostStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'CRITICAL')
|
||||||
end else
|
end else
|
||||||
Mona_Services('SendBufferedStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'OK')
|
Mona_Services('PostStatus', 'IQS_VIOLATION_DATA', 'LastDataTimestamp', 'OK')
|
||||||
end
|
end
|
||||||
|
|
||||||
Reactor_Services('UpdateReactorIQSViolations')
|
Reactor_Services('UpdateReactorIQSViolations')
|
||||||
@ -3272,4 +3646,3 @@ LoadRunDataToDatabase:
|
|||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
98
LSL2/STPROC/METTESTS_API.txt
Normal file
98
LSL2/STPROC/METTESTS_API.txt
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
Function Mettests_API(@API)
|
||||||
|
/***********************************************************************************************************************
|
||||||
|
|
||||||
|
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 : Mettests_API
|
||||||
|
|
||||||
|
Description : API logic for the Mettests resource.
|
||||||
|
|
||||||
|
Notes : All web APIs should include the API_SETUP insert. This will provide several useful variables:
|
||||||
|
|
||||||
|
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
|
||||||
|
APIURL - The URL for the API entry point (e.g., api.mysite.com/v1).
|
||||||
|
FullEndpointURL - The URL submitted by the client, including query params.
|
||||||
|
FullEndpointURLNoQuery - The URL submitted by the client, excluding query params.
|
||||||
|
EndpointSegment - The URL endpoint segment.
|
||||||
|
ParentURL - The URL path preceeding the current endpoint.
|
||||||
|
CurrentAPI - The name of this stored procedure.
|
||||||
|
|
||||||
|
Parameters :
|
||||||
|
API [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
|
||||||
|
- APIPattern must follow this structure Mettests[.ID.[<Property>]]
|
||||||
|
- HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
|
||||||
|
Examples:
|
||||||
|
- Mettests.POST
|
||||||
|
- Mettests.ID.PUT
|
||||||
|
- Mettests.ID.firstName.GET
|
||||||
|
Response [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
|
||||||
|
services do not rely upon anything being returned in the response. This is what the
|
||||||
|
various services like SetResponseBody and SetResponseStatus services are for. A response
|
||||||
|
value is only helpful if the developers want to use it for debug purposes.
|
||||||
|
|
||||||
|
History : (Date, Initials, Notes)
|
||||||
|
05/20/25 xxx Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$insert APP_INSERTS
|
||||||
|
$insert API_SETUP
|
||||||
|
$insert HTTP_INSERTS
|
||||||
|
|
||||||
|
Declare function Met_Test_Services
|
||||||
|
|
||||||
|
GoToAPI else
|
||||||
|
// The specific resource endpoint doesn't have a API handler yet.
|
||||||
|
HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
Return Response OR ''
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Endpoint Handlers
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
API mettests.ID.HEAD
|
||||||
|
API mettests.ID.GET
|
||||||
|
|
||||||
|
// Return JSON payload containing RDS record details
|
||||||
|
StatusCode = 200
|
||||||
|
GoSub CreateHALItem
|
||||||
|
|
||||||
|
end api
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// CreateHALItem
|
||||||
|
//
|
||||||
|
// Creates a HAL+JSON object based on the OpenInsight data row representation of the scan.
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
CreateHALItem:
|
||||||
|
|
||||||
|
MetTestId = EndpointSegment
|
||||||
|
MetTestJSON = Met_Test_Services('ConvertRecordToJSON', MetTestId, '', FullEndpointURL)
|
||||||
|
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
|
||||||
|
HTTP_Services('SetResponseBody', MetTestJSON, False$, 'application/hal+json')
|
||||||
|
If Assigned(Message) then
|
||||||
|
HTTP_Services('SetResponseStatus', StatusCode, Message)
|
||||||
|
end else
|
||||||
|
HTTP_Services('SetResponseStatus', StatusCode)
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Message = Error_Services('GetMessage')
|
||||||
|
HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': Message)
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
257
LSL2/STPROC/MET_TEST_ACTIONS.txt
Normal file
257
LSL2/STPROC/MET_TEST_ACTIONS.txt
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
Function MET_TEST_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 : Met_Test_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)
|
||||||
|
05/14/25 djs Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert FILE.SYSTEM.EQUATES
|
||||||
|
$Insert ACTION_SETUP
|
||||||
|
$Insert APP_INSERTS
|
||||||
|
$Insert MET_TEST_EQUATES
|
||||||
|
$Insert MET_TEST_DATA_EQUATES
|
||||||
|
$Insert MET_TEST_INSERTS
|
||||||
|
$Insert DICT_EQUATES
|
||||||
|
|
||||||
|
Declare function Database_Services, SRP_Array, Read_Column
|
||||||
|
Declare subroutine Database_Services, RTI_Xlate_Controller
|
||||||
|
|
||||||
|
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 = ''
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
MetTestDataIds = {MET_TEST_DATA_IDS}
|
||||||
|
If MetTestDataIds NE '' then
|
||||||
|
// Evaluate if MET_TEST is out of spec
|
||||||
|
RTI_Xlate_Controller('DisableCache')
|
||||||
|
For PropertyIndex = 1 to NUM_PROPERTIES$
|
||||||
|
MetTestOutofSpec = (Sum(Xlate('MET_TEST_DATA', MetTestDataIds, "PROPERTY_":PropertyIndex:'_OUT_OF_SPEC', 'X')) GT 0)
|
||||||
|
Until MetTestOutofSpec
|
||||||
|
Next PropertyIndex
|
||||||
|
Record<MET_TEST.OUT_OF_SPEC$> = MetTestOutofSpec
|
||||||
|
// Evaluate if MET_TEST is complete (all required data has been recorded)
|
||||||
|
// If Sample Size set, then each defined property should have that number of related data points (MET_TEST_DATA) records.
|
||||||
|
// If Sample Size is not set, then each defined property should have at least one related data point (MET_TEST_DATA) record.
|
||||||
|
MetComplete = True$
|
||||||
|
SampleSize = {SAMPLE_SIZE}
|
||||||
|
If SampleSize EQ '' then SampleSize = 1
|
||||||
|
For PropertyIndex = 1 to NUM_PROPERTIES$
|
||||||
|
PropColNo = Xlate('DICT.MET_TEST', 'PROPERTY_':PropertyIndex, DICT_COLUMN_NO$, 'X')
|
||||||
|
If (Record<PropColNo> NE '') then
|
||||||
|
// Property is defined, check if number of data points matches SAMPLE_SIZE
|
||||||
|
PropVals = Xlate('MET_TEST_DATA', MetTestDataIds, 'PROPERTY_':PropertyIndex:'_VALUE', 'X')
|
||||||
|
PropVals = SRP_Array('Clean', PropVals, 'Trim')
|
||||||
|
MetComplete = (DCount(PropVals, @VM) GE SampleSize)
|
||||||
|
end
|
||||||
|
Until Not(MetComplete)
|
||||||
|
Next PropertyIndex
|
||||||
|
Record<MET_TEST.COMPLETE$> = MetComplete
|
||||||
|
RTI_Xlate_Controller('EnableCache')
|
||||||
|
end else
|
||||||
|
Record<MET_TEST.OUT_OF_SPEC$> = False$
|
||||||
|
Record<MET_TEST.COMPLETE$> = False$
|
||||||
|
end
|
||||||
|
SaveRecord = Record
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
WRITE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
DELETE_RECORD_PRE:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
DELETE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ClearCursors:
|
||||||
|
|
||||||
|
For counter = 0 to 8
|
||||||
|
ClearSelect counter
|
||||||
|
Next counter
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
276
LSL2/STPROC/MET_TEST_DATA_ACTIONS.txt
Normal file
276
LSL2/STPROC/MET_TEST_DATA_ACTIONS.txt
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
Function MET_TEST_DATA_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 : Met_Test_Data_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)
|
||||||
|
05/14/25 djs Original programmer.
|
||||||
|
|
||||||
|
***********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
|
$Insert FILE.SYSTEM.EQUATES
|
||||||
|
$Insert ACTION_SETUP
|
||||||
|
$Insert APP_INSERTS
|
||||||
|
$Insert MET_TEST_EQUATES
|
||||||
|
$Insert MET_TEST_DATA_EQUATES
|
||||||
|
$Insert MET_TEST_INSERTS
|
||||||
|
$Insert DICT_EQUATES
|
||||||
|
|
||||||
|
Declare function Database_Services
|
||||||
|
Declare subroutine Database_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 = ''
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
// Validate Property Values against specs defined in MET_TEST parent record
|
||||||
|
MetTestId = {MET_TEST_ID}
|
||||||
|
If MetTestId NE '' then
|
||||||
|
MetTestRec = Database_Services('ReadDataRow', 'MET_TEST', MetTestId)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
MetTestOutofSpecOrig = MetTestRec<MET_TEST.OUT_OF_SPEC$>
|
||||||
|
MetTestOutofSpec = False$
|
||||||
|
For PropertyIndex = 1 to NUM_PROPERTIES$
|
||||||
|
PropOutofSpec = False$
|
||||||
|
Prop = Xlate('MET_TEST', MetTestId, 'PROPERTY_':PropertyIndex, 'X')
|
||||||
|
If Prop NE '' then
|
||||||
|
PropMin = Xlate('MET_TEST', MetTestId, 'PROPERTY_':PropertyIndex:'_SPEC_MIN', 'X')
|
||||||
|
PropMax = Xlate('MET_TEST', MetTestId, 'PROPERTY_':PropertyIndex:'_SPEC_MAX', 'X')
|
||||||
|
PropValColNo = Xlate('DICT.MET_TEST_DATA', 'PROPERTY_':PropertyIndex:'_VALUE', DICT_COLUMN_NO$, 'X')
|
||||||
|
PropVal = Record<PropValColNo>
|
||||||
|
Begin Case
|
||||||
|
|
||||||
|
Case (PropVal EQ '')
|
||||||
|
PropOutofSpec = False$
|
||||||
|
|
||||||
|
Case ( (PropMin NE '') and (PropMax NE '') )
|
||||||
|
|
||||||
|
PropOutofSpec = ( (PropVal LT PropMin) or (PropVal GT PropMax) )
|
||||||
|
|
||||||
|
Case (PropMin NE '')
|
||||||
|
|
||||||
|
PropOutofSpec = (PropVal LT PropMin)
|
||||||
|
|
||||||
|
Case (PropMax NE '')
|
||||||
|
|
||||||
|
PropOutofSpec = (PropVal GT PropMax)
|
||||||
|
|
||||||
|
Case (Prop EQ 'SURFACE_SCAN_SORT')
|
||||||
|
PropOutofSpec = Not((PropVal _EQC 'PASS'))
|
||||||
|
|
||||||
|
Case Otherwise$
|
||||||
|
Null
|
||||||
|
|
||||||
|
End Case
|
||||||
|
PropOOSColNo = Xlate('DICT.MET_TEST_DATA', 'PROPERTY_':PropertyIndex:'_OUT_OF_SPEC', DICT_COLUMN_NO$, 'X')
|
||||||
|
Record<PropOOSColNo> = PropOutofSpec
|
||||||
|
end
|
||||||
|
If PropOutofSpec then MetTestOutofSpec = True$
|
||||||
|
Next PropertyIndex
|
||||||
|
SaveRecord = Record
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
WRITE_RECORD:
|
||||||
|
|
||||||
|
// Trigger MET_TEST_ACTIONS to re-evaluate if the entire MET_TEST record is in spec and comlete
|
||||||
|
MetTestRec = Database_Services('ReadDataRow', 'MET_TEST', {MET_TEST_ID})
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Database_Services('WriteDataRow', 'MET_TEST', {MET_TEST_ID}, MetTestRec, True$, False$, False$)
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
DELETE_RECORD_PRE:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
DELETE_RECORD:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Internal GoSubs
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ClearCursors:
|
||||||
|
For counter = 0 to 8
|
||||||
|
ClearSelect counter
|
||||||
|
Next counter
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
1280
LSL2/STPROC/MET_TEST_SERVICES.txt
Normal file
1280
LSL2/STPROC/MET_TEST_SERVICES.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -135,4 +135,3 @@ API monaengines.ID.GET
|
|||||||
end
|
end
|
||||||
|
|
||||||
end api
|
end api
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user