Bugs in nieuw SEPA Report

MaximusMaximus The NetherlandsMember Posts: 105
edited 2014-06-05 in NAV Dutch speaking only
Hoi,

het nieuwe Report 11000012 SEPA ISO20022 Pain 01.01.03 functioneert niet naar behoren. Omdat het al erg lang geduurd heeft voor MS met een update kwam voor pain.001.001.03 zet ik hieronder de fixes neer die iedereen met Report Designer in zijn licentie kan aanbrengen om wel een werkende versie te krijgen en live te kunnen met SEPA. Veel succes ermee.

Wij zijn tegen de volgende bugs aangelopen:

1. Als je een betaalrun wil exporteren met meer dan één regel gaat er iets mis. Er wordt telkens maar één regel in het exportbestand opgenomen, namelijk de eerste met status Nieuw.

Oplossing: maak een Global aan:

Name DataType Subtype Length
PaymentHistoryLine2 Record Payment History Line

Wijzig in de functie ExportPaymentInformation als volgt de code:

//PaymentHistoryLine.WillBeSent;
PaymentHistoryLine2 := PaymentHistoryLine;
PaymentHistoryLine2.WillBeSent;

2. De SEPA exportbestanden worden geweigerd door de bank omdat er niet toegestane tekens gebruikt worden. In ons geval en & en een @. Er zit wel een CONVERTSTR in functie AddElement maar die dekt bij lange na niet de lading.

De toegestande karakters in een SEPA bericht tussen de tags < en > zijn:

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
/ - ? : ( ) . , ‘ +
Space

Onderstaande oplossing converteert alle ASCII waarden van 32 tot en met 255 naar de juiste ASCII waarde.

Maak eerst twee Globals aan:

Name DataType Subtype Length
TxtCharactersPossible Text 224
TxtCharactersAllowed Text 224

Maak twee Functions aan:

Name
BuildStringCharactersPossible
BuildStringCharactersAllowed


Plaats de volgende code in de trigger Report - OnPreReport()

BuildStringCharactersPossible;
BuildStringCharactersAllowed;

Pas de code in de functie AddElement als volgt aan:


IF NodeText <> '' THEN BEGIN
//NewChildNode.text := CONVERTSTR(NodeText,
// 'ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜøØáíóúñÁÀ¢¥ãÃðÐÊËÈiÍÎÏËÈÌÓßÔÒõÕµÚÛÙýÝ',
// 'CueaaaaceeeiiiAAEaAooouuyOUoOaiounAAAcyaAoDEEEiIIIEEIOBOOoOuUUUyY');
NewChildNode.text := CONVERTSTR(NodeText,TxtCharactersPossible,TxtCharactersAllowed);
END;

De twee toegevoegde functies:

BuildStringCharactersPossible()

FOR LIntASCIINo := 32 TO 255 DO BEGIN
LTxtCharacterPossible := LIntASCIINo;
TxtCharactersPossible += FORMAT(LTxtCharacterPossible);
END;

Locals:

Name DataType Subtype Length
LTxtCharacterPossible Char
LIntASCIINo Integer


BuildStringCharactersAllowed()

LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 39;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 40;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 41;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 43;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 44;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 45;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 46;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 47;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 48;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 49;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 50;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 51;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 52;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 53;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 54;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 55;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 56;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 57;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 58;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 31;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 63;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 66;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 67;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 68;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 70;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 71;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 72;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 73;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 74;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 75;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 76;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 77;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 78;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 80;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 81;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 82;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 83;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 84;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 85;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 86;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 87;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 88;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 89;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 90;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 40;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 92;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 41;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 98;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 99;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 100;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 101;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 102;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 103;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 104;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 106;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 107;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 108;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 109;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 110;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 112;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 113;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 114;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 115;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 116;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 117;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 118;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 119;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 120;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 121;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 122;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 40;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 41;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 102;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 83;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 90;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 115;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 122;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 89;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 99;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 65;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 67;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 69;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 73;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 73;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 73;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 73;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 78;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 79;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 85;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 85;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 85;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 85;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 89;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 97;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 99;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 101;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 101;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 101;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 101;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 105;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 110;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 111;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 117;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 117;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 117;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 117;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 121;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 32;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);
LTxtCharacterAllowed := 121;
TxtCharactersAllowed += FORMAT(LTxtCharacterAllowed);

Local:

Name DataType Subtype Length
LTxtCharacterAllowed Char

