[gelöst] Befehle für Daten holen und setzen

12. Mai 2011 11:48

Hallo zusammen,

habe mal wieder ein paar kleine Fragen.

Ich habe einen Report, der auf Tabelle G/L Entry (17) beruht. Dort habe ich die Kostenstelle als Code unter dem Namen Global Dimension Code 1. Diesen habe ich bereits auf den Report verbaut. Nun benötige ich den zugehörigen Namen aus Tabelle Dimension Value (349). Wie setzte ich hier welchen Befehl ein?

Weiterhin eine Frage zu einem Datum:
Ich habe ein Feld Startdatum, das z.B. mit 12.07.09 gefüllt ist. Nun möchte ich hierzu gerne in Abhängigkeit zur Sachkontennummer ein Enbddatum vorgeben.

für Sachkonto 0480: immer der 31.12. des laufenden Jahres, bei Start 12.07.09 => 31.12.09

für Sachkonto 0485: immer der 31.12. 5 Jahre später, bei Start 12.07.09 => 31.12.14

Was muss ich hierzu als Code schreiben?
Zuletzt geändert von misterelektro1981 am 26. Mai 2011 15:07, insgesamt 5-mal geändert.

Re: Befehle für Daten holen und setzen

12. Mai 2011 12:09

ein get auf die Tabelle 349, also in deinem Fall
Code:
DimensionValue.get(1,"Global Dimension 1 Code")
.

das Andere müsste so klappen:
Code:
calcdate('<CY>',workdate)
calcdate('<5Y+CY>',workdate)

Re: Befehle für Daten holen und setzen

12. Mai 2011 12:45

Vielen dank für die schnelle Antwort.

zu 1) das hatte ich auch so, jeodch ohne die 1 probiert. Es kommt die Fehlermeldung des die Typkonvertierung von Integer in Code nicht möglich ist.

zu 2) nicht ganz so wie ich es brauche. Ich habe ein Feld (Textbox) in der ich in die Source den Code schreiben kann. Wie bekomme ich das für die beiden Varianten hin?
Weiterhin wird das Enddatum nun immer ab dem heutigen Tag berechnet. Es sollte aber aus dem Feldinhalt des Feldes Belegdatum errechnet werden.

So erscheint z.B. bei Belegdatum 12.07.08 => 31.12.16 anstelle 31.12.13

Ich hoffe das ist so verständlich.

Re: Befehle für Daten holen und setzen

12. Mai 2011 12:55

misterelektro1981 hat geschrieben:zu 1) das hatte ich auch so, jeodch ohne die 1 probiert. Es kommt die Fehlermeldung des die Typkonvertierung von Integer in Code nicht möglich ist.

Liegt halt daran, dass das Feld "Dimension Code" ein Code-Feld ist.

Trotzdem ist das falsch, denn der Primary Key besteht aus dem Dimensionscode und dann dem Dimensionswertcode. Dementsprechend müsste es so aussehen:
Code:
DimensionValue.get('KOSTENSTELLE','1')

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:05

zu 1) stimmt, das war Quatsch
Code:
GeneralLedgerSetup.get;
DimensionValue.get(GeneralLedgerSetup."Global Dimensionsion 1 Code",DeinFeld);

zu 2) dann ersetz halt workdate durch dein Bezugsdatum
Zuletzt geändert von McClane am 12. Mai 2011 13:12, insgesamt 1-mal geändert.

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:06

Sebastian Pfliegel hat geschrieben:
misterelektro1981 hat geschrieben:zu 1) das hatte ich auch so, jeodch ohne die 1 probiert. Es kommt die Fehlermeldung des die Typkonvertierung von Integer in Code nicht möglich ist.

Liegt halt daran, dass das Feld "Dimension Code" ein Code-Feld ist.

Trotzdem ist das falsch, denn der Primary Key besteht aus dem Dimensionscode und dann dem Dimensionswertcode. Dementsprechend müsste es so aussehen:
Code:
DimensionValue.get('KOSTENSTELLE','1')


Wenn ich es so mache, dann kommt die Fehlermeldung das eine Typkonvertierung von Record in Code nicht möglich ist. Was bedeutet eigentlich die 1?
Zuletzt geändert von misterelektro1981 am 12. Mai 2011 13:09, insgesamt 1-mal geändert.

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:08

McClane hat geschrieben:zu 1) stimmt, das war Quatsch
zu 2) dann ersetz halt workdate durch dein Bezugsdatum


