**BRegieAS.prg - Regie-Zentrum fr Bestattungsverwaltung // Verwaltung der Artikel-Serien #include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Font.ch" #include "Dmlb.ch" #include "Common.ch" #define xbeU_CalcReturn xbeP_User + 11 #define xbeU_RefreshCalc xbeP_User + 12 //03.02.2007 18:28 Area-18 wurde in Area-14 ge„ndert (wegen Kollision mit der Kassentext-Datei) FUNCTION LagerZugang( oDlg1, aPos, ASize ) LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse LOCAL oCtrl, oFocus := SetAppFocus(), aEditControls := {} LOCAL nOldArea := Select(), nRec6 := RecNo(), nRec7, nRecH, cSuch LOCAL lFlucht := .F., nFlucht PRIVATE bezZ1 := "bez" , bezZ2 := "bez2" // Artikel in Art-> PRIVATE bZ1 := "b1" , bZ2 := "b2" // Artikel in Serie-> PRIVATE oCB, oAZDA, oEdit, cArtLei := Trim(" "), cArtBez := Trim(" ") ////// aPos := IIf(Empty(aPos),{10,30*nV},aPos) ////// ASize:= IIf(Empty(ASize),{770*nH,500*nV},ASize) /*14.04.2008 19:25 nH, nV ver„ndert wegen Resize */ // IF nV < 1 // wenn die Fensterh”he reduziert wurde 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 // ENDIF /**/ DbSuspendNotifications() SELECT 7 IF Alias() != "LZU" USE lzu SET INDEX TO xlzu,xlzu2,xlzu3 // normalerweise ohnehin in Datei.prg ge”ffnet! ENDIF nRec7 := RecNo() GO TOP oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Eingabe/Žnderung von Artikel-/Lager-Zug„ngen" 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( XBPSYSCLR_TRANSPARENT ) oCB := oDlg:drawingArea oAZDA := oDlg:drawingArea oAZDA:cargo := oDlg // jetzt folgt die Erzeugung der Eingabefelder oEdit := LZUFF():new( oAZDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art", 500, 599, 7 ) oEdit:CREATE( oAZDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art", 500, 599, 7 ) // sorgt fr einen eindeutigen Index: (field->Zeile hat die L„nge 3) ////// oEdit:SingleZeile[1]:postblock := {|o| oDlg:isIndexUnique( 1, PadL(Trim( ; ////// IIf( Val(o:editBuffer())=0, "999", o:editBuffer() )),3) ) } //12.02.2007 10:57 ////// oEdit:SingleZeile[1]:validate := oEdit:SingleZeile[1]:postblock AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } ) // bis hierhin geht die Erzeugung der Eingabefelder oDlg:setModalState( XBP_DISP_APPMODAL ) oCtrl := XbpGetController():new( oDlg ) oCtrl:create() oCtrl:READ( Val(oEdit:StartFocus), .F. ) * Shortcuts initialisieren oDlg:InitShortCuts( oDlg ) oDlg:lockUpdate(.F.) oDlg:invalidateRect() DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeM_LbDblClick //.AND. IsMemberVar(oXbp,"cargo") //.AND. ValType(oXbp:cargo) == "O" IF oXbp:IsDerivedFrom("XbpCellGroup") nIndex := 0 cSuch := "" IF ValType(oXbp:getcell(1)) == "C" .AND. oXbp:getcell(1) = "Art" nIndex := 1 cSuch := 7->art_lei+DtoS(7->datum) ELSEIF ValType(oXbp:getcell(1)) == "C" .AND. oXbp:getcell(1) = "Datum" nIndex := 2 cSuch := DtoS(7->datum)+7->lief ELSEIF ValType(oXbp:getcell(1)) == "C" .AND. oXbp:getcell(1) = "Lief" nIndex := 3 cSuch := 7->lief+DtoS(7->datum) ////// ELSEIF !Empty(cS) //+28.09.2009 21:09 ////// oEdit:aData0 := Array(FCount()) ////// oEdit:Satzlesen(0,DbStruct()) ////// IF ValType(oXbp:getCell(1))="N" ////// AAdd(oEdit:aData0, 6->&(oXbp:setparent():cargo)) ////// ELSE ////// AAdd(oEdit:aData0,0) //+24.09.2009 10:15 ////// ENDIF ////// oDlg:setModalState( XBP_DISP_MODELESS ) ////// DbDeRegisterClient(oEdit) ////// o := oEdit:aData0 ////// oEdit:destroy() ////// oDlg:destroy() ////// SELECT &nOldArea ////// SetAppFocus( oFocus ) ////// RETURN o ENDIF IF nIndex > 0 DbSuspendNotifications() OrdSetFocus(nIndex) DbSeek(Trim(cSuch),.F.) nRecH := RecNo() IIf(Len(oEdit:BrowseFeld)>0,oEdit:BrowseFeld[1]:refreshAll(),) DbGoto(nRecH) DbResumeNotifications() ENDIF ENDIF 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-cArtLei" // PostAppEvent( xbeP_Keyboard, xbeK_TAB,, oXbp ) mp1 := xbeK_TAB ENDIF ELSE cFktT := 0 ENDIF DO CASE CASE mp1 == xbeK_RETURN PostAppEvent( xbeP_Activate,,, oXbp) CASE mp1 == xbeK_ESC //// IF ValType(oVideo) == "O" //// oVideo:stop() //// oVideo:cargo:destroy() //// oVideo := NIL //// mp1 := 0 //// LOOP //// ENDIF // nFlucht := ConfirmBox( oCB, IIf(SET(43)==0,ConvToAnsiCP("Žnderungen speichern?"), ; // "Žnderungen speichern?"), ; // "LagerZugang beenden.", ; // XBPMB_YESNOCANCEL, ; // XBPMB_QUESTION ) // IF nFlucht == XBPMB_RET_YES // lFlucht := .F. PostAppEvent( xbeP_Close,,,oDlg) // ELSEIF nFlucht == XBPMB_RET_NO // lFlucht := .T. // PostAppEvent( xbeP_Close,,,oDlg) // ELSE // LOOP // ENDIF CASE mp1 == xbeK_F1 ModalDialog( (cDatver+"f1_AZ.rtf"), "Bedienungshinweise", oAZDA, 680*nH, 460*nV ) CASE mp1 == xbeK_F10 lEinfg := .F. 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 + 10 //+ 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 ) oEdit:destroy() DbDeRegisterClient() // 20.5.2004, damit kein Painttip mehr durch :notify() oDlg:destroy() DO WHILE nEvent <> xbe_None nEvent := AppEvent( @mp1, @mp2, @oXbp, 10 ) //leert die Event-Loop !! wichtig!! ENDDO SetAppFocus( oFocus ) SELECT 7 DbGoto(nRec7) DbResumeNotifications() IF lFlucht == .F. // ESC-Taste: lFlucht = .T. ENDIF Select &nOldArea DbGoto(nRec6) DbResumeNotifications() RETURN .T. CLASS LZUFF FROM DialogFF EXPORTED: VAR VArea VAR JAHR // Jahr und VAR dAnfang // Zeitabschnitt fr VAR dEnde // die MIL.dbf METHOD INIT METHOD CREATE METHOD notify METHOD WochAnf METHOD MonAnf METHOD NEU METHOD AZSuch METHOD AFSuch METHOD ArtZugang METHOD MILAufbau // Monats-Inventur-Listen-Datei aufbauen METHOD BestVortrag // Jahres-Anfangsstands-Datei erzeugen METHOD MILDruck ENDCLASS METHOD LZUFF: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 := cSerieBM ::VArea := nA ::jahr := SubStr(DtoS(DATE()),1,4) ::dAnfang := ::MonAnf() ::dEnde := ::MonAnf(::dAnfang+35)-1 ::BEArea := {} AAdd( ::BEArea, oParent ) ::BENr := Len( ::BEArea ) RETURN self METHOD LZUFF: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 LZUFF: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 LZUFF:WochAnf( dDatum ) DEFAULT dDatum TO DATE() DO WHILE DoW(dDatum)>1 --dDatum ENDDO RETURN dDatum METHOD LZUFF:MonAnf( dDatum ) DEFAULT dDatum TO DATE() DO WHILE Day(dDatum)>1 --dDatum ENDDO RETURN dDatum METHOD LZUFF:NEU(oDlg1,nA) (nA)->(DbAppend()) (nA)->(DbGotop()) (nA)->(DbSkip(0)) RETURN self METHOD LZUFF:AZSuch( 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 7 7->(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 7->(IsFieldVar("bez3")) 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez+7->bez2+7->bez3) } )) cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:" CASE 7->(IsFieldVar("bez2")) 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez+7->bez2) } )) cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:" OTHERWISE 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez) } )) cTitel := "Suche nach einer Buchstabenfolge in Bezeichnung:" ENDCASE IIf( !(7)->(Bof()), 7->(DbGotop()), ) CASE cFktT = 4 DO CASE // 12.02.2006 CASE 7->(IsFieldVar("bez3")) 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez+7->bez2+7->bez3) } )) CASE 7->(IsFieldVar("bez2")) 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez+7->bez2) } )) OTHERWISE 7->(DbSetFilter( {|| cSuchFeld$Upper(7->bez) } )) ENDCASE IIf( !(7)->(Bof()), 7->(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( 7->(FieldPos( cSuchFeld )) ):getData() ) cArtLei := IIf(!Empty(Trim(oXbp:getData())),Trim( oXbp:getData() ),cArtLei) 7->(DbSeek( cArtLei, .T. )) ELSE // oDlg:destroy() (7)->(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 := LZUFF():new( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",300,399, 7 ) oBrowse:CREATE( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",300,399, 7 ) // 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,,,oDlg) 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,,,oDlg) CASE mp1 == xbeK_ESC lFlucht := .T. PostAppEvent( xbeP_Close,,,oDlg) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO 7->(DbResetNotifications()) oDlg:setModalState( XBP_DISP_MODELESS ) DbDeRegisterClient(oBrowse) oBrowse:destroy() oDlg:destroy() /// 7->(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 LZUFF:AFSuch( oDlg1, cSuchFeld, oXbp1, aPos, ASize ) LOCAL oDlg, nEvent, mp1, mp2, oBrowse, cArtLei := Trim(" "), nRec LOCAL nOldArea := Select(), oFocus := SetAppFocus() LOCAL cVorigerWert := oXbp1:editbuffer() // 14.03.2007 14:12 LOCAL lFlucht := .F., nRet // Suche entweder in der Zugangsdatei (=7) oder in der Artikeldatei (=6): // durch Eingabe in den Suchfeldern links (cArtBez,cArtlei) wird in der Zugangsdatei gesucht // durch Klick auf die Suchkn”pfe (A-Such,B-Such) wird in der Artikeldatei gesucht // Neu-Eingabe in der Art-Nr/Bezeichnung. sollte auch in der Artikeldatei suchen... LOCAL nA := IIf( Upper(oXbp1:cargo)$"ART_LEI BEZ", 6, 7 ) // 11.02.2007 15:28: Umbau auf nA=6/14 LOCAL nAnf := IIf( nA=7, 310, 300 ), nEnd := IIf( nA=7, 319, 309 ) //11.02.2007 15:28 ~ PRIVATE oCB DEFAULT aPos TO {10,30*nV} , ASize TO {330*nH,265*nV} SELECT (nA) oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := IIf( nA=7, "Zugangs-Eintrag suchen", "Artikel suchen" ) oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, aPos, ASize ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKCYAN ) oCB := oDlg:drawingArea oCB:cargo := oDlg IF Upper(cSuchFeld) == "BEZ" cSuchFeld := 7->(oXbp1:getData()) cSuchFeld := IIf( !Empty(cSuchFeld),Upper(Trim(cSuchFeld))," " ) (nA)->(DbSetFilter( {|| cSuchFeld$Upper(IIf(nA=7,(nA)->bez,(nA)->bez)) } )) IIf( !(nA)->(Bof()), (nA)->(DbGotop()), ) ELSEIF Upper(cSuchFeld) == "ART_LEI" cArtLei := IIf(!Empty(Trim(7->(oXbp1:getData()))),Trim( 7->(oXbp1:getData()) ),cArtLei) IF nA=7 // d.h. wenn ArtikelNr in der Zugangsdatei gesucht wird OrdSetFocus(1) (nA)->(DbSeek( cArtLei, .T. )) ELSE // d.h. wenn ArtikelNr in der Artikeldatei gesucht wird (nA)->(DbSeek( cArtLei, .T. )) ENDIF ELSE oDlg:destroy() Select &nOldArea (nOldArea)->(DbSkip(0) ) SetAppFocus( oFocus ) RETURN .F. ENDIF // jetzt folgt die Erzeugung der Eingabefelder oBrowse := LZUFF():new( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",nAnf,nEnd, nA ) oBrowse:CREATE( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_art",nAnf,nEnd, nA ) // 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 == xbeBRW_ItemSelected PostAppEvent( xbeP_Close,,,oDlg) ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_RETURN .or. mp1 == xbeK_F10 PostAppEvent( xbeP_Close,,,oDlg) CASE mp1 == xbeK_ESC lFlucht := .T. PostAppEvent( xbeP_Close,,,oDlg) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() /// SELECT 7 nRec := RecNo() OrdSetFocus(1) DbGoto(nRec) IF lFlucht = .F. .AND. nA!=7 // ESC-Taste: lFlucht = .T. IF 7->art_lei <> " " .AND. 7->art_lei <>"LEER" .AND. 7->art_lei <> "----" nRet := ConfirmBox( oDlg1, IIf(SET(43)==0,ConvToAnsiCP("ersetzen: / abbrechen: "), ; "ersetzen: / abbrechen: "), ; "Zugnagseintrag ...", ; XBPMB_YESNO, ; XBPMB_WARNING, ; XBPMB_DEFBUTTON1 ) IF nRet == XBPMB_RET_YES ELSE oXbp1:setData( cVorigerWert ) // 16.12.2004 oXbp1:getData() // 16.12.2004 Select &nOldArea (nOldArea)->(DbSkip(0) ) SetAppFocus( oFocus ) RETURN .F. ENDIF ENDIF 7->(Satzsp(oCB)) 7->art_lei := (nA)->art_lei 7->ekpeu := (nA)->ek_preiseu 7->bez := (nA)->bez 7->bez2 := (nA)->bez2 7->bez3 := (nA)->bez3 7->(DbRUnlock()) (nA)->(DbClearFilter()) Select &nOldArea ELSEIF lFlucht == .T. (nA)->(DbClearFilter()) Select &nOldArea IF oXbp1:cargo = "art_lei" 7->(Satzsp(oCB)) IF 7->anz = 0 oXbp1:setData(7->art_lei := "") oXbp1:getData() ELSE oXbp1:setData(7->art_lei := cVorigerwert ) oXbp1:getData() ENDIF 7->(DbRUnlock()) ELSEIF oXbp1:cargo = "bez" 7->(Satzsp(oCB)) IF 7->anz = 0 oXbp1:setData(7->bez := "") oXbp1:getData() ELSE oXbp1:setData(7->bez := cVorigerwert ) oXbp1:getData() ENDIF 7->(DbRUnlock()) ENDIF ::BrowseFeld[1]:refreshAll() ENDIF (nOldArea)->(DbSkip(0) ) SetAppFocus( oFocus ) RETURN self //29.03.2008 14:24 zeigt in einem Fenster die Zug„nge zu dem aktuellen Artikel METHOD LZUFF:ArtZugang() LOCAL nOldArea := SELECT() LOCAL cTitel, cFWert SELECT 7 DbSuspendNotifications() IF !Upper(AppName())$"MUELLX.EXE" // 7->(DbSetScope(SCOPE_BOTH,7->art_lei)) cFWert := 7->art_lei 7->(DbSetFilter( {|| 7->art_lei == cFWert } )) //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() ::BrowseFeld[1]:refreshAll() SELECT (nOldArea) RETURN .T. METHOD LZUFF:MILAufbau() LOCAL nOldArea := SELECT(), nRec3 := 3->(RecNo()), nRec6 := 6->(RecNo()), nRec7 := 7->(RecNo()) LOCAL xOldFocus := 7->(OrdSetFocus(1)) ::Jahr := IIf( Empty(::Jahr), SubStr(DtoS(DATE()),1,4), AllTrim(::Jahr) ) 7->(DbSuspendNotifications()) 6->(DbSuspendNotifications()) 3->(DbSuspendNotifications()) // neue tempor„re Datei MonatsInventurListe erstellen: SELECT 17 aStruktur := { ; { "ART_LEI" , "C", 6, 0 } , ; { "BEZ" , "C", 45, 0 } , ; { "BEZ2" , "C", 45, 0 } , ; { "BEZ3" , "C", 45, 0 } , ; { "EK_EURO" , "N", 8, 2 } , ; { "ANFSTAND" , "N", 4, 0 } , ; { "ZUGANG" , "N", 4, 0 } , ; { "ABGANG" , "N", 4, 0 } , ; { "ENDSTAND" , "N", 4, 0 } , ; { "UMS_EURO" , "N", 10, 2 } , ; { "VK_SCHNITT" , "N", 8, 2 } } // { "UMS_MENGE" , "N", 4, 0 } , ; DbCreate( "MIL", aStruktur, "FOXCDX" ) DbUseArea( , "FOXCDX", "MIL",,.F. ) FErase( cDatver+"MIL.cdx" ) // damit der Index nicht nur berschrieben wird OrdCreate( "MIL", "ml", "ART_LEI" ) // MIL.dbf mit allen Artikeln vorbelegen: 6->(DbGotop()) DO WHILE !6->(Eof()) IF 6->art_lei != " " 17->(DbAppend()) 17->art_lei := 6->art_lei 17->bez := 6->bez 17->bez2 := 6->bez2 17->bez3 := 6->bez3 17->ek_euro := 6->ek_preiseu // hier wird schon mal der EK-Preis eingetragen ENDIF 6->(DbSkip()) ENDDO // MIL.dbf-Anfangsst„nde aus Anfangstanddatei fllen: SELECT 16 DbUseArea( , "FOXCDX", "ArtF"+::Jahr ) OrdListAdd( "ArtF"+::Jahr ) SELECT 17 DbGotop() DO WHILE !Eof() IF 16->(DbSeek(17->art_lei,.F.)) 17->anfstand := 16->bestand ENDIF DbSkip() ENDDO // MIL.dbf:Anfangstand mit Zug„ngen aus der lzu.dbf fllen: SELECT 7 DbGotop() DO WHILE !Eof() IF 7->datum < ::dAnfang IF 17->(DbSeek(7->art_lei,.F.)) 17->anfstand += 7->anz ENDIF ENDIF // MIL.dbf:Zugang mit Zug„ngen aus der lzu.dbf fllen: IF 7->datum >= ::dAnfang .AND. 7->datum <= ::dEnde IF 17->(DbSeek(7->art_lei,.F.)) 17->zugang += 7->anz ENDIF ENDIF DbSkip() ENDDO // MIL.dbf:Anfangstand mit Abg„ngen aus der auftr.dbf fllen: SELECT 3 DbGotop() LOCATE FOR Year(r_datum) == Year(::dAnfang) DO WHILE !Eof() IF 3->r_datum < ::dAnfang IF !Empty(3->zugr_z_st) .AND. 17->(DbSeek(3->zugr_z_st,.F.)) 17->anfstand -= 1 // hier kommt sp„ter mal die Menge hin ENDIF ENDIF // MIL.dbf:Abgang mit Abg„ngen aus der auftr.dbf fllen: IF 3->r_datum >= ::dAnfang .AND. 3->r_datum <= ::dEnde IF !Empty(3->zugr_z_st) .AND. 17->(DbSeek(3->zugr_z_st,.F.)) 17->abgang += 1 // hier kommt sp„ter mal die Menge hin 17->ums_euro += 3->betrageu // hier kumuliert sich der tats„chliche Euro-Umsatz ENDIF ENDIF DbSkip() ENDDO // MIL.dbf:Ums„tze berechnen und fllen: SELECT 17 DbGotop() DO WHILE !Eof() 17->endstand := 17->anfstand + 17->zugang - 17->abgang 17->vk_schnitt := IIf( 17->abgang==0, 0, 17->ums_euro / 17->abgang ) DbSkip() ENDDO DbCloseArea() 3->(DbGoto(nRec3)) 3->(DbResumeNotifications()) 6->(DbGoto(nRec6)) 6->(DbResumeNotifications()) 7->(DbGoto(nRec7)) 7->(OrdSetFocus(xOldFocus)) 7->(DbResumeNotifications()) SELECT &nOldArea RETURN self METHOD LZUFF:BestVortrag() LOCAL nOldArea := SELECT() // LOCAL cDatei := "ArtF" + AllTrim(::Jahr) + ".dbf", cIndex := "ArtF" + AllTrim(::Jahr) + ".cdx" LOCAL cDatei := "ArtF" + AllTrim(::Jahr) IF FILE(cDatver+cDatei+".dbf") IF ConfirmBox( oCB, IIf(SET(43)==0,ConvToAnsiCP("Wollen Sie die Datei berschreiben?"), ; "Wollen Sie die Datei berschreiben?"), ; "Datei "+cDatei+" existiert schon!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO RETURN self ENDIF ENDIF SELECT 16 aStruktur := { ; { "ART_LEI" , "C", 6, 0 } , ; { "BESTAND", "N", 4, 0 } } DbCreate( cDatei, aStruktur, "FOXCDX" ) DbUseArea( , "FOXCDX", cDatei ) DbImport("ArtF",{"art_lei","bestand"},,,,,,"FOXCDX") FErase( cDatver+cDatei+".cdx" ) // damit der Index nicht nur berschrieben wird OrdCreate( cDatei, "al", "ART_LEI" ) DbCloseArea() SELECT &nOldArea RETURN self METHOD LZUFF:MILDruck() LOCAL nOldArea := SELECT() DbSuspendNotifications() SELECT 17 DbUseArea( , "FOXCDX", "MIL",,.F. ) BlattDRG("Bl_mil",,oAZDA,,,"P","O",@nAnz,@nt) DbCloseArea() SELECT &nOldArea DbResumeNotifications() RETURN self