'This is just an example program to show how to generate an EDI X12 856 file in Visual Basic 6
    'with Framework EDI component

    Option Explicit
    Private oEdiDoc As Fredi.ediDocument
    Private oSchema As Fredi.ediSchema
    Private oSchemas As Fredi.ediSchemas
    Private oInterchange As Fredi.ediInterchange
    Private oGroup As Fredi.ediGroup
    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 nInstance As Integer
        Dim iItemCount As Integer
        Dim nTotalQty As Double
        Dim nTotalWeight As Double
    
        Dim nShipmentCounter As Integer
        Dim nShipments As Integer
        Dim nOrderCounter As Integer
        Dim nOrders As Integer
        Dim nItemCounter As Integer
        Dim nItems As Integer

        Dim nHlCounter As Integer
        Dim nHlShipmentParent As Integer
        Dim nHlOrderParent As Integer
        Dim nHlItemParent As Integer
    
    
        Me.MousePointer = vbHourglass
        sPath = App.Path & "\"
    
        sSefFile = "856_X12-4010.sef"
        sEdiFile = "856OUTPUT.x12"
    
        'instantiate edi document object
        Set oEdiDoc = New Fredi.ediDocument
    
        'change cursor type to forwardwrite to improve performance
        oEdiDoc.CursorType = Cursor_ForwardWrite
    
        'disable internal standard reference library to make certian SEF file is used
        Set oSchemas = oEdiDoc.GetSchemas
        oSchemas.EnableStandardReference = False
    
        'load sef file
        Set oSchema = oEdiDoc.ImportSchema(sPath & sSefFile, 0)
    
        'set terminators
        oEdiDoc.SegmentTerminator = "~" & vbCrLf
        oEdiDoc.ElementTerminator = "*"
        oEdiDoc.CompositeTerminator = ">"
    
        'create ISA segment
        Set oInterchange = oEdiDoc.CreateInterchange("X", "004010")
        Set oSegment = oInterchange.GetDataSegmentHeader
        oSegment.DataElementValue(1) = "00"
        oSegment.DataElementValue(3) = "00"
        oSegment.DataElementValue(5) = "14"
        oSegment.DataElementValue(6) = "0073268795005"
        oSegment.DataElementValue(7) = "ZZ"
        oSegment.DataElementValue(8) = "RECEIVERISA"
        oSegment.DataElementValue(9) = "960807"
        oSegment.DataElementValue(10) = "1548"
        oSegment.DataElementValue(11) = "U"
        oSegment.DataElementValue(12) = "00401"
        oSegment.DataElementValue(13) = "000000020"
        oSegment.DataElementValue(14) = "0"
        oSegment.DataElementValue(15) = "T"
        oSegment.DataElementValue(16) = ">"
    
        'create GS segment
        Set oGroup = oInterchange.CreateGroup("004010")
        Set oSegment = oGroup.GetDataSegmentHeader
        oSegment.DataElementValue(1) = "SH"
        oSegment.DataElementValue(2) = "007326879"
        oSegment.DataElementValue(3) = "RECEIVERGS"
        oSegment.DataElementValue(4) = "19960807"
        oSegment.DataElementValue(5) = "1548"
        oSegment.DataElementValue(6) = "1"
        oSegment.DataElementValue(7) = "X"
        oSegment.DataElementValue(8) = "004010"
    
        'create ST segment
        Set oTransactionset = oGroup.CreateTransactionSet("856")
        Set oSegment = oTransactionset.GetDataSegmentHeader
        oSegment.DataElementValue(1) = "856"
        oSegment.DataElementValue(2) = "00001"
    
        'create BSN segment
        Set oSegment = oTransactionset.CreateDataSegment("BSN")
        oSegment.DataElementValue(1) = "00"
        oSegment.DataElementValue(2) = txtShipmentNo.Text
        oSegment.DataElementValue(3) = "20020301"
        oSegment.DataElementValue(4) = "1340"
        oSegment.DataElementValue(5) = "0002"
    
        'hypothetical numbers of shipments, orders and items
        nShipmentCounter = 1
        nShipments = 1
        nOrderCounter = 1
        nOrders = 1
        nItemCounter = 1
        nItems = 6
    
        '********************************************************************************************
        'HL - HIERARCHICAL LEVEL - SHIPMENTS ********************************************************
        Do While nShipmentCounter <= nShipments
    
            nHlCounter = nHlCounter + 1
            nHlOrderParent = nHlCounter
    
            Set oSegment = oTransactionset.CreateDataSegment("HL\HL")
            oSegment.DataElementValue(1) = nHlCounter
            oSegment.DataElementValue(2) = ""
            oSegment.DataElementValue(3) = "S"
            oSegment.DataElementValue(4) = "1"
        
            nTotalQty = 0
            nTotalWeight = 0
            For i = 0 To 7
                If Len(Trim(txtCatalogNo(i).Text)) > 0 Then
                    nTotalQty = nTotalQty + Val(txtQty(i).Text)
                    nTotalWeight = nTotalWeight + Val(txtWeights(i).Text)
                End If
            Next
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\TD1")
            oSegment.DataElementValue(1) = "TKT"
            oSegment.DataElementValue(2) = nTotalQty
            oSegment.DataElementValue(6) = "A3"
            oSegment.DataElementValue(7) = nTotalWeight
            oSegment.DataElementValue(8) = "01"
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\TD5")
            oSegment.DataElementValue(2) = 2
            oSegment.DataElementValue(3) = txtRoutingCode.Text
            oSegment.DataElementValue(4) = "M"
            oSegment.DataElementValue(5) = txtRoutingDesc.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\TD3")
            oSegment.DataElementValue(1) = txtEquipCode.Text
            oSegment.DataElementValue(2) = txtEquipInitial.Text
            oSegment.DataElementValue(3) = txtEquipNo.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\REF")
            oSegment.DataElementValue(1) = "BM"
            oSegment.DataElementValue(2) = txtBOLNo.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\DTM")
            oSegment.DataElementValue(1) = "011"
            oSegment.DataElementValue(2) = Format(txtShippedDate.Text, "YYYYMMDD")
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\DTM(2)")
            oSegment.DataElementValue(1) = "017"
            oSegment.DataElementValue(2) = Format(txtEstDeliveryDate.Text, "YYYYMMDD")
        
            'Bill To address information
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1\N1")
            oSegment.DataElementValue(1) = "BT"
            oSegment.DataElementValue(2) = txtBillToName.Text
            oSegment.DataElementValue(3) = "1"
            oSegment.DataElementValue(4) = txtBillToDUNS.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1\N3")
            oSegment.DataElementValue(1) = txtBillToAddress.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1\N4")
            oSegment.DataElementValue(1) = txtBillToCity.Text
            oSegment.DataElementValue(2) = txtBillToState.Text
            oSegment.DataElementValue(3) = txtBillToZip.Text
        
            'Ship-To address information
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1(2)\N1") 'Note: it is not necessary to include the loop instance counter (2) in the syntx when cursor type is set to forwardwrite
            oSegment.DataElementValue(1) = "ST"
            oSegment.DataElementValue(2) = txtShipToName.Text
            oSegment.DataElementValue(3) = "1"
            oSegment.DataElementValue(4) = txtShipToDUNS.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1(2)\N3")
            oSegment.DataElementValue(1) = txtShipToAddress.Text
        
            Set oSegment = oTransactionset.CreateDataSegment("HL\N1(2)\N4")
            oSegment.DataElementValue(1) = txtShipToCity.Text
            oSegment.DataElementValue(2) = txtShipToState.Text
            oSegment.DataElementValue(3) = txtShipToZip.Text
    
            '********************************************************************************************
            'HL - HIERARCHICAL LEVEL - ORDER ************************************************************
            Do While nOrderCounter <= nOrders

                nHlCounter = nHlCounter + 1
                nHlItemParent = nHlCounter
        
                Set oSegment = oTransactionset.CreateDataSegment("HL\HL")
                oSegment.DataElementValue(1) = nHlCounter
                oSegment.DataElementValue(2) = nHlOrderParent
                oSegment.DataElementValue(3) = "O"
                oSegment.DataElementValue(4) = "1"
            
                Set oSegment = oTransactionset.CreateDataSegment("HL\PRF")
                oSegment.DataElementValue(1) = txtPONumber.Text
                oSegment.DataElementValue(2) = txtReleaseNo.Text
                oSegment.DataElementValue(3) = ""
                oSegment.DataElementValue(4) = Format(txtPODate.Text, "YYYYMMDD")
            
                Set oSegment = oTransactionset.CreateDataSegment("HL\REF")
                oSegment.DataElementValue(1) = "IV"
                oSegment.DataElementValue(2) = txtInvoiceNo.Text
            
                Set oSegment = oTransactionset.CreateDataSegment("HL\FOB")
                oSegment.DataElementValue(1) = "PS"
                oSegment.DataElementValue(2) = "DE"
                oSegment.DataElementValue(3) = ""
            
                '********************************************************************************************
                'HL - HIERARCHICAL LEVEL - ITEMS ************************************************************
                Do While nItemCounter <= nItems
                    nHlCounter = nHlCounter + 1
            
                    Set oSegment = oTransactionset.CreateDataSegment("HL\HL")
                    oSegment.DataElementValue(1) = nHlCounter
                    oSegment.DataElementValue(2) = nHlItemParent
                    oSegment.DataElementValue(3) = "I"
                    oSegment.DataElementValue(4) = "0"
            
                    Set oSegment = oTransactionset.CreateDataSegment("HL\LIN")
                    oSegment.DataElementValue(1) = nItemCounter
                    oSegment.DataElementValue(2) = "UA"
                    oSegment.DataElementValue(3) = txtEAN(nItemCounter - 1).Text
            
                    Set oSegment = oTransactionset.CreateDataSegment("HL\SN1")
                    oSegment.DataElementValue(2) = txtQtyShipped(nItemCounter - 1).Text
                    oSegment.DataElementValue(3) = txtUnit(nItemCounter - 1).Text
                    oSegment.DataElementValue(5) = txtQty(nItemCounter - 1).Text
                    oSegment.DataElementValue(6) = txtUnit(nItemCounter - 1).Text
                    oSegment.DataElementValue(8) = txtStatusCode(nItemCounter - 1).Text
                
                    Set oSegment = oTransactionset.CreateDataSegment("HL\PRF")
                    oSegment.DataElementValue(1) = txtPONumber.Text
                    oSegment.DataElementValue(2) = txtReleaseNo.Text
                    oSegment.DataElementValue(3) = ""
                    oSegment.DataElementValue(4) = Format(txtPODate.Text, "YYYYMMDD")
                
                    Set oSegment = oTransactionset.CreateDataSegment("HL\PID")
                    oSegment.DataElementValue(1) = "F"
                    oSegment.DataElementValue(5) = txtDescription(nItemCounter - 1).Text
        
                    nItemCounter = nItemCounter + 1 'increment nItemCounter
                Loop    'nItemCounter

                nOrderCounter = nOrderCounter + 1   'increment nOrderCounter
            Loop    'nOrderCounter

            nShipmentCounter = nShipmentCounter + 1     'increment nShipmentCounter
        Loop    'Shipment
    
        'CTT - TRANSACTION TOTALS
        Set oSegment = oTransactionset.CreateDataSegment("CTT")
        oSegment.DataElementValue(1) = nItems      'Number of Line Items
    
        'save edi object to file
        oEdiDoc.Save sPath & sEdiFile
    
        Me.MousePointer = vbNormal
        MsgBox ("Done. Output = " & sPath & sEdiFile)
        cmdGenerate.Enabled = False
    
    End Sub
    

    Click here to download a trial version of the Framework EDI