Custom macro to do AR Receipt Entry: can I bypass ARPOOP and insert directly to ARTCR?

SOLVED

Hi all,

I am making an AR Receipt Entry import to import the receipt in bulk from an excel file. I follow the recorded macro to create it. And I see that the ARPOOP (in recorded macro is using ARRECMAC1detail4) set the APPLY value to "Y" on line 124.

Sub MainSub()
'
' Sage 300 Macro file: D:\Sage 300 Folder\PCI Trading\AR Receipt Entry 22092021.AVB
' Recorded at: Wed Sep 22 14:27:40 2021
'

On Error GoTo ACCPACErrorHandler

' TODO: To increase efficiency, comment out any unused DB links.
Dim mDBLinkCmpRW As AccpacCOMAPI.AccpacDBLink
Set mDBLinkCmpRW = OpenDBLink(DBLINK_COMPANY, DBLINK_FLG_READWRITE)

Dim mDBLinkSysRW As AccpacCOMAPI.AccpacDBLink
Set mDBLinkSysRW = OpenDBLink(DBLINK_SYSTEM, DBLINK_FLG_READWRITE)

Dim temp As Boolean
Dim ARRECMAC1batch As AccpacCOMAPI.AccpacView
Dim ARRECMAC1batchFields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0041", ARRECMAC1batch
Set ARRECMAC1batchFields = ARRECMAC1batch.Fields

Dim ARRECMAC1header As AccpacCOMAPI.AccpacView
Dim ARRECMAC1headerFields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0042", ARRECMAC1header
Set ARRECMAC1headerFields = ARRECMAC1header.Fields

Dim ARRECMAC1detail1 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail1Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0044", ARRECMAC1detail1
Set ARRECMAC1detail1Fields = ARRECMAC1detail1.Fields

Dim ARRECMAC1detail2 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail2Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0045", ARRECMAC1detail2
Set ARRECMAC1detail2Fields = ARRECMAC1detail2.Fields

Dim ARRECMAC1detail3 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail3Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0043", ARRECMAC1detail3
Set ARRECMAC1detail3Fields = ARRECMAC1detail3.Fields

Dim ARRECMAC1detail4 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail4Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0061", ARRECMAC1detail4
Set ARRECMAC1detail4Fields = ARRECMAC1detail4.Fields

Dim ARRECMAC1detail5 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail5Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0406", ARRECMAC1detail5
Set ARRECMAC1detail5Fields = ARRECMAC1detail5.Fields

Dim ARRECMAC1detail6 As AccpacCOMAPI.AccpacView
Dim ARRECMAC1detail6Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0170", ARRECMAC1detail6
Set ARRECMAC1detail6Fields = ARRECMAC1detail6.Fields

ARRECMAC1batch.Compose Array(ARRECMAC1header)

ARRECMAC1header.Compose Array(ARRECMAC1batch, ARRECMAC1detail3, ARRECMAC1detail1, ARRECMAC1detail5, ARRECMAC1detail6)

ARRECMAC1detail1.Compose Array(ARRECMAC1header, ARRECMAC1detail2, ARRECMAC1detail4)

ARRECMAC1detail2.Compose Array(ARRECMAC1detail1)

ARRECMAC1detail3.Compose Array(ARRECMAC1header)

ARRECMAC1detail4.Compose Array(ARRECMAC1batch, ARRECMAC1header, ARRECMAC1detail3, ARRECMAC1detail1, ARRECMAC1detail2)

ARRECMAC1detail5.Compose Array(ARRECMAC1header)

ARRECMAC1detail6.Compose Array(ARRECMAC1header)


Dim ARPAYMPOST2 As AccpacCOMAPI.AccpacView
Dim ARPAYMPOST2Fields As AccpacCOMAPI.AccpacViewFields
mDBLinkCmpRW.OpenView "AR0049", ARPAYMPOST2
Set ARPAYMPOST2Fields = ARPAYMPOST2.Fields


ARRECMAC1batch.RecordClear

ARRECMAC1batchFields("CODEPYMTYP").PutWithoutVerification ("CA")      ' Batch Type

