'This is just an example program to show how to generate a UN/EDIFACT INVOIC in VB6 using Framework EDI

Option Explicit
Private oEdiDoc As Fredi.ediDocument
Private oSchemas As Fredi.ediSchemas
Private oInterchange As Fredi.ediInterchange
Private oTransactionset As Fredi.ediTransactionSet
Private oSegment As Fredi.ediDataSegment
Private sSefFile As String
Private sEdiFile As String

Private Sub cmdGenerate_Click()
    Dim i As Integer
    Dim nCount As Integer
    Dim sPath As String
    Dim sEntity As String
    Dim nIndex As Integer
    Dim sSefFile As String
    Dim sEdiFile As String
    Dim iItemCount As Integer
    
    cmdGenerate.Enabled = False
    Me.MousePointer = vbHourglass
    sPath = App.Path & "\"
    
    sEdiFile = "INVOIC.TXT"
    sSefFile = "INVOIC_S93A.SEF"
    
    'instantiate edi document object
    Set oEdiDoc = New Fredi.ediDocument
    
    'ForwardWrite setting does not keep the created segments in memory, thus saving RAM and improving performance
    oEdiDoc.CursorType = Cursor_ForwardWrite
    
    'disable the internal standard reference library to make sure component uses the SEF provided
    Set oSchemas = oEdiDoc.GetSchemas
    oSchemas.EnableStandardReference = False
    
    'Load SEF file
    oEdiDoc.LoadSchema sPath & sSefFile, Schema_Standard_Exchange_Format
    
    'Set terminators
    oEdiDoc.SegmentTerminator = "'"
    oEdiDoc.ElementTerminator = "+"
    oEdiDoc.CompositeTerminator = ":"
    oEdiDoc.ReleaseIndicator = "?"
    
    'Create UNA segment
    oEdiDoc.Option(OptDocument_ServiceSegment) = 1
    
    'create the interchange UNB segment
    Set oInterchange = oEdiDoc.CreateInterchange("UN", "S93A")
    Set oSegment = oInterchange.GetDataSegmentHeader
    oSegment.DataElementValue(1, 1) = "UNOB"    'composite element 1, subelement 1
    oSegment.DataElementValue(1, 2) = "1"       'composite element 1, subelement 2
    oSegment.DataElementValue(2, 1) = txtPartnerID.Text     'composite element 2, subelement 1
    oSegment.DataElementValue(2, 2) = "ZZZ"                  'composite element 2, subelement 2
    oSegment.DataElementValue(3, 1) = "0038977332"          'composite element 3, subelement 1
    oSegment.DataElementValue(3, 2) = "1"                  'composite element 3, subelement 2
    oSegment.DataElementValue(3, 3) = txtSiteCode.Text      'composite element 3, subelement 3
    oSegment.DataElementValue(4, 1) = "020331"
    oSegment.DataElementValue(4, 1) = "1230"
    oSegment.DataElementValue(5) = "00000000000001"         'date element 5
    oSegment.DataElementValue(7) = "INVOIC"                 'data element 7
    oSegment.DataElementValue(11) = "1"                     'data element 11
    
    'create the message UNH segment
    Set oTransactionset = oInterchange.CreateTransactionSet("INVOIC")
    Set oSegment = oTransactionset.GetDataSegmentHeader
    oSegment.DataElementValue(1) = "0001"                   'data element 1
    oSegment.DataElementValue(2, 1) = "INVOIC"              'composite element 2, subelement 1
    oSegment.DataElementValue(2, 2) = "S"                   'composite element 2, subelement 2
    oSegment.DataElementValue(2, 3) = "93A"                 'composite element 2, subelement 3
    oSegment.DataElementValue(2, 4) = "UN"                  'composite element 2, subelement 4
    
    'create the BGM segment
    Set oSegment = oTransactionset.CreateDataSegment("BGM")
    oSegment.DataElementValue(1, 1) = "380"                 'composite element 1, subelement 1
    oSegment.DataElementValue(2) = txtInvoiceNo.Text        'data element 2
    oSegment.DataElementValue(3) = "9"                      'data element 3
    
    'create the DTM segment
    Set oSegment = oTransactionset.CreateDataSegment("DTM")
    oSegment.DataElementValue(1, 1) = "137"
    oSegment.DataElementValue(1, 2) = Format(txtInvDate.Text, "YYYYMMDD")
    oSegment.DataElementValue(1, 3) = "102"
    
    'create the RFF segment in the RFF group
    Set oSegment = oTransactionset.CreateDataSegment("RFF\RFF")
    oSegment.DataElementValue(1, 1) = "ON"
    oSegment.DataElementValue(1, 2) = txtOrderNo.Text
    
    'create the NAD segment in the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD\NAD")
    oSegment.DataElementValue(1) = "RE"
    oSegment.DataElementValue(2, 3) = "92"
    oSegment.DataElementValue(4, 1) = txtManufacturerName.Text
    
    'create the RFF segment in the RFF group nested in the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD\RFF\RFF")
    oSegment.DataElementValue(1, 1) = "VA"
    oSegment.DataElementValue(1, 2) = txtManufRef.Text
        
    'create the CTA segment in the CTA group nested in the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD\CTA\CTA")
    oSegment.DataElementValue(1) = "AR"
    oSegment.DataElementValue(2, 2) = txtARContact.Text
    
    'create the COM segment in the CTA group nested in the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD\CTA\COM")
    oSegment.DataElementValue(1, 1) = txtARTelephone.Text
    oSegment.DataElementValue(1, 2) = "TE"

    'create the NAD segment in the second instance of the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD(2)\NAD")
    oSegment.DataElementValue(1) = "ST"
    oSegment.DataElementValue(2, 3) = "92"
    oSegment.DataElementValue(4, 1) = txtShipToName.Text

    'create the NAD segment in the third instance of the NAD group
    Set oSegment = oTransactionset.CreateDataSegment("NAD(3)\NAD")
    oSegment.DataElementValue(1) = "BY"
    oSegment.DataElementValue(2, 3) = "92"
    oSegment.DataElementValue(4, 1) = txtBuyerName.Text

    'create the CUX segment in the CUX group
    Set oSegment = oTransactionset.CreateDataSegment("CUX\CUX")
    oSegment.DataElementValue(1, 1) = "2"
    oSegment.DataElementValue(1, 2) = "USD"
    oSegment.DataElementValue(1, 3) = "4"

    'create the ALC segment in the ALC group
    Set oSegment = oTransactionset.CreateDataSegment("ALC\ALC")
    oSegment.DataElementValue(1) = "C"
    oSegment.DataElementValue(3) = "6"
    oSegment.DataElementValue(5, 1) = "ABG"

    'create the PCD segment in the PCD group nested in the ALC group
    Set oSegment = oTransactionset.CreateDataSegment("ALC\PCD\PCD")
    oSegment.DataElementValue(1, 1) = "1"
    oSegment.DataElementValue(1, 2) = txtToolingPerc.Text

    'create the MOA segment in the MOA group nested in the ALC group
    Set oSegment = oTransactionset.CreateDataSegment("ALC\MOA\MOA")
    oSegment.DataElementValue(1, 1) = "204"
    oSegment.DataElementValue(1, 2) = txtToolingCharge.Text

    'create the LIN segment in the LIN group
    Set oSegment = oTransactionset.CreateDataSegment("LIN\LIN")
    oSegment.DataElementValue(1) = txtLineNo.Text
    oSegment.DataElementValue(3, 1) = txtBuyerPartNo.Text
    oSegment.DataElementValue(3, 2) = "SN"

    'create the LIN segment in the QTY group
    Set oSegment = oTransactionset.CreateDataSegment("LIN\QTY")
    oSegment.DataElementValue(1, 1) = "47"
    oSegment.DataElementValue(1, 2) = txtQty.Text
    oSegment.DataElementValue(1, 3) = txtMeasure.Text

    'create the PRI segment in the PRI group nested in the LIN group
    Set oSegment = oTransactionset.CreateDataSegment("LIN\PRI\PRI")
    oSegment.DataElementValue(1, 1) = "AAA"
    oSegment.DataElementValue(1, 2) = txtItemPrice.Text
    oSegment.DataElementValue(1, 3) = "CT"

    'create the UNS segment
    Set oSegment = oTransactionset.CreateDataSegment("UNS")
    oSegment.DataElementValue(1) = "S"

    'create the MOA segment in the MOA group
    Set oSegment = oTransactionset.CreateDataSegment("MOA\MOA")
    oSegment.DataElementValue(1, 1) = "77"
    oSegment.DataElementValue(1, 2) = txtTotalAmnt.Text
    oSegment.DataElementValue(1, 3) = "USD"

    'create the TAX segment in the TAX group located in area (table) 3 of the message
    Set oSegment = oTransactionset.CreateDataSegment("TAX#3\TAX")
    oSegment.DataElementValue(1) = "7"
    oSegment.DataElementValue(2, 1) = "VAT"
    oSegment.DataElementValue(5, 4) = txtTaxRate.Text
    oSegment.DataElementValue(6) = "S"

    'create the MOA segment in the TAX group located in area (table) 3 of the message
    Set oSegment = oTransactionset.CreateDataSegment("TAX#3\MOA")
    oSegment.DataElementValue(1, 1) = "176"
    oSegment.DataElementValue(1, 2) = txtTaxAmount.Text
    oSegment.DataElementValue(1, 3) = "USD"

    'save edi document object to a file
    oEdiDoc.Save sPath & sEdiFile
    
    MsgBox ("Done. Output = " & sPath & sEdiFile)
    Me.MousePointer = vbNormal
    
End Sub