[Gelöst] Visual Studio 2010 Professional spinnt?

8. Mai 2013 14:56

Guten Tag liebe Community,

ich bin noch immer am Upgrade meiner Kundenreports von V5.00 auf NAV2013.

Bei meinem heutigen Fall liegt's mal wieder an Visual Studio:
Der Kunde möchte dass er einstellen kann ob auf der Verkaufsrechnung sein Firmenlogo immer (1), nie(2) oder erst ab der 2. Kopie(3) des Beleges angedruckt wird.
Dies habe ich bisher über den Hidden-Ausdruck versucht zu steuern, was an sich auch funktioniert.

Nur bei der letzen Option hakt es massiv - das Programm erkennt nicht ob es eine Kopie ist oder nicht. Hierfür hat es die Variable "OutputNo" die ich per Funktion in den Seitenheader ziehe.
Wenn alles richtig läuft sollte das Programm eigentlich erst ab der 2. Seite das Bild drucken. Stattdessen wird's aber NUR auf der 2. Seite ausgeblendet.

Kennt wer solche Fehler, dass die Vergleiche bei derartig verschachtelten iifs hapern oder hat gar direkt eine Lösung?
Hier mein Code:
Code:
=Switch(First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "1", iif(Code.GetPicture(1) = "",true,false), //immer
        First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "2", iif(Code.GetPicture(1) = "",true,true), //nie
        First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "3", iif(Code.GetOutputCheck = 1,true,iif(Code.GetPicture(1) = "",true,false))) //nach der 2. Kopie

Die "Code.GetPicture"-Funktion soll nur sicherstellen, dass auch ein Bild mitgeliefert wurde um das "Bild-Fehler"-Bild nicht zu drucken.

MfG
Sipa
Zuletzt geändert von Sipa am 8. Mai 2013 16:46, insgesamt 1-mal geändert.

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 15:06

Schonmal die Reihenfolge geändert? Statt 1,2,3 mal 3,2,1?
Was macht genau GetOutputCheck? Mir kommts vor als wäre das eher der Haken. Probier mal >, <, => oder =< 1 aus

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 15:12

Inwiefern rumdrehen?
Die Switch-Abfrage umsortieren, die Werte der Optionvariable umdrehen?
Entschuldige das weiß ich nicht ganz was du meinst ^^"

//EDIT:
OutputCheck ist nur eine Hilfe um diese Variable die angibt im wievielten Druck sich der aktuelle Beleg bereits befindet in den Kopf des Reports zu bringen.
Die Vergleiche hab ich auch schon in den Formen getestet:
OutputNo = 1 ---> hidden: true
OutputNo > 1 ---> hidden: false
OutputNo <> 1 --> hidden: false

Und interessanter aber unverständlicher Weise:
OutputNo > 0 --> hidden: false
Funktionierte genau richtig: Das Bild wurde immer gedruckt!
Zuletzt geändert von Sipa am 8. Mai 2013 15:15, insgesamt 1-mal geändert.

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 15:14

Sipa hat geschrieben:Inwiefern rumdrehen?
Die Switch-Abfrage umsortieren, die Werte der Optionvariable umdrehen?
Entschuldige das weiß ich nicht ganz was du meinst ^^"


Ja, umsortieren. Beachte bitte auch noch meine nachträglichen Ergänzungen ;-)

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 15:24

Alles was für mich im Bereich des logisch verständlichen war hab ich jetzt ausprobiert.
Ohne Erfolg.

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:08

Ohne mir jetzt deinen Ausdruck im Einzelnen angesehen zu haben:
OutputNo beinhaltet das aktuelle Exemplar ein und desselben Beleges.
Ouput 1 = Original
Ouput 2 = 1. Kopie
Ouput 3 = 2. Kopie
usw ...
Soll also das Logo nur ab der zweiten Kopie kommen, muss der Hiddenausdruck hierfür lauten: OutputNo < 3

Ich wäre das Problem übrigens anders angegangen, weil das meiner Meinung nach übersichtlicher ist und die die Logik jederzeit leichter von C/AL aus steuern kannst:
Du könntest im C/AL-Teil eine neue globale Boolean-Variable deklarieren namens "Logo ausblenden" (oder sinngemäß). Diese setzt du im CopyLoop - OnAfterGetRecord,je nach gewählter Option und aktuellem Exemplar. Und du fügst die Variable als Column dem DataSet (CopyLoop) hinzu.
Hiddenausdruck deiner VS-Picture Box = dein neues DataSet-Feld - theoretisch, siehe nächster Abschnitt.

