413 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			413 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Function NDW_RDS_Supplement_Events(CtrlEntId, Event, @PARAMS)
 | |
| /***********************************************************************************************************************
 | |
| 
 | |
|     This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | |
|     permission from Infineon.
 | |
| 
 | |
|     Name        :   DBW_RDS_Supplement_Events
 | |
| 
 | |
|     Description :   This function acts as a commuter module for all events related to this window.
 | |
| 
 | |
|     Notes       :   Commuter Modules are automatically called from the Promoted_Events function which is called by the
 | |
|                     application-specific promoted event handler. This makes it possible to add QuickEvents that need to
 | |
|                     execute Basic+ logic without having use the Form Designer to make the association, although this is
 | |
|                     limited to the events which are currently promoted.
 | |
| 
 | |
|                     If the form needs to call the commuter module directly then the QuickEvent parameters should be
 | |
|                     formatted like this:
 | |
| 
 | |
|                         '@SELF','@EVENT',['@PARAM1','@PARAMx']
 | |
| 
 | |
|     Parameters  :
 | |
|         CtrlEntId   [in] -- The fully qualified name of the control calling the promoted event
 | |
|         Event       [in] -- The event being executed. See the Notes section regarding "PRE" events
 | |
|         Param1-15   [in] -- Additional event parameter holders
 | |
|         EventFlow  [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
 | |
|                             EVENT_SETUP insert
 | |
| 
 | |
|     History     :   (Date, Initials, Notes)
 | |
|         05/23/18    djs     Created initial commuter module.
 | |
|         06/13/24	djm		Modify for new stage-specific supplement system.
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| 
 | |
| #pragma precomp SRP_PreCompiler
 | |
| #Window NDW_RDS_SUPPLEMENT
 | |
| 
 | |
| $insert APP_INSERTS
 | |
| $insert EVENT_SETUP
 | |
| $insert WO_MAT_EQUATES
 | |
| $insert MSG_EQUATES
 | |
| $Insert SUPPLEMENTS_EQUATES
 | |
| 
 | |
| Declare subroutine  SRP_EditTable_Manager, SRP_Show_Window, Rds_Services, Supplement_Services, RList, SRP_Stopwatch
 | |
| Declare function    SRP_EditTable_Manager, Database_Services, Material_Services, Rds_Services, RGB, Supplement_Services
 | |
| 
 | |
| CRLF = \0D0A\ 
 | |
| 
 | |
| SubclassInfo    = Form_Services('FindSubclassControl')
 | |
| Subclass        = SubclassInfo<1>
 | |
| 
 | |
| // Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
 | |
| If Event EQ 'OLE' then
 | |
| 	Transfer Event to OIEvent
 | |
| 	Transfer Param1 to Event
 | |
| 	Transfer Param2 to Param1
 | |
| 	Transfer Param3 to Param2
 | |
| 	*    Transfer Param4 to Param3
 | |
| 	*    Transfer Param5 to Param4
 | |
| 	*    Transfer Param6 to Param5
 | |
| 	*    Transfer Param7 to Param6
 | |
| 	*    Transfer Param8 to Param7
 | |
| end
 | |
| 
 | |
| GoToEvent Event for CtrlEntID
 | |
| 
 | |
| Return EventFlow else EVENT_CONTINUE$
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Events
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Event WINDOW.CREATE(CreateParam)
 | |
| 	
 | |
| 	RDSColumns        = ''
 | |
| 	ThisWorkOrderNo   = CreateParam
 | |
| 	RDSColumns<0, 1>  = 'ABBREV_OR_CO_NAME'
 | |
| 	RDSColumns<0, 2>  = 'WO'
 | |
| 	RDSColumns<0, 3>  = 'WO_STEP'
 | |
| 	RDSColumns<0, 4>  = 'RUN_ORDER_NUM'
 | |
| 	RDSColumns<0, 5>  = 'SEQ'
 | |
| 	RDSColumns<0, 6>  = 'REACTOR'
 | |
| 	RDSColumns<0, 7>  = 'REACT_IDLE_TIME'
 | |
| 	RDSColumns<0, 8>  = 'HGCV_TEST'
 | |
| 	RDSColumns<0, 9>  = 'DATE_IN'
 | |
| 	RDSColumns<0, 10> = 'TIME_IN'
 | |
| 	RDSColumns<0, 11> = 'DATE_OUT'
 | |
| 	RDSColumns<0, 12> = 'TIME_OUT'
 | |
| 	RDSColumns<0, 13> = 'PART_NUM'
 | |
| 	RDSColumns<0, 14> = 'LOT_NUM'
 | |
| 	RDSColumns<0, 15> = 'SUPPL_INST'
 | |
| 	RDSList           = RDS_Services('GetRDSData', ThisWorkOrderNo, RDSColumns, True$, '')
 | |
| 	RDSRptCtrl        = @Window : '.OLE_RPT_RDS_LIST'
 | |
| 	
 | |
| 	// Turn off AutoPopulate for performance reasons
 | |
| 	Set_Property(@Window, RDSRptCtrl, 'OLE.AutoPopulate', False$)
 | |
| 	Set_Property(@Window:RDSRptCtrl, "OLE.PreviewMode", 1)
 | |
| 	GoSub Setup_OLE_Controls
 | |
| 	SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
 | |
| 	
 | |
| 	// Turn AutoPopulate back on
 | |
| 	Set_Property(@Window, RDSRptCtrl, 'OLE.AutoPopulate', True$)
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_CLOSE.CLICK()
 | |
| 	
 | |
| 	End_Dialog(@Window, '')
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_ADD.CLICK()
 | |
| 	
 | |
| 	OrigSelPos = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos')
 | |
| 	SelList    = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelList')
 | |
| 	If SelList NE '' then
 | |
| 		RDSList   = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.List')
 | |
| 		OrigList  = RDSList
 | |
| 		CurrSuppl = ''
 | |
| 		
 | |
| 		// Prompt user for supplement information 
 | |
| 		Response     = Dialog_Box('NDW_ADD_SUPPLEMENT', @WINDOW, SelList)
 | |
| 		Save         = Response<1>
 | |
| 		Instructions = Response<2>
 | |
| 		
 | |
| 		If Save EQ True$ then
 | |
| 			Stage = Field(Instructions, ':', 1)
 | |
| 			Text  = Field(Instructions, ':', 2)
 | |
| 			// Insert Instructions into selected rows' Supplement cell
 | |
| 			For each Row in SelList using @FM
 | |
| 				Locate Row in RDSList Using @FM Setting Pos then
 | |
| 					DupeCheck = False$
 | |
| 					CurrSupps = RDSList<Pos, 15>
 | |
| 					Swap CRLF with @FM in CurrSupps
 | |
| 					For each Supp in CurrSupps using @FM
 | |
| 						CurrSuppStage = Field(Supp, ': ', 1)
 | |
| 						DupeCheck = (CurrSuppStage EQ Stage)
 | |
| 					Until DupeCheck
 | |
| 					Next Supp
 | |
| 					
 | |
| 					If DupeCheck EQ False$ then
 | |
| 						If RDSList<Pos,15> = '' then
 | |
| 							RDSList<Pos,15> = Instructions
 | |
| 						end else
 | |
| 							RDSList<Pos,15> = RDSList<Pos,15> : CRLF : Instructions
 | |
| 						end
 | |
| 					end 
 | |
| 				end
 | |
| 			Next Row
 | |
| 			If RDSList NE OrigList then
 | |
| 				Gosub SaveSupps
 | |
| 				Gosub GetExistingSupps
 | |
| 			end
 | |
| 		end
 | |
| 		GoSub RefreshRowColors
 | |
| 	End
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', OrigSelPos)
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'FOCUS', True$)
 | |
| 	Gosub EnableButtons
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_REMOVE.CLICK()
 | |
| 	
 | |
| 	OrigSelPos = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos')
 | |
| 	SelList    = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelList')
 | |
| 	If SelList NE '' then
 | |
| 		RDSList     = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.List')
 | |
| 		
 | |
| 		// Prompt user for supplement information 
 | |
| 		Response     = Dialog_Box('NDW_REMOVE_SUPPLEMENTS', @WINDOW, SelList)
 | |
| 		
 | |
| 		Save         = Response
 | |
| 		Gosub GetExistingSupps
 | |
| 		
 | |
| 		GoSub RefreshRowColors
 | |
| 	End
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', OrigSelPos)
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'FOCUS', True$)
 | |
| 	Gosub EnableButtons
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_SELECT_ALL.CLICK()
 | |
| 	
 | |
| 	RDSList = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.List')
 | |
| 	NumRows = DCount(RDSList, @FM)
 | |
| 	SelPos  = ''
 | |
| 	
 | |
| 	For Index = 1 to NumRows
 | |
| 		If Index LT NumRows then
 | |
| 			SelPos := Index:@FM
 | |
| 		end else
 | |
| 			SelPos := Index
 | |
| 		end
 | |
| 	Next Index
 | |
| 	
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', SelPos)
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.Focus', True$)
 | |
| 	GoSub EnableButtons
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_CLEAR.CLICK()
 | |
| 	
 | |
| 	// Clear any selected rows
 | |
| 	SelPos = ''
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', SelPos)
 | |
| 	GoSub EnableButtons
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event OLE_SUBCLASS.OnComboClick(CtrlId, Sel, Value)
 | |
| 	
 | |
| 	Send_Event(CtrlId, 'LOSTFOCUS')
 | |
| 	SelPos = ''
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', SelPos)
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event OLE_RPT_RDS_LIST.OnSelChange(CtrlId, Sel, Value)
 | |
| 	
 | |
| 	GoSub EnableButtons
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Internal GoSubs
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Setup_OLE_Controls:
 | |
| 	
 | |
| 	Qualify     = ''
 | |
| 	Qualify<1>  = 1
 | |
| 	Qualify<4>  = 0
 | |
| 	
 | |
| 	RDSRptCtrl          = @Window : '.OLE_RPT_RDS_LIST'
 | |
| 	RDSPicCtrl          = @Window : '.OLE_PIC_RDS_LIST_DIV'
 | |
| 	
 | |
| 	Send_Message(RDSRptCtrl,  'QUALIFY_EVENT', 'OLE.OnSelChange', Qualify)
 | |
| 	
 | |
| 	ColumnList     = ''
 | |
| 	ColumnList<1>  = 'Customer' : @VM : 'TEXT' : @VM : 150 : @VM : @VM : @VM : @VM : @VM : @VM : 50 : @VM : 'Left' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<2>  = 'WO No' : @VM : 'NUMBER' : @VM : 50 : @VM : @VM : @VM : @VM : @VM : @VM : 50 : @VM : 'Center' : @VM : @VM : '#######' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<3>  = 'Step' : @VM : 'NUMBER' : @VM : 30 : @VM : @VM : @VM : @VM : @VM : @VM : 30 : @VM : 'Center' : @VM : @VM : '##': @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<4>  = 'Run' : @VM : 'NUMBER' : @VM : 30 : @VM : @VM : @VM : @VM : @VM : @VM : 30 : @VM : 'Center' : @VM : @VM : '###' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<5>  = 'RDS' : @VM : 'NUMBER' : @VM : 50 : @VM : @VM : @VM : @VM : @VM : @VM : 50 : @VM : 'Center' : @VM : @VM : '#######' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<6>  = 'Rx' : @VM : 'NUMBER' : @VM : 50 : @VM : @VM : @VM : @VM : @VM : @VM : 25 : @VM : 'Center' : @VM : @VM :'##': @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<7>  = 'Idle Hrs' : @VM : 'TIME' : @VM : 75 : @VM : @VM : @VM : @VM : @VM : @VM : 50 : @VM : 'Center' : @VM : @VM : 'hh:mm' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<8>  = 'HgCv' : @VM : 'BOOL' : @VM : 55 : @VM : @VM : @VM : @VM : @VM : @VM : 40 : @VM : 'Center' : @VM : @VM : 'Yes' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<9>  = 'Date In' : @VM : 'DATE' : @VM : 60 : @VM : @VM : @VM : @VM : @VM : @VM : 60 : @VM : 'Center' : @VM : @VM : 'MM/DD/YY' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<10> = 'Time In' : @VM : 'TIME' : @VM : 60 : @VM : @VM : @VM : @VM : @VM : @VM : 60 : @VM : 'Center' : @VM : @VM : 'hh:mmAA' : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<11> = 'Date Out' : @VM : 'DATE' : @VM : 60 : @VM : @VM : @VM : @VM : @VM : @VM : 60 : @VM : 'Center' : @VM : @VM : 'MM/DD/YY': @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<12> = 'Time Out' : @VM : 'TIME' : @VM : 60 : @VM : @VM : @VM : @VM : @VM : @VM : 60 : @VM : 'Center' : @VM : @VM : 'hh:mmAA': @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<13> = 'Part No' : @VM : 'TEXT' : @VM : 50 : @VM : @VM : @VM : @VM : @VM : @VM : 50 : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<14> = 'Lot No' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : 75 : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
| 	ColumnList<15> = 'Supplement' : @VM : 'P' : @VM : 300 : @VM : @VM : @VM : @VM : @VM : @VM : 150 : @VM : 'Left' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
| 	
 | |
| 	Set_Property(RDSRptCtrl, 'OLE.ColumnList', ColumnList)
 | |
| 	Set_Property(RDSRptCtrl, 'OLE.MultiSelect', 2)  ; // 2 = Multiselect Toggle Mode
 | |
| 	
 | |
| 	// Get the design time form size. This will be adjusted based on the number of RDS records.
 | |
| 	FormSize            = Get_Property(@Window, 'SIZE')
 | |
| 	RDSRptCtrlSize      = Get_Property(RDSRptCtrl, 'SIZE')
 | |
| 	NumRDS              = DCount(RDSList, @FM)
 | |
| 	
 | |
| 	// Adjust the form and ReportTable control size based on the number of RDS records in the work order.
 | |
| 	AdditionalRowsAdj   = 0
 | |
| 	AdditionalRowsAdj += (NumRDS - 1) * 20
 | |
| 	
 | |
| 	// Ensure window and controls are sized within client machine's max resolution.
 | |
| 	ProposedNewHeight = FormSize<4> + AdditionalRowsAdj
 | |
| 	SystemWindowSize  = Get_Property('SYSTEM', 'SIZE')
 | |
| 	MaxClientHeight   = SystemWindowSize<4>
 | |
| 	If ProposedNewHeight > MaxClientHeight then
 | |
| 		FormSize<4> = Oconv(MaxClientHeight * '0.9', 'MD0')
 | |
| 	end else
 | |
| 		FormSize<4> = FormSize<4> + AdditionalRowsAdj
 | |
| 	end
 | |
| 	MaxClientWidth    = SystemWindowSize<3>
 | |
| 	If FormSize<3> > MaxClientWidth then
 | |
| 		FormSize<3> = Oconv(MaxClientWidth * '0.9', 'MD0')
 | |
| 	end
 | |
| 	Set_Property(@Window, '@ORIGSIZE', FormSize)      
 | |
| 	// Pull then save original list after formatting for savewarn purposes
 | |
| 	Gosub GetExistingSupps
 | |
| 	Set_Property(RDSRptCtrl, 'OLE.List', RDSList)
 | |
| 	RDSList  = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.List')
 | |
| 	Set_Property(@Window, '@OrigList', RDSList)
 | |
| 	
 | |
| 	GoSub RefreshRowColors
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| GetExistingSupps:
 | |
| 	
 | |
| 	NumRDS        = DCount(RDSList, @FM)
 | |
| 	SuppsWithLots = Supplement_Services('GetLotsWithSupplements', 'RDS')
 | |
| 	For I = 1 to NumRDS
 | |
| 		RDSSupps  = ''
 | |
| 		ThisRDS   = RDSList<I, 5>
 | |
| 		If Count(SuppsWithLots, ThisRDS) NE 0 then
 | |
| 			SuppCheck = Supplement_Services('GetSupplementsForLot', 'RDS', ThisRDS)
 | |
| 			If SuppCheck NE '' AND SuppCheck NE False$ then
 | |
| 				SuppCount = DCount(SuppCheck, @FM)
 | |
| 				For J = 1 to SuppCount
 | |
| 					CurrSuppStage = Xlate('SUPPLEMENTS', SuppCheck<J>, SUPPLEMENTS_STAGE$, 'X', '')
 | |
| 					CurrSuppText  = Xlate('SUPPLEMENTS', SuppCheck<J>, SUPPLEMENTS_SUPPL_TEXT$, 'X', '')
 | |
| 					If RDSSupps EQ '' then
 | |
| 						RDSSupps = CurrSuppStage: ': ' : CurrSuppText
 | |
| 					End else
 | |
| 						RDSSupps := CRLF : CurrSuppStage: ': ' : CurrSuppText
 | |
| 					end
 | |
| 				Next J
 | |
| 			end
 | |
| 			If RDSSupps NE '' then RDSList<I,15> = RDSSupps
 | |
| 		end else
 | |
| 			RDSList<I,15> = ''
 | |
| 		end
 | |
| 	Next I
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| RefreshRowColors:
 | |
| 	
 | |
| 	RDSRptCtrl  = @Window : '.OLE_RPT_RDS_LIST'
 | |
| 	NumRDS      = DCount(RDSList, @FM)
 | |
| 	
 | |
| 	// Fill report table with RDS data
 | |
| 	Set_Property(RDSRptCtrl, 'OLE.List', RDSList)
 | |
| 	
 | |
| 	// Color every other cell to increase row distinguishability
 | |
| 	Colors = ''
 | |
| 	If NumRDS GT 1 then
 | |
| 		For RowNo = 1 To NumRDS
 | |
| 			Begin Case
 | |
| 				Case RDSList<RowNo, 15> NE ''
 | |
| 					Colors<RowNo> = RGB(255, 255, 255)
 | |
| 					
 | |
| 				Case Mod(RowNo, 2) EQ 1
 | |
| 					Colors<RowNo> = RGB(231, 243, 254)
 | |
| 					
 | |
| 				Case Mod(RowNo, 2) EQ 0
 | |
| 					Colors<RowNo> = RGB(196, 222, 247)
 | |
| 			End Case
 | |
| 		Next RowNo
 | |
| 		Set_Property(RDSRptCtrl, 'OLE.RecordColors', Colors)
 | |
| 	end
 | |
| 	
 | |
| 	// Clear any selected rows
 | |
| 	SelPos = ''
 | |
| 	Set_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.SelPos', SelPos)
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| SaveSupps:
 | |
| 
 | |
| 	Instructions  = ''
 | |
| 	RDSNotifyList = ''
 | |
| 	ChangeCount   = Dcount(OrigSelPos, @FM)
 | |
| 	For I = 1 to ChangeCount
 | |
| 		CurrRowNum = OrigSelPos<I>
 | |
| 		CurrRow    = RDSList<CurrRowNum>
 | |
| 		LotSupps   = CurrRow<1,15>
 | |
| 		Swap CRLF with @FM in LotSupps
 | |
| 		SuppCount  = Dcount(LotSupps, @FM)
 | |
| 		For J = 1 to SuppCount
 | |
| 			ThisLot           = CurrRow<1,5>
 | |
| 			RDSNotifyList<-1> = ThisLot
 | |
| 			ThisStage         = Field(LotSupps<J>, ':', 1)
 | |
| 			ThisSupp          = Field(LotSupps<J>, ': ', 2)
 | |
| 			ThisSupp          = TrimF(ThisSupp)
 | |
| 			ret               = Supplement_Services('CreateSupplement', 'RDS', ThisLot, ThisStage, ThisSupp, @User4)
 | |
| 			Instructions      = ThisSupp
 | |
| 		Next J
 | |
| 	Next I
 | |
| 	
 | |
| 	If RDSNotifyList NE '' then Supplement_Services('SendNotifications', RDSNotifyList, 'Created', Instructions, @User4)	
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| EnableButtons:
 | |
| 	
 | |
| 	RDSList = Get_Property(@Window : '.OLE_RPT_RDS_LIST', 'OLE.List')
 | |
| 	SelPos  = Get_Property(@Window:".OLE_RPT_RDS_LIST", "OLE.SelPos")
 | |
| 	If SelPos NE '' then
 | |
| 		Set_Property(@Window : '.PUB_ADD', 'ENABLED', True$)
 | |
| 		LastSel = SelPos<1>
 | |
| 		If RDSList<LastSel, 15> NE '' then
 | |
| 			Set_Property(@Window : '.PUB_REMOVE', 'ENABLED', True$)
 | |
| 		end else
 | |
| 			Set_Property(@Window : '.PUB_REMOVE', 'ENABLED', False$)
 | |
| 		end
 | |
| 	End else
 | |
| 		Set_Property(@Window : '.PUB_ADD', 'ENABLED', False$)
 | |
| 		Set_Property(@Window : '.PUB_REMOVE', 'ENABLED', False$)
 | |
| 	end
 | |
| 	
 | |
| return
 | |
| 
 |