Untitled
unknown
plain_text
a year ago
17 kB
2
Indexable
report 50096 "SEPA - Maksekeskus Import" { ProcessingOnly = true; dataset { } requestpage { SaveValues = true; layout { area(content) { group(Options) { Caption = 'Options'; field(FileName; FileName) { Caption = 'File Name'; trigger OnAssistEdit() begin //FileName := CommonDialogMgt.OpenFile('',FileName,5,'',0); FileName := CommonDialogMgt.OpenFileDialog('', FileName, ''); end; } field(CheckUnique; CheckUnique) { Caption = 'Check Unique'; } } } } actions { } } labels { } trigger OnInitReport() begin //194-387 CheckUnique := TRUE; // end; trigger OnPostReport() var ok: Boolean; begin OptimeraSetup.GET; ok := FALSE; FileNameNew := FileName; REPEAT IF STRPOS(FileNameNew, '\') > 0 THEN BEGIN FileNameNew := COPYSTR(FileNameNew, STRPOS(FileNameNew, '\') + 1); END ELSE ok := TRUE; UNTIL ok; FileMgt.MoveFile(FileName, OptimeraSetup."Cash Receipt Imported Folder" + FileNameNew); //194-578 //MESSAGE('Algus %1 - LÍpp %2',StartTime,CURRENTDATETIME); end; trigger OnPreReport() var CurrNode: Automation; ReturnedNode: Automation; NodeList: Automation; i: Integer; begin //194-578,kvääk StartTime := CURRENTDATETIME; // CREATE(XMLDomDoc, TRUE, TRUE); XMLDomDoc.load(FileName); //pangaväljavÍtete lugemine FOR i := 1 TO 2 DO BEGIN //kahe formaadi tugi IF i = 1 THEN FindNodes(XMLDomDoc, 'Document/BkToCstmrAcctRpt/Rpt', NodeList) //camt.052 - ajaloo väljavÍte ELSE FindNodes(XMLDomDoc, 'Document/BkToCstmrStmt/Stmt', NodeList); //camt.053 - jooskva päeva väljavÍte NodeList.reset(); CurrNode := NodeList.nextNode(); WHILE NOT ISCLEAR(CurrNode) DO BEGIN //pangakonto tuvastamine BankAccount.SETRANGE(IBAN, FindNodeText(CurrNode, 'Acct/Id/IBAN', TRUE)); BankAccount.SETRANGE("Currency Code", Ccy2NAVCcy(FindNodeText(CurrNode, 'Acct/Ccy', TRUE))); IF BankAccount.COUNT <> 1 THEN ERROR(BankAccNotFoundError, BankAccount.GETFILTERS); BankAccount.FINDFIRST; //väljavÍtte kannete lugemine ReadStmtEntries(CurrNode); CurrNode := NodeList.nextNode(); END; END; end; var GLSetup: Record "General Ledger Setup"; GenJnlBatch: Record "Gen. Journal Batch"; GenJnlLine: Record "Gen. Journal Line"; BankAccount: Record "Bank Account"; XMLDomDoc: Automation; CommonDialogMgt: Codeunit "File Management"; NoSeriesMgt: Codeunit NoSeriesManagement; FileName: Text[250]; StartDocNo: Code[20]; LineNo: Integer; FldLen: Integer; CdtDbtInd: Code[10]; BookgDt: Date; ElementRequiredError: Label 'Element %1 is required.'; BankAccNotFoundError: Label 'Statement bank account was not found.\\Filters: %1'; FileMgt: Codeunit "File Management"; FileNameNew: Text; OptimeraSetup: Record "Optimera Setup"; CheckUnique: Boolean; TransactionReference: Code[50]; StartTime: DateTime; [Scope('OnPrem')] procedure ReadStmtEntries(CurrNode: Automation) var ReturnedNode: Automation; NodeList: Automation; OK: Boolean; begin FindNodes(CurrNode, 'Ntry', NodeList); NodeList.reset(); CurrNode := NodeList.nextNode(); WHILE NOT ISCLEAR(CurrNode) DO BEGIN //Kande tasemelt vajalik info //194-387 TransactionReference := FindNodeText(CurrNode, 'AcctSvcrRef', TRUE); // CdtDbtInd := FindNodeText(CurrNode, 'CdtDbtInd', TRUE); //CRDT vÍi DBIT //IF CdtDbtInd = 'CRDT' THEN BEGIN //vaikimisi laekumised, kuid selle tingimuse vÍib ära jätta BookgDt := Txt2Date(FindNodeText(CurrNode, 'BookgDt/DtTm', TRUE)); //Kande tehingute info lugemine //194-387 IF CheckUnique THEN OK := CheckEntryNotImported(TransactionReference) ELSE OK := TRUE; // IF TransactionReference='968850F8-722A-4C59-9ACC-E5FA359D63CA' THEN // MESSAGE('%1',OK); IF OK THEN // ReadTranDetails(CurrNode); //END; CurrNode := NodeList.nextNode(); END; end; [Scope('OnPrem')] procedure ReadTranDetails(CurrNode: Automation) var Customer: Record Customer; Vendor: Record Vendor; CustBankAcc: Record "Customer Bank Account"; VendBankAcc: Record "Vendor Bank Account"; ReturnedNode: Automation; NodeList: Automation; RltdPtiesRegNo: Code[20]; RltdPtiesIBAN: Code[50]; RefNo: Code[30]; begin FindNodes(CurrNode, 'NtryDtls/TxDtls', NodeList); NodeList.reset(); CurrNode := NodeList.nextNode(); WHILE NOT ISCLEAR(CurrNode) DO BEGIN GenJnlLine.INIT; GenJnlLine."Journal Template Name" := GenJnlBatch."Journal Template Name"; GenJnlLine."Journal Batch Name" := GenJnlBatch.Name; LineNo += 10000; GenJnlLine."Line No." := LineNo; // GenJnlLine.Description:=FindNodeText(CurrNode,'RmtInf/Ustrd',FALSE); // IF GenJnlLine.Description='REFUND' THEN // GenJnlLine.VALIDATE("Document Type",GenJnlLine."Document Type"::Refund) // else GenJnlLine.VALIDATE("Document Type", GenJnlLine."Document Type"::Payment); GenJnlLine."Document No." := StartDocNo; GenJnlLine.VALIDATE("Posting Date", BookgDt); //194-387 GenJnlLine."EE Bank Transaction Reference" := TransactionReference; // GenJnlLine.INSERT; //makse id IF FindNodeText(CurrNode, 'Refs/EndToEndId', FALSE) <> '' THEN GenJnlLine."External Document No." := COPYSTR(FindNodeText(CurrNode, 'Refs/EndToEndId', FALSE), 1, 20) ELSE GenJnlLine."External Document No." := COPYSTR(FindNodeText(CurrNode, 'Refs/InstrId', FALSE), 1, 20); //struktueeritud selgituste lugemine (viitenumber) RefNo := FindNodeText(CurrNode, 'Refs/EndToEndId', FALSE); GenJnlLine."EE Reference No." := RefNo; ReadRmtInfStrd(CurrNode, RefNo); //mittestruktueeritud selgituste lugemine ReadRmtInfUstrd(CurrNode); //püüa leida maksja juhul, kui seda eespool viitenumbri pÍhjal ei ole leitud IF (GenJnlLine."Account No." = '') AND (CdtDbtInd = 'CRDT') THEN BEGIN //otsi reg nr. pÍhjal RltdPtiesRegNo := FindNodeText(CurrNode, 'RltdPties/Dbtr/Id/OrgId/Othr/Id', FALSE); GenJnlLine."EE Bank Tran. Debitor ID" := RltdPtiesRegNo; END; GenJnlLine."Payer Information" := FindNodeText(CurrNode, 'RltdPties/Dbtr/Nm', FALSE); //korr. konto (väljavÍtte pangakonto) GenJnlLine.VALIDATE("Bal. Account Type", GenJnlLine."Bal. Account Type"::"Bank Account"); GenJnlLine.VALIDATE("Bal. Account No.", BankAccount."No."); //summa ja valuuta IF NOT FindNode(CurrNode, 'AmtDtls/TxAmt/Amt', ReturnedNode, FALSE) THEN //TransactionAmount IF NOT FindNode(CurrNode, 'AmtDtls/InstdAmt/Amt', ReturnedNode, FALSE) THEN //InstructedAmount FindNode(CurrNode, 'AmtDtls/TxAmt/Amt', ReturnedNode, TRUE); //kuvab veateate IF CdtDbtInd = 'CRDT' THEN GenJnlLine.VALIDATE(Amount, -Txt2Dec(ReturnedNode.text)) ELSE GenJnlLine.VALIDATE(Amount, Txt2Dec(ReturnedNode.text)); GenJnlLine.VALIDATE("Currency Code", Ccy2NAVCcy(ReturnedNode.attributes.getNamedItem('Ccy').text)); //siin on saadaval konv kurss ja konv valuuta //FindNode(CurrNode,'AmtDtls/TxAmt/CcyXchg',ReturnedNode,FALSE); //66488 //GenJnlLine.Description:=FindNodeText(CurrNode,'RmtInf/Ustrd',FALSE); // IF STRPOS(GenJnlLine.Description,'VAT')>0 THEN // GenJnlLine.Description:='VAT'; //GenJnlLine."EE Payment Description":=GenJnlLine.Description; GenJnlLine."EE Payment Description" := FindNodeText(CurrNode, 'RmtInf/Ustrd', FALSE); GenJnlLine.Description := COPYSTR(GenJnlLine.Comment, 1, MAXSTRLEN(GenJnlLine.Description)); // GenJnlLine.MODIFY; StartDocNo := INCSTR(StartDocNo); CurrNode := NodeList.nextNode(); END; end; [Scope('OnPrem')] procedure ReadRmtInfStrd(CurrNode: Automation; RefNo: Code[30]) var CustLedgEntry: Record "Cust. Ledger Entry"; CustLedgEntry2: Record "Cust. Ledger Entry"; ReturnedNode: Automation; NodeList: Automation; begin FindNodes(CurrNode, 'RmtInf/Strd', NodeList); NodeList.reset(); CurrNode := NodeList.nextNode(); WHILE NOT ISCLEAR(CurrNode) DO BEGIN //RefNo := FindNodeText(CurrNode,'CdtrRefInf/Ref',FALSE); //Igal maksel on toetatud üks viitenumber (pangapoolne piirang) ja sidumine IF (RefNo <> '') AND (CdtDbtInd = 'CRDT') AND (GenJnlLine."Applies-to Doc. No." = '') THEN BEGIN //194-578 kvääk see eelmine open vÍis suunduda hoopis indeksile Open, Due date CustLedgEntry.SETCURRENTKEY(Open, "EE Reference No.");//NEW //CustLedgEntry.SETCURRENTKEY(Open); //ORIG // CustLedgEntry.SETRANGE(Open, TRUE); CustLedgEntry.SETRANGE("EE Reference No.", RefNo); IF CustLedgEntry.FINDFIRST THEN BEGIN //kui selle viitenumbriga esineb ainult ühe kliendi kandeid, siis kasuta seda klienti CustLedgEntry2.COPY(CustLedgEntry); CustLedgEntry2.SETFILTER("Customer No.", '<>%1', CustLedgEntry."Customer No."); IF NOT CustLedgEntry2.FINDFIRST THEN BEGIN GenJnlLine.VALIDATE("Account Type", GenJnlLine."Account Type"::Customer); GenJnlLine.VALIDATE("Account No.", CustLedgEntry."Customer No."); END; //kui selle viitenumbriga leitakse üks kanne, siis kasuta seda kannet //194-387 IF CustLedgEntry."Posting Date" <= GenJnlLine."Posting Date" THEN// IF CustLedgEntry.COUNT = 1 THEN BEGIN GenJnlLine.VALIDATE("Applies-to Doc. Type", CustLedgEntry."Document Type"); GenJnlLine.VALIDATE("Applies-to Doc. No.", CustLedgEntry."Document No."); END; END; END; CurrNode := NodeList.nextNode(); END; end; [Scope('OnPrem')] procedure ReadRmtInfUstrd(CurrNode: Automation) var ReturnedNode: Automation; NodeList: Automation; begin FindNodes(CurrNode, 'RmtInf/Ustrd', NodeList); NodeList.reset(); CurrNode := NodeList.nextNode(); WHILE NOT ISCLEAR(CurrNode) DO BEGIN //VV oli Details of Order FldLen := MAXSTRLEN(GenJnlLine.Comment); IF GenJnlLine.Comment = '' THEN GenJnlLine.Comment := COPYSTR(CurrNode.text, 1, FldLen) ELSE GenJnlLine.Comment += COPYSTR('; ' + CurrNode.text, 1, FldLen); CurrNode := NodeList.nextNode(); END; //66488 GenJnlLine.Description := COPYSTR(GenJnlLine.Comment, 1, MAXSTRLEN(GenJnlLine.Description)); // end; [Scope('OnPrem')] procedure SetInitialValue(CashReceiptTemplateName: Code[10]; CashReceiptBatchName: Code[10]) begin GenJnlBatch.GET(CashReceiptTemplateName, CashReceiptBatchName); GenJnlLine.SETRANGE("Journal Template Name", CashReceiptTemplateName); GenJnlLine.SETRANGE("Journal Batch Name", CashReceiptBatchName); IF GenJnlLine.FINDLAST THEN BEGIN LineNo := GenJnlLine."Line No."; StartDocNo := INCSTR(GenJnlLine."Document No."); END ELSE StartDocNo := NoSeriesMgt.TryGetNextNo(GenJnlBatch."No. Series", WORKDATE); end; [Scope('OnPrem')] procedure FindNode(XMLRootNode: Automation; NodePath: Text[250]; var FoundXMLNode: Automation; Required: Boolean): Boolean begin FoundXMLNode := XMLRootNode.selectSingleNode(NodePath); IF ISCLEAR(FoundXMLNode) THEN IF Required THEN ERROR(ElementRequiredError, NodePath) ELSE EXIT(FALSE) ELSE EXIT(TRUE); end; [Scope('OnPrem')] procedure FindNodeText(XMLRootNode: Automation; NodePath: Text[250]; Required: Boolean): Text[260] var FoundXMLNode: Automation; begin FoundXMLNode := XMLRootNode.selectSingleNode(NodePath); IF ISCLEAR(FoundXMLNode) THEN BEGIN IF Required THEN ERROR(ElementRequiredError, NodePath); EXIT(''); END ELSE EXIT(FoundXMLNode.text); end; [Scope('OnPrem')] procedure FindNodes(XMLRootNode: Automation; NodePath: Text[250]; var ReturnedXMLNodeList: Automation): Boolean begin ReturnedXMLNodeList := XMLRootNode.selectNodes(NodePath); IF ISCLEAR(ReturnedXMLNodeList) THEN EXIT(FALSE) ELSE EXIT(TRUE); end; [Scope('OnPrem')] procedure Txt2Date(txtBookgDt: Text[30]) dateBookgDt: Date var Year: Integer; Month: Integer; Day: Integer; begin EVALUATE(Year, COPYSTR(txtBookgDt, 1, 4)); EVALUATE(Month, COPYSTR(txtBookgDt, 6, 2)); EVALUATE(Day, COPYSTR(txtBookgDt, 9, 2)); dateBookgDt := DMY2DATE(Day, Month, Year); end; [Scope('OnPrem')] procedure Txt2Dec(txtAmount: Text[30]) decAmount: Decimal begin EVALUATE(decAmount, CONVERTSTR(txtAmount, '.', ',')); end; [Scope('OnPrem')] procedure Ccy2NAVCcy(CurrencyCode: Code[10]): Code[10] begin IF CurrencyCode = 'EUR' THEN EXIT('') ELSE EXIT(CurrencyCode); end; local procedure CheckEntryNotImported(TransRef: Code[50]): Boolean var GenJnlLineX: Record "Gen. Journal Line"; BankLedgEntry: Record "Bank Account Ledger Entry"; begin //194-387 // GenJnlLine.RESET; // GenJnlLine.SETRANGE("EE Bank Transaction Reference",TransRef); // IF GenJnlLine.FINDFIRST THEN // EXIT(FALSE); BankLedgEntry.RESET; //194-578 BankLedgEntry.SETCURRENTKEY("EE Bank Transaction Reference");//NEW // BankLedgEntry.SETRANGE("EE Bank Transaction Reference", TransRef); IF BankLedgEntry.FINDFIRST THEN EXIT(FALSE); EXIT(TRUE); end; }
Editor is loading...
Leave a Comment