**BRegieARo.prg   -  Regie-Zentrum fr Bestattungsverwaltung
//                      Verwaltung der Artikel+Leistungen

#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Appedit.ch"
#include "Appbrow.ch"
#include "Font.ch"
#include "Dmlb.ch"
#include "Common.ch"
#include "Directry.ch"

   #define  xbeU_CalcReturn xbeP_User + 11
   #define  xbeU_RefreshCalc xbeP_User + 12

FUNCTION Artikel( oDlg1, aPos, ASize, cGaert, nAnf, nEnd )
   LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse
   LOCAL oCtrl, oFocus := SetAppFocus(), aEditControls := {}
//   LOCAL aPP := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
//                  { XBP_PP_BGCLR       , GRA_CLR_WHITE    } }
//   LOCAL aPPSle := { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } }
//   LOCAL aPPTxt := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
//                     { XBP_PP_BGCLR       , XBPSYSCLR_DIALOGBACKGROUND } }
   LOCAL nOldArea := Select(), nB:=nBz
   PRIVATE cA := " " //10.12.2006 10:56 
   PRIVATE oCB, oALDA, oEdit, cArtLei := Trim(" "), cArtBez := Trim(" "), lFlucht := .F., lEinfg := .F.
   DEFAULT aPos TO {10,30*nV}
   DEFAULT ASize TO {770*nH,500*nV}
   DEFAULT nAnf TO -100
   DEFAULT nEnd TO 299
//////   aPos := {oDlg1:cargo:currentpos()[1]+4,oDlg1:cargo:currentpos()[2]} //14.04.2008 14:28 unten wie Hauptmaske
//////   ASize := {oDlg1:currentsize()[1],oDlg1:cargo:currentsize()[2]}  //14.04.2008 14:22 H”he wie Hauptmaske
/*07.04.2008 21:19 nH, nV ver„ndert wegen Resize */
   IF Abs(aPos[1]-oDlg1:currentpos()[1])<100 // wenn NICHT aufgerufen aus Rechnung  
      aPos := {oDlg1:cargo:currentpos()[1]+4,oDlg1:cargo:currentpos()[2]} //14.04.2008 14:28 unten wie Hauptmaske
//      aPos := {5*IIf(nH<1,1,nH),30*IIf(nV<1,1,nV)}       //06.04.2008 19:20
      ASize := {oDlg1:cargo:currentsize()[1],oDlg1:cargo:currentsize()[2]}  //14.04.2008 14:22 H”he wie Hauptmaske
   ELSE
      aPos[1] += oDlg1:cargo:currentpos()[1]
      aPos[2] := oDlg1:cargo:currentpos()[2]
      aSize[2] += IIf(nV<1,30-nV*30,0)
   ENDIF
/**/
//////////////////////////////////////////////////////////////////////////////////
   IF Val(cRS) < aZugang[6]      // 18.10.2007 15:25 =Nickel
      ConfirmBox( oDlg1, "Sie haben dazu NICHT die Berechtigung!", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Artikel/Leistungsverwaltung"), ;
                        "Artikel/Leistungsverwaltung"), ;
                        XBPMB_OK, ;
                        XBPMB_WARNING )
      RETURN .F.
   ENDIF
///////////////////////////////////////////////////////////////////////////////////
   IF Upper(AppName())$"BUCKX.EXE"
      cCodeWort := ModalDialog( "********************", "Codewort eingeben:", oDlg1, 200, 200, ;
                        {"Codewort + <Enter>"} )   //20.03.2008 11:37
      IF !CDoW(DATE()-1)$cCodeWort
         RETURN .F.
      ENDIF

   ENDIF
   IF nAnf >= 900 .AND. 6->(IsFieldVar("bez3"))
      nBz:=23*nV
   ENDIF
//   aPos := IIf(Empty(aPos),{10,30*nV},aPos)
//   ASize:= IIf(Empty(ASize),{770*nH,500*nV},ASize)

   SELECT 6
   IF !Empty(cGaert) .AND. ValType(cGaert)="C"   // 19.6.2005   alternative Artikel-Datei
      USE (cGaert)
      SET INDEX TO (cGaert)
   ENDIF

  DO WHILE cA == " "    //10.12.2006 09:54
   cA := "A"            //10.12.2006 09:54
   cTitel := "Eingabe/Žnderung von Artikeln/Leistungen  (<ESC>=Abbruch)"

   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   oDlg:title := cTitel + "   -   MwSt-Satz: "+Str(zschl_voll,2)+"% / Datei: "+6->(Alias())
   oDlg:title := IIf(SET(43)==0,ConvToAnsiCP(oDlg:title),oDlg:title)   //03.12.2006 18:02
   oDlg:maxButton := .F.
   oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED
   oDlg:create(,, aPos, ASize )
   SetAppFocus(oDlg)       // Fenster muá den Focus haben, damit Parts ihn dann kriegen k”nnen!
   oDlg:lockUpdate(.T.)    // damit der Bildaufbau unsichtbar bleibt

//   oDlg:drawingArea:setColorBG( GRA_CLR_BLUE )
   oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT )
   oCB := oDlg:drawingArea
   oALDA := oDlg:drawingArea
   oALDA:cargo := oDlg

// jetzt folgt die Erzeugung der Eingabefelder
   oEdit := ArtikelFF():new( oALDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art", nAnf, nEnd, 6 )
   oEdit:CREATE( oALDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art", nAnf, nEnd, 6 )
   oEdit:SingleZeile[1]:postblock := {|o| oDlg:isIndexUnique( 1, PadR(Trim(o:editBuffer()),10) ) }
   oEdit:SingleZeile[1]:validate := oEdit:SingleZeile[1]:postblock
   oEdit:SingleZeile[1]:disable()      //13.08.2007 18:42
   
   AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } )
//   AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } )
// bis hierhin geht die Erzeugung der Eingabefelder
//   oEdit:SubMenu[1]:checkItem(1,!oEdit:Sperre)

//   oFocus := SetAppFocus( oSle0 )
   oDlg:setModalState( XBP_DISP_APPMODAL )
