Report mit Verkaufszeilen drucken

21. März 2006 10:25

Hallo zusammen

Ich habe ein Problem. Ich will beim drucken eines Verkaufsbeleges (Auftragsbestätigung, Lieferschein, ...) nur genau die markierte Zeile ausdrucken. Das heisst, hat ein Verkaufsauftrag mehrere Verkaufszeilen muss ich die nicht markierten ignorieren.
Die einzige Möglichkeit die ich bis jetzt gefunden habe ist den DataItemTableView auf der Verkaufszeile leer lassen. Dann könnte man die Zeilennummer manuell eingeben. Diese Lösung finde ich aber nicht so praktisch.
Kann mir jemand helfen?

Gruss
mada

21. März 2006 10:49

Hallo Manda,
leider kenne ich mich in der NAVI 4 DB nicht so aus, aber was meinst Du mit Markiert?

Den Befehl MARK und MARKEDONLY?

Gruß Mikka

21. März 2006 10:55

Hallo Mada

Due musst im Report nur eine neue Funktion (z.B.) Def(SalesLine) erzeugen.
Dann übergibst Du den Record mit den markierten Zeilen als Parameter.
In der Def Funktion musst Du diesen Record einer globalen Variable mit Copy zuweisen.
SalesLine2.Copy(Salesline) //Copy übernimmt Filter und Markierungen
Danach musst Du im OnPreDataItem der SalesLine diesen globalen Record dem DataItem wieder mit Copy zuweisen.

Klar? (Ich hoffe)

Gruss
Martin

21. März 2006 11:13

@mikka

Mit markierte Zeile meinte ich. Die Zeile im Verkaufsauftrag die auf der rechten Seite das "dreieck" hat.


@martinst
Ich habe alles gemacht. Jetzt habe ich nur noch ein Problem. Vielleicht eine blöde Frage aber wie rufe ich den Report jetzt auf.

21. März 2006 11:30

Mada
Fast wie normal :-)
Du musst den Report als Variable definieren.
Code:
....
Report.SetTableView(SalesHeader)
Report.Def(SalesLine) !!!
Report.Runodal
....


Good luck

21. März 2006 11:49

martinst

ich habe immer noch einen knopf. Ich habe alles gemacht. Aber nach dem Aufruf des Reports mit:
Report.PrintRow(SalesHeader)
passiert nicht. Muss ich in der Funktion noch was anpassen?
und wie finde ich heraus welche Zeile markiert ist?

danke
mada

21. März 2006 12:22

Mada

Ich habe Dir Quick&Dirty ein FOB mit einem Lösungsansatz erstellt.
Form 42, Menubutton Drucken, neues Item "AB markierte Zeilen"
Form 46, Funktion PrintMarkSalesLine implementiert
Report 205, Funktion Def eingebaut, Änderungen in Sales Line-OnPreDataItem

Lies mal das FOB in eine neutrale CH-DB ein.
Du musst die Zeilen nicht mit CTRL+F1 markieren, sondern mit der Maus "anmalen".

Gruss

21. März 2006 15:25

@martinst

Danke vielmals. Jetzt habe ich nur noch das Problem das es mir gar keine Positionen druckt. Ich bin schon ne weile am testen aber ich finde den Fehler nicht.
Bei deinem Beispiel druckt es die Positionen auch nicht. Hätest du vielleicht nochmals ein Tip

Danke
mada

21. März 2006 15:35

Hallo Mada

Doch in meinem Beispiel druckt es die Zeilen.
Sieh Dir einmal den Code der Funktion PrintMarkSalesLine() in Form 46 an.
Dort findest Du folgende Zeile
CurrForm.SETSELECTIONFILTER(Rec2);
Das heisst, es werden alle mit der Maus markierten Datensätze gedruckt. Die markierten heisst hier aber nicht die Satzmarkierten .Mark(TRUE), sondern die angemalten.
Wenn Du willst, dass wirklich die Satzmarkierten (Ctrl+F1) gedruckt werden, musst Du nur die Zeile auskommentieren.
//CurrForm.SETSELECTIONFILTER(Rec2);

Das wars

Gruss

21. März 2006 17:08

@martinst

Danke nochmals für die Hilfe. Hat mir enorm geholfen.
Klappt alles wunderbar.
Den Code:
CurrForm.SETSELECTIONFILTER(Rec2);
habe ich nicht gefunden aber man kann ja mal was selber machen :-D
Aber noch ne letzte Frage:
Es ist schon so das ich am Schluss nach dem Befehl
OrderConfirmation.RUNMODAL;

noch ein
Rec.RESET;
mache. Um den Filter zurückzusetzten

Gruss
mada

21. März 2006 17:13

Hallo Mada

Wieso Reset?
Wenn Du meinen Code anschaust, verwende ich in Form 46 ja als Variable Rec2, eben aus genau diesem Grund, dass die Filter nicht auf den OriginalRecord angewendet werden.

P.S.
Aus welcher Ecke der Schweiz kommst Du eigentlich?

21. März 2006 17:28

Jetzt bin ich ein bisschen durcheinander:


Das ist der Code im Form 46 den ich von Dir habe. Das "Fette" habe ich hinzugefügt.

Code:
PrintMarkSalesLine()
//**
CLEAR(OrderConfirmation);
[b]CurrForm.SETSELECTIONFILTER(rec);[/b]
SalesHeader2.GET("Document Type", "Document No.");
SalesHeader2.SETRECFILTER;
SalesHeader2.FIND('-');
OrderConfirmation.Def(Rec);
OrderConfirmation.SETTABLEVIEW(SalesHeader2);
OrderConfirmation.RUNMODAL;
[b]rec.reset;[/b]
//**


Ich komme aus der nähe SG und du?

Gruss
mada

21. März 2006 17:37

Hallo Mada

Aha, jetzt ist es klar
Definiere eine neue lokale Var Rec2 SalesLine
Dann schreibst du statt
CurrForm.SETSELECTIONFILTER(rec);
CurrForm.SETSELECTIONFILTER(Rec2);


Dann kannst Du Dir das Reset sparen.

Ich komme aus Langenthal. Du aus SG, dann Alpha?

21. März 2006 17:55

Danke.
Nein ich arbeite nicht bei der ALPHA.

Gruss
mada

21. März 2006 17:57

Sondern???

22. März 2006 09:13

Du bist aber neugierig. schau in dein postfach