Seite 1 von 1

alle Jahre wieder KW1 ... [erledigt]

Verfasst: Mi, 02. Jan 2013 5:23
von AUGE_OHR
hi,

ich habe hier irgendwo einen Wurm drin ...

Code: Alles auswählen

   nStartKW := WocheJahr(STOD( STRZERO(nJAHR-1,4)+STRZERO(nMonat,2)+STRZERO(nDate,2)))
   nEndeKW  := WocheJahr(STOD( STRZERO(nJAHR  ,4)+STRZERO(nMonat,2)+STRZERO(nDate,2)))

   //
   // Problem KW1 only !?
   //
   nLst3112 := WocheJahr(STOD( STRZERO(nJAHR-1,4)+STRZERO(    12,2)+"31"))
   nNeu0101 := WocheJahr(STOD( STRZERO(nJAHR  ,4)+STRZERO(     1,2)+"01"))
#IFDEF _TEST_
   Ondummy("nStartKW",nStartKW,"nEndeKW",nEndeKW,"nLst3112",nLst3112,"nNeu0101",nNeu0101)
#ENDIF

   IF nLst3112 = nNeu0101
      //
      // wenn 1 = 1 -> 52 ?
      //
      nLst3112 := WocheJahr(STOD( STRZERO(nJAHR-1,4)+STRZERO(12,2)+"31")-7)
   ENDIF
#IFDEF _TEST_
   Ondummy("nLst3112",nLst3112,"nNeu0101",nNeu0101)
#ENDIF

...
      //
      // letztes Jahr
      //
      nDiff    := nLst3112 - (nStartKW-1)

#IFDEF _TEST_
   Ondummy("nDiff",nDiff,"nLst3112",nLst3112,"nStartKW",nStartKW)
#ENDIF

      IF nDiff > 0
          nAltKW := nLst3112 - nDiff +1
#IFDEF _TEST_
   Ondummy("nAltKW",nAltKW,"nLst3112",nLst3112 )
#ENDIF

         i := 1
         FOR i := nAltKW TO nLst3112
            AADD(::KauftItem,{0,0,0,0} )
            nPosi++
            dDate := KWTOD( STRZERO(nJAHR-1,4)+STRZERO(i,2) )
#IFDEF _TEST_
   Ondummy("dDate",dDate,"nPosi",nPosi)
#ENDIF
            ::SuchImArray(dDate,nPosi)

            nZuMax := MAX(nZuMax,::KauftItem[ nPosi,EleZugang ])
            nAbMax := MAX(nAbMax,::KauftItem[ nPosi,EleAbgang ])
#IFDEF _TEST_
   Ondummy("nZuMax",nZuMax,"nAbMax",nAbMax)
#ENDIF

         NEXT
      ENDIF
und bekomme das
nAltMonat 1
gefunden 5033 201201
gefunden 5033 201202
gefunden 5033 201203
gefunden 5033 201204
gefunden 5033 201205
gefunden 5033 201206
gefunden 5033 201207
gefunden 5033 201208
gefunden 5033 201209
gefunden 5033 201210
gefunden 5033 201211
gefunden 5033 201212
nStartKW 52 nEndeKW 1 nLst3112 1 nNeu0101 1
nLst3112 52 nNeu0101 1
nDiff 1 nLst3112 52 nStartKW 52
nAltKW 52 nLst3112 52
dDate 20121224 nPosi 1
nZuMax 0 nAbMax 1.00
... hm ... wo ist der Wurm drin denn wenn ich das Datum auf KW2 stelle funktioniert es ...

Re: alle Jahre wieder KW1 ...

Verfasst: Mi, 02. Jan 2013 11:01
von UliTs
Kannst Du den Quellcode von WocheJahr() zeigen?

Uli

Re: alle Jahre wieder KW1 ...

Verfasst: Do, 03. Jan 2013 3:41
von AUGE_OHR
UliTs hat geschrieben:Kannst Du den Quellcode von WocheJahr() zeigen?
klar hier

Code: Alles auswählen

FUNCTION WOCHEJAHR( m_datum )
**  SYNTAX  : <ExpN> = WOCHEJAHR(<ExpD>)
**  <ExpN>  = Rückgabe Wochen Nummer
**  <ExpD>  = zu bearbeitendes Datum
**
**  ZWECK   : Aus Datum die Kalender Woche des Jahres berechnen
**  HINWEIS : der erste Tag einer Woche ist Montag !
**  BEISPIEL: ? WocheJahr(CTOD("29.11.91"))
**
LOCAL m_a, m_woche

   m_a := DOW( CTOD( "31.12." + STR( YEAR( m_datum - 7 ), 4 ) ) )
   m_a := IF( m_a = 1, 7, m_a - 1 )
   m_woche := ROUND( ( m_datum - CTOD( "1.1." + STR( YEAR( m_datum ), 4 ) ) ;
            + 8 - IF( DOW( m_datum ) = 1, 7, DOW( m_datum ) - 1 ) ) / 7, 0 )

   // wenn 4 Tage oder mehr im neuen Jahr KW 1
   m_woche := IF( m_woche < 53, m_woche, IF( m_a > 3, m_woche, 1 ) )

   m_woche := INT( IF( m_woche = 0, IF( m_a > 4, 52, 53 ), m_woche ) )

RETURN ( m_woche )
aber das ist nicht das Problem gewesen ;)
nAltKW 52 nLst3112 52

Code: Alles auswählen

FOR i := nAltKW TO nLst3112
:banghead: