datumberekening in een report

Adriaan2kAdriaan2k Member Posts: 159
edited 2007-03-05 in NAV Dutch speaking only
ik heb een vraagje mbt een datumberekening op een report. Ik wil hierin een veld hebben dat aangeeft dat de klant bijv. in 2 of 3 termijnen mag betalen na resp. 1 maand na fakt.datum en 2 mnd na de faktuur boekingsdatum. Simpel een global aanmaken met als datatype 'date' en dan date1:="sales invoice header"."posting date"+30D werkt niet.
Wie kan mij helpen. Dit moet m.i. eigenlijk heel simpel zijn maar mijn
kennis in c/side is te mager. Alvast bedankt voor jullie reacties.
mvg Adriaan

Comments

  • krikikriki Member, Moderator Posts: 9,112
    2 mogelijkheden:
    date1 := "sales invoice header"."posting date" + 30;
    
    OF
    date1 := CALCDATE("sales invoice header"."posting date",'<30D>');
    
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • Adriaan2kAdriaan2k Member Posts: 159
    kriki wrote:
    2 mogelijkheden:
    date1 := "sales invoice header"."posting date" + 30;
    
    OF
    date1 := CALCDATE("sales invoice header"."posting date",'<30D>');
    

    ok, ik ga dat morgen meteen proberen, ik was een eind op weg en had de 2e optie zelf al, echter zonder resultaat waarschijnlijk vanwege verkeerde quotes. Alvast bedankt !
    Beide horen zeker thuis in de on-after-get-record van het data-item ?
    mvg Adriaan
  • krikikriki Member, Moderator Posts: 9,112
    Adriaan2k wrote:
    Beide horen zeker thuis in de on-after-get-record van het data-item ?
    Correct.
    De OnPreSection- en OnPostSection- triggers zouden ENKEL mogen gebruikt worden om te beslissen of iets moet geprint worden of niet (OnPreSection) en om iets te doen juist na het printen van een section (OnPostSection).
    Andere dingen moeten in de OnAfterGetRecord-triggers.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • Adriaan2kAdriaan2k Member Posts: 159
    ik heb beide oplossingen geprobeerd maar alleen de eerste werkt (en bedankt daarvoor). De 2e mogelijkheid is wel mooier omdat je daar ipv 30D ook 1M zou kunnen ingeven. Ik krijg echter de foutmelding:
    "typeconversie is niet mogelijk omdat een van de zijden van een niet toegestaan type is........Date:= Text "

    misschien dat je nog even een tip hebt ?
    mvg Adriaan
  • krikikriki Member, Moderator Posts: 9,112
    Oops :oops:
    vergissing! het moet zijn:
    date1 := CALCDATE('<30D>',"sales invoice header"."posting date");
    
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • WaldoWaldo Member Posts: 3,412
    Wees gerust, niemand heeft het gemerkt :mrgreen::wink: .

    Eric Wauters
    MVP - Microsoft Dynamics NAV
    My blog
  • Adriaan2kAdriaan2k Member Posts: 159
    hehe...inderdaad. maar het werkt dus bedankt voor de hulp. Nu moet ik alleen nog een manier vinden om deze 2 datumberekeningen in een tekstveld op te nemen.
    mvg Adriaan
  • WaldoWaldo Member Posts: 3,412
    Als ik me niet vergis, kan je gewoon die "CALCDATE('<30D>',"sales invoice header"."posting date")" in de SourceExpr steken... :-k

    Eric Wauters
    MVP - Microsoft Dynamics NAV
    My blog
  • Adriaan2kAdriaan2k Member Posts: 159
    Waldo wrote:
    Als ik me niet vergis, kan je gewoon die "CALCDATE('<30D>',"sales invoice header"."posting date")" in de SourceExpr steken... :-k
    je bent nog laat bezig ;-) ik wil op een faktuur een tekstveld opnemen waarin de datumberekening staat. Ik heb nu tekst:='blablablabla' en dat werkt prima. Als ik het datumberekeningsveld daarin toevoeg wordt dit als echte tekst weergegeven en niet als datum.
    mvg Adriaan
  • WaldoWaldo Member Posts: 3,412
    Hoe bedoel je, als echte tekst?
    Wat plaats je in SourceExpr?
    Dit al eens geprobeerd:
    FORMAT(CALCDATE('<30D>',"sales invoice header"."posting date"))
    je bent nog laat bezig
    Dat gebeurt wel eens :mrgreen:

    Eric Wauters
    MVP - Microsoft Dynamics NAV
    My blog
  • Adriaan2kAdriaan2k Member Posts: 159
    Waldo wrote:
    Hoe bedoel je, als echte tekst?
    Wat plaats je in SourceExpr?
    Dit al eens geprobeerd:
    FORMAT(CALCDATE('<30D>',"sales invoice header"."posting date"))
    je bent nog laat bezig
    Dat gebeurt wel eens :mrgreen:
    haha...ik ken dat. ach ja, Navision is a way of life.

    Ik zit met het volgende:

    date1 :=CALCDATE('<1M>', "Sales Invoice Header"."Posting Date");
    date2 :=CALCDATE('<2M>', "Sales Invoice Header"."Posting Date");

    BEGIN
    IF Cust."Customer Price Group"='PART 2' THEN
    termtext:= 'U mag het bedrag ook overmaken in 2 maandelijkse termijnen van € te voldoen per heden en per' ELSE
    termtext:='';

    IF Cust."Customer Price Group"='PART 3' THEN
    termtext1:= 'U mag het bedrag ook overmaken in 3 maandelijkse termijnen van € te voldoen per heden, per en per' ELSE
    termtext1:='';

    END;

    op de lege plaatsen wil ik dus de berekende datums vullen maar als ik daar de formule zet, wordt dit als letterlijke tekst meegenomen. Misschien dat ik een hele andere richting op moet denken ?
    mvg Adriaan
  • Adriaan2kAdriaan2k Member Posts: 159
    de lege plaatsen in mijn vorige post zijn dus weggevallen...... ](*,)
    mvg Adriaan
  • WaldoWaldo Member Posts: 3,412
    Dit is een long shot:
    al eens met STRSUBSTNO gewerkt?
    dan kan u %1 e.d. vervangen door een datum.

    In uw voorbeeld zou dit het volgende kunnen zijn:
    date1 :=CALCDATE('<1M>', "Sales Invoice Header"."Posting Date"); 
    date2 :=CALCDATE('<2M>', "Sales Invoice Header"."Posting Date"); 
    
    IF Cust."Customer Price Group"='PART 2' THEN 
    termtext:= STRSUBSTNO('U mag het bedrag ook overmaken in 2 maandelijkse termijnen van € te voldoen per heden en per %1', date1); 
    ELSE 
    termtext:=''; 
    
    IF Cust."Customer Price Group"='PART 3' THEN 
    termtext1:= STRSUBSTNO('U mag het bedrag ook overmaken in 3 maandelijkse termijnen van € te voldoen per heden, per %1 en per %2', date1, date2); 
    ELSE 
    termtext1:=''; 
    
    

    Ik raad ook aan om de tekst in een tekstconstante te plaatsen ... zodat je multilanguage kunt werken.

    Eric Wauters
    MVP - Microsoft Dynamics NAV
    My blog
  • Adriaan2kAdriaan2k Member Posts: 159
    ik heb nog nooit met een substr gewerkt en begrijp ook de %1 niet, maar ik ga dit morgen proberen. Voor vandaag is het genoeg geweest. Ik plaats morgen weer een post met het resultaat. In ieder geval erg bedankt tot dusver. mvgr. Adriaan
    mvg Adriaan
  • WaldoWaldo Member Posts: 3,412
    No problem :wink:

    Staat trouwens mooi uitgelegd in de C/SIDE help:
    STRSUBSTNO (String)
    Use this function to replace %1, %2, %3... and #1, #2, #3... fields in a string with the values you provide as optional parameters.

    NewString := STRSUBSTNO(String [,Value1, ...])
    NewString

    Data type: text constant or code

    The result after the system substitutes the corresponding values in the '#' and '%' fields.

    String

    Data type: text constant or code

    A string containing '#' and/or '%' fields. The % fields are replaced by the values with their full lengths, while # fields are replaced by the values truncated to the length of the # field.

    Value1,...

    Data type: any

    One or more values (expressions) you want to insert into String. You can specify up to 10 values.

    Example
    This example shows how to use the STRSUBSTNO function.

    Str := Text000;
    AccountNo := 3452;
    MESSAGE(Text001, Str);
    Str := STRSUBSTNO(Str, AccountNo, 2345 + 5462);
    MESSAGE(Text002, Str);

    Veel succes!

    Eric Wauters
    MVP - Microsoft Dynamics NAV
    My blog
  • Adriaan2kAdriaan2k Member Posts: 159
    Het werkt perfect !

    kunnen jullie me nu nog met één ding helpen mbt deze post. Ik heb in het report, in de onaftergetrecord van het data-item "Sales invoice line" onderstaande gezet (tezamen met de vorige tips). Ook staat in de Onpredataitem het commande createtotals met daarin o.a. tot2,tot3,tot2r en tot3r. Ondanks de plaatsing van de velden in de footer krijg ik toch geen totalen maar alleen de berekende velden van de laatste 'sales invoice line' regel. Hoe kan ik het totaal krijgen ?

    tot2:="Sales Invoice Line"."Amount Including VAT"/2;
    tot3:="Sales Invoice Line"."Amount Including VAT"/3;

    tot2r:=round(tot2,0.01);
    tot3r:=round(tot3,0.01);
    mvg Adriaan
  • MaximusMaximus Member Posts: 105
    Heb je in de properties van het dataitem bij Totalfields aangegeven welke velden getotaliseerd moeten worden?
  • Adriaan2kAdriaan2k Member Posts: 159
    Maximus wrote:
    Heb je in de properties van het dataitem bij Totalfields aangegeven welke velden getotaliseerd moeten worden?

    de aangemaakte velden tot2, tot3 en tot2r en tot3r staan al in het commande CREATETOTALS. Deze velden staan niet in de veldenlijst die ik kan selecteren voor de propertie 'Totalfiels'. :-k
    mvg Adriaan
  • MaximusMaximus Member Posts: 105
    Natuurlijk, ik zat te slapen. Waarom zet je niet op de OnAfterGetRecord:

    tot2:= tot2 + "Sales Invoice Line"."Amount Including VAT"/2;
    tot3:= tot3 + "Sales Invoice Line"."Amount Including VAT"/3;
  • Adriaan2kAdriaan2k Member Posts: 159
    Maximus wrote:
    Natuurlijk, ik zat te slapen. Waarom zet je niet op de OnAfterGetRecord:

    tot2:= tot2 + "Sales Invoice Line"."Amount Including VAT"/2;
    tot3:= tot3 + "Sales Invoice Line"."Amount Including VAT"/3;

    Ha Maximus, het lukt me toch niet. Als ik 2 velden aanmaak met als sourcecode resp. tot2r en tot3r , dan werken die velden wel in de footer section. Maar als ik ze opneem in de onaftergetrecord van de salesline, dan komt er toch een vreemd bedrag in de substr te staan. Nog ideeën ?
    mvg Adriaan
  • MaximusMaximus Member Posts: 105
    Zijn het Globals of Locals?
  • Adriaan2kAdriaan2k Member Posts: 159
    het zijn globals, ik heb 4 globals aangemaakt, zie onderstaand:
    Name DataType Subtype Length
    tot2 Decimal
    tot3 Decimal
    tot2r Decimal
    tot3r Decimal

    en deze gebruik ik op de volgende manier in de onaftergetrecord van dataitem 'sales invoice line':

    date1 :=CALCDATE('<1M>', "Sales Invoice Header"."Posting Date");
    date2 :=CALCDATE('<2M>', "Sales Invoice Header"."Posting Date");

    tot2:="Sales Invoice Line"."Amount Including VAT"/2;
    tot3:="Sales Invoice Line"."Amount Including VAT"/3;

    tot2r:=ROUND(tot2,0.01);
    tot3r:=ROUND(tot3,0.01);

    IF Cust."Customer Price Group"='PART 2' THEN
    term2:= STRSUBSTNO('U mag het bedrag ook overmaken in 2 maandelijkse termijnen van € %2 te voldoen per heden en per %1.',
    date1,tot2r) ELSE
    term2:='';

    IF Cust."Customer Price Group"='PART 3' THEN
    term3:= STRSUBSTNO('U mag het bedrag ook overmaken in 3 maandelijkse termijnen van € %3 te voldoen per heden, per %1 en per %2.',
    date1,date2,tot3r) ELSE
    term3:='';

    De term-teksten komen in de 'sales invoice line'-footer in het report.

    Kun je hier wat mee ?
    mvg Adriaan
  • MaximusMaximus Member Posts: 105
    Je moet sowieso dit op de OnAfterGetRecord zetten:

    tot2:= tot2 + "Sales Invoice Line"."Amount Including VAT"/2;
    tot3:= tot3 + "Sales Invoice Line"."Amount Including VAT"/3;

    dit zorgt ervoor dat bij iedere verkoopfactuurregel die voorbijkomt de waarde van Bedrag incl BTW bij tot2 opgeteld wordt. Als alle regels voorbij zijn gekomen en de footersessie komt aan de beurt bevat deze variabele een totaal die je kan laten afdrukken in een textbox met sourceexpression tot2 en tot3.
  • Adriaan2kAdriaan2k Member Posts: 159
    Ha Maximus,

    alles werkt. Bedankt voor de hulp en de tips !
    mvg Adriaan
Sign In or Register to comment.