[gelöst] Report erstellen mit Variabel -Integer-

24. Februar 2009 14:12

Hallo ihr,

ich habe ein Frage und hoffe, dass man mir helfen kann.

Also: Ich bin gerade dabei ein Report zu erstellen. Soweit so gut.
Nun möchte ich aber Daten aus 2 unterschiedlichen Tabellen zusammenfassen. Einmal "Customer" und einmal "Sales price", da ich sehen möchte, welcher Debitor für welche Artikel welche Preise zahlen muss. Erstellen dieser Preiszuordung funktioniert über die Artikelkarte. Gespeichert wird dies in der Tabelle, wie schon gesagt, in "Sales price" (7002).
Das Ziel ist es, erstmal auf einem Testreport zu sehen, welchem Debitor (dataitem1) welcher Artikel + Artikelpreis auf der Tabelle "Sales price" zugeordnet ist.
Nun könnte ich ja einfach als Dataitem2 "Sales price" erstellen und die Verbindung über das "Data Item Link" Fenster setzen. Dies will ich aber nicht.
Ich möchte dies gerne über eine Variabelsection lösen.

Als Dataitem2 habe ich nun Integer eingeben, und versucht so weit wie möglich aus anderen Tabellen zu übernehmen. Dies hat auch gut geklappt:
Es wird nun auch in die erste Section (Customer) die gesuchte Debitorennummer geschrieben, jedoch in Section 2 werden alle Artikel angezeigt, denen ein Preis+ Debitor zugeordenet wird. Da fehlt ein Filter auf die Debitorennummer, nehme ich mal stark an...

Jedoch habe ich noch nie mit Integer auf einem Report gearbeitet.
Wie erstelle ich nun die Beziehung zwischen "Customer"."No." und "Sales price"."Sales Code" ?

Bin für jede Hilfe dankbar.
Gruß Heiko_d
Zuletzt geändert von Heiko_D am 27. Februar 2009 15:09, insgesamt 3-mal geändert.

Re: Report erstellen mit Variabel -Integer-

24. Februar 2009 14:43

ich glaube du musst die entsprechende Filterung im "OnPreDataItem" Trigger des integer dataitems reinschreiben.
also Filterung von SalesPrice auf Basis der Customer No.
Du wirst dann wohl die integer-filterung via properties auf CONST = 1 setzen wollen und dann beim OnAfterGetRecord eine eigene repeatschleife o.ä. nutzen?
Wieso willst du nicht den üblichen Weg gehen über Dataitems? ich finde das recht ansprechend und sehe gerade kein Grund wieso man das nicht so lösen sollte.

Re: Report erstellen mit Variabel -Integer-

24. Februar 2009 14:54

Danke erst einmal für deine Hilfe.
Ich habe diesen report erst einmal als Übung begonnen. Das Ziel ist es, einen bestehenden zu bearbeiten. Bei diesem Zielreport ist die betroffende Section auch ein Integer.

Ich habe mir mal einen anderen Report angeschaut. 711.
Dort ist genau das was ich suche, einmal die "Item" Tabelle als Dataitem 1 und als Dataitem2 der "Integer".
Es sind nur Integer sections vorhanden.
Nun habe ich mir den Code des Dataitems "Integer" angeschaut.
Jedoch kenne ich mich noch nicht gut genug aus, um zu sagen, was genau nun die Verknüpfung bewirkt.

Darum wäre es nett, wenn ihr mir weiterhelfen könntet.

Gruß
Heiko_d

Re: Report erstellen mit Variabel -Integer-

24. Februar 2009 15:04

711 ist meiner Meinung nach ein schlechtes Beispiel.
Dort wird im Item-DataItem eine TEMPORÄRE ItemAmount-Tabelle gefüllt und die über Integer abgerufen. Dabei wird der Integer als "Zeiger" für die ungefilterten Datensätze aus der temporären Tabelle benutzt. In dem DataItem wird dann aus dem ItemAmount wieder ein get gemacht auf Item, so dass eine richtige Verknüpfung zwischen beiden DataItems nicht direkt vorhanden ist.

Re: Report erstellen mit Variabel -Integer-

24. Februar 2009 15:22

mmm ok...

und was wäre dann ein gutes beispiel?

report 1?
der hat auch ein integer, wo etwas mit bezug auf das erste dataitem steht.
Genauer:
dort steht

SETRANGE(Number,1,"G/L Account"."No. of Blank Lines");

