Untitled
unknown
plain_text
2 years ago
17 kB
5
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