[gelöst] Problem mit Report

27. August 2009 11:33

Hallo,

wir haben ein Problem mit einem Excel Report. Dieser soll uns eigentlich nur ein paar Daten von zwei Tabellen auflisten. Einmal aus der Vendor-Tabelle und einmal aus der Vendor Bank Account-Tabelle.

Der Report funktioniert soweit auch, aber wenn bei einem Kreditor keine Bankdaten (also Daten in der zweiten Tabelle) eingetragen sind, werden auch die anderen Daten nicht angedruckt, der Datensatz wird also einfach übersprungen.

Wir haben angegeben das die Vendor Nr. aus der Vendor Tabelle gleich der Vendor Nr. in der Bank Account-Tabelle ist. Wenn also die Vendor Nummer in der Bank Account-Tabelle leer ist weil ja kein Bankkonto eingetragen ist lässt er den Datensatz weg...

Weiß von euch vielleicht einer wie man das Problem umgehen kann?

Gruß,
D_Gross
Zuletzt geändert von D_Gross am 27. August 2009 15:45, insgesamt 1-mal geändert.

Re: Problem mit Report

27. August 2009 11:42

Stehen in der Exceldatei die Kreditor- und Kontodaten nebeneinander in einer Zeile?
Ich verstehe das so, dass das Schreiben nach Excel nur im DataItem Vendor Bank Account statt findet (Funktionsaufruf EnterCell o.ä.). Das müsstest du dann natürlich aufsplitten: Die ersten Daten (des Kreditors) schon im DataItem Vendor.

Re: Problem mit Report

27. August 2009 11:50

Hallo,

ja die Daten stehen in der Excel Datei in einer Zeile nebeneinander.

Ja die Daten aus der Vendor Tabelle übergeben wir ans Excel Im Vendor - OnAfterGetRecord() und die Daten aus der
Tabelle Vendor Bank Account aus dem Vendor Bank Account - OnAfterGetRecord(). Aber irgendwie funktioniert das trotzdem nicht...

Gruß,
D_Gross

Re: Problem mit Report

27. August 2009 11:58

Ist evtl. irgendwo ein SKIP oder BREAK im Code?

Re: Problem mit Report

27. August 2009 12:03

Erfolgt die Übergabe an den ExcelBuffer im DataItem oder in den Sections?
Wenn in den Sections:
Kann es sein, dass im DataItem "Vendor" das Property "PrintOnlyIfDetail" gesetzt ist?

Re: Problem mit Report

27. August 2009 12:04

mikka hat geschrieben:Ist evtl. irgendwo ein SKIP oder BREAK im Code?

Würd ich auch tippen. Vor dem EnterCell in Vendor OnAfterGetRecord muss noch ein SKIP sein (nämlich wenn keine Kontodaten vorhanden sind).

Oder wird EnterCell in den Sections aufgerufen und Vendor hat PrintOnlyIfDetail = True? Dann raus aus den Sections damit nach OnAfterGetRecord!

Edit: och Mist!!

Re: Problem mit Report

27. August 2009 12:09

<OffTopic>
Natalie hat geschrieben:Oder wird EnterCell in den Sections aufgerufen und Vendor hat PrintOnlyIfDetail = True? Dann raus aus den Sections damit nach OnAfterGetRecord!

Edit: och Mist!!

Yeah! Ich war mal schneller als Natalie :lol:
</OffTopic>

Re: Problem mit Report

27. August 2009 14:00

Hallo,

ok, also das erste Problem wäre jetzt gelöst, einige Ausgaben standen in der falschen Tabelle.
Jetzt gibt er uns alle Daten aus jeder Tabelle aus und hier ist dann auch schon das nächste Problem...

Der schreibt jetzt alle Bankdaten, also jede Bank einfach untereinander, vom Prinzip her schon ganz richtig,
nur wenn jetzt für einen Kreditor keine Bank hinterlegt ist dann lässt er diese Zeile nicht leer sondern füllt Sie gleich mit der nächsten Bank des nächsten Kreditor...

So sollte es zum Beispiel aussehen:

Kreditor: Bank:
00001 Sparkasse
00002
00003 Raiffeisen
00004 Hypo
.....

Und so macht er es momentan:

Kreditor: Bank:
00001 Sparkasse
00002 Raiffeisen
00003 Hypo
00004
....

Re: Problem mit Report

27. August 2009 14:39

EnterCell wird mit RowNo aufgerufen (Zeilennummer).
Diese RowNo wird irgendwo zu oft hochgezählt.

