alle Jahre wieder KW1 ... [erledigt]

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

alle Jahre wieder KW1 ... [erledigt]

Beitrag 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 ...
Zuletzt geändert von AUGE_OHR am Do, 03. Jan 2013 3:42, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: alle Jahre wieder KW1 ...

Beitrag von UliTs »

Kannst Du den Quellcode von WocheJahr() zeigen?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: alle Jahre wieder KW1 ...

Beitrag 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:
gruss by OHR
Jimmy
Antworten