[Gelöst]Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 16:12

hallo zusammen,

Ich habe eine Form gebastelt die aus 2 tabellen besteht(T: 18 Customer, T:Sales Header Archive)
jetzt möchte den Report 292 (Verkaufsbeleg kopieren) dazu verwenden um einen Archvierten Auftrag zu kopieren.

wie krieg ich die Belegart & die Belegnr. im Report gefüllt sobald ich ihn starte?
Beispiel:
Zeile 40000, Belegnr 1003,Art: Auftrag ==> (wie im screenshot abgebildet).
danke.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von yopstar25 am 8. Dezember 2009 16:07, insgesamt 1-mal geändert.

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 16:23

Der Report besitzt ja schon eine Funktion "SetSalesHeader", die den Beleg übergibt, in den kopiert wird. Nun brauchst du nur noch eine ganz ähnlichen Funktion, um den Beleg zu übergeben, aus dem kopiert werden soll.

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 16:26

Hi.

Du könntest dir im Report 292 eine neue Funktion mit den entsprechenden Parametern (Belegart, Belegnr.) und globalen Variablen anlegen die du vor dem REPORT RUN aufrufst und die Variablen übergibst.
Die Werte aus den Parametern schreibst du dann in der Funktion in die globalen Variablen und füllst die Felder im Report entsprechend mit diesen...

Gruß

[edit] da war jemand schneller ;)

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 16:27

Normalerweise mit SETTABLEVIEW,
schau mal hier: Navision24.de - Einen Report mit gesetzten Filtern aufrufen

**Edit by Mikka**
Sorry, das geht nur bei den DataItems selbst. Wenn du auf der OptionForm filtern willst, muß du wie meien Voredner geschrieben haben eine Funtkion erstellen, die den Filterwert entgegen nimmt.

**Edit2 by Mikka**
Kleiner Tipp ohne schlau "Schwätzen" zu wollen.
Beim Programmieren und designen der Objekte sollte der "Style Guide" eingehalten werden.
Das macht das arbeiten für die User einfacher, das Buttons, Felder etc. immer an der gleichen Stelle plaziert werden.

Wenn du nicht genau weißt, wie manche Objekte aussehen sollen, schau dir der CRONUS DB das Design an, oder suche hier im Forum nach Style Guide / GUI Guide.

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 17:25

hallo,

irgendwie klappt noch nicht ganz.. (navision neuling):roll:

ChristophE hat geschrieben:Hi.

Du könntest dir im Report 292 eine neue Funktion mit den entsprechenden Parametern (Belegart, Belegnr.) und globalen Variablen anlegen die du vor dem REPORT RUN aufrufst und die Variablen übergibst.

Eine Funktion wurde angelegt mit folgendem Parameter:
Code:
SetBeleginfo(VAR Belegart : 'Quote,Order';VAR Belegnr : Code[20])
TmpDocType :=  Belegart;
TmpDocNo := Belegnr;

Die Werte aus den Parametern schreibst du dann in der Funktion in die globalen Variablen und füllst die Felder im Report entsprechend mit diesen...
im Report-Openform-Trigger fülle ich die Variablen
Code:

DocType:= TmpDocType ;
DocNo:= TmpDocNo;

Gruß

[edit] da war jemand schneller ;)

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 17:31

wie rufst du denn den Report auf?

über Report.RUN oder RUNMODAL ?

so müsste das ganze aussehen:
Code:
DeineReportVar.SetBeleginfo(Art,"Nr.");
DeineReportVar.RUNMODAL;


für Report 229 musst du also eine Variable auf der Form anlegen

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 17:37

Schau dir mal im Report den OptionString der Variable DocType an. Der ist anders als der der Variable TmpDocType, den du übergibst, somit wird der Wert für DocType falsch gesetzt. Du müsstest, falls du nur archivierte Aufträge oder archivierte Angebote kopieren willst, DocType auf DocType::"Arch. Order" oder DocType::"Arch. Quote" setzen.

Das mit der DocNo sieht dafür schon gut aus. Danach musst du die Werte noch so wie auf der RequestForm des Reports validieren.

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 18:19

ich glaub ich denke so kompliziert:

über RUNMODAL starte den Report
Code:

kopieBeleg.SetBeleginfo(SalesHeaderArchive."Document Type",SalesHeaderArchive."No.");
kopieBeleg.RUNMODAL;


McClane:

was meinst du mit werte validieren wie im Requestform? über neue globale Variable?

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 18:25

Ich meinte die Funktion ValidateDocNo im Report 292. Die wird aufgerufen, sobald man Belegart oder Belegnummer ausgewählt hat.

Ganz vergessen: um einen archvierten Beleg zu kopieren, musst du auch noch die Belegnr. Häufigkeit und die Versionsnummer des arch. Belegs übergeben.

Re: Archivierte Aufträge für Kunden kopieren

2. Dezember 2009 19:07

stimmt, habe ich auch übersehen,der primärschlüssel besteht aus 4 Felder:
Code:
Report - OnOpenForm()

DocType:= TmpDocType;
DocNo:= TmpDocNo;
DocNoOccurrence :=TmpHäufigkeit;
DocVersionNo :=TmpVersion;


muss ich jetzt noch ein GET-funktion vor dem SETbeleginfo einbauen?
Code:

OnPush()
kopieBeleg.SetBeleginfo(SalesHeaderArchive."Document Type",SalesHeaderArchive."No.",
  SalesHeaderArchive."Doc. No. Occurrence",SalesHeaderArchive."Version No.");