recht das schon um einen bezug erzustellen?
wenn ja was bedeutet dann "Number"? Dieser Wert istnicht unter den Variabeln zu finden?
Vielleicht klingen die Fragen zu einfach oder gehören zum Must-Know Teil, aber ich habe noch nie mit Integern auf Reports gearbeitet.

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 10:21

Ja, Report 1 ist ein besseres beispiel.

Number ist der Spaltenname der Tabelle Integer ;-)

Da ist es so wie ich schon weiter oben geschrieben habe. Die Filterung erfolgt auf dem OnPreDataItem - Trigger.

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 12:43

oki
danke³ für deine hilfe.
doch nun habe ich ein problem:
wenn ich im dataitem "integer" unter "onpredataitem"
SETRANGE(Number,1,"Sales Price"."Sales Code"); eintrage, so erscheint der fehler, dass Integer := code ist, und dies darf nicht sein.

Wie löste ich nun diese Problem?

Ein anderes Feld kann ich ja wohl nicht nehmen, da ich ja auf den "Sales Code" filtern will.

Danke,

HEiko_d

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 16:38

Dann wirst du eine globale Recordvariable, welches durch das Integer-DataItem ersetzt werden soll, erstellen müssen, und die dann im OnPreDataItem filtern müssen und dann im OnAfterGetRecord-Trigger diese Variable per repeatschleife abarbeiten müssen. Dazu muss dann der Filter des Integer-Dataitems (in den properties) auf Number = Const(1) gestellt werden. Damit das DataItem nur einmal durchlaufen wird.

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 17:02

Ist nett das du annimmst ich hätte etwas mehr Ahnung von den Navision Reports, so dass ich etwas mit deiner Anleitung anfangen könnte :oops:
Aber in dem Bereich bin ich Anfänger und eine Repeatschleife habe ich noch nie erstellt.

Aber nochmals vielen Dank für deine Mühen.
Könntest du das bitte etwas präziser erklären?

Ziel des ganzen soll es sein, dass ich im Report 113 "debitoren/artikel" sehen kann, welche Preise ein gesuchter Debitor für Artikel zahlen muss.

Darum habe ich mir erst einmal ein Report aufgebaut, welcher mir den Debitorennamen anzeigt, und in der 2ten section die dazugehörige Artikelnummer + Preise. Dataitem 1 ist "Sales price" Dataitem 2 ist "Integer".
Momentan werden alle Artikel angezeigt, denen bestimmte Preise zugeördnet sind. Somit denke ich mir das eine Filterung auf den Sales Code fehlt.

Für jede Hilfe bin ich dankbar, jedoch bitte so präzise wie möglich.

Danke
Heiko_d

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 17:17

du nimmst eine globale Variable SalesPrice, filterst die mit setrange auf das customer feld von salesprice mit dem customer code aus der customer tabelle.
Das schreibst du in den OnPreDataItem-Trigger

Jetzt machst du noch in den gleichen Trigger ein
Code:
IF NOT SalesPrice.ISEMPTY THEN
  SETRANGE(Number, 1, SalesPrice.COUNT)
ELSE
  CurrReport.BREAK; //wenn keine SalesPrices vorhanden sind, dann brauchen wir das kommende ja nicht mehr


Das bewirkt, dass das Integer-DataItem die Anzahl der vorhandenen (gefilterten) Datensätze nun weiß.
Dann machst du im OnAfterGetRecord-Trigger von Integer so ähnlich wie im anderen Report ein

Code:
IF NUMBER = 1 THEN
  SalesPrice.FINDFIRST
ELSE
  SalesPrice.NEXT;

... Hier deine weiterverarbeitung rein



Du solltest nun mit einer Integer-Section dann mit SalesPrice."Item No." (oder wie die Spalte nun auch heißen mag) auf den aktuellen SalesPrice-Datensatz zugreifen.
Nur den Feldnamen in die SrcExpr einzutragen geht nicht, da er dann annehmen würde, es würde von Integer kommen (und da gibts nur Number)


Gruß
jan

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 18:06

Hallo Heiko_D,

was meinst du denn mit 'Variabelsection'?

Gruß, Fiddi

Re: Report erstellen mit Variabel -Integer-

25. Februar 2009 18:49

Nabend nochmal....

das mit dem Setrange habe ich nun geschafft bei meinem Testreport.
Jedoch wenn ich versuche das Dataitem "Integer" anzupassen, dann verschwinden alle Daten.

