Re: Befehle für Daten holen und setzen

19. Mai 2011 09:12

zu 1)
das habe ich schon bewusst so gemacht.

zu 2)
das verstehe ich nicht wirklich..

zu 3)
die Idee ist, dass bei einem Zahlungsbedingungscode das zugehörige Enndatum angedruckt wird, bis wann die Rechnung bezaht sein muss.
Ein Beispiel:
Zahlungsbedingugscode 10/2, bedeutet 10 Tage bei 2% Skonto oder 30 Tage. Nach 30 Tage muss dann die Rechung spätestens bezahlt sein.
Ich möchte das hier nach 30 Tagen das späteste Zahldatum auf Grundlage des Buchungsdatums angezeight wird.
=> bei 10/2 (spätestens 30 Tage) bedeutet dann bei Buchungsdatum 01.01.11 => 01.02.11

Hoffe das ist so verständlich.

Un das mit dem Code, ich dachte das könnte so funktionieren...

Re: Befehle für Daten holen und setzen

19. Mai 2011 09:39

Sebastian Pfliegel hat geschrieben:3. Was willst du mit '<30D>' bezwecken? Du brauchst keine Größer-/Kleinerzeichen.
Das ist nicht ganz korrekt.
Da eine Datumsformel sprachabhängig unterschiedliche Buchstaben erfordert, um dasselbe Ergebnis zu liefern (z. B.: ENU=30D, DEU=30T), muss bei hartcodierten Datumsformeln entweder über Textkonstanten oder über eine sprachneutrale Schreibweise gearbeitet werden.
Wird eine Datumsformel in spitzen Klammern eingetragen, so weiß NAV, dass diese Angabe in ENU erfolgt, egal, welche Sprache der Anwender gerade ausgewählt hat.

Re: Befehle für Daten holen und setzen

19. Mai 2011 09:43

Schau dir die Zahlungsbedingungen mal genauer an. Jedem Zahlungsbedigungscode können Formeln zu den Datumsberechnungen für Skonto/Fälligkeit hinterlegt werden. Dann sparst du dir die ganzen Fallunterscheidungen.

Und die doppelten Datumswerte entstehen wahrscheinlich, da du nicht alle Zahlungsbedigungscodes abfragst (siehe Sebastians Posting) und den Wert für "Zahlungsziel" vorher nicht leerst. Dann bleibt natürlich der Vorgangswert erhalten.

Re: Befehle für Daten holen und setzen

19. Mai 2011 16:58

Sorry für die späte Antwort und vielen Dank für eure Antworten.

Was bedeutet das denn konkret für mich bei der Umsetzung an Code. Wie schreibe ich zum einen meinen Code sprachunabhängig und wie frage ich alle Zahlungsbedigungen ab (habe ja in echt etliche mehr aufgenommen)? Und wie leere ich dann dan Werte der Datumsvariablen.

Re: Befehle für Daten holen und setzen

20. Mai 2011 08:41

Kann man sich die Zeitverschiebung aus dem Bedingungscode errechnen? Falls ja, solltest du das auf jeden Fall tun um dir eine 20-seitige "ELSE IF"-Kombination zu sparen. Außerdem brauchst du einen "ELSE"-Zweig falls gar kein Zahlungsbedingungscode zutrifft. Dann sollte das errechnete Datum auf 0D oder auf den heutigen Tag (je nach Definition) gesetzt werden.

Re: Befehle für Daten holen und setzen

20. Mai 2011 08:54

Das verstehe ich nicht ganz. Ich dachte mit dem Code "errechne" ich mit aus dem Zahlungsziel die Zeitverschiebung. So gebe ich doch ein Enddatum vor in Abhängigkeit eines Bedingungscodes.

Re: Befehle für Daten holen und setzen

20. Mai 2011 09:14

Zeitverschiebung bei SKonto-Fälligkeitsberechnung?
In der Regel gibts ja noch Toleranzzeiten, da finde ich es schon etwas kleinlich wegen +/-12 Stunden ein komplexes Konstrukt zu basteln, was entsprechend fehleranfälliger ist.

Re: Befehle für Daten holen und setzen

20. Mai 2011 09:44

Habe es jetzt so wie geplant hinbekommen. Die Zeitverschiebung speichere ich in einer Datumsvariablen. Ich möchte nun im letzten Schritt nach dieser beim Aufruf des Reports filtern können, wie geht das?

Re: Befehle für Daten holen und setzen

20. Mai 2011 09:58

