unit Unit1;
    // This is just an example to show how to acknowledge an EDI file, and create
    // a Functional Acknowledgment 997 in Delphi with Framework EDI component.

    interface

    uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleServer, FREDI_TLB,
        StdCtrls;

    type
        TForm1 = class(TForm)
        cmdTranslate: TButton;
        cmdClose: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure cmdTranslateClick(Sender: TObject);
        procedure cmdCloseClick(Sender: TObject);
        private
        { Private declarations }
        public
        { Public declarations }
        end;

    var
        Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.cmdTranslateClick(Sender: TObject);
    var
        oEdiDoc : IediDocument;
        oAck : IediAcknowledgment;
        oSchemas : IediSchemas;
        oSegment : IediDataSegment;

        sPath : string;
        sSefFile : string;
        sEdiFile : string;
        sAckFile : string;

    begin
        cmdTranslate.Enabled := False;

        sPath := Trim(GetCurrentDir) + '\';

        oEdiDoc := CoediDocument.Create();

        //change cursor type from dynamic (default) to ForwardOnly to improve performance
        oEdidoc.CursorType := Cursor_ForwardOnly;

        //Disable standard reference.  Use SEF file only
        oSchemas := oEdidoc.GetSchemas as IediSchemas;
        oSchemas.EnableStandardReference := false;

        //Load SEF files
        //for reading 810 EDI file
        oEdidoc.LoadSchema(spath + '810_4010.SEF',0);
        //for writing 997 EDI file
        oEdidoc.LoadSchema(spath + '997_4010.SEF',0);

        //Enable acknowledgment
        oAck := oEdiDoc.GetAcknowledgment as IediAcknowledgment;
        oAck.EnableFunctionalAcknowledgment := true;

        //Do not show segments AK2, AK3, AK5 if transaction set is accepted (AK501 = "A")
        oAck.Option[OptAcknowledgment_ShowReportingLevel] := 0;

        //Set starting point of EDI Ack control numbers
        oAck.Property_[PropertyAck_StartInterchangeControlNum]:= 1010;
        oAck.Property_[PropertyAck_StartGroupControlNum]:= 10;
        oAck.Property_[PropertyAck_StartTransactionSetControlNum]:= 1;


        //Property to specify that the transaction set is accepted even with errors
        //oAck.AcceptSetWithErrors = True ;

        //Property to specify that the group set is accepted even with errors
        //oAck.AcceptGroupWithErrors = True ;

        //Load EDI file to be acknowledged
        oEdiDoc.LoadEdi(sPath + '810.X12');

        //When the cursor type is set to ForwardOnly, make sure to traverse through all segments to allow FREDI to validate them.
        oSegment := oEdiDoc.FirstDataSegment as IediDataSegment;
        while oSegment <> Nil do begin
            oSegment := oSegment.Next as IediDataSegment;
        end;

        //save acknowledgment file
        oAck.Save(sPath + '997_810.X12');

        ShowMessage('997 done');
        cmdTranslate.Enabled := true;

    end;

    procedure TForm1.cmdCloseClick(Sender: TObject);
    begin
        Close;
    end;

    end.
    

    Click here to download a trial version of the Framework EDI