kopieBeleg.RUNMODAL;
CLEAR(kopieBeleg);

Re: Archivierte Aufträge für Kunden kopieren

3. Dezember 2009 09:13

Der Weg über die Tmp-Variablen ist nicht nötig. Du kannst die Werte DocType, DocNo etc. direkt in deiner Funktion setzen. Aber nochmal: du musst die Variable DocType passend zu dessen OptionString setzen. Also: falls der Parameter in der Funktion SetBelegInfo SalesHeaderArchiveDocType heisst und dort genau wie das Feld "Document Type" der Tabelle Sales Header Archive definiert ist:
Code:
if SalesHeaderArchiveDocType=SalesHeaderArchiveDocType::Quote then
  DocType:=DocType::"Arch. Quote";

Die anderen drei Variablen des Reports kannst du dafür direkt gleich den übergebenen Parametern setzen. Nachdem alle vier Varaiblen stimmen, rufst du noch die Funktion ValidateDocNo auf, übergibst deinen leeren VK-Auftrag und startest den Report. So sollte das klappen.

Re: Archivierte Aufträge für Kunden kopieren

4. Dezember 2009 10:52

Guten Morgen zusammen,

ich bin leider zu keinem Ergebnis gekommen.
vielleicht habe ich vergessen zu erwähnen dass der Kopierbutton auf dem Customercardform sich befindet & nicht auf sales Header Archiv.

folgendes habe ich bisher implementiert:

im Report 292:
eine Funktion TransferBeleginfo eingefügt:
mit folgendem Parameter:Belegart,Belegnr,BelegnrHäufigkeit,Versionnr
Code:
Var   Name   DataType                 Subtype    Length
Ja   Belegart                         Option  (analog zu DocType )       
Ja   Belegnr                         Code       20
Ja   BelegnrHäufigkeit                 Integer      
Ja   Versionnr                         Integer      

DocType :=  Belegart;
DocNo :=  Belegnr;
DocNoOccurrence := BelegnrHäufigkeit;
DocVersionNo := Versionnr;


Im OnPush-Trigger des button rufe ich die Funktion auf:
Code:
Report292.TransferBeleginfo(SalesHeaderArchiv."Document Type",SalesHeaderArchiv."No."
  ,SalesHeaderArchiv."Doc. No. Occurrence",
  SalesHeaderArchiv."Version No.");
report292.RUNMODAL;
CLEAR(report292);



eigentlich müssten die Variablen (DocType,DocNo,DocNoOccurrence,DocVersionNo ) gefüllt sein sobald ich eine Archivzeile wähle und den Reports aufrufe.

ich wäre echt dankbar wenn mir jemand ein Tipp gibt wie ich daraus komme.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Archivierte Aufträge für Kunden kopieren

4. Dezember 2009 11:04

ach ja, jetzt sehe ich es auch.
die Zeilen sind eine Subform...

am einfachsten ises dann den Button auf der Subform einzubauen und neben oder unter den Zeilen einzublenden ;)

Re: Archivierte Aufträge für Kunden kopieren

4. Dezember 2009 11:07

Und ich wäre echt dankbar, wenn du dir meinen letzten Beitrag mal durchliest :wink:
Nochmal:
SalesHeaderArchive."Document Type"::Quote entspricht nicht DocType::"Arch. Quote" (das gleiche gilt für Order)
Funktion ValidateDocNo <- WICHTIG

Re: Archivierte Aufträge für Kunden kopieren

4. Dezember 2009 15:27

Sorry McClane für die störung (ich bin einigermaßen noch in der Anfangsphase was Navision angeht) aber ich strenge mich wie du siehtst :cry:

die Funktion ValidateDocNo wird erst aufgerufen wenn DocNo = ' ' ist.
DocNo sollte genau aus der Subformzeile (SalesHeaderArchive."No.")vorbelegt sein wo der zeiger sich gerade steht.

was ich nicht verstehe, ist wenn der KopierButton sich ausserhalb der Subform befindet und ich den Report aufrufe, theoretisch sollte ich keinen bezug zu den Arch.zeilen habe.

voher weiß navision dass die Zeile Z.B 20000 angesprochen ist? dass beim Reportsaufruf genau die werte aus dieser zeile im Report stehen sollen?

sorry nochmal für störung .

Re: Archivierte Aufträge für Kunden kopieren

4. Dezember 2009 15:45

yopstar25 hat geschrieben:Sorry McClane für die störung

Was hab ich denn gesagt? Ich habe dich doch nur gebeten, dir meinen Beitrag durchzulesen :)

yopstar25 hat geschrieben:die Funktion ValidateDocNo wird erst aufgerufen wenn DocNo = ' ' ist.

Stimmt nicht.

yopstar25 hat geschrieben:voher weiß navision dass die Zeile Z.B 20000 angesprochen ist? dass beim Reportsaufruf genau die werte aus dieser zeile im Report stehen sollen?

Schau dir mal als Beispiel die VK-Auftragsmaske an->Textbausteine einfügen. Da wird auch aus der Mainform eine Funktion der Subform aufgerufen.

[gelöst]Archivierte Aufträge für Kunden kopieren

7. Dezember 2009 12:53

ein Clear auf die Globale Variable hat gefehlt , es hat aber funktioniert :-D
Vielen vielen Dank