Gar nicht. Eine einfache Variable (kein Array) speichert EINEN Wert. Du überschreibst dahingehend jedes mal diesen Wert. Du müsstest also diese Werte in eine Tabelle (kann theoretisch auch temporär sein) speichern. Meine Frage wäre, wenn das Zahlungsziel 'BLUBB' ist, welchen Wert hat dann das Datum? Aus deinem Stück Code ist immer noch nicht hervorgegangen was passiert wenn eben kein Zahlungscode zutrifft.

Re: Befehle für Daten holen und setzen

20. Mai 2011 10:48

Das mit dem Blub sagt mir nichts, aber hier mal der ganze Code.
Code:
IF Customer."Payment Terms Code" = '10/0' THEN
  Zahlungsziel := CALCDATE('<10D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '10/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '10/3' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '10/5' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/1' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/3' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/4' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '30/0' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '30/2' THEN
  Zahlungsziel := CALCDATE('<60D>',"Posting Date")
  ELSE IF Customer."Payment Terms Code" = '8/1' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/3' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/5' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/0' THEN
  Zahlungsziel := CALCDATE('<14D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '14/3/0' THEN
  Zahlungsziel := CALCDATE('<14D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '15/0' THEN
  Zahlungsziel := CALCDATE('<15D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '20/0' THEN
  Zahlungsziel := CALCDATE('<20D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '21/3' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '40/2' THEN
  Zahlungsziel := CALCDATE('<60D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '45/0' THEN
  Zahlungsziel := CALCDATE('<45D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '5/0' THEN
  Zahlungsziel := CALCDATE('<5D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '5/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '5/3' THEN
  Zahlungsziel := CALCDATE('<5D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '5/4' THEN
  Zahlungsziel := CALCDATE('<5D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '6/3' THEN
  Zahlungsziel := CALCDATE('<6D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '60/0' THEN
  Zahlungsziel := CALCDATE('<60D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '7/0' THEN
  Zahlungsziel := CALCDATE('<7D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '7/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/3 14/2' THEN
  Zahlungsziel := CALCDATE('<30D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/2 14/0' THEN
  Zahlungsziel := CALCDATE('<14D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '8/0' THEN
  Zahlungsziel := CALCDATE('<8D>',"Posting Date")
ELSE IF Customer."Payment Terms Code" = '90/0' THEN
  Zahlungsziel := CALCDATE('<90D>',"Posting Date")
ELSE Zahlungsziel := CALCDATE('<0D>',"Posting Date");


Zuvor wird die Variable geleert.

Gibt es denn sonst eine Möglichkeit auf das Zahlungsziel entweder fest im Code oder variabel beim öffnen beim starten des Reports zu filtern, so dass z.B. entweder über einen variablen oder festen Filter nur die offenen Rechnungen der nächsten 10 Tage angezeigt werden?

Re: Befehle für Daten holen und setzen

20. Mai 2011 11:10

Die Zahlungsbedingung von der Debitorenkarte auszulesen, ist aber suboptimal. Falls auf dem Beleg eine andere angegeben ist, kriegst du das auf diesem Weg nicht mit.

Re: Befehle für Daten holen und setzen

20. Mai 2011 11:13

Hört sich logisch an. Wie bekomme ich diesen Info denn Code technisch gezogen?

Re: Befehle für Daten holen und setzen

20. Mai 2011 11:40

Im Debitorenposten steht ja die Belegnummer. Allerdings stehen da auch Skontodatum und Fälligkeitsdatum schon drin :wink:

Re: Befehle für Daten holen und setzen

20. Mai 2011 13:11

Alles klar, danke. Oh mann wofür der große Aufwand, das Feld Fälligkeitsdatum war das was ich gesucht hatte.

Jetzt habe ich aber 2 Probleme mit einem Datumsfilter.

Auf dem Debitorenposten (Form 25) wird mir das Fälligkeitsdatum angezeigt. Wie bekomme ich hier einen ganz normal Feldfilter hin. Ziel ist nur die Fälligkeitsdaten von heute bis in 10 Tagen anzuzeigen.
Hatte es mit mehreren Varianten versucht, z.B. h+10T aber es klappt nicht.

Im Report ist es ähnlich. Habe den Code rausgeschmissen und das Feld Fälligkeitsdatum eingebaut.
Der Filter beim Aufruf des Reports, Fälligkeitsdatum aus den Debitorenposten, greift nicht. Wie bekomme ich das hin?

Re: Befehle für Daten holen und setzen

20. Mai 2011 13:23

Naja, ist doch ganz leicht. Als Beispiel ist heute der 20.05.11, dementsprechend müsste der Filter so aussehen: SETFILTER("Fälligkeitsdatum",'..30.05.2011')
Heißt du musst nur das aktuelle Datum nehmen und 10 Tage darauf rechnen.

Re: Befehle für Daten holen und setzen

20. Mai 2011 13:27

Sebastian Pfliegel hat geschrieben:Naja, ist doch ganz leicht. Als Beispiel ist heute der 20.05.11, dementsprechend müsste der Filter so aussehen: SETFILTER("Fälligkeitsdatum",'..30.05.2011')
Heißt du musst nur das aktuelle Datum nehmen und 10 Tage darauf rechnen.


EDIT:
Ja aber wie schreibt man das als Code: SETFILTER("Fälligkeitsdatum",'heute bis in 10 Tagen')? Und wie schreibt man das im Filter auf der Form (manuelle Eingabe)?

Re: Befehle für Daten holen und setzen

20. Mai 2011 13:54

Code:
SETFILTER("Fälligkeitsdatum",'..' + FORMAT(CALCDATE('<10D>',TODAY)));


Ich weiß nicht genau wo du filtern willst bzw. wo du den Filter vorbelegen willst: auf der Requestform im Optionen-Tab?

Re: Befehle für Daten holen und setzen

20. Mai 2011 13:57

Seb meinte:
Code:
Setrange("Due Date",today,calcdate('<+10D>',today))

Re: Befehle für Daten holen und setzen

20. Mai 2011 14:20

Danke für die Antwort. Ja genau auif der Request Form würde ich am liebsten das Feld vorfüllen mit dieser Info. Geht das? Kann man das denn einfach auch so als Feldfilter irgendwie eingeben?

EDIT: Habe den Filter man in OnPreDataItem ausprobiert, er greift jedoch auch nicht, weiß jemand woran das nun wieder liegt?

Re: Befehle für Daten holen und setzen

20. Mai 2011 14:26

Du kannst den Report so vorgefiltert aufrufen, natürlich. Vorlage ist beispielsweise der AB-Druck.

Re: Befehle für Daten holen und setzen

20. Mai 2011 14:32

Dann verstehe ich aber nicht, warum er bei mir nicht greift. Also es geht um Report 121, ich denke das ist Standard. Oder mache ich mal wieder.. was falsch????

Re: Befehle für Daten holen und setzen

20. Mai 2011 15:19

Stimmt, bei dem Report geht's nicht wie bei der VK-AB. Da muss man den Report als Variable anlegen, und kann dann mit settableview auf die DataItems Filter mitgeben.

Re: Befehle für Daten holen und setzen

20. Mai 2011 15:52

Wie legt man denn einen report als Variable an? Wie es scheint, ist das wohl nicht mal eben gemacht....

Und einen Feldfilter setzen ist scheinbar auch nicht möglich....

Naja, wünsch trotzdem erstmal eine schönes Wochenende.

Re: Befehle für Daten holen und setzen

20. Mai 2011 16:39

misterelektro1981 hat geschrieben:Wie legt man denn einen report als Variable an? Wie es scheint, ist das wohl nicht mal eben gemacht....

Und einen Feldfilter setzen ist scheinbar auch nicht möglich....

Naja, wünsch trotzdem erstmal eine schönes Wochenende.


Doch einfach eine Variable (z.B. ReportXY) vom Typ Report anlegen. Es ist wirklich so einfach! ;)


Code:
Record.SETFILTER(Field, Filter);
ReportXY.SETTABLEVIEW(Record);
ReportXY.RUN; // oder ReportXY.RUNMODAL;
//CLEAR(ReportXY); //brauchst du nur bei älternen NAV Versionen


:!: Tipp: Schau in die Hilfe zu den oben genannten Befehlen.

mfg,
winfy

Re: Befehle für Daten holen und setzen

23. Mai 2011 13:34

Als mit diesem Code:
Code:
Test.SETFILTER("Due Date");
Test2.SETTABLEVIEW(Test);
Test2.RUNMODAL;
CLEAR(Test);

bekomme ich eine Fehlermeldung: TableDat 0 exisiert nicht.

Test ist dabei eine Record Variable und Test2 die Report Variable auf den besagten Report. Wie bekomme ich das jetzt ans laufen? Kann ich dann über die Variable mir das Feld in das Drckmenü bauen, oder wie kann ich dann den Filter setzen?