//   oDlg:show()

   oCtrl := XbpGetController():new( oDlg )
   oCtrl:create()
   oCtrl:READ( oEdit:XbpNummer( oEdit:SingleZeile, "cArtLei" )+1 , .F. )
   SET ORDER TO 1
   * Shortcuts initialisieren
   oDlg:InitShortCuts( oDlg )
   oDlg:lockUpdate(.F.)
   oDlg:invalidateRect()

   nEvent := xbeP_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      IF nEvent == xbeP_Close .AND. lFlucht == .F.
         lEinfg := .T.
      ENDIF
// 26.02.2006  zum Laden neuer Bilder in die Artikel-Datei - Klick auf Area links unten:
      IF nEvent == xbeM_LbDblClick .AND. IsMemberVar(oXbp,"cargo") .AND. ValType(oXbp:cargo) == "O"
         oDlgB := XbpFileDialog():new():CREATE()
         cFile := oDlgB:open()
         oDlgB:destroy()
         ADir := Directory(cFile)
         //+07.01.2011 16:54 mit iview verkleinern, wenn > 100kB
         IF ADir[1,F_SIZE] > 100000
            cx := Str(Int(oEdit:BEArea[6]:currentsize()[1]/2)) ; cy := Str(Int(oEdit:BEArea[6]:currentsize()[2]/2))
            RunShell( cFile + " /resize=("+cx+","+cy+") /aspectratio /resample /convert="+cDatver+"artikel.bmp", cDatver+"iview\i_view32.exe", .F. )
            cFile := cDatver+"artikel.bmp"
         ENDIF
         oXbp:cargo:load( cFile )  //, -1 )     //+07.01.2011 12:17 -1=nFaktor, reduziert Bitmap auf Fl„chengr”áe
         oXbp:cargo:DISPLAY()
         LOOP        //+07.01.2011 17:06 vorsichtshalber nicht noch mehr Zeit verplempern
      ENDIF
      IF nEvent == xbeP_Keyboard
         IF mp1 >= xbeK_F1 .AND. mp1 <= xbeK_F12      //01.07.2007 12:01 fr ::AdrSuch
//   wenn eine Funktionstaste gedrckt wird, dann wird PUBLIC cFktT mit deren Nr. belegt:
            cFktT := 1 + mp1 - xbeK_F1
            IF oXbp:cargo$"cArtBez"
//                  PostAppEvent( xbeP_Keyboard, xbeK_TAB,, oXbp )
               mp1 := xbeK_TAB
            ENDIF
         ELSE
            cFktT := 0
         ENDIF
// Buchstaben-Tastaturen wirken nur, wenn der Artikel als editierbar markiert ist:
         IF (mp1=xbeK_BS .OR. mp1=xbeK_DEL .OR. (mp1>31 .AND. mp1<128)) ;
                                 .AND. oXbp:cargo != "cArt" .AND. oEdit:Sperre == .T. ;
                                 .AND. !oEdit:EditArtikel == 6->art_lei   // 02.07.2006 11:41
//         IF mp1>31 .AND. mp1<128 .AND. oXbp:cargo != "cArt" .AND. oEdit:Sperre == .T. ;
//                                 .AND. !oEdit:EditArtikel == 6->art_lei  // 10.06.2006 12:05
            IF ConfirmBox( oBEDA, "Abbrechen mit <NEIN>", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Artikeldaten eingeben/„ndern?"), ;
                        "Artikeldaten eingeben/„ndern?"), ;
                        XBPMB_YESNO, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON2 ) ;
                        =  XBPMB_RET_YES
               oEdit:EditArtikel := 6->art_lei
               SetAppFocus(oXbp)
               mp1 := 0       //02.07.2006 11:46
            ELSE
               SetAppFocus(oXbp)
               LOOP
            ENDIF
         ENDIF
         DO CASE
            CASE mp1 == xbeK_ESC
               IF ValType(oVideo) == "O"
                  oVideo:stop()
                  oVideo:cargo:destroy()
                  oVideo := NIL
                  mp1 := 0
                  LOOP
               ENDIF
               lEinfg := .F.
               lFlucht := .T.
               PostAppEvent( xbeP_Close)
//            CASE mp1 == xbeK_CTRL_F12
//               SELECT 6
//               nRec := RecNo()
//               USE art EXCLUSIVE
//               REPLACE ALL ek_alteu WITH ek_preiseu FOR ausg = "1" .AND. Val(art_lei)<10000
//               REPLACE ALL vk_alteu WITH vk_preiseu FOR ausg = "1" .AND. Val(art_lei)<10000
//               REPLACE ALL ek_preiseu WITH ek_preiseu*1.11 FOR ausg = "1" .AND. Val(art_lei)<10000
//               REPLACE ALL vk_preiseu WITH vk_preiseu*1.11 FOR ausg = "1" .AND. Val(art_lei)<10000
//               USE art INDEX xart_lei
//               DbGoto(nRec)
            CASE mp1 == xbeK_ALT_T     //19.11.2006 17:54
               IF IsMemberVar(oXbp,"value") .AND. ValType(oXbp:value)=="D"
                  oXbp:setData(DATE())
//                  oXbp:getData()
               ENDIF
            CASE mp1 == xbeK_CTRL_F7         //04.09.2007 10:37
               oEdit:SingleZeile[1]:enable()
            CASE mp1 == xbeK_CTRL_F8         //04.09.2007 10:37
               oEdit:SingleZeile[1]:disable()