RowNo += 1 oder RowNo := RowNo + 1 sollte nur direkt vor den EnterCell-Blocks aufgerufen werden.
Wahrscheinlich sieht es so bei dir aus:

Vendor OnAfterGetRecord
Code:
RowNo +=1;
EnterCell(RowNo, ...);
EnterCell(..)
...
RowNo += 1;

Vendor Bank Account OnAfterGetRecord
Code:
EnterCell(...);
EnterCell(...)


So aber sollte es aussehen:

Vendor OnAfterGetRecord
Code:
RowNo +=1;
EnterCell(RowNo, ...);
EnterCell(..)

Vendor Bank Account OnAfterGetRecord
Code:
RowNo += 1;
EnterCell(...);
EnterCell(...)

Re: Problem mit Report

27. August 2009 15:06

Also unser Code sieht momentan so aus:

Code:
Vendor - OnPreDataItem()
Window.OPEN(
  Text00002 +
  '@1@@@@@@@@@@@@@@@@@@@@@@@@@\');
Window.UPDATE(1,0);


CREATE(Excel);
Excel.Visible(FALSE);
Book := Excel.Workbooks.Add(-4167);
Sheet := Excel.ActiveSheet;
Sheet.Name := FORMAT(Text00001);


Sheet.Range('A:A').ColumnWidth := 15;
Sheet.Range('B:B').ColumnWidth := 30;
Sheet.Range('C:C').ColumnWidth := 30;
Sheet.Range('D:D').ColumnWidth := 15;
Sheet.Range('E:E').ColumnWidth := 20;
Sheet.Range('F:F').ColumnWidth := 20;
Sheet.Range('G:G').ColumnWidth := 20;
Sheet.Range('H:H').ColumnWidth := 15;
Sheet.Range('I:I').ColumnWidth := 30;
Sheet.Range('J:J').ColumnWidth := 20;
Sheet.Range('K:K').ColumnWidth := 20;


Sheet.Range('A1').Font.Bold := TRUE;
Sheet.Range('A3').Font.Bold := TRUE;
Sheet.Range('B3').Font.Bold := TRUE;
Sheet.Range('C3').Font.Bold := TRUE;
Sheet.Range('D3').Font.Bold := TRUE;
Sheet.Range('E3').Font.Bold := TRUE;
Sheet.Range('F3').Font.Bold := TRUE;
Sheet.Range('G3').Font.Bold := TRUE;
Sheet.Range('H3').Font.Bold := TRUE;
Sheet.Range('I3').Font.Bold := TRUE;
Sheet.Range('J3').Font.Bold := TRUE;
Sheet.Range('K3').Font.Bold := TRUE;


Sheet.Range('A1').Value := 'Kreditorliste';
Sheet.Range('A3').Value := 'Kreditornr.';
Sheet.Range('B3').Value := 'Name';
Sheet.Range('C3').Value := 'Adresse';                                     
Sheet.Range('D3').Value := 'PLZ';
Sheet.Range('E3').Value := 'Ort';
Sheet.Range('F3').Value := 'Telefonnr.';
Sheet.Range('G3').Value := 'Zlg.-Bedingungscode';
Sheet.Range('H3').Value := 'Steuernummer';
Sheet.Range('I3').Value := 'Name der Bank';
Sheet.Range('J3').Value := 'Bankkontonummer';
Sheet.Range('K3').Value := 'Bankleitzahl';

i:= 3;   

Vendor - OnAfterGetRecord()
j := FORMAT(i);
j := INCSTR(j);


Sheet.Range('A'+j).Value := Vendor."No.";
Sheet.Range('B'+j).Value := Vendor.Name;
Sheet.Range('C'+j).Value := Vendor.Address;
Sheet.Range('D'+j).Value := Vendor."Post Code";
Sheet.Range('E'+j).Value := Vendor.City;
Sheet.Range('F'+j).Value := Vendor."Phone No.";
Sheet.Range('G'+j).Value := Vendor."Payment Terms Code";
Sheet.Range('H'+j).Value := Vendor."Registration No.";

i := i +1;

Vendor - OnPostDataItem()
Excel.Visible(TRUE);


Code:
Vendor Bank Account - OnAfterGetRecord()
f := FORMAT(e);
f := INCSTR(f);


Sheet.Range('I'+f).Value := "Vendor Bank Account".Name;
Sheet.Range('J'+f).Value := "Vendor Bank Account"."Bank Account No.";
Sheet.Range('K'+f).Value := "Vendor Bank Account"."Bank Branch No.";

e := e + 1;

Re: Problem mit Report

27. August 2009 15:20

Interessant, den Aufbau ("Sheet.")kannte ich noch nicht.
i, j und e,f stehen für die Zeilennummern. Ziemlich umständliche Programmierung, finde ich. Ein Pärchen hätte es auch getan bzw. sogar eine einzige Variable hätte ausgereicht.

Mir fehlt aber eine entscheidende Information: Wo wird e (in Vendor Bank Account) initialisiert?
Außerdem: Scheinbar wird i nicht nur in Vendor hochgezählt. Steht in den Sections noch etwas drin?

Re: Problem mit Report

27. August 2009 15:21

Natalie hat geschrieben:EnterCell wird mit RowNo aufgerufen (Zeilennummer).
Diese RowNo wird irgendwo zu oft hochgezählt.


@ Natalie
Zu oft? Ich hatte jetzt eigentlich gedacht zu selten.
Und zwar immer wo die Leerzeile fehlt, dem Code müsste "beigebracht" werden, "immer wenn kein Bankkonto da ist, eine Leerzeile einfügen"
** Edit by Mikka** Jetz schnall ich es, klar zu oft :-)


