clear
* CREATES EDI DOCUMENT OBJECT
oEdiDoc = createobject("fredi.ediDocument")
* THIS MAKES CERTAIN THAT FREDI ONLY USES THE SEF FILE PROVIDED, AND THAT IT DOES
* NOT USE ITS BUILT-IN STANDARD REFERENCE TABLE TO TRANSLATE THE EDI FILE.
oSchemas = oEdiDoc.GetSchemas
oSchemas.EnableStandardReference = .F.
* THIS OPTIONS STOPS FREDI FROM KEEPING ALL THE SEGMENTS IN MEMORY
oEdiDoc.CursorType = 1
* LOADS THE SEF FILE
oEdiDoc.LoadSchema("211_003070.SEF", 0)
* LOADS THE EDI FILE
oEdiDoc.LoadEdi("211.txt")
* GETS THE FIRST DATA SEGMENT
oSegment = oEdiDoc.FirstDataSegment
* LOOP THAT WILL TRAVERSE THRU EDI FILE FROM TOP TO BOTTOM
do while !isnull(oSegment)
&& DATA SEGMENTS WILL BE IDENTIFIED BY THEIR ID, THE LOOP SECTION AND AREA
&& (OR TABLE) NUMBER THAT THEY ARE IN.
sSegmentID = oSegment.ID
sLoopID = oSegment.LoopSection
nArea = oSegment.Area
do case
case nArea = 0
do case
case sLoopID == ""
do case
case sSegmentID = "ISA"
sValue = oSegment.DataElementValue(1) && Authorization Information Qualifier
sValue = oSegment.DataElementValue(2) && Authorization Information
sValue = oSegment.DataElementValue(3) && Security Information Qualifier
sValue = oSegment.DataElementValue(4) && Security Information
? oSegment.DataElement(5).Description + " = " + oSegment.DataElementValue(5) && Interchange ID Qualifier
? oSegment.DataElement(6).Description + " = " + oSegment.DataElementValue(6) && Interchange Sender ID
sValue = oSegment.DataElementValue(7) && Interchange ID Qualifier
sValue = oSegment.DataElementValue(8) && Interchange Receiver ID
sValue = oSegment.DataElementValue(9) && Interchange Date
sValue = oSegment.DataElementValue(10) && Interchange Time
sValue = oSegment.DataElementValue(11) && Interchange Control Standards Identifier
sValue = oSegment.DataElementValue(12) && Interchange Control Version Number
? oSegment.DataElement(13).Description + " = " + oSegment.DataElementValue(13) && Interchange Control Number
sValue = oSegment.DataElementValue(14) && Acknowledgment Requested
sValue = oSegment.DataElementValue(15) && Usage Indicator
sValue = oSegment.DataElementValue(16) && Component Element Separator
case sSegmentID = "GS"
sValue = oSegment.DataElementValue(1) && Functional Identifier Code
sValue = oSegment.DataElementValue(2) && Application Sender's Code
sValue = oSegment.DataElementValue(3) && Application Receiver's Code
sValue = oSegment.DataElementValue(4) && Date
sValue = oSegment.DataElementValue(5) && Time
? oSegment.DataElement(6).Description + " = " + oSegment.DataElementValue(6) && Group Control Number
sValue = oSegment.DataElementValue(7) && Responsible Agency Code
sValue = oSegment.DataElementValue(8) && Version / Release / Industry Identifier Code
endcase && sSegmentID
endcase && sLoopID
case nArea = 1
do case
case sLoopID == ""
do case
case sSegmentID = "ST"
sValue = oSegment.DataElementValue(1) && Transaction Set Identifier Code
? oSegment.DataElement(2).Description + " = " + oSegment.DataElementValue(2) && Transaction Set Control Number
case sSegmentID = "BOL"
sValue = oSegment.DataElementValue(1) && Standard Carrier Alpha Code
sValue = oSegment.DataElementValue(2) && Shipment Method of Payment
? oSegment.DataElement(3).Description + " = " + oSegment.DataElementValue(3) && Shipment Identification Number
? oSegment.DataElement(4).Description + " = " + oSegment.DataElementValue(4) && Date
sValue = oSegment.DataElementValue(5) && Time
sValue = oSegment.DataElementValue(6) && Reference Identification
case sSegmentID = "B2A"
sValue = oSegment.DataElementValue(1) && Transaction Set Purpose Code
case sSegmentID = "MS2"
sValue = oSegment.DataElementValue(1) && Standard Carrier Alpha Code
sValue = oSegment.DataElementValue(2) && Equipment Number
endcase && sSegmentID
case sLoopID == "N1"
&& If loop has more that one instance, then you should check for the qualifier that differentiates the loop instances here e.g.
If sSegmentID = "N1" then
sLoopQlfr = oSegment.DataElementValue(1) && In most cases the loop qualifier is the first element of the first segment in the loop, but not necessarily
EndIf
do case
case sLoopQlfr = "SH"
do case
case sSegmentID = "N1"
sValue = oSegment.DataElementValue(1) && Entity Identifier Code
? "Shipper Name = " + oSegment.DataElementValue(2) && Name
sValue = oSegment.DataElementValue(3) && Identification Code Qualifier
sValue = oSegment.DataElementValue(4) && Identification Code
case sSegmentID = "N3"
? "Shipper Address = " + oSegment.DataElementValue(1) && Address Information
sValue = oSegment.DataElementValue(2) && Address Information
case sSegmentID = "N4"
? "Shipper City = " + oSegment.DataElementValue(1) && City Name
sValue = oSegment.DataElementValue(2) && State or Province Code
sValue = oSegment.DataElementValue(3) && Postal Code
endcase && sSegmentID
case sLoopQlfr = "CN"
do case
case sSegmentID = "N1"
sValue = oSegment.DataElementValue(1) && Entity Identifier Code
? "ConsigneeName = " + oSegment.DataElementValue(2) && Name
sValue = oSegment.DataElementValue(3) && Identification Code Qualifier
sValue = oSegment.DataElementValue(4) && Identification Code
case sSegmentID = "N3"
? "ConsigneeAddress = " + oSegment.DataElementValue(1) && Address Information
sValue = oSegment.DataElementValue(2) && Address Information
case sSegmentID = "N4"
? "ConsigneeCity = " + oSegment.DataElementValue(1) && City Name
sValue = oSegment.DataElementValue(2) && State or Province Code
sValue = oSegment.DataElementValue(3) && Postal Code
case sSegmentID = "G61"
sQlfr = oSegment.DataElementValue(1) && Contact Function Code
if sQlfr = "DC" then
? "Delivery Contact Name = " + oSegment.DataElementValue(2) && Name
endif
sQlfr = oSegment.DataElementValue(3) && Communication Number Qualifier
if sQlfr = "TE" then
? "Delivery Contact Telephone Number = " + oSegment.DataElementValue(4) && Communication Number
endif
endcase && sSegmentID
endcase && sLoopQlfr
endcase && sLoopID
case nArea = 2
do case
case sLoopID == "AT1"
do case
case sSegmentID = "AT1"
sValue = oSegment.DataElementValue(1) && Lading Line Item Number
case sSegmentID = "L11"
sValue = oSegment.DataElementValue(1) && Reference Identification
sValue = oSegment.DataElementValue(2) && Reference Identification Qualifier
case sSegmentID = "AT4"
sValue = oSegment.DataElementValue(1) && Lading Description
endcase && sSegmentID
case sLoopID == "AT1;AT2"
do case
case sSegmentID = "AT2"
? oSegment.DataElement(1).Description + " = " + oSegment.DataElementValue(1) && Lading Quantity
sValue = oSegment.DataElementValue(2) && Packaging Form Code
sValue = oSegment.DataElementValue(3) && Weight Qualifier
sValue = oSegment.DataElementValue(4) && Weight Unit Code
sValue = oSegment.DataElementValue(5) && Weight
? oSegment.DataElement(6).Description + " = " + oSegment.DataElementValue(6) && Lading Quantity
sValue = oSegment.DataElementValue(7) && Packaging Form Code
sValue = oSegment.DataElementValue(8) && Yes/No Condition or Response Code
? oSegment.DataElement(9).Description + " = " + oSegment.DataElementValue(9) && Commodity Code
case sSegmentID = "MAN"
sValue = oSegment.DataElementValue(1) && Marks and Numbers Qualifier
? oSegment.DataElement(2).Description + " = " + oSegment.DataElementValue(2) && Marks and Numbers
case sSegmentID = "SPO"
? oSegment.DataElement(1).Description + " = " + oSegment.DataElementValue(1) && Purchase Order Number
sValue = oSegment.DataElementValue(2) && Reference Identification
sValue = oSegment.DataElementValue(3) && Unit or Basis for Measurement Code
? oSegment.DataElement(4).Description + " = " + oSegment.DataElementValue(4) && Quantity
endcase && sSegmentID
endcase && sLoopID
endcase && nArea
&& GETS THE NEXT DATA SEGMENT
oSegment = oSegment.Next
enddo
?
? "Done"