//////29.03.2008 09:38 wird doch nicht mehr gebraucht            CASE mp1 == xbeK_CTRL_F11     //28.12.2006 21:47
//////               BitmapKopie( oEdit:BEArea[6] )
            CASE mp1 == xbeK_CTRL_F12     //09.11.2006 08:40
               SELECT 6 // nur fr alle F„lle
               IF Upper(AppName())$"GUDDX.EXE" .AND. FLock()
                  nRec := RecNo()
                  DbSuspendNotifications()
                  REPLACE ALL ek_preiseu WITH 0
                  REPLACE ALL ekpeu WITH 0
                  REPLACE ALL vk_preiseu WITH 0               
                  REPLACE ALL vk_nettoeu WITH 0               
                  REPLACE ALL umsatzeu WITH 0               
                  REPLACE ALL bestand WITH 0               
                  REPLACE ALL mgjahr WITH 0                 
                  DbGoto(nRec)
                  DbResumeNotifications()
               ENDIF
            CASE mp1 == xbeK_F1
               ModalDialog( (cDatver+"f1_AL.rtf"), "Bedienungshinweise", oALDA, 680*nH, 460*nV )
            CASE mp1 == xbeK_F4  //10.05.2006 18:03
               IF IsFieldVar( oXbp:cargo )
                  6->(Satzsp(oCB))
                  IF ValType( 6->&(oXbp:cargo) )="D"
                     oXbp:setData( 6->&(oXbp:cargo) := DATE() )
                     PostAppEvent( xbeP_Keyboard, xbeK_TAB, , oXbp )
                     ELSEIF Upper(oXbp:cargo) = "EKPEU"
                     oXbp:setData( 6->&(oXbp:cargo) := 6->&e_p_s )
                     PostAppEvent( xbeP_Keyboard, xbeK_TAB, , oXbp )
                  ENDIF
                  6->(DbRUnlock())
               ENDIF
            CASE mp1 == xbeK_F10
               IF Alias(13)!=NIL .AND. (Val(6->art_lei)<3 .OR. Empty(6->bez))
                  ModalFen( "Sie mssen eine Artikelnr.  ; " + ;
                           "UND eine Artikelbezeichnung ; " + ;
                           "eingeben! (Oder abbrechen) ; " + ;
                           "Erg„nzen Sie die Daten! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oDlg:drawingArea )
                  lEinfg := .F.
                  LOOP
               ELSEIF Alias(13) != NIL
                  lEinfg := .T.     // ge„nderter Artikel soll in Rechnung eingefgt werden
               ENDIF
               PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[oEdit:XbpNummer(oEdit:DruckKnopf,"ENDE")] )
//               PostAppEvent( xbeP_Close,,,oDlg)
            CASE mp1 == Asc("+") .AND. oXbp:isderivedfrom("XbpSle") .AND. ;
                           IsMemberVar( oXbp, "value" ) .AND. ValType(oXbp:value)=="D"
               oEdit:DatumSet( oXbp, +1 )
            CASE mp1 == Asc("-") .AND. oXbp:isderivedfrom("XbpSle") .AND. ;
                           IsMemberVar( oXbp, "value" ) .AND. ValType(oXbp:value)=="D"
               oEdit:DatumSet( oXbp, -1 )
            CASE mp1 == Asc("*") .AND. oXbp:isderivedfrom("XbpSle") .AND. ;
                           IsMemberVar( oXbp, "value" ) .AND. ValType(oXbp:value)=="D"
               oEdit:DatumSet( oXbp, +7 )
            CASE mp1 == Asc("_") .AND. oXbp:isderivedfrom("XbpSle") .AND. ;
                           IsMemberVar( oXbp, "value" ) .AND. ValType(oXbp:value)=="D"
               oEdit:DatumSet( oXbp, -7 )
            CASE mp1 == Asc("#") .AND. oXbp:isderivedfrom("XbpSle") .AND. ;
                           IsMemberVar( oXbp, "value" ) .AND. ValType(oXbp:value)=="D"
               oEdit:DatumSet( oXbp, 0 )
         ENDCASE
      ENDIF
//+ Calculator wurde beendet:
      IF nEvent == xbeU_CalcReturn     //+ xbeP_User + 11
         //+ bisher noch keine Aktion an dieser Stelle !
         oFocsle:setData( mp1 )
         SetAppFocus(oFocSle)
      ELSE
         oXbp:handleEvent( nEvent, mp1, mp2 )
      ENDIF
   ENDDO

   oDlg:setModalState( XBP_DISP_MODELESS )
   DbDeRegisterClient(oEdit)
   oEdit:destroy()
   oDlg:destroy()
   ThreadObject():cargo := oDlg1:cargo //+09.02.2010 18:24 wegen MagicHelp
   SetAppFocus( oFocus )
// Umschalten nur ber Men, wenn cA ge„ndert! ( cA wird zu Beginn auf "A" gesetzt! )
   IF Val(cA) == 19 .AND. !Upper(AppName())$"NOLTEX.EXE"       // 19=Art2007  //14.10.2010 18:32
      cA_L := 6->art_lei
      USE mwstdat EXCLUSIVE
      mwstdat->schl_voll := 19.0
      zschl_voll := 19.0
      zv := "19"
      IF cBrNe1 != "N" .AND. FILE( cDatver+"Art2007.dbf" ) // weil bei Nettorechnungen keine alternative Datei n”tig ist??
         DbUseArea( , "FOXCDX", "Art2007" ) // 
         OrdListAdd( "Art2007" )
      ELSEIF FILE( cDatver+"artF.dbf" )
         DbUseArea( , "FOXCDX", "ArtF" ) // 
         OrdListAdd( "ArtF" )
      ELSE            // 
         use art index xart_lei
      ENDIF
      DbSeek( cA_L, .T. )
      cA := " "
   ELSEIF Val(cA) == 16 .AND. !Upper(AppName())$"NOLTEX.EXE"    // 16=Art2006 //14.10.2010 18:32
      cA_L := 6->art_lei
      USE mwstdat EXCLUSIVE
      mwstdat->schl_voll := 16.0
      zschl_voll := 16.0
      zv := "16"
      IF FILE( cDatver+"artF.dbf" )
         DbUseArea( , "FOXCDX", "ArtF" ) // 
         OrdListAdd( "ArtF" )
      ELSE            // 
         use art index xart_lei
      ENDIF
      DbSeek( cA_L, .T. )
      cA := " "
   ELSEIF Val(cA) == 7 .AND. !Upper(AppName())$"NOLTEX.EXE"     // 7 wie LZU   18.12.2006 15:44 er”ffnet neue Lagerzugangsdatei  //14.10.2010 18:32
      cA_L := 6->art_lei                                 // mit Hilfe von altem erlzu.prg!
      IF 6->(Alias()) = "ART2007"
         SELECT 6
         DbUseArea( , "FOXCDX", "Art2007",,.F. ) // 
         OrdListAdd( "Art2007" )
      ELSEIF 6->(Alias()) = "ARTF"
         SELECT 6
         DbUseArea( , "FOXCDX", "ArtF",,.F. ) // 
         OrdListAdd( "ArtF" )
      ELSE            // 
         SELECT 6
         use art EXCLUSIVE 
         SET index TO xart_lei
      ENDIF
      SELECT 7
      USE lzu EXCLUSIVE
      SET INDEX TO xlzu
      RunDosWin(oBEDA, "ErLzu", {0,0}, {0,0}, "Er”ffnen der neuen Lagerzugangs-Datei",6->(Alias()))
      SELECT 7
      USE lzu INDEX xlzu
      SELECT 6
      IF 6->(Alias()) = "ART2007"
         DbUseArea( , "FOXCDX", "Art2007" ) // 
         OrdListAdd( "Art2007" )
      ELSEIF 6->(Alias()) = "ARTF.dbf"
         DbUseArea( , "FOXCDX", "ArtF" ) // 
         OrdListAdd( "ArtF" )
      ELSE            // 
         use art index xart_lei
      ENDIF
      DbSeek( cA_L, .T. )
      cA := " "
   ENDIF
  ENDDO
   IF !Empty(cGaert)          // 18.6.2005  wieder den Normalzustand herstellen
      USE art
      SET INDEX TO xart_lei
   ENDIF
   nBz := nB
   Select &nOldArea
   IIf(lLogBook,oBest:TLog:write():writeLogFile(),)    //16.09.2007 22:33