ARRECMAC1headerFields("CODEPYMTYP").PutWithoutVerification ("CA")     ' Batch Type
ARRECMAC1detail3Fields("CODEPAYM").PutWithoutVerification ("CA")      ' Batch Type
ARRECMAC1detail1Fields("CODEPAYM").PutWithoutVerification ("CA")      ' Batch Type
ARRECMAC1detail2Fields("CODEPAYM").PutWithoutVerification ("CA")      ' Batch Type
ARRECMAC1detail4Fields("PAYMTYPE").PutWithoutVerification ("CA")      ' Batch Type
ARRECMAC1detail4.Cancel
ARRECMAC1batch.Browse "((CODEPYMTYP = ""CA"") AND ((BATCHSTAT = 1) OR (BATCHSTAT = 7)))", 1

ARRECMAC1batchFields("CODEPYMTYP").PutWithoutVerification ("CA")      ' Batch Type
ARRECMAC1batchFields("CNTBTCH").PutWithoutVerification ("0")          ' Batch Number

ARRECMAC1batch.RecordCreate 1

ARRECMAC1batchFields("PROCESSCMD").PutWithoutVerification ("2")       ' Process Command

ARRECMAC1batch.Process
ARRECMAC1detail4.Cancel
temp = ARRECMAC1header.Exists
ARRECMAC1header.RecordCreate 2
ARRECMAC1detail4.Cancel
temp = ARRECMAC1header.Exists

ARRECMAC1headerFields("IDCUST").Value = "AB000002"                    ' Customer Number

ARRECMAC1detail1.Cancel
ARRECMAC1header.Process
ARRECMAC1detail4.Cancel

ARRECMAC1detail4Fields("PAYMTYPE").Value = "CA"                       ' Batch Type
ARRECMAC1detail4Fields("CNTBTCH").Value = "110"                       ' Batch Number
ARRECMAC1detail4Fields("CNTITEM").Value = "0"                         ' Entry Number
ARRECMAC1detail4Fields("IDCUST").Value = "AB000002"                   ' ID Customer

ARRECMAC1detail4.Process

ARRECMAC1detail4Fields("CNTITEM").PutWithoutVerification ("0")        ' Entry Number
ARRECMAC1detail4Fields("CNTKEY").PutWithoutVerification ("-4")        ' Count key

ARRECMAC1detail4.Read

ARRECMAC1detail4Fields("APPLY").Value = "Y"                           ' Apply

temp = ARRECMAC1detail4.Exists
temp = ARRECMAC1detail4.Exists
ARRECMAC1detail4.Update

ARRECMAC1detail4Fields("CNTITEM").PutWithoutVerification ("0")        ' Entry Number
ARRECMAC1detail4Fields("CNTKEY").PutWithoutVerification ("-4")        ' Count key

ARRECMAC1detail4.Read
ARRECMAC1header.Insert
ARRECMAC1detail4.Cancel
temp = ARRECMAC1header.Exists
ARRECMAC1detail4Fields("PAYMTYPE").Value = "CA"                       ' Batch Type

ARRECMAC1detail4Fields("CNTBTCH").Value = "110"                       ' Batch Number
ARRECMAC1detail4Fields("CNTITEM").Value = "1"                         ' Entry Number
ARRECMAC1detail4Fields("IDCUST").Value = "AB000002"                   ' ID Customer

ARRECMAC1detail4.Process
ARRECMAC1batch.Read
ARRECMAC1headerFields("CNTITEM").PutWithoutVerification ("0")         ' Entry Number
ARRECMAC1header.RecordCreate 2
ARRECMAC1detail4.Cancel
temp = ARRECMAC1header.Exists



Exit Sub

ACCPACErrorHandler:
  Dim lCount As Long
  Dim lIndex As Long

  If Errors Is Nothing Then
       MsgBox Err.Description
  Else
      lCount = Errors.Count

      If lCount = 0 Then
          MsgBox Err.Description
      Else
          For lIndex = 0 To lCount - 1
              MsgBox Errors.Item(lIndex)
          Next
          Errors.Clear
      End If
      Resume Next

  End If

End Sub

But in my macro code, whenever I set APPLY value at line 114, it have error 

Dim date_remitten As Date
Dim date_bus As Date
Dim batch_no As String
Dim customer_code As String
Dim document_date As Date
Dim payment_code As String