Comments

  • lvanvugtlvanvugt Member Posts: 774
    Bedankt voor het delen! :thumbsup:
    Luc van Vugt, fluxxus.nl
    Never stop learning
    Van Vugt's dynamiXs
    Dutch Dynamics Community
  • gfrankegfranke Member Posts: 4
    Bedankt, ik heb vandaag een update gemaakt voor een klant welke als pilot dient.
    Verder heb ik de aanpassing ook doorgezet naar Report 11000011 "Export SEPA ISO20022"
    welke in een eerdere oplevering van MS is aangeboden, ook daar een bug uitgehaald en even afwachten of deze dan goed gaat bij de ABN-AMRO.
    Indien deze goed is gegaan plaats ik de fix even.
  • mdPartnerNLmdPartnerNL Member Posts: 801
    gfranke wrote:
    Bedankt, ik heb vandaag een update gemaakt voor een klant welke als pilot dient.
    Verder heb ik de aanpassing ook doorgezet naar Report 11000011 "Export SEPA ISO20022"
    welke in een eerdere oplevering van MS is aangeboden, ook daar een bug uitgehaald en even afwachten of deze dan goed gaat bij de ABN-AMRO.
    Indien deze goed is gegaan plaats ik de fix even.

    Bedankt alvast. we wachten af.
  • lvanvugtlvanvugt Member Posts: 774
    Hai Gerben,
    gfranke wrote:
    Verder heb ik de aanpassing ook doorgezet naar Report 11000011 "Export SEPA ISO20022"
    welke in een eerdere oplevering van MS is aangeboden
    Waar had je die vandaan?
    gfranke wrote:
    ook daar een bug uitgehaald en even afwachten of deze dan goed gaat bij de ABN-AMRO.
    Indien deze goed is gegaan plaats ik de fix even.
    Hier al iets meer over bekend?
    Luc van Vugt, fluxxus.nl
    Never stop learning
    Van Vugt's dynamiXs
    Dutch Dynamics Community
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Kleine bump?
  • HansDuttingHansDutting Member Posts: 25
    Ik heb het idee dat er nog meer bugs inzitten.
    De BNG accepteert ons bestand niet omdat meerdere regels onder 1 PmtInf moeten komen onder de tag CdtTrfTxInf.
    Nu maakt NAV er met 8 regels bijv. 8 rijtjes PmtInf aan. zie plaatje BNG voorbeeld links en ons bestand uit NAV.
    BNG heeft 12 regels gexporteerd en daar heb ik 12 rijtjes CdtTrfTxInf.

    het lijkt wel of de IF PaymentHistoryLine.FIND('-') THEN REPEAT verderop moet komen te staan.
    Of heb ik al weer een oude versie van report 11000012 ?

    Het irritante is dat de ABN niks verkeerds vindt in ons bestand en de BNG het Trial en Error principe toepast door bij elke eerstvolgende fout direct terug te butsen zonder enige uitleg naar onze klant ipv een goede analyse te geven.
    De sectie CtgyPurp moest ook weg, maar daar doet NAV niks mee.
    Heb nu eindelijk een voorbeeldbestand maar schept meer vragen dan duidelijkheid.

    Hebben jullie ook die ervaring met (andere) banken?

    En is er nu inmiddels een verbeterde versie van het rapport wat WEL uniform is voor alle banken? Of moeten we het toch zelf gaan maken?

    Of heb ik het helemaal mis en zit ik fout :) ?
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Bedankt voor de update en wederom op deze manier een kleine bump. Ps. Het lijkt wel of sommige mensen gewoon niet mogen reageren in dit topic.
  • ajhvdbajhvdb Member Posts: 672
  • greysgreys Member Posts: 26
    Ik heb de aanpassingen uit dit topic overgenomen in mijn eigen report, en ook ik heb bericht terug van BNG dat het bestand op zich juist is maar dat er per betaling een aparte batch wordt gemaakt, zoals hierboven ook wordt aangegeven. Dit resulteert vervolgens in een hoop extra werk, want elke batch moet worden getekend.

    Mijn gedachte gaat daarom ook uit naar het verplaatsen van de 'IF PaymentHistoryLine.FIND('-') THEN...' constructie. Dus niet meer bovenin de functie ExportPaymentInformation, maar een stuk lager (bij de tekst HIER):
    AddElement(XMLNodeCurr,'BIC',COPYSTR(BankAcc."SWIFT Code",1,11),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'ChrgBr','SLEV','', XMLNewChild);
    (HIER -->) IF PaymentHistoryLine.FIND('-') THEN REPEAT
      AddElement(XMLNodeCurr,'CdtTrfTxInf','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'PmtId','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    

    Als ik daar de repeat neerzet, krijg ik echter een keiharde automation foutmelding ('Er is geen instance van de Automation-variabele gemaakt. U kunt een instance maken door de variabele te maken of toe te kennen'). Ik ben niet zo thuis in XMLDom, dus ik weet even niet hoe ik dit zo moet structureren dat ik én geen foutmelding meer krijg én een output waarbij elke Payment History Line voor een eigen <CdtTrfTxInf> sectie zorgt. Iemand enig idee?

    Groet,

    Gerwin
  • HansDuttingHansDutting Member Posts: 25
    edited 2013-11-22
    Hoi greys,

    Bestand bij mij is nu zover dat mijn klant weer een poging gaat wagen. (BIC code tag moest ook weg. wat dat ding daar doet is mij ook niet duidelijk maar als het niks doet zou je er geen last van moeten hebben.)
    Erg efficient meewerken is er niet bij. Het rapport zit inmiddels in de maatwerkrange en ik denk dat er meerdere gaan volgen. Gelukkig heb je standaard 100 reports!

    Ik heb nu dit resultaat: voor functie Export GroupHeader en ExportPaymentInformation. LET OP alleen BNG!
    ExportGroupHeader(XMLNodeCurr : Automation "'Microsoft XML, v3.0'.IXMLDOMNode")
    
    AddElement(XMLNodeCurr,'GrpHdr','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    MessageId := "Payment History"."Our Bank" + "Payment History"."Run No.";
    IF STRLEN(MessageId) > 35 THEN
      MessageId := COPYSTR(MessageId,STRLEN(MessageId) - 34);
    
    AddElement(XMLNodeCurr,'MsgId',MessageId,'', XMLNewChild);
    AddElement(XMLNodeCurr,'CreDtTm',FORMAT(CURRENTDATETIME,19,9),'', XMLNewChild);
    
    PaymentHistoryLine.RESET;
    PaymentHistoryLine.SETCURRENTKEY("Our Bank",Status,"Run No.",Order,Date);
    PaymentHistoryLine.SETRANGE("Our Bank","Payment History"."Our Bank");
    PaymentHistoryLine.SETRANGE("Run No.","Payment History"."Run No.");
    
    AddElement(XMLNodeCurr,'NbOfTxs',FORMAT(PaymentHistoryLine.COUNT,0,9),'', XMLNewChild);
    PaymentHistoryLine.CALCSUMS(Amount);
    AddElement(XMLNodeCurr,'CtrlSum',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'InitgPty','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'OrgId','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Othr','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Id',CompanyInfo."VAT Registration No.",'', XMLNewChild);
    
    ExportPaymentInformation(XMLNodeCurr : Automation "'Microsoft XML, v3.0'.IXMLDOMNode")
    AddElement(XMLNodeCurr,'PmtInf','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    PaymentInformationId := "Payment History"."Our Bank" +"Payment History"."Run No.";// + FORMAT(PaymentHistoryLine."Line No.");
    IF STRLEN(PaymentInformationId) > 35 THEN
      PaymentInformationId := COPYSTR(PaymentInformationId,STRLEN(PaymentInformationId) - 34);
    
    AddElement(XMLNodeCurr,'PmtInfId',PaymentInformationId,'', XMLNewChild);
    AddElement(XMLNodeCurr,'PmtMtd','TRF','', XMLNewChild);
    
    //AddElement(XMLNodeCurr,'BtchBookg','false','', XMLNewChild);
    AddElement(XMLNodeCurr,'NbOfTxs',FORMAT(PaymentHistoryLine.COUNT,0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'CtrlSum',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
    
    AddElement(XMLNodeCurr,'PmtTpInf','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    //IF PaymentHistoryLine.Urgent THEN
    //  AddElement(XMLNodeCurr,'InstrPrty','HIGH','', XMLNewChild)
    //ELSE
    //  AddElement(XMLNodeCurr,'InstrPrty','NORM','', XMLNewChild);
    
    AddElement(XMLNodeCurr,'SvcLvl','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Cd','SEPA','', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //HDU20130909>> Slashed off
    //  AddElement(XMLNodeCurr,'CtgyPurp','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //  AddElement(XMLNodeCurr,'Cd','SUPP','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //HDU20130909<<
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'ReqdExctnDt',FORMAT("Payment History"."Creation Date",0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'Dbtr','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Ctry',COPYSTR(CompanyInfo."Country/Region Code",1,2),'', XMLNewChild);
    //AddressLine1 := DELCHR(CompanyInfo.Address,'<>') + ' ' + DELCHR(CompanyInfo."Address 2",'<>');
    //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine1,1,70),'', XMLNewChild);
    //AddressLine2 := DELCHR(CompanyInfo."Post Code",'<>') + ' ' + DELCHR(CompanyInfo.City,'<>');
    //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
    //XMLNodeCurr := XMLNodeCurr.parentNode;
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'DbtrAcct','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    BankAcc.GET("Payment History"."Our Bank");
    AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(BankAcc.IBAN,1,34)),'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //GLSetup.GET;
    //AddElement(XMLNodeCurr,'Ccy',GLSetup."LCY Code",'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'DbtrAgt','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'BIC',COPYSTR(BankAcc."SWIFT Code",1,11),'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'ChrgBr','SLEV','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    IF PaymentHistoryLine.FIND('-') THEN REPEAT
    
    //HDU20131002>>
    //  AddElement(XMLNodeCurr,'PmtInf','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  PaymentInformationId := PaymentHistoryLine."Our Bank" + PaymentHistoryLine."Run No." + FORMAT(PaymentHistoryLine."Line No.");
    //  IF STRLEN(PaymentInformationId) > 35 THEN
    //    PaymentInformationId := COPYSTR(PaymentInformationId,STRLEN(PaymentInformationId) - 34);
    //
    //  AddElement(XMLNodeCurr,'PmtInfId',PaymentInformationId,'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'PmtMtd','TRF','', XMLNewChild);
    //
    //  AddElement(XMLNodeCurr,'BtchBookg','false','', XMLNewChild);
    //
    //  AddElement(XMLNodeCurr,'PmtTpInf','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  IF PaymentHistoryLine.Urgent THEN
    //    AddElement(XMLNodeCurr,'InstrPrty','HIGH','', XMLNewChild)
    //  ELSE
    //    AddElement(XMLNodeCurr,'InstrPrty','NORM','', XMLNewChild);
    
    //  AddElement(XMLNodeCurr,'SvcLvl','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Cd','SEPA','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //HDU20130909>> Slashed off
    //  AddElement(XMLNodeCurr,'CtgyPurp','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //  AddElement(XMLNodeCurr,'Cd','SUPP','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //HDU20130909<<
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'ReqdExctnDt',FORMAT(PaymentHistoryLine.Date,0,9),'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'Dbtr','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Ctry',COPYSTR(CompanyInfo."Country/Region Code",1,2),'', XMLNewChild);
    //  AddressLine1 := DELCHR(CompanyInfo.Address,'<>') + ' ' + DELCHR(CompanyInfo."Address 2",'<>');
    //  AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine1,1,70),'', XMLNewChild);
    //  AddressLine2 := DELCHR(CompanyInfo."Post Code",'<>') + ' ' + DELCHR(CompanyInfo.City,'<>');
    //  AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'DbtrAcct','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  BankAcc.GET(PaymentHistoryLine."Our Bank");
    //  AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(BankAcc.IBAN,1,34)),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  GLSetup.GET;
    //  AddElement(XMLNodeCurr,'Ccy',GLSetup."LCY Code",'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'DbtrAgt','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'BIC',COPYSTR(BankAcc."SWIFT Code",1,11),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'ChrgBr','SLEV','', XMLNewChild);
    //HDU20131002<<
    
      AddElement(XMLNodeCurr,'CdtTrfTxInf','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'PmtId','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'EndToEndId',COPYSTR(PaymentHistoryLine.Identification,1,35),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'Amt','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
      AddElement(XMLNodeCurr,'InstdAmt',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
      AddAttribute(XMLDomDoc,XMLNewChild,'Ccy','EUR');
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'CdtrAgt','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      //AddElement(XMLNodeCurr,'BIC',COPYSTR(PaymentHistoryLine."SWIFT Code",1,11),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'Cdtr','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'Nm',PaymentHistoryLine."Account Holder Name",'', XMLNewChild);
      //AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
      //XMLNodeCurr := XMLNewChild;
    
      //AddElement(XMLNodeCurr,'Ctry',COPYSTR(PaymentHistoryLine."Acc. Hold. Country/Region Code",1,2),'', XMLNewChild);
    
      //AddElement(XMLNodeCurr,'AdrLine',PaymentHistoryLine."Account Holder Address",'', XMLNewChild);
      //AddressLine2 := DELCHR(PaymentHistoryLine."Account Holder Post Code",'<>') + ' ' +
      //                DELCHR(PaymentHistoryLine."Account Holder City",'<>');
      //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
      //XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'CdtrAcct','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(PaymentHistoryLine.IBAN,1,34)),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      CLEAR(UnstructuredRemitInfo);
      CLEAR(TempUnstructuredRemitInfo);
      BreakRemitInfoLoop := FALSE;
      DetailLine.SETCURRENTKEY("Our Bank",Status,"Connect Batches","Connect Lines",Date);
      DetailLine.SETRANGE("Our Bank",PaymentHistoryLine."Our Bank");
      DetailLine.SETFILTER(Status,'%1|%2|%3',DetailLine.Status::"In process",DetailLine.Status::Posted,DetailLine.Status::Correction);
      DetailLine.SETRANGE("Connect Batches",PaymentHistoryLine."Run No.");
      DetailLine.SETRANGE("Connect Lines",PaymentHistoryLine."Line No.");
      IF DetailLine.FIND('-') THEN REPEAT
        TempUnstructuredRemitInfo := UnstructuredRemitInfo;
        CASE DetailLine."Account Type" OF
          DetailLine."Account Type"::Vendor:
            BEGIN
              IF VendLedgEntry.GET(DetailLine."Serial No. (Entry)") THEN BEGIN
                IF TempUnstructuredRemitInfo = '' THEN
                  TempUnstructuredRemitInfo := VendLedgEntry."External Document No."
                ELSE
                  TempUnstructuredRemitInfo := TempUnstructuredRemitInfo + ', ' + VendLedgEntry."External Document No.";
                IF STRLEN(TempUnstructuredRemitInfo) <= 140 THEN
                  UnstructuredRemitInfo := TempUnstructuredRemitInfo
                ELSE
                  BreakRemitInfoLoop := TRUE;
              END;
            END;
          DetailLine."Account Type"::Customer:
            BEGIN
              IF CustLedgEntry.GET(DetailLine."Serial No. (Entry)") THEN BEGIN
                IF TempUnstructuredRemitInfo = '' THEN
                  TempUnstructuredRemitInfo := CustLedgEntry."Document No."
                ELSE
                  TempUnstructuredRemitInfo := TempUnstructuredRemitInfo + ', ' + CustLedgEntry."Document No.";
                IF STRLEN(TempUnstructuredRemitInfo) <= 140 THEN
                  UnstructuredRemitInfo := TempUnstructuredRemitInfo
                ELSE
                  BreakRemitInfoLoop := TRUE;
              END;
            END;
        END;
      UNTIL BreakRemitInfoLoop OR (DetailLine.NEXT = 0) ;
    
      IF UnstructuredRemitInfo <> '' THEN BEGIN
        AddElement(XMLNodeCurr,'RmtInf','','', XMLNewChild);
        XMLNodeCurr := XMLNewChild;
        AddElement(XMLNodeCurr,'Ustrd',UnstructuredRemitInfo,'', XMLNewChild);
        XMLNodeCurr := XMLNodeCurr.parentNode;
      END ELSE IF (PaymentHistoryLine."Description 1" <> '') THEN BEGIN
        AddElement(XMLNodeCurr,'RmtInf','','', XMLNewChild);
        XMLNodeCurr := XMLNewChild;
        AddElement(XMLNodeCurr,'Ustrd',COPYSTR(PaymentHistoryLine."Description 1",1,140),'', XMLNewChild);
        XMLNodeCurr := XMLNodeCurr.parentNode;
      END;
    
      XMLNodeCurr := XMLNodeCurr.parentNode;
      //XMLNodeCurr := XMLNodeCurr.parentNode;
    
      //HDU20130918>>
      //PaymentHistoryLine.WillBeSent;
      PaymentHistoryLine2 := PaymentHistoryLine;
      PaymentHistoryLine2.WillBeSent;
      //HDU20130918<<
    UNTIL PaymentHistoryLine.NEXT =0 ;
    

    Een hoop uitgeslashed, maar misschien kan je er iets mee. De indentation is veranderd maar zo het er nu uitziet moet het toch wel een keer geaccepteerd worden.
    Echter hun IT afdeling heeft een iets andere werkwijze dan in het normale bedrijfsleven. Trial en error, maar bij de 1e gelijk terugbouncen.

    Ander probleem maar nu ABN AMRO, die overigens wel duidelijk is
    Bij incasso via SEPA rolt 11000012 er een negatief bedrag uit.
    Dat wordt ook niet geaccepteerd.
    Heeft iemand ervaring met dit?


    Incasso is Report 11000013 (zojuist vernomen 22-11-2013)

    Groeten en lang leve de standaardisering die wederom om SEPA wordt geholpen.
    :P
  • HansDuttingHansDutting Member Posts: 25
    BNG heeft de opzet goedgekeurd

    BNG heeft mijn opzet in bovenstaande post goedgekeurd. \:D/
    Feel free to use.

    Er kwam nog wel een vraag om hashtotalen bij te leveren (?????) ](*,)
    Volgens mij doe je dat met CLIEOP en niet met XML.
    Totalen en regeltotalen zijn opgenomen in de XML. ](*,)
    Dit was trouwens een andere ambtenaar die dat aan mijn klant vroeg.
    Is er nog iemand dan behalve greys die tegen deze muur oploopt?
    Ik begin onderhand te begrijpen waarom ICT projecten bij de overheid vaak gedoemd zijn om te mislukken.

    Succes iedereen.
    Inmiddels de PAIN 008 gemerged, ben benieuwd hoe dat gaat lopen bij klanten. :roll:

    Groeten.
    Hans D.
  • mdPartnerNLmdPartnerNL Member Posts: 801
    BNG heeft de opzet goedgekeurd

    BNG heeft mijn opzet in bovenstaande post goedgekeurd. \:D/
    Feel free to use.

    Inmiddels de PAIN 008 gemerged, ben benieuwd hoe dat gaat lopen bij klanten. :roll:

    Bedankt voor je updates. Ga het volgende week ook proberen. Met pain 008 bedoel je codeunit 11000011 ?
  • HansDuttingHansDutting Member Posts: 25
    PAIN008 is nieuw is R11000013 SEPA ISO20022 Pain 008.001.02
    Volgens mij is dit Incasso, ik ben nog niet volledig gebriefd door mijn financiele collega.

    Ben nog niet helemaal klaar met BNG, want ze willen een geleidestaat erbij conform SHA-01.
    Zegt mij niets maar komt er waarschijnlijk op neer dat er een controleberekening losgaat die een code genereert denk ik.
    Moet dat nog uitzoeken.
    We komen er wel hoop ik.
    Mvg,
    Hans D.
  • greysgreys Member Posts: 26
    Hoi greys,

    Bestand bij mij is nu zover dat mijn klant weer een poging gaat wagen. (BIC code tag moest ook weg. wat dat ding daar doet is mij ook niet duidelijk maar als het niks doet zou je er geen last van moeten hebben.)
    Erg efficient meewerken is er niet bij. Het rapport zit inmiddels in de maatwerkrange en ik denk dat er meerdere gaan volgen. Gelukkig heb je standaard 100 reports!

    Ik heb nu dit resultaat: voor functie Export GroupHeader en ExportPaymentInformation. LET OP alleen BNG!
    ExportGroupHeader(XMLNodeCurr : Automation "'Microsoft XML, v3.0'.IXMLDOMNode")
    
    AddElement(XMLNodeCurr,'GrpHdr','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    MessageId := "Payment History"."Our Bank" + "Payment History"."Run No.";
    IF STRLEN(MessageId) > 35 THEN
      MessageId := COPYSTR(MessageId,STRLEN(MessageId) - 34);
    
    AddElement(XMLNodeCurr,'MsgId',MessageId,'', XMLNewChild);
    AddElement(XMLNodeCurr,'CreDtTm',FORMAT(CURRENTDATETIME,19,9),'', XMLNewChild);
    
    PaymentHistoryLine.RESET;
    PaymentHistoryLine.SETCURRENTKEY("Our Bank",Status,"Run No.",Order,Date);
    PaymentHistoryLine.SETRANGE("Our Bank","Payment History"."Our Bank");
    PaymentHistoryLine.SETRANGE("Run No.","Payment History"."Run No.");
    
    AddElement(XMLNodeCurr,'NbOfTxs',FORMAT(PaymentHistoryLine.COUNT,0,9),'', XMLNewChild);
    PaymentHistoryLine.CALCSUMS(Amount);
    AddElement(XMLNodeCurr,'CtrlSum',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'InitgPty','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'OrgId','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Othr','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Id',CompanyInfo."VAT Registration No.",'', XMLNewChild);
    
    ExportPaymentInformation(XMLNodeCurr : Automation "'Microsoft XML, v3.0'.IXMLDOMNode")
    AddElement(XMLNodeCurr,'PmtInf','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    PaymentInformationId := "Payment History"."Our Bank" +"Payment History"."Run No.";// + FORMAT(PaymentHistoryLine."Line No.");
    IF STRLEN(PaymentInformationId) > 35 THEN
      PaymentInformationId := COPYSTR(PaymentInformationId,STRLEN(PaymentInformationId) - 34);
    
    AddElement(XMLNodeCurr,'PmtInfId',PaymentInformationId,'', XMLNewChild);
    AddElement(XMLNodeCurr,'PmtMtd','TRF','', XMLNewChild);
    
    //AddElement(XMLNodeCurr,'BtchBookg','false','', XMLNewChild);
    AddElement(XMLNodeCurr,'NbOfTxs',FORMAT(PaymentHistoryLine.COUNT,0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'CtrlSum',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
    
    AddElement(XMLNodeCurr,'PmtTpInf','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    //IF PaymentHistoryLine.Urgent THEN
    //  AddElement(XMLNodeCurr,'InstrPrty','HIGH','', XMLNewChild)
    //ELSE
    //  AddElement(XMLNodeCurr,'InstrPrty','NORM','', XMLNewChild);
    
    AddElement(XMLNodeCurr,'SvcLvl','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Cd','SEPA','', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //HDU20130909>> Slashed off
    //  AddElement(XMLNodeCurr,'CtgyPurp','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //  AddElement(XMLNodeCurr,'Cd','SUPP','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //HDU20130909<<
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'ReqdExctnDt',FORMAT("Payment History"."Creation Date",0,9),'', XMLNewChild);
    AddElement(XMLNodeCurr,'Dbtr','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'Ctry',COPYSTR(CompanyInfo."Country/Region Code",1,2),'', XMLNewChild);
    //AddressLine1 := DELCHR(CompanyInfo.Address,'<>') + ' ' + DELCHR(CompanyInfo."Address 2",'<>');
    //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine1,1,70),'', XMLNewChild);
    //AddressLine2 := DELCHR(CompanyInfo."Post Code",'<>') + ' ' + DELCHR(CompanyInfo.City,'<>');
    //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
    //XMLNodeCurr := XMLNodeCurr.parentNode;
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'DbtrAcct','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    BankAcc.GET("Payment History"."Our Bank");
    AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(BankAcc.IBAN,1,34)),'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //GLSetup.GET;
    //AddElement(XMLNodeCurr,'Ccy',GLSetup."LCY Code",'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'DbtrAgt','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    
    //AddElement(XMLNodeCurr,'BIC',COPYSTR(BankAcc."SWIFT Code",1,11),'', XMLNewChild);
    XMLNodeCurr := XMLNodeCurr.parentNode;
    XMLNodeCurr := XMLNodeCurr.parentNode;
    
    AddElement(XMLNodeCurr,'ChrgBr','SLEV','', XMLNewChild);
    //XMLNodeCurr := XMLNewChild;
    IF PaymentHistoryLine.FIND('-') THEN REPEAT
    
    //HDU20131002>>
    //  AddElement(XMLNodeCurr,'PmtInf','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  PaymentInformationId := PaymentHistoryLine."Our Bank" + PaymentHistoryLine."Run No." + FORMAT(PaymentHistoryLine."Line No.");
    //  IF STRLEN(PaymentInformationId) > 35 THEN
    //    PaymentInformationId := COPYSTR(PaymentInformationId,STRLEN(PaymentInformationId) - 34);
    //
    //  AddElement(XMLNodeCurr,'PmtInfId',PaymentInformationId,'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'PmtMtd','TRF','', XMLNewChild);
    //
    //  AddElement(XMLNodeCurr,'BtchBookg','false','', XMLNewChild);
    //
    //  AddElement(XMLNodeCurr,'PmtTpInf','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  IF PaymentHistoryLine.Urgent THEN
    //    AddElement(XMLNodeCurr,'InstrPrty','HIGH','', XMLNewChild)
    //  ELSE
    //    AddElement(XMLNodeCurr,'InstrPrty','NORM','', XMLNewChild);
    
    //  AddElement(XMLNodeCurr,'SvcLvl','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Cd','SEPA','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    
    //HDU20130909>> Slashed off
    //  AddElement(XMLNodeCurr,'CtgyPurp','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //  AddElement(XMLNodeCurr,'Cd','SUPP','', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //HDU20130909<<
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'ReqdExctnDt',FORMAT(PaymentHistoryLine.Date,0,9),'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'Dbtr','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Nm',CompanyInfo.Name,'', XMLNewChild);
    //  AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Ctry',COPYSTR(CompanyInfo."Country/Region Code",1,2),'', XMLNewChild);
    //  AddressLine1 := DELCHR(CompanyInfo.Address,'<>') + ' ' + DELCHR(CompanyInfo."Address 2",'<>');
    //  AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine1,1,70),'', XMLNewChild);
    //  AddressLine2 := DELCHR(CompanyInfo."Post Code",'<>') + ' ' + DELCHR(CompanyInfo.City,'<>');
    //  AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'DbtrAcct','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  BankAcc.GET(PaymentHistoryLine."Our Bank");
    //  AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(BankAcc.IBAN,1,34)),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  GLSetup.GET;
    //  AddElement(XMLNodeCurr,'Ccy',GLSetup."LCY Code",'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'DbtrAgt','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
    //  XMLNodeCurr := XMLNewChild;
    //
    //  AddElement(XMLNodeCurr,'BIC',COPYSTR(BankAcc."SWIFT Code",1,11),'', XMLNewChild);
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //  XMLNodeCurr := XMLNodeCurr.parentNode;
    //
    //  AddElement(XMLNodeCurr,'ChrgBr','SLEV','', XMLNewChild);
    //HDU20131002<<
    
      AddElement(XMLNodeCurr,'CdtTrfTxInf','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'PmtId','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'EndToEndId',COPYSTR(PaymentHistoryLine.Identification,1,35),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'Amt','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
      AddElement(XMLNodeCurr,'InstdAmt',FORMAT(PaymentHistoryLine.Amount,0,9),'', XMLNewChild);
      AddAttribute(XMLDomDoc,XMLNewChild,'Ccy','EUR');
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'CdtrAgt','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'FinInstnId','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      //AddElement(XMLNodeCurr,'BIC',COPYSTR(PaymentHistoryLine."SWIFT Code",1,11),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'Cdtr','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'Nm',PaymentHistoryLine."Account Holder Name",'', XMLNewChild);
      //AddElement(XMLNodeCurr,'PstlAdr','','', XMLNewChild);
      //XMLNodeCurr := XMLNewChild;
    
      //AddElement(XMLNodeCurr,'Ctry',COPYSTR(PaymentHistoryLine."Acc. Hold. Country/Region Code",1,2),'', XMLNewChild);
    
      //AddElement(XMLNodeCurr,'AdrLine',PaymentHistoryLine."Account Holder Address",'', XMLNewChild);
      //AddressLine2 := DELCHR(PaymentHistoryLine."Account Holder Post Code",'<>') + ' ' +
      //                DELCHR(PaymentHistoryLine."Account Holder City",'<>');
      //AddElement(XMLNodeCurr,'AdrLine',COPYSTR(AddressLine2,1,70),'', XMLNewChild);
      //XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      AddElement(XMLNodeCurr,'CdtrAcct','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'Id','','', XMLNewChild);
      XMLNodeCurr := XMLNewChild;
    
      AddElement(XMLNodeCurr,'IBAN',DELCHR(COPYSTR(PaymentHistoryLine.IBAN,1,34)),'', XMLNewChild);
      XMLNodeCurr := XMLNodeCurr.parentNode;
      XMLNodeCurr := XMLNodeCurr.parentNode;
    
      CLEAR(UnstructuredRemitInfo);
      CLEAR(TempUnstructuredRemitInfo);
      BreakRemitInfoLoop := FALSE;
      DetailLine.SETCURRENTKEY("Our Bank",Status,"Connect Batches","Connect Lines",Date);
      DetailLine.SETRANGE("Our Bank",PaymentHistoryLine."Our Bank");
      DetailLine.SETFILTER(Status,'%1|%2|%3',DetailLine.Status::"In process",DetailLine.Status::Posted,DetailLine.Status::Correction);
      DetailLine.SETRANGE("Connect Batches",PaymentHistoryLine."Run No.");
      DetailLine.SETRANGE("Connect Lines",PaymentHistoryLine."Line No.");
      IF DetailLine.FIND('-') THEN REPEAT
        TempUnstructuredRemitInfo := UnstructuredRemitInfo;
        CASE DetailLine."Account Type" OF
          DetailLine."Account Type"::Vendor:
            BEGIN
              IF VendLedgEntry.GET(DetailLine."Serial No. (Entry)") THEN BEGIN
                IF TempUnstructuredRemitInfo = '' THEN
                  TempUnstructuredRemitInfo := VendLedgEntry."External Document No."
                ELSE
                  TempUnstructuredRemitInfo := TempUnstructuredRemitInfo + ', ' + VendLedgEntry."External Document No.";
                IF STRLEN(TempUnstructuredRemitInfo) <= 140 THEN
                  UnstructuredRemitInfo := TempUnstructuredRemitInfo
                ELSE
                  BreakRemitInfoLoop := TRUE;
              END;
            END;
          DetailLine."Account Type"::Customer:
            BEGIN
              IF CustLedgEntry.GET(DetailLine."Serial No. (Entry)") THEN BEGIN
                IF TempUnstructuredRemitInfo = '' THEN
                  TempUnstructuredRemitInfo := CustLedgEntry."Document No."
                ELSE
                  TempUnstructuredRemitInfo := TempUnstructuredRemitInfo + ', ' + CustLedgEntry."Document No.";
                IF STRLEN(TempUnstructuredRemitInfo) <= 140 THEN
                  UnstructuredRemitInfo := TempUnstructuredRemitInfo
                ELSE
                  BreakRemitInfoLoop := TRUE;
              END;
            END;
        END;
      UNTIL BreakRemitInfoLoop OR (DetailLine.NEXT = 0) ;
    
      IF UnstructuredRemitInfo <> '' THEN BEGIN
        AddElement(XMLNodeCurr,'RmtInf','','', XMLNewChild);
        XMLNodeCurr := XMLNewChild;
        AddElement(XMLNodeCurr,'Ustrd',UnstructuredRemitInfo,'', XMLNewChild);
        XMLNodeCurr := XMLNodeCurr.parentNode;
      END ELSE IF (PaymentHistoryLine."Description 1" <> '') THEN BEGIN
        AddElement(XMLNodeCurr,'RmtInf','','', XMLNewChild);
        XMLNodeCurr := XMLNewChild;
        AddElement(XMLNodeCurr,'Ustrd',COPYSTR(PaymentHistoryLine."Description 1",1,140),'', XMLNewChild);
        XMLNodeCurr := XMLNodeCurr.parentNode;
      END;
    
      XMLNodeCurr := XMLNodeCurr.parentNode;
      //XMLNodeCurr := XMLNodeCurr.parentNode;
    
      //HDU20130918>>
      //PaymentHistoryLine.WillBeSent;
      PaymentHistoryLine2 := PaymentHistoryLine;
      PaymentHistoryLine2.WillBeSent;
      //HDU20130918<<
    UNTIL PaymentHistoryLine.NEXT =0 ;
    

    Een hoop uitgeslashed, maar misschien kan je er iets mee. De indentation is veranderd maar zo het er nu uitziet moet het toch wel een keer geaccepteerd worden.
    Echter hun IT afdeling heeft een iets andere werkwijze dan in het normale bedrijfsleven. Trial en error, maar bij de 1e gelijk terugbouncen.

    Ander probleem maar nu ABN AMRO, die overigens wel duidelijk is
    Bij incasso via SEPA rolt 11000012 er een negatief bedrag uit.
    Dat wordt ook niet geaccepteerd.
    Heeft iemand ervaring met dit?


    Incasso is Report 11000013 (zojuist vernomen 22-11-2013)

    Groeten en lang leve de standaardisering die wederom om SEPA wordt geholpen.
    :P


    Goed bezig Hans! Sommige banken vallen overigens ook nog over het feit dat € 35,20 als 35,2 in de xml terecht komt... Dus ik heb ook nog maar een aanpassing in het report gemaakt dat bedragen altijd met 2 decimalen worden uitgespuugd.

    Greys
  • tinoruijstinoruijs Member Posts: 1,226
    greys wrote:
    Ik heb de aanpassingen uit dit topic overgenomen in mijn eigen report, en ook ik heb bericht terug van BNG dat het bestand op zich juist is maar dat er per betaling een aparte batch wordt gemaakt, zoals hierboven ook wordt aangegeven. Dit resulteert vervolgens in een hoop extra werk, want elke batch moet worden getekend.

    Heb je toevallig ook al iets geprobeerd met 'BtchBookg'? Staat nu op 'false'. Zou het niet voldoende zijn om deze op 'true' te zetten?

    Tino Ruijs
    Microsoft Dynamics NAV specialist
  • rpjrpj Member Posts: 2
    Hallo mede-ontwikkelaars,

    Ik ben momenteel bezig met de SEPA export vanuit Navision 3.7. Heb dat inmiddels werkend voor RABO Telebankieren.
    Ben daarbij tegen dezelde problemen aangelopen als hierboven is geschetst. O.a. het decimalenprobleem bij ronde bedragen, het niet correct werken van de "WillBeSent" functie en het probleem van de meerdere batches.
    Dat laatste probleem dacht ik te kunnen oplossen via de BtchBooking tag, echter dat hielp niet. Behalve als deze optie expliciet op false staat, ligt het probleem in de layout van het bestand.
    Er dient maar 1 PmtInf tag in het XML bestand te staan, met per transactie een CdtTrfTxInf tag.
    Zie bijgaande afbeelding.

    Groeten,

    rpj
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Ook een vraag. De BIC code voor nederlandse betalingen is toch overbodig?

    Ik dacht ergens gelezen te hebben dat de bank deze altijd zelf opzoekt
  • HansDuttingHansDutting Member Posts: 25
    Heb je toevallig ook al iets geprobeerd met 'BtchBookg'? Staat nu op 'false'. Zou het niet voldoende zijn om deze op 'true' te zetten?

    Dat met die aparte batch heb ik ook gehad maar dat dacht ik te hebben opgelost door al de CdtTrfTxInf tags onder 1 PmtInf te zetten. (Zie ook vorige comment van rpj) Die boolean helpt niet.
    misschien ergens een parentnode terug/bij vergeten?
    Zie screenshot xml editor.

    Bij de incasso variant R11000013 is dit een instelling in de nieuwe tabel 1230. Een incasso krijgt een kenmerk FRST/RCUR en LST mee. en hij gaat dan een batch per kenmerk maken.
    Ook een vraag. De BIC code voor nederlandse betalingen is toch overbodig?

    Ik dacht ergens gelezen te hebben dat de bank deze altijd zelf opzoekt

    Klopt maar sommige banken willen deze nog steeds hebben, hoezo eenheid ](*,) ?. ERGER: bij het maken van het voorstel vraagt NAV er zelfs nog steeds om.
    Bij sommige banken is een NA (Not applicable) code prima. Die moet je dan wel inladen in de bankrekeningnummers klant/lev. Of de check SEPA aanpassen.
    In R110000013 zit de BIC code ook nog steeds.
    Goed bezig Hans! Sommige banken vallen overigens ook nog over het feit dat € 35,20 als 35,2 in de xml terecht komt... Dus ik heb ook nog maar een aanpassing in het report gemaakt dat bedragen altijd met 2 decimalen worden uitgespuugd.

    Greys

    En bij de RABO inderdaad, 2 decimalen benodigd voor bedrag. Dit was ook een leuke een klant met 5.0SP1RU2. Maatwerkrapport van gemaakt vanuit 6.1 fob.

    En ik heb weer een nieuwe: Klant meldt zojuist dat een bank het bestand niet kan inlezen vanwege extensie ".xml" het wordt steeds doller.
    Heeft iemand een emailadres van een europarlementarier?

    Wordt een mooi topic zo met tips.

    Misschien wordt het wel tijd voor een universeel rapport met instellingsmogelijkheden per bank op de bankrekening kaart.
    Eens kijken of ik daarvoor wat vrije tijd kan spenderen.

    Groeten,
    Hans D.
  • QR_NicoleQR_Nicole Member Posts: 6
    Hallo allemaal,

    Ik lees met belangstelling alle topics over SEPA, heerlijk die Europese 'standaard' waar alle NL banken vervolgens vrolijk van afwijken... ](*,)

    Nu loop ik bij een klant met ING Inside Business er tegenaan dat het incasso bestand (Core) niet ingelezen kan worden omdat er geen rekening gehouden wordt met de 5 dagen aanlevertermijn.
    Ik heb een factuur met vervaldatum vandaag, die dus vandaag in mijn TB voorstel opgehaald wordt, maar vervolgens ook transactiedatum vandaag meekrijgt, en niet vandaag + 5 dagen.
    Bij een andere klant die met de ABN bankiert gingen de incasso's wel gewoon goed, maar eigenlijk lijkt me dit toch fout?

    Heeft iemand de SEPA incasso's al draaiende bij een klant (op NAV2013)?
    En toevallig ook met ING Inside Business?

    Nicole
  • MaximusMaximus The NetherlandsMember Posts: 105
    Hoi,

    ik heb er ook nog één: probleem met de WillBeSent functie was nog niet helemaal opgelost. Er moest altijd twee keer een bestand gegenereerd worden vanuit NAV omdat het eerste bestand niet geaccepteerd werd door de bank en het tweede vreemd genoeg wel. Analyse leerde dat er verschillen zaten in de bestanden. Onderstaande oplossing is wel OK. WillBeSent moet als allerlaatste aangeroepen worden:

    Deze regel moet uit:


    //PaymentHistoryLine.WillBeSent;

    En vervolgens na de

    UNTIL PaymentHistoryLine.NEXT = 0;

    gewoon nog eens er doorheen loopen. Niet efficient maar omdat de WillBeSent een Key Field wijzigt onvermijdelijk:

    PaymentHistoryLine.RESET;
    PaymentHistoryLine.SETCURRENTKEY("Our Bank","Run No.","Line No.");
    PaymentHistoryLine.SETRANGE("Our Bank","Payment History"."Our Bank");
    PaymentHistoryLine.SETRANGE("Run No.","Payment History"."Run No.");
    IF PaymentHistoryLine.FINDSET THEN REPEAT
    PaymentHistoryLine.WillBeSent;
    UNTIL PaymentHistoryLine.NEXT = 0;


    Gr. Max
  • HansDuttingHansDutting Member Posts: 25
    Daar ben ik weer in de SEPA Soap.
    We hebben het bij ons al als ZEEPAARD en ZEEPE(E)RD gedoopt.

    De ABN incasso is er bijna doorheen.
    Ware het niet dat daar de BIC code weer voor de nodige frustraties zorgt.
    De klant zegt "haal maar weg".
    Komt dus terug: "nee er moet staan NOTPROVIDED"
    Gedaan bestand weg, komt tot overmaat van ramp de financieel directeur met een addendum van de ABN aanzetten: "Hebben jullie deze al gezien?" ](*,)

    In plaats van de BIC tag moet er staan Id :roll:

    Dus even opletten in Report 11000013 De BIC komt 2x voor.
    <CdtrAgt>
      <FinInstnId>
        <Othr>
          <Id>NOTPROVIDED</Id>
        </Othr>
      </FinInstnId>
    </CdtrAgt >
    

    en in de regels:
    <DbtrAgt>
      <FinInstnId>
        <Othr>
          <Id>NOTPROVIDED</Id>
        </Othr>
      </FinInstnId>
    </DbtrAgt >
    

    Om jullie te vermaken van het leed aan onze kant nog even een leuk verhaal:
    Omdat de BIC niet nodig was, zei de bank tegen onze klant [-X , en we het bestand de deur uit moesten hebben dachten de klant en ik: vul gewoon overal als dummy de BIC van ABN in.
    NIET DOEN: Ze verwerken dan hun eigen bankrekeningnummers en de anderen worden geweigerd. Want ABN checkt toch de BIC code!!!
    Het is een heel gedoe om dan de rest weer opnieuw aan te leveren. Want welke goedgekeurd waren konden ze niet vertellen. :mrgreen:
    Ok, dat was echt stom gepruts van mijn kant. :oops:

    De ING daarentegen keurde Standaard NAV SEPA volgens mij 11000012 goed. =D> =D> =D>

    De vraag van het hashtotaalbestand kwam weer ter sprake bij onze klant en de BNG.
    Nog steeds niemand die die vraag heeft gekregen en evt. een oplossing daarvoor heeft? (zie eerder in dit topic door mij aangekaart)

    Het was laatst ook op het nieuws: Nederlandse bedrijven zijn nog niet klaar voor SEPA.
    Ik denk dat we het laatste nog niet gezien hebben.
    Het is in ons geval erg lastig als ontwikkelaar aan het eind van de keten te zitten en je afhankelijk bent van je klant ook wat betreft testen.

    Wel weer een hoop te lachen straks tijdens de kerstborrel.

    Groeten
    Hans D.
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Heb voor wat oude klanten dit nog zelf gemaakt in COBOL en de bestanden zijn goedgekeurd bij de ING.

    Q.
    'BtchBookg'? Staat nu op 'false'
    A.
    Heb ik weggehaald

    Q.
    hashtotalen
    A.
    is optioneel, dus is niet benodigd

    Q.
    De eerste keer aanleveren.
    A.
    Alle SEPA incasso's zijn voor de bank nieuwe contracten (al heb je eerder via CLIEOP03 geincasseerd) dus zet de batch met notepad op FRST.
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Ter info:
    Na installatie NAV 2013R2 moet je eerst deze fobs inlezen:

    - URObjects.NL.35701.fob
    (van rollup)

    - CU1Objects.NL.fob
    (van CumulativeUpdate1NAV2013R2NL)
  • mdPartnerNLmdPartnerNL Member Posts: 801
    Met deze wijzigingen werkt het goed maar een betaling wordt dan ook per direct uitgevoerd. Als je dat niet wil vervang de regel met ' ReqdExctnDt' door deze:

    IF PaymentHistoryLine.FIND('-') THEN begin
    AddElement(XMLNodeCurr,'ReqdExctnDt',FORMAT(PaymentHistoryLine.Date,0,9),'', Date",0,9),'', XMLNewChild);
    end;
  • mfhmfh The NetherlandsMember Posts: 25
    Dag mensen,

    Heb met veel interesse jullie verhalen gelezen. Veel ervan herkenbaar, en zelf eind vorig jaar ook tegenaan gelopen. Had ik toen maar van dit topic geweten :wink:

    Even een update van mijn kant vanwege een grap die Rabobank uithaalt in de laatste release van Rabo Cash Management (Mei 2014).
    Voorheen konden de (aangepaste) xml's probleemloos door RCM worden verwerkt, maar nu loopt de import fout op de CtgyPurp. Vanuit Navision wordt hiervoor de code 'SUPP' gestuurd, maar deze blijkt door RCM niet (meer) ondersteund. Volgens Rabo mag het iedere willekeurige andere code zijn.
    Heb het opgelost door in R1100012 de code aan te passen naar 'CASH'.
    AddElement(XMLNodeCurr,'CtgyPurp','','',XMLNewChild);
    XMLNodeCurr := XMLNewChild;
    //AddElement(XMLNodeCurr,'Cd','SUPP','',XMLNewChild);  //MHITZ001.o
    AddElement(XMLNodeCurr,'Cd','CASH','',XMLNewChild);    //MHITZ001.n
    XMLNodeCurr := XMLNodeCurr.parentNode;
    

    Hartelijke groet,
    Michiel Hageman
    Regards,
    Michiel
  • Marije_BrummelMarije_Brummel OlstMember, Moderators Design Patterns Posts: 4,262
    Hoi Michiel,

    Dat is bij de ABN ook zo, maar verder is de laatste rollup update best goed, veel bugs die je hier leest zijn uiteindelijk opgelost.

    Soms is wachten zo gek nog niet.

    8)
Sign In or Register to comment.