RETURN lEinfg

CLASS ArtikelFF FROM DialogFF
   EXPORTED:
   VAR VArea
   VAR EditArtikel
   VAR Sperre
   VAR cBN                       //brutto/netto-Kalkulation ek*nFakt=vk_brutto/netto   18.12.2006 09:00
   VAR nRund                     // Rundung-Nachkommastellen
   VAR nProz                     // Kalkulationsaufschlag
   METHOD INIT
   METHOD CREATE
   METHOD notify
   METHOD NEU                    // šberladen der DialogFF-Methode
   METHOD ArtikelSuch
   METHOD JahresUmsatz
   METHOD ArtAusRech
   METHOD Wareneingang
   METHOD Kalkulation
   METHOD Zugang                 //29.03.2008 14:17 Zug„nge fr diesen Artikel sehen
   METHOD MILStart               //+07.06.2011 10:11 zieht von allen Best„nden die Jahresmengen ab
ENDCLASS

METHOD ArtikelFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::Fancy := cLeistBM
   ::VArea := nA
   ::BEArea := {}
   AAdd( ::BEArea, oParent )
   ::BENr := Len( ::BEArea )
   ::EditArtikel := ""
   ::Sperre := IIf(cAdrBM=" ",.T.,.F.)
   ::cBN := "B"      //18.12.2006 09:02
   ::nRund := 2      //
   ::nProz := 0      //
RETURN self

METHOD ArtikelFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
//   (nA)->(DbRegisterClient(self))     // reicht es, wenn das Fenster als Ganzes registriert ist??
RETURN self

METHOD ArtikelFF:notify( nEvent, mp1, mp2 )
   LOCAL nRec, oFocus,i
      IF nEvent == xbeDBO_Notify             // Notify-Ereignis
         IF mp1 == DBO_MOVE_DONE             // Skip ist beendet
            IF !SetAppFocus():isDerivedFrom( "XbpBrowse" ) .AND. Len(::BrowseFeld) > 0
               (::VArea)->(DbSuspendNotifications())
               nRec := (::VArea)->(RecNo())
               FOR i := 1 TO Len(::BrowseFeld)
                  ::BrowseFeld[i]:refreshAll()
               NEXT
               (::VArea)->(DbGoto( nRec ))
               (::VArea)->(DbResetNotifications())
            ENDIF
         ENDIF
      ENDIF
RETURN self

METHOD ArtikelFF:NEU(oDlg1,nA)
   ::EditArtikel := "      "
   (nA)->(DbAppend())
   (nA)->(DbGotop())
   (nA)->(DbSkip(0))
   oEdit:SingleZeile[1]:enable()    //13.08.2007 18:41
RETURN self

METHOD ArtikelFF:ArtikelSuch( oDlg1, cSuchFeld, oXbp, aPos, ASize )
   LOCAL oDlg, nEvent, mp1, mp2, oBrowse, cArtLei := Trim(" ")
   LOCAL nOldArea := Select(), oFocus := SetAppFocus(), nOldOrder := 6->(OrdNumber())
   LOCAL lFlucht := .F., nRec := RecNo(), cSuchWort := ""    // 7.2.2005
   LOCAL cTitel := "Artikel/Leistung suchen"
   PRIVATE oCB
   DEFAULT aPos TO {10,30*nV} , ASize TO {330*nH,265*nV}

   (nOldArea)->(DbSuspendNotifications())
   SELECT 6
   6->(DbSuspendNotifications())

   IF Upper(cSuchFeld) = "BEZ"
      cSuchFeld := oXbp:getData()
      cSuchFeld := IIf( !Empty(cSuchFeld),Upper(Trim(cSuchFeld))," " )
      DO CASE                    //05.07.2007 18:56
         CASE cFktT = 0
            DO CASE           // 12.02.2006
               CASE cSuchfeld[1] == Trim(cSuchfeld)               //20.06.2007 13:06
                  6->(DbSetFilter( {|| cSuchFeld$6->kennz } ) )
                  cTitel := "Suche innerhalb einer Gruppe (1.Buchstabe):"
               CASE 6->(IsFieldVar("bez3"))
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez+6->bez2+6->bez3) } ))
                  cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:"
               CASE 6->(IsFieldVar("bez2"))
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez+6->bez2) } ))
                  cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:"
            OTHERWISE
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez) } ))
                  cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:"
            ENDCASE
//////            IF cSuchFeld[1] == Trim(cSuchFeld)           //20.06.2007 13:15 Filter nach Gruppe
//////               5->(DbSetFilter( {|| cSuchFeld$IIf(IsFieldVar("gruppe"),5->gruppe,5->etgruppe) } ))
//////               cTitel := "Suche innerhalb einer Gruppe (1.Buchstabe):"
//////            ELSE
//////               5->(DbSetFilter( {|| cSuchFeld$Upper(5->name1+5->name2) } ))
//////               cTitel := "Suche nach einer Buchstabenfolge im Namen:"
//////            ENDIF
            IIf( !(6)->(Bof()), 6->(DbGotop()), )
