Parameter verschwinden in Function [ERLEDIGT]

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Parameter verschwinden in Function

Beitrag von Martin Altmann »

Manfred,
zeige doch mal bitte exemplarisch von einer solchen Funktion, die Probleme macht, den Bereich ab der END SEQUENCE bis zum RETURN - dazwischen müssten ja dann die ganzen NILerein stehen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Parameter verschwinden in Function

Beitrag von Manfred »

Martin,
die Funktion, die Probleme macht, hat keine Parameterdaten erhalten. Mehr ist es nicht. Das womit ich den Thread eröffnet habe hier. Der Cursor steht vor der Funktion und alles ist noch OK, dann wird die Funktion aufgerufen und nichts ist mehr da. Aber wie gesagt, ich bin dabei die Quellcodes rückwirkend nachzustellen um zu sehen, ab wann es passiert ist.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Parameter verschwinden in Function

Beitrag von Manfred »

Das Thema ist noch nicht vom Tisch...

ich habe mal einen Breakpoint gesetzt und immer wieder etwas geartet, bzw. fortgesetzt.

trotzdem gibt es einen Programmabbruch
memwatch.JPG
memwatch.JPG (261.1 KiB) 4382 mal betrachtet
obwohl die Handles jetzt wohl wesentlich weniger sind als bei einem unterbrechungsfreien Durchlauf. Ich kann der Sache nicht folgen, was da abgeht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Parameter verschwinden in Function

Beitrag von Manfred »

ich bin total sprachlos

Code: Alles auswählen

FUNCTION mwst_jsal_aktualisiere( x_tg , x_jjjj )                                // gesichtet 20.03.2014
         LOCAL ar_mwst := {}
         LOCAL ar_bst  := {}
         LOCAL ar_feh  := {}
         LOCAL su      := 0
         LOCAL xx      // M.K. 24.04.2013

         MEMVAR oVtPara

         DEFAULT x_tg   TO oVtPara:m_mtg_nr
         DEFAULT x_jjjj TO oVtPara:m_mtg_jahr

         BEGIN SEQUENCE
               nim_jo( "S" , 0 , 1 , "JO" )
               jo->(DbSetFilter({|| jo->jjjj = x_jjjj},"jo->jjjj = x_jjjj"))
               jo->(DbEval({||su := ascan( ar_bst , jo->gruppe + jo->konto ), IF( su = 0 ,LADE_JOF(ar_bst,ar_mwst) , ADD_JOF(ar_mwst,su))}))
               JO->(DbCloseArea())

               nim_fib( "s" , 0 , 1 , "FIB" )
//*********************** siehe Erklärung unten ************************************************************************
               fib->(DbSetFilter( {|| fib->sel1 = "BUC" .AND. SubStr(fib->nr_buc,1,2) = SubStr(x_jjjj,3,2)},"fib->sel1 = 'BUC' .AND. SubStr(fib->nr_buc,1,2) = SubStr(x_jjjj,3,2)"))
