refactored material track code for front end

This commit is contained in:
Infineon\StieberD 2025-01-29 16:53:28 -07:00 committed by Stieber Daniel (CSC FI SPS MESLEO)
parent c36cf5fedc
commit d7d8fc0289
14 changed files with 3273 additions and 5497 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,761 +0,0 @@
{
"header": {
"version": 1,
"type": "record"
},
"body": {
"record1": {
"<1>": "1010",
"<2>": "8",
"<3>": ""
},
"record2": {
"<1>": {
"<1,1>": "NDW_MATERIAL_TRACK_REPORT",
"<1,2>": "",
"<1,3>": "WINDOW",
"<1,4>": "",
"<1,5>": "395",
"<1,6>": "241",
"<1,7>": "-578",
"<1,8>": "-318",
"<1,9>": "Material Track Report",
"<1,10>": {
"<1,10,1>": "0x84C80000",
"<1,10,2>": "0x0"
},
"<1,11>": {
"<1,11,1>": "0x0",
"<1,11,2>": "0x80000000"
},
"<1,12>": "0",
"<1,13>": "-2",
"<1,14>": "0",
"<1,15>": "",
"<1,16>": "",
"<1,17>": "",
"<1,18>": {
"<1,18,1>": {
"<1,18,1,1>": "R",
"<1,18,1,2>": "EXECUTE",
"<1,18,1,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
"<1,18,1,4>": {
"<1,18,1,4,1>": "@SELF",
"<1,18,1,4,2>": "@EVENT",
"<1,18,1,4,3>": "@PARAM1",
"<1,18,1,4,4>": "@PARAM2",
"<1,18,1,4,5>": "@PARAM3",
"<1,18,1,4,6>": "@PARAM4",
"<1,18,1,4,7>": "@PARAM5",
"<1,18,1,4,8>": "@PARAM6"
},
"<1,18,1,5>": "",
"<1,18,1,6>": ""
},
"<1,18,2>": ""
},
"<1,19>": {
"<1,19,1>": "CREATE",
"<1,19,2>": ""
},
"<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>": "0xF001E808"
},
"<1,33>": "",
"<1,34>": "LSL2*IMAGE*ICO*INFINEON",
"<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>": "OLE_EDT_COL_FILTER",
"<1,2>": "",
"<1,3>": "OLECONTROL.SRP.Edittable.1",
"<1,4>": "NDW_MATERIAL_TRACK_REPORT",
"<1,5>": "13",
"<1,6>": "30",
"<1,7>": "200",
"<1,8>": "276",
"<1,9>": "SRP.Edittable.1",
"<1,10>": {
"<1,10,1>": "0x56000000",
"<1,10,2>": "0x0"
},
"<1,11>": {
"<1,11,1>": "0x4",
"<1,11,2>": "0x80000000"
},
"<1,12>": "1",
"<1,13>": "-2",
"<1,14>": "0",
"<1,15>": {
"<1,15,1>": {
"<1,15,1,1>": "Segoe UI",
"<1,15,1,2>": "-12",
"<1,15,1,3>": "400",
"<1,15,1,4>": "0",
"<1,15,1,5>": "0",
"<1,15,1,6>": "0",
"<1,15,1,7>": "0",
"<1,15,1,8>": "34",
"<1,15,1,9>": "0",
"<1,15,1,10>": "3",
"<1,15,1,11>": "2",
"<1,15,1,12>": "1",
"<1,15,1,13>": "0",
"<1,15,1,14>": "0"
}
},
"<1,16>": "",
"<1,17>": "",
"<1,18>": {
"<1,18,1>": {
"<1,18,1,1>": "R",
"<1,18,1,2>": "EXECUTE",
"<1,18,1,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
"<1,18,1,4>": {
"<1,18,1,4,1>": "@SELF",
"<1,18,1,4,2>": "@EVENT",
"<1,18,1,4,3>": "@PARAM1",
"<1,18,1,4,4>": "@PARAM2",
"<1,18,1,4,5>": "@PARAM3",
"<1,18,1,4,6>": "@PARAM4",
"<1,18,1,4,7>": "@PARAM5",
"<1,18,1,4,8>": "@PARAM6"
},
"<1,18,1,5>": "",
"<1,18,1,6>": ""
},
"<1,18,2>": ""
},
"<1,19>": {
"<1,19,1>": "OLE",
"<1,19,2>": ""
},
"<1,20>": "",
"<1,21>": "",
"<1,22>": "",
"<1,23>": "",
"<1,24>": "",
"<1,25>": "0",
"<1,26>": "0",
"<1,27>": "",
"<1,28>": "<<None>>",
"<1,29>": "<<None>>",
"<1,30>": "<<None>>",
"<1,31>": "0",
"<1,32>": {
"<1,32,1>": "0x7fffe",
"<1,32,2>": "0xf0016400"
},
"<1,33>": "",
"<1,34>": "",
"<1,35>": "",
"<1,36>": "0000000000000000",
"<1,37>": ""
},
"<2>": {
"<2,1>": "OLE_EDT_LOC_FILTER",
"<2,2>": "",
"<2,3>": "OLECONTROL.SRP.Edittable.1",
"<2,4>": "NDW_MATERIAL_TRACK_REPORT",
"<2,5>": "231",
"<2,6>": "31",
"<2,7>": "335",
"<2,8>": "180",
"<2,9>": "SRP.Edittable.1",
"<2,10>": {
"<2,10,1>": "0x56000000",
"<2,10,2>": "0x0"
},
"<2,11>": {
"<2,11,1>": "0x0",
"<2,11,2>": "0x80000000"
},
"<2,12>": "2",
"<2,13>": "-2",
"<2,14>": "0",
"<2,15>": {
"<2,15,1>": {
"<2,15,1,1>": "Segoe UI",
"<2,15,1,2>": "-12",
"<2,15,1,3>": "400",
"<2,15,1,4>": "0",
"<2,15,1,5>": "0",
"<2,15,1,6>": "0",
"<2,15,1,7>": "0",
"<2,15,1,8>": "34",
"<2,15,1,9>": "0",
"<2,15,1,10>": "3",
"<2,15,1,11>": "2",
"<2,15,1,12>": "1",
"<2,15,1,13>": "0",
"<2,15,1,14>": "0"
}
},
"<2,16>": "",
"<2,17>": "",
"<2,18>": {
"<2,18,1>": {
"<2,18,1,1>": "R",
"<2,18,1,2>": "EXECUTE",
"<2,18,1,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
"<2,18,1,4>": {
"<2,18,1,4,1>": "@SELF",
"<2,18,1,4,2>": "@EVENT",
"<2,18,1,4,3>": "@PARAM1",
"<2,18,1,4,4>": "@PARAM2",
"<2,18,1,4,5>": "@PARAM3",
"<2,18,1,4,6>": "@PARAM4",
"<2,18,1,4,7>": "@PARAM5",
"<2,18,1,4,8>": "@PARAM6"
},
"<2,18,1,5>": "",
"<2,18,1,6>": ""
},
"<2,18,2>": ""
},
"<2,19>": {
"<2,19,1>": "OLE",
"<2,19,2>": ""
},
"<2,20>": "",
"<2,21>": "",
"<2,22>": "",
"<2,23>": "",
"<2,24>": "",
"<2,25>": "0",
"<2,26>": "0",
"<2,27>": "",
"<2,28>": "<<None>>",
"<2,29>": "<<None>>",
"<2,30>": "<<None>>",
"<2,31>": "0",
"<2,32>": {
"<2,32,1>": "0x7fffe",
"<2,32,2>": "0xf0016c00"
},
"<2,33>": "",
"<2,34>": "",
"<2,35>": "",
"<2,36>": "0000000000000000",
"<2,37>": ""
},
"<3>": {
"<3,1>": "PUB_GEN_REPORT",
"<3,2>": "",
"<3,3>": "PUSHBUTTON",
"<3,4>": "NDW_MATERIAL_TRACK_REPORT",
"<3,5>": "464",
"<3,6>": "279",
"<3,7>": "106",
"<3,8>": "27",
"<3,9>": "&Generate Report\r\n",
"<3,10>": {
"<3,10,1>": "0x56002000",
"<3,10,2>": "0x0"
},
"<3,11>": {
"<3,11,1>": "0x100",
"<3,11,2>": "0x80000000"
},
"<3,12>": "3",
"<3,13>": "-2",
"<3,14>": "0",
"<3,15>": {
"<3,15,1>": {
"<3,15,1,1>": "Segoe UI",
"<3,15,1,2>": "-12",
"<3,15,1,3>": "400",
"<3,15,1,4>": "0",
"<3,15,1,5>": "0",
"<3,15,1,6>": "0",
"<3,15,1,7>": "0",
"<3,15,1,8>": "34",
"<3,15,1,9>": "0",
"<3,15,1,10>": "3",
"<3,15,1,11>": "2",
"<3,15,1,12>": "1",
"<3,15,1,13>": "0",
"<3,15,1,14>": "0"
}
},
"<3,16>": "",
"<3,17>": "",
"<3,18>": {
"<3,18,1>": {
"<3,18,1,1>": "R",
"<3,18,1,2>": "EXECUTE",
"<3,18,1,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
"<3,18,1,4>": {
"<3,18,1,4,1>": "@SELF",
"<3,18,1,4,2>": "@EVENT",
"<3,18,1,4,3>": "@PARAM1",
"<3,18,1,4,4>": "@PARAM2",
"<3,18,1,4,5>": "@PARAM3",
"<3,18,1,4,6>": "@PARAM4",
"<3,18,1,4,7>": "@PARAM5",
"<3,18,1,4,8>": "@PARAM6"
},
"<3,18,1,5>": "",
"<3,18,1,6>": ""
},
"<3,18,2>": ""
},
"<3,19>": {
"<3,19,1>": "CLICK",
"<3,19,2>": ""
},
"<3,20>": "",
"<3,21>": "",
"<3,22>": "",
"<3,23>": "",
"<3,24>": "",
"<3,25>": "0",
"<3,26>": "0",
"<3,27>": "",
"<3,28>": "<<None>>",
"<3,29>": "<<None>>",
"<3,30>": "<<None>>",
"<3,31>": "0",
"<3,32>": {
"<3,32,1>": "0x7fffe",
"<3,32,2>": "0xf0016008"
},
"<3,33>": "",
"<3,34>": "",
"<3,35>": "",
"<3,36>": "",
"<3,37>": "",
"<3,38>": "",
"<3,39>": "",
"<3,40>": "1",
"<3,41>": "",
"<3,42>": "",
"<3,43>": "",
"<3,44>": "",
"<3,45>": "",
"<3,46>": "",
"<3,47>": "",
"<3,48>": "",
"<3,49>": "",
"<3,50>": "",
"<3,51>": ""
},
"<4>": {
"<4,1>": "PUB_SAVE_SETTINGS",
"<4,2>": "",
"<4,3>": "PUSHBUTTON",
"<4,4>": "NDW_MATERIAL_TRACK_REPORT",
"<4,5>": "350",
"<4,6>": "279",
"<4,7>": "106",
"<4,8>": "27",
"<4,9>": "&Save Settings",
"<4,10>": {
"<4,10,1>": "0x56002000",
"<4,10,2>": "0x0"
},
"<4,11>": {
"<4,11,1>": "0x100",
"<4,11,2>": "0x80000000"
},
"<4,12>": "4",
"<4,13>": "-2",
"<4,14>": "0",
"<4,15>": {
"<4,15,1>": {
"<4,15,1,1>": "Segoe UI",
"<4,15,1,2>": "-12",
"<4,15,1,3>": "400",
"<4,15,1,4>": "0",
"<4,15,1,5>": "0",
"<4,15,1,6>": "0",
"<4,15,1,7>": "0",
"<4,15,1,8>": "34",
"<4,15,1,9>": "0",
"<4,15,1,10>": "3",
"<4,15,1,11>": "2",
"<4,15,1,12>": "1",
"<4,15,1,13>": "0",
"<4,15,1,14>": "0"
}
},
"<4,16>": "",
"<4,17>": "",
"<4,18>": {
"<4,18,1>": {
"<4,18,1,1>": "R",
"<4,18,1,2>": "EXECUTE",
"<4,18,1,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
"<4,18,1,4>": {
"<4,18,1,4,1>": "@SELF",
"<4,18,1,4,2>": "@EVENT",
"<4,18,1,4,3>": "@PARAM1",
"<4,18,1,4,4>": "@PARAM2",
"<4,18,1,4,5>": "@PARAM3",
"<4,18,1,4,6>": "@PARAM4",
"<4,18,1,4,7>": "@PARAM5",
"<4,18,1,4,8>": "@PARAM6"
},
"<4,18,1,5>": "",
"<4,18,1,6>": ""
},
"<4,18,2>": ""
},
"<4,19>": {
"<4,19,1>": "CLICK",
"<4,19,2>": ""
},
"<4,20>": "",
"<4,21>": "",
"<4,22>": "",
"<4,23>": "",
"<4,24>": "",
"<4,25>": "0",
"<4,26>": "0",
"<4,27>": "",
"<4,28>": "<<None>>",
"<4,29>": "<<None>>",
"<4,30>": "<<None>>",
"<4,31>": "0",
"<4,32>": {
"<4,32,1>": "0x7fffe",
"<4,32,2>": "0xf0016008"
},
"<4,33>": "",
"<4,34>": "",
"<4,35>": "",
"<4,36>": "",
"<4,37>": "",
"<4,38>": "",
"<4,39>": "",
"<4,40>": "1",
"<4,41>": "",
"<4,42>": "",
"<4,43>": "",
"<4,44>": "",
"<4,45>": "",
"<4,46>": "",
"<4,47>": "",
"<4,48>": "",
"<4,49>": "",
"<4,50>": "",
"<4,51>": ""
},
"<5>": {
"<5,1>": "OLE_SUBCLASS",
"<5,2>": "",
"<5,3>": "OLECONTROL.SRP.Subclass.1",
"<5,4>": "NDW_MATERIAL_TRACK_REPORT",
"<5,5>": "38",
"<5,6>": "0",
"<5,7>": "116",
"<5,8>": "28",
"<5,9>": "SRP.Subclass.1",
"<5,10>": {
"<5,10,1>": "0x46000000",
"<5,10,2>": "0x0"
},
"<5,11>": {
"<5,11,1>": "0x0",
"<5,11,2>": "0x80000000"
},
"<5,12>": "5",
"<5,13>": "-2",
"<5,14>": "0",
"<5,15>": {
"<5,15,1>": {
"<5,15,1,1>": "Segoe UI",
"<5,15,1,2>": "-12",
"<5,15,1,3>": "400",
"<5,15,1,4>": "0",
"<5,15,1,5>": "0",
"<5,15,1,6>": "0",
"<5,15,1,7>": "0",
"<5,15,1,8>": "34",
"<5,15,1,9>": "0",
"<5,15,1,10>": "3",
"<5,15,1,11>": "2",
"<5,15,1,12>": "1",
"<5,15,1,13>": "0",
"<5,15,1,14>": "0"
}
},
"<5,16>": "",
"<5,17>": "",
"<5,18>": "",
"<5,19>": "",
"<5,20>": "",
"<5,21>": "",
"<5,22>": "",
"<5,23>": "",
"<5,24>": "",
"<5,25>": "0",
"<5,26>": "0",
"<5,27>": "",
"<5,28>": "<<None>>",
"<5,29>": "<<None>>",
"<5,30>": "<<None>>",
"<5,31>": "0",
"<5,32>": {
"<5,32,1>": "0x7fffe",
"<5,32,2>": "0xf0016800"
},
"<5,33>": "",
"<5,34>": "",
"<5,35>": "",
"<5,36>": "",
"<5,37>": ""
},
"<6>": {
"<6,1>": "OLE_POPUP",
"<6,2>": "",
"<6,3>": "OLECONTROL.SRP.Popup.1",
"<6,4>": "NDW_MATERIAL_TRACK_REPORT",
"<6,5>": "158",
"<6,6>": "0",
"<6,7>": "116",
"<6,8>": "28",
"<6,9>": "SRP.Popup.1",
"<6,10>": {
"<6,10,1>": "0x46000000",
"<6,10,2>": "0x0"
},
"<6,11>": {
"<6,11,1>": "0x0",
"<6,11,2>": "0x80000000"
},
"<6,12>": "6",
"<6,13>": "-2",
"<6,14>": "0",
"<6,15>": {
"<6,15,1>": {
"<6,15,1,1>": "Segoe UI",
"<6,15,1,2>": "-12",
"<6,15,1,3>": "400",
"<6,15,1,4>": "0",
"<6,15,1,5>": "0",
"<6,15,1,6>": "0",
"<6,15,1,7>": "0",
"<6,15,1,8>": "34",
"<6,15,1,9>": "0",
"<6,15,1,10>": "3",
"<6,15,1,11>": "2",
"<6,15,1,12>": "1",
"<6,15,1,13>": "0",
"<6,15,1,14>": "0"
}
},
"<6,16>": "",
"<6,17>": "",
"<6,18>": "",
"<6,19>": "",
"<6,20>": "",
"<6,21>": "",
"<6,22>": "",
"<6,23>": "",
"<6,24>": "",
"<6,25>": "0",
"<6,26>": "0",
"<6,27>": "",
"<6,28>": "<<None>>",
"<6,29>": "<<None>>",
"<6,30>": "<<None>>",
"<6,31>": "0",
"<6,32>": {
"<6,32,1>": "0x7fffe",
"<6,32,2>": "0xf0016800"
},
"<6,33>": "",
"<6,34>": "",
"<6,35>": "",
"<6,36>": "",
"<6,37>": ""
},
"<7>": {
"<7,1>": "OLE_REPORT_LINE",
"<7,2>": "",
"<7,3>": "OLECONTROL.SRP.Picture.1",
"<7,4>": "NDW_MATERIAL_TRACK_REPORT",
"<7,5>": "12",
"<7,6>": "9",
"<7,7>": "202",
"<7,8>": "13",
"<7,9>": "SRP.Picture.1",
"<7,10>": {
"<7,10,1>": "0x56000000",
"<7,10,2>": "0x0"
},
"<7,11>": {
"<7,11,1>": "0x0",
"<7,11,2>": "0x80000000"
},
"<7,12>": "7",
"<7,13>": "-2",
"<7,14>": "0",
"<7,15>": {
"<7,15,1>": {
"<7,15,1,1>": "Segoe UI",
"<7,15,1,2>": "-12",
"<7,15,1,3>": "400",
"<7,15,1,4>": "0",
"<7,15,1,5>": "0",
"<7,15,1,6>": "0",
"<7,15,1,7>": "0",
"<7,15,1,8>": "34",
"<7,15,1,9>": "0",
"<7,15,1,10>": "3",
"<7,15,1,11>": "2",
"<7,15,1,12>": "1",
"<7,15,1,13>": "0",
"<7,15,1,14>": "0"
}
},
"<7,16>": "",
"<7,17>": "",
"<7,18>": "",
"<7,19>": "",
"<7,20>": "",
"<7,21>": "",
"<7,22>": "",
"<7,23>": "",
"<7,24>": "",
"<7,25>": "0",
"<7,26>": "0",
"<7,27>": "",
"<7,28>": "<<None>>",
"<7,29>": "<<None>>",
"<7,30>": "<<None>>",
"<7,31>": "0",
"<7,32>": {
"<7,32,1>": "0x7fffe",
"<7,32,2>": "0xf0016c00"
},
"<7,33>": "",
"<7,34>": "",
"<7,35>": "",
"<7,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF0744006900760069006400650072000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF00FFFEFF0443006C0069007000FFFEFF044100750074006F00FFFEFF0E5200650070006F0072007400200043006F006C0075006D006E007300FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0B430065006E00740065007200FEF04C00650066007400C7FFFFFF00000000000000000000000001000000",
"<7,37>": ""
},
"<8>": {
"<8,1>": "OLE_PIC_LOC_FILTER",
"<8,2>": "",
"<8,3>": "OLECONTROL.SRP.Picture.1",
"<8,4>": "NDW_MATERIAL_TRACK_REPORT",
"<8,5>": "228",
"<8,6>": "9",
"<8,7>": "338",
"<8,8>": "13",
"<8,9>": "SRP.Picture.1",
"<8,10>": {
"<8,10,1>": "0x56000000",
"<8,10,2>": "0x0"
},
"<8,11>": {
"<8,11,1>": "0x0",
"<8,11,2>": "0x80000000"
},
"<8,12>": "8",
"<8,13>": "-2",
"<8,14>": "0",
"<8,15>": {
"<8,15,1>": {
"<8,15,1,1>": "Segoe UI",
"<8,15,1,2>": "-12",
"<8,15,1,3>": "400",
"<8,15,1,4>": "0",
"<8,15,1,5>": "0",
"<8,15,1,6>": "0",
"<8,15,1,7>": "0",
"<8,15,1,8>": "34",
"<8,15,1,9>": "0",
"<8,15,1,10>": "3",
"<8,15,1,11>": "2",
"<8,15,1,12>": "1",
"<8,15,1,13>": "0",
"<8,15,1,14>": "0"
}
},
"<8,16>": "",
"<8,17>": "",
"<8,18>": "",
"<8,19>": "",
"<8,20>": "",
"<8,21>": "",
"<8,22>": "",
"<8,23>": "",
"<8,24>": "",
"<8,25>": "0",
"<8,26>": "0",
"<8,27>": "",
"<8,28>": "<<None>>",
"<8,29>": "<<None>>",
"<8,30>": "<<None>>",
"<8,31>": "0",
"<8,32>": {
"<8,32,1>": "0x7fffe",
"<8,32,2>": "0xf0016c00"
},
"<8,33>": "",
"<8,34>": "",
"<8,35>": "",
"<8,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF0744006900760069006400650072000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF00FFFEFF0443006C0069007000FFFEFF044100750074006F00FFFEFF0F4C006F0063006100740069006F006E002000460069006C00740065007200FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0B430065006E00740065007200FEF04C006500660074007EFFFFFF00000000000000000000000001000000",
"<8,37>": ""
},
"<9>": ""
},
"record4": {
"<1>": "",
"<2>": {
"<2,1>": "",
"<2,2>": "",
"<2,3>": "",
"<2,4>": "0"
}
}
}
}