//            5->(DbSeek(Trim(oXbp:value),.T.))
         CASE cFktT = 4
            DO CASE           // 12.02.2006
               CASE 6->(IsFieldVar("bez3"))
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez+6->bez2+6->bez3) } ))
               CASE 6->(IsFieldVar("bez2"))
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez+6->bez2) } ))
            OTHERWISE
                  6->(DbSetFilter( {|| cSuchFeld$Upper(6->bez) } ))
            ENDCASE
            IIf( !(6)->(Bof()), 6->(DbGotop()), )
            cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:"
         CASE cFktT = 5
            OrdSetFocus( 2 )
            6->(DbSeek(cSuchFeld,.T.))
            cTitel := "Suche nach Bezeichnung sortiert:"
         CASE cFktT = 6
            6->(DbSetFilter( {|| cSuchFeld==Upper(Trim(6->kennz)) } ))
            IIf( !(6)->(Bof()), 6->(DbGotop()), )
            cTitel := "Suche innerhalb einer Gruppe:"
      ENDCASE
   ELSEIF Upper(cSuchFeld) = "ART_LEI"
      cArtLei := Trim( oDlg1:childFromName( 6->(FieldPos( cSuchFeld )) ):getData() )
      cArtLei := IIf(!Empty(Trim(oXbp:getData())),Trim( oXbp:getData() ),cArtLei)
      6->(DbSeek( cArtLei, .T. ))
   ELSE
//      oDlg:destroy()
      (6)->(DbResetNotifications())
      Select &nOldArea
      (nOldArea)->(DbResetNotifications())
      (nOldArea)->(DbSkip(0) )
      SetAppFocus( oFocus )
      OrdSetFocus( nOldOrder )
      cFktT := 0                    //05.07.2007 18:56
      RETURN .F.
   ENDIF

   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   oDlg:title := cTitel
   oDlg:maxButton := .F.
   oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED
   oDlg:create(,, aPos, ASize )

   oDlg:drawingArea:setColorBG( GRA_CLR_DARKCYAN )
   oCB := oDlg:drawingArea
   oCB:cargo := oDlg


