Compile Function Copy_Prod_Spec_To_Rev_Hist() #pragma precomp SRP_PreCompiler $Insert LOGICAL $Insert PROD_SPEC_EQUATES Declare function Database_Services, Error_Services Declare subroutine Database_Services, Error_Services, Errmsg TrimChars = '. 1 2 3 4 5 6 7 8 9 0' NextPSNo = Database_Services('ReadDataRow', 'DICT.PROD_SPEC', '%SK%') LastPSNo = NextPSNo - 1 For PSNo = 1 to LastPSNo If RowExists('PROD_SPEC', PSNo, 0) then PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo) If Error_Services("NoError") then PSRevHistRec = '' Descriptions = PSRec Usernames = PSRec Dates = PSRec If ( Descriptions NE '' ) And ( Usernames NE '' ) And ( Dates NE '' ) then For each Line in Descriptions using @TM setting tPos MatchFound = '' LineLength = Len(Line) Date = Line[1, 'F '] DescStart = Col2() + 1 DescEnd = LineLength - Col2() Initials = Line[-1, 'B '] InitialsLen = Len(Initials) DescEnd = DescEnd - InitialsLen Desc = Line[DescStart, DescEnd] InternalDate = IConv(Date, 'DH') For each Character in TrimChars using ' ' Swap Character with '' in Initials Next Character Swap ' ' with '' in Initials MatchFound = False$ Locate InternalDate in Dates using @VM setting vPos then Loop ModDate = Dates<1, vPos> If ModDate NE InternalDate then // No username match found. Manually search for username. Username = '' For each Username in Usernames using @VM setting uPos UserInitials = Username[1,1] UserLastInitialPos = Index(Username, ' ', 1) + 1 UserInitials := Username[UserLastInitialPos, 1] If Initials EQ UserInitials then MatchFound = True$ PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, Username) PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, InternalDate) PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '') PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc) end Until MatchFound EQ True$ Next Username end While ModDate EQ InternalDate ModName = Usernames<1, vPos> ModInitials = ModName[1, 1] LastInitialPos = Index(ModName, ' ', 1) + 1 ModInitials := ModName[LastInitialPos, 1] If ( ModInitials EQ Initials ) then MatchFound = True$ PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, ModName) PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, ModDate) PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '') PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc) end Until MatchFound EQ True$ vPos = vPos + 1 Repeat end else // Date match not found. Use date supplied by user in description. If InternalDate NE '' then Username = '' For each Username in Usernames using @VM setting uPos UserInitials = Username[1,1] UserLastInitialPos = Index(Username, ' ', 1) + 1 UserInitials := Username[UserLastInitialPos, 1] If Initials EQ UserInitials then MatchFound = True$ PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, Username) PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, InternalDate) PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '') PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc) end Until MatchFound EQ True$ Next Username end end Next Line end Database_Services('WriteDataRow', 'PROD_SPEC_REV_HIST', PSNo, PSRevHistRec) If Error_Services('NoError') then Null end else ErrMsg('Failed to write PROD_SPEC_REV_HIST record: ' : PSNo) end end else ErrMsg('Failed to read PROD_SPEC record: ' : PSNo) end end Next PSNo Return