View File

@ -78,6 +78,8 @@ API config.ID.PUT
end end
If Key EQ 'userID' then If Key EQ 'userID' then
CurrUser = Field(Cookie, '=', 2) CurrUser = Field(Cookie, '=', 2)
end else
If OIWizardID NE '' then CurrUser = Xlate('OI_WIZARD', OIWizardID, 'EMPLOYEE_ID', 'X')
end end
Next Cookie Next Cookie
@ -109,7 +111,23 @@ CreateHALItem:
Begin Case Begin Case
Case ConfigID _EQC 'OEE' Case ConfigID _EQC 'OEE'
JSONResponse = Config_Services('GetOEE', FullEndpointURL) JSONResponse = Config_Services('GetOEE', FullEndpointURL)
Case ConfigID _EQC 'MaterialTrack'
OIWizardID = ''
CurrUser = ''
Cookies = HTTP_Services('GetHTTPCookie')
For each Cookie in Cookies using ';'
Key = Trim(Field(Cookie, '=', 1))
If Key EQ 'sessionID' then
OIWizardID = Field(Cookie, '=', 2)
end
If Key EQ 'userID' then
CurrUser = Field(Cookie, '=', 2)
end else
If OIWizardID NE '' then CurrUser = Xlate('OI_WIZARD', OIWizardID, 'EMPLOYEE_ID', 'X')
end
Next Cookie
JSONResponse = Config_Services('GetMaterialTrackSettings', CurrUser)
Case Otherwise$ Case Otherwise$
Error_Services('Add', 'Unsupported configID') Error_Services('Add', 'Unsupported configID')
End Case End Case
@ -166,6 +184,17 @@ UpdateHALItem:
end else end else
Error_Services('Add', 'User is not authorized to update OEE setpoints.') Error_Services('Add', 'User is not authorized to update OEE setpoints.')
end end
Case ConfigID _EQC 'MaterialTrack'
// The resource will have been put into the POST string.
Body = HTTP_Services('GetHTTPPostString')
If Body NE '' then
// The POST string will have been encoded so use percent (URL) decoding.
MtSettingsJson = HTTP_Services('DecodePercentString', Body)
Config_Services('UpdateMaterialTrackSettings', MtSettingsJson, CurrUser)
end else
Error_Services('Add', 'No body was sent with the request.')
end
Case Otherwise$ Case Otherwise$
Error_Services('Add', 'Unsupported configID') Error_Services('Add', 'Unsupported configID')
End Case End Case
@ -184,3 +213,4 @@ UpdateHALItem:
end end
return return

View File

@ -130,3 +130,29 @@ Service UpdateOEE(OEEjson)
end service end service
Service GetMaterialTrackSettings(UserId)
Response = ''
If (UserId NE '') then
RepUserId = UserId
Convert @Lower.Case to @Upper.Case in RepUserId
Response = Database_Services('ReadDataRow', 'REPORT_CONFIG', 'MATERIAL_TRACK_WEB*':RepUserId)
end else
Error_Services('Add', 'Error in ':Service:' service. Null UserId passed into service.')
end
end service
Service UpdateMaterialTrackSettings(MtSettingsJson, UserId)
If ( (MtSettingsJson NE '') and (UserId NE '') ) then
RepUserId = UserId
Convert @Lower.Case to @Upper.Case in RepUserId
Database_Services('WriteDataRow', 'REPORT_CONFIG', 'MATERIAL_TRACK_WEB*':RepUserId, MtSettingsJson)
end else
Error_Services('Add', 'Error in ':Service:' service. Null MtSettingsJson or UserId passed into service.')
end
end service

