[gelöst] Kontaktdaten und zugehörige Branche(n) nach Excel

27. Mai 2008 16:45

Hallo Leute,

bin gerade dabei einen Report zu schreiben, der u.a. alle Branchen, die an einem Kontakt hinterlegt sind, nach Excel exportiert.
Leider schreibt er mir, nur die gleiche Branche (immer die als 1. aufgeführte) nach Excel.

Kann mir jemand helfen?

Gruß
Zuletzt geändert von FreundederNacht am 2. Juni 2008 08:43, insgesamt 1-mal geändert.

27. Mai 2008 17:03

Findest du nicht selbst, dass deine Informationen etwas dürftig sind?

28. Mai 2008 08:21

Dann will ich das nochmal versuchen.

Also ich habe einen Report erstellt, der mit dem Excel Buffer Daten aus den Kontakten sowie den zugeordneten Branchen ausliest.
Betroffen sind also die Tabellen "Contact" und "Contact Industry Group".

Mein Problem ist nun, dass ich bei Kontakten die z.B. 2 Brancheneinträge haben wie Elektrotechnik und Service. Ich als Ergebnis 2x Elektrotechnik in Excel übertragen bekomme!

Ich hoffe das Problem ist so etwas deutlicher formuliert!

Gruß
FreundederNacht

28. Mai 2008 08:26

Wenn du nun noch etwas Code dazuschreibst, wirds so richtig schön. :-)

28. Mai 2008 09:15

Code:

Contact Industry Group - OnAfterGetRecord()
spaltenzahl := 48;

WHILE spaltenzahl <=50 DO 
BEGIN
EnterCell (RowNo, spaltenzahl, FORMAT("Contact Industry Group"."Industry Group Code"), '', FALSE, FALSE, FALSE);
spaltenzahl 'Plus'= 1;   
END;

//Funktion EnterCell:
EnterCell(RowNo : Integer;ColumnNo : Integer;CellValue : Text[250];CellFormula : Text[250];Bold : Boolean;Italic : Boolean;UnderLine :

ExcelBuffer.INIT;
ExcelBuffer.VALIDATE ("Row No.",RowNo);
ExcelBuffer.VALIDATE ("Column No.",ColumnNo);
ExcelBuffer."Cell Value as Text" := CellValue;
ExcelBuffer.Formula := CellFormula;
ExcelBuffer.Bold := Bold;
ExcelBuffer.Italic := Italic;
ExcelBuffer.Underline := UnderLine;
ExcelBuffer.INSERT;

28. Mai 2008 09:53

Also, so wie ich das sehe schreibst du in deiner WHILE-Schleife dreimal den gleichen Wert in die Spalten 48-50.

In dem Code, den du geposted hast ist nicht ersichtlich, dass du die Zeilennummer erhöhst. Das ist sicherlich auch im Contact zu tun, aber wenn du das vergessen haben solltest, dann wird mit jedem Durchlauf von "Contact Industry Group - OnAfterGetRecord" die gleiche Zeile mit neuer Branche überschrieben.

Ergo:
1. Der Sinn der While-Schleife erschließt sich mir nicht, denn du stehst ja in einem Branchen-Record und kannst durch diese WHILE-Schleife nicht die Branchen eines Kontakts durchlaufen.
2. Du solltest prüfen, ob du die Zeilennummer korrekt hochzählst, oder ob eine Excel-Zeile ggf. überschrieben wird.
2.

28. Mai 2008 10:07

Innerhalb eines Kontaktes soll die Zeilennummer nicht erhöht werden. Die weiteren Branchen sollen jeweils eine Spalte weiter geschrieben werden. Dazu soll die while schleife dienen.
Dass diese Schleife so aber nicht korrekt ist, ist mir nun auch klar, aber wie bekomme ich es denn hin?

28. Mai 2008 10:15

1. Binde die Branchen als Variable im "Kontakt - OnAfterGetRecord" ein.
2. spaltenzahl := 48
3. RESET + Schlüssel + Filter + FIND|FINDSET|FINDFIRST
4. REPEAT
ExcelCell(...);
spaltenzahl+=1;
UNTIL <Branche>.NEXT = 0

Das alles in "Kontakt - OnAfterGetRecord", die Branchen als DataItem entfallen.

28. Mai 2008 13:25

Kannst du mir den 3. Punkt nen bischen ausführlicher schreiben, sonst hab ichs verstanden....

Schon mal Danke soweit!!

28. Mai 2008 15:31

Code:
lrContactIndustryGroup.RESET
//* lrContactIndustryGroup.SETCURRENTKEY(...)
//* ^kannst du dir diesmal sparen, weil der Primärschlüssel gut geeignet ist
lrContactIndustryGroup.SETRANGE("Contact No.","No.");
IF lrContactIndustryGroup.FIND('-') THEN BEGIN
  REPEAT
  ...
  UNTIL lrContactIndustryGroup.NEXT = 0


lr steht hier für local Record, lrContactIndustryGroup ist also eine Variable und das ganze passiert in Contact - OnAfterGetRecord

FIND('-') ist je nach Bedarf durch FINDFIRST oder FINDSET(...) zu ersetzen.