Da ich nicht mehr weiter weiß und ich deinen Erklärungen nicht so recht folgen kann (oder etws falsch mache), habe ich jetzt im Anhang meinen jetzigen Report hochgeladen, in der Hoffnung, dass du mir ein letztes Mal helfen kannst / willst.

Aufbau:
In der Section1 (Sales Price) steht nur die Debitorennummer.
In der Section2 (Integer) soll stehen, welche Artikel dem Kunden zugeordnet sind, und welche Preise diese haben.
Ich habe nun für 2 Kunden Artikelpreise über die Artikelkarte gegeben.
Starte ich nun meinen Report und wähle eine Debitorennummer aus, so werden beide Artikel samt Kosten dagestellt.
Benutzer ich im Dataitem "integer" im "On after get record" trigger die If Funktion von dir, so wird nichts mehr sichtbar von den Artikelnummern + Preisen.

Gruß
Heiko_D
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Report erstellen mit Variabel -Integer-

26. Februar 2009 09:35

Hallo Heiko_D,

versuchs mal mit dem Anhang. Dieser Report zeigt dir aber nicht alle einem Debitor zugeordneten Preise, das ist noch ein bisschen komplizierter (Startdatum, Preis von Artikelkarte,...).

Gruß, Fiddi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 10:32

Auch dir danke ich für deine Hilfe fiddi,

aber ich wollte das gerne einmal mit einem Dataitem namens Integer schaffen. Oder ist das gar nicht möglich?
Ich dhabe mir das so gedacht, dass in einem Integer Dataitem mehrer Datensätze aus unterschiedlichen Tabellen zusammengefasst werden können.
Also das der Unterschied zu "normalen" Dataitems dabei liegt, dass man die SourceExpression direkt bei der Textbox oder ähnlichem eingibt. Die Verbindung zum übergeordneten Dataitem legt man beim Trigger "Onpredataitem" der Integer Variabel fest.
Und genau so eine Verbindung suche ich. Ich nehme an, das die in mit der Funktion Setrange geschrieben werden muss.
Doch dort liegt mein Problem: Mit der F1 Hilfe von Navision komme ich nicht weiter und auch in den Handbüchern wird für den Report nur ein Beispiel gezeigt, welches "normale" Dataitems hat und keinen Integer.


Gruß
Heiko_d

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 11:04

Hallo Heiko_D,

man sollte konstruierte Beispiele immer vermeiden, genauso wie man immer versuchen sollte ohne Integer auszukommen. Meistens hat man nicht genau nachgedacht, wie es ohne geht :wink: .
Es gibt nur sehr wenige Gründe mit Integer zu arbeiten. Als da wären:
  • Man benötigt zum Abschluss eines Reportbereiches noch eine Section die eine Fußzeile druckt oder etwas berechnet. Diese Section wird in den meisten Fällen nur genau einmal durchlaufen.
  • Die andere Sache ist so etwas wie das hier
  • Oder man benötigt Integer als Index um ein Array auszugeben (z.B. Etikettendruck)

Gruß, Fiddi

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 11:22

Och, man muss nur einen Report auf einem temporär gefüllten Rec laufen lassen; dann muss man eigentlich Integer als DataItem nehmen, wenn alle dabei erzeugten Einträge durchlaufen werden sollen.

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 11:44

vielen dank für eure Antworten.

Ich habe mich jetzt entschieden, das Problem doch nicht mit Integer zu lösen.(Die andere Lösung ist auch viel leichter umzusetzen...)
Ich halte mich daran was fiddi gesagt hat:
* Man benötigt zum Abschluss eines Reportbereiches noch eine Section die eine Fußzeile druckt oder etwas berechnet. Diese Section wird in den meisten Fällen nur genau einmal durchlaufen.
* Die andere Sache ist so etwas wie das hier
* Oder man benötigt Integer als Index um ein Array auszugeben (z.B. Etikettendruck)


Also lasse ich die Finger von Integern bis es zu den genannten Fällen kommt. :-)

Vielen Dank nochmal für eure Hilfe.

Gruß
Heiko_D

Re: [Gelöst] Report erstellen mit Variabel -Integer-

27. Februar 2009 12:22

Hallo Heiko_D,

ich habe mich jetzt nicht mit Deinem Problem beschäftigt und kann daher nichts über die Vor- oder Nachteile zur Verwendung eines integer-DataItems in Deinem Fall sagen.