View File

@ -49,8 +49,7 @@ Compile function NDW_MATERIAL_TRACK_PRO_REPORT_EVENTS(CtrlEntId, Event, @PARAMS)
#window NDW_MATERIAL_TRACK_PRO_REPORT #window NDW_MATERIAL_TRACK_PRO_REPORT
Declare function Form_Services, Database_Services, RTI_Task_Submit, RTI_Task_Status, MemberOf Declare function Form_Services, Database_Services, RTI_Task_Submit, RTI_Task_Status, MemberOf
Declare subroutine SRP_Show_Window, Send_Message, Set_Property, Report_Services_Dev, Database_Services, Material_Track Declare subroutine SRP_Show_Window, Send_Message, Set_Property, Database_Services, Material_Track, Report_Services
Declare subroutine Report_Services_Dev2, Report_Services_Dev5
$Insert EVENT_SETUP $Insert EVENT_SETUP
$Insert LOGICAL $Insert LOGICAL
@ -129,25 +128,8 @@ Event PUB_GEN_REPORT.CLICK()
If LocationEnabled then RptLocations<0, -1> = Location If LocationEnabled then RptLocations<0, -1> = Location
Next Location Next Location
* Report_Services_Dev5('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag) Report_Services('PrintMaterialTrackReport', RptColumns, RptLocations, NoMatFlag, OldReport)
Begin Case
Case OldReport
Report_Services_Dev('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag)
Case Otherwise$
Report_Services_Dev5('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag)
End Case
* Begin Case
* Case DevReport
* Report_Services_Dev5('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag)
* Case @User4 EQ 'JUSTIN_H' or @User4 EQ 'DANIEL_ST'
* Report_Services_Dev2('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag)
* Case Otherwise$
* Report_Services_Dev('GetMaterialTrackReport', RptColumns, RptLocations, NoMatFlag)
* End Case
end event end event
@ -438,4 +420,3 @@ EnableReportColumns:
return return

View File

@ -1,422 +0,0 @@
Compile function NDW_MATERIAL_TRACK_REPORT_EVENTS(CtrlEntId, Event, @PARAMS)
/***********************************************************************************************************************
Name : NDW_MATERIAL_TRACK_EVENTS
Description : Commuter module for the NDW_MATERIAL_TRACK_EVENTS form.
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)
10/29/20 djs Original programmer.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
#window NDW_MATERIAL_TRACK_REPORT
Declare function Form_Services, Database_Services, RTI_Task_Submit, RTI_Task_Status
Declare subroutine SRP_Show_Window, Send_Message, Set_Property, Report_Services, Database_Services, Material_Track
$Insert EVENT_SETUP
$Insert LOGICAL
$Insert REPORT_CONFIG_EQUATES
SubclassInfo = Form_Services('FindSubclassControl')
Subclass = SubclassInfo<1>
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
If Event EQ 'OLE' then
Transfer Event to OIEvent
Transfer Param1 to Event
Transfer Param2 to Param1
Transfer Param3 to Param2
Transfer Param4 to Param3
Transfer Param5 to Param4
Transfer Param6 to Param5
Transfer Param7 to Param6
Transfer Param8 to Param7
end
GoToEvent Event for CtrlEntId else
// Event not implemented
end
Return EventFlow or 1
//-----------------------------------------------------------------------------
// EVENT HANDLERS
//-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam)
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', False$)
end else
UserSettings = ''
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', True$)
end
GoSub Setup_OLE_Controls
GoSub EnableGenerateReportButton
FormSize = ''
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
End Event
Event PUB_GEN_REPORT.CLICK()
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
RptColumns = ''
RptLocations = ''
Columns = ColFltrArray<1>
Flags = ColFltrArray<2>
For each Column in Columns using @VM setting vPos
ColumnEnabled = Flags<0, vPos>
If ColumnEnabled then RptColumns<0, -1> = Column
Next Column
Locations = LocFltrArray<1>
Flags = LocFltrArray<3>
For each Location in Locations using @VM setting vPos
LocationEnabled = Flags<0, vPos>
If LocationEnabled then RptLocations<0, -1> = Location
Next Location
* If @User4 EQ 'DANIEL_ST' then
* debug
* Material_Track(RptColumns, RptLocations)
* TaskID = RTI_TASK_SUBMIT('', 'MATERIAL_TRACK', RptColumns, RptLocations)
* If TaskID NE 0 then
* Done = False$
* TaskResponse = ''
* Loop
* Status = RTI_Task_Status(TaskID, TaskResponse)
* If (Status EQ 'COMPLETED') OR (Status EQ 'ERROR') then Done = True$
* Until Done
* Repeat
* end else
* // Track if task id wasn't created at all.
* end
* StatusError = Get_Status(errCode)
* If (Index(errCode, 'SHELLEXECUTE', 1)) NE 0 then StatusError = 0
* end else
Report_Services('GetMaterialTrackReport', RptColumns, RptLocations)
* end
end event
Event PUB_SAVE_SETTINGS.CLICK()
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
end else
UserSettings = ''
end
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
RptColumns = ''
RptLocations = ''
Columns = ColFltrArray<1>
Flags = ColFltrArray<2>
For each Column in Columns using @VM setting vPos
ColumnEnabled = Flags<0, vPos>
If ColumnEnabled then RptColumns<0, -1> = Column
Next Column
UserSettings<REPORT_CONFIG.REPORT_COLUMNS$> = Flags
Locations = LocFltrArray<1>
Flags = LocFltrArray<3>
For each Location in Locations using @VM setting vPos
LocationEnabled = Flags<0, vPos>
If LocationEnabled then RptLocations<0, -1> = Location
Next Location
UserSettings<REPORT_CONFIG.LOCATION_FILTER$> = Flags
Database_Services('WriteDataRow', 'REPORT_CONFIG', RptConfigKey, UserSettings, True$, False$, True$)
Set_Property(CtrlEntID, 'ENABLED', False$)
end event
Event OLE_EDT_COL_FILTER.OnCheckChanged(Cell, OldValue, NewValue)
GoSub EnableSaveButton
GoSub EnableGenerateReportButton
end event
Event OLE_EDT_LOC_FILTER.OnCheckChanged(Cell, OldValue, NewValue)
GoSub EnableReportColumns
GoSub EnableSaveButton
GoSub EnableGenerateReportButton
end event
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Setup_OLE_Controls:
// Report Columns
RptCols = ''
RptCols<1, 1> = 'React No'
RptCols<1, 2> = 'React Type'
RptCols<1, 3> = 'WO No'
RptCols<1, 4> = 'SAP Prod No'
RptCols<1, 5> = 'Sub Part No'
RptCols<1, 6> = 'Epi Part No'
RptCols<1, 7> = 'WO Qty'
RptCols<1, 8> = 'RX Qty'
RptCols<1, 9> = 'UnRel Qty'
RptCols<1, 10> = 'Kit Location'
RptCols<1, 11> = 'Kit Qty'
RptCols<1, 12> = '+/-'
RptCols<1, 13> = 'Kit RO'
RptCols<1, 14> = 'PTI RO'
RptCols<1, 15> = 'Load'
RptCols<1, 16> = 'Comments'
RptColsEnabled = ''
If UserSettings NE '' then
RptColsEnabled = UserSettings<REPORT_CONFIG.REPORT_COLUMNS$>
end else
For each Col in RptCols using @VM setting vPos
RptColsEnabled<0, -1> = True$
Next Col
end
RptColsArray = RptCols:@FM:RptColsEnabled
// Location Filters
LocFilters = ''
LocFilters<1, 1> = 'SR*KTR]'
LocFilters<1, 2> = '1K*PTI'
LocFilters<1, 3> = 'CR*BE'
LocFilters<1, 4> = 'CR*BO'
LocFilters<1, 5> = 'CR*TUN'
LocFilters<1, 6> = 'CR*EPR'
LocFilters<1, 7> = 'CR*FE'
LocFilters<1, 8> = 'CR*FEH'
LocFilters<1, 9> = 'CR*FO'
LocFilters<1, 10> = 'CR*FOH'
LocDescriptions = ''
LocsEnabled = ''
If UserSettings NE '' then
LocsEnabled = UserSettings<REPORT_CONFIG.LOCATION_FILTER$>
For each Loc in LocFilters using @VM setting vPos
If vPos GT 1 then
LocDescriptions<0, -1> = Xlate('LOCATION', Loc, 'DESC', 'X')
end else
LocDescriptions<0, -1> = 'All Kit Racks'
end
Next Loc
end else
For each Loc in LocFilters using @VM setting vPos
LocsEnabled<0, -1> = True$
If vPos GT 1 then
LocDescriptions<0, -1> = Xlate('LOCATION', Loc, 'DESC', 'X')
end else
LocDescriptions<0, -1> = 'All Kit Racks'
end
Next Loc
end
LocFltrArray = LocFilters:@FM:LocDescriptions:@FM:LocsEnabled
ColFltrCtrl = @Window:'.OLE_EDT_COL_FILTER'
LocFltrCtrl = @Window:'.OLE_EDT_LOC_FILTER'
// Qualify OLE events that we want to intercept
Qualifier = ''
Qualifier<1> = 1
Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
Send_Message(ColFltrCtrl, 'QUALIFY_EVENT', 'OLE.OnCheckChanged', Qualifier)
Send_Message(LocFltrCtrl, 'QUALIFY_EVENT', 'OLE.OnCheckChanged', Qualifier)
NumColFltrCols = 2
NumColFltrRows = DCount(RptCols, @VM)
NumLocFltrCols = 3
NumLocFltrRows = DCount(LocFilters, @VM)
HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700
ColFltrDimArray = NumColFltrCols : @FM : NumColFltrRows
LocFltrDimArray = NumLocFltrCols : @FM : NumLocFltrRows
DataColArray = ''
DataColArray<4> = True$ ; // Autosize column
HeaderTitles = 'Column':@VM:'Enabled'
Set_Property(ColFltrCtrl, "OLE.TitleList", HeaderTitles)
Set_Property(ColFltrCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8)
Set_Property(ColFltrCtrl, "OLE.Dimension", ColFltrDimArray)
Set_Property(ColFltrCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray)
Set_Property(ColFltrCtrl, "OLE.HeaderColumn[1]", '':@FM:False$:@FM)
Set_Property(ColFltrCtrl, "OLE.HeaderAlignment[All; 1]", "Top":@FM:"Center":@FM:"Center")
Set_Property(ColFltrCtrl, "OLE.HeaderColors[All; 1]", @FM:"{200, 200, 200}")
Set_Property(ColFltrCtrl, "OLE.CellType[2; All]", "Check Box")
Set_Property(ColFltrCtrl, "OLE.CellAlignment[2; All]", "Top":@FM:"Center":@FM:"Center")
Set_Property(ColFltrCtrl, "OLE.DataColumn[1]", DataColArray)
Set_Property(ColFltrCtrl, "OLE.ARRAY", RptColsArray)
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 1-3]", False)
CellColorArray = 'None':@FM:"{240, 240, 240}"
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 1-3]", CellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 1-3]", 'FUL')
HeaderTitles = 'Location':@VM:'Description':@VM:'Enabled'
Set_Property(LocFltrCtrl, "OLE.TitleList", HeaderTitles)
Set_Property(LocFltrCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8)
Set_Property(LocFltrCtrl, "OLE.Dimension", LocFltrDimArray)
Set_Property(LocFltrCtrl, "OLE.LIST", '')
Set_Property(LocFltrCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray)
Set_Property(LocFltrCtrl, "OLE.HeaderColumn[1]", '':@FM:False$:@FM)
Set_Property(LocFltrCtrl, "OLE.HeaderAlignment[All; 1]", "Top":@FM:"Center":@FM:"Center")
Set_Property(LocFltrCtrl, "OLE.HeaderColors[All; 1]", @FM:"{200, 200, 200}")
Set_Property(LocFltrCtrl, "OLE.CellType[3; All]", "Check Box")
Set_Property(LocFltrCtrl, "OLE.DataColumn[2]", DataColArray)
Set_Property(LocFltrCtrl, "OLE.CellAlignment[3; All]", "Top":@FM:"Center":@FM:"Center")
Set_Property(LocFltrCtrl, "OLE.ARRAY", LocFltrArray)
return
EnableSaveButton:
// Enable save settings button if necessary
RptConfigKey = 'MATERIAL_TRACK*':@User4
If RowExists('REPORT_CONFIG', RptConfigKey) then
UserSettings = Database_Services('ReadDataRow', 'REPORT_CONFIG', RptConfigKey)
end else
UserSettings = ''
end
// Gather settings from form
ColFltrArray = Get_Property(@Window:'.OLE_EDT_COL_FILTER', 'OLE.ARRAY')
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
NewColFlags = ColFltrArray<2>
CurrColFlags = UserSettings<REPORT_CONFIG.REPORT_COLUMNS$>
NewLocFlags = LocFltrArray<3>
CurrLocFlags = UserSettings<REPORT_CONFIG.LOCATION_FILTER$>
ChangeDetected = ( (NewColFlags NE CurrColFlags) or (NewLocFlags NE CurrLocFlags) )
Set_Property(@Window:'.PUB_SAVE_SETTINGS', 'ENABLED', ChangeDetected)
return
EnableGenerateReportButton:
// Gather settings from form
LocFltrArray = Get_Property(@Window:'.OLE_EDT_LOC_FILTER', 'OLE.ARRAY')
LocFlags = LocFltrArray<3>
ButtonEnabled = (Sum(LocFlags) GT 0)
Set_Property(@Window:'.PUB_GEN_REPORT', 'ENABLED', ButtonEnabled)
return
EnableReportColumns:
ColFltrCtrl = @Window:'.OLE_EDT_COL_FILTER'
LocFltrCtrl = @Window:'.OLE_EDT_LOC_FILTER'
// Gather settings from form
LocFltrArray = Get_Property(LocFltrCtrl, 'OLE.ARRAY')
LocFlags = LocFltrArray<3>
KitRackFlag = LocFlags<0, 1>
PTIRackFlag = LocFlags<0, 2>
LoadedFlags = Field(LocFlags, @VM , 3, 8)
LoadedColEnabled = (Sum(LoadedFlags) GT 0)
EnabledCellColorArray = 'None':@FM:'None'
DisabledCellColorArray = 'None':@FM:"{240, 240, 240}"
If KitRackFlag EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 10-12]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 10-12]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 10-12]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 10-12]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 10-12]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 10-12]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 10-12]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 10-12]", False$)
end
If PTIRackFlag EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 13]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 13]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 13]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 13]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 13]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 13]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 13]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 13]", False$)
end
If LoadedColEnabled EQ True$ then
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 14]", True$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 14]", EnabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 14]", 'SEL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 14]", True$)
end else
Set_Property(ColFltrCtrl, "OLE.CellCheck[2; 14]", False$)
Set_Property(ColFltrCtrl, "OLE.CellColors[All; 14]", DisabledCellColorArray)
Set_Property(ColFltrCtrl, "OLE.CellProtection[All; 14]", 'FUL')
Set_Property(ColFltrCtrl, "OLE.CellCheckEnabled[2; 14]", False$)
end
return

View File

@ -189,7 +189,13 @@ UpdateHALItem:
Begin Case Begin Case
Case ReportID = 'materialtrack' Case ReportID = 'materialtrack'
Error_Services('Add', 'Unsupported report') Body = HTTP_Services('GetHTTPPostString')
If (Body NE '') then
// The POST string will have been encoded so use percent (URL) decoding.
RepJSON = HTTP_Services('DecodePercentString', Body)
Report_Services('UpdateMaterialTrackData', RepJSON)
end
Case ReportID = 'dailyperformance' Case ReportID = 'dailyperformance'
ReportDate = Http_Services('GetQueryField', 'reportDate') ReportDate = Http_Services('GetQueryField', 'reportDate')
// The resource will have been put into the POST string. // The resource will have been put into the POST string.
@ -225,3 +231,4 @@ API reports.GET
HTTP_Resource_Services('LoremIpsum') HTTP_Resource_Services('LoremIpsum')
end api end api

File diff suppressed because it is too large Load Diff

View File

@ -1,552 +0,0 @@
Compile function Report_Services_Dev(@Service, @Params)
/***********************************************************************************************************************
Name : Report_Services
Description : Handler program for all Report 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/28/21 djs Copied original source code from Report_Services. Modified GetMaterialTrackReport
to use the SCHED_DET_NG table (i.e. Scheduler 2.0) instead of the SCHED_DET table.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert LOGICAL
$Insert OIPRINT_EQUATES
$Insert SCHED_DET_NG_EQUATES
$Insert WO_LOG_EQUATES
$Insert APPCOLORS
$Insert MSG_EQUATES
$Insert SCHEDULE_EQU
$Insert LOCATION_EQUATES
$Insert RLIST_EQUATES
Declare subroutine Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch, Btree.Extract, Error_Services, V119
Declare subroutine Push.Select, Pop.Select
Declare function Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
Declare function Error_Services, Location_Services, SRP_Array, Signature_Services
Declare function Epi_Part_Services, SRP_Math, Datetime, MemberOf
Equ TAB$ TO \09\
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service GetMaterialTrackReport(RptColumns, LocationFilter, NoMatFlag)
// All Possible Report Columns
AllRptColumns = ''
AllRptColumns<1, 1> = 'React No'
AllRptColumns<1, 2> = 'React Type'
AllRptColumns<1, 3> = 'WO No'
AllRptColumns<1, 4> = 'SAP Prod No'
AllRptColumns<1, 5> = 'Sub Part No'
AllRptColumns<1, 6> = 'Epi Part No'
AllRptColumns<1, 7> = 'WO Qty'
AllRptColumns<1, 8> = 'RX Qty'
AllRptColumns<1, 9> = 'UnRel Qty'
AllRptColumns<1, 10> = 'Kit Location'
AllRptColumns<1, 11> = 'Kit Qty'
AllRptColumns<1, 12> = '+/-'
AllRptColumns<1, 13> = 'Kit RO'
AllRptColumns<1, 14> = 'PTI RO'
AllRptColumns<1, 15> = 'Load'
AllRptColumns<1, 16> = 'Comments'
If Index(RptColumns, 'Comments', 1) then
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1300'
AllColFmt<1, 14> = '+^1300'
AllColFmt<1, 15> = '+^700'
AllColFmt<1, 16> = '+^1300'
end else
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1800'
AllColFmt<1, 14> = '+^1800'
AllColFmt<1, 15> = '+^1100'
AllColFmt<1, 16> = ''
end
ErrorTitle = 'Error in service ':Service
ErrCode = ''
ErrorMsg = ''
OPEN 'SCHED_DET_NG' TO SchedDetTable then
OPEN 'DICT.SCHED_DET_NG' TO @DICT then
Today = Datetime()
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
READ SchedDetRec FROM SchedDetTable,@ID THEN
ReactNo = SchedDetRec<SCHED_DET_NG.REACT_NO$>
WONo = SchedDetRec<SCHED_DET_NG.WO_NO$>
If ReactNo NE '' then
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
END
If WONo NE '' then
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
END
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page 'P'"
MinDemand = 0
Set_Status(0)
* Start of printing process
FileName = 'Print Material Demand'
Title = 'Printing Material Demand'
TopMargin = 1.0
BottomMargin = 0.75
LeftMargin = 0.25
RightMargin = 0.25
Margins = LeftMargin:@FM:TopMargin:@FM:RightMargin:@FM:BottomMargin
PageSetup = '1' ;* LandScape
PrintSetup = '2' ;* Preview Normal
PrintSetup<1,2> = '0' ;* All buttons
PrintSetup<1,5> = '1' ;* Page Range
PrintSetup<1,6> = 7 ;* full mouse and keyboard support
PrintPath = ''
stat = Set_Printer('INIT',FileName,Title,Margins,PageSetup,PrintSetup,PrintPath)
IF stat < 0 THEN
ErrorMsg = 'Stat = ' : Stat : ', PrintPath = ' : PrintPath
GOTO OIPrintErr
end
DateRange = 'Effective ':OCONV(Date(),'D4')
Header<-1> = "'T'"
Header<-1> = '' ;* Blank line following heading
font = 'Arial'
font<2> = '10'
font<4> = '0' ;* Bold
stat = Set_Printer('FONTHEADFOOT',font) ; IF stat < 0 THEN GOTO OIPrintErr
stat = Set_Printer('HEADER',Header) ; IF stat < 0 THEN GOTO OIPrintErr
Footer = " 'D' 'T'":@VM:@VM:"Page: 'P'"
stat = Set_Printer('FOOTER',Footer) ; IF stat < 0 THEN GOTO OIPrintErr
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Make Column Heading
ColHead = ''
ColFmt = ''
For each Column in RptColumns using @VM setting rcPos
Locate Column in AllRptColumns using @VM setting dataPos then
ColHead<0, -1> = Column
ColFmt<0, -1> = AllColFmt<0, dataPos>
end
Next Column
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
GoTo ReadRecord
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
End Service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadRecord:
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.REACT_TYPE = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
S.ProdOrdNo = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
KitData = Location_Services('GetLocationCassInfo', S.WONo, 'SR*KTR]')
SWAP CRLF$ WITH @VM IN KitData
end else
KitData = ''
end
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
S.KitQty = OCONV(SUM(KitData<2>) * 25,'MD0,Z')
I.KitQty = S.KitQty
S.KitCassCnt = COUNT(KitData<3>,',') + (KitData<3> NE '')
I.KitCassCnt = S.KitCassCnt
KitCassList = KitData<3>
Locate '1K*PTI' in LocationFilter using @VM setting vPos then
PTIData = Location_Services('GetLocationCassInfo', S.WONo, '1K*PTI')
SWAP CRLF$ WITH @VM IN PTIData
end else
PTIData = ''
end
PTICassList = PTIData<3>
CRLocs = ''
CRLocs<0, -1> = 'CR*BE'
CRLocs<0, -1> = 'CR*BO'
CRLocs<0, -1> = 'CR*TUN'
CRLocs<0, -1> = 'CR*EPR'
CRLocs<0, -1> = 'CR*FE'
CRLocs<0, -1> = 'CR*FEH'
CRLocs<0, -1> = 'CR*FO'
CRLocs<0, -1> = 'CR*FOH'
LoadedData = ''
LocQueryList = ''
For each Loc in CRLocs using @VM setting crPos
Locate Loc in LocationFilter using @VM setting vPos then
LocQueryList<0, -1> = Loc
end
Next Loc
LoadedCassList = ''
ReactType = Xlate('WO_LOG', S.WONo, 'REACT_TYPE', 'X')
If ReactType NE 'EPP' then
If LocQueryList NE '' then
LoadedData = Location_Services('GetLocationCassInfo', S.WONo, LocQueryList)
Swap CRLF$ with @VM in LoadedData
CassList = LoadedData<3>
Swap @VM with ',' in CassList
For each CassNo in CassList using ','
If ( (S.WONo NE '') and (CassNo NE '') ) then
WOMatKey = S.WONo:'*':CassNo
UnloadSigComp = Signature_Services('CheckSignature', WOMatKey, 'UNLOAD')
OnHold = Xlate('WO_MAT', WOMatKey, 'HOLD', 'X')
CurrStatus = Xlate('WO_MAT', WOMatKey, 'CURR_STATUS', 'X')
If Not(UnloadSigComp or OnHold or (CurrStatus EQ 'REJ') ) then
LoadedCassList<0, -1> = CassNo
end
end
Next CassNo
end
end
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
BREAKS:
* Print Break Total(s) And Accumulate Total(s)
IF ReactNo.Break THEN stat = Set_Printer('TEXT')
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
DETAIL:
* Do Conversion If Any
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
/* ascending sort */
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
KitCassList = SRP_Array('SortSimpleList', KitCassList, 'AscendingNumbers', ',')
PTICassList = SRP_Array('SortSimpleList', PTICassList, 'AscendingNumbers', ',')
LoadedCassList = SRP_Array('SortSimpleList', LoadedCassList, 'AscendingNumbers', ',')
Convert ',' to @VM in KitCassList
Convert ',' to @VM in PTICassList
Convert ',' to @VM in LoadedCassList
NumKitCass = DCount(KitCassList, @VM)
If NumKitCass GT 4 then
For CassIndex = 4 to NumKitCass Step 4
CassNo = KitCassList<0, CassIndex>
CassNo := CRLF$
KitCassList<0, CassIndex> = CassNo
Next CassIndex
end
NumPTICass = DCount(PTICassList, @VM)
If NumPTICass GT 4 then
For CassIndex = 4 to NumPTICass Step 4
CassNo = PTICassList<0, CassIndex>
CassNo := CRLF$
PTICassList<0, CassIndex> = CassNo
Next CassIndex
end
NumLoadedCass = DCount(LoadedCassList, @VM)
If NumLoadedCass GT 2 then
For CassIndex = 2 to NumLoadedCass Step 2
CassNo = LoadedCassList<0, CassIndex>
CassNo := CRLF$
LoadedCassList<0, CassIndex> = CassNo
Next CassIndex
end
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
CassNeeded = ''
EpiPartNo = Xlate('WO_LOG', S.WONo, 'EPI_PART_NO', 'X')
If EpiPartNo NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KittCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted
end
end
Swap '.1' with '' in S.ProdOrdNo
AllReportData = ''
AllReportData<1> = S.ReactNo
AllReportData<2> = S.React_Type
AllReportData<3> = S.WONo
AllReportData<4> = S.ProdOrdNo
AllReportData<5> = S.SubPartNo
AllReportData<6> = S.EpiPartNo
AllReportData<7> = S.WO_Qty
AllReportData<8> = S.WO_RX_Qty
AllReportData<9> = S.WO_UnRel_Qty
AllReportData<10> = S.KitLocation
AllReportData<11> = S.KitQty
AllReportData<12> = CassNeeded
AllReportData<13> = KitCassList
AllReportData<14> = PTICassList
AllReportData<15> = LoadedCassList
AllReportData<16> = ''
If ( (KitCassList NE '') or (PTICassList NE '') or (LoadedCassList NE '') or (NoMatFlag EQ True$) ) then
RowNumber += 1
For each RptColumn in RptColumns using @VM setting rcPos
Locate RptColumn in AllRptColumns using @VM setting dataPos then
COLDATA<RowNumber,rcPos> = AllReportData<dataPos>
end
Next RptColumn
If COLDATA NE '' then GoSub PrintTable
END
GOTO ReadRecord
Bail:
stat = Set_Printer('TERM',1)
RETURN
OIPrintErr:
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
ErrMsg(ErrorTitle:@SVM:'Set_Printer returned errorcode ':stat)
stat = Set_Printer('TERM',1)
RETURN
PrintTable:
PageHeight = Get_Printer('PAGESIZE')<2>
PrintableHeight = PageHeight - TopMargin - BottomMargin
PrinterHeight = Get_Printer('POS')<2>
stat = Set_Printer('CALCTABLE',ColFmt:@FM:ColData)
TableSize = Get_Printer('CALCTABLE')
TableHeight = TableSize<2>
fontSpacing = 120
IF ( TableHeight + PrinterHeight >= PrintableHeight ) OR FirstLine THEN
IF NOT(FirstLine) THEN
stat = Set_Printer('PAGEBREAK')
END
FirstLine = 0
font<2> = 10
font<4> = 1 ;* Bold
stat = Set_Printer('FONT',font,'100')
stat = Set_Printer('ADDTABLE',colFmt,colHead,'',LTGREY$,'',0,TB_ALL)
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',0,7)
END ELSE
font<2> = 10
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
END
RETURN

View File

@ -1,589 +0,0 @@
Compile function Report_Services_Dev2(@Service, @Params)
/***********************************************************************************************************************
Name : Report_Services
Description : Handler program for all Report 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/28/21 djs Copied original source code from Report_Services. Modified GetMaterialTrackReport
to use the SCHED_DET_NG table (i.e. Scheduler 2.0) instead of the SCHED_DET table.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert LOGICAL
$Insert OIPRINT_EQUATES
$Insert SCHED_DET_NG_EQUATES
$Insert WO_LOG_EQUATES
$Insert APPCOLORS
$Insert MSG_EQUATES
$Insert SCHEDULE_EQU
$Insert LOCATION_EQUATES
$Insert RLIST_EQUATES
Declare subroutine Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch, Btree.Extract, Error_Services, V119
Declare subroutine Push.Select, Pop.Select
Declare function Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
Declare function Error_Services, Location_Services, SRP_Array, Signature_Services
Declare function Epi_Part_Services, SRP_Math, Datetime
Equ TAB$ TO \09\
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service GetMaterialTrackReport(RptColumns, LocationFilter, NoMatFlag)
// All Possible Report Columns
AllRptColumns = ''
AllRptColumns<1, 1> = 'React No'
AllRptColumns<1, 2> = 'React Type'
AllRptColumns<1, 3> = 'WO No'
AllRptColumns<1, 4> = 'SAP Prod No'
AllRptColumns<1, 5> = 'Sub Part No'
AllRptColumns<1, 6> = 'Epi Part No'
AllRptColumns<1, 7> = 'WO Qty'
AllRptColumns<1, 8> = 'RX Qty'
AllRptColumns<1, 9> = 'UnRel Qty'
AllRptColumns<1, 10> = 'Kit Location'
AllRptColumns<1, 11> = 'Kit Qty'
AllRptColumns<1, 12> = '+/-'
AllRptColumns<1, 13> = 'Kit RO'
AllRptColumns<1, 14> = 'PTI RO'
AllRptColumns<1, 15> = 'Load'
AllRptColumns<1, 16> = 'Comments'
If Index(RptColumns, 'Comments', 1) then
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1300'
AllColFmt<1, 14> = '+^1300'
AllColFmt<1, 15> = '+^700'
AllColFmt<1, 16> = '+^1300'
end else
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1800'
AllColFmt<1, 14> = '+^1800'
AllColFmt<1, 15> = '+^1100'
AllColFmt<1, 16> = ''
end
ErrorTitle = 'Error in service ':Service
ErrCode = ''
ErrorMsg = ''
OPEN 'SCHED_DET_NG' TO SchedDetTable then
OPEN 'DICT.SCHED_DET_NG' TO @DICT then
Today = Datetime() - 30
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
READ SchedDetRec FROM SchedDetTable,@ID THEN
ReactNo = SchedDetRec<SCHED_DET_NG.REACT_NO$>
WONo = SchedDetRec<SCHED_DET_NG.WO_NO$>
If ReactNo NE '' then
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
END
If WONo NE '' then
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
END
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page 'P'"
MinDemand = 0
Set_Status(0)
* Start of printing process
FileName = 'Print Material Demand'
Title = 'Printing Material Demand'
TopMargin = 1.0
BottomMargin = 0.75
LeftMargin = 0.25
RightMargin = 0.25
Margins = LeftMargin:@FM:TopMargin:@FM:RightMargin:@FM:BottomMargin
PageSetup = '1' ;* LandScape
PrintSetup = '2' ;* Preview Normal
PrintSetup<1,2> = '0' ;* All buttons
PrintSetup<1,5> = '1' ;* Page Range
PrintSetup<1,6> = 7 ;* full mouse and keyboard support
PrintPath = ''
stat = Set_Printer('INIT',FileName,Title,Margins,PageSetup,PrintSetup,PrintPath)
IF stat < 0 THEN
ErrorMsg = 'Stat = ' : Stat : ', PrintPath = ' : PrintPath
GOTO OIPrintErr
end
DateRange = 'Effective ':OCONV(Date(),'D4')
Header<-1> = "'T'"
Header<-1> = '' ;* Blank line following heading
font = 'Arial'
font<2> = '10'
font<4> = '0' ;* Bold
stat = Set_Printer('FONTHEADFOOT',font) ; IF stat < 0 THEN GOTO OIPrintErr
stat = Set_Printer('HEADER',Header) ; IF stat < 0 THEN GOTO OIPrintErr
Footer = " 'D' 'T'":@VM:@VM:"Page: 'P'"
stat = Set_Printer('FOOTER',Footer) ; IF stat < 0 THEN GOTO OIPrintErr
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Make Column Heading
ColHead = ''
ColFmt = ''
For each Column in RptColumns using @VM setting rcPos
Locate Column in AllRptColumns using @VM setting dataPos then
ColHead<0, -1> = Column
ColFmt<0, -1> = AllColFmt<0, dataPos>
end
Next Column
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
GoTo ReadRecord
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
End Service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadRecord:
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.REACT_TYPE = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
S.ProdOrdNo = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
KitData = Location_Services('GetLocationCassInfo', S.WONo, 'SR*KTR]')
SWAP CRLF$ WITH @VM IN KitData
end else
KitData = ''
end
KitCassList = KitData<3>
NewKitData = ''
Swap ',' with @VM in KitData
// Filter out cassettes on hold
NewKitData<1> = KitData<1>
Swap @VM with ',' in KitCassList
For each Cass in KitCassList using ',' setting cPos
Key = S.WONo:'*':Cass
OnHold = Xlate('WO_MAT', Key, 'HOLD', 'X')
If OnHold NE True$ then
NewKitData<3, -1> = KitData<3, cPos>
end
Next Cass
NewKitData<2> = DCount(NewKitData<3>, @VM) ; // Update cassette count
KitData = NewKitData
Swap @VM with ',' in KitData
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
S.KitQty = OCONV(SUM(KitData<2>) * 25,'MD0,Z')
I.KitQty = S.KitQty
S.KitCassCnt = COUNT(KitData<3>,',') + (KitData<3> NE '')
I.KitCassCnt = S.KitCassCnt
KitCassList = KitData<3>
Locate '1K*PTI' in LocationFilter using @VM setting vPos then
PTIData = Location_Services('GetLocationCassInfo', S.WONo, '1K*PTI')
SWAP CRLF$ WITH @VM IN PTIData
end else
PTIData = ''
end
PTICassList = PTIData<3>
NewPTIData = ''
Swap ',' with @VM in PTIData
// Filter out cassettes on hold
NewPTIData<1> = PTIData<1>
Swap @VM with ',' in PTICassList
For each Cass in PTICassList using ',' setting cPos
Key = S.WONo:'*':Cass
OnHold = Xlate('WO_MAT', Key, 'HOLD', 'X')
If OnHold NE True$ then
NewPTIData<3, -1> = PTIData<3, cPos>
end
Next Cass
NewPTIData<2> = DCount(NewPTIData<3>, @VM) ; // Update cassette count
PTIData = NewPTIData
Swap @VM with ',' in PTIData
PTICassList = PTIData<3>
CRLocs = ''
CRLocs<0, -1> = 'CR*BE'
CRLocs<0, -1> = 'CR*BO'
CRLocs<0, -1> = 'CR*TUN'
CRLocs<0, -1> = 'CR*EPR'
CRLocs<0, -1> = 'CR*FE'
CRLocs<0, -1> = 'CR*FEH'
CRLocs<0, -1> = 'CR*FO'
CRLocs<0, -1> = 'CR*FOH'
LoadedData = ''
LocQueryList = ''
For each Loc in CRLocs using @VM setting crPos
Locate Loc in LocationFilter using @VM setting vPos then
LocQueryList<0, -1> = Loc
end
Next Loc
LoadedCassList = ''
ReactType = Xlate('WO_LOG', S.WONo, 'REACT_TYPE', 'X')
If ReactType NE 'EPP' then
If LocQueryList NE '' then
LoadedData = Location_Services('GetLocationCassInfo', S.WONo, LocQueryList)
Swap CRLF$ with @VM in LoadedData
CassList = LoadedData<3>
Swap @VM with ',' in CassList
For each CassNo in CassList using ','
If ( (S.WONo NE '') and (CassNo NE '') ) then
WOMatKey = S.WONo:'*':CassNo
UnloadSigComp = Signature_Services('CheckSignature', WOMatKey, 'UNLOAD')
OnHold = Xlate('WO_MAT', WOMatKey, 'HOLD', 'X')
If Not(UnloadSigComp or OnHold) then
LoadedCassList<0, -1> = CassNo
end
end
Next CassNo
end
end
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
BREAKS:
* Print Break Total(s) And Accumulate Total(s)
IF ReactNo.Break THEN stat = Set_Printer('TEXT')
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
DETAIL:
* Do Conversion If Any
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
/* ascending sort */
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
KitCassList = SRP_Array('SortSimpleList', KitCassList, 'AscendingNumbers', ',')
PTICassList = SRP_Array('SortSimpleList', PTICassList, 'AscendingNumbers', ',')
LoadedCassList = SRP_Array('SortSimpleList', LoadedCassList, 'AscendingNumbers', ',')
Convert ',' to @VM in KitCassList
Convert ',' to @VM in PTICassList
Convert ',' to @VM in LoadedCassList
NumKitCass = DCount(KitCassList, @VM)
If NumKitCass GT 4 then
For CassIndex = 4 to NumKitCass Step 4
CassNo = KitCassList<0, CassIndex>
CassNo := CRLF$
KitCassList<0, CassIndex> = CassNo
Next CassIndex
end
NumPTICass = DCount(PTICassList, @VM)
If NumPTICass GT 4 then
For CassIndex = 4 to NumPTICass Step 4
CassNo = PTICassList<0, CassIndex>
CassNo := CRLF$
PTICassList<0, CassIndex> = CassNo
Next CassIndex
end
NumLoadedCass = DCount(LoadedCassList, @VM)
If NumLoadedCass GT 2 then
For CassIndex = 2 to NumLoadedCass Step 2
CassNo = LoadedCassList<0, CassIndex>
CassNo := CRLF$
LoadedCassList<0, CassIndex> = CassNo
Next CassIndex
end
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
CassNeeded = ''
EpiPartNo = Xlate('WO_LOG', S.WONo, 'EPI_PART_NO', 'X')
If EpiPartNo NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KittCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted
end
end
Swap '.1' with '' in S.ProdOrdNo
AllReportData = ''
AllReportData<1> = S.ReactNo
AllReportData<2> = S.React_Type
AllReportData<3> = S.WONo
AllReportData<4> = S.ProdOrdNo
AllReportData<5> = S.SubPartNo
AllReportData<6> = S.EpiPartNo
AllReportData<7> = S.WO_Qty
AllReportData<8> = S.WO_RX_Qty
AllReportData<9> = S.WO_UnRel_Qty
AllReportData<10> = S.KitLocation
AllReportData<11> = S.KitQty
AllReportData<12> = CassNeeded
AllReportData<13> = KitCassList
AllReportData<14> = PTICassList
AllReportData<15> = LoadedCassList
AllReportData<16> = ''
If ( (KitCassList NE '') or (PTICassList NE '') or (LoadedCassList NE '') or (NoMatFlag EQ True$) ) then
RowNumber += 1
For each RptColumn in RptColumns using @VM setting rcPos
Locate RptColumn in AllRptColumns using @VM setting dataPos then
COLDATA<RowNumber,rcPos> = AllReportData<dataPos>
end
Next RptColumn
If COLDATA NE '' then GoSub PrintTable
END
GOTO ReadRecord
Bail:
stat = Set_Printer('TERM',1)
RETURN
OIPrintErr:
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
ErrMsg(ErrorTitle:@SVM:'Set_Printer returned errorcode ':stat)
stat = Set_Printer('TERM',1)
RETURN
PrintTable:
PageHeight = Get_Printer('PAGESIZE')<2>
PrintableHeight = PageHeight - TopMargin - BottomMargin
PrinterHeight = Get_Printer('POS')<2>
stat = Set_Printer('CALCTABLE',ColFmt:@FM:ColData)
TableSize = Get_Printer('CALCTABLE')
TableHeight = TableSize<2>
fontSpacing = 120
IF ( TableHeight + PrinterHeight >= PrintableHeight ) OR FirstLine THEN
IF NOT(FirstLine) THEN
stat = Set_Printer('PAGEBREAK')
END
FirstLine = 0
font<2> = 10
font<4> = 1 ;* Bold
stat = Set_Printer('FONT',font,'100')
stat = Set_Printer('ADDTABLE',colFmt,colHead,'',LTGREY$,'',0,TB_ALL)
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',0,7)
END ELSE
font<2> = 10
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
END
RETURN

View File

@ -1,468 +0,0 @@
Compile function Report_Services_Dev3(@Service, @Params)
/***********************************************************************************************************************
Name : Report_Services
Description : Handler program for all Report 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/28/21 djs Copied original source code from Report_Services. Modified GetMaterialTrackReport
to use the SCHED_DET_NG table (i.e. Scheduler 2.0) instead of the SCHED_DET table.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert LOGICAL
$Insert OIPRINT_EQUATES
$Insert SCHED_DET_NG_EQUATES
$Insert WO_LOG_EQUATES
$Insert APPCOLORS
$Insert MSG_EQUATES
$Insert SCHEDULE_EQU
$Insert LOCATION_EQUATES
$Insert RLIST_EQUATES
Declare subroutine Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch, Btree.Extract, Error_Services, V119
Declare subroutine Push.Select, Pop.Select, SRP_Stopwatch, Database_Services
Declare function Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
Declare function Error_Services, Location_Services, SRP_Array, Signature_Services
Declare function Epi_Part_Services, SRP_Math, Datetime, Database_Services
Equ TAB$ TO \09\
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service CalculateMaterialTrackData(RptColumns, LocationFilter, NoMatFlag)
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
NoMatFlag = True$
LocationFilter = ''
LocationFilter<1, 1> = 'SR*KTR]'
LocationFilter<1, 2> = '1K*PTI'
LocationFilter<1, 3> = 'CR*BE'
LocationFilter<1, 4> = 'CR*BO'
LocationFilter<1, 5> = 'CR*TUN'
LocationFilter<1, 6> = 'CR*EPR'
LocationFilter<1, 7> = 'CR*FE'
LocationFilter<1, 8> = 'CR*FEH'
LocationFilter<1, 9> = 'CR*FO'
LocationFilter<1, 10> = 'CR*FOH'
// All Possible Report Columns
AllRptColumns = ''
AllRptColumns<1, 1> = 'React No'
AllRptColumns<1, 2> = 'React Type'
AllRptColumns<1, 3> = 'WO No'
AllRptColumns<1, 4> = 'SAP Prod No'
AllRptColumns<1, 5> = 'Sub Part No'
AllRptColumns<1, 6> = 'Epi Part No'
AllRptColumns<1, 7> = 'WO Qty'
AllRptColumns<1, 8> = 'RX Qty'
AllRptColumns<1, 9> = 'UnRel Qty'
AllRptColumns<1, 10> = 'Kit Location'
AllRptColumns<1, 11> = 'Kit Qty'
AllRptColumns<1, 12> = '+/-'
AllRptColumns<1, 13> = 'Kit RO'
AllRptColumns<1, 14> = 'PTI RO'
AllRptColumns<1, 15> = 'Load'
AllRptColumns<1, 16> = 'Comments'
RptColumns = AllRptColumns
ErrorTitle = 'Error in service ':Service
ErrCode = ''
ErrorMsg = ''
OPEN 'SCHED_DET_NG' TO SchedDetTable then
OPEN 'DICT.SCHED_DET_NG' TO @DICT then
Today = Datetime()
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE "':OCONV(Today, 'DT'):'" BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
Unlock hSysLists, ServiceKeyID else Null
RETURN
END
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
READ SchedDetRec FROM SchedDetTable,@ID THEN
ReactNo = SchedDetRec<SCHED_DET_NG.REACT_NO$>
WONo = SchedDetRec<SCHED_DET_NG.WO_NO$>
If ReactNo NE '' then
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
END
If WONo NE '' then
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
END
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
DateRange = 'Effective ':OCONV(Date(),'D4')
RowIndex = 0
AllReportData = ''
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
GoTo ReadRecord
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
Unlock hSysLists, ServiceKeyID else Null
end
End Service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadRecord:
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.REACT_TYPE = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
S.ProdOrdNo = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
KitData = Location_Services('GetLocationCassInfo', S.WONo, 'SR*KTR]')
SWAP CRLF$ WITH @VM IN KitData
end else
KitData = ''
end
KitCassList = KitData<3>
NewKitData = ''
Swap ',' with @VM in KitData
// Filter out cassettes on hold
NewKitData<1> = KitData<1>
Swap @VM with ',' in KitCassList
For each Cass in KitCassList using ',' setting cPos
Key = S.WONo:'*':Cass
OnHold = Xlate('WO_MAT', Key, 'HOLD', 'X')
If OnHold NE True$ then
NewKitData<3, -1> = KitData<3, cPos>
end
Next Cass
LocInfo = ''
LocInfo<1> = NewKitData<1>
LocInfo<2> = DCount(NewKitData<3>, @VM)
LocInfo<3> = NewKitData<3>
Database_Services('WriteDataRow', 'WO_LOC', S.WONo:'*':'SR*KTR]', LocInfo)
NewKitData<2> = DCount(NewKitData<3>, @VM) ; // Update cassette count
KitData = NewKitData
Swap @VM with ',' in KitData
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
* S.KitQty = OCONV(SUM(KitData<2>) * 25,'MD0,Z')
S.KitCassCnt = COUNT(KitData<3>,',') + (KitData<3> NE '')
I.KitCassCnt = S.KitCassCnt
KitCassList = KitData<3>
S.KitQty = 0
For each CassNo in KitCassList using ','
S.KitQty += Xlate('WO_MAT', S.WONo:'*':CassNo, 'WAFER_QTY', 'X')
Next CassNo
I.KitQty = S.KitQty
Locate '1K*PTI' in LocationFilter using @VM setting vPos then
PTIData = Location_Services('GetLocationCassInfo', S.WONo, '1K*PTI')
SWAP CRLF$ WITH @VM IN PTIData
end else
PTIData = ''
end
PTICassList = PTIData<3>
NewPTIData = ''
Swap ',' with @VM in PTIData
// Filter out cassettes on hold
NewPTIData<1> = PTIData<1>
Swap @VM with ',' in PTICassList
For each Cass in PTICassList using ',' setting cPos
Key = S.WONo:'*':Cass
OnHold = Xlate('WO_MAT', Key, 'HOLD', 'X')
If OnHold NE True$ then
NewPTIData<3, -1> = PTIData<3, cPos>
end
Next Cass
LocInfo = ''
LocInfo<1> = '1K*PTI'
LocInfo<2> = DCount(NewPTIData<3>, @VM)
LocInfo<3> = NewPTIData<3>
Database_Services('WriteDataRow', 'WO_LOC', S.WONo:'*':'1K*PTI', LocInfo)
NewPTIData<2> = DCount(NewPTIData<3>, @VM) ; // Update cassette count
PTIData = NewPTIData
Swap @VM with ',' in PTIData
PTICassList = PTIData<3>
CRLocs = ''
CRLocs<0, -1> = 'CR*BE'
CRLocs<0, -1> = 'CR*BO'
CRLocs<0, -1> = 'CR*TUN'
CRLocs<0, -1> = 'CR*EPR'
CRLocs<0, -1> = 'CR*FE'
CRLocs<0, -1> = 'CR*FEH'
CRLocs<0, -1> = 'CR*FO'
CRLocs<0, -1> = 'CR*FOH'
LoadedData = ''
LocQueryList = ''
For each Loc in CRLocs using @VM setting crPos
Locate Loc in LocationFilter using @VM setting vPos then
LocQueryList<0, -1> = Loc
end
Next Loc
LoadedCassList = ''
ReactType = Xlate('WO_LOG', S.WONo, 'REACT_TYPE', 'X')
If ReactType NE 'EPP' then
If LocQueryList NE '' then
For each CRLoc in LocQueryList using @VM
CRLocCassList = ''
LoadedData = Location_Services('GetLocationCassInfo', S.WONo, CRLoc)
Swap CRLF$ with @VM in LoadedData
CassList = LoadedData<3>
Swap @VM with ',' in CassList
For each CassNo in CassList using ','
If ( (S.WONo NE '') and (CassNo NE '') ) then
WOMatKey = S.WONo:'*':CassNo
UnloadSigComp = Signature_Services('CheckSignature', WOMatKey, 'UNLOAD')
OnHold = Xlate('WO_MAT', WOMatKey, 'HOLD', 'X')
CurrStatus = Xlate('WO_MAT', WOMatKey, 'CURR_STATUS', 'X')
If Not(UnloadSigComp or OnHold or (CurrStatus EQ 'REJ') ) then
CRLocCassList<0, -1> = CassNo
Locate CassNo in LoadedCassList using @VM setting vPos else
LoadedCassList<0, -1> = CassNo
end
end
end
Next CassNo
LocInfo = ''
LocInfo<3> = CRLocCassList
Database_Services('WriteDataRow', 'WO_LOC', S.WONo:'*':CRLoc, LocInfo)
Next CRLoc
end
end
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
BREAKS:
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
DETAIL:
* Do Conversion If Any
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
/* ascending sort */
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
KitCassList = SRP_Array('SortSimpleList', KitCassList, 'AscendingNumbers', ',')
PTICassList = SRP_Array('SortSimpleList', PTICassList, 'AscendingNumbers', ',')
LoadedCassList = SRP_Array('SortSimpleList', LoadedCassList, 'AscendingNumbers', ',')
CassNeeded = ''
EpiPartNo = Xlate('WO_LOG', S.WONo, 'EPI_PART_NO', 'X')
If EpiPartNo NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KitCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted
end
end
RowIndex += 1
Swap '.1' with '' in S.ProdOrdNo
AllReportData<RowIndex, 1> = S.ReactNo
AllReportData<RowIndex, 2> = S.React_Type
AllReportData<RowIndex, 3> = S.WONo
AllReportData<RowIndex, 4> = S.ProdOrdNo
AllReportData<RowIndex, 5> = S.SubPartNo
AllReportData<RowIndex, 6> = S.EpiPartNo
AllReportData<RowIndex, 7> = S.WO_Qty
AllReportData<RowIndex, 8> = S.WO_RX_Qty
AllReportData<RowIndex, 9> = S.WO_UnRel_Qty
AllReportData<RowIndex, 10> = S.KitLocation
AllReportData<RowIndex, 11> = S.KitQty
AllReportData<RowIndex, 12> = CassNeeded
AllReportData<RowIndex, 13> = KitCassList
AllReportData<RowIndex, 14> = PTICassList
AllReportData<RowIndex, 15> = LoadedCassList
AllReportData<RowIndex, 16> = ''
GOTO ReadRecord
Bail:
Unlock hSysLists, ServiceKeyID else Null
Database_Services('WriteDataRow', 'SYSLISTS', 'MAT_REPORT', AllReportData)
RETURN

View File

@ -1,402 +0,0 @@
Compile function Report_Services_Dev4(@Service, @Params)
/***********************************************************************************************************************
Name : Report_Services
Description : Handler program for all Report 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/28/21 djs Copied original source code from Report_Services. Modified GetMaterialTrackReport
to use the SCHED_DET_NG table (i.e. Scheduler 2.0) instead of the SCHED_DET table.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert LOGICAL
$Insert OIPRINT_EQUATES
$Insert SCHED_DET_NG_EQUATES
$Insert WO_LOG_EQUATES
$Insert APPCOLORS
$Insert MSG_EQUATES
$Insert SCHEDULE_EQU
$Insert LOCATION_EQUATES
$Insert RLIST_EQUATES
Declare subroutine Utility, ErrMsg, Set_Status, Set_Printer, RList, SRP_Stopwatch, Btree.Extract, Error_Services, V119
Declare subroutine Push.Select, Pop.Select, SRP_Stopwatch, Database_Services
Declare function Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
Declare function Error_Services, Location_Services, SRP_Array, Signature_Services
Declare function Epi_Part_Services, SRP_Math, Datetime, Database_Services
Equ TAB$ TO \09\
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service GetMaterialTrackReport(RptColumns, LocationFilter, NoMatFlag)
SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'Select')
NoMatFlag = False$
LocationFilter = ''
LocationFilter<1, 1> = 'SR*KTR]'
LocationFilter<1, 2> = '1K*PTI'
LocationFilter<1, 3> = 'CR*BE'
LocationFilter<1, 4> = 'CR*BO'
LocationFilter<1, 5> = 'CR*TUN'
LocationFilter<1, 6> = 'CR*EPR'
LocationFilter<1, 7> = 'CR*FE'
LocationFilter<1, 8> = 'CR*FEH'
LocationFilter<1, 9> = 'CR*FO'
LocationFilter<1, 10> = 'CR*FOH'
// All Possible Report Columns
AllRptColumns = ''
AllRptColumns<1, 1> = 'React No'
AllRptColumns<1, 2> = 'React Type'
AllRptColumns<1, 3> = 'WO No'
AllRptColumns<1, 4> = 'SAP Prod No'
AllRptColumns<1, 5> = 'Sub Part No'
AllRptColumns<1, 6> = 'Epi Part No'
AllRptColumns<1, 7> = 'WO Qty'
AllRptColumns<1, 8> = 'RX Qty'
AllRptColumns<1, 9> = 'UnRel Qty'
AllRptColumns<1, 10> = 'Kit Location'
AllRptColumns<1, 11> = 'Kit Qty'
AllRptColumns<1, 12> = '+/-'
AllRptColumns<1, 13> = 'Kit RO'
AllRptColumns<1, 14> = 'PTI RO'
AllRptColumns<1, 15> = 'Load'
AllRptColumns<1, 16> = 'Comments'
RptColumns = AllRptColumns
ErrorTitle = 'Error in service ':Service
ErrCode = ''
ErrorMsg = ''
OPEN 'SCHED_DET_NG' TO SchedDetTable then
OPEN 'DICT.SCHED_DET_NG' TO @DICT then
Today = Datetime() - 45
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE ':Today:' BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
READ SchedDetRec FROM SchedDetTable,@ID THEN
ReactNo = SchedDetRec<SCHED_DET_NG.REACT_NO$>
WONo = SchedDetRec<SCHED_DET_NG.WO_NO$>
If ReactNo NE '' then
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
END
If WONo NE '' then
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
END
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
DateRange = 'Effective ':OCONV(Date(),'D4')
RowIndex = 0
AllReportData = ''
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
GoTo ReadRecord
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
End Service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadRecord:
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
SRP_Stopwatch('Start', 'Read Record 1.1')
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.REACT_TYPE = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
S.ProdOrdNo = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
SRP_Stopwatch('Stop', 'Read Record 1.1')
SRP_Stopwatch('Start', 'Read Record 1.2.1')
Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
KitData = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':'SR*KTR]')
end else
KitData = ''
end
SRP_Stopwatch('Stop', 'Read Record 1.2.1')
SRP_Stopwatch('Start', 'Read Record 1.2.2')
Swap @VM with ',' in KitData
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
S.KitQty = OCONV(SUM(KitData<2>) * 25,'MD0,Z')
I.KitQty = S.KitQty
S.KitCassCnt = KitData<2>
I.KitCassCnt = S.KitCassCnt
KitCassList = KitData<3>
SRP_Stopwatch('Stop', 'Read Record 1.2.2')
SRP_Stopwatch('Start', 'Read Record 1.2.3')
Locate '1K*PTI' in LocationFilter using @VM setting vPos then
PTIData = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':'1K*PTI')
end else
PTIData = ''
end
SRP_Stopwatch('Stop', 'Read Record 1.2.3')
SRP_Stopwatch('Start', 'Read Record 1.3.1')
Swap @VM with ',' in PTIData
PTICassList = PTIData<3>
CRLocs = ''
CRLocs<0, -1> = 'CR*BE'
CRLocs<0, -1> = 'CR*BO'
CRLocs<0, -1> = 'CR*TUN'
CRLocs<0, -1> = 'CR*EPR'
CRLocs<0, -1> = 'CR*FE'
CRLocs<0, -1> = 'CR*FEH'
CRLocs<0, -1> = 'CR*FO'
CRLocs<0, -1> = 'CR*FOH'
LoadedData = ''
LocQueryList = ''
For each Loc in CRLocs using @VM setting crPos
Locate Loc in LocationFilter using @VM setting vPos then
LocQueryList<0, -1> = Loc
end
Next Loc
LoadedCassList = ''
ReactType = Xlate('WO_LOG', S.WONo, 'REACT_TYPE', 'X')
SRP_Stopwatch('Stop', 'Read Record 1.3.1')
SRP_Stopwatch('Start', 'Read Record 1.3.2')
If ReactType NE 'EPP' then
If LocQueryList NE '' then
For each CRLoc in LocQueryList using @VM
CRLocInfo = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':CRLoc)
CRLocCassList = CRLocInfo<3>
LoadedCassList = SRP_Array('Join', LoadedCassList, CRLocCassList, 'OR', @VM)
Next CRLoc
end
end
LoadedCassList = SRP_Array('Clean', LoadedCassList, 'TrimAndMakeUnique', @VM)
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
SRP_Stopwatch('Stop', 'Read Record 1.3.2')
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
BREAKS:
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
DETAIL:
SRP_Stopwatch('Start', 'Detail')
* Do Conversion If Any
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
/* ascending sort */
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
KitCassList = SRP_Array('SortSimpleList', KitCassList, 'AscendingNumbers', ',')
PTICassList = SRP_Array('SortSimpleList', PTICassList, 'AscendingNumbers', ',')
LoadedCassList = SRP_Array('SortSimpleList', LoadedCassList, 'AscendingNumbers', ',')
CassNeeded = ''
EpiPartNo = Xlate('WO_LOG', S.WONo, 'EPI_PART_NO', 'X')
If EpiPartNo NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KittCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted
end
end
RowIndex += 1
Swap '.1' with '' in S.ProdOrdNo
AllReportData<RowIndex, 1> = S.ReactNo
AllReportData<RowIndex, 2> = S.React_Type
AllReportData<RowIndex, 3> = S.WONo
AllReportData<RowIndex, 4> = S.ProdOrdNo
AllReportData<RowIndex, 5> = S.SubPartNo
AllReportData<RowIndex, 6> = S.EpiPartNo
AllReportData<RowIndex, 7> = S.WO_Qty
AllReportData<RowIndex, 8> = S.WO_RX_Qty
AllReportData<RowIndex, 9> = S.WO_UnRel_Qty
AllReportData<RowIndex, 10> = S.KitLocation
AllReportData<RowIndex, 11> = S.KitQty
AllReportData<RowIndex, 12> = CassNeeded
AllReportData<RowIndex, 13> = KitCassList
AllReportData<RowIndex, 14> = PTICassList
AllReportData<RowIndex, 15> = LoadedCassList
AllReportData<RowIndex, 16> = ''
SRP_Stopwatch('Stop', 'Detail')
GOTO ReadRecord
Bail:
SRP_Stopwatch('ShowAll')
RETURN

View File

@ -1,547 +0,0 @@
Compile function Report_Services_Dev5(@Service, @Params)
/***********************************************************************************************************************
Name : Report_Services
Description : Handler program for all Report 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/28/21 djs Copied original source code from Report_Services. Modified GetMaterialTrackReport
to use the SCHED_DET_NG table (i.e. Scheduler 2.0) instead of the SCHED_DET table.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert SERVICE_SETUP
$Insert LOGICAL
$Insert OIPRINT_EQUATES
$Insert SCHED_DET_NG_EQUATES
$Insert WO_LOG_EQUATES
$Insert APPCOLORS
$Insert MSG_EQUATES
$Insert SCHEDULE_EQU
$Insert LOCATION_EQUATES
$Insert RLIST_EQUATES
Declare subroutine Utility, ErrMsg, Set_Status, Set_Printer, RList, Btree.Extract, Error_Services, V119
Declare subroutine Push.Select, Pop.Select
Declare function Set_Printer, Get_Printer, Msg, Get_Status, Printer_Select, obj_Install, Dialog_Box, obj_Location
Declare function Error_Services, Location_Services, SRP_Array, Signature_Services
Declare function Epi_Part_Services, SRP_Math, Datetime, Database_Services
Equ TAB$ TO \09\
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service GetMaterialTrackReport(RptColumns, LocationFilter, NoMatFlag)
// All Possible Report Columns
AllRptColumns = ''
AllRptColumns<1, 1> = 'React No'
AllRptColumns<1, 2> = 'React Type'
AllRptColumns<1, 3> = 'WO No'
AllRptColumns<1, 4> = 'SAP Prod No'
AllRptColumns<1, 5> = 'Sub Part No'
AllRptColumns<1, 6> = 'Epi Part No'
AllRptColumns<1, 7> = 'WO Qty'
AllRptColumns<1, 8> = 'RX Qty'
AllRptColumns<1, 9> = 'UnRel Qty'
AllRptColumns<1, 10> = 'Kit Location'
AllRptColumns<1, 11> = 'Kit Qty'
AllRptColumns<1, 12> = '+/-'
AllRptColumns<1, 13> = 'Kit RO'
AllRptColumns<1, 14> = 'PTI RO'
AllRptColumns<1, 15> = 'Load'
AllRptColumns<1, 16> = 'Comments'
If Index(RptColumns, 'Comments', 1) then
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1300'
AllColFmt<1, 14> = '+^1300'
AllColFmt<1, 15> = '+^700'
AllColFmt<1, 16> = '+^1300'
end else
AllColFmt = ''
AllColFmt<1, 1> = '+^720'
AllColFmt<1, 2> = '+<720'
AllColFmt<1, 3> = '+^1000'
AllColFmt<1, 4> = '+^1100'
AllColFmt<1, 5> = '+^1300'
AllColFmt<1, 6> = '+^1200'
AllColFmt<1, 7> = '+>720'
AllColFmt<1, 8> = '+>720'
AllColFmt<1, 9> = '+>720'
AllColFmt<1, 10> = '+^1260'
AllColFmt<1, 11> = '+^720'
AllColFmt<1, 12> = '+^500'
AllColFmt<1, 13> = '+^1800'
AllColFmt<1, 14> = '+^1800'
AllColFmt<1, 15> = '+^1100'
AllColFmt<1, 16> = ''
end
ErrorTitle = 'Error in service ':Service
ErrCode = ''
ErrorMsg = ''
OPEN 'SCHED_DET_NG' TO SchedDetTable then
OPEN 'DICT.SCHED_DET_NG' TO @DICT then
Today = Datetime()
ReactList = ''
WOList = ''
SchedDetKeys = ''
PrevReactNo = ''
PrevWO = ''
SelectSent = 'SELECT SCHED_DET_NG WITH STOP_DTM GE "':OCONV(Today, 'DT'):'" BY REACT_NO'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
Done = 0
@ID = ''
LOOP
PrevSchedDetKey = @ID
READNEXT @ID ELSE Done = 1
UNTIL Done
READ SchedDetRec FROM SchedDetTable,@ID THEN
ReactNo = SchedDetRec<SCHED_DET_NG.REACT_NO$>
WONo = SchedDetRec<SCHED_DET_NG.WO_NO$>
If ReactNo NE '' then
LOCATE ReactNo IN ReactList BY 'AR' USING @FM SETTING Pos ELSE
ReactList = INSERT(ReactList,Pos,0,0,ReactNo)
END
END
If WONo NE '' then
LOCATE WONo IN WOList<Pos> USING @VM SETTING WPos ELSE
WOList = INSERT(WOList,Pos,-1,0,WONo)
SchedDetKeys = INSERT(SchedDetKeys,-1,0,0,@ID)
END
END
END
REPEAT
CALL Make.List(0,SchedDetKeys,SchedDetTable,@DICT)
Header = "'D'":@VM:obj_Install('Get_Prop','CompTitle'):' Material Tracking by Reactor':@VM:"Page 'P'"
MinDemand = 0
Set_Status(0)
* Start of printing process
FileName = 'Print Material Demand'
Title = 'Printing Material Demand'
TopMargin = 1.0
BottomMargin = 0.75
LeftMargin = 0.25
RightMargin = 0.25
Margins = LeftMargin:@FM:TopMargin:@FM:RightMargin:@FM:BottomMargin
PageSetup = '1' ;* LandScape
PrintSetup = '2' ;* Preview Normal
PrintSetup<1,2> = '0' ;* All buttons
PrintSetup<1,5> = '1' ;* Page Range
PrintSetup<1,6> = 7 ;* full mouse and keyboard support
PrintPath = ''
stat = Set_Printer('INIT',FileName,Title,Margins,PageSetup,PrintSetup,PrintPath)
IF stat < 0 THEN
ErrorMsg = 'Stat = ' : Stat : ', PrintPath = ' : PrintPath
GOTO OIPrintErr
end
DateRange = 'Effective ':OCONV(Date(),'D4')
Header<-1> = "'T'"
Header<-1> = '' ;* Blank line following heading
font = 'Arial'
font<2> = '10'
font<4> = '0' ;* Bold
stat = Set_Printer('FONTHEADFOOT',font) ; IF stat < 0 THEN GOTO OIPrintErr
stat = Set_Printer('HEADER',Header) ; IF stat < 0 THEN GOTO OIPrintErr
Footer = " 'D' 'T'":@VM:@VM:"Page: 'P'"
stat = Set_Printer('FOOTER',Footer) ; IF stat < 0 THEN GOTO OIPrintErr
@RECCOUNT = 0
FirstPass = 1
LastRecord = 0
FirstLine = 1
fontSpacing = 100
* Make Column Heading
ColHead = ''
ColFmt = ''
For each Column in RptColumns using @VM setting rcPos
Locate Column in AllRptColumns using @VM setting dataPos then
ColHead<0, -1> = Column
ColFmt<0, -1> = AllColFmt<0, dataPos>
end
Next Column
* Zero Accumulators For Each Break
Prev.ReactNo = ''
Last.ReactNo.Break = 1
GoTo ReadRecord
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
end else
ErrorMsg = 'Unable to open "SCHED_DET_NG" table.'
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
end
End Service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadRecord:
* Zero Break Flags To False
ReactNo.Break=0
READNEXT @ID, Which.Value ELSE
LastRecord = 1
ReactNo.Break = 1
ReactNo = Prev.ReactNo
END
S.ATID = @ID
IF FirstPass AND LastRecord THEN
GOTO Bail
END
IF LastRecord THEN GOTO BREAKS
READO @RECORD FROM SchedDetTable,@ID ELSE
GOTO ReadRecord
END
@RECCOUNT += 1
* Calculate Value(s) For Column(s)
S.ATID = {@ID}
I.ATID = S.ATID
S.ReactNo = {REACT_NO}
I.ReactNo = S.ReactNo
S.WoNo = {WO_NO}
I.WoNo = S.WoNo
S.SubPartNo = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
I.SubPartNo = S.SubPartNo
S.EpiPartNo = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
I.EpiPartNo = S.EpiPartNo
S.WO_Qty = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
I.WO_Qty = S.WO_Qty
S.WO_RX_Qty = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
I.WO_RX_Qty = S.WO_RX_Qty
S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
I.WO_UnRel_QTY = S.WO_UnRel_QTY
S.REACT_TYPE = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
S.ProdOrdNo = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
KitData = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':'SR*KTR]')
end else
KitData = ''
end
Swap @VM with ',' in KitData
S.KitLocation = KitData<1>
I.KitLocation = S.KitLocation
S.KitCassCnt = COUNT(KitData<3>,',') + (KitData<3> NE '')
I.KitCassCnt = S.KitCassCnt
KitCassList = KitData<3>
S.KitQty = 0
For each CassNo in KitCassList using ','
S.KitQty += Xlate('WO_MAT', S.WONo:'*':CassNo, 'WAFER_QTY', 'X')
Next CassNo
I.KitQty = S.KitQty
Locate '1K*PTI' in LocationFilter using @VM setting vPos then
PTIData = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':'1K*PTI')
end else
PTIData = ''
end
PTICassList = PTIData<3>
Swap @VM with ',' in PTIData
PTICassList = PTIData<3>
CRLocs = ''
CRLocs<0, -1> = 'CR*BE'
CRLocs<0, -1> = 'CR*BO'
CRLocs<0, -1> = 'CR*TUN'
CRLocs<0, -1> = 'CR*EPR'
CRLocs<0, -1> = 'CR*FE'
CRLocs<0, -1> = 'CR*FEH'
CRLocs<0, -1> = 'CR*FO'
CRLocs<0, -1> = 'CR*FOH'
LoadedData = ''
LocQueryList = ''
For each Loc in CRLocs using @VM setting crPos
Locate Loc in LocationFilter using @VM setting vPos then
LocQueryList<0, -1> = Loc
end
Next Loc
LoadedCassList = ''
ReactType = Xlate('WO_LOG', S.WONo, 'REACT_TYPE', 'X')
If ReactType NE 'EPP' then
If LocQueryList NE '' then
For each CRLoc in LocQueryList using @VM
CRLocInfo = Database_Services('ReadDataRow', 'WO_LOC', S.WONo:'*':CRLoc)
CRLocCassList = CRLocInfo<3>
LoadedCassList = SRP_Array('Join', LoadedCassList, CRLocCassList, 'OR', @VM)
Next CRLoc
end
end
LoadedCassList = SRP_Array('Clean', LoadedCassList, 'TrimAndMakeUnique', @VM)
* TEST FOR CONTROL BREAK(S)
IF (S.ReactNo NE Prev.ReactNo) OR ReactNo.Break THEN
ReactNo = Prev.ReactNo
Prev.ReactNo = S.ReactNo
ReactNo.Break += 1
END
IF FirstPass THEN
FirstPass=0
GOTO DETAIL
END
BREAKS:
* Print Break Total(s) And Accumulate Total(s)
IF ReactNo.Break THEN stat = Set_Printer('TEXT')
* Perform Last Record Output If Done
IF LastRecord THEN
colData = ''
GOTO Bail
END
DETAIL:
* Do Conversion If Any
IF S.REACTNO NE "" THEN S.REACTNO = OCONV(S.REACTNO,"MD0,")
IF S.WONO NE "" THEN S.WONO = OCONV(S.WONO,"MD0")
IF S.WO_QTY NE "" THEN S.WO_QTY = OCONV(S.WO_QTY,"MD0,")
IF S.WO_RX_QTY NE "" THEN S.WO_RX_QTY = OCONV(S.WO_RX_QTY,"MD0,")
IF S.WO_UNREL_QTY NE "" THEN S.WO_UNREL_QTY = OCONV(S.WO_UNREL_QTY,"MD0,")
* PRINT DETAIL LINE
COLDATA = ''
RowNumber = 0
/* ascending sort */
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
KitCassList = SRP_Array('SortSimpleList', KitCassList, 'AscendingNumbers', ',')
PTICassList = SRP_Array('SortSimpleList', PTICassList, 'AscendingNumbers', ',')
LoadedCassList = SRP_Array('SortSimpleList', LoadedCassList, 'AscendingNumbers', ',')
Convert ',' to @VM in KitCassList
Convert ',' to @VM in PTICassList
Convert ',' to @VM in LoadedCassList
NumKitCass = DCount(KitCassList, @VM)
If NumKitCass GT 4 then
For CassIndex = 4 to NumKitCass Step 4
CassNo = KitCassList<0, CassIndex>
CassNo := CRLF$
KitCassList<0, CassIndex> = CassNo
Next CassIndex
end
NumPTICass = DCount(PTICassList, @VM)
If NumPTICass GT 4 then
For CassIndex = 4 to NumPTICass Step 4
CassNo = PTICassList<0, CassIndex>
CassNo := CRLF$
PTICassList<0, CassIndex> = CassNo
Next CassIndex
end
NumLoadedCass = DCount(LoadedCassList, @VM)
If NumLoadedCass GT 2 then
For CassIndex = 2 to NumLoadedCass Step 2
CassNo = LoadedCassList<0, CassIndex>
CassNo := CRLF$
LoadedCassList<0, CassIndex> = CassNo
Next CassIndex
end
Convert @VM to ',' in KitCassList
Convert @VM to ',' in PTICassList
Convert @VM to ',' in LoadedCassList
CassNeeded = ''
EpiPartNo = Xlate('WO_LOG', S.WONo, 'EPI_PART_NO', 'X')
If EpiPartNo NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, S.React_Type)
If WPDAdjusted NE '' then
CPDAdjusted = SRP_Math('CEILING', (WPDAdjusted/25) )
CassInCR = DCount(KitCassList, ',') + DCount(PTICassList, ',') + DCount(LoadedCassList, ',')
CassNeeded = CassInCR - CPDAdjusted
end
end
Swap '.1' with '' in S.ProdOrdNo
AllReportData = ''
AllReportData<1> = S.ReactNo
AllReportData<2> = S.React_Type
AllReportData<3> = S.WONo
AllReportData<4> = S.ProdOrdNo
AllReportData<5> = S.SubPartNo
AllReportData<6> = S.EpiPartNo
AllReportData<7> = S.WO_Qty
AllReportData<8> = S.WO_RX_Qty
AllReportData<9> = S.WO_UnRel_Qty
AllReportData<10> = S.KitLocation
AllReportData<11> = S.KitQty
AllReportData<12> = CassNeeded
AllReportData<13> = KitCassList
AllReportData<14> = PTICassList
AllReportData<15> = LoadedCassList
AllReportData<16> = ''
If ( (KitCassList NE '') or (PTICassList NE '') or (LoadedCassList NE '') or (NoMatFlag EQ True$) ) then
RowNumber += 1
For each RptColumn in RptColumns using @VM setting rcPos
Locate RptColumn in AllRptColumns using @VM setting dataPos then
COLDATA<RowNumber,rcPos> = AllReportData<dataPos>
end
Next RptColumn
If COLDATA NE '' then GoSub PrintTable
END
GOTO ReadRecord
Bail:
stat = Set_Printer('TERM',1)
RETURN
OIPrintErr:
ErrMsg(ErrorTitle:@SVM:ErrorMsg)
ErrMsg(ErrorTitle:@SVM:'Set_Printer returned errorcode ':stat)
stat = Set_Printer('TERM',1)
RETURN
PrintTable:
PageHeight = Get_Printer('PAGESIZE')<2>
PrintableHeight = PageHeight - TopMargin - BottomMargin
PrinterHeight = Get_Printer('POS')<2>
stat = Set_Printer('CALCTABLE',ColFmt:@FM:ColData)
TableSize = Get_Printer('CALCTABLE')
TableHeight = TableSize<2>
fontSpacing = 120
IF ( TableHeight + PrinterHeight >= PrintableHeight ) OR FirstLine THEN
IF NOT(FirstLine) THEN
stat = Set_Printer('PAGEBREAK')
END
FirstLine = 0
font<2> = 10
font<4> = 1 ;* Bold
stat = Set_Printer('FONT',font,'100')
stat = Set_Printer('ADDTABLE',colFmt,colHead,'',LTGREY$,'',0,TB_ALL)
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',0,7)
END ELSE
font<2> = 10
font<4> = 0
stat = Set_Printer('FONT',font,fontSpacing)
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
END
RETURN

View File

@ -0,0 +1,28 @@
compile insert MATERIAL_REPORT_EQUATES
/*----------------------------------------
Author : Table Create Insert Routine
Written : 23/01/2025
Description : Insert for Table MATERIAL_REPORT
----------------------------------------*/
#ifndef __MATERIAL_REPORT_EQUATES__
#define __MATERIAL_REPORT_EQUATES__
equ MATERIAL_REPORT.REACT_NO$ to 1
equ MATERIAL_REPORT.REACT_TYPE$ to 2
equ MATERIAL_REPORT.WO_NO$ to 3
equ MATERIAL_REPORT.PROD_ORD_NO$ to 4
equ MATERIAL_REPORT.SUB_PART_NO$ to 5
equ MATERIAL_REPORT.EPI_PART_NO$ to 6
equ MATERIAL_REPORT.WO_QTY$ to 7
equ MATERIAL_REPORT.WO_RX_QTY$ to 8
equ MATERIAL_REPORT.WO_UNREL_QTY$ to 9
equ MATERIAL_REPORT.KIT_LOCATION$ to 10
equ MATERIAL_REPORT.KIT_QTY$ to 11
equ MATERIAL_REPORT.CASS_DELTA$ to 12
equ MATERIAL_REPORT.KIT_RO$ to 13
equ MATERIAL_REPORT.KIT_DEMAND$ to 14
equ MATERIAL_REPORT.PTI_RO$ to 15
equ MATERIAL_REPORT.LOAD_RO$ to 16
equ MATERIAL_REPORT.COMMENTS$ to 17
#endif