Sub InsertARReceipt(customers As Object, bank As String)
    'On Error GoTo ACCPACErrorHandler
    UserForm1.errorNo = 0
    ' TODO: To increase efficiency, comment out any unused DB links.
    Dim mDBLinkCmpRW As AccpacCOMAPI.AccpacDBLink
    Set mDBLinkCmpRW = OpenDBLink(DBLINK_COMPANY, DBLINK_FLG_READWRITE)
    
    Dim mDBLinkSysRW As AccpacCOMAPI.AccpacDBLink
    Set mDBLinkSysRW = OpenDBLink(DBLINK_SYSTEM, DBLINK_FLG_READWRITE)
    
    Dim temp As Boolean
    Dim ARRECMAC1batch As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1batchFields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0041", ARRECMAC1batch
    Set ARRECMAC1batchFields = ARRECMAC1batch.Fields
    
    Dim ARRECMAC1header As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1headerFields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0042", ARRECMAC1header
    Set ARRECMAC1headerFields = ARRECMAC1header.Fields
    
    Dim ARRECMAC1detail1 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail1Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0044", ARRECMAC1detail1
    Set ARRECMAC1detail1Fields = ARRECMAC1detail1.Fields
    
    Dim ARRECMAC1detail2 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail2Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0045", ARRECMAC1detail2
    Set ARRECMAC1detail2Fields = ARRECMAC1detail2.Fields
    
    Dim ARRECMAC1detail3 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail3Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0043", ARRECMAC1detail3
    Set ARRECMAC1detail3Fields = ARRECMAC1detail3.Fields
    
    Dim ARRECMAC1detail4 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail4Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0061", ARRECMAC1detail4
    Set ARRECMAC1detail4Fields = ARRECMAC1detail4.Fields
    
    Dim ARRECMAC1detail5 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail5Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0406", ARRECMAC1detail5
    Set ARRECMAC1detail5Fields = ARRECMAC1detail5.Fields
    
    Dim ARRECMAC1detail6 As AccpacCOMAPI.AccpacView
    Dim ARRECMAC1detail6Fields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "AR0170", ARRECMAC1detail6
    Set ARRECMAC1detail6Fields = ARRECMAC1detail6.Fields
    
    ARRECMAC1batch.Compose Array(ARRECMAC1header)
    
    ARRECMAC1header.Compose Array(ARRECMAC1batch, ARRECMAC1detail3, ARRECMAC1detail1, ARRECMAC1detail5, ARRECMAC1detail6)
    
    ARRECMAC1detail1.Compose Array(ARRECMAC1header, ARRECMAC1detail2, ARRECMAC1detail4)
    
    ARRECMAC1detail2.Compose Array(ARRECMAC1detail1)
    
    ARRECMAC1detail3.Compose Array(ARRECMAC1header)
    
    ARRECMAC1detail4.Compose Array(ARRECMAC1batch, ARRECMAC1header, ARRECMAC1detail3, ARRECMAC1detail1, ARRECMAC1detail2)
    
    ARRECMAC1detail5.Compose Array(ARRECMAC1header)
    
    ARRECMAC1detail6.Compose Array(ARRECMAC1header)
    
    Dim i As Integer
    Dim j As Integer
    i = 0
    Dim latestDate As Date
    Dim theDate As Date
    Dim h As Integer
        
    ARRECMAC1batchFields("CODEPYMTYP").PutWithoutVerification ("CA")      ' Batch Type
    ARRECMAC1batchFields("CNTBTCH").PutWithoutVerification ("0")          ' Batch Number

    ARRECMAC1batch.RecordCreate 1
    ARRECMAC1batchFields("IDBANK").Value = bank
    ARRECMAC1batchFields("PROCESSCMD").PutWithoutVerification ("2")       ' Process Command
    ARRECMAC1batch.Process
    
    i = 0
    Dim totalAmount As Double
    For i = 0 To customers.Count - 1
        ARRECMAC1header.RecordCreate 2
        ARRECMAC1headerFields("CODEPYMTYP").PutWithoutVerification ("CA")
        ARRECMAC1headerFields("IDCUST").Value = customers.Item(i).customerCode  'customers.Item(i).customerCode
        
        For h = 0 To customers.Item(i).documents.Count - 1
            theDate = CDate(customers.Item(i).documents(h).documentDate)
            If theDate > latestDate Then
                latestDate = theDate
            End If
        Next h
        
        ARRECMAC1headerFields("DATERMIT").Value = latestDate  'Payment Date
        date_remitten = latestDate
        ARRECMAC1headerFields("DATEBUS").Value = latestDate
        date_bus = latestDate
        
        ARRECMAC1headerFields("CODEPAYM").Value = "CASH"                      ' Payment Code
        ARRECMAC1headerFields("PROCESSCMD").PutWithoutVerification ("0")      ' Process Command Code
        ARRECMAC1header.Process
        
        ARRECMAC1detail4.Read
        ARRECMAC1detail4Fields("APPLY").Value = "Y"                                         ' Apply
        ARRECMAC1detail4Fields("PAYMTYPE").Value = "CA"                                     ' Batch Type
        ARRECMAC1detail4Fields("CNTBTCH").Value = ARRECMAC1headerFields("CNTBTCH").Value    ' Batch Number
        batch_no = ARRECMAC1headerFields("CNTBTCH").Value
        ARRECMAC1detail4Fields("CNTITEM").Value = "0"                                       ' Entry Number
        ARRECMAC1detail4Fields("IDCUST").Value = customers.Item(i).customerCode  'customers.Item(i).customerCode             ' ID Customer
        customer_code = customers.Item(i).customerCode
        
        ARRECMAC1detail4Fields("PROTYPE").PutWithoutVerification ("1")                      ' Process Type

        ARRECMAC1detail4.Process
        
        totalAmount = 0
        
        
        While ARRECMAC1detail4.Fetch
            j = 0
            For j = 0 To customers.Item(i).documents.Count - 1
                If customers.Item(i).documents(j).paymentType <> "Credit" And customers.Item(i).documents(j).documentNumber = ARRECMAC1detail4Fields("IDINVC").Value Then
                    ARRECMAC1detail4Fields("PAYMTYPE").Value = "CA"
                    ARRECMAC1detail4Fields("CNTBTCH").Value = ARRECMAC1headerFields("CNTBTCH").Value
                    ARRECMAC1detail4Fields("AMTRMIT").Value = customers.Item(i).documents(j).cashAmount
                    ARRECMAC1detail4Fields("PAYMAMT").Value = customers.Item(i).documents(j).cashAmount
                    ARRECMAC1detail4.Update
                    totalAmount = totalAmount + customers.Item(i).documents(j).cashAmount
                    payment_code = customers.Item(i).documents(j).paymentType
                End If
            Next j
        Wend
        
        ARRECMAC1headerFields("AMTRMIT").Value = totalAmount                   ' Bank Receipt Amount
        
        ARRECMAC1batchFields("DATEBTCH").PutWithoutVerification (latestDate)   ' Batch Date
        ARRECMAC1batchFields("DEPDATE").PutWithoutVerification (latestDate)   ' Deposit Date
        ARRECMAC1batch.Update
        
        ARRECMAC1header.Insert
        
        ARRECMAC1detail4.RecordClear
        ARRECMAC1header.RecordClear
        
    Next i
    MsgBox "AR Receipt Import completed."
    Exit Sub
    