@D_Gross
Warum wird auf Vendor - OnPostDataItem() e und i hochgezählt (ich würde das Zeilenhochzählen immer auf Vendor machen)?


Code:
i:= 2;                 // Hier einen weniger !   

Vendor - OnAfterGetRecord()
i := i +1;           // Hier hochzählen
j := FORMAT(i);
j := INCSTR(j);


Sheet.Range('A'+j).Value := Vendor."No.";
Sheet.Range('B'+j).Value := Vendor.Name;
Sheet.Range('C'+j).Value := Vendor.Address;
Sheet.Range('D'+j).Value := Vendor."Post Code";
Sheet.Range('E'+j).Value := Vendor.City;
Sheet.Range('F'+j).Value := Vendor."Phone No.";
Sheet.Range('G'+j).Value := Vendor."Payment Terms Code";
Sheet.Range('H'+j).Value := Vendor."Registration No.";

// i := i +1;                 // Und wech ;-)


Code:
Vendor Bank Account - OnAfterGetRecord()
// f := FORMAT(e);       // Weg damit :-)
// f := INCSTR(f);         // Weg damit :-)


Sheet.Range('I'+f).Value := "Vendor Bank Account".Name;
Sheet.Range('J'+f).Value := "Vendor Bank Account"."Bank Account No.";
Sheet.Range('K'+f).Value := "Vendor Bank Account"."Bank Branch No.";

// e := e + 1;       // Weg damit :-)

Re: Problem mit Report

27. August 2009 15:23

D_Gross hat geschrieben:nur wenn jetzt für einen Kreditor keine Bank hinterlegt ist dann lässt er diese Zeile nicht leer sondern füllt Sie gleich mit der nächsten Bank des nächsten Kreditor...


Sorry, hatte hier falsch gelesen!! Hatte verstanden, dass zu viele Leerzeilen eingefügt werden. Mikka, dann bleib du mal bitte dran ;-)

Aber schnelle Lösung, wenn jeder Kreditor höchstens ein Konto hat:
Vendor Bank Account - OnAfterGetRecord()
Code:
f := FORMAT(i-1); // -1 wäre nicht notwendig, wenn das Höchzählen von i immer an Anfang der Trigger statt finden würde ...
Sheet.Range('I'+f).Value := "Vendor Bank Account".Name;
Sheet.Range('J'+f).Value := "Vendor Bank Account"."Bank Account No.";
Sheet.Range('K'+f).Value := "Vendor Bank Account"."Bank Branch No.";


Alle anderen Zeilen weg.

Re: Problem mit Report

27. August 2009 15:27

Natalie hat geschrieben:
D_Gross hat geschrieben:nur wenn jetzt für einen Kreditor keine Bank hinterlegt ist dann lässt er diese Zeile nicht leer sondern füllt Sie gleich mit der nächsten Bank des nächsten Kreditor...


Sorry, hatte hier falsch gelesen!! Hatte verstanden, dass zu viele Leerzeilen eingefügt werden. Mikka, dann bleib du mal bitte dran ;-)


Hoffentlich habe ich nicht auch den Überblick verloren ;-)
Aber ich bin guter Hoffnung, das meine Empfehlung klappt (Hoffentlich)

Re: Problem mit Report

27. August 2009 15:45

Ok, jetzt klappts....

Ich denke zwar das ich das vorher schon einmal so ausprobiert habe und da hats nicht geklappt, aber naja... :-D
Irgendeine Kleinigkeit hab ich da wohl vergessen... :-D

Also vielen Dank!!!!

Gruß,
D_Gross