* This is just an example program to demonstrate how to create a 
    * Functional Acknowledgment 997 in Foxpro with the Framework EDI component
   clear all
   sSefFile = "810_4010.SEF"
   sSef997File = "997_4010.SEF"
   sEdiFile = "810.X12"
   sAckfile = "997_" + sEdifile

    oEdiDoc = createobject("fredi.ediDocument")
    * To support large EDI files without much memory, and improve performance
    oEdiDoc.CursorType = 1  && Cursor Forward_Only
    * By default, FREDI uses the  universal coordinated time (UTC), however you can change it to local time
    oEdiDoc.Option(12) = 1      && OptDocument_UseLocalTime

    * Stops FREDI from using the internal standard reference
    oSchemas = oEdiDoc.GetSchemas
    oSchemas.EnableStandardReference = .F.
    * Load SEF for EDI document to be acknowledged
    oEdiDoc.LoadSchema(sSefFile, 0)
    * Load SEF for 997 EDI file
    oEdiDoc.LoadSchema(sSef997File, 0)
    oAck = oEdiDoc.GetAcknowledgment
    * Do not show segments AK2, AK3, AK5 if transaction set is accepted (AK501 = "A")
    oAck.Option(0) = 0    && OptAcknowledgment_ShowReportingLevel
    * Set starting point of EDI Ack control numbers
    oAck.Property(12) = 1010    && PropertyAck_StartInterchangeControlNum
    oAck.Property(13) = 10        && PropertyAck_StartGroupControlNum
    oAck.Property(14) = 1        && PropertyAck_StartTransactionSetControlNum
    * Property to include the TA1 segment in the acknowledgment
    oAck.EnableInterchangeAcknowledgment = .T.
    * Property that determines whether a 997 acknowledgment is created or not while loading the EDI file.
    oAck.EnableFunctionalAcknowledgment = .T.
    * Property to specify that the transaction set is accepted even with errors
    *    oAck.AcceptSetWithErrors = .T.

    * Property to specify that the group set is accepted even with errors
    *    oAck.AcceptGroupWithErrors = .T.
    * Load the EDI file
    * Instantiate oSegment by getting the first segment
    oSegment = oEdiDoc.FirstDataSegment
    * When the cursor type is set to ForwardOnly, make sure to iterate through all segments to allow FREDI to validate them.
    do while !isnull(oSegment)

          oSegment = oSegment.Next
    * Anything in the oAck object that was automtically generated can be changed before saving to file.
    * Changing the date and time in the ISA segment of the oAck
    * Changing the TA1 segment
    oSegment = oAck.GetFirstTA1DataSegment
    oSegment = oSegment.GetDataSegmentByPos("\ISA\TA1")
    oSegment.DataElementValue(4) = "R"

    * Another method of changing the date and time in the GS segment of the oAck
    oSegment = oAck.GetFirst997DataSegment
    oSegment = oSegment.GetDataSegmentByPos("\ISA\GS\GS")
    oSegment.DataElementValue(4) = "20010101"  && Change date
    oSegment.DataElementValue(5) = "110130"     && Change time
    * Get last transaction set control number used in auto-generated acknowledgment

    sLastTsControlNo = oAck.Property(26) && Get ending control number of the last Transaction Set/Message 
    * Writes the Acknowledgment to file

    ? "Done"

    Click here to download a trial version of the Framework EDI