ACCPACErrorHandler:
      Dim lCount As Long
      Dim lIndex As Long
    
      If Errors Is Nothing Then
           Logger.LogDetails date_remitten & "," & date_bus & "," & batch_no & "," & customer_code & "," & Format(Now, "YYYY-MM-DD") & "," & "N:" & Replace(Err.Description, vbLf, ""), document_date, payment_code
      Else
          lCount = Errors.Count
    
          If lCount = 0 Then
              Logger.LogDetails date_remitten & "," & date_bus & "," & batch_no & "," & customer_code & "," & Format(Now, "YYYY-MM-DD") & "," & "NOERROR:" & Replace(Err.Description, vbLf, ""), document_date, payment_code
          Else
              For lIndex = 0 To lCount - 1
                  Logger.LogDetails date_remitten & "," & date_bus & "," & batch_no & "," & customer_code & "," & Format(Now, "YYYY-MM-DD") & "," & "Error:" & Replace(Errors.Item(lIndex), vbLf, ""), document_date, payment_code
                  UserForm1.errorNo = UserForm1.errorNo + 1
                  
                  
              Next
              Errors.Clear
          End If
          Resume Next
    
      End If
End Sub

Error: Method 'Value' of object 'IAccpacViewField' failed

Looking at the table ARPOOP, the table is empty. So my question is, should I skip the insert/update for ARPOOP and directly insert to ARTCR instead?