//*****************************************************************************************************************
               fib->(DbEval({||su := AScan(ar_bst, fib->gruppe + fib->konto), IF( su = 0 ,LADE_FIBF(ar_bst,ar_mwst) , ADD_FIBF(ar_mwst,su))}))
               FIB->(DbCloseArea())

               nim_vo( "S" , 0 , 1 , "VO" )
               vo->(DbSetFilter({|| vo->jjjj = x_jjjj},"vo->jjjj = x_jjjj"))
               vo->(DbEval({||su := AScan(ar_bst, vo->gruppe + vo->konto ),IF( su = 0 ,LADE_VOF(ar_bst,ar_mwst) , ADD_VOF(ar_mwst,su))}))
               VO->(DbCloseArea())

               nim_sal( "S" , 0 , 1 , "JSAL" )
               jsal->(DbEval({||su := AScan( ar_bst, jsal->gruppe + jsal->konto ),;
                                IF( su > 0 ,Eval({||net_rlo(),JSAL->b_mwst := ar_mwst[su,1] ,;
                                                              JSAL->k_mwst := ar_mwst[su,2] ,;
                                                              JSAL->o_mwst := ar_mwst[su,3] ,;
                                                              JSAL->v_mwst := ar_mwst[su,5] ,;
                                                              jsal->(DbUnlock());
                                                 };
                                                ),;
                                   );
                              };
                             );
                      )
                       **** Kontrolle Kasse
               AEval( ar_mwst , {|a,xi|xx := xi, ar_mwst[xi,10] := ar_mwst[xi,2] - ar_mwst[xi,4],;
                                                 IF( Round(ar_mwst[xi,4],2) # Round(ar_mwst[xi,2],2) ,;
                                                     Eval({|| AAdd(ar_feh,"FEHLER KASSE bei :: " + oVtPara:m_mtg_nr + " : " + oVtPara:m_mtg_jahr + " :: in :: "+ ar_bst[xx] ),;
                                                              AAdd(ar_feh,"                 :: in JO   : " + Str(ar_mwst[xx, 2],10,2)) ,;
                                                              AAdd(ar_feh,"                 :: in FiBu : " + Str(ar_mwst[xx, 4],10,2)) ,;
                                                              AAdd(ar_feh,"                 :: Diff.   : " + Str(ar_mwst[xx,10],10,2)) ,;
                                                              AAdd(ar_feh,"                              ");
                                                          };
                                                         ),NIL;
                                                    );
                                };
                    )

               IF len(ar_feh) > 0
                  sic_in_datei( ar_feh )       // lass stehen
               ENDIF
               JSAL->(DbCloseArea())
         END SEQUENCE
         ASize( ar_mwst , 0 )
         ASize( ar_bst  , 0 )
         ASize( ar_feh  , 0 )
         su := NIL
         xx := NIL
         RETURN NIL
Wenn ich den Filter oben entferne, dann läuft alles ohne Probleme und die Handles halten sich im zivilen Bereich. Sorry, aber ich verstehe das nicht und sehe auch nichts mehr.
Lasse ich den Filter drin und nehme das Dbeval raus, knallt es trotzdem . Also muß es irgendwie an dem Filter liegen. :banghead:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Parameter verschwinden in Function

Beitrag von Manfred »

Das hier klappt

Code: Alles auswählen

nim_fib( "s" , 0 , 1 , "FIB" )
               fib->(DbGoTop())
               DO WHILE ! fib->(Eof())
                  IF fib->sel1 = "BUC" .AND. SubStr(fib->nr_buc,1,2) = SubStr(x_jjjj,3,2)
                     su := AScan(ar_bst, fib->gruppe + fib->konto)
                     IF su = 0
                        LADE_FIBF(ar_bst,ar_mwst)
                     ELSE
                        ADD_FIBF(ar_mwst,su)
                     ENDIF
                  ENDIF
                  fib->(DbSkip())
               ENDDO
//               fib->(DbSetFilter( {|| fib->sel1 = "BUC" .AND. SubStr(fib->nr_buc,1,2) = SubStr(x_jjjj,3,2)},"fib->sel1 = 'BUC' .AND. SubStr(fib->nr_buc,1,2) = SubStr(x_jjjj,3,2)"))
//               fib->(DbEval({||su := AScan(ar_bst, fib->gruppe + fib->konto), IF( su = 0 ,LADE_FIBF(ar_bst,ar_mwst) , ADD_FIBF(ar_mwst,su))}))
               FIB->(DbCloseArea())
muß ich nicht verstehen, wil ich jetzt auch nicht mehr verstehen. Irgendwann mal im nächsten Leben vielleicht. :angry5:

Dank an Jan für den kurzen Schlag auf den Hinterkopf.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Parameter verschwinden in Function

Beitrag von brandelh »

Bei dbEval() sollte man eh den FOR Block statt einem Filter nutzen,
aber von der Übersichtlichkeit ist dieser Aufbau vorzuziehen.

Er könnte sogar deutlich schneller als vorher sein, da der Filter weg ist.
Gruß
Hubert
Antworten