Folgendes gilt übrigens auch für die Lösung, wie du sie bisher probiert hast:
Wenn dein Logo sich im Kopf-Bereich von VS befindet, kannst du nicht einfach First(Fields!PrintLetterHeader.Value, "DataSet_Result") machen. Das funktioniert zwar syntaktisch, liefert aber den falschen Wert (teste das bitte: lass dir den Wert im Reportkopf ausdrucken. Ist er auch im Drucklayout statt nur Seitenvorschau auf allen Seiten richtig??). Damit das bombensicher funktioniert, musst du die GetData/SetData-Logik um dieses neue Feld ergänzen und das Feld dann mittels Code.GetData(xxx) im Hiddenausdruck ansprechen. Hast du dich schonmal mit GetData auseinandergesetzt?

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:17

Hallo Natalie,

1. Ja das es "erst ab der 2. Kopie" heißt ist irreführend, der Kunde wollte das damals so bedeuted aber "nach dem Originaldruck direkt anfangen" also dem 2. Druck wirklich
2. Die Variante mit der boolschen Variable probier ich mal (hätte man ja auch selber drauf kommen können^^)
3. Ich mach auch kein First(...) sondern arbeite mit einer Funktion die an sich GetData und SetData nachbaut.Durch die Funktion wird eine Textbox (!) mit dem Wert OutputNo eingelesen und durch eine zweite Funktion "GetOutputCheck" wieder ausgegeben. Funktioniert einwandfrei und ich hab mir das Ergebnis auch im Header ausgeben lassen - es kam immer der richtige Wert. In der Abfrage des Hidden-Ausdrucks wird das Ergebnis nur wiederrum fehlinterpretiert.
4. Ja alle Test wurden im Drucklayout gemacht um die Seiten auch korrekt gerendert zu haben.

MfG
Sipa

//EDIT: First verwende ich nur für meine Optionvariable, da diese in der Requestpage gesetzt wird und somit in allen DataSet-Zeilen den selben Wert hat.

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:29

Das hört sich so weit gut an. Also die boolean-Lösung favorisiere ich noch immer.
Wenn wir aber bei deinem Weg bleiben und wirklich davon ausgehen können, dass du die OutputNo sauber weiterreichst, müsste der Hiddenausdruck dann ungefährt so sein:

Code:
=Switch(First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "1", Code.GetPicture(1) = "", //immer
        First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "2", true, //nie
        First(Fields!PrintLetterHeader.Value, "DataSet_Result") = "3", (Code.GetOutputCheck = 1) OR (Code.GetPicture(1) = "")) //nach der 2. Kopie

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:38

Hallo Natalie,
danke für die Hilfe: Die boolsche Variante hat gut gegriffen und bei der bleibe ich jetzt auch.
Hierbei ist mein C/AL-Code folgender:
Code:
CASE PrintLetterHeader OF
  PrintLetterHeader::always:
    PrintHeader := TRUE;
  PrintLetterHeader::never:
    PrintHeader := FALSE;
  PrintLetterHeader::"from 2. copy":
    IF OutputNo > 1 THEN
      PrintHeader := TRUE
    ELSE
      PrintHeader := FALSE;
END;


Innerhalb von VS:
Code:
=Code.GetPrintHeader = False OR Code.GetPicture(1) = ""


MfG
Sipa

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:42

Schön :-)

Auch diesen Teil hier
Code:
OR Code.GetPicture(1) = ""
hättest du noch im C/AL-Teil abfangen und komplett in PrintHeader abbilden können: DeinRec.Picture.HASVALUE

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:46

Naja das schieb ich dann gerne auf die Ausrede:
"Bin gerade im ersten Ausbildungjahr!" :)

Trotzdem noch danke für den Tipp.

Mfg Sipa

Re: Visual Studio 2010 Professional spinnt?

8. Mai 2013 16:50

Sipa hat geschrieben:Naja das schieb ich dann gerne auf die Ausrede:
"Bin gerade im ersten Ausbildungjahr!" :)

Dann mal weiter in diesem Tempo!! :-)