seltsames verhalten durch if schleife

  • Moin,


    bin gerade dabei ein Rechnungsexport in LS zu schreiben, das soll ein rtf file sein, das aus diversen templates zusammengesetzt ist,


    und dabei tritt ein seltsamer fehler auf....
    also die bedingung soll testen ob die nächste position noch auf die seite passt (dpsition kann ja auch mehrere Zeilen lang sein) also wird die position als block gezählt und zu den verbrauchten zeilen hinzuaddiert.....
    wenn ich dann die bedingung stelle : if zeilen < 11 then
    verwurschtelt notes mir das rtf-file und ich kann es nicht öffnen, schreibe ich hingegen : if zeilen < 11 and (zeilen + blockarray(i))<11 then....


    dann funktioniert das schreiben der rtf file, nur macht er dann den fehler das er die zeilenanzahl voll ignoriert.... sprich er schreibt 6 zeilen und nicht 10 wie er ja dürfte, und macht dann schon den seitenumbruch und schreibt den rest der positionen auf der nächsten seite :-?


    hatte von euch schon jemand solch einen fehler, in beiden fällen sind die bedingungen in der test umgebung erfüllt und er läuf den code fehler frei durch


    danke schonmal im vorraus

  • sry, ist ja klar so ohne weiteres geht das nicht :) na dann hier ist der code, ist aber noch nicht von allen unreinheiten befreit
    _____________________________


    Function FooterSchreiben (sumzwie As Double, partnerID As String, Rechdatstr As String,rechnungsnummerstr As String, seite, SumNetto As Double, SumBrutto As Double, SumMWST As Double, MWSatzStr As String, entrycol As notesviewentrycollection, filenum1%, filenum2%)

    Dim x As Double
    Dim n As Integer
    Dim block As Integer
    Dim t As Integer
    Dim countarray (0 To 100)As Variant

    n= 2
    t = 0


    For i= 1 To entrycol.Count
    Set entry = entrycol.GetNthEntry(i)
    Stop
    block = 0
    If Isarray(entry.ColumnValues(2)) Then 'Positionen als Block zählen
    meinarray = entry.ColumnValues(2)
    For q = 0 To Ubound(entry.ColumnValues(2))
    block = block +1
    Next
    Else
    block = block +1
    End If
    countarray(i) = block

    t = t + countarray(i)

    'Zeilenprüfung anfang


    'WENN t kleiner 11 UND t + letztem block kleiner 11 DANN
    'schreibe nächsteBlock, und prüfe dann nochmal, wenn dieBedingung nicht mehr erfüllt ist schreibe den
    ' nächsten Block auf der ander Seite usw...
    '

    If t < 11 Then ' wenn mit dem akt. Block mehr als 34 Zeilen verbraucht wurden, dann auf nächstem
    'Blatt weiterdrucken
    'dann auf nächstem Blatt weiterdrucken, ( ZU TESTZWECKEN AUF 10 ZEILEN REDUZIERT! )

    If Isarray(entry.ColumnValues(2)) Then 'Block auf erster Seite zuende schreiben
    meinarray = entry.ColumnValues(2)
    For q = 0 To Ubound(entry.ColumnValues(2))
    Print # filenum1%, meinarray(q) & "\par"
    Next
    Else
    Print # fileNum1%,entry.ColumnValues(2) & "\par"
    End If
    Stop


    Else

    'Zwischensumme sinnvoll runden
    x= SumZwie
    SumZwie = RundKor (x, n)

    Print # fileNum1%,"" & "\par"
    Print # fileNum1%, " " & "*** Fortzetzung auf nächster Seite ***" & " " & "*** Zwischensumme ***"& "\par"
    Print # fileNum1%, " "& Cstr(Format(SumZwie, "Currency")) & "\par"
    Close fileNum2%
    Seite = seite +1

    '------------------Seite abschließen und mit der nächsten anfangen-------------------

    ' Template 5 und StPr, Steuern, Rechbe bleibt in dem Fall leer...

    strfile2 = "k:\Templates\templ5.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop
    Print # fileNum1%, " " +"\cell " + " " + "\cell " + " " + "\cell " + " "
    Close fileNum2%

    '---------- SEITENUMBRUCH------------ und Seitenzahl schreiben

    strfile2 = "k:\Templates\templSeiUm.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop

    Print # fileNum1%, "Seite: " & Seite

    Close fileNum2%

    ' Template 8 mit Kopie oder Rechnung bedrucken

    'if copystat = 1 then
    'Bezeichnung = "KOPIE"
    'else
    Bezeichnung = "RECHNUNG"
    'end if

    strfile2 = "k:\Templates\templ8.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop

    Print # fileNum1%, Bezeichnung

    Close fileNum2%

    ' Template 9 und KdNr und RechDat und RechNr

    strfile2 = "k:\Templates\templ9.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop

    Print # fileNum1%, PartnerID + "}{\f2\insrsid1454498\charrsid677082 \cell }{\f2\insrsid1454498 " + RechDatStr + _
    "}{\f2\insrsid1454498\charrsid677082 \cell }{\f2\insrsid1454498 " + rechnungsnummerstr

    Close fileNum2%




    ' Template 10 Positionen

    strfile2 = "k:\Templates\templ10.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop


    For p = i To entrycol.count
    Set entry = entrycol.GetNthEntry(p)
    If Isarray(entry.ColumnValues(2)) Then 'Block schreiben
    meinarray = entry.ColumnValues(2)
    For q = 0 To Ubound(entry.ColumnValues(2))
    Print # fileNum1%,meinarray(q) & "\par"
    Next
    Else
    Print # fileNum1%,entry.ColumnValues(2) & "\par"
    End If
    Next


    Close fileNum2%
    ' Template 5 und StPr, Steuern, Rechbe

    'Sinnvolles Runden der Beträge durch aufruf der Funktion RundKor

    'Nettosumme sinnvoll runden
    x= SumNetto
    SumNetto = RundKor (x, n)

    'Bruttosumme sinnvoll runden
    x= SumBrutto
    SumBrutto = RundKor (x, n)


    'MehrwertSteuerSumme sinnvoll runden
    x= SumMWST
    SumMWST = RundKor (x, n)


    strfile2 = "k:\Templates\templ11.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop
    Print # fileNum1%, Cstr(Format(SumNetto, "Currency")) +"\cell " + MWSatzStr + "\cell "_
    + Cstr(Format(SumMWST,"Currency")) + "\cell " + Cstr(Format(SumBrutto, "Currency"))
    Close fileNum2%


    ' Template 6 und ENDE
    strfile2 = "k:\Templates\templ12.txt"
    fileNum2% = Freefile()
    Open strfile2 For Input As fileNum2%
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Do Until Eof(fileNum2%)
    Line Input #filenum2%, iLine
    Print # fileNum1%, iLine
    Loop
    Close fileNum2%



    End If ' Zeilernprüfung ende
    Next
    Close fileNum1%

    End Function
    __________________________

  • Hallo erstmal,

    also der seitenumbruch ist im template templSeiUm verankert, der Header für die erste Seite wird schon im agenten geschrieben ( da der immer benötigt wird), danach prüft er wie viele Seiten benötigt werden, wenn er mehr als eine braucht ruft er besagte funktion Footerschreiben auf (das ist die gepostete)


    so und da schreibt er solange die positionen auf der ersten seite wie die als block definierten positionen als ganzer block auf die seite passen, wenn das nicht mehr der fall ist schreibt er den nächsten block auf der nächsten seite...... so sollte das eigentlich funktionieren tuts aber immo leider noch nicht


    danke schonmal :)



    EDIT:


    also ein denkfehler hab ich schon gefunden ;) ich poste gleich mal ne zusammenfassung wie es laufen soll....

  • parameter holen


    =============================
    header für seite 1 schreiben mit entsprechenden werten


    ============================================================
    gesamt benötigte Zeilen für die positionen zählen


    ================================================================
    anhand der zeilen anzahl der seiten bestimmen


    ===================================================================
    wenn bis 37 zeilen benötigt werden
    dann
    1.unterfunktion Seite1 aufrufen und nur erste Seite schreiben
    =============================================================
    parameter schreiben
    positionen schreiben
    seite beenden, und speichern


    wenn nicht
    2. Prüfe ob 2 oder mehr seiten benötigt werden
    =============================================================

    wenn 2 Seiten benötigt werden, dann unterfunktion FooterSchreiben aufrufen
    =============================================================
    ---------------->
    :
    : Positionen als block zählen
    : zeilen = zeilen + block
    :
    ----wenn zeilen unter der anzahl der verwendbaren zeilen ist dann
    :
    : aktuellen block auf erster Seite schreiben
    :
    ----wenn nicht
    :
    : zwischensumme und hinweise auf nächste seite schreiben
    : seite beesnden, Seitenumbruch
    : den aktuellen block schreiben
    :
    : Sprung an den anfang
    : :
    :_________________________:


    Seite beenden, und speichern

  • so wie gesagt hatte nen denk- oder anders gesagt zählfehler drin also so stimmt das topic natürlich nicht :D


    mehr dennoch für anregungen bin ich offen, weil so ganz schlüssig funzt das noch nicht :(


    Danke

  • naja es funktioniert schon, nachdem ich meinen fehler behoben habe (asche auf mein haupt...) nur muss ich noch "feintuning" betreiben um das ganze den usern zum verwurschteln geben zu können, sprich das muss sicher funktionieren....und ich bezweifle gerade das das immer bei jeder eventuelalität der fall ist.....user halt ;) naja bin aber mit meiner teststrecke noch nicht ganz durch, werd hier immer irgendwie anderweitig eingespannt.... :)


    also wenn keine weiteren fragen dazu sind.....und auch keine weiteren vorschläge setz ich das thema erstmal auf erledigt


    taurec:
    Danke !


    gruss Gregor

  • taurec



    Ja eine beschreibung der lösung und den gesamten queltext poste ich noch sobald das fertig ist, die funktion wurde erweitert, da es nun in mal vorgekommen ist das mehr als 2 seiten benötigt werden, dh der agent soll jetzt n seiten drucken können sobald das alles funktioniert (hab gerade kaum zeit dafür, da ich gerade die komplette notes umgebung übernehme und noch so einiges an anderen tasks erledigt werden müssen die prio 1 haben) :D bitte daher um etwas geduld


    poste dann aber alles agent plus entsprechende unterfunktionen, um ein abgerundetes bild zu liefern



    vielen dank nochmal, hab schon viel hilfe in diesem forum bekommen



    Gruss Gregor