Ja das ist nicht das Problem, aber wie gestalte ich es dann variabel, der Inhalt ist dann entweder fest auf das Ende des laufenden Jahres oder in 5 Jahren bezogen. Das sollte ja in Abhängigkeit des Sachkontos passieren.

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:13

Code:
if Sachkonto=KontoFall1 then
  calcdateFall1
else if Sachkonto=KontoFall2 then
  calcdateFall2;

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:17

Sorry, ich bin davon ausgegangen, dass deine Kostenstelle die Nr. "1" wäre. Jedoch loopst du wahrscheinlich durch alle G/L Entries und nimmst von dort den Code. Zwecks der Fehlermeldung: Hast du evtl. das Semikolon vergessen (in den anderen Code-Beispielen wurde es bisher weggelassen)?
Code:
DimensionValue.get('KOSTENSTELLE',"Global Dimension 1 Code";

Re: Befehle für Daten holen und setzen

12. Mai 2011 13:34

Sebastian Pfliegel hat geschrieben:Sorry, ich bin davon ausgegangen, dass deine Kostenstelle die Nr. "1" wäre. Jedoch loopst du wahrscheinlich durch alle G/L Entries und nimmst von dort den Code. Zwecks der Fehlermeldung: Hast du evtl. das Semikolon vergessen (in den anderen Code-Beispielen wurde es bisher weggelassen)?
Code:
DimensionValue.get('KOSTENSTELLE',"Global Dimension 1 Code";


Das klappt nun, jedoch nur wenn das Feld einen Inhalt hat. Falls keine Kostenstelle gegeben ist kommt eine Fehlermeldung, die Dimesionswerte existieren nicht usw.. Wie kann ich das unterdrücken?

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:11

McClane hat geschrieben:
Code:
if Sachkonto=KontoFall1 then
  calcdateFall1
else if Sachkonto=KontoFall2 then
  calcdateFall2;


Vielleicht stelle ich mich mal wieder dümmer wie ich bin. Ich kenne das von anderen Report, das man so ähnlich Sections ansteuert.
Jedoch habe ich nur 1 Section und 1 Textfeld. Wo schreibe ich diesen Code denn bitte hin?

Weiterhin habe ich ein Problem mit dem Sachkonto. Die Sachkontonummer ist ein Code und daher kommt die Fehlermeldung, dass eine Typkonvertierung von Code = Integer nicht durchgef. werden kann.

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:16

Dafür gibt es das schöne "IF".

Ich möchte jedoch noch erwähnen, dass du bitte nicht hart im Code 'KOSTENSTELLE' angibst. Den Wert solltest du dir entweder über die Finanzbuchhaltungs-Einrichtung ziehen bzw. statt eines GETS einen Filter auf den Dimensionswertcode und die Dimensionsnummer (welche die 1 wäre).

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:26

misterelektro1981 hat geschrieben:Wo schreibe ich diesen Code denn bitte hin?
Genau dort, wo du das
misterelektro1981 hat geschrieben:Nun möchte ich hierzu gerne in Abhängigkeit zur Sachkontennummer ein Enbddatum vorgeben.
vorhast?

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:38

Ich glaube so kommen wir nicht weiter. Ich verstehe wirklich nicht wo ich den Code hinschreiben soll und auch nicht, wie ich die Fehlermeldung (Code vs. Integer) weg bekomme und auch bei leerer Kostenstelle das in den Griff bekomme. Könnt ihr mir das nicht einmal so erklären, das selbst ich es erkläre, wäre wirklich dankbar. :idea:

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:47

das fehlerhafte get bzw. find fängst du mit einem if davor ab, wie Seb schon sagte.

Und wo der Code hin soll, können wir wirklich nicht hellsehen (ich zumindest nicht). Dazu wäre mal etwas mehr Input von deiner Seite nötig.

Re: Befehle für Daten holen und setzen

12. Mai 2011 14:52

Code:
IF NOT GeneralLedgerSetup.GET('') THEN
  GeneralLedgerSetup.INIT();
IF NOT DimensionValue.GET(GeneralLedgerSetup."Global Dimension 1 Code","Global Dimension 1 Code") THEN;


Erklärung: Die FiBu-Einrichtung wird geholt (falls nicht vorhanden dann alle Werte initialisiert). Es wird versucht den Dimensionswert zu erhalten, welcher den Globalen Dimensionscode 1 (sollte bei euch 'KOSTENSTELLE' sein) und den Dimensionswertcode aus dem Sachposten besitzt.

Zwecks des Datentypfehlers, zeig doch mal ein paar Zeilen vor und nach dem Fehler.

Re: Befehle für Daten holen und setzen

12. Mai 2011 15:16

Also das mit der Kostenstelle klappt nun prima. Hier mal der andere Code, der sich auf der Body OnPreSection befindet:
Code:
if "G/L Account No." = 480 then
  calcdate('<CY>',"Posting Date")
else if "G/L Account No." = 485 then
  calcdate('<5Y+CY>',"Posting Date");


Hiermit taucht die besagte Fehlermeldung auf. Was ich nun nicht versteht, wie ich diese Information des Datums auf eine Textbox bekomme. Muss ich dazu eine Variable anlegen, in der diese Werte gespeichert werden oder wie???

Re: Befehle für Daten holen und setzen

12. Mai 2011 15:26

misterelektro1981 hat geschrieben:Muss ich dazu eine Variable anlegen, in der diese Werte gespeichert werden oder wie???

So ist es.

Re: Befehle für Daten holen und setzen

12. Mai 2011 15:43

"G/L Account No." ist auch ein Code-Feld und kein Integer! Heißt, du musst '480' bzw. '485' verwenden.

Re: Befehle für Daten holen und setzen

12. Mai 2011 15:56

Danke für den Tip.

Nun bekomme ich mit diesem Code
Code:
if "G/L Account No." = '480' then
  Date:= calcdate('<CY>',"Posting Date")
else if "G/L Account No." = '485' then
  Date := calcdate('<5Y+CY>',"Posting Date");

keine Fehlermeldung mehr, es wird mit aber das Datum nicht angezeigt....

Re: Befehle für Daten holen und setzen

12. Mai 2011 16:10

Wie wäre es mit OnAfterGetRecord anstatt OnPreSection?

Re: Befehle für Daten holen und setzen

12. Mai 2011 16:14

Das hatte ich zuvor auch, oh mann der Fehler lag darin, dass es sich um die Sachkonten 0480 und 0485 und nicht 480 und 485 hnadelt....

Vielen dank fürs Bemühen und nen schönen Feierabend :-)

Re: [gelöst] Befehle für Daten holen und setzen

12. Mai 2011 16:24

Tja, und genau das ist der Unterschied zwischen Code und Integer :D

Kein Problem, gleichfalls!

Re: Befehle für Daten holen und setzen

18. Mai 2011 16:56

Nun hat sich ein ähnliches Problem ergeben, wofür ich keinen neuen Punkt aufmachen wollte.

Im report 121 habe ich eine Spalte Zahlungsziel hinzugefügt.

Der Aufbau des Reports ist wie folgt:
Customer
Cust. Ledger Entry
Detailed Cust. Ledg. Entry
Integer
Integer

Nun habe ich unter Cust. Ledger Entry ein Feld hinzugefügt, dass mit in Abhängigkeit des Zahlungsbedingungscode des Debitor bzw. der Rechnung ein Zahlungsziel ausgibt. Dazu verwende ich folgende Codestruktur im OnAfterGetRecordTrigger:
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");


Nun hat ein Debitor 4 Rechnungen mal als Beispiel:
Datum vom 04.05.11 mit Zahlungsbed.code 30/0 => Ergebnis 05.06.11
Datum vom 06.05.11 mit Zahlungsbed.code 30/0 => Ergebnis 05.06.11
Datum vom 13.04.11 mit Zahlungsbed.code 30/0 => Ergebnis 19.05.11
Datum vom 19.04.11 mit Zahlungsbed.code 30/0 => Ergebnis 19.05.11

Wieso kommt da das selbe raus. Bei anderen Daten ist es scheibar ähnlich ungenau, ist da ein Fehelr zu erkennen???

Re: Befehle für Daten holen und setzen

19. Mai 2011 08:21

1. Du prüfst überhaupt nicht auf "30/0" ab, sondern nur auf "10/0" und "10/2"
2. Nicht schön wenn du nur ein ELSE IF aber kein normales ELSE hast. Damit kann dir bei einem unbekannten Code der vorherige Wert genommen werden ...
3. Was willst du mit '<30D>' bezwecken? Du brauchst keine Größer-/Kleinerzeichen.