// jetzt folgt die Erzeugung der Eingabefelder (die angegebenen aPos + aSize sind Unsinn, werden aber auch nicht gebraucht29.03.2008 15:11)
   oBrowse := ArtikelFF():new( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",300,399, 6 )
   oBrowse:CREATE( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",300,399, 6 )
// bis hierhin geht die Erzeugung der Eingabefelder

   oDlg:setModalState( XBP_DISP_APPMODAL )
   oDlg:show()
   SetAppFocus( oBrowse:BrowseFeld[1] )

   nEvent := xbeP_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
//      IF nEvent == xbeM_LbDblClick .AND. SetAppFocus():isDerivedFrom( "XbpBrowse" )
//      IF nEvent == xbeM_LbDblClick .AND. oXbp:isDerivedFrom( "XbpColumn" )
      IF nEvent == xbeBRW_ItemSelected
            PostAppEvent( xbeP_Close)
      ENDIF
      IF nEvent == xbeP_Keyboard
      DO CASE
         CASE mp1 >= Asc("0") .and. mp1 <= Asc("z")    // 7.2.2005
            cSuchWort += Chr(mp1)
            DbSeek( cSuchWort, .T. )
            IF !Found()
               DbSkip(-1)
            ENDIF
            oBrowse:BrowseFeld[1]:refreshAll()
         CASE mp1 == xbeK_RETURN .or. mp1 == xbeK_F10
            PostAppEvent( xbeP_Close)
         CASE mp1 == xbeK_ESC
            lFlucht := .T.
            PostAppEvent( xbeP_Close)
      ENDCASE
      ENDIF
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO
   6->(DbResetNotifications())
   oDlg:setModalState( XBP_DISP_MODELESS )
   DbDeRegisterClient(oBrowse)
   oBrowse:destroy()
   oDlg:destroy()    ///
   6->(DbClearFilter())
   Select &nOldArea
   (nOldArea)->(DbResetNotifications())
   IF lFlucht = .T.
      (nOldArea)->(DbGoto(nRec))
   ENDIF
   (nOldArea)->(DbSkip(0))
   SET ORDER TO 1
   SetAppFocus( oFocus )
   OrdSetFocus( nOldOrder )
   cFktT := 0                    //05.07.2007 18:56
RETURN self

METHOD ArtikelFF:JahresUmsatz()
   LOCAL nOldArea := SELECT(), nRec := 6->(RecNo()), i
   SELECT 6    // fr alle F„lle...
   DbSuspendNotifications()
   DbGotop()
   DO WHILE !Eof()
      Satzsp(oCB)
      REPLACE mgjahr WITH 0
      REPLACE umsatz WITH 0
      IF IsFieldVar("umsatzeu")
         REPLACE umsatzeu WITH 0
      ENDIF
      IF IsFieldVar("umsneteu")
         REPLACE umsneteu WITH 0
      ENDIF
      IF IsFieldVar("umsbrteu")  // nur fr alle F„lle....
         REPLACE umsbrteu WITH 0
      ENDIF
      IF IsFieldVar("gewinneu")  // erstmal fr BuckX
         REPLACE gewinneu WITH 0
      ENDIF
      DbRUnlock()
      DbSkip()
   ENDDO
   SELECT 13
   FOR i := 1 TO 2      //01.03.2008 16:55 damit auch die Angeh”rigen-Ums„tze erfasst werden
      IF i == 1
         USE auftr
      ELSEIF i == 2
         DbUseArea( , "FOXCDX", "PersRech" )
      ELSE
         RETURN .F.
      ENDIF
      INDEX on DtoS(r_datum) TO temp
      DbSetScope( SCOPE_TOP, Str(Year(DATE()),4,0)+"00" )
      DbSetScope( SCOPE_BOTTOM, Str(Year(DATE()),4,0)+"zz" )
      DbGotop()
      1->(DbSeek(StrX(13->auftrnr,E,0)))     //05.02.2008 21:26
      //+11.03.2012 14:48
//      oProgress := ProgressBar():new( ,, {120,200}, {400,24},, .F. )
      oProgress := ProgressBar():new( AppDeskTop(),, {200,100}, {AppDeskTop():currentsize()[1]-400,24},, .F. )
      oProgress:create()
      oProgress:minimum := 1
      oProgress:maximum := LastRec()
      DO WHILE !Eof()
         oProgress:increment()   //+11.03.2012 14:48
         IF Val(13->zugr_z_st) > 2 .AND. IIf( 1->(IsFieldVar("rechnr")), Len(Trim(1->rechnr)) > 0, IIf( 1->(IsFieldVar("rechdat1")), DtoC(1->rechdat1)!="  ", .T. ))    //+06.01.2010 13:29
            6->(DbSeek(13->zugr_z_st,.F.))
            IF 6->art_lei == 13->zugr_z_st
               6->(Satzsp(oCB))
               IF 13->&b_g <>0
                  6->mgjahr += IIf(13->(IsFieldVar("menge")),13->menge,1)
                  6->&u_z += 13->&b_g * IIf(13->(IsFieldVar("menge")),13->menge,1)
                  IF 6->(IsFieldVar(u_n))
                     6->&u_n += 13->&b_n * IIf(13->(IsFieldVar("menge")),13->menge,1)
                  ENDIF
                  IF 6->(IsFieldVar("gewinneu"))      //19.03.2008 11:04
                     6->gewinneu += (13->&b_n -6->e_p_s) * IIf(13->(IsFieldVar("menge")),13->menge,1)
                  ENDIF
               ELSE
                  13->(DbSkip())             // in die n„chste Zeile (die zweite?)
                  IF !Empty(13->zugr_z_st)   // wenn diese Zeile nicht zur vorigen geh”rt,
                     6->(DbRUnlock())
                     LOOP                    // dann suche den n„chsten Artikel
                  ENDIF
                  IF 13->&b_g <>0            // wenn der Preis in der zweiten Artikelzeile steht
                     6->mgjahr += IIf(13->(IsFieldVar("menge")),13->menge,1)
                     6->&u_z += 13->&b_g * IIf(13->(IsFieldVar("menge")),13->menge,1)
                     IF 6->(IsFieldVar(u_n))
                        6->&u_n += 13->&b_n * IIf(13->(IsFieldVar("menge")),13->menge,1)
                     ENDIF
                     IF 6->(IsFieldVar("gewinneu"))      //19.03.2008 11:04
                        6->gewinneu += (13->&b_n -6->e_p_s) * IIf(13->(IsFieldVar("menge")),13->menge,1)
                     ENDIF
                  ELSE
                     13->(DbSkip())             // in die n„chste Zeile (die dritte?)
                     IF !Empty(13->zugr_z_st)   // wenn diese Zeile nicht zur vorigen geh”rt,
                        6->(DbRUnlock())
                        LOOP                    // dann suche den n„chsten Artikel
                     ENDIF
                     IF 13->&b_g <>0            // wenn der Preis in der dritten Artikelzeile steht
                        6->mgjahr += IIf(13->(IsFieldVar("menge")),13->menge,1)
                        6->&u_z += 13->&b_g * IIf(13->(IsFieldVar("menge")),13->menge,1)
                        IF 6->(IsFieldVar(u_n))
                           6->&u_n += 13->&b_n * IIf(13->(IsFieldVar("menge")),13->menge,1)
                        ENDIF
                        IF 6->(IsFieldVar("gewinneu"))      //19.03.2008 11:04
                           6->gewinneu += (13->&b_n -6->e_p_s) * IIf(13->(IsFieldVar("menge")),13->menge,1)
                        ENDIF
                     ENDIF
                  ENDIF
               ENDIF
               6->(DbRUnlock())
            ENDIF
         ENDIF
         13->(DbSkip())
         1->(DbSeek(StrX(13->auftrnr,E,0)))  //05.02.2008 21:26
      ENDDO
      USE
      oProgress:destroy()  //+11.03.2012 14:49
   NEXT
   SELECT 6
   DbResumeNotifications()
   6->(DbGoto(nRec))
//   SELECT (nOldArea)
RETURN self

// legt an/„ndert Artikel in der Artikel-Datei aus der Rechnung heraus mit <F7>
METHOD ArtikelFF:ArtAusRech(nZeile)
   13->(DbSuspendNotifications())
   IF nZeile >= 1
      IF 6->(Eof())        // 12.02.2006  kommt wahrscheinlich ehï nicht vor (wahrscheinlich!)
         6->(DbAppend())
      ELSE
         6->(Satzsp(oCB))
      ENDIF
      IIf(Empty(6->art_lei), 6->art_lei := 13->zugr_z_st, )
      6->bez := 13->bezeich
      6->ausg := 13->kennz
      6->mwst_schl := 13->mwst_schl
      6->&v_p_s := 13->&b_g
      6->&v_n_o := 13->&b_n
      6->(DbRUnlock())
   ENDIF
   IF nZeile >= 2
      13->(DbSkip())
      IF Val(13->zugr_z_st) < 3
         6->(Satzsp(oCB))
         6->bez2 := 13->bezeich
         IF cPreisZ == "2" // PUBLIC, die angibt, dass der Preis in der letzten Artikelzeile steht
            6->mwst_schl := 13->mwst_schl
            6->&v_p_s := 13->&b_g
            6->&v_n_o := 13->&b_n
         ENDIF
         6->(DbRUnlock())
      ENDIF 
   ENDIF
   IF nZeile == 3 .AND. Val(13->zugr_z_st) < 3  // wenn also die zweite Zeile keine "erste Zeile" ist
      13->(DbSkip())
      IF Val(13->zugr_z_st) < 3
         6->(Satzsp(oCB))
         6->bez3 := 13->bezeich
         IF cPreisZ == "2"
            6->mwst_schl := 13->mwst_schl
            6->&v_p_s := 13->&b_g
            6->&v_n_o := 13->&b_n
         ENDIF
         6->(DbRUnlock())
      ENDIF 
   ENDIF 
   13->(DbSkip(-nZeile+1))
   13->(DbResumeNotifications())
RETURN self

// kumuliert die Wareneing„nge in lzu.dbf //10.05.2006 18:18
METHOD ArtikelFF:Wareneingang()
   LOCAL nOldArea := SELECT(), nEK
   SELECT 7
   IF Alias() != "LZU"
      USE lzu INDEX xlzu
   ENDIF
   APPEND BLANK
   7->art_lei := 6->art_lei
   7->datum := 6->leing
   7->anz := 6->ein_menge
   7->ekpeu := 6->ekpeu
   IIf( 7->(IsFieldVar("bez")),7->bez := 6->bez, )
   IIf( 7->(IsFieldVar("bez2")),7->bez2 := 6->bez2, )
   IIf( 7->(IsFieldVar("bez3")),7->bez3 := 6->bez3, )
   7->(DbCommit())   //16.12.2006 12:55
// geREMt, weil LZU bereits in Datei.prg ge”ffnet ist!  USE
   SELECT (nOldArea)
   IF 6->ek_preiseu != 6->ekpeu
      nEK := ConfirmBox( oBEDA, "<JA> modifiziert EK-Preis", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Einkaufspreis „ndern?"), ;
                        "Einkaufspreis „ndern?"), ;
                        XBPMB_YESNO, ;
                        XBPMB_DEFBUTTON2 )
   ENDIF
   6->(Satzsp(oALDA))
   6->bestand += 6->ein_menge
   IF nEK ==  XBPMB_RET_YES
      6->ek_preiseu := 6->ekpeu
   ENDIF
   6->(DbRUnlock())
RETURN self

// 16.03.2008 22:36 lP2 == .T. heiát, es wird VKPreis2 aus VKPreis1 berechnet
METHOD ArtikelFF:Kalkulation(nQ,cBN,nRund,nPrFakt,cAlt,lP2)  //17.12.2006 16:50 cBN: "B"/"N" VKbrutto/netto aus EK
   LOCAL nKFakt, nEK, nVKn, nVKb, nRec := RecNo(), cKennz
   DEFAULT cBN TO "B", nQ TO 1, nRund TO 2, nPrFakt TO 1, lP2 TO .F.
// nQ ist die Quelle der Kalkulaton, der Parameter, der gerade ver„ndert wurde
// nQ = 1: kalk_fakt, 2: EK, 3: VKnetto, 4: VKbrutto
   IF ValType(cAlt)=="C" .AND. cAlt!="!"
      RETURN self
   ENDIF
   DO CASE
   CASE nPrFakt != 1 .OR. nQ == 0 // d.h. +/- gedrckt   //28.12.2006 20:48
      IF lP2 == .F.
         IF IsFieldVar("alt") .AND. 6->alt == "!"  // diese Artikelgruppe komplett mit gleichem Faktor kalkulieren
            cKennz := 6->kennz      // Artikelgruppe
            DbSuspendNotifications()
            Satzsp(oALDA)
            6->alt := " "     // '!' wieder zurcksetzen
            DbGotop()
            DO WHILE !Eof()
               IF 6->kennz = cKennz
                  Satzsp(oALDA)
                  IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
                  IF cBN = "B"
                     6->vk_preiseu := Round(6->vk_preiseu * nPrFakt,nRund)
                     6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
                     6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_preiseu / (6->ek_preiseu/ ;
                                       IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
                  ELSEIF cBN = "N"
                     6->vk_nettoeu := Round(6->vk_nettoeu * nPrFakt,nRund)
                     6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
                     6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_nettoeu / (6->ek_preiseu/ ;
                                       IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
                  ENDIF
                  DbRUnlock()
               ENDIF
               DbSkip()
            ENDDO
            DbGoto(nRec)
            DbResumeNotifications()
         ELSE
            Satzsp(oALDA)
            IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
            IF cBN = "B"
               6->vk_preiseu := Round(6->vk_preiseu * nPrFakt,nRund)
               6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
               6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_preiseu / (6->ek_preiseu/ ;
                                 IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
            ELSEIF cBN = "N"
               6->vk_nettoeu := Round(6->vk_nettoeu * nPrFakt,nRund)
               6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
               6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_nettoeu / (6->ek_preiseu/ ;
                                       IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
            ENDIF
            DbRUnlock()
         ENDIF
      ELSEIF lP2 == .T. // VK2 soll aus VK berechnet werden
         IF IsFieldVar("alt") .AND. 6->alt == "!"  // diese Artikelgruppe komplett mit gleichem Faktor kalkulieren
            cKennz := 6->kennz      // Artikelgruppe
            DbSuspendNotifications()
            Satzsp(oALDA)
            6->alt := " "     // '!' wieder zurcksetzen
            DbGotop()
            DO WHILE !Eof()
               IF 6->kennz = cKennz
                  Satzsp(oALDA)
                  IF cBN = "B"
                     6->vk_pr2eu := Round(6->vk_preiseu * nPrFakt,nRund)
                     6->vk_ne2eu := Round(6->vk_pr2eu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
                  ELSEIF cBN = "N"
                     6->vk_ne2eu := Round(6->vk_nettoeu * nPrFakt,nRund)
                     6->vk_pr2eu := Round(6->vk_ne2eu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
                  ENDIF
                  DbRUnlock()
               ENDIF
               DbSkip()
            ENDDO
            DbGoto(nRec)
            DbResumeNotifications()
         ELSE
            Satzsp(oALDA)
            IF cBN = "B"
               6->vk_pr2eu := Round(6->vk_preiseu * nPrFakt,nRund)
               6->vk_ne2eu := Round(6->vk_pr2eu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
            ELSEIF cBN = "N"
               6->vk_ne2eu := Round(6->vk_nettoeu * nPrFakt,nRund)
               6->vk_pr2eu := Round(6->vk_ne2eu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
            ENDIF
            DbRUnlock()
         ENDIF
      ENDIF
   CASE nQ = 1       // d.h. Kalkulationsfaktor eingegeben
      nKFakt := ::XbpObjekt(oEdit:singlezeile,"kalk_fakt"):getData()
      nKFakt := IIf( nKFakt>=1, nKFakt, 1/(1-x))
      IF IsFieldVar("alt") .AND. 6->alt == "!"           // diese Artikelgruppe komplett mit gleichem Faktor kalkulieren
         cKennz := 6->kennz      // Artikelgruppe
         DbSuspendNotifications()
         Satzsp(oALDA)
         6->alt := " "
         DbGotop()
         DO WHILE !Eof()
            IF 6->kennz = cKennz
               Satzsp(oALDA)
               IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
               IF cBN = "B"
                  6->kalk_fakt := nKFakt
                  6->vk_preiseu := Round(nKFakt * (6->ek_preiseu/ ;
                                    IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
                  6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
               ELSEIF cBN = "N"
                  6->kalk_fakt := nKFakt
                  6->vk_nettoeu := Round(nKFakt * (6->ek_preiseu/ ;
                                    IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
                  6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
               ENDIF
               DbRUnlock()
            ENDIF
            DbSkip()
         ENDDO
         DbGoto(nRec)
         DbResumeNotifications()
      ELSE
         Satzsp(oALDA)
         IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
         IF cBN = "B"
            6->vk_preiseu := Round(nKFakt * (6->ek_preiseu/ ;
                              IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
            6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
         ELSEIF cBN = "N"
            6->vk_nettoeu := Round(nKFakt * (6->ek_preiseu/ ;
                              IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
            6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
         ENDIF
         DbRUnlock()
      ENDIF
   CASE nQ = 2    // ek_preis eingegeben
      nEK := ::XbpObjekt(oEdit:singlezeile,"ek_preiseu"):getData()
      Satzsp(oALDA)
      IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
      IF cBN = "B"
         6->vk_preiseu := Round(6->kalk_fakt * (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
         6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
      ELSEIF cBN = "N"
         6->vk_nettoeu := Round(6->kalk_fakt * (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),nRund) //02.01.2008 13:44
         6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
      ENDIF
      DbRUnlock()
   CASE nQ = 3 // vk_nettoeu eingegeben
      nVKn := ::XbpObjekt(oEdit:singlezeile,"vk_nettoeu"):getData()
      Satzsp(oALDA)
      IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
      IF cBN = "B"
         6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
         6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_preiseu / (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
      ELSEIF cBN = "N"
         6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_nettoeu / (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
         6->vk_preiseu := Round(6->vk_nettoeu * (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
      ENDIF
      DbRUnlock()
   CASE nQ = 4 // vk_preiseu eingegeben
      nVKb := ::XbpObjekt(oEdit:singlezeile,"vk_preiseu"):getData()
      Satzsp(oALDA)
      IIf(IsFieldVar("ek_pr_einh").AND.6->ek_pr_einh==0, 6->ek_pr_einh := 1,) //02.01.2008 14:25
      IF cBN = "B"
         6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_preiseu / (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
         6->vk_nettoeu := Round(6->vk_preiseu/(1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
      ELSEIF cBN = "N"
         6->vk_nettoeu := Round(6->vk_preiseu / (1+IIf(&cms="3",val(zv)/100,IIf(&cms="2",val(zh)/100,0))),2)
         6->kalk_fakt := IIf(6->ek_preiseu!=0,Round(6->vk_nettoeu / (6->ek_preiseu/ ;
                           IIf(6->(IsFieldVar("ek_pr_einh")),6->ek_pr_einh,1)),2),0) //02.01.2008 13:44
      ENDIF
      DbRUnlock()
   ENDCASE
   ::XbpObjekt(oEdit:singlezeile,"kalk_fakt"):setData()
   ::XbpObjekt(oEdit:singlezeile,"ek_preiseu"):setData()
   ::XbpObjekt(oEdit:singlezeile,"vk_nettoeu"):setData()
   ::XbpObjekt(oEdit:singlezeile,"vk_preiseu"):setData()
RETURN self

//29.03.2008 14:24 zeigt in einem Fenster die Zug„nge zu dem aktuellen Artikel
METHOD ArtikelFF:Zugang()
   LOCAL nOldArea := SELECT()
   LOCAL cTitel

   SELECT 7
   IF Alias() != "LZU"
      USE lzu INDEX xlzu      // normalerweise ohnehin in Datei.prg ge”ffnet!
   ENDIF

//   DbSuspendNotifications()
   IF !Upper(AppName())$"MUELLX.EXE"
   //   7->(DbSetScope(SCOPE_BOTH,6->art_lei))
      7->(DbSetFilter( {|| 7->art_lei == 6->art_lei } ))    //12.04.2008 16:28 weil Scope Fehler erzeugte
      IIf( !(7)->(Bof()), 7->(DbGotop()), )    //29.03.2008 14:06
      cTitel := "Zug„nge des aktuellen Artikels:"
   ELSE
      cTitel := "Artikel-Zug„nge: (Zeilen l”schen mit Strg-Entf)"
   ENDIF

   oBest:Such(  oCB  , "s_art", 980, 989, 7, 7->(RecNo()), ;
                                                {10,30*nV}, {330*nH,265*nV}, {}, cTitel  )
   7->(DbClearFilter())
//   7->(DbClearScope())
//   DbResumeNotifications()
   SELECT (nOldArea)
RETURN .T.

//+07.06.2011 10:06 Hanel-Spezialit„t:
METHOD ArtikelFF:MILStart()
   LOCAL nOldArea := SELECT(), nRec := RecNo()
      IF ConfirmBox( oCB, IIf(SET(43)==0,ConvToAnsiCP("Wollen Sie das wirklich?"), ;
                        "Wollen Sie das wirklich?"), ;
                        "Alle Best„nde um die Jahresmengen vermindern!", ;
                        XBPMB_YESNO, ;
                        XBPMB_QUESTION ) == XBPMB_RET_NO
         RETURN self
      ENDIF
   SELECT 6
   DbSuspendNotifications()
   DbGotop()
   DO WHILE !Eof()
      SatzSp(oCB)
      6->bestand -= 6->mgjahr 
      DbRUnlock()
      DbSkip()
   ENDDO
   DbGoto(nRec)
   DbResumeNotifications()
   DbSkip(0)
   SELECT &nOldArea
RETURN self
