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
|
||||||
|
ErrMsg('Only authorized personnel may update the Calibration List.')
|
||||||
|
End_Window(@WINDOW)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
IF MemberOf(@USER4,'CALIBRATION') ELSE
|
obj_Appwindow('Create',@WINDOW)
|
||||||
ErrMsg('Only authorized personnel may update the Calibration List.')
|
|
||||||
End_Window(@WINDOW)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
|
Set_List_Box_Data( @WINDOW )
|
||||||
obj_Appwindow('Create',@WINDOW)
|
// Use to determine whether or not the New Calibration label was just clicked
|
||||||
|
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
||||||
Set_List_Box_Data( @WINDOW )
|
GOSUB Refresh
|
||||||
// Use to determine whether or not the New Calibration label was just clicked
|
|
||||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
|
|
||||||
GOSUB Refresh
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -95,81 +92,76 @@ 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 '')
|
|
||||||
ETCtrl = ETCtrls<1,I>
|
|
||||||
ETList = Get_Property(ETCtrl,'LIST')
|
|
||||||
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
|
||||||
IF ETList<Line,1> NE '' THEN
|
|
||||||
FOR N = 1 TO COUNT(ETCols<1,Line>,@SVM) + (ETCols<1,Line> NE '')
|
|
||||||
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,Line,N>,Line,GREEN$)
|
|
||||||
NEXT N
|
|
||||||
END
|
|
||||||
NEXT Line
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
||||||
|
ETCtrl = ETCtrls<1,I>
|
||||||
|
ETList = Get_Property(ETCtrl,'LIST')
|
||||||
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
||||||
|
IF ETList<Line,1> NE '' THEN
|
||||||
|
FOR N = 1 TO COUNT(ETCols<1,Line>,@SVM) + (ETCols<1,Line> NE '')
|
||||||
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,Line,N>,Line,GREEN$)
|
||||||
|
NEXT N
|
||||||
|
END
|
||||||
|
NEXT Line
|
||||||
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
Read:
|
Read:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
|
||||||
|
|
||||||
IF RowExists('CALIB_LIST',CLNo) ELSE
|
|
||||||
IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
|
|
||||||
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
|
|
||||||
Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
|
|
||||||
|
|
||||||
|
IF RowExists('CALIB_LIST',CLNo) ELSE
|
||||||
|
IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
|
||||||
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
|
||||||
|
Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
|
||||||
|
END
|
||||||
END
|
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
|
|
||||||
NextCLNo = NextKey('CALIB_LIST')
|
|
||||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
|
|
||||||
END
|
|
||||||
|
|
||||||
|
IF CLNo = '' THEN
|
||||||
|
NextCLNo = NextKey('CALIB_LIST')
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
|
||||||
|
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
|
|
||||||
Send_Event(@WINDOW,'QBFINIT')
|
|
||||||
Set_Property(@WINDOW,'QBFLIST',CLKeys)
|
|
||||||
GOSUB Refresh
|
|
||||||
Send_Event(@WINDOW,'QBFIRST')
|
|
||||||
END ELSE
|
|
||||||
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
|
|
||||||
END
|
|
||||||
|
|
||||||
|
IF INDEX(CLKeys,@FM,1) THEN
|
||||||
|
Send_Event(@WINDOW,'QBFINIT')
|
||||||
|
Set_Property(@WINDOW,'QBFLIST',CLKeys)
|
||||||
|
GOSUB Refresh
|
||||||
|
Send_Event(@WINDOW,'QBFIRST')
|
||||||
|
END ELSE
|
||||||
|
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
|
||||||
|
END
|
||||||
|
|
||||||
RETURN
|
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,36 +265,35 @@ 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
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
oaParms = 'CALIBRATION':@RM
|
||||||
|
oaParms := CLNo:'*':CalDt:@RM
|
||||||
|
oaParms := '':@RM ;* Default Record
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := @RM
|
||||||
|
oaParms := CtrlEntID:@RM
|
||||||
|
oaParms := CurrPos
|
||||||
|
|
||||||
|
obj_Appwindow('ViewNewDetail', oaParms)
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
|
||||||
Send_Event(@WINDOW,'WRITE')
|
|
||||||
END
|
END
|
||||||
|
|
||||||
oaParms = 'CALIBRATION':@RM
|
|
||||||
oaParms := CLNo:'*':CalDt:@RM
|
|
||||||
oaParms := '':@RM ;* Default Record
|
|
||||||
oaParms := CLNo:@RM
|
|
||||||
oaParms := @RM
|
|
||||||
oaParms := CtrlEntID:@RM
|
|
||||||
oaParms := CurrPos
|
|
||||||
|
|
||||||
obj_Appwindow('ViewNewDetail', oaParms)
|
|
||||||
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -324,51 +301,49 @@ 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
|
||||||
|
Send_Event(@WINDOW,'WRITE')
|
||||||
|
END
|
||||||
|
|
||||||
|
oaParms = 'CALIBRATION':@RM
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := '':@RM ;* Default Record
|
||||||
|
oaParms := CLNo:@RM
|
||||||
|
oaParms := @RM
|
||||||
|
oaParms := CtrlEntID:@RM
|
||||||
|
oaParms := 1:@FM:1
|
||||||
|
|
||||||
|
obj_Appwindow('ViewNewDetail', oaParms)
|
||||||
|
// New Calibration label was just clicked, set to true
|
||||||
|
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
|
||||||
|
|
||||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
|
|
||||||
Send_Event(@WINDOW,'WRITE')
|
|
||||||
END
|
END
|
||||||
|
|
||||||
oaParms = 'CALIBRATION':@RM
|
|
||||||
oaParms := CLNo:@RM
|
|
||||||
oaParms := '':@RM ;* Default Record
|
|
||||||
oaParms := CLNo:@RM
|
|
||||||
oaParms := @RM
|
|
||||||
oaParms := CtrlEntID:@RM
|
|
||||||
oaParms := 1:@FM:1
|
|
||||||
|
|
||||||
obj_Appwindow('ViewNewDetail', oaParms)
|
|
||||||
// New Calibration label was just clicked, set to true
|
|
||||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
|
|
||||||
|
|
||||||
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')
|
||||||
FrequencyVal = Get_Property(@WINDOW:'.CAL_INTERVAL', 'TEXT')
|
FrequencyVal = Get_Property(@WINDOW:'.CAL_INTERVAL', 'TEXT')
|
||||||
FrequencyUnit = 'Months'
|
FrequencyUnit = 'Months'
|
||||||
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
|
|
||||||
Next RecipeIndex
|
|
||||||
Database_Services('WriteDataRow', 'CLEAN_INSP', PostCIKey, PostCIRec, True$, False$, True$)
|
|
||||||
end
|
|
||||||
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
|
File diff suppressed because it is too large
Load Diff
@ -556,8 +556,6 @@ UnloadProduct:
|
|||||||
Next CassNo
|
Next CassNo
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -639,3 +637,4 @@ SlotOverview:
|
|||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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\
|
||||||
|
|
||||||
@ -23,14 +24,16 @@ EQU COL$LQP_QTY TO 2
|
|||||||
EQU COL$LQP_PART TO 3 ;* This is either Cust Part No OR Substrate Part Number depending on which control is visible
|
EQU COL$LQP_PART TO 3 ;* This is either Cust Part No OR Substrate Part Number depending on which control is visible
|
||||||
EQU COL$LQP_VENDOR TO 4 ;* Vendor code on the Substrate screen 7/14/2011 JCH for SAP
|
EQU COL$LQP_VENDOR TO 4 ;* Vendor code on the Substrate screen 7/14/2011 JCH for SAP
|
||||||
|
|
||||||
EQU CA$ITEM_NO TO 1 ;* Equates for Checking Array passed to Scan routine
|
EQU CA$ITEM_NO TO 1 ;* Equates for Checking Array passed to Scan routine
|
||||||
EQU CA$LOT_NO TO 2
|
EQU CA$LOT_NO TO 2
|
||||||
EQU CA$LOT_QTY TO 3
|
EQU CA$LOT_QTY TO 3
|
||||||
EQU CA$CUST_PART_NO TO 4
|
EQU CA$CUST_PART_NO TO 4
|
||||||
EQU CA$SUB_PART_NO TO 5
|
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,271 +128,288 @@ 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
|
||||||
|
|
||||||
* Find the first non-empty cell
|
* Find the first non-empty cell
|
||||||
LOOP
|
LOOP
|
||||||
Test = ListData<LinePointer,(ColPointer) >
|
Test = ListData<LinePointer,(ColPointer) >
|
||||||
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
|
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
|
||||||
ColPointer -= 1
|
ColPointer -= 1
|
||||||
IF ColPointer = 0 THEN
|
IF ColPointer = 0 THEN
|
||||||
ColPointer = ColCnt
|
ColPointer = ColCnt
|
||||||
LinePointer -= 1
|
LinePointer -= 1
|
||||||
END
|
END
|
||||||
REPEAT
|
REPEAT
|
||||||
* Move one past the non empty cell
|
* Move one past the non empty cell
|
||||||
BEGIN CASE
|
|
||||||
CASE LinePointer = 0
|
|
||||||
* Empty Table
|
|
||||||
LinePointer = 1
|
|
||||||
CoilPointer = 1
|
|
||||||
CASE ColPointer = ColCnt
|
|
||||||
LinePointer += 1
|
|
||||||
ColPointer = 1
|
|
||||||
CASE 1
|
|
||||||
ColPointer += 1
|
|
||||||
END CASE
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
|
||||||
END
|
|
||||||
|
|
||||||
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
|
|
||||||
ValidationScan = Trim(ListData<PrevRow,PrevCol>)
|
|
||||||
Convert @Lower_Case to @Upper_Case in ValidationScan
|
|
||||||
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
|
|
||||||
//DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
|
|
||||||
//FYI - conversion would only work when separated from above line
|
|
||||||
Convert '/' to '' in ValidationScan
|
|
||||||
If ValidationScan NE '' then
|
|
||||||
Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
IF ListData<PrevRow,PrevCol> NE '' THEN
|
|
||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE PrevCol = COL$LQP_LOT
|
CASE LinePointer = 0
|
||||||
|
* Empty Table
|
||||||
IF StripANSI THEN
|
LinePointer = 1
|
||||||
RawLot = TRIM(ListData<PrevRow,PrevCol>)
|
CoilPointer = 1
|
||||||
IF RawLot[1,2] = '1T' OR RawLot[1,2] = '2T' THEN
|
CASE ColPointer = ColCnt
|
||||||
LotNo = RawLot[3,99]
|
LinePointer += 1
|
||||||
END ELSE
|
ColPointer = 1
|
||||||
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.')
|
CASE 1
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
ColPointer += 1
|
||||||
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
LotNo = TRIM(ListData<PrevRow,PrevCol>)
|
|
||||||
END
|
|
||||||
|
|
||||||
IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
|
|
||||||
|
|
||||||
* Don't check Customer Lot Numbers if scanning substrates
|
|
||||||
|
|
||||||
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
|
|
||||||
* Accept or Rescan message
|
|
||||||
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!')
|
|
||||||
LotNo = '' ;* Clear entered field for a rescan
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
END
|
|
||||||
END
|
|
||||||
|
|
||||||
Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
|
|
||||||
|
|
||||||
CASE PrevCol = COL$LQP_QTY
|
|
||||||
|
|
||||||
IF StripANSI THEN
|
|
||||||
RawLotQty = ListData<PrevRow,PrevCol>
|
|
||||||
IF RawLotQty[1,1] = 'Q' THEN
|
|
||||||
LotQty = RawLotQty[2,99]
|
|
||||||
END ELSE
|
|
||||||
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity')
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
LotQty = ListData<PrevRow,PrevCol>
|
|
||||||
END
|
|
||||||
|
|
||||||
IF NOT(NUM(LotQty)) THEN
|
|
||||||
* Accept or Rescan message
|
|
||||||
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot Qty ':QUOTE(LotQty):' is not a number!')
|
|
||||||
LotNo = '' ;* Clear entered field for a rescan
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
END
|
|
||||||
|
|
||||||
Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
|
|
||||||
|
|
||||||
|
|
||||||
CASE PrevCol = COL$LQP_PART
|
|
||||||
// Check scanned part number for 5 segments. If there are 5 segments then use segments 3 and 4
|
|
||||||
// to make the actual part number.
|
|
||||||
ScannedPartNo = Trim(ListData<PrevRow, PrevCol>)
|
|
||||||
If DCount(ScannedPartNo, '-') EQ 5 then
|
|
||||||
RawPartNo = ''
|
|
||||||
If ScannedPartNo[1, 1] _EQC 'P' then RawPartNo := 'P'
|
|
||||||
If ScannedPartNo[1, 1] _EQC 'S' then RawPartNo := 'S'
|
|
||||||
RawPartNo := Field(ScannedPartNo, '-', 3, 2)
|
|
||||||
ListData<PrevRow, PrevCol> = RawPartNo
|
|
||||||
end
|
|
||||||
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
|
||||||
IF StripANSI AND NOT(SkipSubAnsi) THEN ;***************************************
|
|
||||||
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
|
||||||
IF RawPartNo[1,1] _EQC 'P' OR RawPartNo[1,1] _EQC 'S' THEN
|
|
||||||
PartNo = RawPartNo[2,99]
|
|
||||||
END ELSE
|
|
||||||
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No')
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
PartNo = ListData<PrevRow,PrevCol>
|
|
||||||
END
|
|
||||||
|
|
||||||
IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
|
|
||||||
* Check Customer Part Numbers
|
|
||||||
LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
|
|
||||||
PartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
|
||||||
END ELSE
|
|
||||||
* Accept or Rescan message
|
|
||||||
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!')
|
|
||||||
PartNo = '' ;* Clear entered field for a rescan
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
END
|
|
||||||
|
|
||||||
END ELSE
|
|
||||||
* Check Substrate Part Numbers
|
|
||||||
LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
|
|
||||||
* Accept or Rescan message
|
|
||||||
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!')
|
|
||||||
PartNo = '' ;* Clear entered field for a rescan
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
END
|
|
||||||
END ;* End of check for Customer supplied or Inventory substrate part number
|
|
||||||
|
|
||||||
Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
|
|
||||||
|
|
||||||
CASE PrevCol = COL$LQP_VENDOR
|
|
||||||
|
|
||||||
SubSuppBy = CheckArray<CA$SUB_SUPP_BY>
|
|
||||||
VendCode = ''
|
|
||||||
IF StripANSI AND NOT(SkipSubAnsi) THEN
|
|
||||||
RawVendCode = TRIM(ListData<PrevRow,PrevCol>)
|
|
||||||
IF RawVendCode[1,2] = '1V' THEN
|
|
||||||
VendCode = RawVendCode[3,99]
|
|
||||||
END ELSE
|
|
||||||
TypeOver = ''
|
|
||||||
TypeOver<MTYPE$> = 'B&Rescan'
|
|
||||||
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code'
|
|
||||||
Resp = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code')
|
|
||||||
Set_Property(CtrlEntID,"SELPOS",PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
END ELSE
|
|
||||||
VendCode = ListData<PrevRow,PrevCol>
|
|
||||||
END
|
|
||||||
|
|
||||||
IF RowExists('SEMI_VEND_CODE', VendCode) OR SubSuppBy = 'C' ELSE
|
|
||||||
* Accept or Rescan message
|
|
||||||
If VendCode EQ '' then VendCode = RawVendCode
|
|
||||||
Resp = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Vendor Code ':QUOTE(VendCode):' not found in':@TM:'Vendor Codes on file!')
|
|
||||||
VendCode = '' ;* Clear entered field for a rescan
|
|
||||||
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
|
||||||
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
RETURN
|
|
||||||
END
|
|
||||||
|
|
||||||
Set_Property(CtrlEntID,'INVALUE',VendCode,PrevSelPos)
|
|
||||||
|
|
||||||
ExpectedCode = Get_Property(@WINDOW,'@VENDOR_DEF')
|
|
||||||
|
|
||||||
IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
|
|
||||||
void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
|
|
||||||
Set_Property(CtrlEntID, 'FOCUS', True$)
|
|
||||||
END
|
|
||||||
|
|
||||||
ListArray = Get_Property(CtrlEntId,'ARRAY')
|
|
||||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
|
||||||
|
|
||||||
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
|
||||||
OpenQty = CheckArray<CA$LOT_QTY>
|
|
||||||
|
|
||||||
IF TotalScannedQty >= OpenQty THEN
|
|
||||||
|
|
||||||
Resp = Msg(@WINDOW,'','WO_REC_COMPLETE')
|
|
||||||
|
|
||||||
GOTO OK
|
|
||||||
END
|
|
||||||
|
|
||||||
END CASE
|
END CASE
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
|
||||||
END
|
END
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('HasError') then
|
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
|
||||||
TypeOver = ''
|
ValidationScan = Trim(ListData<PrevRow,PrevCol>)
|
||||||
TypeOver<MTYPE$> = 'B&Rescan'
|
Convert @Lower_Case to @Upper_Case in ValidationScan
|
||||||
Message = Error_Services('GetMessage')
|
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
|
||||||
TypeOver<MTEXT$> = Message
|
//DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
|
||||||
Msg(@Window, TypeOver, 'LABEL_DATA_ERROR')
|
//FYI - conversion would only work when separated from above line
|
||||||
Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
|
Convert '/' to '' in ValidationScan
|
||||||
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
If ValidationScan NE '' then
|
||||||
Error_Services('Clear')
|
Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
|
||||||
end else
|
end
|
||||||
GOSUB Refresh
|
|
||||||
end
|
If Error_Services('NoError') then
|
||||||
|
IF ListData<PrevRow,PrevCol> NE '' THEN
|
||||||
|
BEGIN CASE
|
||||||
|
CASE PrevCol = COL$LQP_LOT
|
||||||
|
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLot = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawLot[1,2] = '1T' OR RawLot[1,2] = '2T' THEN
|
||||||
|
LotNo = RawLot[3,99]
|
||||||
|
END ELSE
|
||||||
|
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
|
||||||
|
|
||||||
|
* Don't check Customer Lot Numbers if scanning substrates
|
||||||
|
|
||||||
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!')
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_QTY
|
||||||
|
|
||||||
|
IF StripANSI THEN
|
||||||
|
RawLotQty = ListData<PrevRow,PrevCol>
|
||||||
|
IF RawLotQty[1,1] = 'Q' THEN
|
||||||
|
LotQty = RawLotQty[2,99]
|
||||||
|
END ELSE
|
||||||
|
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
LotQty = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF NOT(NUM(LotQty)) THEN
|
||||||
|
* Accept or Rescan message
|
||||||
|
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot Qty ':QUOTE(LotQty):' is not a number!')
|
||||||
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
|
||||||
|
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_PART
|
||||||
|
// Check scanned part number for 5 segments. If there are 5 segments then use segments 3 and 4
|
||||||
|
// to make the actual part number.
|
||||||
|
ScannedPartNo = Trim(ListData<PrevRow, PrevCol>)
|
||||||
|
If DCount(ScannedPartNo, '-') EQ 5 then
|
||||||
|
RawPartNo = ''
|
||||||
|
If ScannedPartNo[1, 1] _EQC 'P' then RawPartNo := 'P'
|
||||||
|
If ScannedPartNo[1, 1] _EQC 'S' then RawPartNo := 'S'
|
||||||
|
RawPartNo := Field(ScannedPartNo, '-', 3, 2)
|
||||||
|
ListData<PrevRow, PrevCol> = RawPartNo
|
||||||
|
end
|
||||||
|
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF StripANSI AND NOT(SkipSubAnsi) THEN ;***************************************
|
||||||
|
RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawPartNo[1,1] _EQC 'P' OR RawPartNo[1,1] _EQC 'S' THEN
|
||||||
|
PartNo = RawPartNo[2,99]
|
||||||
|
END ELSE
|
||||||
|
Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No')
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
PartNo = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
|
||||||
|
* Check Customer Part Numbers
|
||||||
|
LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
|
||||||
|
PartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
|
END ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!')
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
END
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
* Check Substrate Part Numbers
|
||||||
|
LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
Resp = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!')
|
||||||
|
PartNo = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
END
|
||||||
|
END ;* End of check for Customer supplied or Inventory substrate part number
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
|
||||||
|
|
||||||
|
CASE PrevCol = COL$LQP_VENDOR
|
||||||
|
|
||||||
|
SubSuppBy = CheckArray<CA$SUB_SUPP_BY>
|
||||||
|
VendCode = ''
|
||||||
|
IF StripANSI AND NOT(SkipSubAnsi) THEN
|
||||||
|
RawVendCode = TRIM(ListData<PrevRow,PrevCol>)
|
||||||
|
IF RawVendCode[1,2] = '1V' THEN
|
||||||
|
VendCode = RawVendCode[3,99]
|
||||||
|
END ELSE
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code'
|
||||||
|
Resp = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code')
|
||||||
|
Set_Property(CtrlEntID,"SELPOS",PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
END ELSE
|
||||||
|
VendCode = ListData<PrevRow,PrevCol>
|
||||||
|
END
|
||||||
|
|
||||||
|
IF RowExists('SEMI_VEND_CODE', VendCode) OR SubSuppBy = 'C' ELSE
|
||||||
|
* Accept or Rescan message
|
||||||
|
If VendCode EQ '' then VendCode = RawVendCode
|
||||||
|
Resp = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Vendor Code ':QUOTE(VendCode):' not found in':@TM:'Vendor Codes on file!')
|
||||||
|
VendCode = '' ;* Clear entered field for a rescan
|
||||||
|
Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan
|
||||||
|
Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
Set_Property(CtrlEntID,'INVALUE',VendCode,PrevSelPos)
|
||||||
|
|
||||||
|
ExpectedCode = Get_Property(@WINDOW,'@VENDOR_DEF')
|
||||||
|
|
||||||
|
IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
|
||||||
|
void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
|
||||||
|
Set_Property(CtrlEntID, 'FOCUS', True$)
|
||||||
|
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')
|
||||||
|
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
|
||||||
|
|
||||||
|
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
|
||||||
|
OpenQty = CheckArray<CA$LOT_QTY>
|
||||||
|
|
||||||
|
IF TotalScannedQty >= OpenQty THEN
|
||||||
|
|
||||||
|
Resp = Msg(@WINDOW,'','WO_REC_COMPLETE')
|
||||||
|
|
||||||
|
GOTO OK
|
||||||
|
END
|
||||||
|
|
||||||
|
END CASE
|
||||||
|
END
|
||||||
|
end
|
||||||
|
|
||||||
|
If Error_Services('HasError') then
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
|
Message = Error_Services('GetMessage')
|
||||||
|
TypeOver<MTEXT$> = Message
|
||||||
|
Msg(@Window, TypeOver, 'LABEL_DATA_ERROR')
|
||||||
|
Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
|
||||||
|
Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
|
||||||
|
Error_Services('Clear')
|
||||||
|
end else
|
||||||
|
GOSUB Refresh
|
||||||
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -395,159 +418,166 @@ 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>)
|
||||||
|
|
||||||
IF ControlSelection = 'LQ' THEN
|
IF ControlSelection = 'LQ' THEN
|
||||||
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
CustPartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
CustPartNo = CheckArray<CA$CUST_PART_NO,Pos>
|
||||||
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
END ELSE
|
END ELSE
|
||||||
* Accept or Rescan message
|
* Accept or Rescan message
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<MTYPE$> = 'B&Rescan'
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
LotNo = '' ;* Clear entered field for a rescan
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
IF ControlSelection = 'LQP' THEN
|
IF ControlSelection = 'LQP' THEN
|
||||||
CustPartNo = TRIM(ListData<LineCnt,3>)
|
CustPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
|
||||||
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
|
||||||
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
SubPartNo = CheckArray<CA$SUB_PART_NO,Pos>
|
||||||
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
|
||||||
END ELSE
|
END ELSE
|
||||||
* Accept or Rescan message
|
* Accept or Rescan message
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<MTYPE$> = 'B&Rescan'
|
TypeOver<MTYPE$> = 'B&Rescan'
|
||||||
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
|
||||||
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
|
||||||
|
|
||||||
LotNo = '' ;* Clear entered field for a rescan
|
LotNo = '' ;* Clear entered field for a rescan
|
||||||
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
IF ControlSelection = 'LQSP' THEN
|
IF ControlSelection = 'LQSP' THEN
|
||||||
|
|
||||||
SubPartNo = TRIM(ListData<LineCnt,3>)
|
SubPartNo = TRIM(ListData<LineCnt,3>)
|
||||||
Vendor = TRIM(ListData<LineCnt,4>) ;* Added 7/14/2011 JCH for SAP
|
Vendor = TRIM(ListData<LineCnt,4>) ;* Added 7/14/2011 JCH for SAP
|
||||||
OrderItemNo = CheckArray<CA$ITEM_NO,1> ;* Changed 2/8/2010 from ' = 1 ' JCH
|
OrderItemNo = CheckArray<CA$ITEM_NO,1> ;* Changed 2/8/2010 from ' = 1 ' JCH
|
||||||
CustPartNo = CheckArray<CA$CUST_PART_NO,1>
|
CustPartNo = CheckArray<CA$CUST_PART_NO,1>
|
||||||
|
|
||||||
END ELSE
|
END ELSE
|
||||||
Vendor = ''
|
Vendor = ''
|
||||||
END
|
END
|
||||||
|
|
||||||
Result<1,LineCnt> = LineCnt
|
Result<1,LineCnt> = LineCnt
|
||||||
Result<2,LineCnt> = LotNo ;* Lot No
|
Result<2,LineCnt> = LotNo ;* Lot No
|
||||||
Result<3,LineCnt> = Qty
|
Result<3,LineCnt> = Qty
|
||||||
Result<4,LineCnt> = CustPartNo ;* PartNo
|
Result<4,LineCnt> = CustPartNo ;* PartNo
|
||||||
Result<5,LineCnt> = SubPartNo ;* Substrate Part No
|
Result<5,LineCnt> = SubPartNo ;* Substrate Part No
|
||||||
Result<6,LineCnt> = Vendor ;* Substrate Vendor Code
|
Result<6,LineCnt> = Vendor ;* Substrate Vendor Code
|
||||||
Result<7,LineCnt> = OCONV(TimeStamp,'DT')
|
Result<7,LineCnt> = OCONV(TimeStamp,'DT')
|
||||||
Result<8,LineCnt> = @USER4
|
Result<8,LineCnt> = @USER4
|
||||||
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.
|
||||||
|
|
||||||
ProblemQtyLots = ''
|
ProblemQtyLots = ''
|
||||||
FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
|
FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
|
||||||
IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
|
IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
|
||||||
* Lot quantity mismatch
|
* Lot quantity mismatch
|
||||||
ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
|
ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
|
||||||
END
|
END
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
IF ProblemQtyLots NE '' THEN
|
IF ProblemQtyLots NE '' THEN
|
||||||
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>)
|
||||||
LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
|
LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
|
||||||
stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$) ;* Flag all the lines with lot numbers having qty problems
|
stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$) ;* Flag all the lines with lot numbers having qty problems
|
||||||
END
|
END
|
||||||
LineCnt += 1
|
LineCnt += 1
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
||||||
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
|
||||||
Set_Property(@WINDOW,'SAVEWARN', False$)
|
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||||
Send_Event(@WINDOW,'CLEAR')
|
If EpiPro EQ False$ then
|
||||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
IF Get_Status(errCode) THEN
|
||||||
IF Get_Status(errCode) THEN
|
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
|
||||||
ErrMsg(errCode)
|
InvalidRequest = True$
|
||||||
END
|
END else
|
||||||
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
If (CheckValue EQ True$) then
|
||||||
|
Wo_Mat_Services('MakeupFlagOn', RDSNo)
|
||||||
|
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
|
||||||
Set_Property(@WINDOW,'SAVEWARN', False$)
|
|
||||||
Send_Event(@WINDOW,'CLEAR')
|
|
||||||
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
|
||||||
IF Get_Status(errCode) THEN
|
If EpiCheck EQ False$ then
|
||||||
ErrMsg(errCode)
|
IF Get_Status(errCode) THEN
|
||||||
END
|
ErrMsg('Unable to set makeup flag until Unload stage is signed.')
|
||||||
|
InvalidRequest = True$
|
||||||
|
END else
|
||||||
|
Set_Property(@WINDOW,'SAVEWARN', False$)
|
||||||
|
Send_Event(@WINDOW,'CLEAR')
|
||||||
|
If (CheckValue EQ True$) then
|
||||||
|
Wo_Mat_Services('MakeupFlagOn', RDSNo)
|
||||||
|
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,95 +8,97 @@ 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
|
|
||||||
|
|
||||||
Copy_Pending_Records_To_Sql()
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
|
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
|
||||||
|
|
||||||
CurrDtm = Datetime()
|
Copy_Pending_Records_To_Sql()
|
||||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
|
||||||
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
|
||||||
|
|
||||||
Open "SQL_PENDING" to pTable then
|
CurrDtm = Datetime()
|
||||||
|
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||||
|
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
||||||
|
|
||||||
Open "SQL_BACKLOG" to hTable then
|
Open "SQL_PENDING" to pTable then
|
||||||
ClearSelect
|
|
||||||
Select hTable
|
|
||||||
Done = 0
|
|
||||||
Loop
|
|
||||||
ReadNext Key else Done = 1
|
|
||||||
Command = ''
|
|
||||||
Skip = False$
|
|
||||||
Until Done
|
|
||||||
Table = Key[1, "*"]
|
|
||||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos then
|
|
||||||
Delete hTable, Key else null
|
|
||||||
end else
|
|
||||||
Locate Table in NonCriticalTables using @FM setting Dummy then
|
|
||||||
ID = Key[Col2() + 1, Len(Key)]
|
|
||||||
|
|
||||||
Read Dummy From pTable, Key then
|
Open "SQL_BACKLOG" to hTable then
|
||||||
Skip = True$
|
ClearSelect
|
||||||
end
|
Select hTable
|
||||||
|
Done = 0
|
||||||
|
Loop
|
||||||
|
ReadNext Key else Done = 1
|
||||||
|
Command = ''
|
||||||
|
Skip = False$
|
||||||
|
Until Done
|
||||||
|
Table = Key[1, "*"]
|
||||||
|
Locate Table in TablesToSkip by "AL" using "," setting ListPos then
|
||||||
|
Delete hTable, Key else null
|
||||||
|
end else
|
||||||
|
Locate Table in NonCriticalTables using @FM setting Dummy then
|
||||||
|
ID = Key[Col2() + 1, Len(Key)]
|
||||||
|
|
||||||
If Skip EQ False$ then
|
Read Dummy From pTable, Key then
|
||||||
Begin Case
|
Skip = True$
|
||||||
Case ID[-7, 7] EQ "*DELETE"
|
end
|
||||||
ID[-7, 7] = ""
|
|
||||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
|
||||||
Case ID[-6, 6] EQ "*WRITE"
|
|
||||||
ID[-6, 6] = ""
|
|
||||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
Write CurrDtm to pTable, Key then Delete hTable, Key
|
|
||||||
End Case
|
|
||||||
end else
|
|
||||||
// This record is already being processed and we don't need to process it multiple times.
|
|
||||||
Delete hTable, Key else null
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
TempKey = Key
|
|
||||||
TempKey[1, Len(Table) + 1] = ''
|
|
||||||
TransTime = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
|
||||||
TransDate = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
|
||||||
Process = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
|
||||||
ID = TempKey
|
|
||||||
If Process EQ 'DELETE' then
|
|
||||||
pKey = Key
|
|
||||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
|
||||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
|
||||||
end else
|
|
||||||
pKey = Key
|
|
||||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
|
||||||
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If Skip EQ False$ then
|
If Skip EQ False$ then
|
||||||
TcpClientHandle = 0
|
Begin Case
|
||||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
Case ID[-7, 7] EQ "*DELETE"
|
||||||
Convert '\' to '' in ServerIP
|
ID[-7, 7] = ""
|
||||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
|
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
Case ID[-6, 6] EQ "*WRITE"
|
||||||
end
|
ID[-6, 6] = ""
|
||||||
end
|
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
end
|
Write CurrDtm to pTable, Key then Delete hTable, Key
|
||||||
Repeat
|
End Case
|
||||||
end
|
end else
|
||||||
end
|
// This record is already being processed and we don't need to process it multiple times.
|
||||||
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
Delete hTable, Key else null
|
||||||
end
|
end
|
||||||
|
end else
|
||||||
|
TempKey = Key
|
||||||
|
TempKey[1, Len(Table) + 1] = ''
|
||||||
|
TransTime = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
||||||
|
TransDate = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
||||||
|
Process = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
||||||
|
ID = TempKey
|
||||||
|
If Process EQ 'DELETE' then
|
||||||
|
pKey = Key
|
||||||
|
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||||
|
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||||
|
end else
|
||||||
|
pKey = Key
|
||||||
|
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
|
||||||
|
Write CurrDtm to pTable, pKey then Delete hTable, Key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Skip EQ False$ then
|
||||||
|
TcpClientHandle = 0
|
||||||
|
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||||
|
ServerPort = Environment_Services('GetScrapeServerPort')
|
||||||
|
Convert '\' to '' in ServerIP
|
||||||
|
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
|
||||||
|
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||||
|
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Repeat
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
|
||||||
|
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,98 +7,104 @@ 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()
|
|
||||||
LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
|
|
||||||
If LastRunDtm NE '' then
|
|
||||||
TimeDiff = CurrDtm - LastRunDtm
|
|
||||||
If TimeDiff GT 0.003472 then
|
|
||||||
Run = True$
|
|
||||||
LastRunDtm = CurrDtm
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
Run = True$
|
|
||||||
LastRunDtm = CurrDtm
|
|
||||||
end
|
|
||||||
|
|
||||||
If Run then
|
// This only needs to be called every once in a while (e.g. 5 minutes ~ 0.003472)
|
||||||
Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
|
Run = False$
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
CurrDtm = Datetime()
|
||||||
Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
|
LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
|
||||||
|
If LastRunDtm NE '' then
|
||||||
|
TimeDiff = CurrDtm - LastRunDtm
|
||||||
|
If TimeDiff GT FIVE_MINUTES$ then
|
||||||
|
Run = True$
|
||||||
|
LastRunDtm = CurrDtm
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Run = True$
|
||||||
|
LastRunDtm = CurrDtm
|
||||||
|
end
|
||||||
|
|
||||||
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
If Run then
|
||||||
Open "SQL_PENDING" to pTable then
|
Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
|
||||||
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
|
Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
|
||||||
|
|
||||||
ClearSelect
|
NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
|
||||||
Select pTable
|
Open "SQL_PENDING" to pTable then
|
||||||
Done = False$
|
|
||||||
Loop
|
|
||||||
ReadNext Key else Done = True$
|
|
||||||
Command = ''
|
|
||||||
Until Done
|
|
||||||
|
|
||||||
Read Rec from pTable, Key then
|
ClearSelect
|
||||||
TransDtm = Rec<1>
|
Select pTable
|
||||||
ElapSecs = (CurrDtm - TransDtm) * 86400
|
Done = False$
|
||||||
If ElapSecs LT 1800 then
|
Loop
|
||||||
// Retry recent pending transactions (1800 seconds = 30 minutes)
|
ReadNext Key else Done = True$
|
||||||
Table = Key[1, "*"]
|
Command = ''
|
||||||
Locate Table in NonCriticalTables using @FM setting Dummy then
|
Until Done
|
||||||
ID = Key[Col2() + 1, Len(Key)]
|
|
||||||
Begin Case
|
|
||||||
Case ID[-7, 7] EQ "*DELETE"
|
|
||||||
ID[-7, 7] = ""
|
|
||||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
Case ID[-6, 6] EQ "*WRITE"
|
|
||||||
ID[-6, 6] = ""
|
|
||||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
End Case
|
|
||||||
end else
|
|
||||||
TempKey = Key
|
|
||||||
TempKey[1, Len(Table) + 1] = ''
|
|
||||||
TransTime = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
|
||||||
TransDate = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
|
||||||
Process = TempKey[-1, 'B*']
|
|
||||||
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
|
||||||
ID = TempKey
|
|
||||||
If Process EQ 'DELETE' then
|
|
||||||
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
end else
|
|
||||||
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
TcpClientHandle = 0
|
Read Rec from pTable, Key then
|
||||||
ServerIP = Environment_Services('GetApplicationRootIP')
|
TransDtm = Rec<1>
|
||||||
Convert '\' to '' in ServerIP
|
ElapSecs = (CurrDtm - TransDtm) * SECONDS_PER_DAY$
|
||||||
|
If ElapSecs LT THIRTY_MINUTES$ then
|
||||||
|
// Retry recent pending transactions (i.e., those submitted in the last 30 minutes)
|
||||||
|
Table = Key[1, "*"]
|
||||||
|
Locate Table in NonCriticalTables using @FM setting Dummy then
|
||||||
|
ID = Key[Col2() + 1, Len(Key)]
|
||||||
|
Begin Case
|
||||||
|
Case ID[-7, 7] EQ "*DELETE"
|
||||||
|
ID[-7, 7] = ""
|
||||||
|
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
|
Case ID[-6, 6] EQ "*WRITE"
|
||||||
|
ID[-6, 6] = ""
|
||||||
|
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
|
End Case
|
||||||
|
end else
|
||||||
|
TempKey = Key
|
||||||
|
TempKey[1, Len(Table) + 1] = ''
|
||||||
|
TransTime = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(TransTime) + 1)] = ''
|
||||||
|
TransDate = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(TransDate) + 1)] = ''
|
||||||
|
Process = TempKey[-1, 'B*']
|
||||||
|
TempKey[-1, Neg(Len(Process) + 1)] = ''
|
||||||
|
ID = TempKey
|
||||||
|
If Process EQ 'DELETE' then
|
||||||
|
Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
|
end else
|
||||||
|
Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
|
TcpClientHandle = 0
|
||||||
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
ServerIP = Environment_Services('GetApplicationRootIP')
|
||||||
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
ServerPort = Environment_Services('GetScrapeServerPort')
|
||||||
end
|
Convert '\' to '' in ServerIP
|
||||||
|
|
||||||
end else
|
If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
|
||||||
// This transaction most likely won't replicate due to a schema mapping issue or because
|
SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
|
||||||
// the record no longer exists in OI, so remove this transaction from the pending queue.
|
SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
|
||||||
Delete pTable, Key else null
|
end
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Repeat
|
end else
|
||||||
end
|
// This transaction most likely won't replicate due to a schema mapping issue or because
|
||||||
Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
|
// the record no longer exists in OI, so remove this transaction from the pending queue.
|
||||||
end
|
Delete pTable, Key else null
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Repeat
|
||||||
|
end
|
||||||
|
Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Return
|
Return
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,98 +22,108 @@ 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
|
||||||
|
|
||||||
// The expected name of the handler
|
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||||
Handler = "COPY_":Table:"_RECORD_TO_SQL"
|
Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
||||||
|
|
||||||
// Find the stored procedure that handles this table
|
Open 'SQL_PENDING' to pTable then
|
||||||
Open "SYSOBJ" to hSysObj then
|
|
||||||
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
If pKey NE '' then Lock pTable, pKey else Done = True$
|
||||||
// Connect to the ODBC
|
|
||||||
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
If Not(Done) then
|
||||||
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
|
// The expected name of the handler
|
||||||
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
|
Handler = "COPY_":Table:"_RECORD_TO_SQL"
|
||||||
// Read the record and call the handler
|
|
||||||
Open Table to hTable then
|
// Find the stored procedure that handles this table
|
||||||
Read @RECORD from hTable, Key then
|
Open "SYSOBJ" to hSysObj then
|
||||||
If Key NE "" then
|
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
||||||
Open "DICT.":Table to @DICT then null
|
// Connect to the ODBC
|
||||||
@ID = Key
|
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
||||||
Ans = Function(@Handler(Connection, Key, @RECORD))
|
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
|
||||||
If Ans EQ '' then
|
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
|
||||||
If Assigned(pKey) then
|
// Read the record and call the handler
|
||||||
If pKey NE '' then
|
Open Table to hTable then
|
||||||
Open 'SQL_PENDING' to pTable then
|
Read @RECORD from hTable, Key then
|
||||||
Delete pTable, pKey else null
|
If Key NE "" then
|
||||||
|
Open "DICT.":Table to @DICT then null
|
||||||
|
@ID = Key
|
||||||
|
Ans = Function(@Handler(Connection, Key, @RECORD))
|
||||||
|
If (Ans EQ '') then
|
||||||
|
If Assigned(pKey) then
|
||||||
|
If (pKey NE '') then
|
||||||
|
Delete pTable, pKey else Null
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end else
|
||||||
end
|
Ans = 'Unable to read ':Key:' from ':Table:' table.'
|
||||||
end
|
end
|
||||||
end else
|
end
|
||||||
Ans = 'Unable to read ':Key:' from ':Table:' table.'
|
end else
|
||||||
end
|
Ans = 'Unable to open connection to SQL server. SQL connection error: '
|
||||||
end
|
Ans := SRP_Com(Connection, "ERROR")
|
||||||
end else
|
end
|
||||||
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
|
SRP_Com(Connection, "CALL", "Close")
|
||||||
end
|
SRP_Com(Connection, "RELEASE")
|
||||||
SRP_Com(Connection, "CALL", "Close")
|
end else
|
||||||
SRP_Com(Connection, "RELEASE")
|
Ans = "Unable to create ADO connection."
|
||||||
end else
|
end
|
||||||
Ans = "Unable to create ADO connection."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If LogError and Len(Ans) then
|
|
||||||
Open "SQL_ERROR" to hSqlError then
|
|
||||||
ErrorKey = OConv(Date(), "D4-J")
|
|
||||||
Timestamp = OConv(Datetime(), 'DT')
|
|
||||||
Read Errors from hSqlError, ErrorKey then
|
|
||||||
Errors := @FM:Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
|
||||||
Write Errors to hSqlError, ErrorKey
|
|
||||||
end else
|
|
||||||
Errors = Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
|
||||||
Write Errors to hSqlError, ErrorKey
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If Assigned(pKey) then
|
|
||||||
If (pKey NE '') then
|
|
||||||
// Always log the result
|
|
||||||
Open 'SQL_LOG' to hLog then
|
|
||||||
If Ans EQ '' then
|
|
||||||
Result = 'PROCESSED'
|
|
||||||
end else
|
|
||||||
Result = Ans
|
|
||||||
end
|
end
|
||||||
CurrDate = Date()
|
|
||||||
Read Log from hLog, CurrDate then
|
If LogError and Len(Ans) then
|
||||||
Log := @FM:pKey:@VM:Result
|
Open "SQL_ERROR" to hSqlError then
|
||||||
end else
|
ErrorKey = OConv(Date(), "D4-J")
|
||||||
Log = pKey:@VM:Result
|
Timestamp = OConv(Datetime(), 'DT')
|
||||||
|
Read Errors from hSqlError, ErrorKey then
|
||||||
|
Errors := @FM:Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
||||||
|
Write Errors to hSqlError, ErrorKey
|
||||||
|
end else
|
||||||
|
Errors = Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
||||||
|
Write Errors to hSqlError, ErrorKey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If Assigned(pKey) 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
|
||||||
|
Open 'SQL_LOG' to hLog then
|
||||||
|
If Ans EQ '' then
|
||||||
|
Result = 'PROCESSED'
|
||||||
|
end else
|
||||||
|
Result = Ans
|
||||||
|
end
|
||||||
|
CurrDate = Date()
|
||||||
|
Read Log from hLog, CurrDate then
|
||||||
|
Log := @FM:pKey:@VM:Result
|
||||||
|
end else
|
||||||
|
Log = pKey:@VM:Result
|
||||||
|
end
|
||||||
|
Write Log to hLog, CurrDate
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
Write Log to hLog, CurrDate
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
Return Ans
|
Return Ans
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,49 +14,52 @@ 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
|
||||||
Keys = "WO":@VM:SQL_Format(Key, "INT")
|
Keys = "WO":@VM:SQL_Format(Key, "INT")
|
||||||
|
|
||||||
// List of data fields and their values
|
// List of data fields and their values
|
||||||
DataFields = "ENTRY_ID" :@VM:SQL_Format(Rec(WO_LOG_ENTRY_ID$), "STR"):@FM
|
DataFields = "ENTRY_ID" :@VM:SQL_Format(Rec(WO_LOG_ENTRY_ID$), "STR"):@FM
|
||||||
DataFields := "ENTRY_DATE" :@VM:SQL_Format(Rec(WO_LOG_ENTRY_DATE$), "DATE"):@FM
|
DataFields := "ENTRY_DATE" :@VM:SQL_Format(Rec(WO_LOG_ENTRY_DATE$), "DATE"):@FM
|
||||||
DataFields := "CUST_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_NO$), "INT"):@FM
|
DataFields := "CUST_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_NO$), "INT"):@FM
|
||||||
DataFields := "QTY" :@VM:SQL_Format(Rec(WO_LOG_QTY$), "INT"):@FM
|
DataFields := "QTY" :@VM:SQL_Format(Rec(WO_LOG_QTY$), "INT"):@FM
|
||||||
DataFields := "PROD_SPEC_ID" :@VM:SQL_Format(Rec(WO_LOG_PROD_SPEC_ID$), "INT"):@FM
|
DataFields := "PROD_SPEC_ID" :@VM:SQL_Format(Rec(WO_LOG_PROD_SPEC_ID$), "INT"):@FM
|
||||||
DataFields := "NOTES" :@VM:SQL_Format(Rec(WO_LOG_NOTES$), "STR", 1):@FM
|
DataFields := "NOTES" :@VM:SQL_Format(Rec(WO_LOG_NOTES$), "STR", 1):@FM
|
||||||
DataFields := "CUST_SHIP_DATE" :@VM:SQL_Format(Rec(WO_LOG_CUST_SHIP_DATE$), "DATE"):@FM
|
DataFields := "CUST_SHIP_DATE" :@VM:SQL_Format(Rec(WO_LOG_CUST_SHIP_DATE$), "DATE"):@FM
|
||||||
DataFields := "STATUS" :@VM:SQL_Format(Rec(WO_LOG_STATUS$), "STR"):@FM
|
DataFields := "STATUS" :@VM:SQL_Format(Rec(WO_LOG_STATUS$), "STR"):@FM
|
||||||
DataFields := "ORG_SCHEDULED" :@VM:SQL_Format(Rec(WO_LOG_ORG_SCHEDULED$), "BIT"):@FM
|
DataFields := "ORG_SCHEDULED" :@VM:SQL_Format(Rec(WO_LOG_ORG_SCHEDULED$), "BIT"):@FM
|
||||||
DataFields := "RECEIVED_DATE" :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_DATE$), "DATE"):@FM
|
DataFields := "RECEIVED_DATE" :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_DATE$), "DATE"):@FM
|
||||||
DataFields := "CLOSE_DATE" :@VM:SQL_Format(Rec(WO_LOG_CLOSE_DATE$), "DATE"):@FM
|
DataFields := "CLOSE_DATE" :@VM:SQL_Format(Rec(WO_LOG_CLOSE_DATE$), "DATE"):@FM
|
||||||
DataFields := "RECEIVED_TIME" :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_TIME$), "TIME"):@FM
|
DataFields := "RECEIVED_TIME" :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_TIME$), "TIME"):@FM
|
||||||
DataFields := "COMMIT_DATE" :@VM:SQL_Format(Rec(WO_LOG_COMMIT_DATE$), "DATE"):@FM
|
DataFields := "COMMIT_DATE" :@VM:SQL_Format(Rec(WO_LOG_COMMIT_DATE$), "DATE"):@FM
|
||||||
DataFields := "CYCLE_TIME" :@VM:SQL_Format(Rec(WO_LOG_CYCLE_TIME$), "STR"):@FM
|
DataFields := "CYCLE_TIME" :@VM:SQL_Format(Rec(WO_LOG_CYCLE_TIME$), "STR"):@FM
|
||||||
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
|
||||||
DataFields := "WO_STOP_DTM" :@VM:SQL_Format(Rec(WO_LOG_WO_STOP_DTM$), "DATETIME"):@FM
|
DataFields := "WO_STOP_DTM" :@VM:SQL_Format(Rec(WO_LOG_WO_STOP_DTM$), "DATETIME"):@FM
|
||||||
DataFields := "WO_HOLD" :@VM:SQL_Format(Rec(WO_LOG_WO_HOLD$), "BIT"):@FM
|
DataFields := "WO_HOLD" :@VM:SQL_Format(Rec(WO_LOG_WO_HOLD$), "BIT"):@FM
|
||||||
DataFields := "EPI_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_EPI_PART_NO$), "STR"):@FM
|
DataFields := "EPI_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_EPI_PART_NO$), "STR"):@FM
|
||||||
DataFields := "ORD_SUB_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_NO$), "STR"):@FM
|
DataFields := "ORD_SUB_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_NO$), "STR"):@FM
|
||||||
DataFields := "ORD_SUB_PART_REV" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_REV$), "STR"):@FM
|
DataFields := "ORD_SUB_PART_REV" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_REV$), "STR"):@FM
|
||||||
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,81 +18,95 @@ 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
|
|
||||||
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
|
||||||
// Connect to the ODBC/ADO
|
|
||||||
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
|
||||||
// Connect to the database via ODBC
|
|
||||||
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
|
|
||||||
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
|
|
||||||
// Read the record and call the handler
|
|
||||||
If Key NE "" then
|
|
||||||
Ans = Function(@Handler(Connection, Key))
|
|
||||||
If Ans EQ '' then
|
|
||||||
If Assigned(pKey) then
|
|
||||||
Open 'SQL_PENDING' to pTable then
|
|
||||||
Delete pTable, pKey else null
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
|
|
||||||
end
|
|
||||||
SRP_Com(Connection, "CALL", "Close")
|
|
||||||
SRP_Com(Connection, "RELEASE")
|
|
||||||
end else
|
|
||||||
Ans = "Unable to create ADO connection."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
If LogError AND Len(Ans) then
|
If pKey NE '' then Lock pTable, pKey else Done = True$
|
||||||
Open "SQL_ERROR" to hSqlError then
|
|
||||||
Read Errors from hSqlError, Date() then
|
|
||||||
Errors := @FM:Table:@VM:Key:@VM:Ans
|
|
||||||
Write Errors to hSqlError, Date()
|
|
||||||
end else
|
|
||||||
Errors = Table:@VM:Key:@VM:Ans
|
|
||||||
Write Errors to hSqlError, Date()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
// Always log the result
|
If Not(Done) then
|
||||||
|
// The expected name of the handler
|
||||||
|
Handler = "DELETE_":Table:"_RECORD_FROM_SQL"
|
||||||
|
|
||||||
If Assigned(pKey) then
|
// Find the stored procedure that handles this table
|
||||||
Open 'SQL_LOG' to hLog then
|
Open "SYSOBJ" to hSysObj then
|
||||||
If Ans EQ '' then
|
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
||||||
Result = 'PROCESSED'
|
// Connect to the ODBC/ADO
|
||||||
end else
|
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
||||||
Result = Ans
|
// Connect to the database via ODBC
|
||||||
end
|
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
|
||||||
CurrDate = Date()
|
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
|
||||||
Read Log from hLog, CurrDate then
|
// Read the record and call the handler
|
||||||
Log := @FM:pKey:@VM:Result
|
If Key NE "" then
|
||||||
end else
|
Ans = Function(@Handler(Connection, Key))
|
||||||
Log = pKey:@VM:Result
|
If (Ans EQ '') then
|
||||||
end
|
If Assigned(pKey) then
|
||||||
Write Log to hLog, CurrDate
|
If (pKey NE '') then
|
||||||
end
|
Delete pTable, pKey else Null
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
|
||||||
|
end
|
||||||
|
SRP_Com(Connection, "CALL", "Close")
|
||||||
|
SRP_Com(Connection, "RELEASE")
|
||||||
|
end else
|
||||||
|
Ans = "Unable to create ADO connection."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If LogError AND Len(Ans) then
|
||||||
|
Open "SQL_ERROR" to hSqlError then
|
||||||
|
Read Errors from hSqlError, Date() then
|
||||||
|
Errors := @FM:Table:@VM:Key:@VM:Ans
|
||||||
|
Write Errors to hSqlError, Date()
|
||||||
|
end else
|
||||||
|
Errors = Table:@VM:Key:@VM:Ans
|
||||||
|
Write Errors to hSqlError, Date()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// Always log the result
|
||||||
|
|
||||||
|
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
|
||||||
|
If Ans EQ '' then
|
||||||
|
Result = 'PROCESSED'
|
||||||
|
end else
|
||||||
|
Result = Ans
|
||||||
|
end
|
||||||
|
CurrDate = Date()
|
||||||
|
Read Log from hLog, CurrDate then
|
||||||
|
Log := @FM:pKey:@VM:Result
|
||||||
|
end else
|
||||||
|
Log = pKey:@VM:Result
|
||||||
|
end
|
||||||
|
Write Log to hLog, CurrDate
|
||||||
|
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,13 +593,7 @@ 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
|
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||||
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$)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1763,14 +1757,7 @@ 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')
|
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
||||||
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$)
|
|
||||||
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.
|
||||||
@ -1781,14 +1768,7 @@ 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')
|
Logging_Services('AppendLog', objWIPLog, LogData, @RM, @FM, False$)
|
||||||
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$)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
// WOMatKey is null
|
// WOMatKey is null
|
||||||
|
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
|
Begin Case
|
||||||
UserId = OperatorId
|
Case HoldEntity EQ 'WM_IN'
|
||||||
end
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
Begin Case
|
StepNo = 1
|
||||||
Case HoldEntity EQ 'WM_IN'
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
StepNo = 1
|
LotKey = 'I':WMInKey
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
Convert '*' to '.' in LotKey
|
||||||
WMInKey = WONo : '*' : StepNo : '*' : CassNo
|
Case HoldEntity EQ 'WM_OUT'
|
||||||
Lot_Event_Services('CreateLotEvent', WMInKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_IN')
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
Case HoldEntity EQ 'WM_OUT'
|
StepNo = 1
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
StepNo = 1
|
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
LotKey = 'O':WMOutKey
|
||||||
WMOutKey = WONo : '*' : StepNo : '*' : CassNo
|
Convert '*' to '.' in LotKey
|
||||||
Lot_Event_Services('CreateLotEvent', WMOutKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WM_OUT')
|
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')
|
LotKey = 'R':RDSNo
|
||||||
Lot_Event_Services('CreateLotEvent', RDSNo, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'RDS')
|
Case HoldEntity EQ 'WO_MAT'
|
||||||
Case HoldEntity EQ 'WO_MAT'
|
LotKey = WOMatKey
|
||||||
Lot_Event_Services('CreateLotEvent', WOMatKey, CurrDTM, 'HOLD_OFF', 'Lot taken off hold.', '', UserId, True$, 'WO_MAT')
|
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,153 +68,178 @@ 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
|
||||||
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', LotId, LegacyLotType)
|
LotId = Lot_Services('GetLotIdByLegacyLotIdAndType', LotId, LegacyLotType)
|
||||||
If LotID EQ '' then
|
If LotID EQ '' then
|
||||||
LotId = Lot_Services('CreateNewLot', LegacyLotType, '', '', '', '', '', OperatorId, '', LegacyLotId)
|
LotId = Lot_Services('CreateNewLot', LegacyLotType, '', '', '', '', '', OperatorId, '', LegacyLotId)
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
LotId = ''
|
LotId = ''
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
If RowExists('LOT', LotId) then
|
If RowExists('LOT', LotId) then
|
||||||
NewEventId = RTI_CreateGUID()
|
CurrLotOperation = Lot_Services('GetLotCurrOperationId', LotId)
|
||||||
If NewEventId NE '' then
|
NewEventId = RTI_CreateGUID()
|
||||||
NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId)
|
If NewEventId NE '' then
|
||||||
If Error_Services('NoError') then
|
NextEventChronId = NextKey('LOT_EVENT')
|
||||||
NewEventRec = ''
|
If NextEventChronId NE 0 then
|
||||||
NewEventRec<LOT_EVENT_LOT_ID$> = LotId
|
NewEventSequence = Lot_Event_Services('GetLotEventNextSequence', LotId)
|
||||||
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
|
|
||||||
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
|
|
||||||
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
|
|
||||||
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
|
|
||||||
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
|
|
||||||
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
|
|
||||||
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$)
|
NewEventRec = ''
|
||||||
|
NewEventRec<LOT_EVENT_LOT_ID$> = LotId
|
||||||
|
NewEventRec<LOT_EVENT_LOT_EVENT_TYPE$> = EventType
|
||||||
|
NewEventRec<LOT_EVENT_EVENT_DATETIME$> = EventDatetime
|
||||||
|
NewEventRec<LOT_EVENT_EVENT_NOTE$> = EventNote
|
||||||
|
NewEventRec<LOT_EVENT_EVENT_OPERATION_ID$> = CurrLotOperation
|
||||||
|
NewEventRec<LOT_EVENT_EQUIPMENT_ID$> = EventEquipmentId
|
||||||
|
NewEventRec<LOT_EVENT_EVENT_OPERATOR_ID$> = OperatorId
|
||||||
|
NewEventRec<LOT_EVENT_SEQUENCE$> = NewEventSequence
|
||||||
|
NewEventRec<LOT_EVENT_CHRON_ID$> = NextEventChronId
|
||||||
|
Database_Services('WriteDataRow', 'LOT_EVENT', NewEventId, NewEventRec)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
Transaction_Services('PostWriteFieldTransaction', 'LOT', LotId, LOT_MOST_RECENT_LOT_EVENT_ID$, NewEventId)
|
||||||
|
If Error_Services('HasError') then ErrorMessage = Error_Services('GetMessage')
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage')
|
||||||
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error creating new event : ' : Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = 'Error creating new event. Error calling NextKey("LOT_EVENT") to get LOT_EVENT_CHRON_ID.'
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error creating an event Id.'
|
ErrorMessage = 'Error creating an event Id.'
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error in Create Lot Event routine, Lot id was not found.'
|
ErrorMessage = 'Error in Create Lot Event routine, Lot id was not found.'
|
||||||
end
|
end
|
||||||
If ErrorMessage EQ '' then
|
If ErrorMessage EQ '' then
|
||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
LogData<2> = LotId
|
LogData<2> = LotId
|
||||||
LogData<3> = EventType
|
LogData<3> = EventType
|
||||||
LogData<4> = OperatorId
|
LogData<4> = OperatorId
|
||||||
LogData<9> = 'Successfully logged event.'
|
LogData<9> = 'Successfully logged event.'
|
||||||
Logging_Services('AppendLog', objLotEventLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', objLotEventLog, LogData, @RM, @FM, False$)
|
||||||
end else
|
end else
|
||||||
LogData = ''
|
LogData = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
LogData<2> = LotId
|
LogData<2> = LotId
|
||||||
LogData<3> = EventType
|
LogData<3> = EventType
|
||||||
LogData<4> = OperatorId
|
LogData<4> = OperatorId
|
||||||
LogData<9> = ErrorMessage
|
LogData<9> = ErrorMessage
|
||||||
Logging_Services('AppendLog', objLotEventLog, LogData, @RM, @FM, False$)
|
Logging_Services('AppendLog', objLotEventLog, LogData, @RM, @FM, False$)
|
||||||
Error_Services('Add', ErrorMessage)
|
Error_Services('Add', ErrorMessage)
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service GetLotEventNextSequence(LotId)
|
Service GetLotEventNextSequence(LotId)
|
||||||
|
|
||||||
ErrorMessage = ''
|
ErrorMessage = ''
|
||||||
NextSequence = 1
|
NextSequence = 1
|
||||||
If LotID NE '' then
|
If LotID NE '' then
|
||||||
If RowExists('LOT', LotId) then
|
If RowExists('LOT', LotId) then
|
||||||
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')
|
||||||
If ThisEventSequence GE NextSequence then NextSequence = ThisEventSequence + 1
|
If ThisEventSequence GE NextSequence then NextSequence = ThisEventSequence + 1
|
||||||
Next LotEvent
|
Next LotEvent
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Unable to get lot event sequence: Lot ID not found.'
|
ErrorMessage = 'Unable to get lot event sequence: Lot ID not found.'
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Unable to get lot event sequence: Lot ID was null.'
|
ErrorMessage = 'Unable to get lot event sequence: Lot ID was null.'
|
||||||
end
|
end
|
||||||
If ErrorMessage EQ '' then
|
If ErrorMessage EQ '' then
|
||||||
Response = NextSequence
|
Response = NextSequence
|
||||||
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)
|
||||||
LotEventsUnsorted = ''
|
|
||||||
LotEventsSorted = ''
|
ErrorMsg = ''
|
||||||
LotEventsToReturn = ''
|
LotEventsUnsorted = ''
|
||||||
If LotID NE '' then
|
LotEventsSorted = ''
|
||||||
//Get Operations
|
LotEventsToReturn = ''
|
||||||
LotEvents = Xlate('LOT', LotId, LOT_LOT_EVENTS$, 'X')
|
If LotID NE '' then
|
||||||
for each LotEvent in LotEvents using @VM
|
// Get Operations
|
||||||
ThisEventSequence = XLATE('LOT_EVENT', LotEvent, LOT_EVENT_SEQUENCE$, 'X')
|
LotEvents = Xlate('LOT', LotId, LOT_LOT_EVENTS$, 'X')
|
||||||
LotEventsToReturn<ThisEventSequence> = LotEvent
|
for each LotEvent in LotEvents using @VM
|
||||||
Next LotOperation
|
ThisEventSequence = XLATE('LOT_EVENT', LotEvent, LOT_EVENT_SEQUENCE$, 'X')
|
||||||
end else
|
LotEventsToReturn<ThisEventSequence> = LotEvent
|
||||||
//error: lot id was null
|
Next LotOperation
|
||||||
end
|
end else
|
||||||
Response = LotEventsToReturn
|
ErrorMsg = 'Error in ':Service:' service. Null LotID passed into service.'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
Response = LotEventsToReturn
|
||||||
|
end else
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SetLatestLotEvent(LotId, LotEventId)
|
Service SetLatestLotEvent(LotId, LotEventId)
|
||||||
|
|
||||||
ErrorMessage = ''
|
ErrorMessage = ''
|
||||||
If RowExists('LOT', LotId) then
|
If RowExists('LOT', LotId) then
|
||||||
If RowExists('LOT_EVENT', LotEventId) then
|
If RowExists('LOT_EVENT', LotEventId) then
|
||||||
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
LotRec = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
|
||||||
LotRec<LOT_MOST_RECENT_LOT_EVENT_ID$> = LotEventId
|
LotRec<LOT_MOST_RECENT_LOT_EVENT_ID$> = LotEventId
|
||||||
Database_Services('WriteDataRow', 'LOT', LotId, LotRec)
|
Database_Services('WriteDataRow', 'LOT', LotId, LotRec)
|
||||||
If Error_Services('HasError') then
|
If Error_Services('HasError') then
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Lot event ' : LotEventId : ' for lot ' : LotId : ' not found in LOT_EVENT table'
|
ErrorMessage = 'Lot event ' : LotEventId : ' for lot ' : LotId : ' not found in LOT_EVENT table'
|
||||||
end
|
end
|
||||||
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:
|
||||||
|
|
||||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
||||||
LogDate = Oconv(Date(), 'D4/')
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
LogTime = Oconv(Time(), 'MTS')
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' LotEvent.csv'
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' LotEvent.csv'
|
||||||
Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Event Type' : @FM : 'Operator' : @FM : 'Begin Wafer Qty' : @FM : 'End Wafer Qty' : @FM : 'Bonus Wafer Qty' : @FM : 'Reduce Wafer Qty' : @FM : 'Message'
|
Headers = 'Logging DTM' : @FM : 'Lot Id' : @FM : 'Event Type' : @FM : 'Operator' : @FM : 'Begin Wafer Qty' : @FM : 'End Wafer Qty' : @FM : 'Bonus Wafer Qty' : @FM : 'Reduce Wafer Qty' : @FM : 'Message'
|
||||||
objLotEventLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
objLotEventLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
|
||||||
|
|
||||||
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,117 +62,161 @@ 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 = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
||||||
ColumnValue = ''
|
// type of cassette ID (i.e., RDS or WMO).
|
||||||
|
|
||||||
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
Begin Case
|
||||||
// type of cassette ID (i.e., RDS or WMO).
|
|
||||||
|
|
||||||
Begin Case
|
Case ScanType EQ 'SUPPLIER'
|
||||||
|
ValidLot = False$
|
||||||
|
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
||||||
|
ScanSubLot = ScanData
|
||||||
|
|
||||||
Case ScanType EQ 'SUPPLIER'
|
CassetteID = Param1
|
||||||
ValidLot = False$
|
If INDEX(CassetteID,'.',2) then
|
||||||
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
RDSType = 'EPP'
|
||||||
ScanSubLot = ScanData
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
CassetteID = Param1
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
If INDEX(CassetteID,'.',2) then
|
If ValidLot NE True$ then
|
||||||
RDSType = 'EPP'
|
// Add error to error stack
|
||||||
end else
|
ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
RDSType = 'SIC'
|
end
|
||||||
end
|
|
||||||
|
|
||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
If ValidLot NE True$ then
|
|
||||||
// Add error to error stack
|
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
|
||||||
Error_Services('Add', ErrorMessage)
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
Case ScanType EQ 'CASSETTE1'
|
||||||
Response = ScanSubLot
|
|
||||||
end
|
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
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)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
If ErrorMsg EQ '' then
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
|
||||||
If ScanData[1, 2] EQ '1T' then
|
|
||||||
ScanData[1, 2] = ''
|
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
|
||||||
ScanData[1,1] = ''
|
|
||||||
end
|
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
RDSType = 'EPP'
|
CassetteID[1, 2] = ''
|
||||||
WOMatKey = Field(CassetteID, '.', 1):'*':Field(CassetteID, '.', 3)
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
end else
|
CassetteID[1,1] = ''
|
||||||
RDSType = 'SIC'
|
|
||||||
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
|
||||||
end
|
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
|
||||||
|
|
||||||
If RDSType EQ 'EPP' then
|
|
||||||
LotDesc = 'EPP Lot '
|
|
||||||
end else
|
|
||||||
LotDesc = 'RDS Number '
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
WOMatKey = Field(CassetteID, '.', 1):'*':Field(CassetteID, '.', 3)
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
||||||
|
end
|
||||||
|
|
||||||
|
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', LotDesc:'Mismatch: ':CassetteID: ' does not match ': Param1)
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
end
|
end
|
||||||
|
|
||||||
// Check if FQA is signed
|
If ErrorMsg EQ '' then
|
||||||
FQASigned = ''
|
// Check if FQA is signed
|
||||||
WorkOrdNo = Field(WOMatKey, '*', 1)
|
FQASigned = ''
|
||||||
ReactorType = XLATE('WO_LOG', WorkOrdNo, 'REACT_TYPE', 'X')
|
WorkOrdNo = Field(WOMatKey, '*', 1)
|
||||||
QAStage = ''
|
ReactorType = XLATE('WO_LOG', WorkOrdNo, 'REACT_TYPE', 'X')
|
||||||
|
QAStage = ''
|
||||||
|
|
||||||
Begin Case
|
Begin Case
|
||||||
Case RDSType EQ 'EPP'
|
Case RDSType EQ 'EPP'
|
||||||
QAStage = 'MO_QA'
|
QAStage = 'MO_QA'
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
QAStage = 'QA'
|
QAStage = 'QA'
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid ':LotDesc:CassetteID)
|
ErrorMsg = 'Invalid Lot ID ':CassetteID
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then
|
||||||
Response = CassetteID
|
Response = ''
|
||||||
end
|
Response<1> = CassetteID
|
||||||
|
Response<2> = SeqNo
|
||||||
|
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.
|
||||||
|
|
||||||
End Case
|
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
|
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 = '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
|
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
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// ProcessPTIScanData
|
// ProcessPTIScanData
|
||||||
//
|
//
|
||||||
@ -183,92 +227,137 @@ 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 = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
||||||
ColumnValue = ''
|
// type of cassette ID (i.e., RDS or WMO).
|
||||||
|
|
||||||
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
Begin Case
|
||||||
// type of cassette ID (i.e., RDS or WMO).
|
|
||||||
|
|
||||||
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
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
|
If ValidLot NE True$ then ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
|
|
||||||
CassetteID = Param1
|
Case ScanType EQ 'CASSETTE1'
|
||||||
If INDEX(CassetteID,'.',2) then
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
RDSType = 'EPP'
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
end else
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
RDSType = 'SIC'
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
end
|
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)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
If ErrorMsg EQ '' then
|
||||||
If ValidLot NE True$ then
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
// Add error to error stack
|
CassetteID[1, 2] = ''
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
Error_Services('Add', ErrorMessage)
|
CassetteID[1,1] = ''
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If INDEX(CassetteID,'.',2) then
|
||||||
Response = ScanSubLot
|
RDSType = 'EPP'
|
||||||
end
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType)
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Param1 NE '' AND (ScanData NE Param1) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid Cassette Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
If ErrorMsg EQ '' then
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
Response = ''
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
Response<1> = CassetteID
|
||||||
If ScanData[1, 2] EQ '1T' then
|
Response<2> = SeqNo
|
||||||
ScanData[1, 2] = ''
|
end
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
end
|
||||||
ScanData[1,1] = ''
|
|
||||||
end
|
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
Case ScanType EQ 'CASSETTE2'
|
||||||
RDSType = 'EPP'
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
end else
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
RDSType = 'SIC'
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
end
|
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
Cassette1ID = Param1
|
||||||
If ValidCassetteID EQ True$ then
|
Seq1No = Param2
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
|
||||||
Error_Services('Add', 'RDS Mismatch: ':CassetteID: ' does not match ': Param1)
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
Error_Services('Add', 'Invalid RDS Number: ':CassetteID)
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
DelimCount = DCount(ScanData, '|')
|
||||||
Response = CassetteID
|
Begin Case
|
||||||
end
|
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
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE2'
|
If ErrorMsg EQ '' then
|
||||||
Response = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1', Param1)
|
|
||||||
Response = ScanData
|
|
||||||
|
|
||||||
End Case
|
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
|
|
||||||
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,174 +371,165 @@ 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 = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
Cassette1 = ''
|
||||||
|
Cassette2 = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
Begin Case
|
||||||
ColumnValue = ''
|
|
||||||
Cassette1 = ''
|
|
||||||
Cassette2 = ''
|
|
||||||
|
|
||||||
Begin Case
|
Case ScanType EQ 'LABEL1'
|
||||||
|
// Determine whether regular NEPP or EPP label scan
|
||||||
|
// 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)
|
||||||
|
// 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
|
||||||
|
// and b) is currently is the proper state to do PTO transaction.
|
||||||
|
// Strip any standardized prefixes (e.g. '1T', '2T', etc.) as necessary
|
||||||
|
|
||||||
Case ScanType EQ 'LABEL1'
|
// Data from Label1 should have 8 parts (no matter type - Si or EPP), we're looking for the 3rd
|
||||||
//determine whether regular NEPP or EPP label scan
|
cnt = DCount(ScanData, '|')
|
||||||
//NEPP should be data matrix scan and have 7 parts, RDS_No is the 3rd
|
if cnt NE 8 then
|
||||||
//EPP is 1D scan and will have the WMO number (e.g. 170369*1*48)
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
// This should be a multi-part 2D datamatrix scan, so there should be a long string separated by pipe symbols.
|
end else
|
||||||
// Validate the 1. it is multi-part string and 2. that the RDS number from the string is a) valid RDS number
|
Cassette1 = Field(ScanData, '|', 3)
|
||||||
// and b) is currently is the proper state to do PTO transaction.
|
end
|
||||||
// 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
|
If ErrorMsg EQ '' then
|
||||||
cnt = DCount(ScanData, '|')
|
// Strip the prefix encoding
|
||||||
if cnt NE 8 then
|
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
||||||
Cassette1 = 0
|
Cassette1[1, 2] = ''
|
||||||
Error_Services('Add', 'Invalid Lot Label Scan.')
|
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
return
|
Cassette1[1,1] = ''
|
||||||
end else
|
end
|
||||||
//RDS should be 3rd position
|
|
||||||
Cassette1 = Field(ScanData, '|', 3)
|
|
||||||
end
|
|
||||||
|
|
||||||
//strip the prefix encoding
|
WOMatKey = ''
|
||||||
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
RdsRec = ''
|
||||||
Cassette1[1, 2] = ''
|
WONo = ''
|
||||||
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
CassNo = ''
|
||||||
Cassette1[1,1] = ''
|
|
||||||
end
|
|
||||||
|
|
||||||
WOMatKey = ''
|
If INDEX(Cassette1,'.',2) then
|
||||||
RdsRec = ''
|
RDSType = 'EPP'
|
||||||
WONo = ''
|
WMOKey = Cassette1
|
||||||
CassNo = ''
|
|
||||||
|
|
||||||
If INDEX(Cassette1,'.',2) then
|
|
||||||
RDSType = 'EPP'
|
|
||||||
WMOKey = Cassette1
|
|
||||||
Convert '.' to '*' in WMOKey
|
Convert '.' to '*' in WMOKey
|
||||||
If RowExists('WM_OUT', WMOKey) then
|
If RowExists('WM_OUT', WMOKey) then
|
||||||
WONo = Field(WMOKey, '*', 1, 1)
|
WONo = Field(WMOKey, '*', 1, 1)
|
||||||
CassNo = Field(WMOKey, '*', 3, 1)
|
CassNo = Field(WMOKey, '*', 3, 1)
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
RDSType = 'SIC'
|
RDSType = 'SIC'
|
||||||
WOMatKey = XLATE('RDS', Cassette1, 'WO_MAT_KEY', 'X')
|
WOMatKey = XLATE('RDS', Cassette1, 'WO_MAT_KEY', 'X')
|
||||||
RdsRec = Database_Services('ReadDataRow','RDS', Cassette1)
|
RdsRec = Database_Services('ReadDataRow','RDS', Cassette1)
|
||||||
WONo = RdsRec<RDS_WO$>
|
WONo = RdsRec<RDS_WO$>
|
||||||
CassNo = RdsRec<RDS_CASS_NO$>
|
CassNo = RdsRec<RDS_CASS_NO$>
|
||||||
end
|
end
|
||||||
|
|
||||||
ValidCassette1 = False$ ; // Assume Cassette ID is not valid for now.
|
ValidCassette1 = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
testCass1 = Cassette1
|
testCass1 = Cassette1
|
||||||
|
|
||||||
Convert '*' to '.' in testCass1
|
Convert '*' to '.' in testCass1
|
||||||
If Rds_Services('IsValidRDS', Cassette1, RDSType) then
|
If Rds_Services('IsValidRDS', Cassette1, RDSType) then
|
||||||
If Rds_Services('GetHoldStatus', Cassette1, RDSType) EQ False$ then
|
If Rds_Services('GetHoldStatus', Cassette1, RDSType) EQ False$ then
|
||||||
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
|
ErrorMsg = RDSType: ' RDS ':testCass1: ' is currently on hold.'
|
||||||
Error_Services('Add', RDSType: ' RDS ':testCass1: ' is currently on hold.')
|
end
|
||||||
return
|
end else
|
||||||
end
|
ErrorMsg = RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.'
|
||||||
end else
|
end
|
||||||
Error_Services('Add', RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.')
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
If ErrorMsg EQ '' then
|
||||||
StepNo = 1
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
IF LastPTO THEN
|
StepNo = 1
|
||||||
MsgHead = 'Cassette previously scanned through PTO'
|
IF LastPTO THEN
|
||||||
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
MsgHead = 'Cassette previously scanned through PTO'
|
||||||
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
OK = Msg(@WINDOW, '','YESNO','',MsgHead:@FM:MsgText)
|
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 ValidCassette1 EQ True$ then
|
If ErrorMsg EQ '' then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If ValidCassette1 EQ True$ then
|
||||||
Error_Services('Add', 'RDS Mismatch: ':Cassette1: ' does not match ': Param1)
|
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
||||||
return
|
ErrorMsg = 'RDS Mismatch: ':Cassette1: ' does not match ': Param1
|
||||||
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
|
||||||
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
|
||||||
Cassette2[1, 2] = ''
|
|
||||||
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
|
||||||
Cassette2[1,1] = ''
|
|
||||||
end
|
|
||||||
testCass1 = Param3
|
|
||||||
testCass2 = Cassette2
|
|
||||||
convert '*' to '.' in testCass1
|
|
||||||
convert '*' to '.' in testCass2
|
|
||||||
|
|
||||||
If testCass1 NE testCass2 then
|
// Strip the prefix encoding
|
||||||
ErrorMsg = 'Scan Mismatch - RDS values do not match. Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.':CRLF$ |
|
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
||||||
|
Cassette2[1, 2] = ''
|
||||||
|
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
|
Cassette2[1,1] = ''
|
||||||
|
end
|
||||||
|
testCass1 = Param3
|
||||||
|
testCass2 = Cassette2
|
||||||
|
convert '*' to '.' in testCass1
|
||||||
|
convert '*' to '.' in testCass2
|
||||||
|
|
||||||
|
If testCass1 NE testCass2 then
|
||||||
|
ErrorMsg = 'Scan Mismatch - RDS values do not match. Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.':CRLF$ |
|
||||||
: 'RDS Label #1: ':testCass1:CRLF$ |
|
: 'RDS Label #1: ':testCass1:CRLF$ |
|
||||||
: 'RDS Label #2: ':testCass2:CRLF$
|
: 'RDS Label #2: ':testCass2:CRLF$
|
||||||
|
|
||||||
ScanMismatch = True$
|
ScanMismatch = True$
|
||||||
gosub ToggleLotHold
|
GoSub ToggleLotHold
|
||||||
Error_Services('Add', ErrorMsg)
|
end
|
||||||
return
|
|
||||||
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,20 +584,12 @@ 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
|
||||||
@ -525,19 +597,20 @@ 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,133 +619,127 @@ 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$>
|
LastWOStepKey = WOStepKeys[-1, 'B' : @VM]
|
||||||
FirstWOMatKey = WOMatKeys<0, 1>
|
PartNo = WOLogRow<WO_LOG_EPI_PART_NO$>
|
||||||
WOMatRow = Database_Services('ReadDataRow', 'WO_MAT', FirstWOMatKey)
|
WOStepRow = Database_Services('ReadDataRow', 'WO_STEP', LastWOStepKey)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
PartNo = WOMatRow<WO_MAT_CUST_PART_NO$>
|
WOStepPSN = WOStepRow<WO_STEP_PROD_SPEC_ID$>
|
||||||
LastWOStepKey = WOStepKeys[-1, 'B' : @VM]
|
WOStepRDSNos = WOStepRow<WO_STEP_RDS_KEY$>
|
||||||
WOStepRow = Database_Services('ReadDataRow', 'WO_STEP', LastWOStepKey)
|
WOStepWMOutNos = WOStepRow<WO_STEP_WM_OUT_KEYS$>
|
||||||
|
ProdSpecRow = Database_Services('ReadDataRow', 'PROD_SPEC', WOStepPSN)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WOStepPSN = WOStepRow<WO_STEP_PROD_SPEC_ID$>
|
ReactorType = ProdSpecRow<PROD_SPEC_REACTOR_TYPE$>
|
||||||
WOStepRDSNos = WOStepRow<WO_STEP_RDS_KEY$>
|
SearchString = ''
|
||||||
WOStepWMOutNos = WOStepRow<WO_STEP_WM_OUT_KEYS$>
|
SearchTable = 'MAKEUP_WAFERS'
|
||||||
ProdSpecRow = Database_Services('ReadDataRow', 'PROD_SPEC', WOStepPSN)
|
If ReactorType EQ 'EPP' then
|
||||||
|
SearchString := 'EPI_PART_NO' : @VM : PartNo : @FM : 'REACT_TYPE' : @VM : 'EPP' : @FM
|
||||||
|
end else
|
||||||
|
SearchString := 'EPI_PART_NO' : @VM : PartNo : @FM : 'REACT_TYPE' : @VM : '#EPP' : @FM
|
||||||
|
end
|
||||||
|
|
||||||
|
hDictSearchTable = Database_Services('GetTableHandle', 'DICT.' : SearchTable)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
ReactorType = ProdSpecRow<PROD_SPEC_REACTOR_TYPE$>
|
rv = Set_Status(0)
|
||||||
SearchString = ''
|
MakeupBoxes = ''
|
||||||
SearchTable = 'MAKEUP_WAFERS'
|
Flag = ''
|
||||||
If ReactorType EQ 'EPP' then
|
StatusCode = ''
|
||||||
SearchString := 'EPI_PART_NO' : @VM : PartNo : @FM : 'REACT_TYPE' : @VM : 'EPP' : @FM
|
Btree.Extract(SearchString, SearchTable, hDictSearchTable, MakeupBoxes, '', Flag)
|
||||||
|
If Get_Status(StatusCode) then
|
||||||
|
Error_Services('Add', 'Error calling Btree.Extract in the ' : Service : ' service. StatusCode: ' : StatusCode)
|
||||||
end else
|
end else
|
||||||
SearchString := 'EPI_PART_NO' : @VM : PartNo : @FM : 'REACT_TYPE' : @VM : '#EPP' : @FM
|
If MakeupBoxes NE '' then
|
||||||
end
|
// One or more makeup was found that matches the customer's part and has the status of 'Ready to Use'.
|
||||||
|
// Now loop through to find out which ones have the RDS final signature or not.
|
||||||
hDictSearchTable = Database_Services('GetTableHandle', 'DICT.' : SearchTable)
|
NumMakeupBoxes = DCount(MakeupBoxes, @VM)
|
||||||
If Error_Services('NoError') then
|
For Each MakeupBoxID in MakeupBoxes using @VM
|
||||||
rv = Set_Status(0)
|
WOMatKeyID = MakeupBoxID
|
||||||
MakeupBoxes = ''
|
CurrStatus = Xlate('MAKEUP_WAFERS', MakeupBoxID, 'CURR_STATUS_STATIC', 'X')
|
||||||
Flag = ''
|
// DPC 7/21/20 added HOLD as excluded status type
|
||||||
StatusCode = ''
|
Locate CurrStatus in 'MT,VOID,SHIP,REJ,HOLD' using ',' setting cPos else
|
||||||
Btree.Extract(SearchString, SearchTable, hDictSearchTable, MakeupBoxes, '', Flag)
|
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
||||||
If Get_Status(StatusCode) then
|
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID:@RM:'':@RM:True$)
|
||||||
Error_Services('Add', 'Error calling Btree.Extract in the ' : Service : ' service. StatusCode: ' : StatusCode)
|
end else
|
||||||
end else
|
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
||||||
If MakeupBoxes NE '' then
|
end
|
||||||
// One or more makeup was found that matches the customer's part and has the status of 'Ready to Use'.
|
If CurrWaferCount GT 0 then
|
||||||
// Now loop through to find out which ones have the RDS final signature or not.
|
WOMatRow = Database_Services('ReadDataRow', 'WO_MAT', WOMatKeyID)
|
||||||
NumMakeupBoxes = DCount(MakeupBoxes, @VM)
|
RDSKeyIDs = WOMatRow<WO_MAT_RDS_NO$>
|
||||||
For Each MakeupBoxID in MakeupBoxes using @VM
|
SAPBatchNo = WOMatRow<WO_MAT_SAP_BATCH_NO$>
|
||||||
WOMatKeyID = MakeupBoxID
|
FirstRDSKeyID = RDSKeyIDs[1, @VM]
|
||||||
CurrStatus = Xlate('MAKEUP_WAFERS', MakeupBoxID, 'CURR_STATUS_STATIC', 'X')
|
RDSRow = Database_Services('ReadDataRow', 'RDS', FirstRDSKeyID)
|
||||||
// DPC 7/21/20 added HOLD as excluded status type
|
WMOKey = WOMatRow<WO_MAT_WMO_KEY$>
|
||||||
Locate CurrStatus in 'MT,VOID,SHIP,REJ,HOLD' using ',' setting cPos else
|
If WMOKey NE '' then
|
||||||
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
WMOFQASig = Xlate('WM_OUT', WMOKey, 'SUP_VER_SIG', 'X')
|
||||||
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID:@RM:'':@RM:True$)
|
|
||||||
end else
|
end else
|
||||||
CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
|
WMOFQASig = ''
|
||||||
end
|
end
|
||||||
If CurrWaferCount GT 0 then
|
ThisWorkOrderNo = WOMatKeyID[1, '*']
|
||||||
WOMatRow = Database_Services('ReadDataRow', 'WO_MAT', WOMatKeyID)
|
ThisCassetteNo = WOMatKeyID[Col2() + 1, '*']
|
||||||
RDSKeyIDs = WOMatRow<WO_MAT_RDS_NO$>
|
ThisWOLogRow = Database_Services('ReadDataRow', 'WO_LOG', ThisWorkOrderNo)
|
||||||
SAPBatchNo = WOMatRow<WO_MAT_SAP_BATCH_NO$>
|
ThisWOStepKeyID = ThisWOLogRow<WO_LOG_WO_STEP_KEY$>[-1, 'B' : @VM]
|
||||||
FirstRDSKeyID = RDSKeyIDs[1, @VM]
|
ThisWOStepRow = Database_Services('ReadDataRow', 'WO_STEP', ThisWOStepKeyID)
|
||||||
RDSRow = Database_Services('ReadDataRow', 'RDS', FirstRDSKeyID)
|
WOStepRDSNos = ThisWoStepRow<WO_STEP_RDS_KEY$>
|
||||||
WMOKey = WOMatRow<WO_MAT_WMO_KEY$>
|
MakeupBoxDet = ThisWorkOrderNo : @SVM
|
||||||
If WMOKey NE '' then
|
MakeupBoxDet := ThisCassetteNo : @SVM
|
||||||
WMOFQASig = Xlate('WM_OUT', WMOKey, 'SUP_VER_SIG', 'X')
|
MakeupBoxDet := WOMatRow<WO_MAT_SAP_BATCH_NO$> : @SVM
|
||||||
end else
|
MakeupBoxDet := ThisWOStepRow<WO_STEP_PROD_SPEC_ID$> : @SVM
|
||||||
WMOFQASig = ''
|
MakeupBoxDet := PartNo : @SVM
|
||||||
end
|
MakeupBoxDet := CurrWaferCount : @SVM
|
||||||
ThisWorkOrderNo = WOMatKeyID[1, '*']
|
MakeupBoxDet := FirstRDSKeyID
|
||||||
ThisCassetteNo = WOMatKeyID[Col2() + 1, '*']
|
// JRO Added PROD_SPEC PARAMETERS 5/8/2020
|
||||||
ThisWOLogRow = Database_Services('ReadDataRow', 'WO_LOG', ThisWorkOrderNo)
|
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
||||||
ThisWOStepKeyID = ThisWOLogRow<WO_LOG_WO_STEP_KEY$>[-1, 'B' : @VM]
|
ProdSpecID = Xlate('RDS', WOStepRDSNos<1, 1>, RDS_PROD_SPEC_ID$, 'X')
|
||||||
ThisWOStepRow = Database_Services('ReadDataRow', 'WO_STEP', ThisWOStepKeyID)
|
end else
|
||||||
WOStepRDSNos = ThisWoStepRow<WO_STEP_RDS_KEY$>
|
ProdSpecID = Xlate('RDS', RDSKeyIDs, RDS_PROD_SPEC_ID$, 'X')
|
||||||
MakeupBoxDet = ThisWorkOrderNo : @SVM
|
end
|
||||||
MakeupBoxDet := ThisCassetteNo : @SVM
|
ActiveStatus = XLATE('PROD_SPEC', ProdSpecID, PROD_SPEC_STATUS$, 'X')
|
||||||
MakeupBoxDet := WOMatRow<WO_MAT_SAP_BATCH_NO$> : @SVM
|
LabelCheck = Count(WOMatRow<WO_MAT_INV_ACTION$>, 'LBLCHK')
|
||||||
MakeupBoxDet := ThisWOStepRow<WO_STEP_PROD_SPEC_ID$> : @SVM
|
// JRO Added the extra condition for Active Status 5/8/2020
|
||||||
MakeupBoxDet := PartNo : @SVM
|
If ActiveStatus EQ 'A' then
|
||||||
MakeupBoxDet := CurrWaferCount : @SVM
|
Begin Case
|
||||||
MakeupBoxDet := FirstRDSKeyID
|
|
||||||
// JRO Added PROD_SPEC PARAMETERS 5/8/2020
|
|
||||||
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
|
||||||
ProdSpecID = Xlate('RDS', WOStepRDSNos<1, 1>, RDS_PROD_SPEC_ID$, 'X')
|
|
||||||
end else
|
|
||||||
ProdSpecID = Xlate('RDS', RDSKeyIDs, RDS_PROD_SPEC_ID$, 'X')
|
|
||||||
end
|
|
||||||
ActiveStatus = XLATE('PROD_SPEC', ProdSpecID, PROD_SPEC_STATUS$, 'X')
|
|
||||||
LabelCheck = Count(WOMatRow<WO_MAT_INV_ACTION$>, 'LBLCHK')
|
|
||||||
// JRO Added the extra condition for Active Status 5/8/2020
|
|
||||||
If ActiveStatus EQ 'A' then
|
|
||||||
Begin Case
|
|
||||||
|
|
||||||
Case SAPBatchNo EQ ''
|
Case SAPBatchNo EQ ''
|
||||||
// Cassette has not received a batch number from SAP, so it is not yet eligible to be used.
|
// Cassette has not received a batch number from SAP, so it is not yet eligible to be used.
|
||||||
FieldPos = 3
|
FieldPos = 3
|
||||||
|
|
||||||
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> NE '') and (LabelCheck NE FALSE$) ) OR ( (ReactorType EQ 'EPP') and (WMOFQASig NE '') and (LabelCheck NE FALSE$) )
|
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> NE '') and (LabelCheck NE FALSE$) ) OR ( (ReactorType EQ 'EPP') and (WMOFQASig NE '') and (LabelCheck NE FALSE$) )
|
||||||
// Cassette has a final signature, so it is eligible to be used.
|
// Cassette has a final signature, so it is eligible to be used.
|
||||||
FieldPos = 1
|
FieldPos = 1
|
||||||
|
|
||||||
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> EQ '') ) OR ( (ReactorType EQ 'EPP') and (WMOFQASig EQ '') )
|
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> EQ '') ) OR ( (ReactorType EQ 'EPP') and (WMOFQASig EQ '') )
|
||||||
// Cassette does not yet have a final signature, so it is not yet eligible to be used.
|
// Cassette does not yet have a final signature, so it is not yet eligible to be used.
|
||||||
FieldPos = 2
|
FieldPos = 2
|
||||||
|
|
||||||
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> NE '') and (LabelCheck EQ False$)) OR ( (ReactorType EQ 'EPP') and (WMOFQASig NE '') and (LabelCheck EQ False$))
|
Case ( (ReactorType NE 'EPP') and (RDSRow<RDS_SUP_VER_SIG$> NE '') and (LabelCheck EQ False$)) OR ( (ReactorType EQ 'EPP') and (WMOFQASig NE '') and (LabelCheck EQ False$))
|
||||||
// Cassette does not yet have a packing label check, so it is not yet eligible to be used.
|
// Cassette does not yet have a packing label check, so it is not yet eligible to be used.
|
||||||
FieldPos = 4
|
FieldPos = 4
|
||||||
|
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
// Log these cassettes as we should never end up here.
|
// Log these cassettes as we should never end up here.
|
||||||
Null
|
Null
|
||||||
|
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
If KeysOnly EQ True$ then
|
If KeysOnly EQ True$ then
|
||||||
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
If (ReactorType EQ 'EPP') OR (ReactorType EQ 'P') then
|
||||||
WMOFormat = Field(MakeupBoxID, '*', 1):'*1*':Field(MakeupBoxID, '*', 2)
|
WMOFormat = Field(MakeupBoxID, '*', 1):'*1*':Field(MakeupBoxID, '*', 2)
|
||||||
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, WMOFormat)
|
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, WMOFormat)
|
||||||
end else
|
|
||||||
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, WOMatKeyID)
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, MakeupBoxDet)
|
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, WOMatKeyID)
|
||||||
end
|
end
|
||||||
|
end else
|
||||||
|
AvailableMakeupWafers = Insert(AvailableMakeupWafers, FieldPos, -1, 0, MakeupBoxDet)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Next MakeupBoxID
|
end
|
||||||
end
|
Next MakeupBoxID
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1482,5 +1476,3 @@ ClearCursors:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
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