Compare commits
	
		
			177 Commits
		
	
	
		
			4037b2fa45
			...
			extra-file
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 51da9ef7c2 | |||
| 722bc63bdb | |||
| 1f2777cd18 | |||
| 10bf8bf878 | |||
| 1a572a31b2 | |||
| 098f740585 | |||
| 89bb3e479b | |||
| 60522d74c1 | |||
| 3561b41a7b | |||
| a636198128 | |||
| adc247fd4c | |||
| a094971d7d | |||
| 47b54f6a16 | |||
| 804258a167 | |||
| 6d552ab824 | |||
| 2fbf41d528 | |||
| ba2faa8c9f | |||
| 0a2d53d173 | |||
| 844de71599 | |||
| 494988d394 | |||
| e1c7544fac | |||
| 6d5c9c0ab7 | |||
| a8dff61cfa | |||
| 09d2d13e63 | |||
| 14331fcf49 | |||
| 667831a003 | |||
| 82b74f0b96 | |||
| f4f63c28e3 | |||
| 1f2b73797b | |||
| 54eaf15598 | |||
| fffadaa1c3 | |||
| a6da80dc3c | |||
| 3125225639 | |||
| f54331eb0e | |||
| 847483f603 | |||
| 88281fff05 | |||
| 8499d03ef8 | |||
| 3186ec1ad6 | |||
| 898f21b73d | |||
| f7ee12a78d | |||
| 475df5ba54 | |||
| 28a8a10ba2 | |||
| 6934799e92 | |||
| 03f42dedea | |||
| 033e3baee8 | |||
| 4bfae8e7b7 | |||
| 0f0c735023 | |||
| 4eee1b0f0a | |||
| e2e8731316 | |||
| a21f41fd29 | |||
| 2bbc5c065d | |||
| 9e54865e1e | |||
| c7f1f86249 | |||
| c89bb6b3d4 | |||
| 71daf317f0 | |||
| a48f47ddc9 | |||
| 6396264e64 | |||
| 8f233705a2 | |||
| b159e1aa27 | |||
| de2e6af5f7 | |||
| 84da66ccd5 | |||
| 49e77a769f | |||
| 490bfe21d4 | |||
| 2aaed8944e | |||
| ef104f889c | |||
| ea156489f1 | |||
| e1a44a7687 | |||
| c890a25d46 | |||
| 836b8c47a9 | |||
| aabd4c3a91 | |||
| b607432be4 | |||
| 3debdce91e | |||
| 4689b861d7 | |||
| 350116fddc | |||
| 59aed72156 | |||
| e97162dc1e | |||
| 2a6c0afddf | |||
| b53e805929 | |||
| 804b590773 | |||
| cd64511871 | |||
| 2226f3112b | |||
| 184d2c2cba | |||
| 5830705c7d | |||
| 1d32ec4fbb | |||
| eb85afaf35 | |||
| 269e5f9bd4 | |||
| d4ce96337b | |||
| af6cd757de | |||
| ce252bf885 | |||
| 28d5b81b30 | |||
| 563871008e | |||
| 272b2ce7d8 | |||
| 14c77d9edf | |||
| d15cd38daf | |||
| e3dbea2b7a | |||
| 01fa3f8202 | |||
| 98ac420462 | |||
| 5ca3778719 | |||
| 5d27afcd68 | |||
| c786fce37b | |||
| b796060529 | |||
| ff0036d4c2 | |||
| fd55fe06a9 | |||
| 653ba1619f | |||
| 8f25d78fe6 | |||
| 521c35af8f | |||
| d021ab64b9 | |||
| df5b217fe7 | |||
| 8415e99055 | |||
| da208b2908 | |||
| 7b7f501145 | |||
| 03e85359d1 | |||
| 401c03d752 | |||
| a878c9bb2e | |||
| 60b5386f27 | |||
| 46f070e9cc | |||
| 2180ba3fb4 | |||
| c6910c14c2 | |||
| 38e7b6e276 | |||
| e523f2085d | |||
| 7b386fe856 | |||
| bcdfbe0534 | |||
| 52499b7616 | |||
| 1db89a3d3f | |||
| de67e45c9a | |||
| 3becd9cf4d | |||
| d570e3cfef | |||
| 49f6cf505a | |||
| 17e320923f | |||
| c4a3edece2 | |||
| 273b7f67a6 | |||
| 5cb17c6d52 | |||
| 0c7a1d55e2 | |||
| b2c9e500f8 | |||
| 2f6b376ece | |||
| 357b7ede64 | |||
| 60493b3413 | |||
| 76327e9dbc | |||
| 2d3f534a71 | |||
| f6ba173f47 | |||
| 98e02f8c40 | |||
| de6296b1d3 | |||
| ebd8b36d13 | |||
| 803f946c7e | |||
| 16c7bc6926 | |||
| 216df9b4ef | |||
| 5eec9386c2 | |||
| f3ad7adfa8 | |||
| c4fbf7c1d9 | |||
| 2a28c4b743 | |||
| e5f0e9b7f1 | |||
| 869787e0f3 | |||
| 38fc89dac6 | |||
| 614da8ad3b | |||
| dcb61e220c | |||
| 117e5c8b4b | |||
| 25c608c9a6 | |||
| 31632e28aa | |||
| 03b0c8f606 | |||
| 6cfb6e521e | |||
| 481f083804 | |||
| 18919090d8 | |||
| 550f376a0b | |||
| 6aad8036e5 | |||
| 4fc7eb189b | |||
| 5e917e65ac | |||
| 97f3c3fce2 | |||
| 27d55d83a1 | |||
| 4e213ff253 | |||
| 292bc4646b | |||
| ab55269f87 | |||
| f4c1a42812 | |||
| ec70fcc80b | |||
| e13f2df003 | |||
| 770a1de95b | |||
| 5c18f7ccd2 | |||
| 3c95ec88d8 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,4 @@
 | 
			
		||||
LSL2/STPROC/TEST_DANIEL*.txt
 | 
			
		||||
LSL2/STPROC/TEST_DAKOTA.txt
 | 
			
		||||
LSL2/STPROC/JONATHAN_SERVICES.txt
 | 
			
		||||
LSL2/STPROC/CHASE_SERVICES.txt
 | 
			
		||||
							
								
								
									
										16
									
								
								.vscode/.http
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.vscode/.http
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://messa020ec.infineon.com/api/oiWizard/reactors
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://messa020ec.infineon.com/api/oiWizard/materials/rds/1000416
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/1750770474/header
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
							
								
								
									
										29
									
								
								.vscode/.hurl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.vscode/.hurl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://messa020ec.infineon.com/api/oiWizard/reactors
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
HTTP 200
 | 
			
		||||
[Asserts]
 | 
			
		||||
header "Content-Type" == "application/hal+json"
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://messa020ec.infineon.com/api/oiWizard/materials/rds/1000416
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
HTTP 200
 | 
			
		||||
[Asserts]
 | 
			
		||||
header "Content-Type" == "application/hal+json"
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
GET https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/1750770474/header
 | 
			
		||||
Accept: application/json
 | 
			
		||||
 | 
			
		||||
HTTP 200
 | 
			
		||||
[Asserts]
 | 
			
		||||
header "Content-Type" == "application/json; charset=utf-8"
 | 
			
		||||
jsonpath "$.TotalRows" == 1
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
							
								
								
									
										234
									
								
								.vscode/.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								.vscode/.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,234 @@
 | 
			
		||||
 | 
			
		||||
// T:\met08resisrp2100\06_SourceCode\met08resisrp2100\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.Date // 001
 | 
			
		||||
// x.Employee // 002
 | 
			
		||||
// x.Recipe // 003
 | 
			
		||||
// x.Reactor // 004
 | 
			
		||||
// x.RDS // 005
 | 
			
		||||
// x.PSN // 006
 | 
			
		||||
// x.Layer // 007
 | 
			
		||||
// x.Zone // 008
 | 
			
		||||
 | 
			
		||||
// T:\met08anlysdifaast230\06_SourceCode\met08anlysdifaast230\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.PSN // 001
 | 
			
		||||
// x.Reactor // 002
 | 
			
		||||
// logistics.MesEntity // 003
 | 
			
		||||
// x.RDS // 004
 | 
			
		||||
// x.Recipe // 005
 | 
			
		||||
// x.Employee // 006
 | 
			
		||||
// x.SlotNumber // 007
 | 
			
		||||
 | 
			
		||||
// T:\met08thftirstratus\06_SourceCode\met08thftirstratus\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// "Stratus_" // 001
 | 
			
		||||
// x.Date // 002
 | 
			
		||||
// logistics.JobID // 003
 | 
			
		||||
// "FQA Thickness" // 004
 | 
			
		||||
// x.Employee // 005
 | 
			
		||||
// x.Recipe // 006
 | 
			
		||||
// x.Reactor // 007
 | 
			
		||||
// x.RDS // 008
 | 
			
		||||
// x.PSN // 009
 | 
			
		||||
// x.Lot // 010
 | 
			
		||||
// x.Cassette // 011
 | 
			
		||||
// x.MeanThickness // 012
 | 
			
		||||
// descriptions[i].Slot // 013
 | 
			
		||||
// descriptions[i].Mean // 014
 | 
			
		||||
 | 
			
		||||
// T:\met08thftirqs408m\06_SourceCode\met08thftirqs408m\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// Bio-Rad UniqueId // 001
 | 
			
		||||
// Date // 002
 | 
			
		||||
// ThicknessFourteenCriticalPointsAverage // 003
 | 
			
		||||
// Recipe // 004
 | 
			
		||||
// Reactor // 005
 | 
			
		||||
// RDS // 006
 | 
			
		||||
// PSN // 007
 | 
			
		||||
// Layer // 008
 | 
			
		||||
// Zone // 009
 | 
			
		||||
// Cassette // 010
 | 
			
		||||
// Wafer // 011
 | 
			
		||||
// RVThickness // 012
 | 
			
		||||
// Position // 013
 | 
			
		||||
// Thickness // 014
 | 
			
		||||
 | 
			
		||||
// T:\met08resimapcde\06_SourceCode\met08resimapcde\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.UniqueId // 001
 | 
			
		||||
// x.Run // 002
 | 
			
		||||
// x.Date // 003
 | 
			
		||||
// x.Lot // 004
 | 
			
		||||
// x.Recipe // 005
 | 
			
		||||
// x.Reactor // 006
 | 
			
		||||
// x.RDS // 007
 | 
			
		||||
// x.PSN // 008
 | 
			
		||||
// x.Layer // 009
 | 
			
		||||
// x.Zone // 010
 | 
			
		||||
// logistics.MesEntity // 011
 | 
			
		||||
// x.Employee // 012
 | 
			
		||||
// x.Engineer // 013
 | 
			
		||||
// x.DLRatio // 014
 | 
			
		||||
// x.Temp // 015
 | 
			
		||||
// x.AutoOptimizeGain // 016
 | 
			
		||||
// x.AutoProbeHeightSet // 017
 | 
			
		||||
// x.DataReject // 018
 | 
			
		||||
// x.FileName // 019
 | 
			
		||||
// x.Avg // 020
 | 
			
		||||
// x.StdDev // 021
 | 
			
		||||
// x.SemiRadial // 022
 | 
			
		||||
// description.Pt // 023
 | 
			
		||||
// description.R // 024
 | 
			
		||||
// description.T // 025
 | 
			
		||||
// description.Rs // 026
 | 
			
		||||
// description.Merit // 027
 | 
			
		||||
 | 
			
		||||
// T:\met08resihgcv\06_SourceCode\met08resihgcv\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.UniqueId // 001
 | 
			
		||||
// logistics.MesEntity // 002
 | 
			
		||||
// x.Reactor // 003
 | 
			
		||||
// x.RDS // 004
 | 
			
		||||
// x.PSN // 005
 | 
			
		||||
// x.Layer // 006
 | 
			
		||||
// x.Zone // 007
 | 
			
		||||
// x.Wafer // 008
 | 
			
		||||
// x.Lot // 009
 | 
			
		||||
// x.Plan // 010
 | 
			
		||||
// x.Date // 011
 | 
			
		||||
// x.WaferSize // 012
 | 
			
		||||
// x.Ccomp // 013
 | 
			
		||||
// x.Area // 014
 | 
			
		||||
// x.CondType // 015
 | 
			
		||||
// x.Model // 016
 | 
			
		||||
// x.StartVoltage // 017
 | 
			
		||||
// x.StopVoltage // 018
 | 
			
		||||
// x.RampRate // 019
 | 
			
		||||
// x.GLimit // 020
 | 
			
		||||
// x.SetupFile // 021
 | 
			
		||||
// x.SetupFile // 022
 | 
			
		||||
// x.Folder // 023
 | 
			
		||||
// x.Pattern // 024
 | 
			
		||||
// x.RhoMethod // 025
 | 
			
		||||
// x.NAvgMean // 026
 | 
			
		||||
// x.NAvgStdDev // 027
 | 
			
		||||
// x.NAvgRadialGradient // 028
 | 
			
		||||
// x.NslMean // 029
 | 
			
		||||
// x.NslStdDev // 030
 | 
			
		||||
// x.NslRadialGradient // 031
 | 
			
		||||
// x.VdMean // 032
 | 
			
		||||
// x.VdStdDev // 033
 | 
			
		||||
// x.VdRadialGradient // 034
 | 
			
		||||
// x.FlatZMean // 035
 | 
			
		||||
// x.FlatZStdDev // 036
 | 
			
		||||
// x.FlatZRadialGradient // 037
 | 
			
		||||
// x.RhoAvgMean // 038
 | 
			
		||||
// x.RhoAvgStdDev // 039
 | 
			
		||||
// x.RhoAvgRadialGradient // 040
 | 
			
		||||
// x.RhoslMean // 041
 | 
			
		||||
// x.RhoslStdDev // 042
 | 
			
		||||
// x.RhoslRadialGradient // 043
 | 
			
		||||
// x.PhaseMean // 044
 | 
			
		||||
// x.PhaseStdDev // 045
 | 
			
		||||
// x.PhaseRadialGradient // 046
 | 
			
		||||
// x.GradeMean // 047
 | 
			
		||||
// x.GradeStdDev // 048
 | 
			
		||||
// x.GradeRadialGradient // 049
 | 
			
		||||
// x.RsMean // 050
 | 
			
		||||
// x.RsStdDev // 051
 | 
			
		||||
// x.RsRadialGradient // 052
 | 
			
		||||
// description.Index // 053
 | 
			
		||||
// description.NAvg // 054
 | 
			
		||||
// description.Nsl // 055
 | 
			
		||||
// description.Vd // 056
 | 
			
		||||
// description.FlatZ // 057
 | 
			
		||||
// description.RhoAvg // 058
 | 
			
		||||
// description.Rhosl // 059
 | 
			
		||||
// description.Phase // 060
 | 
			
		||||
// description.Grade // 061
 | 
			
		||||
 | 
			
		||||
// T:\met08ddupsfs6420\06_SourceCode\met08ddupsfs6420\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.AreaCountAvg       // 001 - AreaCountAvg
 | 
			
		||||
// x.AreaCountMax       // 002 - AreaCountMax
 | 
			
		||||
// x.AreaCountMin       // 003 - AreaCountMin
 | 
			
		||||
// x.AreaCountStdDev    // 004 - AreaCountStdDev
 | 
			
		||||
// x.AreaTotalAvg       // 005 - AreaTotalAvg
 | 
			
		||||
// x.AreaTotalMax       // 006 - AreaTotalMax
 | 
			
		||||
// x.AreaTotalMin       // 007 - AreaTotalMin
 | 
			
		||||
// x.AreaTotalStdDev    // 008 - AreaTotalStdDev
 | 
			
		||||
// x.Date               // 009 - 
 | 
			
		||||
// x.HazeAverageAvg     // 010 - Haze Average
 | 
			
		||||
// x.HazeAverageMax     // 011 - 
 | 
			
		||||
// x.HazeAverageMin     // 012 - 
 | 
			
		||||
// x.HazeAverageStdDev  // 013 - 
 | 
			
		||||
// x.HazeRegionAvg      // 014 - 
 | 
			
		||||
// x.HazeRegionMax      // 015 - 
 | 
			
		||||
// x.HazeRegionMin      // 016 - 
 | 
			
		||||
// x.HazeRegionStdDev   // 017 - 
 | 
			
		||||
// x.Lot                // 018 - 
 | 
			
		||||
// x.LPDCM2Avg          // 019 - 
 | 
			
		||||
// x.LPDCM2Max          // 020 - 
 | 
			
		||||
// x.LPDCM2Min          // 021 - 
 | 
			
		||||
// x.LPDCM2StdDev       // 022 - 
 | 
			
		||||
// x.LPDCountAvg        // 023 - 
 | 
			
		||||
// x.LPDCountMax        // 024 - 
 | 
			
		||||
// x.LPDCM2Min          // 025 - 
 | 
			
		||||
// x.LPDCountStdDev     // 026 - 
 | 
			
		||||
// x.Employee           // 027 - 
 | 
			
		||||
// x.RDS                // 028 - Lot
 | 
			
		||||
// x.Reactor            // 029 - Process
 | 
			
		||||
// x.Recipe             // 030 - Part
 | 
			
		||||
// x.ScratchCountAvg    // 031 - Scratch Count
 | 
			
		||||
// x.ScratchCountMax    // 032 - 
 | 
			
		||||
// x.ScratchCountMin    // 033 - 
 | 
			
		||||
// x.ScratchTotalStdDev // 034 - 
 | 
			
		||||
// x.ScratchTotalAvg    // 035 - Scratch Length
 | 
			
		||||
// x.ScratchTotalMax    // 036 - 
 | 
			
		||||
// x.ScratchTotalMin    // 037 - 
 | 
			
		||||
// x.ScratchTotalStdDev // 038 - 
 | 
			
		||||
// x.SumOfDefectsAvg    // 039 - Average Sum of Defects
 | 
			
		||||
// x.SumOfDefectsMax    // 040 - Max Sum of Defects
 | 
			
		||||
// x.SumOfDefectsMin    // 041 - Min Sum of Defects
 | 
			
		||||
// x.SumOfDefectsStdDev // 042 - SumOfDefectsStdDev
 | 
			
		||||
// logistics.MesEntity  // 043 - 
 | 
			
		||||
 | 
			
		||||
// T:\met08ddupsp1tbi\06_SourceCode\met08ddupsp1tbi\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
			
		||||
// x.DcnLpdMin         // 001 - 
 | 
			
		||||
// x.DcnLpdMax         // 002 - 
 | 
			
		||||
// x.DcnLpdMean        // 003 - DCN LPD
 | 
			
		||||
// x.DcnAreaCountMin   // 004 - 
 | 
			
		||||
// x.DcnAreaCountMax   // 005 - 
 | 
			
		||||
// x.DcnAreaCountMean  // 006 - DCN Area
 | 
			
		||||
// x.DcnAreaMin        // 007 - 
 | 
			
		||||
// x.DcnAreaMax        // 008 - 
 | 
			
		||||
// x.Date              // 009 - 
 | 
			
		||||
// x.DcnHazeAvgMean    // 010 - Haze Average
 | 
			
		||||
// string.Empty        // 011 - 
 | 
			
		||||
// string.Empty        // 012 - 
 | 
			
		||||
// string.Empty        // 013 - 
 | 
			
		||||
// string.Empty        // 014 - 
 | 
			
		||||
// string.Empty        // 015 - 
 | 
			
		||||
// string.Empty        // 016 - 
 | 
			
		||||
// string.Empty        // 017 - 
 | 
			
		||||
// string.Empty        // 018 - 
 | 
			
		||||
// string.Empty        // 019 - 
 | 
			
		||||
// string.Empty        // 020 - 
 | 
			
		||||
// string.Empty        // 021 - 
 | 
			
		||||
// string.Empty        // 022 - 
 | 
			
		||||
// string.Empty        // 023 - 
 | 
			
		||||
// string.Empty        // 024 - 
 | 
			
		||||
// string.Empty        // 025 - 
 | 
			
		||||
// string.Empty        // 026 - 
 | 
			
		||||
// string.Empty        // 027 - 
 | 
			
		||||
// x.RDS               // 028 - Lot
 | 
			
		||||
// x.Reactor           // 029 - Process
 | 
			
		||||
// x.Recipe            // 030 - Part
 | 
			
		||||
// x.DcnScrMean        // 031 - Scratch Count
 | 
			
		||||
// string.Empty        // 032 - 
 | 
			
		||||
// string.Empty        // 033 - 
 | 
			
		||||
// string.Empty        // 034 - 
 | 
			
		||||
// x.DcnMicroScrMean   // 035 - Scratch Length
 | 
			
		||||
// string.Empty        // 036 - 
 | 
			
		||||
// string.Empty        // 037 - 
 | 
			
		||||
// string.Empty        // 038 - 
 | 
			
		||||
// x.DcnAllMean        // 039 - Average Sum of Defects
 | 
			
		||||
// x.DcnAllMax         // 040 - Max Sum of defects
 | 
			
		||||
// x.DcnAllMin         // 041 - Min Sum of Defects
 | 
			
		||||
// string.Empty        // 042 - 
 | 
			
		||||
// logistics.MesEntity // 043 - 
 | 
			
		||||
// x.DcnAreaMean       // 044 - DCN MM2
 | 
			
		||||
							
								
								
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "files.associations": {
 | 
			
		||||
        "*.txt": "vb",
 | 
			
		||||
    },
 | 
			
		||||
    "cSpell.words": []
 | 
			
		||||
}
 | 
			
		||||
@ -21,75 +21,77 @@
 | 
			
		||||
                "<1,12>": "SCOPE #3",
 | 
			
		||||
                "<1,13>": "SCOPE #4",
 | 
			
		||||
                "<1,14>": "SCOPE #5",
 | 
			
		||||
                "<1,15>": "SP1 1",
 | 
			
		||||
                "<1,16>": "TENCOR1",
 | 
			
		||||
                "<1,17>": "TENCOR2",
 | 
			
		||||
                "<1,18>": "TENCOR3",
 | 
			
		||||
                "<1,19>": "BIORAD2",
 | 
			
		||||
                "<1,20>": "BIORAD3",
 | 
			
		||||
                "<1,21>": "BIORAD4",
 | 
			
		||||
                "<1,22>": "BIORAD5",
 | 
			
		||||
                "<1,23>": "CDE4",
 | 
			
		||||
                "<1,24>": "CDE5",
 | 
			
		||||
                "<1,25>": "CDE6",
 | 
			
		||||
                "<1,26>": "HGCV1",
 | 
			
		||||
                "<1,27>": "HGCV2",
 | 
			
		||||
                "<1,28>": "HGCV3",
 | 
			
		||||
                "<1,29>": "SPV",
 | 
			
		||||
                "<1,30>": "SRP",
 | 
			
		||||
                "<1,31>": "BELLJAR",
 | 
			
		||||
                "<1,32>": "6INLESS",
 | 
			
		||||
                "<1,33>": "6INLESS2",
 | 
			
		||||
                "<1,34>": "6MACTRONIX #1",
 | 
			
		||||
                "<1,35>": "6MACTRONIX #2",
 | 
			
		||||
                "<1,36>": "6MACTRONIX #3",
 | 
			
		||||
                "<1,37>": "6MACTRONIX #4",
 | 
			
		||||
                "<1,38>": "8INLESS",
 | 
			
		||||
                "<1,39>": "8INLESS2",
 | 
			
		||||
                "<1,40>": "BAGGER1",
 | 
			
		||||
                "<1,41>": "BAGGER2",
 | 
			
		||||
                "<1,42>": "BAGGER3",
 | 
			
		||||
                "<1,43>": "BAGGER4",
 | 
			
		||||
                "<1,44>": "6INFF01",
 | 
			
		||||
                "<1,45>": "6INFF02",
 | 
			
		||||
                "<1,46>": "6INFF03",
 | 
			
		||||
                "<1,47>": "6INFF04",
 | 
			
		||||
                "<1,48>": "6INFF05",
 | 
			
		||||
                "<1,49>": "6INFF06",
 | 
			
		||||
                "<1,50>": "6INFF07",
 | 
			
		||||
                "<1,51>": "6INFF08",
 | 
			
		||||
                "<1,52>": "6INFF09",
 | 
			
		||||
                "<1,53>": "6INFF10",
 | 
			
		||||
                "<1,54>": "8INNF01",
 | 
			
		||||
                "<1,55>": "8INNF02",
 | 
			
		||||
                "<1,56>": "8INNF03",
 | 
			
		||||
                "<1,57>": "8INNF04",
 | 
			
		||||
                "<1,58>": "8INNF05",
 | 
			
		||||
                "<1,59>": "8INFF01",
 | 
			
		||||
                "<1,60>": "8INFF02",
 | 
			
		||||
                "<1,61>": "8INFF03",
 | 
			
		||||
                "<1,62>": "8INFF04",
 | 
			
		||||
                "<1,63>": "MACTRONIX #1",
 | 
			
		||||
                "<1,64>": "MACTRONIX #2 ",
 | 
			
		||||
                "<1,65>": "MACTRONIX #3",
 | 
			
		||||
                "<1,66>": "MACTRONIX #4",
 | 
			
		||||
                "<1,67>": "MACTRONIX #5",
 | 
			
		||||
                "<1,68>": "MACTRONIX #6",
 | 
			
		||||
                "<1,69>": "MACTRONIX #7",
 | 
			
		||||
                "<1,70>": "TALL_PITCH1",
 | 
			
		||||
                "<1,71>": "TALL_PITCH2",
 | 
			
		||||
                "<1,72>": "TALL_PITCH3",
 | 
			
		||||
                "<1,73>": "TALL_PITCH4",
 | 
			
		||||
                "<1,74>": "WC6INCH1",
 | 
			
		||||
                "<1,75>": "WC6INCH2",
 | 
			
		||||
                "<1,76>": "WC6INCH3",
 | 
			
		||||
                "<1,77>": "WC6INCH4",
 | 
			
		||||
                "<1,78>": "WC8INCH1",
 | 
			
		||||
                "<1,79>": "WC8INCH2",
 | 
			
		||||
                "<1,80>": "WC8INCH3",
 | 
			
		||||
                "<1,81>": "ELLP01",
 | 
			
		||||
                "<1,82>": "LEAKCHK01",
 | 
			
		||||
                "<1,83>": "LEAKCHK02"
 | 
			
		||||
                "<1,15>": "SCOPE #6",
 | 
			
		||||
                "<1,16>": "SP1 1",
 | 
			
		||||
                "<1,17>": "TENCOR1",
 | 
			
		||||
                "<1,18>": "TENCOR2",
 | 
			
		||||
                "<1,19>": "TENCOR3",
 | 
			
		||||
                "<1,20>": "BIORAD2",
 | 
			
		||||
                "<1,21>": "BIORAD3",
 | 
			
		||||
                "<1,22>": "BIORAD4",
 | 
			
		||||
                "<1,23>": "BIORAD5",
 | 
			
		||||
                "<1,24>": "CDE4",
 | 
			
		||||
                "<1,25>": "CDE5",
 | 
			
		||||
                "<1,26>": "CDE6",
 | 
			
		||||
                "<1,27>": "HGCV1",
 | 
			
		||||
                "<1,28>": "HGCV2",
 | 
			
		||||
                "<1,29>": "HGCV3",
 | 
			
		||||
                "<1,30>": "SPV",
 | 
			
		||||
                "<1,31>": "SRP",
 | 
			
		||||
                "<1,32>": "BELLJAR",
 | 
			
		||||
                "<1,33>": "6INLESS",
 | 
			
		||||
                "<1,34>": "6INLESS2",
 | 
			
		||||
                "<1,35>": "6MACTRONIX #1",
 | 
			
		||||
                "<1,36>": "6MACTRONIX #2",
 | 
			
		||||
                "<1,37>": "6MACTRONIX #3",
 | 
			
		||||
                "<1,38>": "6MACTRONIX #4",
 | 
			
		||||
                "<1,39>": "8INLESS",
 | 
			
		||||
                "<1,40>": "8INLESS2",
 | 
			
		||||
                "<1,41>": "BAGGER1",
 | 
			
		||||
                "<1,42>": "BAGGER2",
 | 
			
		||||
                "<1,43>": "BAGGER3",
 | 
			
		||||
                "<1,44>": "BAGGER4",
 | 
			
		||||
                "<1,45>": "6INFF01",
 | 
			
		||||
                "<1,46>": "6INFF02",
 | 
			
		||||
                "<1,47>": "6INFF03",
 | 
			
		||||
                "<1,48>": "6INFF04",
 | 
			
		||||
                "<1,49>": "6INFF05",
 | 
			
		||||
                "<1,50>": "6INFF06",
 | 
			
		||||
                "<1,51>": "6INFF07",
 | 
			
		||||
                "<1,52>": "6INFF08",
 | 
			
		||||
                "<1,53>": "6INFF09",
 | 
			
		||||
                "<1,54>": "6INFF10",
 | 
			
		||||
                "<1,55>": "8INNF01",
 | 
			
		||||
                "<1,56>": "8INNF02",
 | 
			
		||||
                "<1,57>": "8INNF03",
 | 
			
		||||
                "<1,58>": "8INNF04",
 | 
			
		||||
                "<1,59>": "8INNF05",
 | 
			
		||||
                "<1,60>": "8INFF01",
 | 
			
		||||
                "<1,61>": "8INFF02",
 | 
			
		||||
                "<1,62>": "8INFF03",
 | 
			
		||||
                "<1,63>": "8INFF04",
 | 
			
		||||
                "<1,64>": "MACTRONIX #1",
 | 
			
		||||
                "<1,65>": "MACTRONIX #2 ",
 | 
			
		||||
                "<1,66>": "MACTRONIX #3",
 | 
			
		||||
                "<1,67>": "MACTRONIX #4",
 | 
			
		||||
                "<1,68>": "MACTRONIX #5",
 | 
			
		||||
                "<1,69>": "MACTRONIX #6",
 | 
			
		||||
                "<1,70>": "MACTRONIX #7",
 | 
			
		||||
                "<1,71>": "TALL_PITCH1",
 | 
			
		||||
                "<1,72>": "TALL_PITCH2",
 | 
			
		||||
                "<1,73>": "TALL_PITCH3",
 | 
			
		||||
                "<1,74>": "TALL_PITCH4",
 | 
			
		||||
                "<1,75>": "WC6INCH1",
 | 
			
		||||
                "<1,76>": "WC6INCH2",
 | 
			
		||||
                "<1,77>": "WC6INCH3",
 | 
			
		||||
                "<1,78>": "WC6INCH4",
 | 
			
		||||
                "<1,79>": "WC8INCH1",
 | 
			
		||||
                "<1,80>": "WC8INCH2",
 | 
			
		||||
                "<1,81>": "WC8INCH3",
 | 
			
		||||
                "<1,82>": "ELLP01",
 | 
			
		||||
                "<1,83>": "LEAKCHK01",
 | 
			
		||||
                "<1,84>": "LEAKCHK02",
 | 
			
		||||
                "<1,85>": "TBI #1"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "declare function set_printer, Get_Property\r\ndeclare subroutine record_lock, Set_Property\r\n$insert msg_equates\r\n$insert lsl_users_equ\r\n\r\n*Void = Set_Property('SYSTSEM','IDLEPROC','')\r\nVoid = Set_Property(@WINDOW,'TIMER','')\r\n\r\n\r\nUNLOCK All\r\n/*\r\nDEAD - 1/27/2005 JCH\r\n* will write out the x and y coords for the user, so the menu comes up at the last used\r\n* location\r\nWinSize = get_property( @window, 'SIZE' )\r\nX = WinSize<1>\r\nY = WinSize<2>\r\nXsize = WinSize<3>\r\nYsize = WinSize<4>\r\n\r\nIF @USERNAME = 'BRYCE_BARB' THEN DEBUG\r\n\r\nopen 'LSL_USERS' to LSLUsersTableVar else\r\n   MsgInfo = ''\r\n   MsgInfo<mtext$> = 'Unable to open LSL_USERS...'\r\n   MsgInfo<mcol$> = -2\r\n   MsgInfo<mrow$> = -2\r\n   Void = msg( '', MsgInfo )\r\nend\r\n\r\nread UserRec from LSLUsersTableVar, @user4 then\r\n\t   \r\n\t*UserRec = xlate( 'LSL_USERS', @user4, '', 'X' )\r\n\tUserRec<lsl_users_menu_xpos$> = X\r\n\tUserRec<lsl_users_menu_ypos$> = Y\r\n\tUserRec<lsl_users_menu_xsize$> = Xsize\r\n\tUserRec<lsl_users_menu_ysize$> = Ysize\r\n\twrite UserRec on LSLUsersTableVar, @user4 else Null\r\n\r\nEND;* End of User Rec Read\r\n*/\r\n\r\nRETURN 1\r\n"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "DECLARE FUNCTION Start_Window\r\n\r\nvoid = Start_Window('REACT_STATUS_EVEN',@WINDOW,'')\r\nvoid = Start_Window('REACT_STATUS_ODD',@WINDOW,'')\r\n\r\nvoid = Start_Window('TOOL_STATUS',@WINDOW,'')\r\n\r\n\r\nRETURN 1"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "DECLARE subroutine Print_Barcode_Label, ErrMsg\r\nDECLARE function Popup\r\n\r\nUserIDs = Popup(@WINDOW,TypeOver,'USER_ID')\t;* Popup uses active select list created with MAKE.LIST\r\n\r\nIF UserIDs = '' THEN\r\n\tErrMsg('No users selected...')\r\n\tRETURN\r\nEND\r\n\r\nUserCnt = COUNT(UserIDs,@VM) + (UserIDs NE '')\r\n\r\n\r\nIDList = ''\r\nFOR I = 1 TO UserCnt\r\n\tUserID = UserIDs<1,I>\r\nNEXT I\r\n\r\nPrint_Barcode_Label ('EmployeeBadge', UserIDs)\r\n\r\nRETURN 0"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "declare subroutine forward_event\r\n\r\nforward_event( x, y, Width, Height )\r\n*.group_1->size = -10:@fm:-10:@fm:Width:@fm:Height\r\nRETURN 0"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "\r\nDeclare subroutine Post_Event, Set_Property\r\n\r\n*If @User4 EQ 'ERIK_L' then Set_Property(@Window, '@CLOSE', 1)\r\n\r\nClose = Get_Property(@Window, '@CLOSE')\r\n\r\nCurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')\r\n\r\nOPEN 'SYSLISTS' TO ListsFile THEN\r\n\tStation = @STATION\r\n\tStation = Station[1,'_']\t\t\r\n\tListKey = Station:'*KEEP_ALIVE'\r\n\tListRec = @USERNAME:@FM:CurrDTM\r\n\tWRITE ListRec ON ListsFile,ListKey ELSE NULL\r\nEND \r\n\r\n\r\nRETURN 1"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,402 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "1010",
 | 
			
		||||
            "<2>": "1",
 | 
			
		||||
            "<3>": ""
 | 
			
		||||
        },
 | 
			
		||||
        "record2": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "LSL_MAIN",
 | 
			
		||||
                "<1,2>": "",
 | 
			
		||||
                "<1,3>": "WINDOW",
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "147",
 | 
			
		||||
                "<1,6>": "181",
 | 
			
		||||
                "<1,7>": "-631",
 | 
			
		||||
                "<1,8>": "-427",
 | 
			
		||||
                "<1,9>": "Infineon Technologies",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x92C70000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x100",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "0",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": "",
 | 
			
		||||
                "<1,19>": "",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": {
 | 
			
		||||
                    "<1,24,1>": "0",
 | 
			
		||||
                    "<1,24,2>": "0",
 | 
			
		||||
                    "<1,24,3>": "0",
 | 
			
		||||
                    "<1,24,4>": "0",
 | 
			
		||||
                    "<1,24,5>": "0",
 | 
			
		||||
                    "<1,24,6>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": {
 | 
			
		||||
                    "<1,32,1>": "0x7FFFE",
 | 
			
		||||
                    "<1,32,2>": "0xF001E988"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*DATASET",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
                    "<1,37,1>": "0x10001",
 | 
			
		||||
                    "<1,37,2>": "0x10001"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,38>": {
 | 
			
		||||
                    "<1,38,1>": "1",
 | 
			
		||||
                    "<1,38,2>": "1"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "0",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
                "<1,44>": "",
 | 
			
		||||
                "<1,45>": "",
 | 
			
		||||
                "<1,46>": "",
 | 
			
		||||
                "<1,47>": "",
 | 
			
		||||
                "<1,48>": "",
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record3": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "MDICLIENT",
 | 
			
		||||
                "<1,2>": "RTIMDICLIENT",
 | 
			
		||||
                "<1,3>": "MDICLIENT",
 | 
			
		||||
                "<1,4>": "LSL_MAIN",
 | 
			
		||||
                "<1,5>": "3",
 | 
			
		||||
                "<1,6>": "7",
 | 
			
		||||
                "<1,7>": "-625",
 | 
			
		||||
                "<1,8>": "-607",
 | 
			
		||||
                "<1,9>": "",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x56B00000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0xC000",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "1",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": "",
 | 
			
		||||
                "<1,19>": "",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": "",
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": {
 | 
			
		||||
                    "<1,32,1>": "0x7fffc",
 | 
			
		||||
                    "<1,32,2>": "0xf001c808"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": "",
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "1"
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": ""
 | 
			
		||||
        },
 | 
			
		||||
        "record4": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": {
 | 
			
		||||
                    "<1,1,1>": "MENU",
 | 
			
		||||
                    "<1,1,2>": "4",
 | 
			
		||||
                    "<1,1,3>": "",
 | 
			
		||||
                    "<1,1,4>": "",
 | 
			
		||||
                    "<1,1,5>": "0",
 | 
			
		||||
                    "<1,1,6>": "0",
 | 
			
		||||
                    "<1,1,7>": "0",
 | 
			
		||||
                    "<1,1,8>": "0",
 | 
			
		||||
                    "<1,1,9>": "12",
 | 
			
		||||
                    "<1,1,10>": "",
 | 
			
		||||
                    "<1,1,11>": "0",
 | 
			
		||||
                    "<1,1,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,2>": {
 | 
			
		||||
                    "<1,2,1>": "POPUP",
 | 
			
		||||
                    "<1,2,2>": "1",
 | 
			
		||||
                    "<1,2,3>": "",
 | 
			
		||||
                    "<1,2,4>": "&File",
 | 
			
		||||
                    "<1,2,5>": "0",
 | 
			
		||||
                    "<1,2,6>": "0",
 | 
			
		||||
                    "<1,2,7>": "0",
 | 
			
		||||
                    "<1,2,8>": "0",
 | 
			
		||||
                    "<1,2,9>": "",
 | 
			
		||||
                    "<1,2,10>": "",
 | 
			
		||||
                    "<1,2,11>": "0",
 | 
			
		||||
                    "<1,2,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,3>": {
 | 
			
		||||
                    "<1,3,1>": "ITEM",
 | 
			
		||||
                    "<1,3,2>": "",
 | 
			
		||||
                    "<1,3,3>": "",
 | 
			
		||||
                    "<1,3,4>": "E&xit\tAlt+F4",
 | 
			
		||||
                    "<1,3,5>": "0",
 | 
			
		||||
                    "<1,3,6>": "0",
 | 
			
		||||
                    "<1,3,7>": "0",
 | 
			
		||||
                    "<1,3,8>": "1139",
 | 
			
		||||
                    "<1,3,9>": "",
 | 
			
		||||
                    "<1,3,10>": "",
 | 
			
		||||
                    "<1,3,11>": "0",
 | 
			
		||||
                    "<1,3,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,4>": {
 | 
			
		||||
                    "<1,4,1>": "POPUP",
 | 
			
		||||
                    "<1,4,2>": "2",
 | 
			
		||||
                    "<1,4,3>": "",
 | 
			
		||||
                    "<1,4,4>": "&DataWindows",
 | 
			
		||||
                    "<1,4,5>": "0",
 | 
			
		||||
                    "<1,4,6>": "0",
 | 
			
		||||
                    "<1,4,7>": "0",
 | 
			
		||||
                    "<1,4,8>": "0",
 | 
			
		||||
                    "<1,4,9>": "",
 | 
			
		||||
                    "<1,4,10>": "",
 | 
			
		||||
                    "<1,4,11>": "0",
 | 
			
		||||
                    "<1,4,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,5>": {
 | 
			
		||||
                    "<1,5,1>": "ITEM",
 | 
			
		||||
                    "<1,5,2>": "",
 | 
			
		||||
                    "<1,5,3>": "",
 | 
			
		||||
                    "<1,5,4>": "&Company",
 | 
			
		||||
                    "<1,5,5>": "0",
 | 
			
		||||
                    "<1,5,6>": "0",
 | 
			
		||||
                    "<1,5,7>": "0",
 | 
			
		||||
                    "<1,5,8>": "0",
 | 
			
		||||
                    "<1,5,9>": "",
 | 
			
		||||
                    "<1,5,10>": "",
 | 
			
		||||
                    "<1,5,11>": "0",
 | 
			
		||||
                    "<1,5,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,6>": {
 | 
			
		||||
                    "<1,6,1>": "ITEM",
 | 
			
		||||
                    "<1,6,2>": "",
 | 
			
		||||
                    "<1,6,3>": "",
 | 
			
		||||
                    "<1,6,4>": "&Personal Names",
 | 
			
		||||
                    "<1,6,5>": "0",
 | 
			
		||||
                    "<1,6,6>": "0",
 | 
			
		||||
                    "<1,6,7>": "0",
 | 
			
		||||
                    "<1,6,8>": "0",
 | 
			
		||||
                    "<1,6,9>": "",
 | 
			
		||||
                    "<1,6,10>": "",
 | 
			
		||||
                    "<1,6,11>": "0",
 | 
			
		||||
                    "<1,6,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,7>": {
 | 
			
		||||
                    "<1,7,1>": "POPUP",
 | 
			
		||||
                    "<1,7,2>": "2",
 | 
			
		||||
                    "<1,7,3>": "",
 | 
			
		||||
                    "<1,7,4>": "&Messages",
 | 
			
		||||
                    "<1,7,5>": "0",
 | 
			
		||||
                    "<1,7,6>": "0",
 | 
			
		||||
                    "<1,7,7>": "0",
 | 
			
		||||
                    "<1,7,8>": "0",
 | 
			
		||||
                    "<1,7,9>": "",
 | 
			
		||||
                    "<1,7,10>": "",
 | 
			
		||||
                    "<1,7,11>": "0",
 | 
			
		||||
                    "<1,7,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,8>": {
 | 
			
		||||
                    "<1,8,1>": "ITEM",
 | 
			
		||||
                    "<1,8,2>": "",
 | 
			
		||||
                    "<1,8,3>": "",
 | 
			
		||||
                    "<1,8,4>": "&New",
 | 
			
		||||
                    "<1,8,5>": "0",
 | 
			
		||||
                    "<1,8,6>": "0",
 | 
			
		||||
                    "<1,8,7>": "0",
 | 
			
		||||
                    "<1,8,8>": "0",
 | 
			
		||||
                    "<1,8,9>": "",
 | 
			
		||||
                    "<1,8,10>": "",
 | 
			
		||||
                    "<1,8,11>": "0",
 | 
			
		||||
                    "<1,8,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,9>": {
 | 
			
		||||
                    "<1,9,1>": "ITEM",
 | 
			
		||||
                    "<1,9,2>": "",
 | 
			
		||||
                    "<1,9,3>": "",
 | 
			
		||||
                    "<1,9,4>": "&Check/View",
 | 
			
		||||
                    "<1,9,5>": "0",
 | 
			
		||||
                    "<1,9,6>": "0",
 | 
			
		||||
                    "<1,9,7>": "0",
 | 
			
		||||
                    "<1,9,8>": "0",
 | 
			
		||||
                    "<1,9,9>": "",
 | 
			
		||||
                    "<1,9,10>": "",
 | 
			
		||||
                    "<1,9,11>": "0",
 | 
			
		||||
                    "<1,9,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "POPUP",
 | 
			
		||||
                    "<1,10,2>": "2",
 | 
			
		||||
                    "<1,10,3>": "",
 | 
			
		||||
                    "<1,10,4>": "&Help",
 | 
			
		||||
                    "<1,10,5>": "0",
 | 
			
		||||
                    "<1,10,6>": "0",
 | 
			
		||||
                    "<1,10,7>": "0",
 | 
			
		||||
                    "<1,10,8>": "0",
 | 
			
		||||
                    "<1,10,9>": "",
 | 
			
		||||
                    "<1,10,10>": "",
 | 
			
		||||
                    "<1,10,11>": "0",
 | 
			
		||||
                    "<1,10,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "ITEM",
 | 
			
		||||
                    "<1,11,2>": "",
 | 
			
		||||
                    "<1,11,3>": "",
 | 
			
		||||
                    "<1,11,4>": "&Help\tF1",
 | 
			
		||||
                    "<1,11,5>": "0",
 | 
			
		||||
                    "<1,11,6>": "0",
 | 
			
		||||
                    "<1,11,7>": "0",
 | 
			
		||||
                    "<1,11,8>": "112",
 | 
			
		||||
                    "<1,11,9>": "",
 | 
			
		||||
                    "<1,11,10>": "",
 | 
			
		||||
                    "<1,11,11>": "0",
 | 
			
		||||
                    "<1,11,12>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": {
 | 
			
		||||
                    "<1,12,1>": "ITEM",
 | 
			
		||||
                    "<1,12,2>": "",
 | 
			
		||||
                    "<1,12,3>": "",
 | 
			
		||||
                    "<1,12,4>": "&About\tCtrl+F1",
 | 
			
		||||
                    "<1,12,5>": "0",
 | 
			
		||||
                    "<1,12,6>": "0",
 | 
			
		||||
                    "<1,12,7>": "0",
 | 
			
		||||
                    "<1,12,8>": "624",
 | 
			
		||||
                    "<1,12,9>": "",
 | 
			
		||||
                    "<1,12,10>": "",
 | 
			
		||||
                    "<1,12,11>": "0",
 | 
			
		||||
                    "<1,12,12>": ""
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "",
 | 
			
		||||
                "<2,2>": {
 | 
			
		||||
                    "<2,2,1>": {
 | 
			
		||||
                        "<2,2,1,1>": "E",
 | 
			
		||||
                        "<2,2,1,2>": "CLOSE",
 | 
			
		||||
                        "<2,2,1,3>": "@WINDOW",
 | 
			
		||||
                        "<2,2,1,4>": "",
 | 
			
		||||
                        "<2,2,1,5>": "",
 | 
			
		||||
                        "<2,2,1,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,2>": {
 | 
			
		||||
                        "<2,2,2,1>": "R",
 | 
			
		||||
                        "<2,2,2,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,2,3>": "LSL2*OIWINEXE**COMPANY",
 | 
			
		||||
                        "<2,2,2,4>": {
 | 
			
		||||
                            "<2,2,2,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,2,4,2>": "LSL_MAIN"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,2,5>": "",
 | 
			
		||||
                        "<2,2,2,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,3>": {
 | 
			
		||||
                        "<2,2,3,1>": "R",
 | 
			
		||||
                        "<2,2,3,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,3,3>": "LSL2*OIWINEXE**P_NAMES",
 | 
			
		||||
                        "<2,2,3,4>": {
 | 
			
		||||
                            "<2,2,3,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,3,4,2>": "LSL_MAIN"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,3,5>": "",
 | 
			
		||||
                        "<2,2,3,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,4>": {
 | 
			
		||||
                        "<2,2,4,1>": "R",
 | 
			
		||||
                        "<2,2,4,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,4,3>": "LSL2*OIWINEXE**NOTES",
 | 
			
		||||
                        "<2,2,4,4>": {
 | 
			
		||||
                            "<2,2,4,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,4,4,2>": "LSL_MAIN"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,4,5>": "",
 | 
			
		||||
                        "<2,2,4,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,5>": {
 | 
			
		||||
                        "<2,2,5,1>": "R",
 | 
			
		||||
                        "<2,2,5,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,5,3>": "LSL2*OIWINEXE**NOTE_PTRS",
 | 
			
		||||
                        "<2,2,5,4>": {
 | 
			
		||||
                            "<2,2,5,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,5,4,2>": "LSL_MAIN"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,5,5>": "",
 | 
			
		||||
                        "<2,2,5,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,6>": {
 | 
			
		||||
                        "<2,2,6,1>": "E",
 | 
			
		||||
                        "<2,2,6,2>": "HELP",
 | 
			
		||||
                        "<2,2,6,3>": "@FOCUS",
 | 
			
		||||
                        "<2,2,6,4>": "",
 | 
			
		||||
                        "<2,2,6,5>": "",
 | 
			
		||||
                        "<2,2,6,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,7>": {
 | 
			
		||||
                        "<2,2,7,1>": "E",
 | 
			
		||||
                        "<2,2,7,2>": "NOTES",
 | 
			
		||||
                        "<2,2,7,3>": "@FOCUS",
 | 
			
		||||
                        "<2,2,7,4>": "",
 | 
			
		||||
                        "<2,2,7,5>": "",
 | 
			
		||||
                        "<2,2,7,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,8>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<2,3>": {
 | 
			
		||||
                    "<2,3,1>": "FILE.EXIT",
 | 
			
		||||
                    "<2,3,2>": "DATAWINDOWS.COMPANY",
 | 
			
		||||
                    "<2,3,3>": "DATAWINDOWS.PERSONAL_NAMES",
 | 
			
		||||
                    "<2,3,4>": "MESSAGES.NEW",
 | 
			
		||||
                    "<2,3,5>": "MESSAGES.CHECK/VIEW",
 | 
			
		||||
                    "<2,3,6>": "HELP.HELP",
 | 
			
		||||
                    "<2,3,7>": "HELP.ABOUT",
 | 
			
		||||
                    "<2,3,8>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<2,4>": "0"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -17,8 +17,8 @@
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "136",
 | 
			
		||||
                "<1,6>": "201",
 | 
			
		||||
                "<1,7>": "-831",
 | 
			
		||||
                "<1,8>": "-522",
 | 
			
		||||
                "<1,7>": "-869",
 | 
			
		||||
                "<1,8>": "-498",
 | 
			
		||||
                "<1,9>": "5S",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x84CF0000",
 | 
			
		||||
@ -725,17 +725,17 @@
 | 
			
		||||
                "<4,2>": "",
 | 
			
		||||
                "<4,3>": "OLECONTROL.SRP.EditTable.1",
 | 
			
		||||
                "<4,4>": "NDW_5S",
 | 
			
		||||
                "<4,5>": "10",
 | 
			
		||||
                "<4,5>": "11",
 | 
			
		||||
                "<4,6>": "50",
 | 
			
		||||
                "<4,7>": "810",
 | 
			
		||||
                "<4,8>": "460",
 | 
			
		||||
                "<4,7>": "-10",
 | 
			
		||||
                "<4,8>": "-12",
 | 
			
		||||
                "<4,9>": "SRP.EditTable.1",
 | 
			
		||||
                "<4,10>": {
 | 
			
		||||
                    "<4,10,1>": "0x56000000",
 | 
			
		||||
                    "<4,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,11>": {
 | 
			
		||||
                    "<4,11,1>": "0x0",
 | 
			
		||||
                    "<4,11,1>": "0xC000",
 | 
			
		||||
                    "<4,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,12>": "2",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										675
									
								
								LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										675
									
								
								LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,675 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "1010",
 | 
			
		||||
            "<2>": "3",
 | 
			
		||||
            "<3>": ""
 | 
			
		||||
        },
 | 
			
		||||
        "record2": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<1,2>": "",
 | 
			
		||||
                "<1,3>": "WINDOW",
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "137",
 | 
			
		||||
                "<1,6>": "173",
 | 
			
		||||
                "<1,7>": "-765",
 | 
			
		||||
                "<1,8>": "-539",
 | 
			
		||||
                "<1,9>": "Process Message",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x84C80000",
 | 
			
		||||
                    "<1,10,2>": "0x101"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x8000",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": {
 | 
			
		||||
                    "<1,18,1>": {
 | 
			
		||||
                        "<1,18,1,1>": "X",
 | 
			
		||||
                        "<1,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<1,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<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,1,7>": "",
 | 
			
		||||
                        "<1,18,1,8>": "",
 | 
			
		||||
                        "<1,18,1,9>": "",
 | 
			
		||||
                        "<1,18,1,10>": "",
 | 
			
		||||
                        "<1,18,1,11>": "",
 | 
			
		||||
                        "<1,18,1,12>": "",
 | 
			
		||||
                        "<1,18,1,13>": "",
 | 
			
		||||
                        "<1,18,1,14>": "",
 | 
			
		||||
                        "<1,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<1,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<1,19>": "CREATE",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": {
 | 
			
		||||
                    "<1,24,1>": "",
 | 
			
		||||
                    "<1,24,2>": "0",
 | 
			
		||||
                    "<1,24,3>": "0",
 | 
			
		||||
                    "<1,24,4>": "0",
 | 
			
		||||
                    "<1,24,5>": "",
 | 
			
		||||
                    "<1,24,6>": "0",
 | 
			
		||||
                    "<1,24,7>": "",
 | 
			
		||||
                    "<1,24,8>": "",
 | 
			
		||||
                    "<1,24,9>": "",
 | 
			
		||||
                    "<1,24,10>": "0",
 | 
			
		||||
                    "<1,24,11>": "0",
 | 
			
		||||
                    "<1,24,12>": "0",
 | 
			
		||||
                    "<1,24,13>": "0",
 | 
			
		||||
                    "<1,24,14>": "0",
 | 
			
		||||
                    "<1,24,15>": "0",
 | 
			
		||||
                    "<1,24,16>": "0",
 | 
			
		||||
                    "<1,24,17>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<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,39>": "",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
                "<1,44>": "",
 | 
			
		||||
                "<1,45>": "",
 | 
			
		||||
                "<1,46>": "",
 | 
			
		||||
                "<1,47>": "",
 | 
			
		||||
                "<1,48>": "",
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": {
 | 
			
		||||
                    "<1,62,1>": "0",
 | 
			
		||||
                    "<1,62,2>": "",
 | 
			
		||||
                    "<1,62,3>": "",
 | 
			
		||||
                    "<1,62,4>": "2",
 | 
			
		||||
                    "<1,62,5>": "0",
 | 
			
		||||
                    "<1,62,6>": "0",
 | 
			
		||||
                    "<1,62,7>": "",
 | 
			
		||||
                    "<1,62,8>": "0.50",
 | 
			
		||||
                    "<1,62,9>": "5.00",
 | 
			
		||||
                    "<1,62,10>": "0.00"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "0",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record3": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "EDB_DATA",
 | 
			
		||||
                "<1,2>": "",
 | 
			
		||||
                "<1,3>": "EDITBOX",
 | 
			
		||||
                "<1,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<1,5>": "16",
 | 
			
		||||
                "<1,6>": "12",
 | 
			
		||||
                "<1,7>": "-17",
 | 
			
		||||
                "<1,8>": "-48",
 | 
			
		||||
                "<1,9>": "",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x56200840",
 | 
			
		||||
                    "<1,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0xC400",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "3",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "-2",
 | 
			
		||||
                "<1,15>": {
 | 
			
		||||
                    "<1,15,1>": {
 | 
			
		||||
                        "<1,15,1,1>": "Segoe UI",
 | 
			
		||||
                        "<1,15,1,2>": "-15",
 | 
			
		||||
                        "<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,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": "",
 | 
			
		||||
                "<1,19>": "",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": "",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "<<None>>",
 | 
			
		||||
                "<1,29>": "<<None>>",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "0",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": "",
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
                "<1,44>": "",
 | 
			
		||||
                "<1,45>": "",
 | 
			
		||||
                "<1,46>": "",
 | 
			
		||||
                "<1,47>": "",
 | 
			
		||||
                "<1,48>": "",
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": "0",
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "PUB_OK",
 | 
			
		||||
                "<2,2>": "",
 | 
			
		||||
                "<2,3>": "PUSHBUTTON",
 | 
			
		||||
                "<2,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<2,5>": "-184",
 | 
			
		||||
                "<2,6>": "-37",
 | 
			
		||||
                "<2,7>": "80",
 | 
			
		||||
                "<2,8>": "24",
 | 
			
		||||
                "<2,9>": "&OK",
 | 
			
		||||
                "<2,10>": {
 | 
			
		||||
                    "<2,10,1>": "0x56000300",
 | 
			
		||||
                    "<2,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,11>": {
 | 
			
		||||
                    "<2,11,1>": "0x3005",
 | 
			
		||||
                    "<2,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,12>": "1",
 | 
			
		||||
                "<2,13>": {
 | 
			
		||||
                    "<2,13,1>": "-2",
 | 
			
		||||
                    "<2,13,2>": "-2",
 | 
			
		||||
                    "<2,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,14>": "-2",
 | 
			
		||||
                "<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>": "1",
 | 
			
		||||
                        "<2,15,1,8>": "0",
 | 
			
		||||
                        "<2,15,1,9>": "0",
 | 
			
		||||
                        "<2,15,1,10>": "0",
 | 
			
		||||
                        "<2,15,1,11>": "0",
 | 
			
		||||
                        "<2,15,1,12>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<2,16>": "",
 | 
			
		||||
                "<2,17>": "",
 | 
			
		||||
                "<2,18>": {
 | 
			
		||||
                    "<2,18,1>": {
 | 
			
		||||
                        "<2,18,1,1>": "X",
 | 
			
		||||
                        "<2,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<2,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<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,1,7>": "",
 | 
			
		||||
                        "<2,18,1,8>": "",
 | 
			
		||||
                        "<2,18,1,9>": "",
 | 
			
		||||
                        "<2,18,1,10>": "",
 | 
			
		||||
                        "<2,18,1,11>": "",
 | 
			
		||||
                        "<2,18,1,12>": "",
 | 
			
		||||
                        "<2,18,1,13>": "",
 | 
			
		||||
                        "<2,18,1,14>": "",
 | 
			
		||||
                        "<2,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<2,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<2,19>": "CLICK",
 | 
			
		||||
                "<2,20>": "",
 | 
			
		||||
                "<2,21>": "",
 | 
			
		||||
                "<2,22>": "",
 | 
			
		||||
                "<2,23>": "",
 | 
			
		||||
                "<2,24>": "",
 | 
			
		||||
                "<2,25>": "",
 | 
			
		||||
                "<2,26>": "",
 | 
			
		||||
                "<2,27>": "",
 | 
			
		||||
                "<2,28>": "",
 | 
			
		||||
                "<2,29>": "",
 | 
			
		||||
                "<2,30>": "",
 | 
			
		||||
                "<2,31>": "",
 | 
			
		||||
                "<2,32>": "",
 | 
			
		||||
                "<2,33>": "",
 | 
			
		||||
                "<2,34>": "",
 | 
			
		||||
                "<2,35>": "",
 | 
			
		||||
                "<2,36>": "",
 | 
			
		||||
                "<2,37>": "",
 | 
			
		||||
                "<2,38>": "",
 | 
			
		||||
                "<2,39>": "",
 | 
			
		||||
                "<2,40>": "-1",
 | 
			
		||||
                "<2,41>": {
 | 
			
		||||
                    "<2,41,1>": "",
 | 
			
		||||
                    "<2,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,42>": "",
 | 
			
		||||
                "<2,43>": "",
 | 
			
		||||
                "<2,44>": "",
 | 
			
		||||
                "<2,45>": "",
 | 
			
		||||
                "<2,46>": "",
 | 
			
		||||
                "<2,47>": "",
 | 
			
		||||
                "<2,48>": "",
 | 
			
		||||
                "<2,49>": "",
 | 
			
		||||
                "<2,50>": "",
 | 
			
		||||
                "<2,51>": "",
 | 
			
		||||
                "<2,52>": "",
 | 
			
		||||
                "<2,53>": "",
 | 
			
		||||
                "<2,54>": "",
 | 
			
		||||
                "<2,55>": "",
 | 
			
		||||
                "<2,56>": "",
 | 
			
		||||
                "<2,57>": "",
 | 
			
		||||
                "<2,58>": "",
 | 
			
		||||
                "<2,59>": "",
 | 
			
		||||
                "<2,60>": "",
 | 
			
		||||
                "<2,61>": "",
 | 
			
		||||
                "<2,62>": "0",
 | 
			
		||||
                "<2,63>": "",
 | 
			
		||||
                "<2,64>": {
 | 
			
		||||
                    "<2,64,1>": "-2",
 | 
			
		||||
                    "<2,64,2>": "-2",
 | 
			
		||||
                    "<2,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,65>": "-2",
 | 
			
		||||
                "<2,66>": "",
 | 
			
		||||
                "<2,67>": "",
 | 
			
		||||
                "<2,68>": "",
 | 
			
		||||
                "<2,69>": "",
 | 
			
		||||
                "<2,70>": "",
 | 
			
		||||
                "<2,71>": "",
 | 
			
		||||
                "<2,72>": "",
 | 
			
		||||
                "<2,73>": "",
 | 
			
		||||
                "<2,74>": "",
 | 
			
		||||
                "<2,75>": "",
 | 
			
		||||
                "<2,76>": "",
 | 
			
		||||
                "<2,77>": "",
 | 
			
		||||
                "<2,78>": "",
 | 
			
		||||
                "<2,79>": "",
 | 
			
		||||
                "<2,80>": "",
 | 
			
		||||
                "<2,81>": "",
 | 
			
		||||
                "<2,82>": "",
 | 
			
		||||
                "<2,83>": "",
 | 
			
		||||
                "<2,84>": "",
 | 
			
		||||
                "<2,85>": "",
 | 
			
		||||
                "<2,86>": "",
 | 
			
		||||
                "<2,87>": "",
 | 
			
		||||
                "<2,88>": "",
 | 
			
		||||
                "<2,89>": "",
 | 
			
		||||
                "<2,90>": "0",
 | 
			
		||||
                "<2,91>": "0",
 | 
			
		||||
                "<2,92>": "",
 | 
			
		||||
                "<2,93>": "",
 | 
			
		||||
                "<2,94>": "",
 | 
			
		||||
                "<2,95>": "",
 | 
			
		||||
                "<2,96>": "",
 | 
			
		||||
                "<2,97>": "",
 | 
			
		||||
                "<2,98>": "",
 | 
			
		||||
                "<2,99>": "",
 | 
			
		||||
                "<2,100>": "",
 | 
			
		||||
                "<2,101>": "",
 | 
			
		||||
                "<2,102>": "",
 | 
			
		||||
                "<2,103>": "",
 | 
			
		||||
                "<2,104>": "",
 | 
			
		||||
                "<2,105>": "",
 | 
			
		||||
                "<2,106>": "",
 | 
			
		||||
                "<2,107>": "",
 | 
			
		||||
                "<2,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<3>": {
 | 
			
		||||
                "<3,1>": "PUB_CANCEL",
 | 
			
		||||
                "<3,2>": "",
 | 
			
		||||
                "<3,3>": "PUSHBUTTON",
 | 
			
		||||
                "<3,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<3,5>": "-97",
 | 
			
		||||
                "<3,6>": "-37",
 | 
			
		||||
                "<3,7>": "80",
 | 
			
		||||
                "<3,8>": "24",
 | 
			
		||||
                "<3,9>": "&Cancel",
 | 
			
		||||
                "<3,10>": {
 | 
			
		||||
                    "<3,10,1>": "0x56000300",
 | 
			
		||||
                    "<3,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,11>": {
 | 
			
		||||
                    "<3,11,1>": "0x3002",
 | 
			
		||||
                    "<3,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,12>": "2",
 | 
			
		||||
                "<3,13>": {
 | 
			
		||||
                    "<3,13,1>": "-2",
 | 
			
		||||
                    "<3,13,2>": "-2",
 | 
			
		||||
                    "<3,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,14>": "-2",
 | 
			
		||||
                "<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>": "1",
 | 
			
		||||
                        "<3,15,1,8>": "0",
 | 
			
		||||
                        "<3,15,1,9>": "0",
 | 
			
		||||
                        "<3,15,1,10>": "0",
 | 
			
		||||
                        "<3,15,1,11>": "0",
 | 
			
		||||
                        "<3,15,1,12>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,16>": "",
 | 
			
		||||
                "<3,17>": "",
 | 
			
		||||
                "<3,18>": {
 | 
			
		||||
                    "<3,18,1>": {
 | 
			
		||||
                        "<3,18,1,1>": "X",
 | 
			
		||||
                        "<3,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<3,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<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,1,7>": "",
 | 
			
		||||
                        "<3,18,1,8>": "",
 | 
			
		||||
                        "<3,18,1,9>": "",
 | 
			
		||||
                        "<3,18,1,10>": "",
 | 
			
		||||
                        "<3,18,1,11>": "",
 | 
			
		||||
                        "<3,18,1,12>": "",
 | 
			
		||||
                        "<3,18,1,13>": "",
 | 
			
		||||
                        "<3,18,1,14>": "",
 | 
			
		||||
                        "<3,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<3,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,19>": "CLICK",
 | 
			
		||||
                "<3,20>": "",
 | 
			
		||||
                "<3,21>": "",
 | 
			
		||||
                "<3,22>": "",
 | 
			
		||||
                "<3,23>": "",
 | 
			
		||||
                "<3,24>": "",
 | 
			
		||||
                "<3,25>": "",
 | 
			
		||||
                "<3,26>": "",
 | 
			
		||||
                "<3,27>": "",
 | 
			
		||||
                "<3,28>": "",
 | 
			
		||||
                "<3,29>": "",
 | 
			
		||||
                "<3,30>": "",
 | 
			
		||||
                "<3,31>": "",
 | 
			
		||||
                "<3,32>": "",
 | 
			
		||||
                "<3,33>": "",
 | 
			
		||||
                "<3,34>": "",
 | 
			
		||||
                "<3,35>": "",
 | 
			
		||||
                "<3,36>": "",
 | 
			
		||||
                "<3,37>": "",
 | 
			
		||||
                "<3,38>": "",
 | 
			
		||||
                "<3,39>": "",
 | 
			
		||||
                "<3,40>": "-1",
 | 
			
		||||
                "<3,41>": {
 | 
			
		||||
                    "<3,41,1>": "",
 | 
			
		||||
                    "<3,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,42>": "",
 | 
			
		||||
                "<3,43>": "",
 | 
			
		||||
                "<3,44>": "",
 | 
			
		||||
                "<3,45>": "",
 | 
			
		||||
                "<3,46>": "",
 | 
			
		||||
                "<3,47>": "",
 | 
			
		||||
                "<3,48>": "",
 | 
			
		||||
                "<3,49>": "",
 | 
			
		||||
                "<3,50>": "",
 | 
			
		||||
                "<3,51>": "",
 | 
			
		||||
                "<3,52>": "",
 | 
			
		||||
                "<3,53>": "",
 | 
			
		||||
                "<3,54>": "",
 | 
			
		||||
                "<3,55>": "",
 | 
			
		||||
                "<3,56>": "",
 | 
			
		||||
                "<3,57>": "",
 | 
			
		||||
                "<3,58>": "",
 | 
			
		||||
                "<3,59>": "",
 | 
			
		||||
                "<3,60>": "",
 | 
			
		||||
                "<3,61>": "",
 | 
			
		||||
                "<3,62>": "0",
 | 
			
		||||
                "<3,63>": "",
 | 
			
		||||
                "<3,64>": {
 | 
			
		||||
                    "<3,64,1>": "-2",
 | 
			
		||||
                    "<3,64,2>": "-2",
 | 
			
		||||
                    "<3,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,65>": "-2",
 | 
			
		||||
                "<3,66>": "",
 | 
			
		||||
                "<3,67>": "",
 | 
			
		||||
                "<3,68>": "",
 | 
			
		||||
                "<3,69>": "",
 | 
			
		||||
                "<3,70>": "",
 | 
			
		||||
                "<3,71>": "",
 | 
			
		||||
                "<3,72>": "",
 | 
			
		||||
                "<3,73>": "",
 | 
			
		||||
                "<3,74>": "",
 | 
			
		||||
                "<3,75>": "",
 | 
			
		||||
                "<3,76>": "",
 | 
			
		||||
                "<3,77>": "",
 | 
			
		||||
                "<3,78>": "",
 | 
			
		||||
                "<3,79>": "",
 | 
			
		||||
                "<3,80>": "",
 | 
			
		||||
                "<3,81>": "",
 | 
			
		||||
                "<3,82>": "",
 | 
			
		||||
                "<3,83>": "",
 | 
			
		||||
                "<3,84>": "",
 | 
			
		||||
                "<3,85>": "",
 | 
			
		||||
                "<3,86>": "",
 | 
			
		||||
                "<3,87>": "",
 | 
			
		||||
                "<3,88>": "",
 | 
			
		||||
                "<3,89>": "",
 | 
			
		||||
                "<3,90>": "0",
 | 
			
		||||
                "<3,91>": "0",
 | 
			
		||||
                "<3,92>": "",
 | 
			
		||||
                "<3,93>": "",
 | 
			
		||||
                "<3,94>": "",
 | 
			
		||||
                "<3,95>": "",
 | 
			
		||||
                "<3,96>": "",
 | 
			
		||||
                "<3,97>": "",
 | 
			
		||||
                "<3,98>": "",
 | 
			
		||||
                "<3,99>": "",
 | 
			
		||||
                "<3,100>": "",
 | 
			
		||||
                "<3,101>": "",
 | 
			
		||||
                "<3,102>": "",
 | 
			
		||||
                "<3,103>": "",
 | 
			
		||||
                "<3,104>": "",
 | 
			
		||||
                "<3,105>": "",
 | 
			
		||||
                "<3,106>": "",
 | 
			
		||||
                "<3,107>": "",
 | 
			
		||||
                "<3,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record4": {
 | 
			
		||||
            "<1>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -17,20 +17,24 @@
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "468",
 | 
			
		||||
                "<1,6>": "145",
 | 
			
		||||
                "<1,7>": "-661",
 | 
			
		||||
                "<1,7>": "-776",
 | 
			
		||||
                "<1,8>": "-581",
 | 
			
		||||
                "<1,9>": "PM History",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x94CF0000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                    "<1,10,1>": "0x84CF0000",
 | 
			
		||||
                    "<1,10,2>": "0x100"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x0",
 | 
			
		||||
                    "<1,11,1>": "0x8000",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "0",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,12>": "",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
@ -50,51 +54,61 @@
 | 
			
		||||
                            "<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,18,1,6>": "",
 | 
			
		||||
                        "<1,18,1,7>": "",
 | 
			
		||||
                        "<1,18,1,8>": "",
 | 
			
		||||
                        "<1,18,1,9>": "",
 | 
			
		||||
                        "<1,18,1,10>": "",
 | 
			
		||||
                        "<1,18,1,11>": "",
 | 
			
		||||
                        "<1,18,1,12>": "",
 | 
			
		||||
                        "<1,18,1,13>": "",
 | 
			
		||||
                        "<1,18,1,14>": "",
 | 
			
		||||
                        "<1,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<1,19>": "CREATE",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": {
 | 
			
		||||
                    "<1,24,1>": "0",
 | 
			
		||||
                    "<1,24,1>": "",
 | 
			
		||||
                    "<1,24,2>": "0",
 | 
			
		||||
                    "<1,24,3>": "0",
 | 
			
		||||
                    "<1,24,4>": "0",
 | 
			
		||||
                    "<1,24,5>": "0",
 | 
			
		||||
                    "<1,24,6>": "0"
 | 
			
		||||
                    "<1,24,5>": "",
 | 
			
		||||
                    "<1,24,6>": "0",
 | 
			
		||||
                    "<1,24,7>": "",
 | 
			
		||||
                    "<1,24,8>": "",
 | 
			
		||||
                    "<1,24,9>": "",
 | 
			
		||||
                    "<1,24,10>": "0",
 | 
			
		||||
                    "<1,24,11>": "0",
 | 
			
		||||
                    "<1,24,12>": "0",
 | 
			
		||||
                    "<1,24,13>": "0",
 | 
			
		||||
                    "<1,24,14>": "0",
 | 
			
		||||
                    "<1,24,15>": "0",
 | 
			
		||||
                    "<1,24,16>": "0",
 | 
			
		||||
                    "<1,24,17>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": {
 | 
			
		||||
                    "<1,32,1>": "0x7FFFE",
 | 
			
		||||
                    "<1,32,2>": "0xF001E808"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<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,37,1>": "0X10001",
 | 
			
		||||
                    "<1,37,2>": "0X10001"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "0",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
@ -106,7 +120,74 @@
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": ""
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": {
 | 
			
		||||
                    "<1,62,1>": "0",
 | 
			
		||||
                    "<1,62,2>": "",
 | 
			
		||||
                    "<1,62,3>": "",
 | 
			
		||||
                    "<1,62,4>": "0",
 | 
			
		||||
                    "<1,62,5>": "0",
 | 
			
		||||
                    "<1,62,6>": "0",
 | 
			
		||||
                    "<1,62,7>": "",
 | 
			
		||||
                    "<1,62,8>": "0.50",
 | 
			
		||||
                    "<1,62,9>": "5.00",
 | 
			
		||||
                    "<1,62,10>": "0.00"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "0",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record3": {
 | 
			
		||||
@ -117,19 +198,23 @@
 | 
			
		||||
                "<1,4>": "NDW_PM_HISTORY",
 | 
			
		||||
                "<1,5>": "10",
 | 
			
		||||
                "<1,6>": "50",
 | 
			
		||||
                "<1,7>": "640",
 | 
			
		||||
                "<1,8>": "520",
 | 
			
		||||
                "<1,7>": "-14",
 | 
			
		||||
                "<1,8>": "-11",
 | 
			
		||||
                "<1,9>": "SRP.EditTable.1",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x56000000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x4",
 | 
			
		||||
                    "<1,11,1>": "0xC004",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "1",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,15>": {
 | 
			
		||||
                    "<1,15,1>": {
 | 
			
		||||
@ -158,17 +243,14 @@
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": "",
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<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,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
@ -188,7 +270,89 @@
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": ""
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": {
 | 
			
		||||
                    "<1,55,1>": "OLE.AllowXPTheme",
 | 
			
		||||
                    "<1,55,2>": "OLE.ComboDropDown",
 | 
			
		||||
                    "<1,55,3>": "OLE.DblClickToEdit",
 | 
			
		||||
                    "<1,55,4>": "OLE.EditContextMenu",
 | 
			
		||||
                    "<1,55,5>": "OLE.EditText",
 | 
			
		||||
                    "<1,55,6>": "OLE.Focus",
 | 
			
		||||
                    "<1,55,7>": "OLE.HeaderRowCount",
 | 
			
		||||
                    "<1,55,8>": "OLE.Modified",
 | 
			
		||||
                    "<1,55,9>": "OLE.PassEnterKey",
 | 
			
		||||
                    "<1,55,10>": "OLE.ScrollBarsVisible",
 | 
			
		||||
                    "<1,55,11>": "OLE.SingleEscape",
 | 
			
		||||
                    "<1,55,12>": "OLE.TextRenderStyle"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,56>": {
 | 
			
		||||
                    "<1,56,1>": "0",
 | 
			
		||||
                    "<1,56,2>": "0",
 | 
			
		||||
                    "<1,56,3>": "1",
 | 
			
		||||
                    "<1,56,4>": "1",
 | 
			
		||||
                    "<1,56,5>": "",
 | 
			
		||||
                    "<1,56,6>": "0",
 | 
			
		||||
                    "<1,56,7>": "1",
 | 
			
		||||
                    "<1,56,8>": "0",
 | 
			
		||||
                    "<1,56,9>": "0",
 | 
			
		||||
                    "<1,56,10>": "Auto|Auto",
 | 
			
		||||
                    "<1,56,11>": "0",
 | 
			
		||||
                    "<1,56,12>": "EditField|Ellipses"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": "",
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "EDL_PM_SPEC",
 | 
			
		||||
@ -209,7 +373,11 @@
 | 
			
		||||
                    "<2,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,12>": "2",
 | 
			
		||||
                "<2,13>": "-2",
 | 
			
		||||
                "<2,13>": {
 | 
			
		||||
                    "<2,13,1>": "-2",
 | 
			
		||||
                    "<2,13,2>": "-2",
 | 
			
		||||
                    "<2,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<2,14>": "0",
 | 
			
		||||
                "<2,15>": {
 | 
			
		||||
                    "<2,15,1>": {
 | 
			
		||||
@ -238,21 +406,21 @@
 | 
			
		||||
                "<2,22>": "",
 | 
			
		||||
                "<2,23>": "",
 | 
			
		||||
                "<2,24>": "",
 | 
			
		||||
                "<2,25>": "0",
 | 
			
		||||
                "<2,26>": "0",
 | 
			
		||||
                "<2,25>": "",
 | 
			
		||||
                "<2,26>": "",
 | 
			
		||||
                "<2,27>": "",
 | 
			
		||||
                "<2,28>": "<<None>>",
 | 
			
		||||
                "<2,29>": "<<None>>",
 | 
			
		||||
                "<2,30>": "<<None>>",
 | 
			
		||||
                "<2,31>": "0",
 | 
			
		||||
                "<2,32>": {
 | 
			
		||||
                    "<2,32,1>": "0x7fffe",
 | 
			
		||||
                    "<2,32,2>": "0xf0016c08"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,32>": "",
 | 
			
		||||
                "<2,33>": "",
 | 
			
		||||
                "<2,34>": "",
 | 
			
		||||
                "<2,35>": "",
 | 
			
		||||
                "<2,36>": "",
 | 
			
		||||
                "<2,36>": {
 | 
			
		||||
                    "<2,36,1>": "0",
 | 
			
		||||
                    "<2,36,2>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,37>": "",
 | 
			
		||||
                "<2,38>": "",
 | 
			
		||||
                "<2,39>": "",
 | 
			
		||||
@ -268,7 +436,63 @@
 | 
			
		||||
                "<2,49>": "",
 | 
			
		||||
                "<2,50>": "",
 | 
			
		||||
                "<2,51>": "",
 | 
			
		||||
                "<2,52>": ""
 | 
			
		||||
                "<2,52>": "",
 | 
			
		||||
                "<2,53>": "",
 | 
			
		||||
                "<2,54>": "",
 | 
			
		||||
                "<2,55>": "",
 | 
			
		||||
                "<2,56>": "",
 | 
			
		||||
                "<2,57>": "",
 | 
			
		||||
                "<2,58>": "",
 | 
			
		||||
                "<2,59>": "",
 | 
			
		||||
                "<2,60>": "",
 | 
			
		||||
                "<2,61>": "",
 | 
			
		||||
                "<2,62>": "0",
 | 
			
		||||
                "<2,63>": "",
 | 
			
		||||
                "<2,64>": "",
 | 
			
		||||
                "<2,65>": "",
 | 
			
		||||
                "<2,66>": "",
 | 
			
		||||
                "<2,67>": "",
 | 
			
		||||
                "<2,68>": "",
 | 
			
		||||
                "<2,69>": "",
 | 
			
		||||
                "<2,70>": "",
 | 
			
		||||
                "<2,71>": "",
 | 
			
		||||
                "<2,72>": "",
 | 
			
		||||
                "<2,73>": "",
 | 
			
		||||
                "<2,74>": "",
 | 
			
		||||
                "<2,75>": "",
 | 
			
		||||
                "<2,76>": "",
 | 
			
		||||
                "<2,77>": "",
 | 
			
		||||
                "<2,78>": "",
 | 
			
		||||
                "<2,79>": "",
 | 
			
		||||
                "<2,80>": "",
 | 
			
		||||
                "<2,81>": "",
 | 
			
		||||
                "<2,82>": "",
 | 
			
		||||
                "<2,83>": "",
 | 
			
		||||
                "<2,84>": "",
 | 
			
		||||
                "<2,85>": "",
 | 
			
		||||
                "<2,86>": "",
 | 
			
		||||
                "<2,87>": "",
 | 
			
		||||
                "<2,88>": "",
 | 
			
		||||
                "<2,89>": "",
 | 
			
		||||
                "<2,90>": "",
 | 
			
		||||
                "<2,91>": "",
 | 
			
		||||
                "<2,92>": "",
 | 
			
		||||
                "<2,93>": "",
 | 
			
		||||
                "<2,94>": "",
 | 
			
		||||
                "<2,95>": "",
 | 
			
		||||
                "<2,96>": "",
 | 
			
		||||
                "<2,97>": "",
 | 
			
		||||
                "<2,98>": "",
 | 
			
		||||
                "<2,99>": "",
 | 
			
		||||
                "<2,100>": "",
 | 
			
		||||
                "<2,101>": "",
 | 
			
		||||
                "<2,102>": "",
 | 
			
		||||
                "<2,103>": "",
 | 
			
		||||
                "<2,104>": "",
 | 
			
		||||
                "<2,105>": "",
 | 
			
		||||
                "<2,106>": "",
 | 
			
		||||
                "<2,107>": "",
 | 
			
		||||
                "<2,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<3>": {
 | 
			
		||||
                "<3,1>": "PUB_EXPORT_TO_EXCEL",
 | 
			
		||||
@ -281,15 +505,19 @@
 | 
			
		||||
                "<3,8>": "30",
 | 
			
		||||
                "<3,9>": "Export To Excel",
 | 
			
		||||
                "<3,10>": {
 | 
			
		||||
                    "<3,10,1>": "0x56002000",
 | 
			
		||||
                    "<3,10,1>": "0x56002300",
 | 
			
		||||
                    "<3,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,11>": {
 | 
			
		||||
                    "<3,11,1>": "0x100",
 | 
			
		||||
                    "<3,11,1>": "0x0",
 | 
			
		||||
                    "<3,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,12>": "3",
 | 
			
		||||
                "<3,13>": "-2",
 | 
			
		||||
                "<3,13>": {
 | 
			
		||||
                    "<3,13,1>": "-2",
 | 
			
		||||
                    "<3,13,2>": "-2",
 | 
			
		||||
                    "<3,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,14>": "0",
 | 
			
		||||
                "<3,15>": {
 | 
			
		||||
                    "<3,15,1>": {
 | 
			
		||||
@ -327,30 +555,32 @@
 | 
			
		||||
                            "<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,18,1,6>": "",
 | 
			
		||||
                        "<3,18,1,7>": "",
 | 
			
		||||
                        "<3,18,1,8>": "",
 | 
			
		||||
                        "<3,18,1,9>": "",
 | 
			
		||||
                        "<3,18,1,10>": "",
 | 
			
		||||
                        "<3,18,1,11>": "",
 | 
			
		||||
                        "<3,18,1,12>": "",
 | 
			
		||||
                        "<3,18,1,13>": "",
 | 
			
		||||
                        "<3,18,1,14>": "",
 | 
			
		||||
                        "<3,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,19>": "CLICK",
 | 
			
		||||
                "<3,20>": "",
 | 
			
		||||
                "<3,21>": "",
 | 
			
		||||
                "<3,22>": "",
 | 
			
		||||
                "<3,23>": "",
 | 
			
		||||
                "<3,24>": "",
 | 
			
		||||
                "<3,25>": "0",
 | 
			
		||||
                "<3,26>": "0",
 | 
			
		||||
                "<3,25>": "",
 | 
			
		||||
                "<3,26>": "",
 | 
			
		||||
                "<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,28>": "",
 | 
			
		||||
                "<3,29>": "",
 | 
			
		||||
                "<3,30>": "",
 | 
			
		||||
                "<3,31>": "",
 | 
			
		||||
                "<3,32>": "",
 | 
			
		||||
                "<3,33>": "",
 | 
			
		||||
                "<3,34>": "",
 | 
			
		||||
                "<3,35>": "",
 | 
			
		||||
@ -359,7 +589,10 @@
 | 
			
		||||
                "<3,38>": "",
 | 
			
		||||
                "<3,39>": "",
 | 
			
		||||
                "<3,40>": "1",
 | 
			
		||||
                "<3,41>": "",
 | 
			
		||||
                "<3,41>": {
 | 
			
		||||
                    "<3,41,1>": "",
 | 
			
		||||
                    "<3,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,42>": "",
 | 
			
		||||
                "<3,43>": "",
 | 
			
		||||
                "<3,44>": "",
 | 
			
		||||
@ -370,7 +603,67 @@
 | 
			
		||||
                "<3,49>": "",
 | 
			
		||||
                "<3,50>": "",
 | 
			
		||||
                "<3,51>": "",
 | 
			
		||||
                "<3,52>": ""
 | 
			
		||||
                "<3,52>": "",
 | 
			
		||||
                "<3,53>": "",
 | 
			
		||||
                "<3,54>": "",
 | 
			
		||||
                "<3,55>": "",
 | 
			
		||||
                "<3,56>": "",
 | 
			
		||||
                "<3,57>": "",
 | 
			
		||||
                "<3,58>": "",
 | 
			
		||||
                "<3,59>": "",
 | 
			
		||||
                "<3,60>": "",
 | 
			
		||||
                "<3,61>": "",
 | 
			
		||||
                "<3,62>": "0",
 | 
			
		||||
                "<3,63>": "",
 | 
			
		||||
                "<3,64>": {
 | 
			
		||||
                    "<3,64,1>": "-2",
 | 
			
		||||
                    "<3,64,2>": "-2",
 | 
			
		||||
                    "<3,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,65>": "-2",
 | 
			
		||||
                "<3,66>": "",
 | 
			
		||||
                "<3,67>": "",
 | 
			
		||||
                "<3,68>": "",
 | 
			
		||||
                "<3,69>": "",
 | 
			
		||||
                "<3,70>": "",
 | 
			
		||||
                "<3,71>": "",
 | 
			
		||||
                "<3,72>": "",
 | 
			
		||||
                "<3,73>": "",
 | 
			
		||||
                "<3,74>": "",
 | 
			
		||||
                "<3,75>": "",
 | 
			
		||||
                "<3,76>": "",
 | 
			
		||||
                "<3,77>": "",
 | 
			
		||||
                "<3,78>": "",
 | 
			
		||||
                "<3,79>": "",
 | 
			
		||||
                "<3,80>": "",
 | 
			
		||||
                "<3,81>": "",
 | 
			
		||||
                "<3,82>": "",
 | 
			
		||||
                "<3,83>": "",
 | 
			
		||||
                "<3,84>": "",
 | 
			
		||||
                "<3,85>": "",
 | 
			
		||||
                "<3,86>": "",
 | 
			
		||||
                "<3,87>": "",
 | 
			
		||||
                "<3,88>": "",
 | 
			
		||||
                "<3,89>": "",
 | 
			
		||||
                "<3,90>": "0",
 | 
			
		||||
                "<3,91>": "0",
 | 
			
		||||
                "<3,92>": "",
 | 
			
		||||
                "<3,93>": "",
 | 
			
		||||
                "<3,94>": "",
 | 
			
		||||
                "<3,95>": "",
 | 
			
		||||
                "<3,96>": "",
 | 
			
		||||
                "<3,97>": "",
 | 
			
		||||
                "<3,98>": "",
 | 
			
		||||
                "<3,99>": "",
 | 
			
		||||
                "<3,100>": "",
 | 
			
		||||
                "<3,101>": "",
 | 
			
		||||
                "<3,102>": "",
 | 
			
		||||
                "<3,103>": "",
 | 
			
		||||
                "<3,104>": "",
 | 
			
		||||
                "<3,105>": "",
 | 
			
		||||
                "<3,106>": "",
 | 
			
		||||
                "<3,107>": "",
 | 
			
		||||
                "<3,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<4>": {
 | 
			
		||||
                "<4,1>": "PUB_SEARCH",
 | 
			
		||||
@ -383,15 +676,19 @@
 | 
			
		||||
                "<4,8>": "30",
 | 
			
		||||
                "<4,9>": "Search",
 | 
			
		||||
                "<4,10>": {
 | 
			
		||||
                    "<4,10,1>": "0x56002000",
 | 
			
		||||
                    "<4,10,1>": "0x56002300",
 | 
			
		||||
                    "<4,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,11>": {
 | 
			
		||||
                    "<4,11,1>": "0x100",
 | 
			
		||||
                    "<4,11,1>": "0x0",
 | 
			
		||||
                    "<4,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,12>": "4",
 | 
			
		||||
                "<4,13>": "-2",
 | 
			
		||||
                "<4,13>": {
 | 
			
		||||
                    "<4,13,1>": "-2",
 | 
			
		||||
                    "<4,13,2>": "-2",
 | 
			
		||||
                    "<4,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,14>": "0",
 | 
			
		||||
                "<4,15>": {
 | 
			
		||||
                    "<4,15,1>": {
 | 
			
		||||
@ -429,30 +726,32 @@
 | 
			
		||||
                            "<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,18,1,6>": "",
 | 
			
		||||
                        "<4,18,1,7>": "",
 | 
			
		||||
                        "<4,18,1,8>": "",
 | 
			
		||||
                        "<4,18,1,9>": "",
 | 
			
		||||
                        "<4,18,1,10>": "",
 | 
			
		||||
                        "<4,18,1,11>": "",
 | 
			
		||||
                        "<4,18,1,12>": "",
 | 
			
		||||
                        "<4,18,1,13>": "",
 | 
			
		||||
                        "<4,18,1,14>": "",
 | 
			
		||||
                        "<4,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<4,19>": "CLICK",
 | 
			
		||||
                "<4,20>": "",
 | 
			
		||||
                "<4,21>": "",
 | 
			
		||||
                "<4,22>": "",
 | 
			
		||||
                "<4,23>": "",
 | 
			
		||||
                "<4,24>": "",
 | 
			
		||||
                "<4,25>": "0",
 | 
			
		||||
                "<4,26>": "0",
 | 
			
		||||
                "<4,25>": "",
 | 
			
		||||
                "<4,26>": "",
 | 
			
		||||
                "<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,28>": "",
 | 
			
		||||
                "<4,29>": "",
 | 
			
		||||
                "<4,30>": "",
 | 
			
		||||
                "<4,31>": "",
 | 
			
		||||
                "<4,32>": "",
 | 
			
		||||
                "<4,33>": "",
 | 
			
		||||
                "<4,34>": "",
 | 
			
		||||
                "<4,35>": "",
 | 
			
		||||
@ -461,7 +760,10 @@
 | 
			
		||||
                "<4,38>": "",
 | 
			
		||||
                "<4,39>": "",
 | 
			
		||||
                "<4,40>": "1",
 | 
			
		||||
                "<4,41>": "",
 | 
			
		||||
                "<4,41>": {
 | 
			
		||||
                    "<4,41,1>": "",
 | 
			
		||||
                    "<4,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,42>": "",
 | 
			
		||||
                "<4,43>": "",
 | 
			
		||||
                "<4,44>": "",
 | 
			
		||||
@ -472,18 +774,71 @@
 | 
			
		||||
                "<4,49>": "",
 | 
			
		||||
                "<4,50>": "",
 | 
			
		||||
                "<4,51>": "",
 | 
			
		||||
                "<4,52>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<5>": ""
 | 
			
		||||
                "<4,52>": "",
 | 
			
		||||
                "<4,53>": "",
 | 
			
		||||
                "<4,54>": "",
 | 
			
		||||
                "<4,55>": "",
 | 
			
		||||
                "<4,56>": "",
 | 
			
		||||
                "<4,57>": "",
 | 
			
		||||
                "<4,58>": "",
 | 
			
		||||
                "<4,59>": "",
 | 
			
		||||
                "<4,60>": "",
 | 
			
		||||
                "<4,61>": "",
 | 
			
		||||
                "<4,62>": "0",
 | 
			
		||||
                "<4,63>": "",
 | 
			
		||||
                "<4,64>": {
 | 
			
		||||
                    "<4,64,1>": "-2",
 | 
			
		||||
                    "<4,64,2>": "-2",
 | 
			
		||||
                    "<4,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,65>": "-2",
 | 
			
		||||
                "<4,66>": "",
 | 
			
		||||
                "<4,67>": "",
 | 
			
		||||
                "<4,68>": "",
 | 
			
		||||
                "<4,69>": "",
 | 
			
		||||
                "<4,70>": "",
 | 
			
		||||
                "<4,71>": "",
 | 
			
		||||
                "<4,72>": "",
 | 
			
		||||
                "<4,73>": "",
 | 
			
		||||
                "<4,74>": "",
 | 
			
		||||
                "<4,75>": "",
 | 
			
		||||
                "<4,76>": "",
 | 
			
		||||
                "<4,77>": "",
 | 
			
		||||
                "<4,78>": "",
 | 
			
		||||
                "<4,79>": "",
 | 
			
		||||
                "<4,80>": "",
 | 
			
		||||
                "<4,81>": "",
 | 
			
		||||
                "<4,82>": "",
 | 
			
		||||
                "<4,83>": "",
 | 
			
		||||
                "<4,84>": "",
 | 
			
		||||
                "<4,85>": "",
 | 
			
		||||
                "<4,86>": "",
 | 
			
		||||
                "<4,87>": "",
 | 
			
		||||
                "<4,88>": "",
 | 
			
		||||
                "<4,89>": "",
 | 
			
		||||
                "<4,90>": "0",
 | 
			
		||||
                "<4,91>": "0",
 | 
			
		||||
                "<4,92>": "",
 | 
			
		||||
                "<4,93>": "",
 | 
			
		||||
                "<4,94>": "",
 | 
			
		||||
                "<4,95>": "",
 | 
			
		||||
                "<4,96>": "",
 | 
			
		||||
                "<4,97>": "",
 | 
			
		||||
                "<4,98>": "",
 | 
			
		||||
                "<4,99>": "",
 | 
			
		||||
                "<4,100>": "",
 | 
			
		||||
                "<4,101>": "",
 | 
			
		||||
                "<4,102>": "",
 | 
			
		||||
                "<4,103>": "",
 | 
			
		||||
                "<4,104>": "",
 | 
			
		||||
                "<4,105>": "",
 | 
			
		||||
                "<4,106>": "",
 | 
			
		||||
                "<4,107>": "",
 | 
			
		||||
                "<4,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record4": {
 | 
			
		||||
            "<1>": "",
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "",
 | 
			
		||||
                "<2,2>": "",
 | 
			
		||||
                "<2,3>": "",
 | 
			
		||||
                "<2,4>": "0"
 | 
			
		||||
            }
 | 
			
		||||
            "<1>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -572,7 +572,7 @@
 | 
			
		||||
                "<3,8>": "28",
 | 
			
		||||
                "<3,9>": "",
 | 
			
		||||
                "<3,10>": {
 | 
			
		||||
                    "<3,10,1>": "0x5E000080",
 | 
			
		||||
                    "<3,10,1>": "0x5E000088",
 | 
			
		||||
                    "<3,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,11>": {
 | 
			
		||||
@ -739,7 +739,7 @@
 | 
			
		||||
                "<4,8>": "28",
 | 
			
		||||
                "<4,9>": "",
 | 
			
		||||
                "<4,10>": {
 | 
			
		||||
                    "<4,10,1>": "0x5E000080",
 | 
			
		||||
                    "<4,10,1>": "0x5E000088",
 | 
			
		||||
                    "<4,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,11>": {
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5207
									
								
								LSL2/OIWIN/PRS_STAGE_DEFECT_DEFAULTS.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5207
									
								
								LSL2/OIWIN/PRS_STAGE_DEFECT_DEFAULTS.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -423,7 +423,7 @@
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*INFINEON",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
 | 
			
		||||
@ -78,7 +78,7 @@
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*INFINEON",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
@ -18233,7 +18233,7 @@
 | 
			
		||||
                "<120,33>": "",
 | 
			
		||||
                "<120,34>": "",
 | 
			
		||||
                "<120,35>": "",
 | 
			
		||||
                "<120,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<120,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<120,37>": "",
 | 
			
		||||
                "<120,38>": "",
 | 
			
		||||
                "<120,39>": "",
 | 
			
		||||
@ -18430,7 +18430,7 @@
 | 
			
		||||
                "<121,33>": "",
 | 
			
		||||
                "<121,34>": "",
 | 
			
		||||
                "<121,35>": "",
 | 
			
		||||
                "<121,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<121,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<121,37>": "",
 | 
			
		||||
                "<121,38>": "",
 | 
			
		||||
                "<121,39>": "",
 | 
			
		||||
@ -18627,7 +18627,7 @@
 | 
			
		||||
                "<122,33>": "",
 | 
			
		||||
                "<122,34>": "",
 | 
			
		||||
                "<122,35>": "",
 | 
			
		||||
                "<122,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<122,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<122,37>": "",
 | 
			
		||||
                "<122,38>": "",
 | 
			
		||||
                "<122,39>": "",
 | 
			
		||||
@ -18824,7 +18824,7 @@
 | 
			
		||||
                "<123,33>": "",
 | 
			
		||||
                "<123,34>": "",
 | 
			
		||||
                "<123,35>": "",
 | 
			
		||||
                "<123,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<123,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<123,37>": "",
 | 
			
		||||
                "<123,38>": "",
 | 
			
		||||
                "<123,39>": "",
 | 
			
		||||
@ -19021,7 +19021,7 @@
 | 
			
		||||
                "<124,33>": "",
 | 
			
		||||
                "<124,34>": "",
 | 
			
		||||
                "<124,35>": "",
 | 
			
		||||
                "<124,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<124,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<124,37>": "",
 | 
			
		||||
                "<124,38>": "",
 | 
			
		||||
                "<124,39>": "",
 | 
			
		||||
@ -19218,7 +19218,7 @@
 | 
			
		||||
                "<125,33>": "",
 | 
			
		||||
                "<125,34>": "",
 | 
			
		||||
                "<125,35>": "",
 | 
			
		||||
                "<125,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<125,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<125,37>": "",
 | 
			
		||||
                "<125,38>": "",
 | 
			
		||||
                "<125,39>": "",
 | 
			
		||||
@ -19415,7 +19415,7 @@
 | 
			
		||||
                "<126,33>": "",
 | 
			
		||||
                "<126,34>": "",
 | 
			
		||||
                "<126,35>": "",
 | 
			
		||||
                "<126,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<126,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<126,37>": "",
 | 
			
		||||
                "<126,38>": "",
 | 
			
		||||
                "<126,39>": "",
 | 
			
		||||
@ -19612,7 +19612,7 @@
 | 
			
		||||
                "<127,33>": "",
 | 
			
		||||
                "<127,34>": "",
 | 
			
		||||
                "<127,35>": "",
 | 
			
		||||
                "<127,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<127,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<127,37>": "",
 | 
			
		||||
                "<127,38>": "",
 | 
			
		||||
                "<127,39>": "",
 | 
			
		||||
@ -19809,7 +19809,7 @@
 | 
			
		||||
                "<128,33>": "",
 | 
			
		||||
                "<128,34>": "",
 | 
			
		||||
                "<128,35>": "",
 | 
			
		||||
                "<128,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<128,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<128,37>": "",
 | 
			
		||||
                "<128,38>": "",
 | 
			
		||||
                "<128,39>": "",
 | 
			
		||||
@ -20006,7 +20006,7 @@
 | 
			
		||||
                "<129,33>": "",
 | 
			
		||||
                "<129,34>": "",
 | 
			
		||||
                "<129,35>": "",
 | 
			
		||||
                "<129,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<129,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<129,37>": "",
 | 
			
		||||
                "<129,38>": "",
 | 
			
		||||
                "<129,39>": "",
 | 
			
		||||
@ -20203,7 +20203,7 @@
 | 
			
		||||
                "<130,33>": "",
 | 
			
		||||
                "<130,34>": "",
 | 
			
		||||
                "<130,35>": "",
 | 
			
		||||
                "<130,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<130,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<130,37>": "",
 | 
			
		||||
                "<130,38>": "",
 | 
			
		||||
                "<130,39>": "",
 | 
			
		||||
@ -20400,7 +20400,7 @@
 | 
			
		||||
                "<131,33>": "",
 | 
			
		||||
                "<131,34>": "",
 | 
			
		||||
                "<131,35>": "",
 | 
			
		||||
                "<131,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<131,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<131,37>": "",
 | 
			
		||||
                "<131,38>": "",
 | 
			
		||||
                "<131,39>": "",
 | 
			
		||||
@ -20597,7 +20597,7 @@
 | 
			
		||||
                "<132,33>": "",
 | 
			
		||||
                "<132,34>": "",
 | 
			
		||||
                "<132,35>": "",
 | 
			
		||||
                "<132,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<132,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<132,37>": "",
 | 
			
		||||
                "<132,38>": "",
 | 
			
		||||
                "<132,39>": "",
 | 
			
		||||
@ -20794,7 +20794,7 @@
 | 
			
		||||
                "<133,33>": "",
 | 
			
		||||
                "<133,34>": "",
 | 
			
		||||
                "<133,35>": "",
 | 
			
		||||
                "<133,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<133,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<133,37>": "",
 | 
			
		||||
                "<133,38>": "",
 | 
			
		||||
                "<133,39>": "",
 | 
			
		||||
@ -20991,7 +20991,7 @@
 | 
			
		||||
                "<134,33>": "",
 | 
			
		||||
                "<134,34>": "",
 | 
			
		||||
                "<134,35>": "",
 | 
			
		||||
                "<134,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<134,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<134,37>": "",
 | 
			
		||||
                "<134,38>": "",
 | 
			
		||||
                "<134,39>": "",
 | 
			
		||||
@ -21188,7 +21188,7 @@
 | 
			
		||||
                "<135,33>": "",
 | 
			
		||||
                "<135,34>": "",
 | 
			
		||||
                "<135,35>": "",
 | 
			
		||||
                "<135,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<135,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<135,37>": "",
 | 
			
		||||
                "<135,38>": "",
 | 
			
		||||
                "<135,39>": "",
 | 
			
		||||
@ -21385,7 +21385,7 @@
 | 
			
		||||
                "<136,33>": "",
 | 
			
		||||
                "<136,34>": "",
 | 
			
		||||
                "<136,35>": "",
 | 
			
		||||
                "<136,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<136,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<136,37>": "",
 | 
			
		||||
                "<136,38>": "",
 | 
			
		||||
                "<136,39>": "",
 | 
			
		||||
@ -21582,7 +21582,7 @@
 | 
			
		||||
                "<137,33>": "",
 | 
			
		||||
                "<137,34>": "",
 | 
			
		||||
                "<137,35>": "",
 | 
			
		||||
                "<137,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<137,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<137,37>": "",
 | 
			
		||||
                "<137,38>": "",
 | 
			
		||||
                "<137,39>": "",
 | 
			
		||||
@ -21779,7 +21779,7 @@
 | 
			
		||||
                "<138,33>": "",
 | 
			
		||||
                "<138,34>": "",
 | 
			
		||||
                "<138,35>": "",
 | 
			
		||||
                "<138,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<138,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<138,37>": "",
 | 
			
		||||
                "<138,38>": "",
 | 
			
		||||
                "<138,39>": "",
 | 
			
		||||
@ -21976,7 +21976,7 @@
 | 
			
		||||
                "<139,33>": "",
 | 
			
		||||
                "<139,34>": "",
 | 
			
		||||
                "<139,35>": "",
 | 
			
		||||
                "<139,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<139,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<139,37>": "",
 | 
			
		||||
                "<139,38>": "",
 | 
			
		||||
                "<139,39>": "",
 | 
			
		||||
@ -22173,7 +22173,7 @@
 | 
			
		||||
                "<140,33>": "",
 | 
			
		||||
                "<140,34>": "",
 | 
			
		||||
                "<140,35>": "",
 | 
			
		||||
                "<140,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<140,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<140,37>": "",
 | 
			
		||||
                "<140,38>": "",
 | 
			
		||||
                "<140,39>": "",
 | 
			
		||||
@ -22370,7 +22370,7 @@
 | 
			
		||||
                "<141,33>": "",
 | 
			
		||||
                "<141,34>": "",
 | 
			
		||||
                "<141,35>": "",
 | 
			
		||||
                "<141,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<141,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<141,37>": "",
 | 
			
		||||
                "<141,38>": "",
 | 
			
		||||
                "<141,39>": "",
 | 
			
		||||
@ -22567,7 +22567,7 @@
 | 
			
		||||
                "<142,33>": "",
 | 
			
		||||
                "<142,34>": "",
 | 
			
		||||
                "<142,35>": "",
 | 
			
		||||
                "<142,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<142,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<142,37>": "",
 | 
			
		||||
                "<142,38>": "",
 | 
			
		||||
                "<142,39>": "",
 | 
			
		||||
@ -22764,7 +22764,7 @@
 | 
			
		||||
                "<143,33>": "",
 | 
			
		||||
                "<143,34>": "",
 | 
			
		||||
                "<143,35>": "",
 | 
			
		||||
                "<143,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<143,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<143,37>": "",
 | 
			
		||||
                "<143,38>": "",
 | 
			
		||||
                "<143,39>": "",
 | 
			
		||||
@ -22961,7 +22961,7 @@
 | 
			
		||||
                "<144,33>": "",
 | 
			
		||||
                "<144,34>": "",
 | 
			
		||||
                "<144,35>": "",
 | 
			
		||||
                "<144,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<144,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<144,37>": "",
 | 
			
		||||
                "<144,38>": "",
 | 
			
		||||
                "<144,39>": "",
 | 
			
		||||
@ -23158,7 +23158,7 @@
 | 
			
		||||
                "<145,33>": "",
 | 
			
		||||
                "<145,34>": "",
 | 
			
		||||
                "<145,35>": "",
 | 
			
		||||
                "<145,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<145,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<145,37>": "",
 | 
			
		||||
                "<145,38>": "",
 | 
			
		||||
                "<145,39>": "",
 | 
			
		||||
@ -23355,7 +23355,7 @@
 | 
			
		||||
                "<146,33>": "",
 | 
			
		||||
                "<146,34>": "",
 | 
			
		||||
                "<146,35>": "",
 | 
			
		||||
                "<146,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<146,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<146,37>": "",
 | 
			
		||||
                "<146,38>": "",
 | 
			
		||||
                "<146,39>": "",
 | 
			
		||||
@ -23552,7 +23552,7 @@
 | 
			
		||||
                "<147,33>": "",
 | 
			
		||||
                "<147,34>": "",
 | 
			
		||||
                "<147,35>": "",
 | 
			
		||||
                "<147,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<147,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<147,37>": "",
 | 
			
		||||
                "<147,38>": "",
 | 
			
		||||
                "<147,39>": "",
 | 
			
		||||
@ -23749,7 +23749,7 @@
 | 
			
		||||
                "<148,33>": "",
 | 
			
		||||
                "<148,34>": "",
 | 
			
		||||
                "<148,35>": "",
 | 
			
		||||
                "<148,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<148,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<148,37>": "",
 | 
			
		||||
                "<148,38>": "",
 | 
			
		||||
                "<148,39>": "",
 | 
			
		||||
@ -23946,7 +23946,7 @@
 | 
			
		||||
                "<149,33>": "",
 | 
			
		||||
                "<149,34>": "",
 | 
			
		||||
                "<149,35>": "",
 | 
			
		||||
                "<149,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<149,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<149,37>": "",
 | 
			
		||||
                "<149,38>": "",
 | 
			
		||||
                "<149,39>": "",
 | 
			
		||||
@ -24293,7 +24293,7 @@
 | 
			
		||||
                "<151,33>": "",
 | 
			
		||||
                "<151,34>": "",
 | 
			
		||||
                "<151,35>": "",
 | 
			
		||||
                "<151,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<151,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<151,37>": "",
 | 
			
		||||
                "<151,38>": "",
 | 
			
		||||
                "<151,39>": "",
 | 
			
		||||
@ -24490,7 +24490,7 @@
 | 
			
		||||
                "<152,33>": "",
 | 
			
		||||
                "<152,34>": "",
 | 
			
		||||
                "<152,35>": "",
 | 
			
		||||
                "<152,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<152,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<152,37>": "",
 | 
			
		||||
                "<152,38>": "",
 | 
			
		||||
                "<152,39>": "",
 | 
			
		||||
@ -24687,7 +24687,7 @@
 | 
			
		||||
                "<153,33>": "",
 | 
			
		||||
                "<153,34>": "",
 | 
			
		||||
                "<153,35>": "",
 | 
			
		||||
                "<153,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<153,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<153,37>": "",
 | 
			
		||||
                "<153,38>": "",
 | 
			
		||||
                "<153,39>": "",
 | 
			
		||||
@ -24884,7 +24884,7 @@
 | 
			
		||||
                "<154,33>": "",
 | 
			
		||||
                "<154,34>": "",
 | 
			
		||||
                "<154,35>": "",
 | 
			
		||||
                "<154,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<154,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<154,37>": "",
 | 
			
		||||
                "<154,38>": "",
 | 
			
		||||
                "<154,39>": "",
 | 
			
		||||
@ -25081,7 +25081,7 @@
 | 
			
		||||
                "<155,33>": "",
 | 
			
		||||
                "<155,34>": "",
 | 
			
		||||
                "<155,35>": "",
 | 
			
		||||
                "<155,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<155,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<155,37>": "",
 | 
			
		||||
                "<155,38>": "",
 | 
			
		||||
                "<155,39>": "",
 | 
			
		||||
@ -25278,7 +25278,7 @@
 | 
			
		||||
                "<156,33>": "",
 | 
			
		||||
                "<156,34>": "",
 | 
			
		||||
                "<156,35>": "",
 | 
			
		||||
                "<156,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<156,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<156,37>": "",
 | 
			
		||||
                "<156,38>": "",
 | 
			
		||||
                "<156,39>": "",
 | 
			
		||||
@ -25475,7 +25475,7 @@
 | 
			
		||||
                "<157,33>": "",
 | 
			
		||||
                "<157,34>": "",
 | 
			
		||||
                "<157,35>": "",
 | 
			
		||||
                "<157,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<157,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<157,37>": "",
 | 
			
		||||
                "<157,38>": "",
 | 
			
		||||
                "<157,39>": "",
 | 
			
		||||
@ -25672,7 +25672,7 @@
 | 
			
		||||
                "<158,33>": "",
 | 
			
		||||
                "<158,34>": "",
 | 
			
		||||
                "<158,35>": "",
 | 
			
		||||
                "<158,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<158,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<158,37>": "",
 | 
			
		||||
                "<158,38>": "",
 | 
			
		||||
                "<158,39>": "",
 | 
			
		||||
@ -25869,7 +25869,7 @@
 | 
			
		||||
                "<159,33>": "",
 | 
			
		||||
                "<159,34>": "",
 | 
			
		||||
                "<159,35>": "",
 | 
			
		||||
                "<159,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<159,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<159,37>": "",
 | 
			
		||||
                "<159,38>": "",
 | 
			
		||||
                "<159,39>": "",
 | 
			
		||||
@ -26066,7 +26066,7 @@
 | 
			
		||||
                "<160,33>": "",
 | 
			
		||||
                "<160,34>": "",
 | 
			
		||||
                "<160,35>": "",
 | 
			
		||||
                "<160,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<160,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<160,37>": "",
 | 
			
		||||
                "<160,38>": "",
 | 
			
		||||
                "<160,39>": "",
 | 
			
		||||
@ -26263,7 +26263,7 @@
 | 
			
		||||
                "<161,33>": "",
 | 
			
		||||
                "<161,34>": "",
 | 
			
		||||
                "<161,35>": "",
 | 
			
		||||
                "<161,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<161,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<161,37>": "",
 | 
			
		||||
                "<161,38>": "",
 | 
			
		||||
                "<161,39>": "",
 | 
			
		||||
@ -26460,7 +26460,7 @@
 | 
			
		||||
                "<162,33>": "",
 | 
			
		||||
                "<162,34>": "",
 | 
			
		||||
                "<162,35>": "",
 | 
			
		||||
                "<162,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<162,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<162,37>": "",
 | 
			
		||||
                "<162,38>": "",
 | 
			
		||||
                "<162,39>": "",
 | 
			
		||||
@ -26657,7 +26657,7 @@
 | 
			
		||||
                "<163,33>": "",
 | 
			
		||||
                "<163,34>": "",
 | 
			
		||||
                "<163,35>": "",
 | 
			
		||||
                "<163,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<163,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<163,37>": "",
 | 
			
		||||
                "<163,38>": "",
 | 
			
		||||
                "<163,39>": "",
 | 
			
		||||
@ -26854,7 +26854,7 @@
 | 
			
		||||
                "<164,33>": "",
 | 
			
		||||
                "<164,34>": "",
 | 
			
		||||
                "<164,35>": "",
 | 
			
		||||
                "<164,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<164,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<164,37>": "",
 | 
			
		||||
                "<164,38>": "",
 | 
			
		||||
                "<164,39>": "",
 | 
			
		||||
@ -27051,7 +27051,7 @@
 | 
			
		||||
                "<165,33>": "",
 | 
			
		||||
                "<165,34>": "",
 | 
			
		||||
                "<165,35>": "",
 | 
			
		||||
                "<165,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<165,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<165,37>": "",
 | 
			
		||||
                "<165,38>": "",
 | 
			
		||||
                "<165,39>": "",
 | 
			
		||||
@ -27248,7 +27248,7 @@
 | 
			
		||||
                "<166,33>": "",
 | 
			
		||||
                "<166,34>": "",
 | 
			
		||||
                "<166,35>": "",
 | 
			
		||||
                "<166,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<166,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<166,37>": "",
 | 
			
		||||
                "<166,38>": "",
 | 
			
		||||
                "<166,39>": "",
 | 
			
		||||
@ -27445,7 +27445,7 @@
 | 
			
		||||
                "<167,33>": "",
 | 
			
		||||
                "<167,34>": "",
 | 
			
		||||
                "<167,35>": "",
 | 
			
		||||
                "<167,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<167,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<167,37>": "",
 | 
			
		||||
                "<167,38>": "",
 | 
			
		||||
                "<167,39>": "",
 | 
			
		||||
@ -27642,7 +27642,7 @@
 | 
			
		||||
                "<168,33>": "",
 | 
			
		||||
                "<168,34>": "",
 | 
			
		||||
                "<168,35>": "",
 | 
			
		||||
                "<168,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<168,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<168,37>": "",
 | 
			
		||||
                "<168,38>": "",
 | 
			
		||||
                "<168,39>": "",
 | 
			
		||||
@ -27839,7 +27839,7 @@
 | 
			
		||||
                "<169,33>": "",
 | 
			
		||||
                "<169,34>": "",
 | 
			
		||||
                "<169,35>": "",
 | 
			
		||||
                "<169,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<169,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<169,37>": "",
 | 
			
		||||
                "<169,38>": "",
 | 
			
		||||
                "<169,39>": "",
 | 
			
		||||
@ -28036,7 +28036,7 @@
 | 
			
		||||
                "<170,33>": "",
 | 
			
		||||
                "<170,34>": "",
 | 
			
		||||
                "<170,35>": "",
 | 
			
		||||
                "<170,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<170,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<170,37>": "",
 | 
			
		||||
                "<170,38>": "",
 | 
			
		||||
                "<170,39>": "",
 | 
			
		||||
@ -28233,7 +28233,7 @@
 | 
			
		||||
                "<171,33>": "",
 | 
			
		||||
                "<171,34>": "",
 | 
			
		||||
                "<171,35>": "",
 | 
			
		||||
                "<171,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<171,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<171,37>": "",
 | 
			
		||||
                "<171,38>": "",
 | 
			
		||||
                "<171,39>": "",
 | 
			
		||||
@ -28430,7 +28430,7 @@
 | 
			
		||||
                "<172,33>": "",
 | 
			
		||||
                "<172,34>": "",
 | 
			
		||||
                "<172,35>": "",
 | 
			
		||||
                "<172,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<172,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<172,37>": "",
 | 
			
		||||
                "<172,38>": "",
 | 
			
		||||
                "<172,39>": "",
 | 
			
		||||
@ -28627,7 +28627,7 @@
 | 
			
		||||
                "<173,33>": "",
 | 
			
		||||
                "<173,34>": "",
 | 
			
		||||
                "<173,35>": "",
 | 
			
		||||
                "<173,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<173,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<173,37>": "",
 | 
			
		||||
                "<173,38>": "",
 | 
			
		||||
                "<173,39>": "",
 | 
			
		||||
@ -28824,7 +28824,7 @@
 | 
			
		||||
                "<174,33>": "",
 | 
			
		||||
                "<174,34>": "",
 | 
			
		||||
                "<174,35>": "",
 | 
			
		||||
                "<174,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<174,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<174,37>": "",
 | 
			
		||||
                "<174,38>": "",
 | 
			
		||||
                "<174,39>": "",
 | 
			
		||||
@ -29021,7 +29021,7 @@
 | 
			
		||||
                "<175,33>": "",
 | 
			
		||||
                "<175,34>": "",
 | 
			
		||||
                "<175,35>": "",
 | 
			
		||||
                "<175,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<175,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<175,37>": "",
 | 
			
		||||
                "<175,38>": "",
 | 
			
		||||
                "<175,39>": "",
 | 
			
		||||
@ -29218,7 +29218,7 @@
 | 
			
		||||
                "<176,33>": "",
 | 
			
		||||
                "<176,34>": "",
 | 
			
		||||
                "<176,35>": "",
 | 
			
		||||
                "<176,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<176,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<176,37>": "",
 | 
			
		||||
                "<176,38>": "",
 | 
			
		||||
                "<176,39>": "",
 | 
			
		||||
@ -29415,7 +29415,7 @@
 | 
			
		||||
                "<177,33>": "",
 | 
			
		||||
                "<177,34>": "",
 | 
			
		||||
                "<177,35>": "",
 | 
			
		||||
                "<177,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<177,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<177,37>": "",
 | 
			
		||||
                "<177,38>": "",
 | 
			
		||||
                "<177,39>": "",
 | 
			
		||||
@ -29612,7 +29612,7 @@
 | 
			
		||||
                "<178,33>": "",
 | 
			
		||||
                "<178,34>": "",
 | 
			
		||||
                "<178,35>": "",
 | 
			
		||||
                "<178,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<178,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<178,37>": "",
 | 
			
		||||
                "<178,38>": "",
 | 
			
		||||
                "<178,39>": "",
 | 
			
		||||
@ -29809,7 +29809,7 @@
 | 
			
		||||
                "<179,33>": "",
 | 
			
		||||
                "<179,34>": "",
 | 
			
		||||
                "<179,35>": "",
 | 
			
		||||
                "<179,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<179,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<179,37>": "",
 | 
			
		||||
                "<179,38>": "",
 | 
			
		||||
                "<179,39>": "",
 | 
			
		||||
@ -30006,7 +30006,7 @@
 | 
			
		||||
                "<180,33>": "",
 | 
			
		||||
                "<180,34>": "",
 | 
			
		||||
                "<180,35>": "",
 | 
			
		||||
                "<180,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF205300650067006F006500200055004900FCF03000FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<180,36>": "05000000000000000000000032000000FFFEFF044E006F006E006500FFFEFF0341006C006C00FFFEFF044E006F006E006500FFFEFF044E006F006E0065000100000001000000FFFEFF0D430065006E00740065007200FEF0430065006E00740065007200FFFEFF162E005C0042004D00500053005C004100630074006900760065005F0030003300310031002E0070006E006700FFFEFF075300740072006500740063006800FFFEFF044100750074006F00FFFEFF00FFFEFF044E006F006E006500FFFEFF225300650067006F006500200055004900FCF02D0031003100FCF0340030003000FCF03000FCF03000FCF03000FCF03100FCF03000FCF03000FCF03000FCF03000FCF03000000000000000F03FFFFEFF0D430065006E00740065007200FEF0430065006E007400650072000000000000000000000000000000000001000000",
 | 
			
		||||
                "<180,37>": "",
 | 
			
		||||
                "<180,38>": "",
 | 
			
		||||
                "<180,39>": "",
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -6655,13 +6655,6 @@
 | 
			
		||||
                        "<41,35,3,3>": "",
 | 
			
		||||
                        "<41,35,3,4>": "",
 | 
			
		||||
                        "<41,35,3,5>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<41,35,4>": {
 | 
			
		||||
                        "<41,35,4,1>": "",
 | 
			
		||||
                        "<41,35,4,2>": "",
 | 
			
		||||
                        "<41,35,4,3>": "",
 | 
			
		||||
                        "<41,35,4,4>": "",
 | 
			
		||||
                        "<41,35,4,5>": ""
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<41,36>": "",
 | 
			
		||||
@ -7886,7 +7879,7 @@
 | 
			
		||||
                    "<45,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<45,11>": {
 | 
			
		||||
                    "<45,11,1>": "0x0",
 | 
			
		||||
                    "<45,11,1>": "0x80000",
 | 
			
		||||
                    "<45,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<45,12>": "45",
 | 
			
		||||
@ -7922,7 +7915,7 @@
 | 
			
		||||
                "<45,21>": "",
 | 
			
		||||
                "<45,22>": "",
 | 
			
		||||
                "<45,23>": "WM_OUT",
 | 
			
		||||
                "<45,24>": "SPECIAL_INST",
 | 
			
		||||
                "<45,24>": "SPEC_INST",
 | 
			
		||||
                "<45,25>": "",
 | 
			
		||||
                "<45,26>": "",
 | 
			
		||||
                "<45,27>": "",
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -40,7 +40,7 @@
 | 
			
		||||
                "<8,2>": {
 | 
			
		||||
                    "<8,2,1>": "MET",
 | 
			
		||||
                    "<8,2,2>": "Metrology",
 | 
			
		||||
                    "<8,2,3>": "TODD_C,  JEANNE_M"
 | 
			
		||||
                    "<8,2,3>": "TODD_C, JEANNE_M, JFUENTE1, JUSTIN_H, JONATHON_S, MARROQUINBRA, TIFFANY_M"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,3>": {
 | 
			
		||||
                    "<8,3,1>": "MTC",
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,10 @@
 | 
			
		||||
                "<8,2>": {
 | 
			
		||||
                    "<8,2,1>": "Update QA Metrology Specs",
 | 
			
		||||
                    "<8,2,2>": "QA_MET"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,3>": {
 | 
			
		||||
                    "<8,3,1>": "Update RDS Layer Parameters",
 | 
			
		||||
                    "<8,3,2>": "UPDATE_RDS_LAYER"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<9>": {
 | 
			
		||||
@ -46,29 +50,21 @@
 | 
			
		||||
                    "<9,1,1>": "1",
 | 
			
		||||
                    "<9,1,2>": "20",
 | 
			
		||||
                    "<9,1,3>": "L",
 | 
			
		||||
                    "<9,1,4>": "",
 | 
			
		||||
                    "<9,1,4>": "L",
 | 
			
		||||
                    "<9,1,5>": "",
 | 
			
		||||
                    "<9,1,6>": "Window Option"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,2>": {
 | 
			
		||||
                    "<9,2,1>": "2",
 | 
			
		||||
                    "<9,2,2>": "0",
 | 
			
		||||
                    "<9,2,3>": "L",
 | 
			
		||||
                    "<9,2,4>": "",
 | 
			
		||||
                    "<9,2,3>": "R",
 | 
			
		||||
                    "<9,2,4>": "R",
 | 
			
		||||
                    "<9,2,5>": "",
 | 
			
		||||
                    "<9,2,6>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<9,3>": {
 | 
			
		||||
                    "<9,3,1>": "",
 | 
			
		||||
                    "<9,3,2>": "",
 | 
			
		||||
                    "<9,3,3>": "",
 | 
			
		||||
                    "<9,3,4>": "",
 | 
			
		||||
                    "<9,3,5>": "",
 | 
			
		||||
                    "<9,3,6>": ""
 | 
			
		||||
                    "<9,2,6>": "2"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<10>": "L",
 | 
			
		||||
            "<11>": "3",
 | 
			
		||||
            "<11>": "2",
 | 
			
		||||
            "<12>": "Engineering Options",
 | 
			
		||||
            "<13>": "2",
 | 
			
		||||
            "<14>": "F",
 | 
			
		||||
@ -91,8 +87,18 @@
 | 
			
		||||
            "<31>": "0",
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "0",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<34>": "-2",
 | 
			
		||||
            "<35>": "-2",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-2",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "Tahoma",
 | 
			
		||||
@ -76,11 +76,21 @@
 | 
			
		||||
            "<28>": "",
 | 
			
		||||
            "<29>": "0",
 | 
			
		||||
            "<30>": "0",
 | 
			
		||||
            "<31>": "0",
 | 
			
		||||
            "<31>": "1",
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "0",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<34>": "-2",
 | 
			
		||||
            "<35>": "-2",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-2",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "Tahoma",
 | 
			
		||||
@ -84,11 +84,21 @@
 | 
			
		||||
            "<28>": "",
 | 
			
		||||
            "<29>": "0",
 | 
			
		||||
            "<30>": "0",
 | 
			
		||||
            "<31>": "0",
 | 
			
		||||
            "<31>": "1",
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "0",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<34>": "-2",
 | 
			
		||||
            "<35>": "-2",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-1",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "Tahoma",
 | 
			
		||||
@ -31,7 +31,7 @@
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<7>": "REACT_ITEM",
 | 
			
		||||
            "<8>": "BY @ID",
 | 
			
		||||
            "<8>": "BY-DSND ENTER_DTM",
 | 
			
		||||
            "<9>": {
 | 
			
		||||
                "<9,1>": {
 | 
			
		||||
                    "<9,1,1>": "RI_NO",
 | 
			
		||||
@ -120,6 +120,22 @@
 | 
			
		||||
                    "<9,11,4>": "C",
 | 
			
		||||
                    "<9,11,5>": "D4/",
 | 
			
		||||
                    "<9,11,6>": "Retire Dt"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,12>": {
 | 
			
		||||
                    "<9,12,1>": "ENTER_DTM",
 | 
			
		||||
                    "<9,12,2>": "14",
 | 
			
		||||
                    "<9,12,3>": "L",
 | 
			
		||||
                    "<9,12,4>": "C",
 | 
			
		||||
                    "<9,12,5>": "DT2/^H",
 | 
			
		||||
                    "<9,12,6>": "Enter Dtm"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,13>": {
 | 
			
		||||
                    "<9,13,1>": "CURR_STATUS",
 | 
			
		||||
                    "<9,13,2>": "5",
 | 
			
		||||
                    "<9,13,3>": "L",
 | 
			
		||||
                    "<9,13,4>": "C",
 | 
			
		||||
                    "<9,13,5>": "[CONV_ITEM_CURR_STATUS]",
 | 
			
		||||
                    "<9,13,6>": "Curr Status"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<10>": "T",
 | 
			
		||||
@ -147,7 +163,17 @@
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<35>": "16766894",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-1",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "Tahoma",
 | 
			
		||||
@ -53,24 +53,28 @@
 | 
			
		||||
                    "<8,5,2>": "Graphite Machining Services Inc"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,6>": {
 | 
			
		||||
                    "<8,6,1>": "NRD",
 | 
			
		||||
                    "<8,6,2>": "Nuclecel"
 | 
			
		||||
                    "<8,6,1>": "MERSEN",
 | 
			
		||||
                    "<8,6,2>": "Mersen USA GS Corp."
 | 
			
		||||
                },
 | 
			
		||||
                "<8,7>": {
 | 
			
		||||
                    "<8,7,1>": "SGL",
 | 
			
		||||
                    "<8,7,2>": "SGL Group"
 | 
			
		||||
                    "<8,7,1>": "NRD",
 | 
			
		||||
                    "<8,7,2>": "Nuclecel"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,8>": {
 | 
			
		||||
                    "<8,8,1>": "TOYO",
 | 
			
		||||
                    "<8,8,2>": "Toyo Tanso USA"
 | 
			
		||||
                    "<8,8,1>": "SGL",
 | 
			
		||||
                    "<8,8,2>": "SGL Group"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,9>": {
 | 
			
		||||
                    "<8,9,1>": "WACOM",
 | 
			
		||||
                    "<8,9,2>": "WaCom"
 | 
			
		||||
                    "<8,9,1>": "TOYO",
 | 
			
		||||
                    "<8,9,2>": "Toyo Tanso USA"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,10>": {
 | 
			
		||||
                    "<8,10,1>": "XYCARB",
 | 
			
		||||
                    "<8,10,2>": "Xycarb Ceramic"
 | 
			
		||||
                    "<8,10,1>": "WACOM",
 | 
			
		||||
                    "<8,10,2>": "WaCom"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,11>": {
 | 
			
		||||
                    "<8,11,1>": "XYCARB",
 | 
			
		||||
                    "<8,11,2>": "Xycarb Ceramic"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<9>": {
 | 
			
		||||
@ -89,14 +93,6 @@
 | 
			
		||||
                    "<9,2,4>": "C",
 | 
			
		||||
                    "<9,2,5>": "",
 | 
			
		||||
                    "<9,2,6>": "Description"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,3>": {
 | 
			
		||||
                    "<9,3,1>": "",
 | 
			
		||||
                    "<9,3,2>": "",
 | 
			
		||||
                    "<9,3,3>": "",
 | 
			
		||||
                    "<9,3,4>": "",
 | 
			
		||||
                    "<9,3,5>": "",
 | 
			
		||||
                    "<9,3,6>": ""
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<10>": "L",
 | 
			
		||||
@ -124,7 +120,17 @@
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<35>": "16777215",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-1",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "MS Sans Serif",
 | 
			
		||||
@ -91,7 +91,17 @@
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<35>": "16777215",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-2",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "MS Sans Serif",
 | 
			
		||||
@ -143,11 +143,21 @@
 | 
			
		||||
            "<28>": "",
 | 
			
		||||
            "<29>": "0",
 | 
			
		||||
            "<30>": "0",
 | 
			
		||||
            "<31>": "0",
 | 
			
		||||
            "<31>": "1",
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "0",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "-2",
 | 
			
		||||
            "<35>": "-2",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-2",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "MS Sans Serif",
 | 
			
		||||
@ -93,8 +93,21 @@
 | 
			
		||||
            "<28>": "",
 | 
			
		||||
            "<29>": "0",
 | 
			
		||||
            "<30>": "0",
 | 
			
		||||
            "<31>": "0",
 | 
			
		||||
            "<32>": "0"
 | 
			
		||||
            "<31>": "1",
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "0",
 | 
			
		||||
            "<34>": "-2",
 | 
			
		||||
            "<35>": "-2",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,152 +1,151 @@
 | 
			
		||||
Function Authentication_API(@API)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
			
		||||
    permission from SRP Computer Solutions, Inc.
 | 
			
		||||
 | 
			
		||||
    Name        :   Authentication_API
 | 
			
		||||
 | 
			
		||||
    Description :   API logic for the Authentication resource.
 | 
			
		||||
 | 
			
		||||
    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
			
		||||
 | 
			
		||||
                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
			
		||||
                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
			
		||||
                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
			
		||||
                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
			
		||||
                        EndpointSegment         - The URL endpoint segment.
 | 
			
		||||
                        ParentURL               - The URL path preceeding the current endpoint.
 | 
			
		||||
                        CurrentAPI              - The name of this stored procedure.
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
			
		||||
                                    - APIPattern must follow this structure Authentication[.ID.[<Property>]]
 | 
			
		||||
                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
			
		||||
                                Examples:
 | 
			
		||||
                                    - Authentication.POST
 | 
			
		||||
                                    - Authentication.ID.PUT
 | 
			
		||||
                                    - Authentication.ID.firstName.GET
 | 
			
		||||
        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
			
		||||
                                services do not rely upon anything being returned in the response. This is what the
 | 
			
		||||
                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
			
		||||
                                value is only helpful if the developers want to use it for debug purposes.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        07/17/24    djs     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$insert API_SETUP
 | 
			
		||||
$insert HTTP_INSERTS
 | 
			
		||||
$insert LSL_USERS_EQUATES
 | 
			
		||||
 | 
			
		||||
Equ USERNAME$   To  1
 | 
			
		||||
Equ GROUP$      To  2
 | 
			
		||||
Equ PASSWORD$   To  3
 | 
			
		||||
Equ CONTEXT$	To	4
 | 
			
		||||
 | 
			
		||||
Declare function   Database_Services, MemberOf
 | 
			
		||||
 | 
			
		||||
GoToAPI else
 | 
			
		||||
    // The specific resource endpoint doesn't have a API handler yet.
 | 
			
		||||
    HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Endpoint Handlers
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API authentication.POST
 | 
			
		||||
 | 
			
		||||
	Body = HTTP_Services('GetHTTPPostString')
 | 
			
		||||
	If Body NE '' then
 | 
			
		||||
		// The POST string will have been encoded so use percent (URL) decoding
 | 
			
		||||
		AuthJson      = HTTP_Services('DecodePercentString', Body)
 | 
			
		||||
		hAuthJson     = ''
 | 
			
		||||
		ParseResponse = SRP_JSON(hAuthJson, 'PARSE', AuthJson)
 | 
			
		||||
		If (ParseResponse EQ '') then
 | 
			
		||||
			Username = SRP_JSON(hAuthJson, 'GetValue', 'Username')
 | 
			
		||||
			Password = SRP_JSON(hAuthJson, 'GetValue', 'Password')
 | 
			
		||||
			Groups   = ''
 | 
			
		||||
			hGroups = SRP_JSON(hAuthJson, 'get', 'Groups')
 | 
			
		||||
			If hGroups then
 | 
			
		||||
				ElementHandles = SRP_JSON(hGroups, 'GetElements', @VM)
 | 
			
		||||
				If ElementHandles NE '' then
 | 
			
		||||
					For each ElementHandle in ElementHandles using @VM
 | 
			
		||||
						Groups<0, -1> = SRP_JSON(ElementHandle, 'GetValue')
 | 
			
		||||
						SRP_JSON(ElementHandle, 'Release')
 | 
			
		||||
					Next ElementHandle
 | 
			
		||||
				end
 | 
			
		||||
				SRP_JSON(hGroups, 'Release')
 | 
			
		||||
			end
 | 
			
		||||
			SRP_JSON(hAuthJson, 'Release')
 | 
			
		||||
			// Validate Credentials
 | 
			
		||||
			UserRec                = Database_Services('ReadDataRow', 'LSL_USERS', Username)
 | 
			
		||||
			If Error_Services('NoError') then
 | 
			
		||||
				Credentials            = ''
 | 
			
		||||
				Credentials<USERNAME$> = Username
 | 
			
		||||
				Credentials<PASSWORD$> = UserRec<LSL_USERS_PASSWORD$>
 | 
			
		||||
				Credentials<GROUP$>    = UserRec<LSL_USERS_GROUPS$>
 | 
			
		||||
 | 
			
		||||
				Member = False$
 | 
			
		||||
				Group  = ''
 | 
			
		||||
				If Groups NE '' then
 | 
			
		||||
					For each Group in Groups using @VM
 | 
			
		||||
						Member = MemberOf(Credentials<USERNAME$>, Group)
 | 
			
		||||
					Until Member EQ True$
 | 
			
		||||
					Next Group
 | 
			
		||||
				end else
 | 
			
		||||
					Member = True$
 | 
			
		||||
				end
 | 
			
		||||
 | 
			
		||||
				Begin Case
 | 
			
		||||
					
 | 
			
		||||
					Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ True$)
 | 
			
		||||
						// Return 200, authentication successful
 | 
			
		||||
						StatusCode = 200
 | 
			
		||||
						Message    = 'Authentication successful'
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 200, Message)
 | 
			
		||||
					Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ False$)
 | 
			
		||||
						// Return 401, not a member of required groups
 | 
			
		||||
						NumGroups  = DCount(Groups, @VM)
 | 
			
		||||
						If NumGroups GT 1 then
 | 
			
		||||
							Swap @VM with ' or ' in Groups
 | 
			
		||||
							Message = 'User is not a member of the ' : Groups : ' groups.'
 | 
			
		||||
						end else
 | 
			
		||||
							Message = 'User is not a member of the ' : Group : ' group.'
 | 
			
		||||
						end
 | 
			
		||||
                        HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
 | 
			
		||||
						
 | 
			
		||||
					Case Password NE Credentials<PASSWORD$>
 | 
			
		||||
						// Return 401, unable to validate password
 | 
			
		||||
						Message    = 'Unable to validate username. Please re-enter.'
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
 | 
			
		||||
					Case Otherwise$
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Unhandled case.')
 | 
			
		||||
				End Case
 | 
			
		||||
			end else
 | 
			
		||||
				// Error reading user record
 | 
			
		||||
				ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
				HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': ErrorMsg)				
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Error parsing JSON.')			
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Empty request.')	
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
Function Authentication_API(@API)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
			
		||||
    permission from SRP Computer Solutions, Inc.
 | 
			
		||||
 | 
			
		||||
    Name        :   Authentication_API
 | 
			
		||||
 | 
			
		||||
    Description :   API logic for the Authentication resource.
 | 
			
		||||
 | 
			
		||||
    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
			
		||||
 | 
			
		||||
                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
			
		||||
                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
			
		||||
                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
			
		||||
                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
			
		||||
                        EndpointSegment         - The URL endpoint segment.
 | 
			
		||||
                        ParentURL               - The URL path preceeding the current endpoint.
 | 
			
		||||
                        CurrentAPI              - The name of this stored procedure.
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
			
		||||
                                    - APIPattern must follow this structure Authentication[.ID.[<Property>]]
 | 
			
		||||
                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
			
		||||
                                Examples:
 | 
			
		||||
                                    - Authentication.POST
 | 
			
		||||
                                    - Authentication.ID.PUT
 | 
			
		||||
                                    - Authentication.ID.firstName.GET
 | 
			
		||||
        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
			
		||||
                                services do not rely upon anything being returned in the response. This is what the
 | 
			
		||||
                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
			
		||||
                                value is only helpful if the developers want to use it for debug purposes.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        07/17/24    djs     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$insert API_SETUP
 | 
			
		||||
$insert HTTP_INSERTS
 | 
			
		||||
$insert LSL_USERS_EQUATES
 | 
			
		||||
 | 
			
		||||
Equ USERNAME$   To  1
 | 
			
		||||
Equ GROUP$      To  2
 | 
			
		||||
Equ PASSWORD$   To  3
 | 
			
		||||
Equ CONTEXT$	To	4
 | 
			
		||||
 | 
			
		||||
Declare function   Database_Services, MemberOf
 | 
			
		||||
 | 
			
		||||
GoToAPI else
 | 
			
		||||
    // The specific resource endpoint doesn't have a API handler yet.
 | 
			
		||||
    HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Endpoint Handlers
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API authentication.POST
 | 
			
		||||
 | 
			
		||||
	Body = HTTP_Services('GetHTTPPostString')
 | 
			
		||||
	If Body NE '' then
 | 
			
		||||
		// The POST string will have been encoded so use percent (URL) decoding
 | 
			
		||||
		AuthJson      = HTTP_Services('DecodePercentString', Body)
 | 
			
		||||
		hAuthJson     = ''
 | 
			
		||||
		ParseResponse = SRP_JSON(hAuthJson, 'PARSE', AuthJson)
 | 
			
		||||
		If (ParseResponse EQ '') then
 | 
			
		||||
			Username = SRP_JSON(hAuthJson, 'GetValue', 'Username')
 | 
			
		||||
			Password = SRP_JSON(hAuthJson, 'GetValue', 'Password')
 | 
			
		||||
			Groups   = ''
 | 
			
		||||
			hGroups = SRP_JSON(hAuthJson, 'get', 'Groups')
 | 
			
		||||
			If hGroups then
 | 
			
		||||
				ElementHandles = SRP_JSON(hGroups, 'GetElements', @VM)
 | 
			
		||||
				If ElementHandles NE '' then
 | 
			
		||||
					For each ElementHandle in ElementHandles using @VM
 | 
			
		||||
						Groups<0, -1> = SRP_JSON(ElementHandle, 'GetValue')
 | 
			
		||||
						SRP_JSON(ElementHandle, 'Release')
 | 
			
		||||
					Next ElementHandle
 | 
			
		||||
				end
 | 
			
		||||
				SRP_JSON(hGroups, 'Release')
 | 
			
		||||
			end
 | 
			
		||||
			SRP_JSON(hAuthJson, 'Release')
 | 
			
		||||
			// Validate Credentials
 | 
			
		||||
			UserRec                = Database_Services('ReadDataRow', 'LSL_USERS', Username)
 | 
			
		||||
			If Error_Services('NoError') then
 | 
			
		||||
				Credentials            = ''
 | 
			
		||||
				Credentials<USERNAME$> = Username
 | 
			
		||||
				Credentials<PASSWORD$> = UserRec<LSL_USERS_PASSWORD$>
 | 
			
		||||
				Credentials<GROUP$>    = UserRec<LSL_USERS_GROUPS$>
 | 
			
		||||
 | 
			
		||||
				Member = False$
 | 
			
		||||
				Group  = ''
 | 
			
		||||
				If Groups NE '' then
 | 
			
		||||
					For each Group in Groups using @VM
 | 
			
		||||
						Member = MemberOf(Credentials<USERNAME$>, Group)
 | 
			
		||||
					Until Member EQ True$
 | 
			
		||||
					Next Group
 | 
			
		||||
				end else
 | 
			
		||||
					Member = True$
 | 
			
		||||
				end
 | 
			
		||||
 | 
			
		||||
				Begin Case
 | 
			
		||||
					
 | 
			
		||||
					Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ True$)
 | 
			
		||||
						// Return 200, authentication successful
 | 
			
		||||
						StatusCode = 200
 | 
			
		||||
						Message    = 'Authentication successful'
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 200, Message)
 | 
			
		||||
					Case (Password EQ Credentials<PASSWORD$>) AND (Member EQ False$)
 | 
			
		||||
						// Return 401, not a member of required groups
 | 
			
		||||
						NumGroups  = DCount(Groups, @VM)
 | 
			
		||||
						If NumGroups GT 1 then
 | 
			
		||||
							Swap @VM with ' or ' in Groups
 | 
			
		||||
							Message = 'User is not a member of the ' : Groups : ' groups.'
 | 
			
		||||
						end else
 | 
			
		||||
							Message = 'User is not a member of the ' : Group : ' group.'
 | 
			
		||||
						end
 | 
			
		||||
                        HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
 | 
			
		||||
						
 | 
			
		||||
					Case Password NE Credentials<PASSWORD$>
 | 
			
		||||
						// Return 401, unable to validate password
 | 
			
		||||
						Message    = 'Unable to validate username. Please re-enter.'
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 401, 'Authentication failed. ':Message)
 | 
			
		||||
					Case Otherwise$
 | 
			
		||||
						HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Unhandled case.')
 | 
			
		||||
				End Case
 | 
			
		||||
			end else
 | 
			
		||||
				// Error reading user record
 | 
			
		||||
				ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
				HTTP_Services('SetResponseStatus', 500, 'Error in the ' : CurrentAPI : ' API. Message: ': ErrorMsg)				
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Error parsing JSON.')			
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		HTTP_Services('SetResponseStatus', 400, 'Error in the ' : CurrentAPI : ' API. Empty request.')	
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
@ -235,7 +235,7 @@ Service SendReminders()
 | 
			
		||||
						IF CLType = 'E' THEN
 | 
			
		||||
							Desc	= CLRec<CALIB_LIST_EQ_DESC$>
 | 
			
		||||
							SN		= CLRec<CALIB_LIST_EQ_SN$>
 | 
			
		||||
							Loc		= CLRec<CALIB_LIST_EQ_LOC$
 | 
			
		||||
							Loc		= CLRec<CALIB_LIST_EQ_LOC$>
 | 
			
		||||
							NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
 | 
			
		||||
						END 
 | 
			
		||||
						IF CLType = 'S' THEN
 | 
			
		||||
 | 
			
		||||
@ -67,25 +67,22 @@ END
 | 
			
		||||
RETURN Result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Create:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
	IF MemberOf(@USER4,'CALIBRATION') ELSE
 | 
			
		||||
		ErrMsg('Only authorized personnel may update the Calibration List.')
 | 
			
		||||
		End_Window(@WINDOW)
 | 
			
		||||
		RETURN
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
IF MemberOf(@USER4,'CALIBRATION') ELSE
 | 
			
		||||
	ErrMsg('Only authorized personnel may update the Calibration List.')
 | 
			
		||||
	End_Window(@WINDOW)
 | 
			
		||||
	RETURN
 | 
			
		||||
END
 | 
			
		||||
	obj_Appwindow('Create',@WINDOW)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
obj_Appwindow('Create',@WINDOW)
 | 
			
		||||
 | 
			
		||||
Set_List_Box_Data( @WINDOW )
 | 
			
		||||
// Use to determine whether or not the New Calibration label was just clicked
 | 
			
		||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
 | 
			
		||||
GOSUB Refresh
 | 
			
		||||
	Set_List_Box_Data( @WINDOW )
 | 
			
		||||
	// Use to determine whether or not the New Calibration label was just clicked
 | 
			
		||||
	Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
 | 
			
		||||
	GOSUB Refresh
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -95,81 +92,76 @@ Clear:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IF Get_Property(@WINDOW,'@READONLY') THEN
 | 
			
		||||
	obj_AppWindow('ReadOnly',@RM:1)			;* Reenables data bound controls
 | 
			
		||||
	Set_Property(@WINDOW,'@READONLY',0)		;* Clear flag on window
 | 
			
		||||
END
 | 
			
		||||
	IF Get_Property(@WINDOW,'@READONLY') THEN
 | 
			
		||||
		obj_AppWindow('ReadOnly',@RM:1)			;* Reenables data bound controls
 | 
			
		||||
		Set_Property(@WINDOW,'@READONLY',0)		;* Clear flag on window
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Refresh:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
* QBF buttons
 | 
			
		||||
	* QBF buttons
 | 
			
		||||
 | 
			
		||||
Ctrls  = @WINDOW:'.QBF_FIRST_FIX':@RM		; Props  = 'ENABLED':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM			; Props := 'ENABLED':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.QBF_STOP_FIX'			; Props := 'ENABLED'
 | 
			
		||||
	Ctrls  = @WINDOW:'.QBF_FIRST_FIX':@RM		; Props  = 'ENABLED':@RM
 | 
			
		||||
	Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
	Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM			; Props := 'ENABLED':@RM
 | 
			
		||||
	Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
	Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM		; Props := 'ENABLED':@RM
 | 
			
		||||
	Ctrls := @WINDOW:'.QBF_STOP_FIX'			; Props := 'ENABLED'
 | 
			
		||||
 | 
			
		||||
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
	Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
 | 
			
		||||
END ELSE
 | 
			
		||||
	Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
 | 
			
		||||
END
 | 
			
		||||
	IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
		Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
 | 
			
		||||
	END ELSE
 | 
			
		||||
		Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
Set_Property(Ctrls,Props,Vals)
 | 
			
		||||
	Set_Property(Ctrls,Props,Vals)
 | 
			
		||||
 | 
			
		||||
* Turn edit table symbolic column backgrounds to green
 | 
			
		||||
	* Turn edit table symbolic column backgrounds to green
 | 
			
		||||
 | 
			
		||||
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS')		;* Loaded during 'Create' in obj_Appwindow
 | 
			
		||||
	ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS')		;* Loaded during 'Create' in obj_Appwindow
 | 
			
		||||
 | 
			
		||||
ETCtrls	= ETSymbolics<1>
 | 
			
		||||
ETCols	= ETSymbolics<2>
 | 
			
		||||
 | 
			
		||||
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
 | 
			
		||||
	ETCtrl	= ETCtrls<1,I>
 | 
			
		||||
	ETList = Get_Property(ETCtrl,'LIST')
 | 
			
		||||
	FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
 | 
			
		||||
		IF ETList<Line,1> NE '' THEN
 | 
			
		||||
			FOR N = 1 TO COUNT(ETCols<1,Line>,@SVM) + (ETCols<1,Line> NE '')
 | 
			
		||||
				stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,Line,N>,Line,GREEN$)
 | 
			
		||||
			NEXT N
 | 
			
		||||
		END
 | 
			
		||||
	NEXT Line
 | 
			
		||||
NEXT I
 | 
			
		||||
	ETCtrls	= ETSymbolics<1>
 | 
			
		||||
	ETCols	= ETSymbolics<2>
 | 
			
		||||
 | 
			
		||||
	FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
 | 
			
		||||
		ETCtrl	= ETCtrls<1,I>
 | 
			
		||||
		ETList = Get_Property(ETCtrl,'LIST')
 | 
			
		||||
		FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
 | 
			
		||||
			IF ETList<Line,1> NE '' THEN
 | 
			
		||||
				FOR N = 1 TO COUNT(ETCols<1,Line>,@SVM) + (ETCols<1,Line> NE '')
 | 
			
		||||
					stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,Line,N>,Line,GREEN$)
 | 
			
		||||
				NEXT N
 | 
			
		||||
			END
 | 
			
		||||
		NEXT Line
 | 
			
		||||
	NEXT I
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Read:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
	CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF RowExists('CALIB_LIST',CLNo) ELSE
 | 
			
		||||
	IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
 | 
			
		||||
		CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
 | 
			
		||||
		Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
 | 
			
		||||
		
 | 
			
		||||
	IF RowExists('CALIB_LIST',CLNo) ELSE
 | 
			
		||||
		IF Get_Property(@WINDOW:'.ENTER_DTM','DEFPROP') = '' THEN
 | 
			
		||||
			CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTH')
 | 
			
		||||
			Set_Property(@WINDOW:'.ENTER_DTM','DEFPROP',CurrDTM)
 | 
			
		||||
		END
 | 
			
		||||
	END
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
GOSUB Refresh
 | 
			
		||||
// Use to determine whether or not the New Calibration button was just clicked and print if it was
 | 
			
		||||
PrintCheck = Get_Property(@Window : '.CALIBRATIONS', '@PrintLabel')
 | 
			
		||||
If PrintCheck EQ True$ then
 | 
			
		||||
    Gosub PrintMostRecentLabel
 | 
			
		||||
end
 | 
			
		||||
// Reset flag after read regardless
 | 
			
		||||
Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
 | 
			
		||||
	GOSUB Refresh
 | 
			
		||||
	// Use to determine whether or not the New Calibration button was just clicked and print if it was
 | 
			
		||||
	PrintCheck = Get_Property(@Window : '.CALIBRATIONS', '@PrintLabel')
 | 
			
		||||
	If PrintCheck EQ True$ then
 | 
			
		||||
		Gosub PrintMostRecentLabel
 | 
			
		||||
	end
 | 
			
		||||
	// Reset flag after read regardless
 | 
			
		||||
	Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', False$)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -187,14 +179,6 @@ RETURN
 | 
			
		||||
Delete:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
IF Security_Check('Order',Delete$) THEN
 | 
			
		||||
	Result = 1		;* Proceed with delete
 | 
			
		||||
END ELSE
 | 
			
		||||
	Security_Err_Msg('Order',Delete$)
 | 
			
		||||
	Result = 0		;* Stop event chain
 | 
			
		||||
END
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -203,13 +187,12 @@ RETURN
 | 
			
		||||
NewItem:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF CLNo = '' THEN
 | 
			
		||||
	NextCLNo = NextKey('CALIB_LIST')
 | 
			
		||||
	obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
 | 
			
		||||
END
 | 
			
		||||
	CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
	IF CLNo = '' THEN
 | 
			
		||||
		NextCLNo = NextKey('CALIB_LIST')
 | 
			
		||||
		obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextCLNo)
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -218,37 +201,35 @@ RETURN
 | 
			
		||||
LUCalibItem:
 | 
			
		||||
* * * * * * * 
 | 
			
		||||
 | 
			
		||||
CLKeys = Popup(@WINDOW,'','CALIB_LIST')
 | 
			
		||||
	CLKeys = Popup(@WINDOW,'','CALIB_LIST')
 | 
			
		||||
 | 
			
		||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
	IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
 | 
			
		||||
CONVERT @VM TO @FM IN CLKeys
 | 
			
		||||
 | 
			
		||||
IF INDEX(CLKeys,@FM,1) THEN
 | 
			
		||||
	Send_Event(@WINDOW,'QBFINIT')
 | 
			
		||||
	Set_Property(@WINDOW,'QBFLIST',CLKeys)
 | 
			
		||||
	GOSUB Refresh
 | 
			
		||||
	Send_Event(@WINDOW,'QBFIRST')
 | 
			
		||||
END ELSE
 | 
			
		||||
	obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
 | 
			
		||||
END
 | 
			
		||||
	CONVERT @VM TO @FM IN CLKeys
 | 
			
		||||
 | 
			
		||||
	IF INDEX(CLKeys,@FM,1) THEN
 | 
			
		||||
		Send_Event(@WINDOW,'QBFINIT')
 | 
			
		||||
		Set_Property(@WINDOW,'QBFLIST',CLKeys)
 | 
			
		||||
		GOSUB Refresh
 | 
			
		||||
		Send_Event(@WINDOW,'QBFIRST')
 | 
			
		||||
	END ELSE
 | 
			
		||||
		obj_Appwindow('LoadFormKeys',@WINDOW:@RM:CLKeys)
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
LUCalibItemType:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CLItemType = Popup(@WINDOW,'','CALIB_LIST_TYPE')
 | 
			
		||||
	CLItemType = Popup(@WINDOW,'','CALIB_LIST_TYPE')
 | 
			
		||||
 | 
			
		||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
	IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
 | 
			
		||||
IF CLItemType NE '' THEN
 | 
			
		||||
	obj_AppWindow('LUValReturn',CLItemType:@RM:@WINDOW:'.CL_TYPE') 
 | 
			
		||||
END
 | 
			
		||||
	IF CLItemType NE '' THEN
 | 
			
		||||
		obj_AppWindow('LUValReturn',CLItemType:@RM:@WINDOW:'.CL_TYPE') 
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -257,27 +238,24 @@ RETURN
 | 
			
		||||
LUCalibItemLoc:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CLItemLoc = Popup(@WINDOW,'','CALIB_LIST_LOC')
 | 
			
		||||
	CLItemLoc = Popup(@WINDOW,'','CALIB_LIST_LOC')
 | 
			
		||||
 | 
			
		||||
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
	IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | 
			
		||||
 | 
			
		||||
IF CLItemLoc NE '' THEN
 | 
			
		||||
	obj_AppWindow('LUValReturn',CLItemLoc:@RM:@WINDOW:'.CAL_LOC') 
 | 
			
		||||
END
 | 
			
		||||
	IF CLItemLoc NE '' THEN
 | 
			
		||||
		obj_AppWindow('LUValReturn',CLItemLoc:@RM:@WINDOW:'.CAL_LOC') 
 | 
			
		||||
	END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * *
 | 
			
		||||
Close:
 | 
			
		||||
* * * * * *
 | 
			
		||||
 | 
			
		||||
	obj_Notes('Inbox',@USER4)	;* Checks for any new messages
 | 
			
		||||
 | 
			
		||||
obj_Notes('Inbox',@USER4)	;* Checks for any new messages
 | 
			
		||||
 | 
			
		||||
Send_Event('MASTER_CALIB_LIST','CREATE')
 | 
			
		||||
	Send_Event('MASTER_CALIB_LIST','CREATE')
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -287,35 +265,34 @@ RETURN
 | 
			
		||||
CalibrationsDC:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CtrlEntID = @WINDOW:'.CALIBRATIONS'
 | 
			
		||||
	CtrlEntID = @WINDOW:'.CALIBRATIONS'
 | 
			
		||||
 | 
			
		||||
CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | 
			
		||||
CurrCol = CurrPos<1>
 | 
			
		||||
CurrRow = CurrPos<2>
 | 
			
		||||
	CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | 
			
		||||
	CurrCol = CurrPos<1>
 | 
			
		||||
	CurrRow = CurrPos<2>
 | 
			
		||||
 | 
			
		||||
CalDt = Get_Property(CtrlEntID,'CELLPOS',COL$CAL_DT:@FM:CurrRow)
 | 
			
		||||
	CalDt = Get_Property(CtrlEntID,'CELLPOS',COL$CAL_DT:@FM:CurrRow)
 | 
			
		||||
 | 
			
		||||
CalDt = ICONV(CalDt,'D')
 | 
			
		||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
	CalDt = ICONV(CalDt,'D')
 | 
			
		||||
	CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
	IF CLNo NE '' AND CalDt NE '' THEN
 | 
			
		||||
		
 | 
			
		||||
		IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
			Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
		END
 | 
			
		||||
		
 | 
			
		||||
		oaParms  = 'CALIBRATION':@RM
 | 
			
		||||
		oaParms := CLNo:'*':CalDt:@RM
 | 
			
		||||
		oaParms := '':@RM						;* Default Record
 | 
			
		||||
		oaParms := CLNo:@RM
 | 
			
		||||
		oaParms := @RM
 | 
			
		||||
		oaParms := CtrlEntID:@RM
 | 
			
		||||
		oaParms := CurrPos
 | 
			
		||||
		
 | 
			
		||||
		obj_Appwindow('ViewNewDetail', oaParms)
 | 
			
		||||
 | 
			
		||||
IF CLNo NE '' AND CalDt NE '' THEN
 | 
			
		||||
	
 | 
			
		||||
	IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
		Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
	END
 | 
			
		||||
	
 | 
			
		||||
	oaParms  = 'CALIBRATION':@RM
 | 
			
		||||
	oaParms := CLNo:'*':CalDt:@RM
 | 
			
		||||
	oaParms := '':@RM						;* Default Record
 | 
			
		||||
	oaParms := CLNo:@RM
 | 
			
		||||
	oaParms := @RM
 | 
			
		||||
	oaParms := CtrlEntID:@RM
 | 
			
		||||
	oaParms := CurrPos
 | 
			
		||||
	
 | 
			
		||||
	obj_Appwindow('ViewNewDetail', oaParms)
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -324,51 +301,49 @@ RETURN
 | 
			
		||||
NewCalibClick:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CtrlEntID = @WINDOW:'.CALIBRATIONS'
 | 
			
		||||
	CtrlEntID = @WINDOW:'.CALIBRATIONS'
 | 
			
		||||
 | 
			
		||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
	CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF CLNo NE ''  THEN
 | 
			
		||||
	
 | 
			
		||||
	IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
		Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
	IF CLNo NE ''  THEN
 | 
			
		||||
		
 | 
			
		||||
		IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | 
			
		||||
			Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
		END
 | 
			
		||||
		
 | 
			
		||||
		oaParms  = 'CALIBRATION':@RM
 | 
			
		||||
		oaParms := CLNo:@RM
 | 
			
		||||
		oaParms := '':@RM						;* Default Record
 | 
			
		||||
		oaParms := CLNo:@RM
 | 
			
		||||
		oaParms := @RM
 | 
			
		||||
		oaParms := CtrlEntID:@RM
 | 
			
		||||
		oaParms := 1:@FM:1
 | 
			
		||||
		
 | 
			
		||||
		obj_Appwindow('ViewNewDetail', oaParms)
 | 
			
		||||
		// New Calibration label was just clicked, set to true
 | 
			
		||||
		Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
 | 
			
		||||
		
 | 
			
		||||
	END
 | 
			
		||||
	
 | 
			
		||||
	oaParms  = 'CALIBRATION':@RM
 | 
			
		||||
	oaParms := CLNo:@RM
 | 
			
		||||
	oaParms := '':@RM						;* Default Record
 | 
			
		||||
	oaParms := CLNo:@RM
 | 
			
		||||
	oaParms := @RM
 | 
			
		||||
	oaParms := CtrlEntID:@RM
 | 
			
		||||
	oaParms := 1:@FM:1
 | 
			
		||||
	
 | 
			
		||||
	obj_Appwindow('ViewNewDetail', oaParms)
 | 
			
		||||
	// New Calibration label was just clicked, set to true
 | 
			
		||||
    Set_Property(@Window : '.CALIBRATIONS', '@PrintLabel', True$)
 | 
			
		||||
	
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
*********************
 | 
			
		||||
PrintMostRecentLabel:
 | 
			
		||||
*********************
 | 
			
		||||
 | 
			
		||||
CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
	CLNo = Get_Property(@WINDOW:'.CL_NO','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF CLNo NE '' THEN
 | 
			
		||||
   TableList = Get_Property(@WINDOW:'.CALIBRATIONS', 'LIST')
 | 
			
		||||
   EquipmentID = Get_Property(@WINDOW:'.EQ_DESC', 'TEXT')
 | 
			
		||||
   LastCalibration = Get_Property(@WINDOW:'.LAST_CAL_DT', 'TEXT')
 | 
			
		||||
   FrequencyVal = Get_Property(@WINDOW:'.CAL_INTERVAL', 'TEXT')
 | 
			
		||||
   FrequencyUnit = 'Months'
 | 
			
		||||
   NextCalibration = Get_Property(@WINDOW:'.NEXT_CAL_DT', 'TEXT')
 | 
			
		||||
   CalibratedBy = TableList<1,2>
 | 
			
		||||
   Labeling_Services('PrintCalibrationLabel', EquipmentID, LastCalibration, NextCalibration, CalibratedBy, FrequencyVal, FrequencyUnit, '')
 | 
			
		||||
end
 | 
			
		||||
	IF CLNo NE '' THEN
 | 
			
		||||
	   TableList = Get_Property(@WINDOW:'.CALIBRATIONS', 'LIST')
 | 
			
		||||
	   EquipmentID = Get_Property(@WINDOW:'.EQ_DESC', 'TEXT')
 | 
			
		||||
	   LastCalibration = Get_Property(@WINDOW:'.LAST_CAL_DT', 'TEXT')
 | 
			
		||||
	   FrequencyVal = Get_Property(@WINDOW:'.CAL_INTERVAL', 'TEXT')
 | 
			
		||||
	   FrequencyUnit = 'Months'
 | 
			
		||||
	   NextCalibration = Get_Property(@WINDOW:'.NEXT_CAL_DT', 'TEXT')
 | 
			
		||||
	   CalibratedBy = TableList<1,2>
 | 
			
		||||
	   Labeling_Services('PrintCalibrationLabel', EquipmentID, LastCalibration, NextCalibration, CalibratedBy, FrequencyVal, FrequencyUnit, '')
 | 
			
		||||
	end
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,139 +1,138 @@
 | 
			
		||||
Function Changelog_API(@API)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
			
		||||
    permission from SRP Computer Solutions, Inc.
 | 
			
		||||
 | 
			
		||||
    Name        :   Changelog_API
 | 
			
		||||
 | 
			
		||||
    Description :   API logic for the Changelog resource.
 | 
			
		||||
 | 
			
		||||
    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
			
		||||
 | 
			
		||||
                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
			
		||||
                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
			
		||||
                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
			
		||||
                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
			
		||||
                        EndpointSegment         - The URL endpoint segment.
 | 
			
		||||
                        ParentURL               - The URL path preceeding the current endpoint.
 | 
			
		||||
                        CurrentAPI              - The name of this stored procedure.
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
			
		||||
                                    - APIPattern must follow this structure Changelog[.ID.[<Property>]]
 | 
			
		||||
                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
			
		||||
                                Examples:
 | 
			
		||||
                                    - Changelog.POST
 | 
			
		||||
                                    - Changelog.ID.PUT
 | 
			
		||||
                                    - Changelog.ID.firstName.GET
 | 
			
		||||
        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
			
		||||
                                services do not rely upon anything being returned in the response. This is what the
 | 
			
		||||
                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
			
		||||
                                value is only helpful if the developers want to use it for debug purposes.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        07/24/24    xxx     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
Declare function Datetime, SRP_Datetime, Change_Log_Services, Environment_Services, Logging_Services
 | 
			
		||||
Declare subroutine Logging_Services
 | 
			
		||||
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$insert API_SETUP
 | 
			
		||||
$insert HTTP_INSERTS
 | 
			
		||||
EQU Comma$ to ','
 | 
			
		||||
 | 
			
		||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\Admin\ChangeLog'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
LogTime     = Oconv(Time(), 'MTS')
 | 
			
		||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ChangeLogArchiveService.csv'
 | 
			
		||||
Headers     = 'Logging DTM' : @FM : 'From IP Address' : @FM : 'Message'
 | 
			
		||||
objLogChangeLogAPI      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
			
		||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
			
		||||
RequesterIPAddr = HTTP_Services('GetHTTPRemoteAddr')
 | 
			
		||||
 | 
			
		||||
GoToAPI else
 | 
			
		||||
	// The specific resource endpoint doesn't have a API handler yet.
 | 
			
		||||
	HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Endpoint Handlers
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API changelog.HEAD
 | 
			
		||||
	API changelog.GET
 | 
			
		||||
		StartDtm = Http_Services('GetQueryField', 'FromDatetime')
 | 
			
		||||
		ToDtm = Http_Services('GetQueryField', 'ToDatetime')
 | 
			
		||||
		
 | 
			
		||||
		StartDtm = IConv(StartDtm, 'DT')
 | 
			
		||||
		ToDtm = IConv(ToDtm, 'DT')
 | 
			
		||||
		
 | 
			
		||||
		If StartDtm EQ '' then
 | 
			
		||||
			StartDtm = SRP_Datetime('AddDays', Datetime(), -60)
 | 
			
		||||
		end
 | 
			
		||||
		If ToDtm EQ '' then
 | 
			
		||||
			ToDtm = Datetime()
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
		EntityName = Http_Services('GetQueryField', 'EntityName')
 | 
			
		||||
		UserId = Http_Services('GetQueryField', 'UserID')
 | 
			
		||||
		
 | 
			
		||||
		ChangeLogIDs = Change_Log_Services('GetChangeLogRecIDs', EntityName, StartDtm, ToDtm, UserId)
 | 
			
		||||
		If Error_Services('NoError') then
 | 
			
		||||
			GoSub CreateHALCollection 
 | 
			
		||||
		end else
 | 
			
		||||
			ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
			LogData    = ''
 | 
			
		||||
			LogData<1> = LoggingDTM
 | 
			
		||||
			LogData<2> = RequesterIPAddr
 | 
			
		||||
			LogData<3> = ErrorMsg
 | 
			
		||||
			Logging_Services('AppendLog', objLogChangeLogAPI, LogData, @RM, @FM)
 | 
			
		||||
			HTTP_Services('SetResponseStatus', 500, 'Error Getting change log records from change_log table.')
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
	end api
 | 
			
		||||
	
 | 
			
		||||
CreateHALCollection:
 | 
			
		||||
	hJsonCollection = ''
 | 
			
		||||
	hChangeLogArray = ''
 | 
			
		||||
	hChangeLogObj = ''
 | 
			
		||||
	hChangeLog = ''
 | 
			
		||||
	hChangeLogJson = ''
 | 
			
		||||
	Abort          = False$
 | 
			
		||||
	If SRP_JSON(hJSONCollection, 'New', 'Object') then
 | 
			
		||||
		If SRP_JSON(hChangeLogArray, 'New', 'Array') then
 | 
			
		||||
			For each ChangeLogID in ChangeLogIDs using @VM setting fPos
 | 
			
		||||
				//rdsJSON = Rds_Services('ConvertRecordToJSON', rds, '' ,FullEndpointURL:'/':rds)
 | 
			
		||||
				ChangeLogJson = Change_Log_Services('ConvertRecordToJSON', ChangeLogID)
 | 
			
		||||
				If Error_Services('NoError') then
 | 
			
		||||
					If (SRP_JSON(hChangeLog, 'Parse', ChangeLogJson) EQ '') then
 | 
			
		||||
						SRP_JSON(hChangeLogArray, 'Add', hChangeLog)
 | 
			
		||||
						SRP_JSON(hChangeLog, 'Release')
 | 
			
		||||
					end
 | 
			
		||||
				end else
 | 
			
		||||
					Abort   = True$
 | 
			
		||||
				end
 | 
			
		||||
			Until Abort
 | 
			
		||||
			Next rds
 | 
			
		||||
			If Abort EQ False$ then
 | 
			
		||||
				SRP_JSON(hJSONCollection, 'Set', 'ChangeLogRecords', hChangeLogArray)
 | 
			
		||||
			end
 | 
			
		||||
			SRP_JSON(hChangeLogArray, 'Release')
 | 
			
		||||
		end
 | 
			
		||||
		JSONCollection = SRP_JSON(hJSONCollection, 'Stringify', 'Styled')
 | 
			
		||||
		SRP_JSON(hJSONCollection, 'Release')
 | 
			
		||||
		HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
		HTTP_Services('SetResponseBody', JSONCollection, False$, 'application/hal+json')
 | 
			
		||||
		HTTP_Services('SetResponseStatus', 200)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
Function Changelog_API(@API)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
			
		||||
    permission from SRP Computer Solutions, Inc.
 | 
			
		||||
 | 
			
		||||
    Name        :   Changelog_API
 | 
			
		||||
 | 
			
		||||
    Description :   API logic for the Changelog resource.
 | 
			
		||||
 | 
			
		||||
    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
			
		||||
 | 
			
		||||
                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
			
		||||
                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
			
		||||
                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
			
		||||
                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
			
		||||
                        EndpointSegment         - The URL endpoint segment.
 | 
			
		||||
                        ParentURL               - The URL path preceeding the current endpoint.
 | 
			
		||||
                        CurrentAPI              - The name of this stored procedure.
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
			
		||||
                                    - APIPattern must follow this structure Changelog[.ID.[<Property>]]
 | 
			
		||||
                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
			
		||||
                                Examples:
 | 
			
		||||
                                    - Changelog.POST
 | 
			
		||||
                                    - Changelog.ID.PUT
 | 
			
		||||
                                    - Changelog.ID.firstName.GET
 | 
			
		||||
        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
			
		||||
                                services do not rely upon anything being returned in the response. This is what the
 | 
			
		||||
                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
			
		||||
                                value is only helpful if the developers want to use it for debug purposes.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        07/24/24    xxx     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
Declare function Datetime, SRP_Datetime, Change_Log_Services, Environment_Services, Logging_Services
 | 
			
		||||
Declare subroutine Logging_Services
 | 
			
		||||
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$insert API_SETUP
 | 
			
		||||
$insert HTTP_INSERTS
 | 
			
		||||
EQU Comma$ to ','
 | 
			
		||||
 | 
			
		||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\Admin\ChangeLog'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
LogTime     = Oconv(Time(), 'MTS')
 | 
			
		||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' ChangeLogArchiveService.csv'
 | 
			
		||||
Headers     = 'Logging DTM' : @FM : 'From IP Address' : @FM : 'Message'
 | 
			
		||||
objLogChangeLogAPI      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
			
		||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
			
		||||
RequesterIPAddr = HTTP_Services('GetHTTPRemoteAddr')
 | 
			
		||||
 | 
			
		||||
GoToAPI else
 | 
			
		||||
	// The specific resource endpoint doesn't have a API handler yet.
 | 
			
		||||
	HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Endpoint Handlers
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API changelog.HEAD
 | 
			
		||||
	API changelog.GET
 | 
			
		||||
		StartDtm = Http_Services('GetQueryField', 'FromDatetime')
 | 
			
		||||
		ToDtm = Http_Services('GetQueryField', 'ToDatetime')
 | 
			
		||||
		
 | 
			
		||||
		StartDtm = IConv(StartDtm, 'DT')
 | 
			
		||||
		ToDtm = IConv(ToDtm, 'DT')
 | 
			
		||||
		
 | 
			
		||||
		If StartDtm EQ '' then
 | 
			
		||||
			StartDtm = SRP_Datetime('AddDays', Datetime(), -60)
 | 
			
		||||
		end
 | 
			
		||||
		If ToDtm EQ '' then
 | 
			
		||||
			ToDtm = Datetime()
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
		EntityName = Http_Services('GetQueryField', 'EntityName')
 | 
			
		||||
		UserId = Http_Services('GetQueryField', 'UserID')
 | 
			
		||||
		
 | 
			
		||||
		ChangeLogIDs = Change_Log_Services('GetChangeLogRecIDs', EntityName, StartDtm, ToDtm, UserId)
 | 
			
		||||
		If Error_Services('NoError') then
 | 
			
		||||
			GoSub CreateHALCollection 
 | 
			
		||||
		end else
 | 
			
		||||
			ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
			LogData    = ''
 | 
			
		||||
			LogData<1> = LoggingDTM
 | 
			
		||||
			LogData<2> = RequesterIPAddr
 | 
			
		||||
			LogData<3> = ErrorMsg
 | 
			
		||||
			Logging_Services('AppendLog', objLogChangeLogAPI, LogData, @RM, @FM)
 | 
			
		||||
			HTTP_Services('SetResponseStatus', 500, 'Error Getting change log records from change_log table.')
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
	end api
 | 
			
		||||
	
 | 
			
		||||
CreateHALCollection:
 | 
			
		||||
	hJsonCollection = ''
 | 
			
		||||
	hChangeLogArray = ''
 | 
			
		||||
	hChangeLogObj = ''
 | 
			
		||||
	hChangeLog = ''
 | 
			
		||||
	hChangeLogJson = ''
 | 
			
		||||
	Abort          = False$
 | 
			
		||||
	If SRP_JSON(hJSONCollection, 'New', 'Object') then
 | 
			
		||||
		If SRP_JSON(hChangeLogArray, 'New', 'Array') then
 | 
			
		||||
			For each ChangeLogID in ChangeLogIDs using @VM setting fPos
 | 
			
		||||
				//rdsJSON = Rds_Services('ConvertRecordToJSON', rds, '' ,FullEndpointURL:'/':rds)
 | 
			
		||||
				ChangeLogJson = Change_Log_Services('ConvertRecordToJSON', ChangeLogID)
 | 
			
		||||
				If Error_Services('NoError') then
 | 
			
		||||
					If (SRP_JSON(hChangeLog, 'Parse', ChangeLogJson) EQ '') then
 | 
			
		||||
						SRP_JSON(hChangeLogArray, 'Add', hChangeLog)
 | 
			
		||||
						SRP_JSON(hChangeLog, 'Release')
 | 
			
		||||
					end
 | 
			
		||||
				end else
 | 
			
		||||
					Abort   = True$
 | 
			
		||||
				end
 | 
			
		||||
			Until Abort
 | 
			
		||||
			Next rds
 | 
			
		||||
			If Abort EQ False$ then
 | 
			
		||||
				SRP_JSON(hJSONCollection, 'Set', 'ChangeLogRecords', hChangeLogArray)
 | 
			
		||||
			end
 | 
			
		||||
			SRP_JSON(hChangeLogArray, 'Release')
 | 
			
		||||
		end
 | 
			
		||||
		JSONCollection = SRP_JSON(hJSONCollection, 'Stringify', 'Styled')
 | 
			
		||||
		SRP_JSON(hJSONCollection, 'Release')
 | 
			
		||||
		HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
		HTTP_Services('SetResponseBody', JSONCollection, False$, 'application/hal+json')
 | 
			
		||||
		HTTP_Services('SetResponseStatus', 200)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										258
									
								
								LSL2/STPROC/CLEAN_API.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								LSL2/STPROC/CLEAN_API.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,258 @@
 | 
			
		||||
Function Clean_API(@API)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
			
		||||
    permission from SRP Computer Solutions, Inc.
 | 
			
		||||
 | 
			
		||||
    Name        :   Clean_API
 | 
			
		||||
 | 
			
		||||
    Description :   API logic for the Clean resource.
 | 
			
		||||
 | 
			
		||||
    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
			
		||||
 | 
			
		||||
                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
			
		||||
                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
			
		||||
                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
			
		||||
                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
			
		||||
                        EndpointSegment         - The URL endpoint segment.
 | 
			
		||||
                        ParentURL               - The URL path preceeding the current endpoint.
 | 
			
		||||
                        CurrentAPI              - The name of this stored procedure.
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
			
		||||
                                    - APIPattern must follow this structure Clean[.ID.[<Property>]]
 | 
			
		||||
                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
			
		||||
                                Examples:
 | 
			
		||||
                                    - Clean.POST
 | 
			
		||||
                                    - Clean.ID.PUT
 | 
			
		||||
                                    - Clean.ID.firstName.GET
 | 
			
		||||
        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
			
		||||
                                services do not rely upon anything being returned in the response. This is what the
 | 
			
		||||
                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
			
		||||
                                value is only helpful if the developers want to use it for debug purposes.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        06/18/25    xxx     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
Declare function OI_Wizard_Services, Lot_Operation_Services, Database_Services, Lot_Services, Clean_Services
 | 
			
		||||
Declare subroutine Clean_Services, Lot_Services
 | 
			
		||||
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$insert API_SETUP
 | 
			
		||||
$insert HTTP_INSERTS
 | 
			
		||||
$insert OI_WIZARD_EQUATES
 | 
			
		||||
$insert LOT_OPERATION_EQUATES
 | 
			
		||||
 | 
			
		||||
GoToAPI else
 | 
			
		||||
    // The specific resource endpoint doesn't have a API handler yet.
 | 
			
		||||
    HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Endpoint Handlers
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API clean.ID.HEAD
 | 
			
		||||
API clean.ID.GET
 | 
			
		||||
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    ResponseCode = ''
 | 
			
		||||
    ResponseMessage = ''
 | 
			
		||||
    Body = ''
 | 
			
		||||
    OIWizardID = ''
 | 
			
		||||
    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
			
		||||
    For each Cookie in Cookies using ';'
 | 
			
		||||
        Key = Field(Cookie, '=', 1)
 | 
			
		||||
        If Key EQ 'sessionID' then
 | 
			
		||||
            OIWizardID = Field(Cookie, '=', 2)
 | 
			
		||||
        end
 | 
			
		||||
    Next Cookie
 | 
			
		||||
    
 | 
			
		||||
    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
			
		||||
    
 | 
			
		||||
    If ValidSession then
 | 
			
		||||
        UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
 | 
			
		||||
        StatusCode  = ''
 | 
			
		||||
        CleanRecId = EndpointSegment
 | 
			
		||||
        CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            Http_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
 | 
			
		||||
            ResponseCode = 200
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
            ResponseCode = 500
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMessage = 'Invalid session. Reauthentication required.'
 | 
			
		||||
        ResponseCode = 401
 | 
			
		||||
    end
 | 
			
		||||
    HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
    HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API clean.ID.markcleanrecordcomplete.POST
 | 
			
		||||
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    ResponseCode = ''
 | 
			
		||||
    ResponseMessage = ''
 | 
			
		||||
    Body = ''
 | 
			
		||||
    OIWizardID = ''
 | 
			
		||||
    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
			
		||||
    For each Cookie in Cookies using ';'
 | 
			
		||||
        Key = Field(Cookie, '=', 1)
 | 
			
		||||
        If Key EQ 'sessionID' then
 | 
			
		||||
            OIWizardID = Field(Cookie, '=', 2)
 | 
			
		||||
        end
 | 
			
		||||
    Next Cookie
 | 
			
		||||
    
 | 
			
		||||
    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
			
		||||
    
 | 
			
		||||
    If ValidSession then
 | 
			
		||||
        UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
 | 
			
		||||
        StatusCode  = ''
 | 
			
		||||
        Body        = HTTP_Services('GetHTTPPostString', True$)
 | 
			
		||||
        // The POST string will have been encoded so use percent (URL) decoding.
 | 
			
		||||
        DecodedJSON = HTTP_Services('DecodePercentString', Body)
 | 
			
		||||
        If SRP_JSON(objBody, 'Parse', Body) EQ '' then
 | 
			
		||||
            CleanRecId = ParentSegment
 | 
			
		||||
            LotOperationId      = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
 | 
			
		||||
            CleanTool   = SRP_JSON(objBody, 'GetValue', 'CleanTool')
 | 
			
		||||
            CleanRecipe   = SRP_JSON(objBody, 'GetValue', 'CleanRecipe')
 | 
			
		||||
            SRP_JSON(objBody, 'Release')
 | 
			
		||||
            Clean_Services('MarkCleanRecComplete', CleanRecId, CleanRecipe, CleanTool, UserId)
 | 
			
		||||
            If Error_Services('NoError') then
 | 
			
		||||
                CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
 | 
			
		||||
                HTTP_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
 | 
			
		||||
                ResponseCode = 200
 | 
			
		||||
            end else
 | 
			
		||||
                ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
                ResponseCode = 500
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMessage = 'Invalid session. Reauthentication required.'
 | 
			
		||||
        ResponseCode = 401
 | 
			
		||||
    end
 | 
			
		||||
    HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
    HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API clean.createcleanrecord.POST
 | 
			
		||||
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    ResponseCode = ''
 | 
			
		||||
    ResponseMessage = ''
 | 
			
		||||
    Body = ''
 | 
			
		||||
    OIWizardID = ''
 | 
			
		||||
    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
			
		||||
    For each Cookie in Cookies using ';'
 | 
			
		||||
        Key = Field(Cookie, '=', 1)
 | 
			
		||||
        If Key EQ 'sessionID' then
 | 
			
		||||
            OIWizardID = Field(Cookie, '=', 2)
 | 
			
		||||
        end
 | 
			
		||||
    Next Cookie
 | 
			
		||||
    
 | 
			
		||||
    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
			
		||||
    
 | 
			
		||||
    If ValidSession then
 | 
			
		||||
        UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
 | 
			
		||||
        StatusCode  = ''
 | 
			
		||||
        Body        = HTTP_Services('GetHTTPPostString', True$)
 | 
			
		||||
        // The POST string will have been encoded so use percent (URL) decoding.
 | 
			
		||||
        DecodedJSON = HTTP_Services('DecodePercentString', Body)
 | 
			
		||||
        If SRP_JSON(objBody, 'Parse', Body) EQ '' then
 | 
			
		||||
            LotId = SRP_JSON(objBody, 'GetValue', 'LotId')
 | 
			
		||||
            LotOperationId      = SRP_JSON(objBody, 'GetValue', 'LotOperationId')
 | 
			
		||||
            SRP_JSON(objBody, 'Release')
 | 
			
		||||
        end
 | 
			
		||||
        CleanRecId = Clean_Services('CreateNewCleanRecord', LotId, LotOperationId, UserId)
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            CleanRecJson = Clean_Services('ConvertCleanRecToJson', CleanRecId)
 | 
			
		||||
            HTTP_Services('SetResponseBody', CleanRecJson, False$, 'application/hal+json')
 | 
			
		||||
            ResponseCode = 200
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
            ResponseCode = 500
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMessage = 'Invalid session. Reauthentication required.'
 | 
			
		||||
        ResponseCode = 401
 | 
			
		||||
    end
 | 
			
		||||
    HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
    HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API clean.getnewcleanoperationparams.HEAD
 | 
			
		||||
API clean.getnewcleanoperationparams.GET
 | 
			
		||||
 | 
			
		||||
    JSONCollection = ''
 | 
			
		||||
    OIWizardID = ''
 | 
			
		||||
    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
			
		||||
    For each Cookie in Cookies using ';'
 | 
			
		||||
        Key = Field(Cookie, '=', 1)
 | 
			
		||||
        If Key EQ 'sessionID' then
 | 
			
		||||
            OIWizardID = Field(Cookie, '=', 2)
 | 
			
		||||
        end
 | 
			
		||||
    Next Cookie
 | 
			
		||||
    
 | 
			
		||||
    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
			
		||||
    If ValidSession then
 | 
			
		||||
        Body    = HTTP_Services('GetHTTPGetString')
 | 
			
		||||
        If Body NE '' then
 | 
			
		||||
            RequestJson      = HTTP_Services('DecodePercentString', Body)
 | 
			
		||||
            LotId = Http_Services('GetQueryField', 'LotId')
 | 
			
		||||
            objJSONResponse = ''
 | 
			
		||||
            If SRP_Json(objJSONResponse, 'New', 'Object') then
 | 
			
		||||
                //Available Tools
 | 
			
		||||
                If SRP_Json(objCleanTools, 'New', 'Array') then
 | 
			
		||||
                    CleanTools = Clean_Services('GetCleanToolOptions')
 | 
			
		||||
                    for each CleanTool in CleanTools using @FM
 | 
			
		||||
                        SRP_Json(objCleanTools, 'AddValue', CleanTool, 'String')
 | 
			
		||||
                    Next CleanTool
 | 
			
		||||
                    SRP_Json(objJsonResponse, 'Set', 'CleanToolOptions', objCleanTools)
 | 
			
		||||
                    SRP_Json(objCleanTools, 'Release')
 | 
			
		||||
                end
 | 
			
		||||
                //Available Recipes
 | 
			
		||||
                If SRP_Json(objCleanRecipes, 'New', 'Array') then
 | 
			
		||||
                    CleanRecipes = Clean_Services('GetCleanRecipeOptions')
 | 
			
		||||
                    for each Recipe in CleanRecipes using @VM
 | 
			
		||||
                        SRP_Json(objCleanRecipes, 'AddValue', Recipe, 'String')
 | 
			
		||||
                    Next Recipe
 | 
			
		||||
                    SRP_Json(objJsonResponse, 'Set', 'CleanRecipeOptions', objCleanRecipes)
 | 
			
		||||
                    SRP_Json(objCleanRecipes, 'Release')
 | 
			
		||||
                end
 | 
			
		||||
                JsonResponse = SRP_Json(objJsonResponse, 'Stringify', 'Styled')
 | 
			
		||||
                SRP_Json(objJsonResponse, 'Release')
 | 
			
		||||
            end else
 | 
			
		||||
                Error_Services('Add', 'Error when creating JSON response.')
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            Error_Services('Add', 'No body was sent with the request.')
 | 
			
		||||
        end
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 201, 'Success')
 | 
			
		||||
            HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
			
		||||
            HTTP_Services('SetResponseBody', JsonResponse, False$, 'application/hal+json')
 | 
			
		||||
        end else
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 400, Error_Services('GetMessage'))
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 401, 'Invalid session. Reauthentication required.')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
end api
 | 
			
		||||
@ -72,11 +72,12 @@ $insert WM_OUT_EQUATES
 | 
			
		||||
$insert WO_LOG_EQUATES
 | 
			
		||||
$insert ROTR_EQUATES
 | 
			
		||||
$insert WO_MAT_EQUATES
 | 
			
		||||
$Insert IFX_EQUATES
 | 
			
		||||
 | 
			
		||||
Equ Comma$ to ','
 | 
			
		||||
 | 
			
		||||
Declare function    Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
 | 
			
		||||
Declare subroutine  Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log
 | 
			
		||||
Declare subroutine  Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Service_Services
 | 
			
		||||
Declare subroutine  Qa_Services
 | 
			
		||||
 | 
			
		||||
If KeyID then GoSub Initialize_System_Variables
 | 
			
		||||
@ -799,96 +800,15 @@ WRITE_RECORD:
 | 
			
		||||
    
 | 
			
		||||
    WONo      = Record<CLEAN_INSP_WO_NO$>
 | 
			
		||||
    ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
 | 
			
		||||
    EpiPro    = (ReactType EQ 'EPP')
 | 
			
		||||
    GaN       = (ReactType EQ 'GAN')
 | 
			
		||||
    NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
 | 
			
		||||
    Stage     = Record<CLEAN_INSP_STAGE$>
 | 
			
		||||
 | 
			
		||||
    If Stage EQ 'LWI' then
 | 
			
		||||
        RDSNo     = Record<CLEAN_INSP_RDS_NO$>
 | 
			
		||||
        PostCIKey = Xlate('RDS', RDSNo, 'POST_CI_NO', 'X')
 | 
			
		||||
        If PostCIKey NE '' then
 | 
			
		||||
            FailedWafers         = Record<CLEAN_INSP_FAILED_WAFERS$>
 | 
			
		||||
            If FailedWafers NE '' then 
 | 
			
		||||
                NewPostSpecSampleQty = Sum(FailedWafers)
 | 
			
		||||
                PostCIRec            = Database_Services('ReadDataRow', 'CLEAN_INSP', PostCIKey)
 | 
			
		||||
                PostSpecRecipes      = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
 | 
			
		||||
                NumRecipes           = DCount(PostSpecRecipes, @VM)
 | 
			
		||||
                If NumRecipes GT 0 then
 | 
			
		||||
                    For RecipeIndex = 1 to NumRecipes
 | 
			
		||||
                        CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
 | 
			
		||||
                        If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
 | 
			
		||||
                            PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
 | 
			
		||||
                        end
 | 
			
		||||
                    Next RecipeIndex
 | 
			
		||||
                    Database_Services('WriteDataRow', 'CLEAN_INSP', PostCIKey, PostCIRec, True$, False$, True$)
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    	Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'UpdatePostCISampleQty':SD$:Name)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    If NonEpiPro then
 | 
			
		||||
        // Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
 | 
			
		||||
        Stage           = {STAGE}
 | 
			
		||||
        
 | 
			
		||||
        WOMatKey     = {WO_MAT_KEY}
 | 
			
		||||
        // Update failed wafer list
 | 
			
		||||
        QA_Services('UpdateFailedWafers', WOMatKey)
 | 
			
		||||
        WOMatRec     = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
        WOMatSigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
 | 
			
		||||
        WOMatSigs    = WOMatRec<WO_MAT_SIGNATURE$>
 | 
			
		||||
        WOMatSigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
 | 
			
		||||
        
 | 
			
		||||
        OrigInspSig     = OrigRecord<CLEAN_INSP_INSP_SIG$>
 | 
			
		||||
        OrigInspSigDTM  = OrigRecord<CLEAN_INSP_INSP_SIG_DTM$>
 | 
			
		||||
        InspSig         = Record<CLEAN_INSP_INSP_SIG$>
 | 
			
		||||
        InspSigDTM      = Record<CLEAN_INSP_INSP_SIG_DTM$>
 | 
			
		||||
        
 | 
			
		||||
        OrigCleanSig    = OrigRecord<CLEAN_INSP_CLEAN_SIG$>
 | 
			
		||||
        OrigCleanSigDTM = OrigRecord<CLEAN_INSP_CLEAN_SIG_DTM$>
 | 
			
		||||
        CleanSig        = Record<CLEAN_INSP_CLEAN_SIG$>
 | 
			
		||||
        CleanSigDTM     = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
 | 
			
		||||
        
 | 
			
		||||
        OrigScanSig     = OrigRecord<CLEAN_INSP_SCAN_SIG$>
 | 
			
		||||
        OrigScanSigDTM  = OrigRecord<CLEAN_INSP_SCAN_SIG_DTM$>
 | 
			
		||||
        ScanSig         = Record<CLEAN_INSP_SCAN_SIG$>
 | 
			
		||||
        ScanSigDTM      = Record<CLEAN_INSP_SCAN_SIG_DTM$>
 | 
			
		||||
        
 | 
			
		||||
        SigProfUpdate   = False$
 | 
			
		||||
 | 
			
		||||
        If ( (OrigInspSig NE InspSig) or (OrigInspSigDTM NE InspSigDTM) ) then
 | 
			
		||||
            WOMatStage = '1':Stage:'I'
 | 
			
		||||
            Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
                WOMatSigs<0, vPos>    = InspSig[-1, 'B':@VM]
 | 
			
		||||
                WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
 | 
			
		||||
                SigProfUpdate         = True$
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        If ( (OrigCleanSig NE CleanSig) or (OrigCleanSigDTM NE CleanSigDTM) ) then
 | 
			
		||||
            WOMatStage = '1':Stage:'C'
 | 
			
		||||
            Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
                WOMatSigs<0, vPos>    = CleanSig[-1, 'B':@VM]
 | 
			
		||||
                WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
 | 
			
		||||
                SigProfUpdate         = True$
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        If ( (OrigScanSig NE ScanSig) or (OrigScanSigDTM NE ScanSigDTM) ) then
 | 
			
		||||
            WOMatStage = '1':Stage:'S'
 | 
			
		||||
            Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
                WOMatSigs<0, vPos>    = ScanSig[-1, 'B':@VM]
 | 
			
		||||
                WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
 | 
			
		||||
                SigProfUpdate         = True$
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        If SigProfUpdate then
 | 
			
		||||
            NumSteps                    = DCount(WOMatSigProf, @VM)
 | 
			
		||||
            WOMatRec<WO_MAT_SIGNATURE$> = Field(WOMatSigs, @VM, 1, NumSteps)
 | 
			
		||||
            WOMatRec<WO_MAT_SIG_DTM$>   = Field(WOMatSigDTMs, @VM, 1, NumSteps)
 | 
			
		||||
            Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
 | 
			
		||||
        end
 | 
			
		||||
        Service_Services('PostProcedure', 'QA_SERVICES', 'UpdateFailedWafers':SD$:WOMatKey)
 | 
			
		||||
        Service_Services('PostProcedure', 'CLEAN_INSP_SERVICES', 'PushSigProfileToWoMat':SD$:Name)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
@ -945,4 +865,3 @@ Restore_System_Variables:
 | 
			
		||||
    @FILE.ERROR = OrigFileError
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,8 @@ $Insert PRS_STAGE_EQUATES
 | 
			
		||||
$Insert WO_MAT_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function   Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
 | 
			
		||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services, Btree.Extract
 | 
			
		||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services
 | 
			
		||||
Declare subroutine Transaction_Services, Btree.Extract
 | 
			
		||||
 | 
			
		||||
GoToService
 | 
			
		||||
 | 
			
		||||
@ -439,11 +440,13 @@ Service UpdateAllCleanInsp(WOMatKey)
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
 | 
			
		||||
// This is specifically used to have the latest defectivity data
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
Service GetLatestDefectCINoByRDSId(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
    LatestCINo    = ''
 | 
			
		||||
    LatestInspDtm = ''
 | 
			
		||||
    Open 'DICT CLEAN_INSP' to @DICT then
 | 
			
		||||
@ -464,6 +467,136 @@ Service GetLatestDefectCINoByRDSId(RDSNo)
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    Response = LatestCINo
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service PushSigProfileToWoMat(CleanInspKey)
 | 
			
		||||
 | 
			
		||||
	ErrorMsg = ''
 | 
			
		||||
	If (CleanInspKey NE '') then
 | 
			
		||||
		If RowExists('CLEAN_INSP', CleanInspKey) then
 | 
			
		||||
			Record    = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
 | 
			
		||||
			If Error_Services('NoError') then 
 | 
			
		||||
				WONo      = Record<CLEAN_INSP_WO_NO$>
 | 
			
		||||
				ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
 | 
			
		||||
				NonEpiPro = ( (ReactType NE 'EPP') and (ReactType NE 'GAN') )
 | 
			
		||||
				If NonEpiPro then
 | 
			
		||||
					// Sync up Insp, Clean, and SurfScan signatures with WO_MAT signature profile
 | 
			
		||||
					Stage        = Record<CLEAN_INSP_STAGE$>
 | 
			
		||||
					WOMatKey     = Xlate('CLEAN_INSP', CleanInspKey, 'WO_MAT_KEY', 'X')
 | 
			
		||||
					If WOMatKey NE '' then
 | 
			
		||||
						WOMatRec     = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
						If Error_Services('NoError') then 
 | 
			
		||||
							WOMatSigProf     = WOMatRec<WO_MAT_SIG_PROFILE$>
 | 
			
		||||
							WOMatSigs        = WOMatRec<WO_MAT_SIGNATURE$>
 | 
			
		||||
							WOMatSigDTMs     = WOMatRec<WO_MAT_SIG_DTM$>
 | 
			
		||||
							WOMatSigsOrig    = WOMatSigs
 | 
			
		||||
							WOMatSigDTMsOrig = WOMatSigDTMs
 | 
			
		||||
							
 | 
			
		||||
							InspSig         = Record<CLEAN_INSP_INSP_SIG$>
 | 
			
		||||
							InspSigDTM      = Record<CLEAN_INSP_INSP_SIG_DTM$>
 | 
			
		||||
							CleanSig        = Record<CLEAN_INSP_CLEAN_SIG$>
 | 
			
		||||
							CleanSigDTM     = Record<CLEAN_INSP_CLEAN_SIG_DTM$>
 | 
			
		||||
							ScanSig         = Record<CLEAN_INSP_SCAN_SIG$>
 | 
			
		||||
							ScanSigDTM      = Record<CLEAN_INSP_SCAN_SIG_DTM$>
 | 
			
		||||
							
 | 
			
		||||
							WOMatStage = '1':Stage:'I'
 | 
			
		||||
							Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
								WOMatSigs<0, vPos>    = InspSig[-1, 'B':@VM]
 | 
			
		||||
								WOMatSigDTMs<0, vPos> = InspSigDTM[-1, 'B':@VM]
 | 
			
		||||
							end
 | 
			
		||||
							
 | 
			
		||||
							WOMatStage = '1':Stage:'C'
 | 
			
		||||
							Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
								WOMatSigs<0, vPos>    = CleanSig[-1, 'B':@VM]
 | 
			
		||||
								WOMatSigDTMs<0, vPos> = CleanSigDTM[-1, 'B':@VM]
 | 
			
		||||
							end
 | 
			
		||||
							
 | 
			
		||||
							WOMatStage = '1':Stage:'S'
 | 
			
		||||
							Locate WOMatStage in WOMatSigProf using @VM setting vPos then
 | 
			
		||||
								WOMatSigs<0, vPos>    = ScanSig[-1, 'B':@VM]
 | 
			
		||||
								WOMatSigDTMs<0, vPos> = ScanSigDTM[-1, 'B':@VM]
 | 
			
		||||
							end
 | 
			
		||||
 | 
			
		||||
							NumSteps     = DCount(WOMatSigProf, @VM)
 | 
			
		||||
							WOMatSigs    = Field(WOMatSigs, @VM, 1, NumSteps)
 | 
			
		||||
							WOMatSigDTMs = Field(WOMatSigDTMs, @VM, 1, NumSteps)
 | 
			
		||||
							If WOMatSigs NE WOMatSigsOrig then
 | 
			
		||||
								Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSigs)
 | 
			
		||||
							end
 | 
			
		||||
							If WOMatSigDTMs NE WOMatSigDTMsOrig then
 | 
			
		||||
								Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTMs)
 | 
			
		||||
							end
 | 
			
		||||
						end else
 | 
			
		||||
							ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
 | 
			
		||||
						end
 | 
			
		||||
					end else
 | 
			
		||||
						ErrorMsg = 'Error in ':Service:' service. Null WO_MAT_KEY returned for CLEAN_INSP ':CleanInspKey:'.'
 | 
			
		||||
					end
 | 
			
		||||
				end			
 | 
			
		||||
			end else
 | 
			
		||||
				ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UpdatePostCISampleQty(CleanInspKey)
 | 
			
		||||
 | 
			
		||||
	ErrorMsg  = ''
 | 
			
		||||
	If CleanInspKey NE '' then
 | 
			
		||||
		If RowExists('CLEAN_INSP', CleanInspKey) then
 | 
			
		||||
			Record = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
 | 
			
		||||
			If Error_Services('NoError') then
 | 
			
		||||
				Stage     = Record<CLEAN_INSP_STAGE$>
 | 
			
		||||
				If Stage EQ 'LWI' then
 | 
			
		||||
					RDSNo     = Record<CLEAN_INSP_RDS_NO$>
 | 
			
		||||
					PostCIKey = Xlate('RDS', RDSNo, 'POST_CI_NO', 'X')
 | 
			
		||||
					If PostCIKey NE '' then
 | 
			
		||||
						FailedWafers = Record<CLEAN_INSP_FAILED_WAFERS$>
 | 
			
		||||
						If FailedWafers NE '' then 
 | 
			
		||||
							NewPostSpecSampleQty = Sum(FailedWafers)
 | 
			
		||||
							PostCIRec            = Database_Services('ReadDataRow', 'CLEAN_INSP', PostCIKey)
 | 
			
		||||
							PostSpecRecipes      = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
 | 
			
		||||
							NumRecipes           = DCount(PostSpecRecipes, @VM)
 | 
			
		||||
							If NumRecipes GT 0 then
 | 
			
		||||
								UpdatePostRec = False$
 | 
			
		||||
								For RecipeIndex = 1 to NumRecipes
 | 
			
		||||
									CurrSpec = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex>
 | 
			
		||||
									If ( (CurrSpec EQ '') or (CurrSpec LT NewPostSpecSampleQty) ) then
 | 
			
		||||
										UpdatePostRec                                        = True$
 | 
			
		||||
										PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$, RecipeIndex> = NewPostSpecSampleQty
 | 
			
		||||
									end
 | 
			
		||||
								Next RecipeIndex
 | 
			
		||||
								If UpdatePostRec then
 | 
			
		||||
									PostCISpecSampQty = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
 | 
			
		||||
									Transaction_Services('PostWriteFieldTransaction', 'CLEAN_INSP', PostCIKey, CLEAN_INSP_SPEC_SS_SAMP_QTY$, PostCISpecSampQty)
 | 
			
		||||
								end
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
				end	
 | 
			
		||||
			end else
 | 
			
		||||
				ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrorMsg = 'Error in ':Service:' service. CLEAN_INSP ':CleanInspKey:' does not exist.'
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		ErrorMsg = 'Error in ':Service:' service. Null CleanInspKey passed into service.'
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										217
									
								
								LSL2/STPROC/CLEAN_SERVICES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								LSL2/STPROC/CLEAN_SERVICES.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,217 @@
 | 
			
		||||
Compile function Clean_Services(@Service, @Params)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
Declare Function Database_Services, Error_Services, Logging_Services, Datetime
 | 
			
		||||
Declare Function RTI_CreateGUID, Tool_Services, SRP_Json, Date_Services
 | 
			
		||||
Declare Subroutine Database_Services, Error_Services, Logging_Services, SRP_Json, Lot_Event_Services
 | 
			
		||||
 | 
			
		||||
$insert LOGICAL
 | 
			
		||||
$Insert CLEAN_EQUATES
 | 
			
		||||
$Insert LOT_EQUATES
 | 
			
		||||
$Insert LOT_OPERATION_EQUATES
 | 
			
		||||
$Insert TOOL_EQUATES
 | 
			
		||||
$Insert TOOL_CLASS_EQUATES
 | 
			
		||||
 | 
			
		||||
Options Stage = 'LWI', 
 | 
			
		||||
 | 
			
		||||
GoToService
 | 
			
		||||
 | 
			
		||||
Return Response or ""
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// SERVICES
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Service CreateNewCleanRecord(LotId, LotOperationId, UserId)
 | 
			
		||||
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    CleanRecId = ''
 | 
			
		||||
    If RowExists('LOT', LotId) then
 | 
			
		||||
        //ToDo check Lot Operation Exists
 | 
			
		||||
        //Checks complete, create the CLEAN record
 | 
			
		||||
        TransDtm = Datetime()
 | 
			
		||||
        CleanRecId = RTI_CreateGUID()
 | 
			
		||||
        CleanRec = ''
 | 
			
		||||
        CleanRec<CLEAN_LOT_ID$> = LotId
 | 
			
		||||
        CleanRec<CLEAN_LOT_OPERATION_ID$> = LotOperationId
 | 
			
		||||
        CleanRec<CLEAN_CLEAN_START_DTM$> = TransDtm
 | 
			
		||||
        CleanRec<CLEAN_CLEAN_START_USER_ID$> = UserId
 | 
			
		||||
        Database_Services('WriteDataRow', 'CLEAN', CleanRecId, CleanRec)
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            If LotOperationId NE '' then
 | 
			
		||||
                LotOperationRec = Database_Services('ReadDataRow', 'LOT_OPERATION', LotOperationId, True$, 0, False$)
 | 
			
		||||
                LotOperationRec<LOT_OPERATION_CLEAN_ID$> = CleanRecId
 | 
			
		||||
                Database_Services('WriteDataRow', 'LOT_OPERATION', LotOperationId, LotOperationRec)
 | 
			
		||||
                If Error_Services('NoError') then
 | 
			
		||||
                    Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'CLEAN_START', 'Created clean record.', '', UserId)
 | 
			
		||||
                end else
 | 
			
		||||
                    ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
       //Todo add error message 
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    If ErrorMessage EQ '' then
 | 
			
		||||
        Response = CleanRecId
 | 
			
		||||
    end else
 | 
			
		||||
        // Todo: Add logging
 | 
			
		||||
        ErrorMessage = 'Error Creating a new clean record: ' : ErrorMessage
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
Service ConvertCleanRecToJson(CleanRecId)
 | 
			
		||||
    
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    CleanRecJson = ''
 | 
			
		||||
    
 | 
			
		||||
    If RowExists('CLEAN', CleanRecId) then
 | 
			
		||||
        CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            objJson = ''
 | 
			
		||||
            If SRP_Json(objJson, 'New', 'Object') then
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'CleanId', CleanRecId, 'String')
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'LotId', CleanRec<CLEAN_LOT_ID$>, 'String')
 | 
			
		||||
                LegacyLotId = Database_Services('ReadDataColumn', 'LOT', CleanRec<CLEAN_LOT_ID$>, LOT_LEGACY_LOT_ID$)
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'LegacyLotId', LegacyLotId, 'String')
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'Recipe', CleanRec<CLEAN_RECIPE$>, 'String')
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'Tool', CleanRec<CLEAN_TOOL$>, 'String')
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'StartUser', CleanRec<CLEAN_CLEAN_START_USER_ID$>, 'String')
 | 
			
		||||
                StartDtm = Date_Services('ConvertDateTimeToISO8601', CleanRec<CLEAN_CLEAN_START_DTM$>)
 | 
			
		||||
                if StartDtm NE '' then
 | 
			
		||||
                    SRP_Json(objJson, 'SetValue', 'StartDtm', StartDtm)
 | 
			
		||||
                end
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'StopUser', CleanRec<CLEAN_CLEAN_STOP_USER_ID$>, 'String')
 | 
			
		||||
                StopDtm = Date_Services('ConvertDateTimeToISO8601', CleanRec<CLEAN_CLEAN_STOP_DTM$>)
 | 
			
		||||
                if StopDtm NE '' then
 | 
			
		||||
                   SRP_Json(objJson, 'SetValue', 'StopDtm', StopDtm, 'String') 
 | 
			
		||||
                end
 | 
			
		||||
                SRP_Json(objJson, 'SetValue', 'LotOperationId', CleanRec<CLEAN_LOT_OPERATION_ID$>, 'String')
 | 
			
		||||
                CleanRecJson = SRP_Json(objJson, 'Stringify', 'Styled')
 | 
			
		||||
                SRP_Json(objJson, 'Release')
 | 
			
		||||
            end else
 | 
			
		||||
                ErrorMessage = 'Error creating clean record json'
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMessage = 'Clean record not found.'
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    If ErrorMessage EQ '' then
 | 
			
		||||
        Response = CleanRecJson
 | 
			
		||||
    end else
 | 
			
		||||
        Error_Services('Add', 'Error getting clean record : ' : ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service MarkCleanRecComplete(CleanRecId, CleanRecipe, CleanTool, CleanUser)
 | 
			
		||||
    
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    TransDtm = Datetime()
 | 
			
		||||
    
 | 
			
		||||
    If RowExists('CLEAN', CleanRecId) then
 | 
			
		||||
        CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
 | 
			
		||||
        If CleanRec<CLEAN_CLEAN_START_DTM$> NE '' then
 | 
			
		||||
            If CleanRec<CLEAN_TOOL$> EQ '' AND CleanRec<CLEAN_RECIPE$> EQ '' then
 | 
			
		||||
                if RowExists('LSL_USERS', CleanUser) then
 | 
			
		||||
                    If CleanRec<CLEAN_COMPLETE_DTM$> EQ '' then
 | 
			
		||||
                        CleanRec<CLEAN_TOOL$> = CleanTool
 | 
			
		||||
                        CleanRec<CLEAN_RECIPE$> = CleanRecipe
 | 
			
		||||
                        CleanRec<CLEAN_CLEAN_STOP_USER_ID$> = CleanUser
 | 
			
		||||
                        CleanRec<CLEAN_CLEAN_STOP_DTM$> = TransDtm
 | 
			
		||||
                        Database_Services('WriteDataRow', 'CLEAN', CleanRecId, CleanRec)
 | 
			
		||||
                        If Error_Services('NoError') then
 | 
			
		||||
                            LotId = CleanRec<CLEAN_LOT_ID$>
 | 
			
		||||
                            Lot_Event_Services('CreateLotEvent', LotId, TransDtm, 'CLEAN', 'Clean completed', CleanTool, CleanUser)
 | 
			
		||||
                        end else
 | 
			
		||||
                            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
                        end
 | 
			
		||||
                    end else
 | 
			
		||||
                        ErrorMessage = 'Clean is already signed off.'
 | 
			
		||||
                    end 
 | 
			
		||||
                end else
 | 
			
		||||
                    ErrorMessage = 'Clean tool or clean recipe is missing.'
 | 
			
		||||
                end
 | 
			
		||||
            end else
 | 
			
		||||
                ErrorMessage = 'Clean has already been logged.'
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = 'Clean has not been started.'
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMessage = 'Clean record not found.'
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    If ErrorMessage NE '' then
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service ValidateCleanRecord(CleanRecId)
 | 
			
		||||
    
 | 
			
		||||
    //ErrorMessage = ''
 | 
			
		||||
    CleanRecValid = False$
 | 
			
		||||
    
 | 
			
		||||
*    If CleanRecId NE '' then
 | 
			
		||||
*        If RowExists('CLEAN', CleanRecId) then
 | 
			
		||||
*            CleanRec = Database_Services('ReadDataRow', 'CLEAN', CleanRecId, True$, 0, False$)
 | 
			
		||||
*            SpecTool = CleanRec<CLEAN_TOOL$>
 | 
			
		||||
*            ToolUsed = CleanRec<CLEAN_RECIPE$>
 | 
			
		||||
*            If ToolUsed EQ SpecTool AND ToolUsed NE '' then
 | 
			
		||||
*                SpecRecipe = CleanRec<CLEAN_SPEC_RECIPE$>
 | 
			
		||||
*                RecipeUsed = CleanRec<CLEAN_RECIPE$>
 | 
			
		||||
*                If RecipeUsed EQ SpecRecipe AND RecipeUsed NE '' then
 | 
			
		||||
*                    CleanRecValid = True$
 | 
			
		||||
*                end
 | 
			
		||||
*            end
 | 
			
		||||
*        end else
 | 
			
		||||
*            ErrorMessage = 'Clean record not found in CLEAN database.'
 | 
			
		||||
*        end
 | 
			
		||||
*    end else
 | 
			
		||||
*        ErrorMessage = 'Clean ID was null.'
 | 
			
		||||
*    end
 | 
			
		||||
*    
 | 
			
		||||
*    If ErrorMessage EQ '' then
 | 
			
		||||
*        Response = CleanRecValid
 | 
			
		||||
*    end else
 | 
			
		||||
*        // Todo: Add logging
 | 
			
		||||
*        ErrorMessage = 'Error validating clean record: ' : ErrorMessage
 | 
			
		||||
*        Error_Services('Add', ErrorMessage)
 | 
			
		||||
*    end
 | 
			
		||||
 | 
			
		||||
    Response = CleanRecValid
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
Service GetCleanToolOptions(CleanRecId)
 | 
			
		||||
 | 
			
		||||
    If RowExists('CLEAN', CleanRecId) then
 | 
			
		||||
        CleanTools = Database_Services('ReadDataColumn', 'CLEAN', CleanRecId, CLEAN_SPEC_CLEAN_TOOL$, True$, 0, False$)
 | 
			
		||||
    end else
 | 
			
		||||
        CleanTools = Tool_Services('GetTools', 'AKRION') 
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    Response = CleanTools
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetCleanRecipeOptions(CleanRecId)
 | 
			
		||||
    
 | 
			
		||||
    If RowExists('CLEAN', CleanRecId) then
 | 
			
		||||
        Recipes = Database_Services('ReadDataColumn', 'CLEAN', CleanRecId, CLEAN_SPEC_CLEAN_RECIPE$, True$, 0, False$)
 | 
			
		||||
    end else
 | 
			
		||||
        //Todo: Make this smarter, so as to block out pre-epi recipes
 | 
			
		||||
        Recipes = XLATE('TOOL_CLASS','AKRION',TOOL_CLASS_RECIPES$,'X')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    Response = Recipes
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -50,109 +50,112 @@ RETURN Result
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Create:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
obj_AppWindow('Create')
 | 
			
		||||
 | 
			
		||||
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
 | 
			
		||||
 | 
			
		||||
GOSUB Refresh
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	obj_AppWindow('Create')
 | 
			
		||||
	
 | 
			
		||||
	Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
 | 
			
		||||
	
 | 
			
		||||
	GOSUB Refresh
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Refresh:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
ReactNoGF:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
* Don't add a return here
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
LUReactor:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
			
		||||
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
			
		||||
 | 
			
		||||
Set_Status(0)
 | 
			
		||||
 | 
			
		||||
TypeOver = ''
 | 
			
		||||
TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
			
		||||
TypeOver<PTYPE$> 	= 'E'		;* Return entire row
 | 
			
		||||
 | 
			
		||||
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
 | 
			
		||||
 | 
			
		||||
IF ReactData = '' THEN RETURN
 | 
			
		||||
 | 
			
		||||
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
 | 
			
		||||
 | 
			
		||||
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
 | 
			
		||||
ColCnt = 7
 | 
			
		||||
 | 
			
		||||
FOR Line = 1 TO LineCnt
 | 
			
		||||
	FOR Column = 2 TO ColCnt
 | 
			
		||||
		stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
			
		||||
	NEXT Column
 | 
			
		||||
NEXT Line
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
			
		||||
	IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
			
		||||
	
 | 
			
		||||
	Set_Status(0)
 | 
			
		||||
	
 | 
			
		||||
	TypeOver = ''
 | 
			
		||||
	TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
			
		||||
	TypeOver<PTYPE$> 	= 'E'		;* Return entire row
 | 
			
		||||
	
 | 
			
		||||
	ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
 | 
			
		||||
	
 | 
			
		||||
	IF ReactData = '' THEN RETURN
 | 
			
		||||
	
 | 
			
		||||
	Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
 | 
			
		||||
	
 | 
			
		||||
	LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
 | 
			
		||||
	ColCnt = 7
 | 
			
		||||
	
 | 
			
		||||
	FOR Line = 1 TO LineCnt
 | 
			
		||||
		FOR Column = 2 TO ColCnt
 | 
			
		||||
			stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
			
		||||
		NEXT Column
 | 
			
		||||
	NEXT Line
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Cancel:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
End_Dialog(@WINDOW,'')
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	End_Dialog(@WINDOW,'')
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
PostEntries:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
			
		||||
Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
			
		||||
 | 
			
		||||
LOOP
 | 
			
		||||
	TestChar = ReactNos[-1,1]
 | 
			
		||||
UNTIL TestChar NE @VM OR ReactNos = ''
 | 
			
		||||
	ReactNos[-1,1] = ''
 | 
			
		||||
REPEAT
 | 
			
		||||
 | 
			
		||||
EventKeys = ''		;* Keys to return to the REACT_EVENT window for a browse of the newly created records
 | 
			
		||||
 | 
			
		||||
IF ReactNos NE '' AND Comment NE '' THEN
 | 
			
		||||
 | 
			
		||||
	EventDTM	= OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')	;* Same DTM for all new records
 | 
			
		||||
	EventType	= 'PD'											;* Passdown
 | 
			
		||||
	LoggedBy	= @USER4
 | 
			
		||||
	
 | 
			
		||||
	ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
 | 
			
		||||
	ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
			
		||||
	Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
			
		||||
	
 | 
			
		||||
	FOR I = 1 TO ReactCnt
 | 
			
		||||
		ReactNo		= ReactNos<1,I>
 | 
			
		||||
		CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
			
		||||
	LOOP
 | 
			
		||||
		TestChar = ReactNos[-1,1]
 | 
			
		||||
	UNTIL TestChar NE @VM OR ReactNos = ''
 | 
			
		||||
		ReactNos[-1,1] = ''
 | 
			
		||||
	REPEAT
 | 
			
		||||
	
 | 
			
		||||
	EventKeys = ''		;* Keys to return to the REACT_EVENT window for a browse of the newly created records
 | 
			
		||||
	
 | 
			
		||||
	IF ReactNos NE '' AND Comment NE '' THEN
 | 
			
		||||
		
 | 
			
		||||
		obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
			
		||||
		EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
			
		||||
	NEXT I
 | 
			
		||||
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
End_Dialog(@WINDOW,EventKeys)
 | 
			
		||||
 | 
			
		||||
		EventDTM	= OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')	;* Same DTM for all new records
 | 
			
		||||
		EventType	= 'PD'											;* Passdown
 | 
			
		||||
		LoggedBy	= @USER4
 | 
			
		||||
		
 | 
			
		||||
		ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
 | 
			
		||||
		
 | 
			
		||||
		FOR I = 1 TO ReactCnt
 | 
			
		||||
			ReactNo		= ReactNos<1,I>
 | 
			
		||||
			CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
			
		||||
			
 | 
			
		||||
			obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
			
		||||
			
 | 
			
		||||
			ErrCode = ''
 | 
			
		||||
			If Get_Status(ErrCode) then
 | 
			
		||||
				Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Error posting entries. ':ErrCode)
 | 
			
		||||
			end else
 | 
			
		||||
				Set_Property(@Window:'.REACT_NO', 'LIST', '')
 | 
			
		||||
				Set_Property(@Window:'.COMMENT', 'TEXT', '')
 | 
			
		||||
			end
 | 
			
		||||
			
 | 
			
		||||
			EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
			
		||||
		NEXT I
 | 
			
		||||
		
 | 
			
		||||
	END else
 | 
			
		||||
		Msg(@Window, '', 'OK', '', 'Process Error':@FM:'React No(s) and Comment must not be null!')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -556,8 +556,6 @@ UnloadProduct:
 | 
			
		||||
		Next CassNo
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -639,3 +637,4 @@ SlotOverview:
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -10,11 +10,12 @@ COMPILE FUNCTION Comm_Dialog_WO_Scan(Method, Parm1)
 | 
			
		||||
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Extract_SI_Keys, Logging_Services
 | 
			
		||||
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract, Error_Services
 | 
			
		||||
DECLARE FUNCTION   Get_Property, Get_Status, Dialog_Box, Send_Message, Set_FSError, Environment_Services
 | 
			
		||||
DECLARE FUNCTION   obj_Vendor_Code, Msg, Error_Services, Logging_Services
 | 
			
		||||
DECLARE FUNCTION   obj_Vendor_Code, Msg, Error_Services, Logging_Services, Error_Services, Service_Services
 | 
			
		||||
 | 
			
		||||
$INSERT LOGICAL
 | 
			
		||||
$INSERT MSG_EQUATES
 | 
			
		||||
$INSERT APPCOLORS
 | 
			
		||||
$INSERT IFX_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU CRLF$	TO \0D0A\
 | 
			
		||||
 | 
			
		||||
@ -23,14 +24,16 @@ EQU COL$LQP_QTY		TO 2
 | 
			
		||||
EQU COL$LQP_PART	TO 3				;* This is either Cust Part No OR Substrate Part Number depending on which control is visible
 | 
			
		||||
EQU COL$LQP_VENDOR	TO 4				;* Vendor code on the Substrate screen 7/14/2011 JCH for SAP
 | 
			
		||||
 | 
			
		||||
EQU CA$ITEM_NO				TO 1		;* Equates for Checking Array passed to Scan routine
 | 
			
		||||
EQU CA$LOT_NO				TO 2
 | 
			
		||||
EQU CA$LOT_QTY				TO 3
 | 
			
		||||
EQU CA$CUST_PART_NO			TO 4
 | 
			
		||||
EQU CA$SUB_PART_NO			TO 5
 | 
			
		||||
EQU CA$SCANNED_LOT_QTY		TO 6
 | 
			
		||||
EQU CA$VERIFY_PART_NO		TO 7
 | 
			
		||||
EQU CA$SUB_SUPP_BY			TO 8
 | 
			
		||||
EQU CA$ITEM_NO         TO 1		;* Equates for Checking Array passed to Scan routine
 | 
			
		||||
EQU CA$LOT_NO          TO 2
 | 
			
		||||
EQU CA$LOT_QTY         TO 3
 | 
			
		||||
EQU CA$CUST_PART_NO    TO 4
 | 
			
		||||
EQU CA$SUB_PART_NO     TO 5
 | 
			
		||||
EQU CA$SCANNED_LOT_QTY TO 6
 | 
			
		||||
EQU CA$VERIFY_PART_NO  TO 7
 | 
			
		||||
EQU CA$SUB_SUPP_BY     TO 8
 | 
			
		||||
EQU CA$WO_NO           TO 9
 | 
			
		||||
EQU CA$REC_DTM         TO 10
 | 
			
		||||
 | 
			
		||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\Receiving'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
@ -48,7 +51,6 @@ Result		= ''
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE Method = 'Create'			; GOSUB Create
 | 
			
		||||
	CASE Method = 'OK'				; GOSUB OK
 | 
			
		||||
	CASE Method = 'Cancel'			; GOSUB Cancel
 | 
			
		||||
	CASE Method = 'FieldClick'		; GOSUB FieldClick
 | 
			
		||||
	CASE Method = 'LQP'				; GOSUB LQP
 | 
			
		||||
	CASE 1
 | 
			
		||||
@ -61,47 +63,47 @@ RETURN Result
 | 
			
		||||
Create:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
VendorDef	= Parm1[1,@FM]
 | 
			
		||||
    VendorDef = Parm1[1,@FM]
 | 
			
		||||
 | 
			
		||||
CheckArray	= FIELD(Parm1,@FM,2,999)
 | 
			
		||||
    CheckArray	= FIELD(Parm1,@FM,2,999)
 | 
			
		||||
 | 
			
		||||
Set_Property(@WINDOW,'@VENDOR_DEF',VendorDef)
 | 
			
		||||
    Set_Property(@WINDOW,'@VENDOR_DEF',VendorDef)
 | 
			
		||||
 | 
			
		||||
OpenQty	= CheckArray<CA$LOT_QTY>
 | 
			
		||||
Set_Property(@WINDOW:'.OPEN_QTY','TEXT',OCONV(OpenQty,'MD0,'))		;* 12/6/2011 JCH
 | 
			
		||||
    OpenQty	= CheckArray<CA$LOT_QTY>
 | 
			
		||||
    Set_Property(@WINDOW:'.OPEN_QTY','TEXT',OCONV(OpenQty,'MD0,'))		;* 12/6/2011 JCH
 | 
			
		||||
 | 
			
		||||
Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
 | 
			
		||||
obj_AppWindow('Create')
 | 
			
		||||
    Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray)
 | 
			
		||||
    obj_AppWindow('Create')
 | 
			
		||||
 | 
			
		||||
TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
 | 
			
		||||
Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
 | 
			
		||||
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
 | 
			
		||||
Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
 | 
			
		||||
    TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
 | 
			
		||||
    Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp)
 | 
			
		||||
    Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM')
 | 
			
		||||
    Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534)
 | 
			
		||||
 | 
			
		||||
GOSUB Refresh
 | 
			
		||||
    GOSUB Refresh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
FieldClick:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CtrlEntID = @WINDOW:'.FIELD_RADIO'
 | 
			
		||||
    CtrlEntID = @WINDOW:'.FIELD_RADIO'
 | 
			
		||||
 | 
			
		||||
ControlSelection = Get_Property(CtrlEntID,'VALUE')
 | 
			
		||||
    ControlSelection = Get_Property(CtrlEntID,'VALUE')
 | 
			
		||||
 | 
			
		||||
Ctrls  = @WINDOW:'.LOT_QTY':@RM				; Props  = 'VISIBLE':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM		; Props := 'VISIBLE':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART':@RM 	; Props := 'VISIBLE':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.WINDOW_LABEL_FIX'		; Props := 'TEXT'
 | 
			
		||||
    Ctrls  = @WINDOW:'.LOT_QTY':@RM				; Props  = 'VISIBLE':@RM
 | 
			
		||||
    Ctrls := @WINDOW:'.LOT_QTY_PART':@RM		; Props := 'VISIBLE':@RM
 | 
			
		||||
    Ctrls := @WINDOW:'.LOT_QTY_SUB_PART':@RM 	; Props := 'VISIBLE':@RM
 | 
			
		||||
    Ctrls := @WINDOW:'.WINDOW_LABEL_FIX'		; Props := 'TEXT'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE ControlSelection = 'LQ'		; Vals = '1':@RM:'0':@RM:'0':@RM:'Customer Wafers'
 | 
			
		||||
	CASE ControlSelection = 'LQP'		; Vals = '0':@RM:'1':@RM:'0':@RM:'Customer Wafers'
 | 
			
		||||
	CASE ControlSelection = 'LQSP'		; Vals = '0':@RM:'0':@RM:'1':@RM:'Substrates'
 | 
			
		||||
END CASE
 | 
			
		||||
    BEGIN CASE
 | 
			
		||||
        CASE ControlSelection = 'LQ'		; Vals = '1':@RM:'0':@RM:'0':@RM:'Customer Wafers'
 | 
			
		||||
        CASE ControlSelection = 'LQP'		; Vals = '0':@RM:'1':@RM:'0':@RM:'Customer Wafers'
 | 
			
		||||
        CASE ControlSelection = 'LQSP'		; Vals = '0':@RM:'0':@RM:'1':@RM:'Substrates'
 | 
			
		||||
    END CASE
 | 
			
		||||
 | 
			
		||||
Set_Property(Ctrls,Props,Vals)
 | 
			
		||||
    Set_Property(Ctrls,Props,Vals)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -109,11 +111,15 @@ RETURN
 | 
			
		||||
Close:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Cancel:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
    ProcIds = Get_Property(@Window, '@PROC_IDS')
 | 
			
		||||
 | 
			
		||||
End_Dialog(@WINDOW,'Cancel')
 | 
			
		||||
    If ProcIds NE '' then 
 | 
			
		||||
        Response = ProcIds
 | 
			
		||||
    end else
 | 
			
		||||
        Response = 'Cancel'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    End_Dialog(@WINDOW,Response)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -122,271 +128,288 @@ RETURN
 | 
			
		||||
Refresh:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
ListArray	= Get_Property(CtrlEntId,'ARRAY')
 | 
			
		||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
 | 
			
		||||
OpenQty	= CheckArray<CA$LOT_QTY>
 | 
			
		||||
    ListArray       = Get_Property(CtrlEntId,'ARRAY')
 | 
			
		||||
    CheckArray      = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
    TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
 | 
			
		||||
    OpenQty         = CheckArray<CA$LOT_QTY>
 | 
			
		||||
 | 
			
		||||
Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
 | 
			
		||||
    Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,'))
 | 
			
		||||
 | 
			
		||||
IF TotalScannedQty < OpenQty THEN
 | 
			
		||||
	Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
 | 
			
		||||
END ELSE
 | 
			
		||||
	Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)	
 | 
			
		||||
END
 | 
			
		||||
    IF TotalScannedQty < OpenQty THEN
 | 
			
		||||
        Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$)
 | 
			
		||||
    END ELSE
 | 
			
		||||
        Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$)	
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
LQP:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CtrlEntID	= Get_Property(@WINDOW,'FOCUS')
 | 
			
		||||
StripANSI	= Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
 | 
			
		||||
SkipSubANSI	= Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
 | 
			
		||||
    CtrlEntID	= Get_Property(@WINDOW,'FOCUS')
 | 
			
		||||
    StripANSI	= Get_Property(@WINDOW:'.STRIP_ANSI','CHECK')
 | 
			
		||||
    SkipSubANSI	= Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK')
 | 
			
		||||
 | 
			
		||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
    CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE CtrlEntID = @WINDOW:'.LOT_QTY'				; ColCnt = 2
 | 
			
		||||
	CASE CtrlEntID = @WINDOW:'.LOT_QTY_PART'		; ColCnt = 3
 | 
			
		||||
	CASE CtrlEntID = @WINDOW:'.LOT_QTY_SUB_PART'	; ColCnt = 4
 | 
			
		||||
END CASE
 | 
			
		||||
    BEGIN CASE
 | 
			
		||||
        CASE CtrlEntID = @WINDOW:'.LOT_QTY'				; ColCnt = 2
 | 
			
		||||
        CASE CtrlEntID = @WINDOW:'.LOT_QTY_PART'		; ColCnt = 3
 | 
			
		||||
        CASE CtrlEntID = @WINDOW:'.LOT_QTY_SUB_PART'	; ColCnt = 4
 | 
			
		||||
    END CASE
 | 
			
		||||
 | 
			
		||||
PrevSelPos	= Get_Property(CtrlEntId,"PREVSELPOS")
 | 
			
		||||
PrevCol 	= PrevSelPos<1>
 | 
			
		||||
PrevRow 	= PrevSelPos<2>
 | 
			
		||||
CurrPos		= Get_Property(CtrlEntId,'SELPOS')
 | 
			
		||||
CurrCol		= CurrPos<1>
 | 
			
		||||
CurrRow		= CurrPos<2>
 | 
			
		||||
ListData	= Get_Property(CtrlEntId,'LIST')
 | 
			
		||||
    PrevSelPos	= Get_Property(CtrlEntId,"PREVSELPOS")
 | 
			
		||||
    PrevCol 	= PrevSelPos<1>
 | 
			
		||||
    PrevRow 	= PrevSelPos<2>
 | 
			
		||||
    CurrPos		= Get_Property(CtrlEntId,'SELPOS')
 | 
			
		||||
    CurrCol		= CurrPos<1>
 | 
			
		||||
    CurrRow		= CurrPos<2>
 | 
			
		||||
    ListData	= Get_Property(CtrlEntId,'LIST')
 | 
			
		||||
 | 
			
		||||
IF ListData<CurrRow,CurrCol> = '' THEN
 | 
			
		||||
	ColPointer = CurrCol
 | 
			
		||||
	LinePointer = CurrRow
 | 
			
		||||
	
 | 
			
		||||
	* Find the first non-empty cell
 | 
			
		||||
	LOOP
 | 
			
		||||
		Test = ListData<LinePointer,(ColPointer) >
 | 
			
		||||
	UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
 | 
			
		||||
		ColPointer -= 1
 | 
			
		||||
		IF ColPointer = 0 THEN
 | 
			
		||||
			ColPointer = ColCnt
 | 
			
		||||
			LinePointer -= 1
 | 
			
		||||
		END
 | 
			
		||||
	REPEAT
 | 
			
		||||
	* Move one past the non empty cell
 | 
			
		||||
	BEGIN CASE
 | 
			
		||||
		CASE LinePointer = 0 
 | 
			
		||||
			* Empty Table
 | 
			
		||||
			LinePointer = 1
 | 
			
		||||
			CoilPointer = 1
 | 
			
		||||
		CASE ColPointer = ColCnt
 | 
			
		||||
			LinePointer += 1
 | 
			
		||||
			ColPointer = 1
 | 
			
		||||
		CASE 1
 | 
			
		||||
			ColPointer += 1
 | 
			
		||||
	END CASE
 | 
			
		||||
	Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
// Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
 | 
			
		||||
ValidationScan  = Trim(ListData<PrevRow,PrevCol>)
 | 
			
		||||
Convert @Lower_Case to @Upper_Case in ValidationScan
 | 
			
		||||
Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
 | 
			
		||||
//DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
 | 
			
		||||
//FYI - conversion would only work when separated from above line
 | 
			
		||||
Convert '/' to '' in ValidationScan
 | 
			
		||||
If ValidationScan NE '' then
 | 
			
		||||
    Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
If Error_Services('NoError') then
 | 
			
		||||
    IF ListData<PrevRow,PrevCol> NE '' THEN
 | 
			
		||||
    IF ListData<CurrRow,CurrCol> = '' THEN
 | 
			
		||||
        ColPointer = CurrCol
 | 
			
		||||
        LinePointer = CurrRow
 | 
			
		||||
        
 | 
			
		||||
        * Find the first non-empty cell
 | 
			
		||||
        LOOP
 | 
			
		||||
            Test = ListData<LinePointer,(ColPointer) >
 | 
			
		||||
        UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
 | 
			
		||||
            ColPointer -= 1
 | 
			
		||||
            IF ColPointer = 0 THEN
 | 
			
		||||
                ColPointer = ColCnt
 | 
			
		||||
                LinePointer -= 1
 | 
			
		||||
            END
 | 
			
		||||
        REPEAT
 | 
			
		||||
        * Move one past the non empty cell
 | 
			
		||||
        BEGIN CASE
 | 
			
		||||
            CASE PrevCol = COL$LQP_LOT
 | 
			
		||||
 | 
			
		||||
                IF StripANSI THEN
 | 
			
		||||
                    RawLot = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                    IF RawLot[1,2] = '1T' OR RawLot[1,2] = '2T' THEN
 | 
			
		||||
                        LotNo = RawLot[3,99]
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.')
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        RETURN
 | 
			
		||||
                    END
 | 
			
		||||
                END ELSE
 | 
			
		||||
                    LotNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
 | 
			
		||||
                
 | 
			
		||||
                    * Don't check Customer Lot Numbers if scanning substrates
 | 
			
		||||
                    
 | 
			
		||||
                    LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
 | 
			
		||||
                        * Accept or Rescan message
 | 
			
		||||
                        Resp             = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!')
 | 
			
		||||
                        LotNo            = ''											;* Clear entered field for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    END
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
 | 
			
		||||
            
 | 
			
		||||
            CASE PrevCol = COL$LQP_QTY									
 | 
			
		||||
                
 | 
			
		||||
                IF StripANSI THEN
 | 
			
		||||
                    RawLotQty = ListData<PrevRow,PrevCol>
 | 
			
		||||
                    IF RawLotQty[1,1] = 'Q' THEN
 | 
			
		||||
                        LotQty = RawLotQty[2,99]
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity')
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        RETURN
 | 
			
		||||
                    END
 | 
			
		||||
                END ELSE
 | 
			
		||||
                    LotQty = ListData<PrevRow,PrevCol>
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                IF NOT(NUM(LotQty)) THEN
 | 
			
		||||
                    * Accept or Rescan message
 | 
			
		||||
                    Resp  = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot Qty ':QUOTE(LotQty):' is not a number!')
 | 
			
		||||
                    LotNo = ''											;* Clear entered field for a rescan
 | 
			
		||||
                    Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                    Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            CASE PrevCol = COL$LQP_PART
 | 
			
		||||
                // Check scanned part number for 5 segments. If there are 5 segments then use segments 3 and 4
 | 
			
		||||
                // to make the actual part number.
 | 
			
		||||
                ScannedPartNo   = Trim(ListData<PrevRow, PrevCol>)
 | 
			
		||||
                If DCount(ScannedPartNo, '-') EQ 5 then
 | 
			
		||||
                    RawPartNo   = ''
 | 
			
		||||
                    If ScannedPartNo[1, 1] _EQC 'P' then RawPartNo := 'P'
 | 
			
		||||
                    If ScannedPartNo[1, 1] _EQC 'S' then RawPartNo := 'S'
 | 
			
		||||
                    RawPartNo  := Field(ScannedPartNo, '-', 3, 2)
 | 
			
		||||
                    ListData<PrevRow, PrevCol>  = RawPartNo
 | 
			
		||||
                end
 | 
			
		||||
                RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                IF StripANSI AND NOT(SkipSubAnsi) THEN				;***************************************
 | 
			
		||||
                    RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                    IF RawPartNo[1,1] _EQC 'P' OR RawPartNo[1,1] _EQC 'S' THEN
 | 
			
		||||
                        PartNo = RawPartNo[2,99]
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No')
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        RETURN
 | 
			
		||||
                    END
 | 
			
		||||
                END ELSE
 | 
			
		||||
                    PartNo = ListData<PrevRow,PrevCol>
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
 | 
			
		||||
                    * Check Customer Part Numbers
 | 
			
		||||
                    LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
                        PartNo = CheckArray<CA$CUST_PART_NO,Pos>
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        * Accept or Rescan message
 | 
			
		||||
                        Resp   = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!')
 | 
			
		||||
                        PartNo = ''											;* Clear entered field for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                END ELSE
 | 
			
		||||
                    * Check Substrate Part Numbers
 | 
			
		||||
                    LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
 | 
			
		||||
                        * Accept or Rescan message
 | 
			
		||||
                        Resp             = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!')
 | 
			
		||||
                        PartNo           = ''											;* Clear entered field for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    END
 | 
			
		||||
                END	;* End of check for Customer supplied or Inventory substrate part number
 | 
			
		||||
                
 | 
			
		||||
                Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
 | 
			
		||||
                
 | 
			
		||||
            CASE PrevCol = COL$LQP_VENDOR 
 | 
			
		||||
                
 | 
			
		||||
                SubSuppBy = CheckArray<CA$SUB_SUPP_BY>
 | 
			
		||||
                VendCode  = ''
 | 
			
		||||
                IF StripANSI AND NOT(SkipSubAnsi) THEN	
 | 
			
		||||
                    RawVendCode = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                    IF RawVendCode[1,2] = '1V' THEN
 | 
			
		||||
                        VendCode = RawVendCode[3,99]
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        TypeOver         = ''
 | 
			
		||||
                        TypeOver<MTYPE$> = 'B&Rescan'
 | 
			
		||||
                        TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code'
 | 
			
		||||
                        Resp             = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code')
 | 
			
		||||
                        Set_Property(CtrlEntID,"SELPOS",PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        RETURN
 | 
			
		||||
                    END
 | 
			
		||||
                END ELSE
 | 
			
		||||
                    VendCode = ListData<PrevRow,PrevCol>
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                IF RowExists('SEMI_VEND_CODE', VendCode) OR SubSuppBy = 'C' ELSE
 | 
			
		||||
                    * Accept or Rescan message
 | 
			
		||||
                    If VendCode EQ '' then VendCode = RawVendCode
 | 
			
		||||
                    Resp             = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Vendor Code ':QUOTE(VendCode):' not found in':@TM:'Vendor Codes on file!')
 | 
			
		||||
                    VendCode         = ''										;* Clear entered field for a rescan
 | 
			
		||||
                    Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                    Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                    Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    RETURN
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
                Set_Property(CtrlEntID,'INVALUE',VendCode,PrevSelPos)
 | 
			
		||||
                
 | 
			
		||||
				ExpectedCode = Get_Property(@WINDOW,'@VENDOR_DEF')
 | 
			
		||||
				
 | 
			
		||||
				IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
 | 
			
		||||
					void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
 | 
			
		||||
					Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
				END
 | 
			
		||||
 | 
			
		||||
                ListArray	= Get_Property(CtrlEntId,'ARRAY')
 | 
			
		||||
                CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
 | 
			
		||||
                TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
 | 
			
		||||
                OpenQty	= CheckArray<CA$LOT_QTY>
 | 
			
		||||
                
 | 
			
		||||
                IF TotalScannedQty >= OpenQty THEN
 | 
			
		||||
                                    
 | 
			
		||||
                    Resp = 	Msg(@WINDOW,'','WO_REC_COMPLETE')
 | 
			
		||||
                    
 | 
			
		||||
                    GOTO OK		
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
            CASE LinePointer = 0 
 | 
			
		||||
                * Empty Table
 | 
			
		||||
                LinePointer = 1
 | 
			
		||||
                CoilPointer = 1
 | 
			
		||||
            CASE ColPointer = ColCnt
 | 
			
		||||
                LinePointer += 1
 | 
			
		||||
                ColPointer = 1
 | 
			
		||||
            CASE 1
 | 
			
		||||
                ColPointer += 1
 | 
			
		||||
        END CASE
 | 
			
		||||
    END 
 | 
			
		||||
end
 | 
			
		||||
        Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
If Error_Services('HasError') then
 | 
			
		||||
    TypeOver            = ''
 | 
			
		||||
    TypeOver<MTYPE$>    = 'B&Rescan'
 | 
			
		||||
    Message             = Error_Services('GetMessage')
 | 
			
		||||
    TypeOver<MTEXT$>    = Message
 | 
			
		||||
    Msg(@Window, TypeOver, 'LABEL_DATA_ERROR')
 | 
			
		||||
    Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
 | 
			
		||||
    Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
 | 
			
		||||
    Error_Services('Clear')
 | 
			
		||||
end else
 | 
			
		||||
    GOSUB Refresh
 | 
			
		||||
end
 | 
			
		||||
    // Global scan validation check. Only alpha-numeric, dashes, spaces, and periods permitted.
 | 
			
		||||
    ValidationScan  = Trim(ListData<PrevRow,PrevCol>)
 | 
			
		||||
    Convert @Lower_Case to @Upper_Case in ValidationScan
 | 
			
		||||
    Convert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ./' to '' in ValidationScan
 | 
			
		||||
    //DPC 2/18/20 - changed validation to allow foward slash per supplier lot naming (Global Wafer)
 | 
			
		||||
    //FYI - conversion would only work when separated from above line
 | 
			
		||||
    Convert '/' to '' in ValidationScan
 | 
			
		||||
    If ValidationScan NE '' then
 | 
			
		||||
        Error_Services('Set', 'Scanned code ' : Quote(Trim(ListData<PrevRow,PrevCol>)) : ' contains an invalid character. Please re-scan.')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    If Error_Services('NoError') then
 | 
			
		||||
        IF ListData<PrevRow,PrevCol> NE '' THEN
 | 
			
		||||
            BEGIN CASE
 | 
			
		||||
                CASE PrevCol = COL$LQP_LOT
 | 
			
		||||
 | 
			
		||||
                    IF StripANSI THEN
 | 
			
		||||
                        RawLot = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                        IF RawLot[1,2] = '1T' OR RawLot[1,2] = '2T' THEN
 | 
			
		||||
                            LotNo = RawLot[3,99]
 | 
			
		||||
                        END ELSE
 | 
			
		||||
                            Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.')
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                            RETURN
 | 
			
		||||
                        END
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        LotNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN
 | 
			
		||||
                    
 | 
			
		||||
                        * Don't check Customer Lot Numbers if scanning substrates
 | 
			
		||||
                        
 | 
			
		||||
                        LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos ELSE
 | 
			
		||||
                            * Accept or Rescan message
 | 
			
		||||
                            Resp             = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!')
 | 
			
		||||
                            LotNo            = ''											;* Clear entered field for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        END
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos)
 | 
			
		||||
                
 | 
			
		||||
                CASE PrevCol = COL$LQP_QTY									
 | 
			
		||||
                    
 | 
			
		||||
                    IF StripANSI THEN
 | 
			
		||||
                        RawLotQty = ListData<PrevRow,PrevCol>
 | 
			
		||||
                        IF RawLotQty[1,1] = 'Q' THEN
 | 
			
		||||
                            LotQty = RawLotQty[2,99]
 | 
			
		||||
                        END ELSE
 | 
			
		||||
                            Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity')
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                            RETURN
 | 
			
		||||
                        END
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        LotQty = ListData<PrevRow,PrevCol>
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    IF NOT(NUM(LotQty)) THEN
 | 
			
		||||
                        * Accept or Rescan message
 | 
			
		||||
                        Resp  = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Lot Qty ':QUOTE(LotQty):' is not a number!')
 | 
			
		||||
                        LotNo = ''											;* Clear entered field for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos)
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
                CASE PrevCol = COL$LQP_PART
 | 
			
		||||
                    // Check scanned part number for 5 segments. If there are 5 segments then use segments 3 and 4
 | 
			
		||||
                    // to make the actual part number.
 | 
			
		||||
                    ScannedPartNo   = Trim(ListData<PrevRow, PrevCol>)
 | 
			
		||||
                    If DCount(ScannedPartNo, '-') EQ 5 then
 | 
			
		||||
                        RawPartNo   = ''
 | 
			
		||||
                        If ScannedPartNo[1, 1] _EQC 'P' then RawPartNo := 'P'
 | 
			
		||||
                        If ScannedPartNo[1, 1] _EQC 'S' then RawPartNo := 'S'
 | 
			
		||||
                        RawPartNo  := Field(ScannedPartNo, '-', 3, 2)
 | 
			
		||||
                        ListData<PrevRow, PrevCol>  = RawPartNo
 | 
			
		||||
                    end
 | 
			
		||||
                    RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                    IF StripANSI AND NOT(SkipSubAnsi) THEN				;***************************************
 | 
			
		||||
                        RawPartNo = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                        IF RawPartNo[1,1] _EQC 'P' OR RawPartNo[1,1] _EQC 'S' THEN
 | 
			
		||||
                            PartNo = RawPartNo[2,99]
 | 
			
		||||
                        END ELSE
 | 
			
		||||
                            Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No')
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                            RETURN
 | 
			
		||||
                        END
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        PartNo = ListData<PrevRow,PrevCol>
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN
 | 
			
		||||
                        * Check Customer Part Numbers
 | 
			
		||||
                        LOCATE PartNo IN CheckArray<CA$VERIFY_PART_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
                            PartNo = CheckArray<CA$CUST_PART_NO,Pos>
 | 
			
		||||
                        END ELSE
 | 
			
		||||
                            * Accept or Rescan message
 | 
			
		||||
                            Resp   = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!')
 | 
			
		||||
                            PartNo = ''											;* Clear entered field for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        END
 | 
			
		||||
                        
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        * Check Substrate Part Numbers
 | 
			
		||||
                        LOCATE PartNo IN CheckArray<CA$SUB_PART_NO> USING @VM SETTING Pos ELSE
 | 
			
		||||
                            * Accept or Rescan message
 | 
			
		||||
                            Resp             = Msg(@Window, '', 'OK', '', 'Scan Error':@FM:'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!')
 | 
			
		||||
                            PartNo           = ''											;* Clear entered field for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        END
 | 
			
		||||
                    END	;* End of check for Customer supplied or Inventory substrate part number
 | 
			
		||||
                    
 | 
			
		||||
                    Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos)
 | 
			
		||||
                    
 | 
			
		||||
                CASE PrevCol = COL$LQP_VENDOR 
 | 
			
		||||
                    
 | 
			
		||||
                    SubSuppBy = CheckArray<CA$SUB_SUPP_BY>
 | 
			
		||||
                    VendCode  = ''
 | 
			
		||||
                    IF StripANSI AND NOT(SkipSubAnsi) THEN	
 | 
			
		||||
                        RawVendCode = TRIM(ListData<PrevRow,PrevCol>)
 | 
			
		||||
                        IF RawVendCode[1,2] = '1V' THEN
 | 
			
		||||
                            VendCode = RawVendCode[3,99]
 | 
			
		||||
                        END ELSE
 | 
			
		||||
                            TypeOver         = ''
 | 
			
		||||
                            TypeOver<MTYPE$> = 'B&Rescan'
 | 
			
		||||
                            TypeOver<MTEXT$> = 'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code'
 | 
			
		||||
                            Resp             = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Scanned Code ':QUOTE(RawVendCode):' is not an ANSI Vendor Code')
 | 
			
		||||
                            Set_Property(CtrlEntID,"SELPOS",PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                            Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                            RETURN
 | 
			
		||||
                        END
 | 
			
		||||
                    END ELSE
 | 
			
		||||
                        VendCode = ListData<PrevRow,PrevCol>
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    IF RowExists('SEMI_VEND_CODE', VendCode) OR SubSuppBy = 'C' ELSE
 | 
			
		||||
                        * Accept or Rescan message
 | 
			
		||||
                        If VendCode EQ '' then VendCode = RawVendCode
 | 
			
		||||
                        Resp             = Msg(@WINDOW, '','OK', '', 'Scan Error':@FM:'Vendor Code ':QUOTE(VendCode):' not found in':@TM:'Vendor Codes on file!')
 | 
			
		||||
                        VendCode         = ''										;* Clear entered field for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntId,"SELPOS",PrevSelPos)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                        Set_Property(CtrlEntID,'INVALUE','',PrevSelPos)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                        RETURN
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
                    Set_Property(CtrlEntID,'INVALUE',VendCode,PrevSelPos)
 | 
			
		||||
                    
 | 
			
		||||
                    ExpectedCode = Get_Property(@WINDOW,'@VENDOR_DEF')
 | 
			
		||||
                    
 | 
			
		||||
                    IF VendCode NE ExpectedCode AND ExpectedCode NE '' THEN
 | 
			
		||||
                        void = Msg(@WINDOW,'','EXPECTED_VENDOR_CODE','',ExpectedCode:@FM:VendCode)
 | 
			
		||||
                        Set_Property(CtrlEntID, 'FOCUS', True$)
 | 
			
		||||
                    end
 | 
			
		||||
 | 
			
		||||
					ProcIds       = Get_Property(@Window, '@PROC_IDS')
 | 
			
		||||
					ListData      = Get_Property(CtrlEntId, 'LIST')
 | 
			
		||||
					WONo          = CheckArray<CA$WO_NO - 1>
 | 
			
		||||
					RecDtm        = CheckArray<CA$REC_DTM - 1>
 | 
			
		||||
					ScanLotNo     = ListData<PrevRow, 1>
 | 
			
		||||
					ScanQty       = ListData<PrevRow, 2>
 | 
			
		||||
					ScanSubPartNo = ListData<PrevRow, 3>
 | 
			
		||||
					ScanVendor    = ListData<PrevRow, 4>
 | 
			
		||||
					ProcIds<-1>   = Service_Services('PostProcedure', 'WORK_ORDER_SERVICES', 'ReceiveReleaseCassette':SD$:WONo:SD$:@User4:SD$:ScanLotNo:SD$:ScanQty:SD$:ScanSubPartNo:SD$:ScanVendor:SD$:RecDtm)
 | 
			
		||||
					If Error_Services('NoError') then
 | 
			
		||||
						Set_Property(@Window, '@PROC_IDS', ProcIds)
 | 
			
		||||
					end else
 | 
			
		||||
						ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
						Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Error submitting scan data to server for processing')
 | 
			
		||||
					end                    
 | 
			
		||||
 | 
			
		||||
                    ListArray	= Get_Property(CtrlEntId,'ARRAY')
 | 
			
		||||
                    CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
 | 
			
		||||
                    TotalScannedQty = SUM(ListArray<COL$LQP_QTY>)
 | 
			
		||||
                    OpenQty	= CheckArray<CA$LOT_QTY>
 | 
			
		||||
                    
 | 
			
		||||
                    IF TotalScannedQty >= OpenQty THEN
 | 
			
		||||
                                        
 | 
			
		||||
                        Resp = 	Msg(@WINDOW,'','WO_REC_COMPLETE')
 | 
			
		||||
                        
 | 
			
		||||
                        GOTO OK		
 | 
			
		||||
                    END
 | 
			
		||||
                    
 | 
			
		||||
            END CASE
 | 
			
		||||
        END 
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    If Error_Services('HasError') then
 | 
			
		||||
        TypeOver            = ''
 | 
			
		||||
        TypeOver<MTYPE$>    = 'B&Rescan'
 | 
			
		||||
        Message             = Error_Services('GetMessage')
 | 
			
		||||
        TypeOver<MTEXT$>    = Message
 | 
			
		||||
        Msg(@Window, TypeOver, 'LABEL_DATA_ERROR')
 | 
			
		||||
        Set_Property(CtrlEntId, 'SELPOS', PrevSelPos)
 | 
			
		||||
        Set_Property(CtrlEntID, 'INVALUE', '', PrevSelPos)
 | 
			
		||||
        Error_Services('Clear')
 | 
			
		||||
    end else
 | 
			
		||||
        GOSUB Refresh
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -395,159 +418,166 @@ RETURN
 | 
			
		||||
OK:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
CtrlEntID = @WINDOW:'.FIELD_RADIO'
 | 
			
		||||
CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
    CtrlEntID  = @WINDOW:'.FIELD_RADIO'
 | 
			
		||||
    CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY')
 | 
			
		||||
 | 
			
		||||
ControlSelection = Get_Property(CtrlEntID,'VALUE')
 | 
			
		||||
    ControlSelection = Get_Property(CtrlEntID,'VALUE')
 | 
			
		||||
 | 
			
		||||
Ctrls  = @WINDOW:'.LOT_QTY':@RM				; Props  = 'VISIBLE':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.LOT_QTY_PART':@RM		; Props := 'VISIBLE':@RM
 | 
			
		||||
Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' 		; Props := 'VISIBLE'
 | 
			
		||||
    Ctrls  = @WINDOW:'.LOT_QTY':@RM				; Props  = 'VISIBLE':@RM
 | 
			
		||||
    Ctrls := @WINDOW:'.LOT_QTY_PART':@RM		; Props := 'VISIBLE':@RM
 | 
			
		||||
    Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' 		; Props := 'VISIBLE'
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE ControlSelection = 'LQ'		; Ctrl = @WINDOW:'.LOT_QTY'
 | 
			
		||||
	CASE ControlSelection = 'LQP'		; Ctrl = @WINDOW:'.LOT_QTY_PART'
 | 
			
		||||
	CASE ControlSelection = 'LQSP'		; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
 | 
			
		||||
END CASE
 | 
			
		||||
    BEGIN CASE
 | 
			
		||||
        CASE ControlSelection = 'LQ'		; Ctrl = @WINDOW:'.LOT_QTY'
 | 
			
		||||
        CASE ControlSelection = 'LQP'		; Ctrl = @WINDOW:'.LOT_QTY_PART'
 | 
			
		||||
        CASE ControlSelection = 'LQSP'		; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART'
 | 
			
		||||
    END CASE
 | 
			
		||||
 | 
			
		||||
ListData = Get_Property(Ctrl,'LIST')
 | 
			
		||||
    ListData = Get_Property(Ctrl,'LIST')
 | 
			
		||||
 | 
			
		||||
TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
 | 
			
		||||
TimeStamp = ICONV(TimeStamp,'DT')
 | 
			
		||||
IF TimeStamp = '' THEN
 | 
			
		||||
	ErrMsg('Invalid Received DateTime data entered.  "mm/dd/yy hh:mm:ss" is the basic format.')
 | 
			
		||||
	RETURN
 | 
			
		||||
END
 | 
			
		||||
    TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT')
 | 
			
		||||
    TimeStamp = ICONV(TimeStamp,'DT')
 | 
			
		||||
    IF TimeStamp = '' THEN
 | 
			
		||||
        ErrMsg('Invalid Received DateTime data entered.  "mm/dd/yy hh:mm:ss" is the basic format.')
 | 
			
		||||
        RETURN
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
CheckArray<CA$SCANNED_LOT_QTY> = ''	;* Clear scanned lot quantities column
 | 
			
		||||
    CheckArray<CA$SCANNED_LOT_QTY> = ''	;* Clear scanned lot quantities column
 | 
			
		||||
 | 
			
		||||
LineCnt = 1
 | 
			
		||||
LOOP
 | 
			
		||||
	TestVal = ListData<LineCnt,1>
 | 
			
		||||
UNTIL TestVal = ''
 | 
			
		||||
	LotNo	= TRIM(ListData<LineCnt,1>)
 | 
			
		||||
	Qty		= TRIM(ListData<LineCnt,2>)
 | 
			
		||||
	
 | 
			
		||||
	IF ControlSelection = 'LQ' THEN
 | 
			
		||||
		LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
			OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
 | 
			
		||||
			CustPartNo	= CheckArray<CA$CUST_PART_NO,Pos>
 | 
			
		||||
			SubPartNo	= CheckArray<CA$SUB_PART_NO,Pos>
 | 
			
		||||
			CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
 | 
			
		||||
		END ELSE
 | 
			
		||||
			* Accept or Rescan message
 | 
			
		||||
			TypeOver			= ''
 | 
			
		||||
			TypeOver<MTYPE$>	= 'B&Rescan'
 | 
			
		||||
			TypeOver<MTEXT$>	= 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
 | 
			
		||||
			Resp				= Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
 | 
			
		||||
			LotNo				= ''									;* Clear entered field for a rescan
 | 
			
		||||
			Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt)		;* Cursor to Lot No for a rescan
 | 
			
		||||
			RETURN
 | 
			
		||||
		END
 | 
			
		||||
    LineCnt = 1
 | 
			
		||||
    LOOP
 | 
			
		||||
        TestVal = ListData<LineCnt,1>
 | 
			
		||||
    UNTIL TestVal = ''
 | 
			
		||||
        LotNo	= TRIM(ListData<LineCnt,1>)
 | 
			
		||||
        Qty		= TRIM(ListData<LineCnt,2>)
 | 
			
		||||
        
 | 
			
		||||
        IF ControlSelection = 'LQ' THEN
 | 
			
		||||
            LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
                OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
 | 
			
		||||
                CustPartNo	= CheckArray<CA$CUST_PART_NO,Pos>
 | 
			
		||||
                SubPartNo	= CheckArray<CA$SUB_PART_NO,Pos>
 | 
			
		||||
                CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
 | 
			
		||||
            END ELSE
 | 
			
		||||
                * Accept or Rescan message
 | 
			
		||||
                TypeOver			= ''
 | 
			
		||||
                TypeOver<MTYPE$>	= 'B&Rescan'
 | 
			
		||||
                TypeOver<MTEXT$>	= 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
 | 
			
		||||
                Resp				= Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
 | 
			
		||||
                LotNo				= ''									;* Clear entered field for a rescan
 | 
			
		||||
                Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt)		;* Cursor to Lot No for a rescan
 | 
			
		||||
                RETURN
 | 
			
		||||
            END
 | 
			
		||||
 | 
			
		||||
	END
 | 
			
		||||
	
 | 
			
		||||
	IF ControlSelection = 'LQP' THEN
 | 
			
		||||
		CustPartNo	= TRIM(ListData<LineCnt,3>)
 | 
			
		||||
		LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
			OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
 | 
			
		||||
			SubPartNo	= CheckArray<CA$SUB_PART_NO,Pos>
 | 
			
		||||
			CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
 | 
			
		||||
		END ELSE
 | 
			
		||||
			* Accept or Rescan message
 | 
			
		||||
			TypeOver = ''
 | 
			
		||||
			TypeOver<MTYPE$> = 'B&Rescan'
 | 
			
		||||
			TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
 | 
			
		||||
			Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
 | 
			
		||||
			
 | 
			
		||||
			LotNo = ''														;* Clear entered field for a rescan
 | 
			
		||||
			Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt)			;* Cursor to Lot No for a rescan
 | 
			
		||||
			RETURN
 | 
			
		||||
		END
 | 
			
		||||
	END
 | 
			
		||||
	
 | 
			
		||||
	IF ControlSelection = 'LQSP' THEN
 | 
			
		||||
		
 | 
			
		||||
		SubPartNo	= TRIM(ListData<LineCnt,3>)
 | 
			
		||||
		Vendor		= TRIM(ListData<LineCnt,4>)		;* Added 7/14/2011 JCH for SAP
 | 
			
		||||
		OrderItemNo = CheckArray<CA$ITEM_NO,1>		;* Changed 2/8/2010 from ' = 1 ' JCH
 | 
			
		||||
		CustPartNo = CheckArray<CA$CUST_PART_NO,1>
 | 
			
		||||
		
 | 
			
		||||
	END ELSE
 | 
			
		||||
		Vendor = ''
 | 
			
		||||
	END
 | 
			
		||||
        END
 | 
			
		||||
        
 | 
			
		||||
        IF ControlSelection = 'LQP' THEN
 | 
			
		||||
            CustPartNo	= TRIM(ListData<LineCnt,3>)
 | 
			
		||||
            LOCATE LotNo IN CheckArray<CA$LOT_NO> USING @VM SETTING Pos THEN
 | 
			
		||||
                OrderItemNo = CheckArray<CA$ITEM_NO,Pos>
 | 
			
		||||
                SubPartNo	= CheckArray<CA$SUB_PART_NO,Pos>
 | 
			
		||||
                CheckArray<CA$SCANNED_LOT_QTY,Pos> = CheckArray<CA$SCANNED_LOT_QTY,Pos> + Qty
 | 
			
		||||
            END ELSE
 | 
			
		||||
                * Accept or Rescan message
 | 
			
		||||
                TypeOver = ''
 | 
			
		||||
                TypeOver<MTYPE$> = 'B&Rescan'
 | 
			
		||||
                TypeOver<MTEXT$> = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!'
 | 
			
		||||
                Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR')
 | 
			
		||||
                
 | 
			
		||||
                LotNo = ''														;* Clear entered field for a rescan
 | 
			
		||||
                Set_Property(CtrlEntId,"SELPOS",CA$LOT_NO:@FM:LineCnt)			;* Cursor to Lot No for a rescan
 | 
			
		||||
                RETURN
 | 
			
		||||
            END
 | 
			
		||||
        END
 | 
			
		||||
        
 | 
			
		||||
        IF ControlSelection = 'LQSP' THEN
 | 
			
		||||
            
 | 
			
		||||
            SubPartNo	= TRIM(ListData<LineCnt,3>)
 | 
			
		||||
            Vendor		= TRIM(ListData<LineCnt,4>)		;* Added 7/14/2011 JCH for SAP
 | 
			
		||||
            OrderItemNo = CheckArray<CA$ITEM_NO,1>		;* Changed 2/8/2010 from ' = 1 ' JCH
 | 
			
		||||
            CustPartNo = CheckArray<CA$CUST_PART_NO,1>
 | 
			
		||||
            
 | 
			
		||||
        END ELSE
 | 
			
		||||
            Vendor = ''
 | 
			
		||||
        END
 | 
			
		||||
 | 
			
		||||
	Result<1,LineCnt> = LineCnt
 | 
			
		||||
	Result<2,LineCnt> = LotNo							;* Lot No
 | 
			
		||||
	Result<3,LineCnt> = Qty
 | 
			
		||||
	Result<4,LineCnt> = CustPartNo	;* PartNo
 | 
			
		||||
	Result<5,LineCnt> = SubPartNo	;* Substrate Part No
 | 
			
		||||
	Result<6,LineCnt> = Vendor		;* Substrate Vendor Code
 | 
			
		||||
	Result<7,LineCnt> = OCONV(TimeStamp,'DT')
 | 
			
		||||
	Result<8,LineCnt> = @USER4
 | 
			
		||||
	Result<9,LineCnt> = OrderItemNo
 | 
			
		||||
	
 | 
			
		||||
	LineCnt += 1
 | 
			
		||||
REPEAT
 | 
			
		||||
        Result<1,LineCnt> = LineCnt
 | 
			
		||||
        Result<2,LineCnt> = LotNo							;* Lot No
 | 
			
		||||
        Result<3,LineCnt> = Qty
 | 
			
		||||
        Result<4,LineCnt> = CustPartNo	;* PartNo
 | 
			
		||||
        Result<5,LineCnt> = SubPartNo	;* Substrate Part No
 | 
			
		||||
        Result<6,LineCnt> = Vendor		;* Substrate Vendor Code
 | 
			
		||||
        Result<7,LineCnt> = OCONV(TimeStamp,'DT')
 | 
			
		||||
        Result<8,LineCnt> = @USER4
 | 
			
		||||
        Result<9,LineCnt> = OrderItemNo
 | 
			
		||||
        
 | 
			
		||||
        LineCnt += 1
 | 
			
		||||
    REPEAT
 | 
			
		||||
 | 
			
		||||
IF ControlSelection NE 'LQSP' THEN
 | 
			
		||||
    IF ControlSelection NE 'LQSP' THEN
 | 
			
		||||
 | 
			
		||||
	* Orders with Epi supplied substrates don't have any lot quantities to check against.
 | 
			
		||||
	
 | 
			
		||||
	ProblemQtyLots = ''
 | 
			
		||||
	FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
 | 
			
		||||
		IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
 | 
			
		||||
			* Lot quantity mismatch
 | 
			
		||||
			ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
 | 
			
		||||
		END
 | 
			
		||||
	NEXT I
 | 
			
		||||
        * Orders with Epi supplied substrates don't have any lot quantities to check against.
 | 
			
		||||
        
 | 
			
		||||
        ProblemQtyLots = ''
 | 
			
		||||
        FOR I = 1 TO COUNT(CheckArray<CA$LOT_NO>,@VM) + (CheckArray<CA$LOT_NO> NE '')
 | 
			
		||||
            IF (CheckArray<CA$SCANNED_LOT_QTY,I> NE '') AND (CheckArray<CA$LOT_QTY,I> NE CheckArray<CA$SCANNED_LOT_QTY,I>) THEN
 | 
			
		||||
                * Lot quantity mismatch
 | 
			
		||||
                ProblemQtyLots<-1> = CheckArray<CA$LOT_NO,I>
 | 
			
		||||
            END
 | 
			
		||||
        NEXT I
 | 
			
		||||
 | 
			
		||||
	IF ProblemQtyLots NE '' THEN
 | 
			
		||||
		LineCnt = 1
 | 
			
		||||
		LOOP
 | 
			
		||||
			TestVal = ListData<LineCnt,1>
 | 
			
		||||
		UNTIL TestVal = ''
 | 
			
		||||
			LotNo	= TRIM(ListData<LineCnt,1>)
 | 
			
		||||
			LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
 | 
			
		||||
				stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$)		;* Flag all the lines with lot numbers having qty problems
 | 
			
		||||
			END
 | 
			
		||||
			LineCnt += 1
 | 
			
		||||
		REPEAT
 | 
			
		||||
		
 | 
			
		||||
		ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
 | 
			
		||||
		RETURN
 | 
			
		||||
	END
 | 
			
		||||
END ELSE
 | 
			
		||||
	* 
 | 
			
		||||
END
 | 
			
		||||
        IF ProblemQtyLots NE '' THEN
 | 
			
		||||
            LineCnt = 1
 | 
			
		||||
            LOOP
 | 
			
		||||
                TestVal = ListData<LineCnt,1>
 | 
			
		||||
            UNTIL TestVal = ''
 | 
			
		||||
                LotNo	= TRIM(ListData<LineCnt,1>)
 | 
			
		||||
                LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN
 | 
			
		||||
                    stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$)		;* Flag all the lines with lot numbers having qty problems
 | 
			
		||||
                END
 | 
			
		||||
                LineCnt += 1
 | 
			
		||||
            REPEAT
 | 
			
		||||
            
 | 
			
		||||
            ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.')
 | 
			
		||||
            RETURN
 | 
			
		||||
        END
 | 
			
		||||
    END ELSE
 | 
			
		||||
        * 
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
NumRows = DCount(Result, @FM)
 | 
			
		||||
NullFound = False$
 | 
			
		||||
For LineIndex = 1 to NumRows
 | 
			
		||||
    Row = Result<LineIndex>
 | 
			
		||||
    NumVals = DCount(Row, @VM)
 | 
			
		||||
    For ValIndex = 1 to NumVals
 | 
			
		||||
        Val = Row<0, ValIndex>
 | 
			
		||||
        If Val EQ '' then NullFound = True$
 | 
			
		||||
    Next ValIndex
 | 
			
		||||
Until NullFound
 | 
			
		||||
Next LineIndex
 | 
			
		||||
If NullFound EQ True$ then
 | 
			
		||||
    ErrMsg('Missing value found in scanned data! Verify your labels and restart your scan operation.')
 | 
			
		||||
    Result = 'Cancel'
 | 
			
		||||
end
 | 
			
		||||
    NumRows = DCount(Result, @FM)
 | 
			
		||||
    NullFound = False$
 | 
			
		||||
    For LineIndex = 1 to NumRows
 | 
			
		||||
        Row = Result<LineIndex>
 | 
			
		||||
        NumVals = DCount(Row, @VM)
 | 
			
		||||
        For ValIndex = 1 to NumVals
 | 
			
		||||
            Val = Row<0, ValIndex>
 | 
			
		||||
            If Val EQ '' then NullFound = True$
 | 
			
		||||
        Next ValIndex
 | 
			
		||||
    Until NullFound
 | 
			
		||||
    Next LineIndex
 | 
			
		||||
    If NullFound EQ True$ then
 | 
			
		||||
        ErrMsg('Missing value found in scanned data! Verify your labels and restart your scan operation.')
 | 
			
		||||
        Result = 'Cancel'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
ScanResult    = Result
 | 
			
		||||
Swap @VM with ' | ' in ScanResult
 | 
			
		||||
    ScanResult    = Result
 | 
			
		||||
    Swap @VM with ' | ' in ScanResult
 | 
			
		||||
 | 
			
		||||
LogData    = ''
 | 
			
		||||
LogData<1> = LoggingDTM
 | 
			
		||||
LogData<2> = @User4
 | 
			
		||||
LogData<3> = ScanResult
 | 
			
		||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
    LogData<1> = LoggingDTM
 | 
			
		||||
    LogData<2> = @User4
 | 
			
		||||
    LogData<3> = ScanResult
 | 
			
		||||
    Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
 | 
			
		||||
 | 
			
		||||
End_Dialog(@WINDOW,Result)
 | 
			
		||||
    ProcIds = Get_Property(@Window, '@PROC_IDS')
 | 
			
		||||
 | 
			
		||||
    If ProcIds NE '' then 
 | 
			
		||||
        Response = ProcIds
 | 
			
		||||
    end else
 | 
			
		||||
        Response = 'Cancel'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    End_Dialog(@WINDOW,Response)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -858,3 +858,4 @@ Result = ReturnData
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ COMPILE FUNCTION Comm_PRS_Stage(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
 | 
			
		||||
DECLARE SUBROUTINE Set_Property,  Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Security_Err_Msg
 | 
			
		||||
DECLARE SUBROUTINE Send_Message, Btree.Extract, Comm_Prod_Spec, Forward_Event, Post_Event
 | 
			
		||||
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Start_Window, MemberOf, Security_Check
 | 
			
		||||
DECLARE FUNCTION Comm_Prod_Spec
 | 
			
		||||
DECLARE FUNCTION Comm_Prod_Spec, obj_Popup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$INSERT POPUP_EQUATES
 | 
			
		||||
@ -22,6 +22,7 @@ $INSERT TOOL_CLASS_EQUATES
 | 
			
		||||
$INSERT SECURITY_RIGHTS_EQU
 | 
			
		||||
$INSERT RTI_STYLE_EQUATES
 | 
			
		||||
$INSERT PROD_SPEC_EQUATES
 | 
			
		||||
$Insert PRS_STAGE_DEFECT_DEFAULTS_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU CRLF$	TO \0D0A\
 | 
			
		||||
 | 
			
		||||
@ -54,6 +55,11 @@ EQU COL$SPOTS			TO 8
 | 
			
		||||
EQU COL$FOV				TO 9
 | 
			
		||||
EQU COL$BL_DEFECTS		TO 10
 | 
			
		||||
 | 
			
		||||
EQU COL$BACK_SCRATCHES    TO 1
 | 
			
		||||
EQU COL$BACK_SCRATCH_LEN  TO 2
 | 
			
		||||
EQU COL$BACK_NODULES      TO 3
 | 
			
		||||
EQU COL$BACK_SPIKES       TO 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EQU COL$MET_TEST			TO 1
 | 
			
		||||
EQU COL$MET_PROP			TO 2
 | 
			
		||||
@ -137,7 +143,7 @@ obj_Appwindow('Create',@WINDOW)
 | 
			
		||||
 | 
			
		||||
**** Set Dropdown columns in .MET_TEST edit table ****
 | 
			
		||||
 | 
			
		||||
MetStyles = Send_Message(@WINDOW:'.MET_TEST','COLSTYLE',0,'')	
 | 
			
		||||
MetStyles = Send_Message(@WINDOW:'.MET_TEST','COLSTYLE',0,'')
 | 
			
		||||
 | 
			
		||||
MetStyles<COL$MET_TEST>				= BitOr(MetStyles<COL$MET_TEST>,DROPDOWN_STYLE$)
 | 
			
		||||
MetStyles<COL$MET_PROP>				= BitOr(MetStyles<COL$MET_PROP>,DROPDOWN_STYLE$)
 | 
			
		||||
@ -186,7 +192,6 @@ NEXT I
 | 
			
		||||
 | 
			
		||||
Send_Message(@WINDOW:'.MET_TEST','COLFORMAT',COL$MET_PROP,PropCodes)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Class Tools is set in the POSCHANGED event for the edit table.
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@ -229,6 +234,23 @@ Read:
 | 
			
		||||
 | 
			
		||||
GOSUB Refresh
 | 
			
		||||
 | 
			
		||||
* Met Property Descriptions *
 | 
			
		||||
 | 
			
		||||
PSNo = Get_Property(@WINDOW : '.PS_NO', 'TEXT')
 | 
			
		||||
Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP')
 | 
			
		||||
 | 
			
		||||
Props = Xlate('PRS_STAGE', PSNo:'*':Stage, PRS_STAGE_MET_PROP$, 'X')
 | 
			
		||||
 | 
			
		||||
PropDescs = obj_Popup('CodeDesc','MET_PROPERTY':@RM:Props)
 | 
			
		||||
 | 
			
		||||
CtrlEntID = @WINDOW:'.MET_TEST'
 | 
			
		||||
DescCount = DCount(PropDescs, @VM)
 | 
			
		||||
FOR Row = 1 to DescCount
 | 
			
		||||
	PropDesc = PropDescs<1, Row>
 | 
			
		||||
	
 | 
			
		||||
	Set_Property(CtrlEntId,"CELLPOS",PropDesc,COL$MET_PROP_DESC:@FM:Row)
 | 
			
		||||
Next Row
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -511,67 +533,29 @@ SurfscanDefaults:
 | 
			
		||||
 | 
			
		||||
Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF Stage = 'FWI' OR Stage = 'LWI' THEN Stage = 'WFR'
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE Stage = 'PRE' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '10'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '1'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '1'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= ''
 | 
			
		||||
		Vals<COL$SPIKES>		= ''
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '1'
 | 
			
		||||
		
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'PRE-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '0':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'PRE' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '10'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '10'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '10'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= ''
 | 
			
		||||
		Vals<COL$SPIKES>		= ''
 | 
			
		||||
		Vals<COL$SPOTS>			= '5'
 | 
			
		||||
		Vals<COL$FOV>			= '2'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '10'
 | 
			
		||||
		
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'PRE-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'WFR' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '20'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '1'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '1'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= '10'
 | 
			
		||||
		Vals<COL$SPIKES>		= '5'
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'FWI' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'FWI-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
 | 
			
		||||
	CASE Stage = 'WFR' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '20'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '10'
 | 
			
		||||
		Vals<COL$PITS>			= '20'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '20'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= '20'
 | 
			
		||||
		Vals<COL$SPIKES>		= '5'
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '20'
 | 
			
		||||
	CASE Stage = 'FWI' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'FWI-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'LWI' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'LWI-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
 | 
			
		||||
	CASE Stage = 'LWI' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'LWI-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE 1
 | 
			
		||||
@ -579,6 +563,23 @@ BEGIN CASE
 | 
			
		||||
 | 
			
		||||
END CASE
 | 
			
		||||
 | 
			
		||||
Vals = ''
 | 
			
		||||
Vals<COL$LPD>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_LPD$>
 | 
			
		||||
Vals<COL$SCRATCHES>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCHES$>
 | 
			
		||||
Vals<COL$SCRATCH_LEN>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCH_LEN$>
 | 
			
		||||
Vals<COL$PITS>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_PITS$>
 | 
			
		||||
Vals<COL$MOUNDS>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_MOUNDS$>
 | 
			
		||||
Vals<COL$STACK_FAULTS>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_STACK_FAULTS$>
 | 
			
		||||
Vals<COL$SPIKES>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPIKES$>
 | 
			
		||||
Vals<COL$SPOTS>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPOTS$>
 | 
			
		||||
Vals<COL$FOV>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_FOV$>
 | 
			
		||||
Vals<COL$BL_DEFECTS>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_BL_DEFECTS$>
 | 
			
		||||
BackVals = ''
 | 
			
		||||
BackVals<COL$BACK_SCRATCHES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCHES$>
 | 
			
		||||
BackVals<COL$BACK_SCRATCH_LEN> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCH_LEN$>
 | 
			
		||||
BackVals<COL$BACK_NODULES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_NODULES$>
 | 
			
		||||
BackVals<COL$BACK_SPIKES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SPIKES$>
 | 
			
		||||
 | 
			
		||||
CurrVals = Get_Property(@WINDOW:'.VISUAL_PARMS','LIST')<1>
 | 
			
		||||
 | 
			
		||||
CONVERT @VM TO '' IN CurrVals
 | 
			
		||||
@ -608,6 +609,13 @@ IF Response THEN
 | 
			
		||||
 | 
			
		||||
	Set_Property(@WINDOW:'.VISUAL_PARMS','LIST',vpList)
 | 
			
		||||
	
 | 
			
		||||
	vpList = ''
 | 
			
		||||
	FOR I = 1 TO 4
 | 
			
		||||
		vpList<1,I> = BackVals<I>
 | 
			
		||||
	NEXT I
 | 
			
		||||
 | 
			
		||||
	Set_Property(@WINDOW:'.BSIDE_PARMS','LIST',vpList)
 | 
			
		||||
	
 | 
			
		||||
END 
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
@ -730,8 +738,8 @@ CurrLine = Get_Property(CtrlEntID,'LIST')<CurrRow>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DefProp = ''
 | 
			
		||||
BEGIN CASE		
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	
 | 
			
		||||
	CASE CurrCol = COL$MET_TOOL_CLASS 
 | 
			
		||||
	
 | 
			
		||||
		PropCode	= CurrLine<1,COL$MET_PROP>
 | 
			
		||||
@ -772,6 +780,12 @@ BEGIN CASE
 | 
			
		||||
	
 | 
			
		||||
		RETURN
 | 
			
		||||
		
 | 
			
		||||
	CASE CurrCol = COL$MET_PROP_DESC
 | 
			
		||||
		
 | 
			
		||||
		PropCode	= CurrLine<1,COL$MET_PROP>
 | 
			
		||||
		
 | 
			
		||||
		DefProp = obj_Popup('CodeDesc','MET_PROPERTY':@RM:PropCode)	
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	CASE CurrCol = COL$MET_MIN AND CurrLine<1,COL$MET_MIN> = ''
 | 
			
		||||
		MetTest = CurrLine<1,COL$MET_TEST>
 | 
			
		||||
@ -1235,3 +1249,6 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -581,171 +581,131 @@ Refresh:
 | 
			
		||||
    // RDS_UNLOAD
 | 
			
		||||
    
 | 
			
		||||
    If @WINDOW EQ 'RDS_UNLOAD' then
 | 
			
		||||
        
 | 
			
		||||
        DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
            
 | 
			
		||||
		CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
			
		||||
		Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
			
		||||
		Set_Property(CtrlName, 'VISIBLE', True$)
 | 
			
		||||
		MetList        = Get_Property(CtrlName,'LIST')
 | 
			
		||||
		ThickOutOfSpec = False$
 | 
			
		||||
		CresOutOfSpec  = False$
 | 
			
		||||
		MLCnt          = COUNT(MetList,@FM) + (MetList NE '')
 | 
			
		||||
		FOR Line = 1 TO MLCnt
 | 
			
		||||
			IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
 | 
			
		||||
				MetResult        = MetList<Line,COL$UL_MET_RESULT>
 | 
			
		||||
				MetMin           = MetList<Line,COL$UL_MET_MIN>
 | 
			
		||||
				MetMax           = MetList<Line,COL$UL_MET_MAX>
 | 
			
		||||
				PhaseMin         = MetList<Line,COL$UL_MET_PHASE_MIN>
 | 
			
		||||
				PhaseResult      = MetList<Line,COL$UL_MET_PHASE_RESULT>
 | 
			
		||||
				ScanRecipe       = MetList<Line,COL$UL_MET_RECIPE>
 | 
			
		||||
				PSN              = Get_Property(@Window : '.PSN', 'TEXT')
 | 
			
		||||
				PRSStageKey      = PSN:'*UNLOAD'
 | 
			
		||||
				MetTest          = MetList<Line,COL$UL_MET_TEST>
 | 
			
		||||
				PRSStageRec      = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
 | 
			
		||||
				SpecTests        = PRSStageRec<PRS_STAGE_MET_TEST$>
 | 
			
		||||
				SpecRecipe       = ''
 | 
			
		||||
				RDSNo            = Get_Property(@Window:'.RDS_NO', 'TEXT')
 | 
			
		||||
				QAMetKey         = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
			
		||||
				WOMatQARec       = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
 | 
			
		||||
				DataPoints       = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
 | 
			
		||||
				Begin Case
 | 
			
		||||
					Case MetTest EQ 'THICK_ONLY'
 | 
			
		||||
						// Check each point to see if any are out of spec
 | 
			
		||||
						For each DataPoint in DataPoints using @SVM setting ThickIndex
 | 
			
		||||
						Until DataPoint EQ ''
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case ThickIndex GT 10
 | 
			
		||||
									Null
 | 
			
		||||
								Case (DataPoint EQ '')
 | 
			
		||||
									ThickOutOfSpec = True$
 | 
			
		||||
								Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
 | 
			
		||||
									ThickOutOfSpec = True$
 | 
			
		||||
							End Case
 | 
			
		||||
						Next DataPoint
 | 
			
		||||
						
 | 
			
		||||
					Case MetTest EQ 'CRES'
 | 
			
		||||
						// Check critical points to see if any are out of spec (both HgCV and Phase)
 | 
			
		||||
						CriticalPoints = '1,2,5,6,9'
 | 
			
		||||
						For each DataPoint in DataPoints using @SVM setting CresIndex
 | 
			
		||||
						Until DataPoint EQ ''
 | 
			
		||||
							HgCVDataPoint  = DataPoint[1, 'F':@TM]
 | 
			
		||||
							PhaseDataPoint = DataPoint[-1, 'B':@TM]
 | 
			
		||||
							CriticalPoint  = Index(CriticalPoints, CresIndex, 1)
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case (HgCVDataPoint EQ '') and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (PhaseDataPoint EQ '') and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
							End Case
 | 
			
		||||
						Next DataPoint
 | 
			
		||||
				End Case
 | 
			
		||||
				QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
 | 
			
		||||
				Locate MetTest in SpecTests using @VM setting vPos then
 | 
			
		||||
					SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
 | 
			
		||||
				end                
 | 
			
		||||
				NoError = True$
 | 
			
		||||
 | 
			
		||||
        If (DevelopmentFlag EQ True$) then
 | 
			
		||||
            
 | 
			
		||||
            CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
			
		||||
            Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
			
		||||
            Set_Property(CtrlName, 'VISIBLE', True$)
 | 
			
		||||
            MetList        = Get_Property(CtrlName,'LIST')
 | 
			
		||||
            ThickOutOfSpec = False$
 | 
			
		||||
            CresOutOfSpec  = False$
 | 
			
		||||
            MLCnt          = COUNT(MetList,@FM) + (MetList NE '')
 | 
			
		||||
            FOR Line = 1 TO MLCnt
 | 
			
		||||
                IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
 | 
			
		||||
                    MetResult        = MetList<Line,COL$UL_MET_RESULT>
 | 
			
		||||
                    MetMin           = MetList<Line,COL$UL_MET_MIN>
 | 
			
		||||
                    MetMax           = MetList<Line,COL$UL_MET_MAX>
 | 
			
		||||
                    PhaseMin         = MetList<Line,COL$UL_MET_PHASE_MIN>
 | 
			
		||||
                    PhaseResult      = MetList<Line,COL$UL_MET_PHASE_RESULT>
 | 
			
		||||
                    ScanRecipe       = MetList<Line,COL$UL_MET_RECIPE>
 | 
			
		||||
                    PSN              = Get_Property(@Window : '.PSN', 'TEXT')
 | 
			
		||||
                    PRSStageKey      = PSN:'*UNLOAD'
 | 
			
		||||
                    MetTest          = MetList<Line,COL$UL_MET_TEST>
 | 
			
		||||
                    PRSStageRec      = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
 | 
			
		||||
                    SpecTests        = PRSStageRec<PRS_STAGE_MET_TEST$>
 | 
			
		||||
                    SpecRecipe       = ''
 | 
			
		||||
                    RDSNo            = Get_Property(@Window:'.RDS_NO', 'TEXT')
 | 
			
		||||
                    QAMetKey         = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
			
		||||
                    WOMatQARec       = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
 | 
			
		||||
                    DataPoints       = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
 | 
			
		||||
                    Begin Case
 | 
			
		||||
                        Case MetTest EQ 'THICK_ONLY'
 | 
			
		||||
                            // Check each point to see if any are out of spec
 | 
			
		||||
                            For each DataPoint in DataPoints using @SVM setting ThickIndex
 | 
			
		||||
                            Until DataPoint EQ ''
 | 
			
		||||
                                Begin Case
 | 
			
		||||
                                    Case ThickIndex GT 10
 | 
			
		||||
                                        Null
 | 
			
		||||
                                    Case (DataPoint EQ '')
 | 
			
		||||
                                        ThickOutOfSpec = True$
 | 
			
		||||
                                    Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
 | 
			
		||||
                                        ThickOutOfSpec = True$
 | 
			
		||||
                                End Case
 | 
			
		||||
                            Next DataPoint
 | 
			
		||||
                            
 | 
			
		||||
                        Case MetTest EQ 'CRES'
 | 
			
		||||
                            // Check critical points to see if any are out of spec (both HgCV and Phase)
 | 
			
		||||
                            CriticalPoints = '1,2,5,6,9'
 | 
			
		||||
                            For each DataPoint in DataPoints using @SVM setting CresIndex
 | 
			
		||||
                            Until DataPoint EQ ''
 | 
			
		||||
                                HgCVDataPoint  = DataPoint[1, 'F':@TM]
 | 
			
		||||
                                PhaseDataPoint = DataPoint[-1, 'B':@TM]
 | 
			
		||||
                                CriticalPoint  = Index(CriticalPoints, CresIndex, 1)
 | 
			
		||||
                                Begin Case
 | 
			
		||||
                                    Case (HgCVDataPoint EQ '') and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (PhaseDataPoint EQ '') and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                End Case
 | 
			
		||||
                            Next DataPoint
 | 
			
		||||
                    End Case
 | 
			
		||||
                    QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
 | 
			
		||||
                    Locate MetTest in SpecTests using @VM setting vPos then
 | 
			
		||||
                        SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
 | 
			
		||||
                    end                
 | 
			
		||||
                    NoError = True$
 | 
			
		||||
 | 
			
		||||
                    If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
 | 
			
		||||
                        Color = YELLOW$
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    If QAMetOutofSpec EQ True$ then
 | 
			
		||||
                        Color   = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
 | 
			
		||||
                        stat    = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    If (MetResult LT MetMin) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    If (MetResult GT MetMax) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    If (PhaseResult LT PhaseMin) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
 | 
			
		||||
                    DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
 | 
			
		||||
                    If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    If (NoError EQ True$) then
 | 
			
		||||
                        Color = GREEN$
 | 
			
		||||
                        stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                END	ELSE
 | 
			
		||||
                    Color = GREEN$
 | 
			
		||||
                    stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
                END
 | 
			
		||||
                
 | 
			
		||||
            NEXT Line
 | 
			
		||||
            
 | 
			
		||||
            Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
 | 
			
		||||
            
 | 
			
		||||
            IF MemberOf(@USER4, 'OI_ADMIN') THEN
 | 
			
		||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
 | 
			
		||||
            END ELSE
 | 
			
		||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
			
		||||
            END
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
        end else
 | 
			
		||||
            
 | 
			
		||||
            CtrlName = @WINDOW:'.MET_TEST'                
 | 
			
		||||
            Set_Property(@Window : '.EDT_QA_MET', 'VISIBLE', False$)
 | 
			
		||||
            Set_Property(CtrlName, 'VISIBLE', True$)
 | 
			
		||||
            MetList = Get_Property(CtrlName,'LIST')
 | 
			
		||||
            
 | 
			
		||||
            MLCnt = COUNT(MetList,@FM) + (MetList NE '')
 | 
			
		||||
            FOR Line = 1 TO MLCnt
 | 
			
		||||
                IF MetList<Line,COL$MET_TEST> NE '' THEN
 | 
			
		||||
                    BEGIN CASE
 | 
			
		||||
                        CASE MetList<Line,COL$MET_RESULT> = '' 
 | 
			
		||||
                            Color = YELLOW$
 | 
			
		||||
                        CASE MetList<Line,COL$MET_RESULT> < MetList<Line,COL$MET_MIN> OR MetList<Line,COL$MET_RESULT> > MetList<Line,COL$MET_MAX>
 | 
			
		||||
                            Color = RED$
 | 
			
		||||
                        CASE 1
 | 
			
		||||
                            Color = GREEN$
 | 
			
		||||
                    END CASE
 | 
			
		||||
                    
 | 
			
		||||
                END	ELSE
 | 
			
		||||
                    Color = GREEN$
 | 
			
		||||
                END;* End of check for Met Test on the current line
 | 
			
		||||
                
 | 
			
		||||
                stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
            NEXT Line
 | 
			
		||||
            
 | 
			
		||||
            Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
 | 
			
		||||
            
 | 
			
		||||
            IF MemberOf(@USER4, 'OI_ADMIN') THEN
 | 
			
		||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
 | 
			
		||||
            END ELSE
 | 
			
		||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
			
		||||
            END
 | 
			
		||||
        end	
 | 
			
		||||
    end
 | 
			
		||||
				If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
 | 
			
		||||
					Color = YELLOW$
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				If QAMetOutofSpec EQ True$ then
 | 
			
		||||
					Color   = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
 | 
			
		||||
					stat    = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				If (MetResult LT MetMin) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				If (MetResult GT MetMax) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				If (PhaseResult LT PhaseMin) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
 | 
			
		||||
				DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
 | 
			
		||||
				If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				If (NoError EQ True$) then
 | 
			
		||||
					Color = GREEN$
 | 
			
		||||
					stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
			END	ELSE
 | 
			
		||||
				Color = GREEN$
 | 
			
		||||
				stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
			END
 | 
			
		||||
			
 | 
			
		||||
		NEXT Line
 | 
			
		||||
		
 | 
			
		||||
		Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
 | 
			
		||||
		
 | 
			
		||||
		IF MemberOf(@USER4, 'OI_ADMIN') THEN
 | 
			
		||||
			Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
 | 
			
		||||
		END ELSE
 | 
			
		||||
			Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
			
		||||
		END
 | 
			
		||||
	end
 | 
			
		||||
    * End of check for Unload OR Post_Epi windows
 | 
			
		||||
    
 | 
			
		||||
    ****************************************************************************************************************************************
 | 
			
		||||
@ -2055,7 +2015,7 @@ HoldClick:
 | 
			
		||||
		HoldData   = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType:@FM:Stage:@FM:Interrupted)
 | 
			
		||||
		
 | 
			
		||||
		If HoldData NE 'Cancel' then
 | 
			
		||||
			Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, '')
 | 
			
		||||
			Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, @User4)
 | 
			
		||||
			IF Error_Services("HasError") THEN
 | 
			
		||||
				ErrCode = Error_Services("GetMessage")
 | 
			
		||||
				ErrMsg(errCode)
 | 
			
		||||
@ -2669,9 +2629,8 @@ MetTestDC:
 | 
			
		||||
    Lines	  = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
 | 
			
		||||
    TestLine  = Lines<CurrRow>
 | 
			
		||||
    LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
 | 
			
		||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
    
 | 
			
		||||
    If (DevelopmentFlag EQ True$) and (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$)  then
 | 
			
		||||
    If (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$)  then
 | 
			
		||||
        Ctrls := @WINDOW:'.EDT_QA_MET':@RM	; Props := 'SELPOS':@RM
 | 
			
		||||
        Ctrls := @WINDOW:'.EDT_QA_MET'		; Props := 'LIST'
 | 
			
		||||
    end else
 | 
			
		||||
@ -2708,8 +2667,7 @@ MetTestDC:
 | 
			
		||||
    BEGIN CASE
 | 
			
		||||
        CASE MetTest EQ ''
 | 
			
		||||
            Null
 | 
			
		||||
        
 | 
			
		||||
        CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
 | 
			
		||||
        CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
 | 
			
		||||
            ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
 | 
			
		||||
            Send_Event(@Window, "READ")
 | 
			
		||||
        CASE Otherwise$
 | 
			
		||||
@ -2863,57 +2821,47 @@ return
 | 
			
		||||
 | 
			
		||||
RefreshWaferCounterData:
 | 
			
		||||
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
        
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
			
		||||
		QtyBackColor = GREEN$
 | 
			
		||||
        RDSNo        = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
			
		||||
        If RDSNo NE '' then 
 | 
			
		||||
			FqaWcRec        = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
 | 
			
		||||
			WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
			Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
			WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
 | 
			
		||||
			Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
			
		||||
	QtyBackColor = GREEN$
 | 
			
		||||
	RDSNo        = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
			
		||||
	If RDSNo NE '' then 
 | 
			
		||||
		FqaWcRec        = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
 | 
			
		||||
		WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
		Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
		WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
 | 
			
		||||
		Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
 | 
			
		||||
			*****************************************
 | 
			
		||||
			* WaferCounter - Wafers Quantity Section *
 | 
			
		||||
			*****************************************
 | 
			
		||||
			If (WaferCounterQty NE '') then
 | 
			
		||||
				If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
 | 
			
		||||
			end else
 | 
			
		||||
				QtyBackColor = ORANGE$
 | 
			
		||||
			end			
 | 
			
		||||
			
 | 
			
		||||
			WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
 | 
			
		||||
			WaferSize = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
			If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
				WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					WCCurrMode = ''
 | 
			
		||||
					If RowExists('TOOL', WCToolID) then
 | 
			
		||||
						WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
						WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
					end
 | 
			
		||||
		*****************************************
 | 
			
		||||
		* WaferCounter - Wafers Quantity Section *
 | 
			
		||||
		*****************************************
 | 
			
		||||
		If (WaferCounterQty NE '') then
 | 
			
		||||
			If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
 | 
			
		||||
		end else
 | 
			
		||||
			QtyBackColor = ORANGE$
 | 
			
		||||
		end			
 | 
			
		||||
		
 | 
			
		||||
		WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
 | 
			
		||||
		WaferSize = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
		If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
			WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
			If Error_Services('NoError') then 
 | 
			
		||||
				WCCurrMode = ''
 | 
			
		||||
				If RowExists('TOOL', WCToolID) then
 | 
			
		||||
					WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
					WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
					Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
					ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
				end
 | 
			
		||||
			end else
 | 
			
		||||
				ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
 | 
			
		||||
			end			
 | 
			
		||||
		end
 | 
			
		||||
		Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
        
 | 
			
		||||
    end else
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
			
		||||
    end
 | 
			
		||||
				ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
 | 
			
		||||
		end			
 | 
			
		||||
	end
 | 
			
		||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.I
 | 
			
		||||
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
 | 
			
		||||
Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services
 | 
			
		||||
Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
 | 
			
		||||
Declare Function Nica_Orders_Services
 | 
			
		||||
Declare Function Nica_Orders_Services, SRP_Date, React_Item_Services, SRP_Datetime, Datetime
 | 
			
		||||
 | 
			
		||||
$Insert MSG_EQUATES
 | 
			
		||||
$Insert APPCOLORS
 | 
			
		||||
@ -1229,64 +1229,51 @@ SvcsOptions:
 | 
			
		||||
			If ItemType NE '' then
 | 
			
		||||
				
 | 
			
		||||
				RetVal = ''
 | 
			
		||||
				ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
 | 
			
		||||
				
 | 
			
		||||
				ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')	
 | 
			
		||||
				RIKeys   = React_Item_Services('GetReactItems', ItemType, 'N,U')
 | 
			
		||||
				
 | 
			
		||||
				OPEN 'DICT.REACT_ITEM' to DictReactItem else
 | 
			
		||||
					ErrMsg('Unable to open DICT.REACT_ITEM')
 | 
			
		||||
					return
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				SearchString  = 'RI_TYPE':@VM:ItemType:@FM
 | 
			
		||||
				SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM 
 | 
			
		||||
				
 | 
			
		||||
				RIKeys = ''
 | 
			
		||||
				Option = ''
 | 
			
		||||
				Flag = ''
 | 
			
		||||
				
 | 
			
		||||
				Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag)
 | 
			
		||||
				If Get_Status(errCode) then
 | 
			
		||||
					ErrMsg(errCode)
 | 
			
		||||
					return
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
				TypeOver = ''
 | 
			
		||||
				TypeOVer<PMODE$> = 'K'
 | 
			
		||||
				TypeOver<PDISPLAY$> = RIKeys
 | 
			
		||||
				RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
 | 
			
		||||
				
 | 
			
		||||
				If RetVal NE '' then
 | 
			
		||||
					obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
 | 
			
		||||
					
 | 
			
		||||
					RIRec = XLATE('REACT_ITEM',RetVal,'','X')
 | 
			
		||||
					
 | 
			
		||||
					If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
 | 
			
		||||
						CardWindow	= 'REACT_ITEM'
 | 
			
		||||
						CardKey		= RetVal
 | 
			
		||||
						DefaultRec	= ''
 | 
			
		||||
						NewCardCtrl	= ''
 | 
			
		||||
						RecalcCtrl	= @Window:'.SERV_INFO'
 | 
			
		||||
						RecalcPos	= SelPos
 | 
			
		||||
						RetCtrl		= @Window:'.SERV_INFO'
 | 
			
		||||
						RetPos		= SelPos
 | 
			
		||||
						
 | 
			
		||||
						oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
 | 
			
		||||
						
 | 
			
		||||
						obj_AppWindow('ViewNewCard',oAParms)
 | 
			
		||||
						
 | 
			
		||||
						Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
 | 
			
		||||
						
 | 
			
		||||
						If Get_Status(errCode) then
 | 
			
		||||
							ErrMsg(errCode)
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					GoSub Refresh
 | 
			
		||||
				If Error_Services('NoError') then
 | 
			
		||||
				    
 | 
			
		||||
                    TypeOver            = ''
 | 
			
		||||
                    TypeOVer<PMODE$>    = 'K'
 | 
			
		||||
                    TypeOver<PDISPLAY$> = RIKeys
 | 
			
		||||
                    RetVal              = Popup(@Window,TypeOver,'REACT_ITEM')
 | 
			
		||||
                    
 | 
			
		||||
                    If RetVal NE '' then
 | 
			
		||||
                        obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
 | 
			
		||||
                        
 | 
			
		||||
                        RIRec = XLATE('REACT_ITEM',RetVal,'','X')
 | 
			
		||||
                        
 | 
			
		||||
                        If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
 | 
			
		||||
                            CardWindow	= 'REACT_ITEM'
 | 
			
		||||
                            CardKey		= RetVal
 | 
			
		||||
                            DefaultRec	= ''
 | 
			
		||||
                            NewCardCtrl	= ''
 | 
			
		||||
                            RecalcCtrl	= @Window:'.SERV_INFO'
 | 
			
		||||
                            RecalcPos	= SelPos
 | 
			
		||||
                            RetCtrl		= @Window:'.SERV_INFO'
 | 
			
		||||
                            RetPos		= SelPos
 | 
			
		||||
                            
 | 
			
		||||
                            oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
 | 
			
		||||
                            
 | 
			
		||||
                            obj_AppWindow('ViewNewCard',oAParms)
 | 
			
		||||
                            
 | 
			
		||||
                            Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
 | 
			
		||||
                            
 | 
			
		||||
                            If Get_Status(errCode) then
 | 
			
		||||
                                ErrMsg(errCode)
 | 
			
		||||
                            end
 | 
			
		||||
                        end
 | 
			
		||||
                        
 | 
			
		||||
                        GoSub Refresh
 | 
			
		||||
                    end				    
 | 
			
		||||
				end else
 | 
			
		||||
				    Error_Services('DisplayError')
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
			end	;* End of check for null SNReq
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
	GoSub Refresh
 | 
			
		||||
@ -1877,4 +1864,3 @@ ColorRemRiTable:
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1099,7 +1099,7 @@ SignSupVer:
 | 
			
		||||
    ************************************************************************
 | 
			
		||||
    WMOKey = Get_Property(@WINDOW,'ID')
 | 
			
		||||
    PSNo = Get_Property(@WINDOW:'.PS_NO)','TEXT')
 | 
			
		||||
    VerInst = XLATE('PRS_STAGE',PSNo:'*QA',PRS_STAGE_INST$,'X')
 | 
			
		||||
    VerInst = XLATE('PRS_STAGE',PSNo:'*MO_QA',PRS_STAGE_INST$,'X')
 | 
			
		||||
    IF (VerInst NE '') THEN
 | 
			
		||||
        Yes = Dialog_Box( 'RDS_VER', @WINDOW, VerInst )
 | 
			
		||||
        IF NOT(Yes) THEN
 | 
			
		||||
@ -1107,29 +1107,25 @@ SignSupVer:
 | 
			
		||||
        END
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
        
 | 
			
		||||
        ****************************************
 | 
			
		||||
        * Verify the Wafer Counter information *
 | 
			
		||||
        ****************************************
 | 
			
		||||
	****************************************
 | 
			
		||||
	* Verify the Wafer Counter information *
 | 
			
		||||
	****************************************
 | 
			
		||||
 | 
			
		||||
        WafersOut       = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')        
 | 
			
		||||
        WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
        
 | 
			
		||||
        ************************************
 | 
			
		||||
        * Wafer Counter - Quantity Section *
 | 
			
		||||
        ************************************
 | 
			
		||||
        If (WaferCounterQty NE '') then
 | 
			
		||||
            If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
                ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
 | 
			
		||||
                RETURN 0
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
            RETURN 0
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
	WafersOut       = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')        
 | 
			
		||||
	WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
	
 | 
			
		||||
	************************************
 | 
			
		||||
	* Wafer Counter - Quantity Section *
 | 
			
		||||
	************************************
 | 
			
		||||
	If (WaferCounterQty NE '') then
 | 
			
		||||
		If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
			ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
 | 
			
		||||
			RETURN 0
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
		RETURN 0
 | 
			
		||||
	end
 | 
			
		||||
    
 | 
			
		||||
    **************************
 | 
			
		||||
    * Verify user's password *
 | 
			
		||||
@ -1711,129 +1707,142 @@ AddMakeup:
 | 
			
		||||
            END
 | 
			
		||||
        NEXT I
 | 
			
		||||
        
 | 
			
		||||
        Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
 | 
			
		||||
        Continue     = True$
 | 
			
		||||
        ShowSpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$, 'X')
 | 
			
		||||
        If ShowSpecInst then
 | 
			
		||||
        	SpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SPEC_INST$, 'X')
 | 
			
		||||
        	If SpecInst NE '' then 
 | 
			
		||||
        		Continue = Dialog_Box('NDW_ACKNOWLEDGE_MESSAGE', @Window, SpecInst)
 | 
			
		||||
        		If Not(Continue) then
 | 
			
		||||
        			Msg(@Window, '', 'OK', '', 'Process Error':@FM:'This PSN requires you to acknowledge special instructions to add makeup wafers.')
 | 
			
		||||
        		end
 | 
			
		||||
        	end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        Begin Case
 | 
			
		||||
            Case Response EQ True$
 | 
			
		||||
                // User requested to convert the current cassette into a makeup box.
 | 
			
		||||
				WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					SAPBatchNo      = WOMatRec<WO_MAT_SAP_BATCH_NO$>
 | 
			
		||||
					SAPTXDtm        = WOMatRec<WO_MAT_SAP_TX_DTM$>
 | 
			
		||||
					AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
 | 
			
		||||
					HasBatchNo      = (SAPBatchNo NE '')
 | 
			
		||||
					FullBoxReject   = (SAPBatchNo[-1, 1] = 'R')
 | 
			
		||||
					Begin Case
 | 
			
		||||
						Case AwaitingBatchNo
 | 
			
		||||
							InvalidRequest = True$
 | 
			
		||||
							ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
 | 
			
		||||
							Return
 | 
			
		||||
						Case FullBoxReject
 | 
			
		||||
							InvalidRequest = True$
 | 
			
		||||
							ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
 | 
			
		||||
							Return
 | 
			
		||||
						Case HasBatchNo
 | 
			
		||||
							// Operation limited to LEAD and SUPERVISOR groups
 | 
			
		||||
							OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
 | 
			
		||||
							Response    = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
 | 
			
		||||
							
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case Response EQ 1
 | 
			
		||||
									Response = True$        ; // User Clicked Override
 | 
			
		||||
								Case Response EQ 2
 | 
			
		||||
									Response = False$       ; // User Clicked Cancel
 | 
			
		||||
								Case Response EQ char(27)
 | 
			
		||||
									Response = False$       ; // User Pressed Escape Key
 | 
			
		||||
							End Case            
 | 
			
		||||
							
 | 
			
		||||
							If Response EQ True$ then
 | 
			
		||||
								Response    = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
 | 
			
		||||
								Authorized  = Response<1>
 | 
			
		||||
							end else
 | 
			
		||||
								Authorized  = False$
 | 
			
		||||
							end
 | 
			
		||||
							If Not(Authorized) then Return
 | 
			
		||||
						Case Otherwise$
 | 
			
		||||
							Null
 | 
			
		||||
					End Case                  
 | 
			
		||||
 | 
			
		||||
					AvailMU_WMOKeys = ''
 | 
			
		||||
					UserResp        = Response
 | 
			
		||||
					MakeupBox       = ''
 | 
			
		||||
					
 | 
			
		||||
        If Continue then 
 | 
			
		||||
			Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
 | 
			
		||||
			
 | 
			
		||||
			Begin Case
 | 
			
		||||
				Case Response EQ True$
 | 
			
		||||
					// User requested to convert the current cassette into a makeup box.
 | 
			
		||||
					// Verify the quantity before proceeding.
 | 
			
		||||
					If WMOutKey NE '' then
 | 
			
		||||
						Parms    = ''
 | 
			
		||||
						Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
 | 
			
		||||
						Parms<2> = 0        ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
						Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
						Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)                
 | 
			
		||||
						If Proceed NE True$ then Return
 | 
			
		||||
					WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
					If Error_Services('NoError') then 
 | 
			
		||||
						SAPBatchNo      = WOMatRec<WO_MAT_SAP_BATCH_NO$>
 | 
			
		||||
						SAPTXDtm        = WOMatRec<WO_MAT_SAP_TX_DTM$>
 | 
			
		||||
						AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
 | 
			
		||||
						HasBatchNo      = (SAPBatchNo NE '')
 | 
			
		||||
						FullBoxReject   = (SAPBatchNo[-1, 1] = 'R')
 | 
			
		||||
						Begin Case
 | 
			
		||||
							Case AwaitingBatchNo
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
								ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
 | 
			
		||||
								Return
 | 
			
		||||
							Case FullBoxReject
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
								ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
 | 
			
		||||
								Return
 | 
			
		||||
							Case HasBatchNo
 | 
			
		||||
								// Operation limited to LEAD and SUPERVISOR groups
 | 
			
		||||
								OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
 | 
			
		||||
								Response    = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
 | 
			
		||||
								
 | 
			
		||||
								Begin Case
 | 
			
		||||
									Case Response EQ 1
 | 
			
		||||
										Response = True$        ; // User Clicked Override
 | 
			
		||||
									Case Response EQ 2
 | 
			
		||||
										Response = False$       ; // User Clicked Cancel
 | 
			
		||||
									Case Response EQ char(27)
 | 
			
		||||
										Response = False$       ; // User Pressed Escape Key
 | 
			
		||||
								End Case            
 | 
			
		||||
								
 | 
			
		||||
								If Response EQ True$ then
 | 
			
		||||
									Response    = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
 | 
			
		||||
									Authorized  = Response<1>
 | 
			
		||||
								end else
 | 
			
		||||
									Authorized  = False$
 | 
			
		||||
								end
 | 
			
		||||
								If Not(Authorized) then Return
 | 
			
		||||
							Case Otherwise$
 | 
			
		||||
								Null
 | 
			
		||||
						End Case                  
 | 
			
		||||
 | 
			
		||||
						AvailMU_WMOKeys = ''
 | 
			
		||||
						UserResp        = Response
 | 
			
		||||
						MakeupBox       = ''
 | 
			
		||||
						
 | 
			
		||||
						// User requested to convert the current cassette into a makeup box.
 | 
			
		||||
						// Verify the quantity before proceeding.
 | 
			
		||||
						If WMOutKey NE '' then
 | 
			
		||||
							Parms    = ''
 | 
			
		||||
							Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
 | 
			
		||||
							Parms<2> = 0        ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
							Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)                
 | 
			
		||||
							If Proceed NE True$ then Return
 | 
			
		||||
						end else
 | 
			
		||||
							ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
 | 
			
		||||
						end
 | 
			
		||||
						
 | 
			
		||||
						CheckValue = 1
 | 
			
		||||
						
 | 
			
		||||
						FieldNo = WO_MAT_EPO_MAKEUP_BOX$
 | 
			
		||||
						obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)		;* Set WMO_MAKEUP flag on WM_OUT
 | 
			
		||||
						IF Get_Status(errCode) THEN ErrMsg(errCode)
 | 
			
		||||
						
 | 
			
		||||
						Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue)		;* Make this the makeup box
 | 
			
		||||
						Send_Event(@WINDOW,'WRITE')										;* Write the record
 | 
			
		||||
						
 | 
			
		||||
						WMOKey = WONo:'*':ProcStepNo:'*':CassNo
 | 
			
		||||
						obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)				;* Reread the updated record
 | 
			
		||||
						
 | 
			
		||||
						Return
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
 | 
			
		||||
						ErrMsg('WARNING: Error reading WO_MAT record.')
 | 
			
		||||
						Return						
 | 
			
		||||
					end
 | 
			
		||||
				Case Response EQ ''
 | 
			
		||||
					// User has cancelled this process.
 | 
			
		||||
					Return
 | 
			
		||||
				Case Otherwise$
 | 
			
		||||
					// User has selected a makeup box to use and backfill.
 | 
			
		||||
					AvailMU_WMOKeys = Response
 | 
			
		||||
					MakeupBox       = Response
 | 
			
		||||
					MuWfrsNeeded    = SelCnt
 | 
			
		||||
					If AvailMU_WMOKeys NE '' then 
 | 
			
		||||
						// Wafer counter check - Account for the possibility of selecting more than one makeup box.
 | 
			
		||||
						For each MuWmoKey in AvailMU_WMOKeys using @FM
 | 
			
		||||
							MuWoMatKey   = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
 | 
			
		||||
							QtyAdj       = MuWfrsNeeded
 | 
			
		||||
							CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
 | 
			
		||||
							If MuWfrsNeeded GT CurrMuWfrCnt then
 | 
			
		||||
								QtyAdj        = CurrMuWfrCnt
 | 
			
		||||
								MuWfrsNeeded -= CurrMuWfrCnt
 | 
			
		||||
							end
 | 
			
		||||
							Parms    = ''
 | 
			
		||||
							Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
 | 
			
		||||
							Parms<2> = QtyAdj   ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
							Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
							If Proceed NE True$ then Return
 | 
			
		||||
						Next MuWmoKey
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					CheckValue = 1
 | 
			
		||||
					* Signature block added 10/6/2010 JCH  *
 | 
			
		||||
					Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
 | 
			
		||||
					
 | 
			
		||||
					FieldNo = WO_MAT_EPO_MAKEUP_BOX$
 | 
			
		||||
					obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)		;* Set WMO_MAKEUP flag on WM_OUT
 | 
			
		||||
					IF Get_Status(errCode) THEN ErrMsg(errCode)
 | 
			
		||||
					IF NOT(Valid) THEN RETURN		;* User is not worthy or can't type
 | 
			
		||||
					
 | 
			
		||||
					Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue)		;* Make this the makeup box
 | 
			
		||||
					Send_Event(@WINDOW,'WRITE')										;* Write the record
 | 
			
		||||
					Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
					
 | 
			
		||||
					WMOKey = WONo:'*':ProcStepNo:'*':CassNo
 | 
			
		||||
					obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)				;* Reread the updated record
 | 
			
		||||
					obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
 | 
			
		||||
					//Remove the signatures for the WO_MAT_QA record because they are changing its results.
 | 
			
		||||
					WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
 | 
			
		||||
					Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
 | 
			
		||||
					obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
 | 
			
		||||
					
 | 
			
		||||
					Return
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg('WARNING: Error reading WO_MAT record.')
 | 
			
		||||
					Return						
 | 
			
		||||
				end
 | 
			
		||||
            Case Response EQ ''
 | 
			
		||||
                // User has cancelled this process.
 | 
			
		||||
                Return
 | 
			
		||||
            Case Otherwise$
 | 
			
		||||
                // User has selected a makeup box to use and backfill.
 | 
			
		||||
                AvailMU_WMOKeys = Response
 | 
			
		||||
                MakeupBox       = Response
 | 
			
		||||
                MuWfrsNeeded    = SelCnt
 | 
			
		||||
                If AvailMU_WMOKeys NE '' then 
 | 
			
		||||
                    // Wafer counter check - Account for the possibility of selecting more than one makeup box.
 | 
			
		||||
                    For each MuWmoKey in AvailMU_WMOKeys using @FM
 | 
			
		||||
                        MuWoMatKey   = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
 | 
			
		||||
                        QtyAdj       = MuWfrsNeeded
 | 
			
		||||
                        CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
 | 
			
		||||
                        If MuWfrsNeeded GT CurrMuWfrCnt then
 | 
			
		||||
                            QtyAdj        = CurrMuWfrCnt
 | 
			
		||||
                            MuWfrsNeeded -= CurrMuWfrCnt
 | 
			
		||||
                        end
 | 
			
		||||
                        Parms    = ''
 | 
			
		||||
                        Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
 | 
			
		||||
                        Parms<2> = QtyAdj   ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
                        Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
                        Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
                        If Proceed NE True$ then Return
 | 
			
		||||
                    Next MuWmoKey
 | 
			
		||||
                end
 | 
			
		||||
                
 | 
			
		||||
                * Signature block added 10/6/2010 JCH  *
 | 
			
		||||
				Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
 | 
			
		||||
				
 | 
			
		||||
				IF NOT(Valid) THEN RETURN		;* User is not worthy or can't type
 | 
			
		||||
				
 | 
			
		||||
				Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
				
 | 
			
		||||
				obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
 | 
			
		||||
				//Remove the signatures for the WO_MAT_QA record because they are changing its results.
 | 
			
		||||
				WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
 | 
			
		||||
				Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
 | 
			
		||||
				obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
 | 
			
		||||
				
 | 
			
		||||
				RETURN
 | 
			
		||||
        End Case
 | 
			
		||||
        
 | 
			
		||||
					RETURN
 | 
			
		||||
			End Case
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        // Cassette is on hold so makeup wafers cannot be added.
 | 
			
		||||
        ErrorMessage = 'Add MU Wafer Denied!. The cassette must be taken off hold before adding makeup wafers.'
 | 
			
		||||
@ -2280,58 +2289,50 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RefreshWaferCounterData:
 | 
			
		||||
    
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
        
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        QtyBackColor = GREEN$
 | 
			
		||||
        WONo         = Get_Property(@Window : '.WO_NO', 'TEXT')
 | 
			
		||||
        Cassette     = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
 | 
			
		||||
        WMOKey       = WONo:'*1*':Cassette
 | 
			
		||||
        If WMOKey NE '*1*' then
 | 
			
		||||
			FqaWcRec        = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
 | 
			
		||||
			WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
			Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
			WafersFilled    = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
 | 
			
		||||
			Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
			
 | 
			
		||||
			************************************
 | 
			
		||||
			* Wafer Counter - Quantity Section *
 | 
			
		||||
			************************************
 | 
			
		||||
			If (WaferCounterQty NE '') then
 | 
			
		||||
				If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
 | 
			
		||||
			end else
 | 
			
		||||
				QtyBackColor = ORANGE$
 | 
			
		||||
			end
 | 
			
		||||
			WaferSize   = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
 | 
			
		||||
			WaferSize   = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
			If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
				WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					WCCurrMode = ''
 | 
			
		||||
					If RowExists('TOOL', WCToolID) then
 | 
			
		||||
						WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
						WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
					end
 | 
			
		||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	QtyBackColor = GREEN$
 | 
			
		||||
	WONo         = Get_Property(@Window : '.WO_NO', 'TEXT')
 | 
			
		||||
	Cassette     = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
 | 
			
		||||
	WMOKey       = WONo:'*1*':Cassette
 | 
			
		||||
	If WMOKey NE '*1*' then
 | 
			
		||||
		FqaWcRec        = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
 | 
			
		||||
		WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
		Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
		WafersFilled    = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
 | 
			
		||||
		Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
		
 | 
			
		||||
		************************************
 | 
			
		||||
		* Wafer Counter - Quantity Section *
 | 
			
		||||
		************************************
 | 
			
		||||
		If (WaferCounterQty NE '') then
 | 
			
		||||
			If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
 | 
			
		||||
		end else
 | 
			
		||||
			QtyBackColor = ORANGE$
 | 
			
		||||
		end
 | 
			
		||||
		WaferSize   = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
 | 
			
		||||
		WaferSize   = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
		If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
			WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
			If Error_Services('NoError') then 
 | 
			
		||||
				WCCurrMode = ''
 | 
			
		||||
				If RowExists('TOOL', WCToolID) then
 | 
			
		||||
					WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
					WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
					Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
					ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
				end
 | 
			
		||||
			end else
 | 
			
		||||
				ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
 | 
			
		||||
				ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
			end
 | 
			
		||||
        end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
 | 
			
		||||
        Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
        
 | 
			
		||||
    end else
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
			
		||||
    end    
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -7,7 +7,7 @@ COMPILE FUNCTION Comm_WO_Mat(Instruction, Parm1,Parm2)
 | 
			
		||||
	10/18/2006 - John C. Henry, J.C. Henry & Co., Inc.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
DECLARE SUBROUTINE Set_Property,  Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message 
 | 
			
		||||
DECLARE SUBROUTINE Set_Property,  Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message, Wo_Mat_Services 
 | 
			
		||||
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
 | 
			
		||||
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services
 | 
			
		||||
 | 
			
		||||
@ -627,6 +627,7 @@ MakeUpClick:
 | 
			
		||||
							LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X')
 | 
			
		||||
						end else
 | 
			
		||||
							LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
 | 
			
		||||
							RDSNo = LotID
 | 
			
		||||
						end
 | 
			
		||||
						
 | 
			
		||||
						If LotId NE '' then
 | 
			
		||||
@ -636,12 +637,22 @@ MakeUpClick:
 | 
			
		||||
							Parms<3> = 'MU'  ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
							If Proceed EQ True$ then
 | 
			
		||||
								Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
								Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
								obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
 | 
			
		||||
								IF Get_Status(errCode) THEN
 | 
			
		||||
									ErrMsg(errCode)
 | 
			
		||||
								END
 | 
			
		||||
						        obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
 | 
			
		||||
								If EpiPro EQ False$ then
 | 
			
		||||
                                    IF Get_Status(errCode) THEN
 | 
			
		||||
                                        ErrMsg('Unable to set makeup flag until Unload stage is signed.')
 | 
			
		||||
                                        InvalidRequest = True$
 | 
			
		||||
                                    END else
 | 
			
		||||
                                        Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
                                        Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
                                        If (CheckValue EQ True$) then
 | 
			
		||||
                                            Wo_Mat_Services('MakeupFlagOn', RDSNo)
 | 
			
		||||
                                        end
 | 
			
		||||
                                    end
 | 
			
		||||
								end else
 | 
			
		||||
								    Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
								    Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
								end
 | 
			
		||||
							end else
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
							end
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ DECLARE SUBROUTINE Set_Property,  Set_Status, ErrMsg, Set_Property, obj_AppWindo
 | 
			
		||||
DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window
 | 
			
		||||
DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, Post_Event, obj_WO_Mat, obj_WO_Mat_Log, obj_WO_Wfr, obj_Tables
 | 
			
		||||
DECLARE SUBROUTINE SRP_Stopwatch, Update_Index, Database_Services, obj_RDS, Create_Dialog, Dialog_Box
 | 
			
		||||
DECLARE SUBROUTINE Sleepery
 | 
			
		||||
DECLARE SUBROUTINE Sleepery, Wo_Mat_Services
 | 
			
		||||
DECLARE FUNCTION   Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists
 | 
			
		||||
DECLARE FUNCTION   Dialog_Box, obj_WO_Log, obj_NCR, Check_Notes, obj_MUWafers, obj_WO_Mat, Signature_Services
 | 
			
		||||
DECLARE FUNCTION   MemberOf, obj_Tables, obj_RDS, Environment_Services, Logging_Services, Material_Services
 | 
			
		||||
DECLARE FUNCTION   Database_Services, RetStack, Datetime, Error_Services
 | 
			
		||||
DECLARE FUNCTION   Database_Services, RetStack, Datetime, Error_Services, Rds_Services
 | 
			
		||||
 | 
			
		||||
$INSERT POPUP_EQUATES
 | 
			
		||||
$INSERT LOGICAL
 | 
			
		||||
@ -434,7 +434,7 @@ RejMat:
 | 
			
		||||
            WfrID   = SlotList<SelectedRows<I>, COL$WAFER_ID>
 | 
			
		||||
            PrevNCR = SlotList<SelectedRows<I>, COL$SLOT_NCR>
 | 
			
		||||
            MUWfrID = SlotList<SelectedRows<I>, COL$MU_WAFER_ID>
 | 
			
		||||
            If ( (MetNo NE '') or (WfrID EQ '') or (PrevNCR NE '' and MUWfrID EQ '') ) then
 | 
			
		||||
            If (WfrID EQ '') then
 | 
			
		||||
                AllSlotsPermitted      = False$
 | 
			
		||||
                IneligibleSlots<0, -1> = SlotNo
 | 
			
		||||
            end
 | 
			
		||||
@ -830,8 +830,18 @@ AddMakeup:
 | 
			
		||||
					
 | 
			
		||||
					FieldNo = WO_MAT_MAKEUP_BOX$
 | 
			
		||||
					CheckValue = 1
 | 
			
		||||
					EpiCheck = Rds_Services('IsEpiPro', RDSNo)
 | 
			
		||||
					
 | 
			
		||||
					obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
 | 
			
		||||
					
 | 
			
		||||
					If EpiCheck EQ False$ then
 | 
			
		||||
                        IF Get_Status(errCode) THEN
 | 
			
		||||
                            ErrMsg('Unable to set makeup flag until Unload stage is signed.')
 | 
			
		||||
                            Return
 | 
			
		||||
                        END else
 | 
			
		||||
                            Wo_Mat_Services('MakeupFlagOn', RDSNo)
 | 
			
		||||
                        end
 | 
			
		||||
                    end
 | 
			
		||||
 | 
			
		||||
					SlotWaferIDs    = Xlate('WO_MAT', WOMatKey, 'SLOT_WAFER_ID', 'X')
 | 
			
		||||
					Convert @VM to '' in SlotWaferIDs
 | 
			
		||||
@ -1057,6 +1067,7 @@ MakeUpLot:
 | 
			
		||||
					
 | 
			
		||||
					If Not(InvalidRequest) then 
 | 
			
		||||
						RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
 | 
			
		||||
						EpiCheck = Rds_Services('IsEpiPro', RDSNo)
 | 
			
		||||
						If RDSNo NE '' then
 | 
			
		||||
							Parms    = ''
 | 
			
		||||
							Parms<1> = RDSNo ; // Cassette to verify wafer count of.
 | 
			
		||||
@ -1064,12 +1075,22 @@ MakeUpLot:
 | 
			
		||||
							Parms<3> = 'MU'  ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
							If Proceed EQ True$ then
 | 
			
		||||
								Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
								Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
								obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)
 | 
			
		||||
								IF Get_Status(errCode) THEN
 | 
			
		||||
									ErrMsg(errCode)
 | 
			
		||||
								END
 | 
			
		||||
								If EpiCheck EQ False$ then
 | 
			
		||||
                                    IF Get_Status(errCode) THEN
 | 
			
		||||
                                        ErrMsg('Unable to set makeup flag until Unload stage is signed.')
 | 
			
		||||
                                        InvalidRequest = True$
 | 
			
		||||
                                    END else
 | 
			
		||||
                                        Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
                                        Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
                                        If (CheckValue EQ True$) then
 | 
			
		||||
                                            Wo_Mat_Services('MakeupFlagOn', RDSNo)
 | 
			
		||||
                                        end
 | 
			
		||||
                                    end
 | 
			
		||||
								end else
 | 
			
		||||
								    Set_Property(@WINDOW,'SAVEWARN', False$)
 | 
			
		||||
								    Send_Event(@WINDOW,'CLEAR')
 | 
			
		||||
								end
 | 
			
		||||
							end else
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
							end
 | 
			
		||||
@ -1214,3 +1235,5 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -213,4 +213,3 @@ UpdateHALItem:
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,4 @@
 | 
			
		||||
Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	This is a utility function. For each record found in SQL_BACKLOG, it makes
 | 
			
		||||
	sure the identified record is copied to SQL. Then the backlog record is
 | 
			
		||||
@ -10,95 +8,97 @@ Compile subroutine Copy_Backlog_Records_To_SQL(VOID)
 | 
			
		||||
	-------
 | 
			
		||||
	08/10/2010    KRF    Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
 | 
			
		||||
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Copy_Pending_Records_To_Sql
 | 
			
		||||
Declare function   GetTickCount, Database_Services, SRP_TcpClient, Datetime, Environment_Services
 | 
			
		||||
 | 
			
		||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
 | 
			
		||||
Main:
 | 
			
		||||
	
 | 
			
		||||
	hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
	Lock hSysLists, 'Copy_Backlog_Records_To_SQL' then
 | 
			
		||||
 | 
			
		||||
    Copy_Pending_Records_To_Sql()
 | 
			
		||||
		Copy_Pending_Records_To_Sql()
 | 
			
		||||
 | 
			
		||||
    CurrDtm           = Datetime()
 | 
			
		||||
    TablesToSkip      = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
 | 
			
		||||
    NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
 | 
			
		||||
    
 | 
			
		||||
    Open "SQL_PENDING" to pTable then
 | 
			
		||||
    
 | 
			
		||||
        Open "SQL_BACKLOG" to hTable then
 | 
			
		||||
            ClearSelect
 | 
			
		||||
            Select hTable
 | 
			
		||||
            Done = 0
 | 
			
		||||
            Loop
 | 
			
		||||
                ReadNext Key else Done = 1
 | 
			
		||||
                Command = ''
 | 
			
		||||
                Skip    = False$
 | 
			
		||||
            Until Done
 | 
			
		||||
                Table                  = Key[1, "*"]
 | 
			
		||||
                Locate Table in TablesToSkip by "AL" using "," setting ListPos then
 | 
			
		||||
                    Delete hTable, Key else null
 | 
			
		||||
                end else
 | 
			
		||||
                    Locate Table in NonCriticalTables using @FM setting Dummy then
 | 
			
		||||
                        ID = Key[Col2() + 1, Len(Key)]
 | 
			
		||||
                        
 | 
			
		||||
                        Read Dummy From pTable, Key then
 | 
			
		||||
                            Skip = True$
 | 
			
		||||
                        end
 | 
			
		||||
                        
 | 
			
		||||
                        If Skip EQ False$ then
 | 
			
		||||
                            Begin Case
 | 
			
		||||
                                Case ID[-7, 7] EQ "*DELETE"
 | 
			
		||||
                                    ID[-7, 7] = ""
 | 
			
		||||
                                    Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                                    Write CurrDtm to pTable, Key then Delete hTable, Key
 | 
			
		||||
                                Case ID[-6, 6] EQ "*WRITE"
 | 
			
		||||
                                    ID[-6, 6] = ""
 | 
			
		||||
                                    Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                                    Write CurrDtm to pTable, Key then Delete hTable, Key
 | 
			
		||||
                            End Case
 | 
			
		||||
                        end else
 | 
			
		||||
                            // This record is already being processed and we don't need to process it multiple times.
 | 
			
		||||
                            Delete hTable, Key else null
 | 
			
		||||
                        end
 | 
			
		||||
                    end else
 | 
			
		||||
                        TempKey                              = Key
 | 
			
		||||
                        TempKey[1, Len(Table) + 1]           = ''
 | 
			
		||||
                        TransTime                            = TempKey[-1, 'B*']
 | 
			
		||||
                        TempKey[-1, Neg(Len(TransTime) + 1)] = ''
 | 
			
		||||
                        TransDate                            = TempKey[-1, 'B*']
 | 
			
		||||
                        TempKey[-1, Neg(Len(TransDate) + 1)] = ''
 | 
			
		||||
                        Process                              = TempKey[-1, 'B*']
 | 
			
		||||
                        TempKey[-1, Neg(Len(Process) + 1)]   = ''
 | 
			
		||||
                        ID                                   = TempKey
 | 
			
		||||
                        If Process EQ 'DELETE' then
 | 
			
		||||
                            pKey = Key
 | 
			
		||||
                            Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
 | 
			
		||||
                            Write CurrDtm to pTable, pKey then Delete hTable, Key 
 | 
			
		||||
                        end else
 | 
			
		||||
                            pKey = Key
 | 
			
		||||
                            Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
 | 
			
		||||
                            Write CurrDtm to pTable, pKey then Delete hTable, Key 
 | 
			
		||||
                        end
 | 
			
		||||
                    end
 | 
			
		||||
		CurrDtm           = Datetime()
 | 
			
		||||
		TablesToSkip      = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
 | 
			
		||||
		NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
 | 
			
		||||
		
 | 
			
		||||
		Open "SQL_PENDING" to pTable then
 | 
			
		||||
		
 | 
			
		||||
			Open "SQL_BACKLOG" to hTable then
 | 
			
		||||
				ClearSelect
 | 
			
		||||
				Select hTable
 | 
			
		||||
				Done = 0
 | 
			
		||||
				Loop
 | 
			
		||||
					ReadNext Key else Done = 1
 | 
			
		||||
					Command = ''
 | 
			
		||||
					Skip    = False$
 | 
			
		||||
				Until Done
 | 
			
		||||
					Table = Key[1, "*"]
 | 
			
		||||
					Locate Table in TablesToSkip by "AL" using "," setting ListPos then
 | 
			
		||||
						Delete hTable, Key else null
 | 
			
		||||
					end else
 | 
			
		||||
						Locate Table in NonCriticalTables using @FM setting Dummy then
 | 
			
		||||
							ID = Key[Col2() + 1, Len(Key)]
 | 
			
		||||
							
 | 
			
		||||
							Read Dummy From pTable, Key then
 | 
			
		||||
								Skip = True$
 | 
			
		||||
							end
 | 
			
		||||
							
 | 
			
		||||
							If Skip EQ False$ then
 | 
			
		||||
								Begin Case
 | 
			
		||||
									Case ID[-7, 7] EQ "*DELETE"
 | 
			
		||||
										ID[-7, 7] = ""
 | 
			
		||||
										Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
										Write CurrDtm to pTable, Key then Delete hTable, Key
 | 
			
		||||
									Case ID[-6, 6] EQ "*WRITE"
 | 
			
		||||
										ID[-6, 6] = ""
 | 
			
		||||
										Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
										Write CurrDtm to pTable, Key then Delete hTable, Key
 | 
			
		||||
								End Case
 | 
			
		||||
							end else
 | 
			
		||||
								// This record is already being processed and we don't need to process it multiple times.
 | 
			
		||||
								Delete hTable, Key else null
 | 
			
		||||
							end
 | 
			
		||||
						end else
 | 
			
		||||
							TempKey                              = Key
 | 
			
		||||
							TempKey[1, Len(Table) + 1]           = ''
 | 
			
		||||
							TransTime                            = TempKey[-1, 'B*']
 | 
			
		||||
							TempKey[-1, Neg(Len(TransTime) + 1)] = ''
 | 
			
		||||
							TransDate                            = TempKey[-1, 'B*']
 | 
			
		||||
							TempKey[-1, Neg(Len(TransDate) + 1)] = ''
 | 
			
		||||
							Process                              = TempKey[-1, 'B*']
 | 
			
		||||
							TempKey[-1, Neg(Len(Process) + 1)]   = ''
 | 
			
		||||
							ID                                   = TempKey
 | 
			
		||||
							If Process EQ 'DELETE' then
 | 
			
		||||
								pKey = Key
 | 
			
		||||
								Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
 | 
			
		||||
								Write CurrDtm to pTable, pKey then Delete hTable, Key 
 | 
			
		||||
							end else
 | 
			
		||||
								pKey = Key
 | 
			
		||||
								Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(pKey)
 | 
			
		||||
								Write CurrDtm to pTable, pKey then Delete hTable, Key 
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
 | 
			
		||||
                    If Skip EQ False$ then
 | 
			
		||||
                        TcpClientHandle = 0
 | 
			
		||||
                        ServerIP        = Environment_Services('GetApplicationRootIP')
 | 
			
		||||
                        Convert '\' to '' in ServerIP
 | 
			
		||||
                        If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
 | 
			
		||||
                            SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
 | 
			
		||||
                            SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
 | 
			
		||||
                        end
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
            Repeat
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
 | 
			
		||||
end
 | 
			
		||||
						If Skip EQ False$ then
 | 
			
		||||
							TcpClientHandle = 0
 | 
			
		||||
							ServerIP        = Environment_Services('GetApplicationRootIP')
 | 
			
		||||
							ServerPort      = Environment_Services('GetScrapeServerPort')
 | 
			
		||||
							Convert '\' to '' in ServerIP
 | 
			
		||||
							If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
 | 
			
		||||
								SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
 | 
			
		||||
								SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
				Repeat
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		Unlock hSysLists, 'Copy_Backlog_Records_To_SQL' else Null
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
Return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										47
									
								
								LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								LSL2/STPROC/COPY_LOT_EVENT_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
			
		||||
Compile function Copy_LOT_EVENT_Record_To_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Copies the given LOT_EVENT record to the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	06/10/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert LOT_EVENT_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(13)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "LOT_ID"                 :@VM:SQL_Format(Rec(LOT_EVENT_LOT_ID$),                 "STR"):@FM
 | 
			
		||||
DataFields := "LOT_EVENT_TYPE"         :@VM:SQL_Format(Rec(LOT_EVENT_LOT_EVENT_TYPE$),         "STR"):@FM
 | 
			
		||||
DataFields := "EVENT_DATETIME"         :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_DATETIME$),         "DATETIME"):@FM
 | 
			
		||||
DataFields := "EVENT_NOTE"             :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_NOTE$),             "STR"):@FM
 | 
			
		||||
DataFields := "EQUIPMENT_ID"           :@VM:SQL_Format(Rec(LOT_EVENT_EQUIPMENT_ID$),           "STR"):@FM
 | 
			
		||||
DataFields := "EVENT_REDUCE_WAFER_QTY" :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_REDUCE_WAFER_QTY$), "INT"):@FM
 | 
			
		||||
DataFields := "EVENT_BONUS_WAFER_QTY"  :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BONUS_WAFER_QTY$),  "INT"):@FM
 | 
			
		||||
DataFields := "EVENT_BEGIN_WAFER_QTY"  :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_BEGIN_WAFER_QTY$),  "INT"):@FM
 | 
			
		||||
DataFields := "EVENT_END_WAFER_QTY"    :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_END_WAFER_QTY$),    "INT"):@FM
 | 
			
		||||
DataFields := "EVENT_OPERATION_ID"     :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATION_ID$),     "STR"):@FM
 | 
			
		||||
DataFields := "EVENT_OPERATOR_ID"      :@VM:SQL_Format(Rec(LOT_EVENT_EVENT_OPERATOR_ID$),      "STR"):@FM
 | 
			
		||||
DataFields := "SEQUENCE"               :@VM:SQL_Format(Rec(LOT_EVENT_SEQUENCE$),               "INT"):@FM
 | 
			
		||||
DataFields := "CHRON_ID"               :@VM:SQL_Format(Rec(LOT_EVENT_CHRON_ID$),               "INT")
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "LOT_EVENT", Keys, DataFields);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								LSL2/STPROC/COPY_LOT_EVENT_TYPE_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
Compile function Copy_LOT_EVENT_TYPE_Record_To_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Copies the given OPERATION record to the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	06/19/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert LOT_EVENT_TYPE_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(2)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "DESCRIPTION"       :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.DESCRIPTION$),    "STR"):@FM
 | 
			
		||||
DataFields := "WIP_TRANS_TYPE"    :@VM:SQL_Format(Rec(LOT_EVENT_TYPE.WIP_TRANS_TYPE$), "STR")
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "LOT_EVENT_TYPE", Keys, DataFields);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
							
								
								
									
										57
									
								
								LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								LSL2/STPROC/COPY_LOT_OPERATION_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
			
		||||
Compile function Copy_LOT_OPERATION_Record_To_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Copies the given LOT_OPERATION record to the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	06/19/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert LOT_OPERATION_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(25)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "LOT_ID"                  :@VM:SQL_Format(Rec(LOT_OPERATION_LOT_ID$),                 "STR"):@FM
 | 
			
		||||
DataFields := "OPERATION_ID"            :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_ID$),           "STR"):@FM
 | 
			
		||||
DataFields := "DATETIME_IN"             :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_IN$),            "DATETIME"):@FM
 | 
			
		||||
DataFields := "DATETIME_OUT"            :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_OUT$),           "DATETIME"):@FM
 | 
			
		||||
DataFields := "EQUIPMENT_ID"            :@VM:SQL_Format(Rec(LOT_OPERATION_EQUIPMENT_ID$),           "STR"):@FM
 | 
			
		||||
DataFields := "WAFER_IN_QTY"            :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_IN_QTY$),           "INT"):@FM
 | 
			
		||||
DataFields := "WAFER_OUT_QTY"           :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_OUT_QTY$),          "INT"):@FM
 | 
			
		||||
DataFields := "OPERATOR_IN_ID"          :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_IN_ID$),         "STR"):@FM
 | 
			
		||||
DataFields := "OPERATOR_OUT_ID"         :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATOR_OUT_ID$),        "STR"):@FM
 | 
			
		||||
DataFields := "OPERATION_SEQUENCE"      :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_SEQUENCE$),     "INT"):@FM
 | 
			
		||||
DataFields := "REWORK"                  :@VM:SQL_Format(Rec(LOT_OPERATION_REWORK$),                 "BIT"):@FM
 | 
			
		||||
DataFields := "DATETIME_START"          :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_START$),         "DATETIME"):@FM
 | 
			
		||||
DataFields := "DATETIME_STOP"           :@VM:SQL_Format(Rec(LOT_OPERATION_DATETIME_STOP$),          "DATETIME"):@FM
 | 
			
		||||
DataFields := "CLEAN_ID"                :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_ID$),               "STR"):@FM
 | 
			
		||||
DataFields := "PACKAGING_ID"            :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_ID$),           "STR"):@FM
 | 
			
		||||
DataFields := "WAFER_COUNTER_ID"        :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_ID$),       "STR"):@FM
 | 
			
		||||
DataFields := "OPERATION_TYPE"          :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_TYPE$),         "STR"):@FM
 | 
			
		||||
DataFields := "OPERATION_CLASS"         :@VM:SQL_Format(Rec(LOT_OPERATION_OPERATION_CLASS$),        "STR"):@FM
 | 
			
		||||
DataFields := "MET_TEST_TYPE_REQUIRED"  :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
 | 
			
		||||
DataFields := "MET_TEST_REQUIRED"       :@VM:SQL_Format(Rec(LOT_OPERATION_MET_TEST_REQUIRED$),      "BIT"):@FM
 | 
			
		||||
DataFields := "PACKAGING_REQUIRED"      :@VM:SQL_Format(Rec(LOT_OPERATION_PACKAGING_REQUIRED$),     "BIT"):@FM
 | 
			
		||||
DataFields := "CLEAN_REQUIRED"          :@VM:SQL_Format(Rec(LOT_OPERATION_CLEAN_REQUIRED$),         "BIT"):@FM
 | 
			
		||||
DataFields := "WAFER_COUNTER_REQUIRED"  :@VM:SQL_Format(Rec(LOT_OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "LOT_OPERATION", Keys, DataFields);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										51
									
								
								LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								LSL2/STPROC/COPY_LOT_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
Compile function Copy_LOT_Record_To_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Copies the given LOT record to the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	06/10/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert LOT_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(23)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "TYPE"                      :@VM:SQL_Format(Rec(LOT_TYPE$),                     "STR"):@FM
 | 
			
		||||
DataFields := "PROD_ID"                   :@VM:SQL_Format(Rec(LOT_PROD_ID$),                  "STR"):@FM
 | 
			
		||||
DataFields := "ORIG_WAFER_QTY"            :@VM:SQL_Format(Rec(LOT_ORIG_WAFER_QTY$),           "INT"):@FM
 | 
			
		||||
DataFields := "WAFER_QTY"                 :@VM:SQL_Format(Rec(LOT_WAFER_QTY$),                "INT"):@FM
 | 
			
		||||
DataFields := "VENDOR_PART_NO"            :@VM:SQL_Format(Rec(LOT_VENDOR_PART_NO$),           "STR"):@FM
 | 
			
		||||
DataFields := "VENDOR_LOT_NO"             :@VM:SQL_Format(Rec(LOT_VENDOR_LOT_NO$),            "STR"):@FM
 | 
			
		||||
DataFields := "VENDOR_CODE"               :@VM:SQL_Format(Rec(LOT_VENDOR_CODE$),              "STR"):@FM
 | 
			
		||||
DataFields := "[OPEN]"                    :@VM:SQL_Format(Rec(LOT_OPEN$),                     "BIT"):@FM
 | 
			
		||||
DataFields := "HOLD"                      :@VM:SQL_Format(Rec(LOT_HOLD$),                     "BIT"):@FM
 | 
			
		||||
DataFields := "HOT"                       :@VM:SQL_Format(Rec(LOT_HOT$),                      "BIT"):@FM
 | 
			
		||||
DataFields := "LEGACY_LOT_ID"             :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_ID$),            "STR"):@FM
 | 
			
		||||
DataFields := "MOST_RECENT_LOT_EVENT_ID"  :@VM:SQL_Format(Rec(LOT_MOST_RECENT_LOT_EVENT_ID$), "STR"):@FM
 | 
			
		||||
DataFields := "LEGACY_LOT_TYPE"           :@VM:SQL_Format(Rec(LOT_LEGACY_LOT_TYPE$),          "STR"):@FM
 | 
			
		||||
DataFields := "WO_LOG_ID"                 :@VM:SQL_Format(Rec(LOT_WO_LOG_ID$),                "INT"):@FM
 | 
			
		||||
DataFields := "PROD_SPEC_ID"              :@VM:SQL_Format(Rec(LOT_PROD_SPEC_ID$),             "INT"):@FM
 | 
			
		||||
DataFields := "EPI_PART_NO"               :@VM:SQL_Format(Rec(LOT_EPI_PART_NO$),              "STR"):@FM
 | 
			
		||||
DataFields := "PROD_VER_NO"               :@VM:SQL_Format(Rec(LOT_PROD_VER_NO$),              "STR")
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "LOT", Keys, DataFields);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								LSL2/STPROC/COPY_OPERATION_RECORD_TO_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
Compile function Copy_OPERATION_Record_To_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Copies the given OPERATION record to the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	06/19/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert OPERATION_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(10)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "ACTIVE"                  :@VM:SQL_Format(Rec(OPERATION_ACTIVE$),                 "BIT"):@FM
 | 
			
		||||
DataFields := "CLASS_ID"                :@VM:SQL_Format(Rec(OPERATION_CLASS_ID$),               "STR"):@FM
 | 
			
		||||
DataFields := "OPERATION_DESCRIPTION"   :@VM:SQL_Format(Rec(OPERATION_OPERATION_DESCRIPTION$),  "STR"):@FM
 | 
			
		||||
DataFields := "TYPE"                    :@VM:SQL_Format(Rec(OPERATION_TYPE$),                   "STR"):@FM
 | 
			
		||||
DataFields := "REWORK"                  :@VM:SQL_Format(Rec(OPERATION_REWORK$),                 "BIT"):@FM
 | 
			
		||||
DataFields := "MET_TEST_TYPE_REQUIRED"  :@VM:SQL_Format(Rec(OPERATION_MET_TEST_TYPE_REQUIRED$), "BIT"):@FM
 | 
			
		||||
DataFields := "MET_TEST_REQUIRED"       :@VM:SQL_Format(Rec(OPERATION_MET_TEST_REQUIRED$),      "BIT"):@FM
 | 
			
		||||
DataFields := "PACKAGING_REQUIRED"      :@VM:SQL_Format(Rec(OPERATION_PACKAGING_REQUIRED$),     "BIT"):@FM
 | 
			
		||||
DataFields := "CLEAN_REQUIRED"          :@VM:SQL_Format(Rec(OPERATION_CLEAN_REQUIRED$),         "BIT"):@FM
 | 
			
		||||
DataFields := "WAFER_COUNTER_REQUIRED"  :@VM:SQL_Format(Rec(OPERATION_WAFER_COUNTER_REQUIRED$), "BIT")
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "OPERATION", Keys, DataFields);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
@ -1,6 +1,4 @@
 | 
			
		||||
Compile subroutine Copy_Pending_Records_To_SQL(VOID)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	This is a utility function. For each record found in SQL_PENDING, it makes
 | 
			
		||||
	sure the identified record is copied to SQL. 
 | 
			
		||||
@ -9,98 +7,104 @@ Compile subroutine Copy_Pending_Records_To_SQL(VOID)
 | 
			
		||||
	-------
 | 
			
		||||
	02/06/2023    DJS    Adapted from Copy_Backlog_Records_To_SQL
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
 | 
			
		||||
EQU FIVE_MINUTES$    to 0.003472
 | 
			
		||||
EQU SECONDS_PER_DAY$ to 86400
 | 
			
		||||
EQU THIRTY_MINUTES$  to 1800
 | 
			
		||||
 | 
			
		||||
Declare subroutine Copy_Record_To_SQL, Delete_Record_From_SQL, SRP_TcpClient, Database_Services
 | 
			
		||||
Declare function   GetTickCount, Database_Services, SRP_TcpClient, Datetime, Database_Services, Environment_Services
 | 
			
		||||
 | 
			
		||||
// This only needs to be called every once in a while (e.g. 5 minutes ~ 0.003472)
 | 
			
		||||
Run        = False$
 | 
			
		||||
CurrDtm    = Datetime()
 | 
			
		||||
LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
 | 
			
		||||
If LastRunDtm NE '' then
 | 
			
		||||
    TimeDiff   = CurrDtm - LastRunDtm
 | 
			
		||||
    If TimeDiff GT 0.003472 then
 | 
			
		||||
        Run = True$
 | 
			
		||||
        LastRunDtm = CurrDtm
 | 
			
		||||
    end
 | 
			
		||||
end else
 | 
			
		||||
    Run        = True$
 | 
			
		||||
    LastRunDtm = CurrDtm
 | 
			
		||||
end
 | 
			
		||||
Main:
 | 
			
		||||
 | 
			
		||||
If Run then
 | 
			
		||||
    Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
 | 
			
		||||
    hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
    Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
 | 
			
		||||
	// This only needs to be called every once in a while (e.g. 5 minutes ~ 0.003472)
 | 
			
		||||
	Run        = False$
 | 
			
		||||
	CurrDtm    = Datetime()
 | 
			
		||||
	LastRunDtm = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME')
 | 
			
		||||
	If LastRunDtm NE '' then
 | 
			
		||||
		TimeDiff   = CurrDtm - LastRunDtm
 | 
			
		||||
		If TimeDiff GT FIVE_MINUTES$ then
 | 
			
		||||
			Run = True$
 | 
			
		||||
			LastRunDtm = CurrDtm
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		Run        = True$
 | 
			
		||||
		LastRunDtm = CurrDtm
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
        NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
 | 
			
		||||
        Open "SQL_PENDING" to pTable then
 | 
			
		||||
        
 | 
			
		||||
            ClearSelect
 | 
			
		||||
            Select pTable
 | 
			
		||||
            Done = False$
 | 
			
		||||
            Loop
 | 
			
		||||
                ReadNext Key else Done = True$
 | 
			
		||||
                Command = ''
 | 
			
		||||
            Until Done
 | 
			
		||||
                
 | 
			
		||||
                Read Rec from pTable, Key then
 | 
			
		||||
                    TransDtm = Rec<1>
 | 
			
		||||
                    ElapSecs = (CurrDtm - TransDtm) * 86400 
 | 
			
		||||
                    If ElapSecs LT 1800 then
 | 
			
		||||
                        // Retry recent pending transactions (1800 seconds = 30 minutes) 
 | 
			
		||||
                        Table                  = Key[1, "*"]
 | 
			
		||||
                        Locate Table in NonCriticalTables using @FM setting Dummy then
 | 
			
		||||
                            ID = Key[Col2() + 1, Len(Key)]
 | 
			
		||||
                            Begin Case
 | 
			
		||||
                                Case ID[-7, 7] EQ "*DELETE"
 | 
			
		||||
                                    ID[-7, 7] = ""
 | 
			
		||||
                                    Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                                Case ID[-6, 6] EQ "*WRITE"
 | 
			
		||||
                                    ID[-6, 6] = ""
 | 
			
		||||
                                    Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                            End Case              
 | 
			
		||||
                        end else
 | 
			
		||||
                            TempKey                              = Key
 | 
			
		||||
                            TempKey[1, Len(Table) + 1]           = ''
 | 
			
		||||
                            TransTime                            = TempKey[-1, 'B*']
 | 
			
		||||
                            TempKey[-1, Neg(Len(TransTime) + 1)] = ''
 | 
			
		||||
                            TransDate                            = TempKey[-1, 'B*']
 | 
			
		||||
                            TempKey[-1, Neg(Len(TransDate) + 1)] = ''
 | 
			
		||||
                            Process                              = TempKey[-1, 'B*']
 | 
			
		||||
                            TempKey[-1, Neg(Len(Process) + 1)]   = ''
 | 
			
		||||
                            ID                                   = TempKey
 | 
			
		||||
                            If Process EQ 'DELETE' then
 | 
			
		||||
                                Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                            end else
 | 
			
		||||
                                Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
                            end                
 | 
			
		||||
                        end
 | 
			
		||||
                        
 | 
			
		||||
                        TcpClientHandle = 0
 | 
			
		||||
                        ServerIP        = Environment_Services('GetApplicationRootIP')
 | 
			
		||||
                        Convert '\' to '' in ServerIP
 | 
			
		||||
                        
 | 
			
		||||
                        If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, '20779') then
 | 
			
		||||
                            SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
 | 
			
		||||
                            SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
 | 
			
		||||
                        end
 | 
			
		||||
                        
 | 
			
		||||
                    end else
 | 
			
		||||
                        // This transaction most likely won't replicate due to a schema mapping issue or because
 | 
			
		||||
                        // the record no longer exists in OI, so remove this transaction from the pending queue.
 | 
			
		||||
                        Delete pTable, Key else null
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
	If Run then
 | 
			
		||||
		Database_Services('WriteDataRow', 'APP_INFO', 'SQL_PENDING_LAST_RUNTIME', LastRunDtm)
 | 
			
		||||
		hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
		Lock hSysLists, 'Copy_Pending_Records_To_SQL' then
 | 
			
		||||
 | 
			
		||||
            Repeat
 | 
			
		||||
        end
 | 
			
		||||
        Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
			NonCriticalTables = Database_Services('ReadDataRow', 'APP_INFO', 'NONCRITICAL_SQL_TABLES')
 | 
			
		||||
			Open "SQL_PENDING" to pTable then
 | 
			
		||||
			
 | 
			
		||||
				ClearSelect
 | 
			
		||||
				Select pTable
 | 
			
		||||
				Done = False$
 | 
			
		||||
				Loop
 | 
			
		||||
					ReadNext Key else Done = True$
 | 
			
		||||
					Command = ''
 | 
			
		||||
				Until Done
 | 
			
		||||
					
 | 
			
		||||
					Read Rec from pTable, Key then
 | 
			
		||||
						TransDtm = Rec<1>
 | 
			
		||||
						ElapSecs = (CurrDtm - TransDtm) * SECONDS_PER_DAY$
 | 
			
		||||
						If ElapSecs LT THIRTY_MINUTES$ then
 | 
			
		||||
							// Retry recent pending transactions (i.e., those submitted in the last 30 minutes) 
 | 
			
		||||
							Table                  = Key[1, "*"]
 | 
			
		||||
							Locate Table in NonCriticalTables using @FM setting Dummy then
 | 
			
		||||
								ID = Key[Col2() + 1, Len(Key)]
 | 
			
		||||
								Begin Case
 | 
			
		||||
									Case ID[-7, 7] EQ "*DELETE"
 | 
			
		||||
										ID[-7, 7] = ""
 | 
			
		||||
										Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
									Case ID[-6, 6] EQ "*WRITE"
 | 
			
		||||
										ID[-6, 6] = ""
 | 
			
		||||
										Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
								End Case              
 | 
			
		||||
							end else
 | 
			
		||||
								TempKey                              = Key
 | 
			
		||||
								TempKey[1, Len(Table) + 1]           = ''
 | 
			
		||||
								TransTime                            = TempKey[-1, 'B*']
 | 
			
		||||
								TempKey[-1, Neg(Len(TransTime) + 1)] = ''
 | 
			
		||||
								TransDate                            = TempKey[-1, 'B*']
 | 
			
		||||
								TempKey[-1, Neg(Len(TransDate) + 1)] = ''
 | 
			
		||||
								Process                              = TempKey[-1, 'B*']
 | 
			
		||||
								TempKey[-1, Neg(Len(Process) + 1)]   = ''
 | 
			
		||||
								ID                                   = TempKey
 | 
			
		||||
								If Process EQ 'DELETE' then
 | 
			
		||||
									Command := 'RUN DELETE_RECORD_FROM_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
								end else
 | 
			
		||||
									Command := 'RUN COPY_RECORD_TO_SQL ':Quote(Table):', ':Quote(ID):', 1, ':Quote(Key)
 | 
			
		||||
								end                
 | 
			
		||||
							end
 | 
			
		||||
							
 | 
			
		||||
							TcpClientHandle = 0
 | 
			
		||||
							ServerIP        = Environment_Services('GetApplicationRootIP')
 | 
			
		||||
							ServerPort      = Environment_Services('GetScrapeServerPort')
 | 
			
		||||
							Convert '\' to '' in ServerIP
 | 
			
		||||
							
 | 
			
		||||
							If SRP_TcpClient(TcpClientHandle, 'CONNECT', ServerIP, ServerPort) then
 | 
			
		||||
								SRP_TcpClient(TcpClientHandle, 'SEND_SES', Command)
 | 
			
		||||
								SRP_TcpClient(TcpClientHandle, 'CLOSE_SES')
 | 
			
		||||
							end
 | 
			
		||||
							
 | 
			
		||||
						end else
 | 
			
		||||
							// This transaction most likely won't replicate due to a schema mapping issue or because
 | 
			
		||||
							// the record no longer exists in OI, so remove this transaction from the pending queue.
 | 
			
		||||
							Delete pTable, Key else null
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
 | 
			
		||||
				Repeat
 | 
			
		||||
			end
 | 
			
		||||
			Unlock hSysLists, 'Copy_Pending_Records_To_SQL' else Null
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
Return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,98 +22,108 @@ Compile function Copy_Record_To_SQL(Table, Key, LogError, pKey)
 | 
			
		||||
	09/23/2010    KRF   Added logic to set @DICT, @ID, and @RECORD so handlers
 | 
			
		||||
	                    can use symbolics
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
$insert Microsoft_Ado_Equates
 | 
			
		||||
 | 
			
		||||
If Assigned(LogError) else LogError = 0
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert MICROSOFT_ADO_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare subroutine SRP_Com, Sql_Services
 | 
			
		||||
Declare function SRP_Com, Environment_Services, Datetime, Sql_Services, Error_Services, Database_Services
 | 
			
		||||
Ans = ""
 | 
			
		||||
Declare function SRP_Com, Environment_Services, Datetime, Sql_Services, Error_Services, Database_Services, Unassigned
 | 
			
		||||
 | 
			
		||||
// Make sure table is uppercase
 | 
			
		||||
Convert @LOWER_CASE to @UPPER_CASE in Table
 | 
			
		||||
Main:
 | 
			
		||||
	
 | 
			
		||||
	If Unassigned(LogError) then LogError = False$
 | 
			
		||||
	If Unassigned(pKey) 	then pKey	  = ''
 | 
			
		||||
	Ans  = ""
 | 
			
		||||
	Done = False$
 | 
			
		||||
	// Make sure table is uppercase
 | 
			
		||||
	Convert @LOWER_CASE to @UPPER_CASE in Table
 | 
			
		||||
 | 
			
		||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
 | 
			
		||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos else
 | 
			
		||||
    
 | 
			
		||||
    // The expected name of the handler
 | 
			
		||||
    Handler = "COPY_":Table:"_RECORD_TO_SQL"
 | 
			
		||||
    
 | 
			
		||||
    // Find the stored procedure that handles this table
 | 
			
		||||
    Open "SYSOBJ" to hSysObj then
 | 
			
		||||
        Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
 | 
			
		||||
            // Connect to the ODBC
 | 
			
		||||
            If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
 | 
			
		||||
                ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
 | 
			
		||||
                If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then   
 | 
			
		||||
                    // Read the record and call the handler
 | 
			
		||||
                    Open Table to hTable then
 | 
			
		||||
                        Read @RECORD from hTable, Key then
 | 
			
		||||
                            If Key NE "" then
 | 
			
		||||
                                Open "DICT.":Table to @DICT then null
 | 
			
		||||
                                @ID = Key
 | 
			
		||||
                                Ans = Function(@Handler(Connection, Key, @RECORD))
 | 
			
		||||
                                If Ans EQ '' then
 | 
			
		||||
                                	If Assigned(pKey) then
 | 
			
		||||
										If pKey NE '' then
 | 
			
		||||
											Open 'SQL_PENDING' to pTable then
 | 
			
		||||
												Delete pTable, pKey else null
 | 
			
		||||
	TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
 | 
			
		||||
	Locate Table in TablesToSkip by "AL" using "," setting ListPos else
 | 
			
		||||
		
 | 
			
		||||
		Open 'SQL_PENDING' to pTable then
 | 
			
		||||
			
 | 
			
		||||
			If pKey NE '' then Lock pTable, pKey else Done = True$
 | 
			
		||||
			
 | 
			
		||||
			If Not(Done) then 
 | 
			
		||||
				// The expected name of the handler
 | 
			
		||||
				Handler = "COPY_":Table:"_RECORD_TO_SQL"
 | 
			
		||||
				
 | 
			
		||||
				// Find the stored procedure that handles this table
 | 
			
		||||
				Open "SYSOBJ" to hSysObj then
 | 
			
		||||
					Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
 | 
			
		||||
						// Connect to the ODBC
 | 
			
		||||
						If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
 | 
			
		||||
							ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
 | 
			
		||||
							If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then   
 | 
			
		||||
								// Read the record and call the handler
 | 
			
		||||
								Open Table to hTable then
 | 
			
		||||
									Read @RECORD from hTable, Key then
 | 
			
		||||
										If Key NE "" then
 | 
			
		||||
											Open "DICT.":Table to @DICT then null
 | 
			
		||||
											@ID = Key
 | 
			
		||||
											Ans = Function(@Handler(Connection, Key, @RECORD))
 | 
			
		||||
											If (Ans EQ '') then
 | 
			
		||||
												If Assigned(pKey) then
 | 
			
		||||
													If (pKey NE '') then
 | 
			
		||||
														Delete pTable, pKey else Null
 | 
			
		||||
													end
 | 
			
		||||
												end
 | 
			
		||||
											end
 | 
			
		||||
										end
 | 
			
		||||
                                	end
 | 
			
		||||
                                end
 | 
			
		||||
                            end
 | 
			
		||||
                        end else
 | 
			
		||||
                            Ans = 'Unable to read ':Key:' from ':Table:' table.'
 | 
			
		||||
                        end
 | 
			
		||||
                    end
 | 
			
		||||
                end else
 | 
			
		||||
                    Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
 | 
			
		||||
                end
 | 
			
		||||
                SRP_Com(Connection, "CALL", "Close")
 | 
			
		||||
                SRP_Com(Connection, "RELEASE")
 | 
			
		||||
            end else
 | 
			
		||||
                Ans = "Unable to create ADO connection."
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        If LogError and Len(Ans) then    
 | 
			
		||||
            Open "SQL_ERROR" to hSqlError then
 | 
			
		||||
                ErrorKey  = OConv(Date(), "D4-J")
 | 
			
		||||
                Timestamp = OConv(Datetime(), 'DT')
 | 
			
		||||
                Read Errors from hSqlError, ErrorKey then
 | 
			
		||||
                    Errors := @FM:Table:@VM:Key:@VM:Timestamp:@VM:Ans
 | 
			
		||||
                    Write Errors to hSqlError, ErrorKey
 | 
			
		||||
                end else
 | 
			
		||||
                    Errors = Table:@VM:Key:@VM:Timestamp:@VM:Ans
 | 
			
		||||
                    Write Errors to hSqlError, ErrorKey
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        If Assigned(pKey) then
 | 
			
		||||
        	If (pKey NE '') then 
 | 
			
		||||
				// Always log the result
 | 
			
		||||
				Open 'SQL_LOG' to hLog then
 | 
			
		||||
					If Ans EQ '' then
 | 
			
		||||
						Result = 'PROCESSED'
 | 
			
		||||
					end else
 | 
			
		||||
						Result = Ans
 | 
			
		||||
									end else
 | 
			
		||||
										Ans = 'Unable to read ':Key:' from ':Table:' table.'
 | 
			
		||||
									end
 | 
			
		||||
								end
 | 
			
		||||
							end else
 | 
			
		||||
								Ans  = 'Unable to open connection to SQL server. SQL connection error: '
 | 
			
		||||
								Ans := SRP_Com(Connection, "ERROR")
 | 
			
		||||
							end
 | 
			
		||||
							SRP_Com(Connection, "CALL", "Close")
 | 
			
		||||
							SRP_Com(Connection, "RELEASE")
 | 
			
		||||
						end else
 | 
			
		||||
							Ans = "Unable to create ADO connection."
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					CurrDate = Date()
 | 
			
		||||
					Read Log from hLog, CurrDate then
 | 
			
		||||
						Log := @FM:pKey:@VM:Result
 | 
			
		||||
					end else
 | 
			
		||||
						Log = pKey:@VM:Result
 | 
			
		||||
					
 | 
			
		||||
					If LogError and Len(Ans) then    
 | 
			
		||||
						Open "SQL_ERROR" to hSqlError then
 | 
			
		||||
							ErrorKey  = OConv(Date(), "D4-J")
 | 
			
		||||
							Timestamp = OConv(Datetime(), 'DT')
 | 
			
		||||
							Read Errors from hSqlError, ErrorKey then
 | 
			
		||||
								Errors := @FM:Table:@VM:Key:@VM:Timestamp:@VM:Ans
 | 
			
		||||
								Write Errors to hSqlError, ErrorKey
 | 
			
		||||
							end else
 | 
			
		||||
								Errors = Table:@VM:Key:@VM:Timestamp:@VM:Ans
 | 
			
		||||
								Write Errors to hSqlError, ErrorKey
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					If Assigned(pKey) then
 | 
			
		||||
						If (pKey NE '') then
 | 
			
		||||
						    // Call unlock here in case we ran into an error above
 | 
			
		||||
						    Unlock pTable, pKey else Null
 | 
			
		||||
							// Always log the result
 | 
			
		||||
							Open 'SQL_LOG' to hLog then
 | 
			
		||||
								If Ans EQ '' then
 | 
			
		||||
									Result = 'PROCESSED'
 | 
			
		||||
								end else
 | 
			
		||||
									Result = Ans
 | 
			
		||||
								end
 | 
			
		||||
								CurrDate = Date()
 | 
			
		||||
								Read Log from hLog, CurrDate then
 | 
			
		||||
									Log := @FM:pKey:@VM:Result
 | 
			
		||||
								end else
 | 
			
		||||
									Log = pKey:@VM:Result
 | 
			
		||||
								end
 | 
			
		||||
								Write Log to hLog, CurrDate
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					Write Log to hLog, CurrDate
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
    
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,49 +14,52 @@ Declare function SQL_Write, SQL_Write_MV, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
 | 
			
		||||
// Parse record into a dimensioned array for speed
 | 
			
		||||
Dim Rec(82)
 | 
			
		||||
Dim Rec(86)
 | 
			
		||||
MatParse Record into Rec
 | 
			
		||||
					    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "WO":@VM:SQL_Format(Key, "INT")
 | 
			
		||||
 | 
			
		||||
// List of data fields and their values
 | 
			
		||||
DataFields  = "ENTRY_ID"         :@VM:SQL_Format(Rec(WO_LOG_ENTRY_ID$),          "STR"):@FM
 | 
			
		||||
DataFields := "ENTRY_DATE"       :@VM:SQL_Format(Rec(WO_LOG_ENTRY_DATE$),        "DATE"):@FM
 | 
			
		||||
DataFields := "CUST_NO"          :@VM:SQL_Format(Rec(WO_LOG_CUST_NO$),           "INT"):@FM
 | 
			
		||||
DataFields := "QTY"              :@VM:SQL_Format(Rec(WO_LOG_QTY$),               "INT"):@FM
 | 
			
		||||
DataFields := "PROD_SPEC_ID"     :@VM:SQL_Format(Rec(WO_LOG_PROD_SPEC_ID$),      "INT"):@FM
 | 
			
		||||
DataFields := "NOTES"            :@VM:SQL_Format(Rec(WO_LOG_NOTES$),             "STR", 1):@FM
 | 
			
		||||
DataFields := "CUST_SHIP_DATE"   :@VM:SQL_Format(Rec(WO_LOG_CUST_SHIP_DATE$),    "DATE"):@FM
 | 
			
		||||
DataFields := "STATUS"           :@VM:SQL_Format(Rec(WO_LOG_STATUS$),            "STR"):@FM
 | 
			
		||||
DataFields := "ORG_SCHEDULED"    :@VM:SQL_Format(Rec(WO_LOG_ORG_SCHEDULED$),     "BIT"):@FM
 | 
			
		||||
DataFields := "RECEIVED_DATE"    :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_DATE$),     "DATE"):@FM
 | 
			
		||||
DataFields := "CLOSE_DATE"       :@VM:SQL_Format(Rec(WO_LOG_CLOSE_DATE$),        "DATE"):@FM
 | 
			
		||||
DataFields := "RECEIVED_TIME"    :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_TIME$),     "TIME"):@FM
 | 
			
		||||
DataFields := "COMMIT_DATE"      :@VM:SQL_Format(Rec(WO_LOG_COMMIT_DATE$),       "DATE"):@FM
 | 
			
		||||
DataFields := "CYCLE_TIME"       :@VM:SQL_Format(Rec(WO_LOG_CYCLE_TIME$),        "STR"):@FM
 | 
			
		||||
DataFields := "UNIT_PRICE"       :@VM:SQL_Format(Rec(WO_LOG_UNIT_PRICE$),        "STR"):@FM
 | 
			
		||||
DataFields := "ORDER_NO"         :@VM:SQL_Format(Rec(WO_LOG_ORDER_NO$),          "STR"):@FM
 | 
			
		||||
DataFields := "RX_DTM"           :@VM:SQL_Format(Rec(WO_LOG_RX_DTM$),            "DATETIME"):@FM
 | 
			
		||||
DataFields := "OUT_CASS_LOAD_QTY":@VM:SQL_Format(Rec(WO_LOG_OUT_CASS_LOAD_QTY$), "INT"):@FM
 | 
			
		||||
DataFields := "PART_NO"          :@VM:SQL_Format(Rec(WO_LOG_PART_NO$),           "STR"):@FM
 | 
			
		||||
DataFields := "PROD_ORD_NO"      :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO$),       "STR"):@FM
 | 
			
		||||
DataFields := "WO_START_DTM"     :@VM:SQL_Format(Rec(WO_LOG_WO_START_DTM$),      "DATETIME"):@FM
 | 
			
		||||
DataFields := "WO_STOP_DTM"      :@VM:SQL_Format(Rec(WO_LOG_WO_STOP_DTM$),       "DATETIME"):@FM
 | 
			
		||||
DataFields := "WO_HOLD"          :@VM:SQL_Format(Rec(WO_LOG_WO_HOLD$),           "BIT"):@FM
 | 
			
		||||
DataFields := "EPI_PART_NO"      :@VM:SQL_Format(Rec(WO_LOG_EPI_PART_NO$),       "STR"):@FM
 | 
			
		||||
DataFields := "ORD_SUB_PART_NO"  :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_NO$),   "STR"):@FM
 | 
			
		||||
DataFields := "ORD_SUB_PART_REV" :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_REV$),  "STR"):@FM
 | 
			
		||||
DataFields := "CUST_PO_NO"       :@VM:SQL_Format(Rec(WO_LOG_CUST_PO_NO$),        "STR"):@FM
 | 
			
		||||
DataFields := "SAP_ORD_QTY"      :@VM:SQL_Format(Rec(WO_LOG_SAP_ORD_QTY$),       "INT"):@FM
 | 
			
		||||
DataFields := "CUST_PART_NO"     :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_NO$),      "STR"):@FM
 | 
			
		||||
DataFields := "CUST_PART_INBOUND":@VM:SQL_Format(Rec(WO_LOG_CUST_PART_INBOUND$), "STR"):@FM
 | 
			
		||||
DataFields := "CUST_SUB_PART_NO" :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_PART_NO$),  "STR"):@FM
 | 
			
		||||
DataFields := "CUST_SUB_MFR"     :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_MFR$),      "STR"):@FM
 | 
			
		||||
DataFields := "PROD_ORD_NO_TMP"  :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO_TMP$),   "STR"):@FM
 | 
			
		||||
DataFields := "ORIGIN"           :@VM:SQL_Format(Rec(WO_LOG_ORIGIN$),            "STR"):@FM
 | 
			
		||||
DataFields := "INCO_CODE"        :@VM:SQL_Format(Rec(WO_LOG_INCO_CODE$),         "STR"):@FM
 | 
			
		||||
DataFields := "HOT_FLAG"         :@VM:SQL_Format(Rec(WO_LOG_HOT_FLAG$),           "BIT"):@FM
 | 
			
		||||
DataFields  = "ENTRY_ID"            :@VM:SQL_Format(Rec(WO_LOG_ENTRY_ID$),              "STR"):@FM
 | 
			
		||||
DataFields := "ENTRY_DATE"          :@VM:SQL_Format(Rec(WO_LOG_ENTRY_DATE$),            "DATE"):@FM
 | 
			
		||||
DataFields := "CUST_NO"             :@VM:SQL_Format(Rec(WO_LOG_CUST_NO$),               "INT"):@FM
 | 
			
		||||
DataFields := "QTY"                 :@VM:SQL_Format(Rec(WO_LOG_QTY$),                   "INT"):@FM
 | 
			
		||||
DataFields := "PROD_SPEC_ID"        :@VM:SQL_Format(Rec(WO_LOG_PROD_SPEC_ID$),          "INT"):@FM
 | 
			
		||||
DataFields := "NOTES"               :@VM:SQL_Format(Rec(WO_LOG_NOTES$),                 "STR", 1):@FM
 | 
			
		||||
DataFields := "CUST_SHIP_DATE"      :@VM:SQL_Format(Rec(WO_LOG_CUST_SHIP_DATE$),        "DATE"):@FM
 | 
			
		||||
DataFields := "STATUS"              :@VM:SQL_Format(Rec(WO_LOG_STATUS$),                "STR"):@FM
 | 
			
		||||
DataFields := "ORG_SCHEDULED"       :@VM:SQL_Format(Rec(WO_LOG_ORG_SCHEDULED$),         "BIT"):@FM
 | 
			
		||||
DataFields := "RECEIVED_DATE"       :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_DATE$),         "DATE"):@FM
 | 
			
		||||
DataFields := "CLOSE_DATE"          :@VM:SQL_Format(Rec(WO_LOG_CLOSE_DATE$),            "DATE"):@FM
 | 
			
		||||
DataFields := "RECEIVED_TIME"       :@VM:SQL_Format(Rec(WO_LOG_RECEIVED_TIME$),         "TIME"):@FM
 | 
			
		||||
DataFields := "COMMIT_DATE"         :@VM:SQL_Format(Rec(WO_LOG_COMMIT_DATE$),           "DATE"):@FM
 | 
			
		||||
DataFields := "CYCLE_TIME"          :@VM:SQL_Format(Rec(WO_LOG_CYCLE_TIME$),            "STR"):@FM
 | 
			
		||||
DataFields := "UNIT_PRICE"          :@VM:SQL_Format(Rec(WO_LOG_UNIT_PRICE$),            "STR"):@FM
 | 
			
		||||
DataFields := "ORDER_NO"            :@VM:SQL_Format(Rec(WO_LOG_ORDER_NO$),              "STR"):@FM
 | 
			
		||||
DataFields := "RX_DTM"              :@VM:SQL_Format(Rec(WO_LOG_RX_DTM$),                "DATETIME"):@FM
 | 
			
		||||
DataFields := "OUT_CASS_LOAD_QTY"   :@VM:SQL_Format(Rec(WO_LOG_OUT_CASS_LOAD_QTY$),     "INT"):@FM
 | 
			
		||||
DataFields := "PART_NO"             :@VM:SQL_Format(Rec(WO_LOG_PART_NO$),               "STR"):@FM
 | 
			
		||||
DataFields := "PROD_ORD_NO"         :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO$),           "STR"):@FM
 | 
			
		||||
DataFields := "WO_START_DTM"        :@VM:SQL_Format(Rec(WO_LOG_WO_START_DTM$),          "DATETIME"):@FM
 | 
			
		||||
DataFields := "WO_STOP_DTM"         :@VM:SQL_Format(Rec(WO_LOG_WO_STOP_DTM$),           "DATETIME"):@FM
 | 
			
		||||
DataFields := "WO_HOLD"             :@VM:SQL_Format(Rec(WO_LOG_WO_HOLD$),               "BIT"):@FM
 | 
			
		||||
DataFields := "EPI_PART_NO"         :@VM:SQL_Format(Rec(WO_LOG_EPI_PART_NO$),           "STR"):@FM
 | 
			
		||||
DataFields := "ORD_SUB_PART_NO"     :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_NO$),       "STR"):@FM
 | 
			
		||||
DataFields := "ORD_SUB_PART_REV"    :@VM:SQL_Format(Rec(WO_LOG_ORD_SUB_PART_REV$),      "STR"):@FM
 | 
			
		||||
DataFields := "CUST_PO_NO"          :@VM:SQL_Format(Rec(WO_LOG_CUST_PO_NO$),            "STR"):@FM
 | 
			
		||||
DataFields := "SAP_ORD_QTY"         :@VM:SQL_Format(Rec(WO_LOG_SAP_ORD_QTY$),           "INT"):@FM
 | 
			
		||||
DataFields := "CUST_PART_NO"        :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_NO$),          "STR"):@FM
 | 
			
		||||
DataFields := "CUST_PART_INBOUND"   :@VM:SQL_Format(Rec(WO_LOG_CUST_PART_INBOUND$),     "STR"):@FM
 | 
			
		||||
DataFields := "CUST_SUB_PART_NO"    :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_PART_NO$),      "STR"):@FM
 | 
			
		||||
DataFields := "CUST_SUB_MFR"        :@VM:SQL_Format(Rec(WO_LOG_CUST_SUB_MFR$),          "STR"):@FM
 | 
			
		||||
DataFields := "PROD_ORD_NO_TMP"     :@VM:SQL_Format(Rec(WO_LOG_PROD_ORD_NO_TMP$),       "STR"):@FM
 | 
			
		||||
DataFields := "ORIGIN"              :@VM:SQL_Format(Rec(WO_LOG_ORIGIN$),                "STR"):@FM
 | 
			
		||||
DataFields := "INCO_CODE"           :@VM:SQL_Format(Rec(WO_LOG_INCO_CODE$),             "STR"):@FM
 | 
			
		||||
DataFields := "HOT_FLAG"            :@VM:SQL_Format(Rec(WO_LOG_HOT_FLAG$),              "BIT"):@FM
 | 
			
		||||
DataFields := "CURR_STATUS_STATIC"  :@VM:SQL_Format(Rec(WO_LOG_CURR_STATUS_STATIC$),    "STR"):@FM
 | 
			
		||||
DataFields := "REL_QTY"             :@VM:SQL_Format(Rec(WO_LOG_REL_QTY_STATIC$),		"INT"):@FM
 | 
			
		||||
DataFields := "UNREL_QTY"           :@VM:SQL_Format(Rec(WO_LOG_UNREL_QTY_STATIC$),		"INT"):@FM
 | 
			
		||||
 | 
			
		||||
// Symbolics
 | 
			
		||||
DataFields := "START_DT"                :@VM:SQL_Format({START_DT},                 "DATE"):@FM
 | 
			
		||||
@ -68,9 +71,7 @@ DataFields := "CYCLE_TIME_WIP"          :@VM:SQL_Format({CYCLE_TIME_WIP},
 | 
			
		||||
DataFields := "CYCLE_TIME_DELTA"        :@VM:SQL_Format({CYCLE_TIME_DELTA},         "DEC", 1):@FM
 | 
			
		||||
DataFields := "CYCLE_TIME_QA_SHIP"      :@VM:SQL_Format({CYCLE_TIME_QA_SHIP},       "DEC", 1):@FM
 | 
			
		||||
DataFields := "CYCLE_TIME_REL_FIRST_VER":@VM:SQL_Format({CYCLE_TIME_REL_FIRST_VER}, "DEC", 1):@FM
 | 
			
		||||
DataFields := "SAP_TOT_WFR_QTY"         :@VM:SQL_Format({SAP_TOT_WFR_QTY},          "STR"):@FM
 | 
			
		||||
DataFields := "REL_QTY"                 :@VM:SQL_Format({REL_QTY},                  "INT"):@FM
 | 
			
		||||
DataFields := "UNREL_QTY"               :@VM:SQL_Format({UNREL_QTY},                "INT")
 | 
			
		||||
DataFields := "SAP_TOT_WFR_QTY"         :@VM:SQL_Format({SAP_TOT_WFR_QTY},          "STR")
 | 
			
		||||
 | 
			
		||||
// Write the data to the SQL database
 | 
			
		||||
Ans = SQL_Write(Connection, "WO_LOG", Keys, DataFields)
 | 
			
		||||
@ -349,3 +350,4 @@ If Ans EQ "" AND CassIdSap NE "" then
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -527,7 +527,7 @@ end service
 | 
			
		||||
// Reads a data column for the indicated Key ID and database table.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service ReadDataColumn(TableName, KeyID, ColumnNo, NotExpired, ExpirationDuration, IgnoreMFSRoutines)
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    If NotExpired NE False$ then NotExpired = True$
 | 
			
		||||
    If (ExpirationDuration EQ '') OR (Not(Num(ExpirationDuration))) then ExpirationDuration = 0
 | 
			
		||||
    If IgnoreMFSRoutines NE True$ then IgnoreMFSRoutines = False$
 | 
			
		||||
@ -609,7 +609,6 @@ Service ReadDataRow(TableName, KeyID, NotExpired, ExpirationDuration, IgnoreMFSR
 | 
			
		||||
                    Memory_Services('SetValue', ServiceKeyID, DataRow)
 | 
			
		||||
                end else
 | 
			
		||||
                    Error_Services('Add', 'Error reading ' : KeyID : ' from the ' : TableName : ' table in the ' : Service : ' service. Error = ' : @File_Error<1>)
 | 
			
		||||
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
@ -943,11 +942,9 @@ Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutine
 | 
			
		||||
                    Error_Services('Add', 'Error writing ' : KeyID : ' to the ' : TableName : ' table in the ' : Service : ' service. Error message: ':ErrorMsg)
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
*            If Error_Services('NoError') then
 | 
			
		||||
                If IgnoreAllLocks EQ False$ then
 | 
			
		||||
                    Database_Services('ReleaseKeyIDLock', TableName, KeyID)
 | 
			
		||||
                end
 | 
			
		||||
*            end
 | 
			
		||||
            If IgnoreAllLocks EQ False$ then
 | 
			
		||||
                Database_Services('ReleaseKeyIDLock', TableName, KeyID)
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
 | 
			
		||||
        end
 | 
			
		||||
@ -958,6 +955,68 @@ Service WriteDataRow(TableName, KeyID, DataRow, IgnoreSelfLock, IgnoreMFSRoutine
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
// WriteDataColumn
 | 
			
		||||
//
 | 
			
		||||
// TableName. The linear hash database table name. - [REQUIRED]
 | 
			
		||||
// KeyID. The KeyID to the database table. - [REQUIRED]
 | 
			
		||||
// ColumnNo. Column number of the table to write. - [REQUIRED]
 | 
			
		||||
//
 | 
			
		||||
// Writes a value to a column for the indicated Key ID and database table.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service WriteDataColumn(TableName, KeyID, ColumnNo, Value, IgnoreSelfLock, IgnoreMFSRoutines, IgnoreAllLocks)
 | 
			
		||||
 | 
			
		||||
    If TableName NE '' AND KeyID NE '' AND ColumnNo NE '' then
 | 
			
		||||
        
 | 
			
		||||
        If ( Num(ColumnNo) and (ColumnNo GT 0) ) then
 | 
			
		||||
            If Unassigned(Value) then Value = ''
 | 
			
		||||
            If IgnoreSelfLock NE True$ then IgnoreSelfLock = False$
 | 
			
		||||
            If IgnoreMFSRoutines NE True$ then IgnoreMFSRoutines = False$
 | 
			
		||||
            If IgnoreAllLocks NE True$ then IgnoreAllLocks = False$
 | 
			
		||||
            If IgnoreAllLocks then
 | 
			
		||||
                HaveLock    = True$
 | 
			
		||||
            end else
 | 
			
		||||
                HaveLock    = Database_Services('GetKeyIDLock', TableName, KeyID, IgnoreSelfLock)
 | 
			
		||||
            end
 | 
			
		||||
            If HaveLock EQ True$ then
 | 
			
		||||
                TableHandle = Database_Services('GetTableHandle', TableName)
 | 
			
		||||
                If IgnoreMFSRoutines then
 | 
			
		||||
                    MFSList = TableHandle<1, 1> ; // MFS routines are @SVM delimited.
 | 
			
		||||
                    NumMFS = DCount(MFSList, @SVM)
 | 
			
		||||
                    For MFSCnt = NumMFS to 1 Step -1
 | 
			
		||||
                        MFSRoutine  = MFSList<0, 0, MFSCnt>
 | 
			
		||||
                        If (MFSRoutine NE 'SI.MFS') AND (MFSRoutine NE 'RTP57') then
 | 
			
		||||
                            MFSList = Delete(MFSList, 0, 0, MFSCnt)
 | 
			
		||||
                        end
 | 
			
		||||
                    Next MFSCnt
 | 
			
		||||
                    TableHandle<1, 1>   = MFSList
 | 
			
		||||
                end
 | 
			
		||||
                
 | 
			
		||||
                If Error_Services('NoError') then
 | 
			
		||||
                    WriteV Value on TableHandle, KeyID, ColumnNo then
 | 
			
		||||
                        Memory_Services('SetValue', ServiceModule : '*' : 'ReadDataColumn' : '*' : TableName : '*' : KeyID : '*' : ColumnNo, Value)
 | 
			
		||||
                    end else
 | 
			
		||||
                        ErrorMsg = 'Error writing value ' : Quote(Value) ' to column number ' : ColumnNo : ' to key ' : KeyID |
 | 
			
		||||
                                 : ' of table ' : TableName : ' in the ' : Service : ' service.'
 | 
			
		||||
                        Error_Services('Add', ErrorMsg)
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
                If IgnoreAllLocks EQ False$ then
 | 
			
		||||
                    Database_Services('ReleaseKeyIDLock', TableName, KeyID)
 | 
			
		||||
                end
 | 
			
		||||
            end else
 | 
			
		||||
                Error_Services('Add', 'Unable to lock ' : KeyID : ' for the ' : TableName : ' table in the ' : Service : ' service.')
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            Error_Services('Add', 'ColumnNo was not a number or was not greater than zero in the ' :Service : ' service.')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        Error_Services('Add', 'TableName, KeyID, or ColumnNo argument was missing in the ' : Service : ' service.')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
// UnlockKeyID
 | 
			
		||||
//
 | 
			
		||||
@ -1043,5 +1102,3 @@ end service
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -220,6 +220,13 @@ Service GetWeekNum(InputDate)
 | 
			
		||||
   
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service ConvertDateTimeToISO8601(DatetimeToConv)
 | 
			
		||||
    
 | 
			
		||||
    Response = OConv(DatetimeToConv, "[SRP_DATETIME,()YYYY-MM-DD hh:mm:ss.000Z]")
 | 
			
		||||
    swap ' ' with 'T' in Response
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
 | 
			
		||||
@ -881,24 +881,19 @@ Event SIGN_BUTTON.CLICK()
 | 
			
		||||
    ******************************************
 | 
			
		||||
    * Verify Unload Stage QA Metrology Tests *
 | 
			
		||||
    ******************************************
 | 
			
		||||
 | 
			
		||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
 | 
			
		||||
    If (DevelopmentFlag EQ True$) then
 | 
			
		||||
        WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
        WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
        OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
        OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
        If OutOfSpec GT 0 then
 | 
			
		||||
            FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
            ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
            For each FailReason in FailReasons using @VM
 | 
			
		||||
                ErrorMsg := FailReason:CRLF$
 | 
			
		||||
            Next FailReason
 | 
			
		||||
            ErrMsg(ErrorMsg)
 | 
			
		||||
            Return
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
	WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
	WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
	OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
	OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
	If OutOfSpec GT 0 then
 | 
			
		||||
		FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
		ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
		For each FailReason in FailReasons using @VM
 | 
			
		||||
			ErrorMsg := FailReason:CRLF$
 | 
			
		||||
		Next FailReason
 | 
			
		||||
		ErrMsg(ErrorMsg)
 | 
			
		||||
		Return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    *******************************************
 | 
			
		||||
    * Verify if all steps have been completed *
 | 
			
		||||
@ -1965,7 +1960,3 @@ ClearForm:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_EVENT_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_EVENT_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
Compile function Delete_LOT_EVENT_Record_From_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Deletes the given LOT_EVENT record from the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	08/15/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Delete, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
				    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_EVENT_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
!! Delete records from MV tables first !!
 | 
			
		||||
 | 
			
		||||
// Currently no multi-value (child) tables
 | 
			
		||||
 | 
			
		||||
// LOT_EVENT
 | 
			
		||||
If Ans EQ "" then
 | 
			
		||||
    Ans = SQL_Delete(Connection, "LOT_EVENT", Keys)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_EVENT_TYPE_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_EVENT_TYPE_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
Compile function Delete_LOT_EVENT_TYPE_Record_From_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Deletes the given LOT_EVENT_TYPE record from the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	08/15/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Delete, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
				    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_EVENT_TYPE_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
!! Delete records from MV tables first !!
 | 
			
		||||
 | 
			
		||||
// Currently no multi-value (child) tables
 | 
			
		||||
 | 
			
		||||
// LOT_EVENT_TYPE
 | 
			
		||||
If Ans EQ "" then
 | 
			
		||||
    Ans = SQL_Delete(Connection, "LOT_EVENT_TYPE", Keys)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_OPERATION_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_OPERATION_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
Compile function Delete_LOT_OPERATION_Record_From_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Deletes the given LOT_OPERATION record from the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	08/15/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Delete, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
				    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_OPERATION_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
!! Delete records from MV tables first !!
 | 
			
		||||
 | 
			
		||||
// Currently no multi-value (child) tables
 | 
			
		||||
 | 
			
		||||
// LOT_OPERATION
 | 
			
		||||
If Ans EQ "" then
 | 
			
		||||
    Ans = SQL_Delete(Connection, "LOT_OPERATION", Keys)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LSL2/STPROC/DELETE_LOT_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
Compile function Delete_LOT_Record_From_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Deletes the given LOT record from the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	08/15/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Delete, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
				    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "LOT_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
!! Delete records from MV tables first !!
 | 
			
		||||
 | 
			
		||||
// Currently no multi-value (child) tables
 | 
			
		||||
 | 
			
		||||
// LOT
 | 
			
		||||
If Ans EQ "" then
 | 
			
		||||
    Ans = SQL_Delete(Connection, "LOT", Keys)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								LSL2/STPROC/DELETE_OPERATION_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LSL2/STPROC/DELETE_OPERATION_RECORD_FROM_SQL.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
Compile function Delete_OPERATION_Record_From_SQL(Connection, Key, Record)
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************\
 | 
			
		||||
	Deletes the given OPERATION record from the MSSQL database.
 | 
			
		||||
	
 | 
			
		||||
	History
 | 
			
		||||
	-------
 | 
			
		||||
	08/15/2025    DJS   Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
Declare function SQL_Delete, SQL_Format
 | 
			
		||||
Ans = ""
 | 
			
		||||
				    
 | 
			
		||||
// List of key names and their values
 | 
			
		||||
Keys = "OPERATION_ID":@VM:SQL_Format(Key, "STR")
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------------------------
 | 
			
		||||
// Multi-valued Fields
 | 
			
		||||
 | 
			
		||||
!! Delete records from MV tables first !!
 | 
			
		||||
 | 
			
		||||
// Currently no multi-value (child) tables
 | 
			
		||||
 | 
			
		||||
// OPERATION
 | 
			
		||||
If Ans EQ "" then
 | 
			
		||||
    Ans = SQL_Delete(Connection, "OPERATION", Keys)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
@ -18,81 +18,95 @@ Compile function Delete_Record_From_SQL(Table, Key, LogError, pKey)
 | 
			
		||||
	-------
 | 
			
		||||
	09/15/2010    KRF    Original Programmer
 | 
			
		||||
\*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
$insert Microsoft_Ado_Equates
 | 
			
		||||
 | 
			
		||||
If Assigned(LogError) else LogError = 0
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$insert MICROSOFT_ADO_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare subroutine Sql_Services, SRP_COM
 | 
			
		||||
Declare function Sql_Services, Error_Services, SRP_COM, Environment_Services
 | 
			
		||||
Ans = ""
 | 
			
		||||
Declare function Sql_Services, Error_Services, SRP_COM, Environment_Services, Unassigned
 | 
			
		||||
 | 
			
		||||
// Make sure table is uppercase
 | 
			
		||||
Convert @LOWER_CASE to @UPPER_CASE in Table
 | 
			
		||||
Main:
 | 
			
		||||
	
 | 
			
		||||
	If Unassigned(LogError) then LogError = False$
 | 
			
		||||
	If Unassigned(pKey) 	then pKey     = ''
 | 
			
		||||
	Ans  = ""
 | 
			
		||||
	Done = False$
 | 
			
		||||
	// Make sure table is uppercase
 | 
			
		||||
	Convert @LOWER_CASE to @UPPER_CASE in Table
 | 
			
		||||
	
 | 
			
		||||
	Open 'SQL_PENDING' to pTable then
 | 
			
		||||
 | 
			
		||||
// The expected name of the handler
 | 
			
		||||
Handler = "DELETE_":Table:"_RECORD_FROM_SQL"
 | 
			
		||||
		If pKey NE '' then Lock pTable, pKey else Done = True$
 | 
			
		||||
	
 | 
			
		||||
		If Not(Done) then 
 | 
			
		||||
			// The expected name of the handler
 | 
			
		||||
			Handler = "DELETE_":Table:"_RECORD_FROM_SQL"
 | 
			
		||||
 | 
			
		||||
// Find the stored procedure that handles this table
 | 
			
		||||
Open "SYSOBJ" to hSysObj then
 | 
			
		||||
    Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
 | 
			
		||||
        // Connect to the ODBC/ADO
 | 
			
		||||
        If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
 | 
			
		||||
            // Connect to the database via ODBC    
 | 
			
		||||
            ConnectionString    = Environment_Services('GetSQLScrapeConnectionString')
 | 
			
		||||
            If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
 | 
			
		||||
                // Read the record and call the handler
 | 
			
		||||
                If Key NE "" then
 | 
			
		||||
                    Ans = Function(@Handler(Connection, Key))
 | 
			
		||||
                    If Ans EQ '' then
 | 
			
		||||
                        If Assigned(pKey) then
 | 
			
		||||
                            Open 'SQL_PENDING' to pTable then
 | 
			
		||||
                                Delete pTable, pKey else null
 | 
			
		||||
                            end
 | 
			
		||||
                        end
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
            end else
 | 
			
		||||
                Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
 | 
			
		||||
            end
 | 
			
		||||
            SRP_Com(Connection, "CALL", "Close")
 | 
			
		||||
            SRP_Com(Connection, "RELEASE")
 | 
			
		||||
        end else
 | 
			
		||||
            Ans = "Unable to create ADO connection."
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
			// Find the stored procedure that handles this table
 | 
			
		||||
			Open "SYSOBJ" to hSysObj then
 | 
			
		||||
				Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
 | 
			
		||||
					// Connect to the ODBC/ADO
 | 
			
		||||
					If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
 | 
			
		||||
						// Connect to the database via ODBC    
 | 
			
		||||
						ConnectionString    = Environment_Services('GetSQLScrapeConnectionString')
 | 
			
		||||
						If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
 | 
			
		||||
							// Read the record and call the handler
 | 
			
		||||
							If Key NE "" then
 | 
			
		||||
								Ans = Function(@Handler(Connection, Key))
 | 
			
		||||
								If (Ans EQ '') then
 | 
			
		||||
									If Assigned(pKey) then
 | 
			
		||||
									    If (pKey NE '') then
 | 
			
		||||
									        Delete pTable, pKey else Null
 | 
			
		||||
									    end
 | 
			
		||||
									end
 | 
			
		||||
								end
 | 
			
		||||
							end
 | 
			
		||||
						end else
 | 
			
		||||
							Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
 | 
			
		||||
						end
 | 
			
		||||
						SRP_Com(Connection, "CALL", "Close")
 | 
			
		||||
						SRP_Com(Connection, "RELEASE")
 | 
			
		||||
					end else
 | 
			
		||||
						Ans = "Unable to create ADO connection."
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
 | 
			
		||||
If LogError AND Len(Ans) then
 | 
			
		||||
    Open "SQL_ERROR" to hSqlError then
 | 
			
		||||
        Read Errors from hSqlError, Date() then
 | 
			
		||||
            Errors := @FM:Table:@VM:Key:@VM:Ans
 | 
			
		||||
            Write Errors to hSqlError, Date()
 | 
			
		||||
        end else
 | 
			
		||||
            Errors = Table:@VM:Key:@VM:Ans
 | 
			
		||||
            Write Errors to hSqlError, Date()
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
			If LogError AND Len(Ans) then
 | 
			
		||||
				Open "SQL_ERROR" to hSqlError then
 | 
			
		||||
					Read Errors from hSqlError, Date() then
 | 
			
		||||
						Errors := @FM:Table:@VM:Key:@VM:Ans
 | 
			
		||||
						Write Errors to hSqlError, Date()
 | 
			
		||||
					end else
 | 
			
		||||
						Errors = Table:@VM:Key:@VM:Ans
 | 
			
		||||
						Write Errors to hSqlError, Date()
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
 | 
			
		||||
// Always log the result
 | 
			
		||||
 | 
			
		||||
If Assigned(pKey) then
 | 
			
		||||
    Open 'SQL_LOG' to hLog then
 | 
			
		||||
        If Ans EQ '' then
 | 
			
		||||
            Result = 'PROCESSED'
 | 
			
		||||
        end else
 | 
			
		||||
            Result = Ans
 | 
			
		||||
        end
 | 
			
		||||
        CurrDate = Date()
 | 
			
		||||
        Read Log from hLog, CurrDate then
 | 
			
		||||
            Log := @FM:pKey:@VM:Result
 | 
			
		||||
        end else
 | 
			
		||||
            Log = pKey:@VM:Result
 | 
			
		||||
        end
 | 
			
		||||
        Write Log to hLog, CurrDate
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
			// Always log the result
 | 
			
		||||
 | 
			
		||||
			If Assigned(pKey) then
 | 
			
		||||
				If (pKey NE '') then
 | 
			
		||||
				    // Call unlock here in case an error was encountered above
 | 
			
		||||
				    Unlock pTable, pKey else Null
 | 
			
		||||
					Open 'SQL_LOG' to hLog then
 | 
			
		||||
						If Ans EQ '' then
 | 
			
		||||
							Result = 'PROCESSED'
 | 
			
		||||
						end else
 | 
			
		||||
							Result = Ans
 | 
			
		||||
						end
 | 
			
		||||
						CurrDate = Date()
 | 
			
		||||
						Read Log from hLog, CurrDate then
 | 
			
		||||
							Log := @FM:pKey:@VM:Result
 | 
			
		||||
						end else
 | 
			
		||||
							Log = pKey:@VM:Result
 | 
			
		||||
						end
 | 
			
		||||
						Write Log to hLog, CurrDate
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
Return Ans
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -590,7 +590,9 @@ Service SetupDevServices()
 | 
			
		||||
		BaselineServices  = 'Update Material Logs':@VM:'Log Transaction Postings':@VM:'Process Wafer Image Queue':@VM
 | 
			
		||||
		BaselineServices := 'Process UCL Requests':@VM:'Process ROTR Requests':@VM:'Process Wafer Image Requests':@VM
 | 
			
		||||
		BaselineServices := 'Process SQL Requests':@VM:'Send Notes':@VM:'Update Notification Groups':@VM
 | 
			
		||||
		BaselineServices := 'Update Security Groups':@VM:'Auto Scheduler'
 | 
			
		||||
		BaselineServices := 'Update Security Groups':@VM:'Auto Scheduler':@VM:'Update NICA Orders':@VM:'Process Procedure Queue':@VM
 | 
			
		||||
		BaselineServices := 'Process Transaction Queue':@VM:'Update Open Work Order Statuses':@VM:'Update Work Order Wafer Quantities':@VM
 | 
			
		||||
		BaselineServices := 'Process Mona Requests'
 | 
			
		||||
		
 | 
			
		||||
		Query = "SELECT SERVICES"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -440,7 +440,7 @@ END
 | 
			
		||||
IF CurrStatus NE '' THEN
 | 
			
		||||
	SWAP @VM WITH '" "' IN CurrStatus
 | 
			
		||||
	IF SelectSent NE '' THEN SelectSent := ' AND'
 | 
			
		||||
	SelectSent := ' WITH CURR_STATUS ':QUOTE(CurrStatus)
 | 
			
		||||
	SelectSent := ' WITH CURR_STATUS_STATIC ':QUOTE(CurrStatus)
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IF PartTypes NE '' THEN
 | 
			
		||||
@ -471,7 +471,7 @@ SelectSent = 'SELECT REACT_ITEM ':SelectSent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Def = ""
 | 
			
		||||
Def<MTEXT$> = "Selecting Reactor Events..."
 | 
			
		||||
Def<MTEXT$> = "Selecting Reactor Items..."
 | 
			
		||||
Def<MTYPE$> = "U"
 | 
			
		||||
 | 
			
		||||
* display the processing message and do the processing
 | 
			
		||||
@ -502,6 +502,3 @@ End_Dialog(@WINDOW,RINos)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user