16. Juli 2009 10:13
16. Juli 2009 10:37
16. Juli 2009 10:45
16. Juli 2009 14:17
{Variablen
Name DataType Subtype Length
SL Record Stückliste
Verkaufszeile Record Verkaufszeile
SLR Report Stückliste
}
Verkaufszeile.RESET;
Verkaufszeile.SETFILTER(Verkaufszeile.Belegart,'Rechnung');
Verkaufszeile.SETFILTER(Verkaufszeile."Belegnr.","Nr.");
IF Verkaufszeile.FINDSET THEN BEGIN
SL.RESET;
SL.SETCURRENTKEY(Artikel);
REPEAT
IF Verkaufszeile."Nr."<>'' THEN BEGIN
SL.Artikel:=Verkaufszeile."Nr.";
//IF
SL.FIND('=');
//THEN MESSAGE('Artikel: %1 gefunden',SL.Artikel);
SL.MARK(TRUE);
END;
UNTIL Verkaufszeile.NEXT=0;
END;
SL.MARKEDONLY(TRUE);
SLR.SETTABLEVIEW(SL);
SLR.RUN;
16. Juli 2009 14:29
// Rec = Sales Header
// Item = Record, Subtype Item
Verkaufszeile.RESET;
// Filtere auf alle VK-Zeilen des Beleges mit gefüllter Artikelnummer
Verkaufszeile.SETTRANGE("Document Type",Rec."Document Type");
Verkaufszeile.SETRANGE("Document No.",Rec."No.");
Verkaufszeile.SETRANGE(Type, Verkaufszeile.Type::Item);
Verkaufszeile.SETFILTER("No.", '<>%1', '');
IF Verkaufszeile.FINDSET THEN BEGIN
REPEAT
Item.GET(Verkaufszeile."No."); // hole Artikel
Item.MARK(TRUE); // markiere Artikel
UNTIL Verkaufszeile.NEXT=0;
END;
Item.MARKEDONLY(TRUE); // filtere auf markierte Artikel
SLR.SETTABLEVIEW(Item);
SLR.RUN;
16. Juli 2009 14:35
Steffen hat geschrieben:@McClane, bei einer Rechnung mit mehreren Artikeln, kann ich doch niemandem zumuten, dass er sich noch für jeden Artikel ein Blatt bzw. einen Report dazu holt, das wird zu viel.
16. Juli 2009 14:39
McClane hat geschrieben:Aber Natalies Lösung ist eh besser.
16. Juli 2009 15:00
Natalie hat geschrieben:Wenn MARKEDONLY + SETTABLEVIEW überhaupt funktionieren sollte. Geht vielleicht genauso wenig wie zusammen mit Temporären Records ...
16. Juli 2009 15:10
SL.RESET; //hat der nicht sonst noch die Marks einer vorigen Abfrage drin?
Verkaufsrechnungszeile.RESET;
Verkaufsrechnungszeile.SETRANGE(Verkaufsrechnungszeile."Belegnr.","Nr.");
//Verkaufsrechnungszeile.SETRANGE(Type, Verkaufsrechnungszeile.Type::SL); //was soll der hier machen?
Verkaufsrechnungszeile.SETFILTER("Nr.",'<>%1','');
IF Verkaufsrechnungszeile.FINDSET THEN BEGIN
REPEAT
SL.GET(Verkaufsrechnungszeile."Nr.")
SL.MARK(TRUE);
//SL.SETCURRENTKEY(Artikel);
//SL.Artikel:=Verkaufsrechnungszeile."Nr.";
//SL.FIND('=');
//SL.MARK(TRUE);
UNTIL Verkaufsrechnungszeile.NEXT=0;
END;
SL.MARKEDONLY(TRUE);
SLR.SETTABLEVIEW(SL);
SLR.RUN;
16. Juli 2009 15:20
SL.RESET; //hat der nicht sonst noch die Marks einer vorigen Abfrage drin? -> wenn SL global angelegt ist: könnte theoretisch vorkommen! Würd ich sowieso lokal anlegen
Verkaufsrechnungszeile.RESET;
Verkaufsrechnungszeile.SETRANGE("Document No.","No.");
Verkaufsrechnungszeile.SETRANGE(Type, Verkaufsrechnungszeile.Type::Item); //was soll der hier machen? -> auf Zeilen der Art Artikel filtern - Item hat hier nichts mit dem RECORD Item zu tun, es ist ein sog. OptionName!
Verkaufsrechnungszeile.SETFILTER("No.",'<>%1','');
IF Verkaufsrechnungszeile.FINDSET THEN BEGIN
REPEAT
SL.GET(Verkaufsrechnungszeile."Nr.")
SL.MARK(TRUE);
// Benutze nun eine Tabelle/Feld, in der du die Verknüpfung Artikel -> Rohartikel ablesen kannst
// Da ich diese Verknüpfung nicht kenne, setze ich "Rohartikelnr" als gegeben an:
IF Rohartikelvorhanden THEN BEGIN
SL.GET(Rohartikelnr);
SL.MARK(TRUE);
END;
UNTIL Verkaufsrechnungszeile.NEXT=0;
END;
SL.MARKEDONLY(TRUE);
SLR.SETTABLEVIEW(SL);
SLR.RUN;
16. Juli 2009 16:00
Verkaufsrechnungszeile.RESET;
Verkaufsrechnungszeile.SETRANGE("Belegnr.","Nr.");
Verkaufsrechnungszeile.SETRANGE(Art, Verkaufsrechnungszeile.Art::Artikel);
Verkaufsrechnungszeile.SETFILTER("No.",'<>%1','');
IF Verkaufsrechnungszeile.FINDSET THEN BEGIN
REPEAT
SL.GET(Verkaufsrechnungszeile."Nr.") //das klappt nicht, vermutlich weil er eine Artikelnummer und zusätzlich die Zeilennummer haben möchte
SL.MARK(TRUE);
// Benutze nun eine Tabelle/Feld, in der du die Verknüpfung Artikel -> Rohartikel ablesen kannst
//das ist ja die Tabelle SL, in dieser sind die Rohartikel, diese kennzeichnen sich durch die erste
//Spalte (der Artikel) und einer fortlaufenden Zeilennummer in der zweiten Spalte, die Rohartikel
//haben eine eigene Artikelnr., diese hat aber nichts mit dem primary Key zu tun.
//als Beispiel hat der Artikel 3033-035-77-10
//den Rohartikel 3033-035-77-10 Zeilennr. 45223 und 3033-035-77-10 Zeilennr. 45224,
//diese haben dann verschiedene Eigenschaften
// Da ich diese Verknüpfung nicht kenne, setze ich "Rohartikelnr" als gegeben an:
IF Rohartikelvorhanden THEN BEGIN
SL.GET(Rohartikelnr);
SL.MARK(TRUE);
END;
UNTIL Verkaufsrechnungszeile.NEXT=0;
END;
SL.MARKEDONLY(TRUE);
SLR.SETTABLEVIEW(SL);
SLR.RUN;
16. Juli 2009 20:23
17. Juli 2009 08:24
SL.SETCURRENTKEY(Artikel);
SL.Artikel:=Verkaufsrechnungszeile."Nr.";
SL.FIND('=');
SL.MARK(TRUE);
17. Juli 2009 08:41
Steffen hat geschrieben:Also in der ersten Spalte steht die Artikelnr. und in der Zweiten steht eine fortlaufende Zeilennr. gemeinsam ergibt das den Primarykey.
17. Juli 2009 08:49
17. Juli 2009 08:53
17. Juli 2009 08:53
// Anstatt
{SL.SETCURRENTKEY(Artikel);
SL.Artikel:=Verkaufsrechnungszeile."Nr.";
SL.FIND('=');
SL.MARK(TRUE);}
// so
SL.SETCURRENTKEY(Artikel);
SL.SetRange(Artikel,Verkaufsrechnungszeile."Nr.");
if SL.FIND('-')then
repeat
SL.MARK(TRUE);
until SL.next=0;
17. Juli 2009 09:00
17. Juli 2009 09:05
Natalie hat geschrieben:Oder noch besser: Wie lautet die Report-ID?
17. Juli 2009 09:06
Steffen hat geschrieben:Die Stuckliste existiert nicht.
Identifizierende Felder und Werte:
Artikel='3033-035-77-10',Zeilennr.='0'
17. Juli 2009 09:08
McClane hat geschrieben:Natalie hat geschrieben:Oder noch besser: Wie lautet die Report-ID?
Ob das nun wirklich besser war ....
17. Juli 2009 09:11
Verkaufsrechnungszeile.RESET;
Verkaufsrechnungszeile.SETRANGE("Belegnr.","Nr.");
Verkaufsrechnungszeile.SETRANGE(Art, Verkaufsrechnungszeile.Art::Artikel);
Verkaufsrechnungszeile.SETFILTER("Nr.",'<>%1','');
IF Verkaufsrechnungszeile.FINDSET THEN BEGIN
REPEAT
SL.SETCURRENTKEY(Artikel);
SL.GET(Verkaufsrechnungszeile."Nr."); // Hier ist der Break on Error
IF SL.FIND('-') THEN BEGIN
REPEAT
SL.MARK(TRUE);
UNTIL SL.NEXT=0;
END;
UNTIL Verkaufsrechnungszeile.NEXT=0;
END;
SL.MARKEDONLY(TRUE);
SLR.SETTABLEVIEW(SL);
SLR.RUN;
17. Juli 2009 09:19
17. Juli 2009 09:20
SL.GET(Verkaufsrechnungszeile."Nr.");
SL.SETRANGE(Artikel,Verkaufsrechnungszeile."Nr.");
17. Juli 2009 09:23