Ich halte aber das integer-DataItem in vielen Fällen für eine elegante Möglichkeit zur Realisierung von Reports.
Es ist häufig perfomanter, die auszugebenden Daten in einer tmp. Tabelle zu sammeln und mit Hilfe des integer-DataItems auszugeben, als verschiedene Tabellen in DataItems zu verknüpfen.
Und wer z. B. versucht, alle Ausgaben über CurrReport.Showoutput zu steuern und sich dann wundert, dass am Ende der Seite noch so viel leeres Papier übrig ist und trotzdem ein Seitenwechsel durchgeführt wird, hat noch nie über die Verwendung von integer-DataItems nachgedacht. :roll:

Re: [Gelöst] Report erstellen mit Variabel -Integer-

27. Februar 2009 12:58

Hallo,

kann woger und McLane zustimmen. Ich hatte aber auch schon das zweifelhafte Vergnügen einige Reports für Verkaufsbelege bearbeiten zu dürfen, die nur so vor Integer-Sections wimmelten, und nicht stabil liefen. Nachdem ich alle Integer entfernt hatte, und auf normale Links umgestellt hatte, funktionierte das Ding endlich, und enthielt um einiges weniger an Code.

Gruß, Fiddi

Re: [Gelöst] Report erstellen mit Variabel -Integer-

27. Februar 2009 13:28

Also versuche ich die nun einfach zu vermeiden :)

Nun habe ich aber auch schon das nächste Problem:
Ich habe 2 Dataitems: Customer und sales price
Die Verbindung läuft über DataItemLink "Sales Code=FIELD(No.)"
Es gibt auch 2 Sections: einmal Customer, in der ich mir einfach die Kundennummer anzeigen lasse.
In der 2ten Sales Price Section wird die Artikelnummer (zum kontrollieren ob die verbindung zum übergeordneten dataitem besteht). Dann kommt der Preis aus der Sales Price Tabelle. Dies funktioniert auch einwandfrei.
Doch nun reicht mir die Artikelnummer in der 2ten Section nicht. Ich möchte auch den Artikelnamen sehen. Darum dachte ich, ich setzte eine globale Variabel auf die tabel "item" und lasse mir so den Namen anzeigen. So habe ich eine Textbox erstellt und die Sourceexp auf "item.description" gesetzt. Doch jett fehlt mir eine Verknüpfung zum Dataitem "Sales Price". Ich weiß nicht wie man diese erstellt. Ist hier für setrange gedacht?

Mein weitere Lösungsansatz war, dass ich als Dataitem die Tabelle "Item" hinzufüge und diese mit der Sales Price über die "Item no" verbinde.
Dann in der Section der Sales Price ein Textbox anlege und die Sourceexp auf "item(das dataitem).description" setzte.
Die hat auch funktioniert. Zumindestens halb...
Es erscheint nun eine Artikelbeschreibung. Jedoch wenn ich 2 Artikel mit Preiszuordnungen habe, so wird die Artikelbeschreibung für Artikel 1 bei Artikel 2 angeben und Artikel 1 geht leer aus...

Zum bessern Verständnis: (Die Daten sind aus der Demodatenbank)

Nr. 47563218 <- Dataitem 1 (Customer)

Verkaufscode 47563218 <- Dataitem 2 (Sales Price.Sales Code)
Artikelnr. 70100 35,00
Artikelnr. 70101 Farbe, schwarz 10,00
▲Dataitem2(Sales Price.Item no.) ▲Dataitem3(Item.Desciption) ▲Dataitem2(Sales Price.Unit Price)

Der Fehler ist, das die Artikelbeschreibung "Farbe, schwarz" zu der Artikelnummer "70100" gehört. Für Nummer "70101" wäre die Beschreibung "Farbe, gelb".

Wäre nett wenn ihr mir auch weiter so toll helfen würdet :)

Gruß
Heiko_d

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 14:21

Hallo Heiko_D,

das mit der zusätzlichen Section kann man machen. Einfacher ist aber im OnAfterGetRecord von SalesPrice ein schlichtes
Code:
Item.Get("Item No.");

oder etwas sicherer
Code:
if not Item.Get("Item No.") then
           clear(Item);


ansonsten war dein Ansatz schon in Ordnung.

Gruß, Fiddi

Re: Report erstellen mit Variabel -Integer-

27. Februar 2009 15:09

Vielen dank fiddi :)

was genau nun die Funktion "get" macht, kann ich ja sicher in Navision nachlesen.

Gruß
Heiko_d