**********************************************************
* PROGRAMA DE INVENTARIOS Y COSTOS DE PRODUCCION EN MYSQL*
* Modulo: Cat谩logo de Bodegas聽 聽 聽 聽 聽 聽 聽 聽 聽 聽*
* Inicio: 06 de Abril de 2006聽 聽聽 聽 聽 聽 聽 聽 聽 聽聽 *
* Actual: 19 de Febrero de 2008聽聽 聽 聽 聽 聽 聽 聽 聽聽 *
**********************************************************
#include "fivewin.ch"
#include "xbrowse.ch"
#include "report.ch"
#include "Ado.ch"
pBodegas()
********************
*Catalogo de Bodegas
********************
PROC pBodegas()
LOCAL aCol:={0,0},oCuadro
oLamcla:oC1vg1:=space(100)
oLamcla:vOrden:="b_nombre"
oLamcla:oTimpr:=1
oVar 聽 := "SELECT * from "+oLamcla:tBode+" ORDER BY "+alltrim(oLamcla:vOrden)
TRY
聽 oLamcla:oRsBodega:=tOleAuto():New("ADODB.RecordSet")
CATCH oError
聽 MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
END
oLamcla:oRsBodega:CursorLocation 聽:= adUseClient //adUseServer
oLamcla:oRsBodega:LockType 聽 聽 聽 聽:= adLockOptimistic
oLamcla:oRsBodega:CursorType 聽 聽 聽:= adOpenKeyset
oLamcla:oRsBodega:Source 聽 聽 聽 聽 聽:= oVar
oLamcla:oRsBodega:ActiveConnection( oLamcla:oServer )
TRY
聽 oLamcla:oRsBodega:Open()
CATCH oError
聽 MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
END
DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadro RESOURCE "orMedida" ICON "#8001" TRANSPARENT BRUSH oFondo
聽 REDEFINE BUTTONBMP Btn_Limp ID 4003 OF oCuadro BITMAP "Blimpi2" TOOLTIP oLamcla:mTfil ACTION pBusBod(oLamcla:oC1vg1:=space(100))
聽 REDEFINE GET oC1og1 VAR oLamcla:oC1vg1 ID 4002 OF oCuadro UPDATE VALID(pBusBod(),.T.)
聽 oLamcla:oBrwBode := TXBrowse():New( oCuadro )
聽 oLamcla:oBrwBode:nMarqueeStyle 聽 聽 聽 := MARQSTYLE_HIGHLROW
聽 oLamcla:oBrwBode:nColDividerStyle 聽 聽:= LINESTYLE_RAISED
聽 oLamcla:oBrwBode:nHeaderLines 聽 聽 聽 聽:= 1
聽 oLamcla:oBrwBode:lColDividerComplete := .t.
聽 oLamcla:oBrwBode:lRecordSelector 聽 聽 := .t.
聽 oLamcla:oBrwBode:bClrSel 聽聽 聽 聽 聽:= {|| { CLR_BLACK,oLamcla:cClr7 } }
聽 oLamcla:oBrwBode:bClrStd 聽聽 聽 聽 聽:= {|| IF( (oLamcla:oRsBodega:AbsolutePosition()%2)==0,{CLR_BLACK,oLamcla:cClr2},{CLR_BLACK,oLamcla:cClr1} ) }
聽 oLamcla:oBrwBode:bClrSelFocus 聽 聽 聽 聽:= {|| { CLR_WHITE,RGB(147,160,112) } }
聽 aCol[ 1] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oLamcla:oBrwBode:AddCol()
聽 aCol[ 1]:bStrData 聽 聽 聽 聽 聽:= { || If( oLamcla:oRsBodega:Eof, Space( nWidth ), cValtoChar( oLamcla:oRsBodega:Fields( "b_bodega" ):Value ) ) }
聽 aCol[ 1]:cHeader 聽 聽 聽 聽 聽 聽:= "Codigo"
聽 aCol[ 1]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nWidth 聽 聽 聽 聽 聽 聽:= 80
聽 aCol[ 2] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oLamcla:oBrwBode:AddCol()
聽 aCol[ 2]:bStrData 聽 聽 聽 聽 聽:= { || If( oLamcla:oRsBodega:Eof, Space( nWidth ), cValtoChar( oLamcla:oRsBodega:Fields( "b_nombre" ):Value ) ) }
聽 aCol[ 2]:cHeader 聽 聽 聽 聽 聽 聽:= "Nombre"
聽 aCol[ 2]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nWidth 聽 聽 聽 聽 聽 聽:= 225
聽 oLamcla:oBrwBode:SetADO( oLamcla:oRsBodega )
聽 oLamcla:oBrwBode:CreateFromResource( 102 )
聽 oCuadro:cTitle 聽 := "Tabla de Bodegas"
聽 oCuadro:bKeyDown := {|nKey|iif(nKey == 114,(oLamcla:vgraba:=.t.,oLamcla:autoriza(64)),(iif(nKey == 115,(oLamcla:vgraba:=.f.,oLamcla:autoriza(65)),(iif(nKey == 116,(oLamcla:autoriza(66)),(""))))))}
ACTIVATE DIALOG oCuadro NOWAIT On Init (Centra( oCuadro ),oCuadro:refresh(),BarraBod( oCuadro )) CENTERED
**************************************
*CREA LA BARRA DE HERRAMIENTAS BODEGAS
**************************************
FUNCTION BarraBod( oCuadro )
LOCAL oBar,oBtn,oCodigo,oNombre
MENU oOrdTal POPUP 2007
聽 MENUITEM oCodigo PROMPT "C贸digo" ACTION (oCodigo:SetCheck( .T. ),oNombre:SetCheck( .F. ),oLamcla:vOrden:="b_bodega",pOrdBod())
聽 MENUITEM oNombre PROMPT "Nombre" ACTION (oCodigo:SetCheck( .F. ),oNombre:SetCheck( .T. ),oLamcla:vOrden:="b_nombre",pOrdBod())
ENDMENU
MENU oPopup POPUP 2007
聽 MENUITEM "Configurar Impresora" ACTION PrinterSetup()
聽 SEPARATOR
聽 MENUITEM "Generar reporte a impresora" ACTION (oLamcla:oTimpr:=1,oLamcla:autoriza(67))
聽 MENUITEM "Generar reporte a Excel" 聽ACTION (oLamcla:oTimpr:=2,oLamcla:autoriza(67))
ENDMENU
oCodigo:SetCheck( .T. )
oNombre:SetCheck( .F. )
DEFINE BUTTONBAR oBar OF oCuadro SIZE 60,60 2007
DEFINE BUTTON OF oBar RESOURCE "#8016" PROMPT "Agregar" TOOLTIP "Agregar Registro - F3" ACTION (oLamcla:vgraba:=.t.,oLamcla:autoriza(64))
DEFINE BUTTON OF oBar RESOURCE "#8014" PROMPT "Modificar" TOOLTIP "Modificar Registro - F4" ACTION (oLamcla:vgraba:=.f.,oLamcla:autoriza(65))
DEFINE BUTTON OF oBar RESOURCE "#8017" PROMPT "Borrar" TOOLTIP "Borrar Registro - F5" ACTION oLamcla:autoriza(66)
DEFINE BUTTON OF oBar RESOURCE "#8012" PROMPT "Imprimir" TOOLTIP "Imprimir Listado" MENU oPopup ACTION (oLamcla:oTimpr:=1,oLamcla:autoriza(67))
DEFINE BUTTON OF oBar RESOURCE "#8019" PROMPT "Ordenar" TOOLTIP "Organizar Informaci贸n" MENU oOrdTal ACTION (oCodigo:SetCheck( .F. ),oNombre:SetCheck( .T. ),oLamcla:vOrden:="b_nombre",pOrdBod())
DEFINE BUTTON OF oBar RESOURCE "#8013" PROMPT "Cerrar" TOOLTIP "Cerra Ventana" ACTION (oLamcla:oRsBodega:Close(),oCuadro:End())
oBar:GoTop()
RETURN .T.
****************
*Agregar Bodegas
****************
PROC pAgreBod()
oB2vg1:=space(3)
oB2vg2:=space(50)
oB2vg3:=space(50)
oB2vg4:=space(20)
DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadr1 RESOURCE "orBodeg1" ICON "#8001" TRANSPARENT BRUSH oFondo
聽REDEFINE BUTTONBMP Btn_Grab ID 11 OF oCuadr1 BITMAP "Bgrab" ACTION pValiBod()
聽REDEFINE BUTTONBMP Btn_Canc ID 10 OF oCuadr1 BITMAP "Bcanc" ACTION oCuadr1:End()
聽REDEFINE GET oB2og1 VAR oB2vg1 ID 4001 OF oCuadr1
聽REDEFINE GET oB2og2 VAR oB2vg2 ID 4003 OF oCuadr1
聽REDEFINE GET oB2og3 VAR oB2vg3 ID 4004 OF oCuadr1
聽REDEFINE GET oB2og4 VAR oB2vg4 ID 4006 OF oCuadr1
聽oCuadr1:cTitle := "Agregar Registro Bodegas"
ACTIVATE DIALOG oCuadr1 CENTERED
****************
*Validar Bodegas
****************
PROC pValiBod()
IF Empty(oB2vg1)
聽 MsgStop("Digite Codigo Bodega",oLamcla:mImco)
聽 oB2og1:setfocus()
ELSE
聽 IF Empty(oB2vg2)
聽 聽 MsgStop("Digite Nombre Bodega",oLamcla:mImco)
聽 聽 oB2og2:setfocus()
聽 ELSE
聽 聽 IF oLamcla:vgraba=.t.
聽 聽 聽 oVar:="SELECT * from " + oLamcla:tBode +" WHERE b_bodega='"+alltrim(oB2vg1)+"'"
聽 聽 聽 TRY
聽 聽 聽 聽 oConsBO := CreateObject("ADODB.Recordset")
聽 聽 聽 CATCH oError
聽 聽 聽 聽 MsgStop(oLamcla:mErnt,oLamcla:mErco)
聽 聽 聽 聽 RETURN(.F.)
聽 聽 聽 END
聽 聽 聽 oConsBO:CursorLocation 聽:= adUseClient //adUseServer
聽 聽 聽 oConsBO:LockType 聽 聽 聽 聽:= adLockOptimistic
聽 聽 聽 oConsBO:CursorType 聽 聽 聽:= adOpenKeyset
聽 聽 聽 oConsBO:Source 聽 聽 聽 聽 聽:= oVar
聽 聽 聽 oConsBO:ActiveConnection( oLamcla:oServer )
聽 聽 聽 TRY
聽 聽 聽 聽 oConsBO:Open()
聽 聽 聽 CATCH oError
聽 聽 聽 聽 MsgStop(oLamcla:mComa,mDato)
聽 聽 聽 END
聽 聽 聽 nRegistros := oConsBO:RecordCount()
聽 聽 聽 IF nRegistros#0
聽 聽 聽 聽 oConsBO:MoveFirst()
聽 聽 聽 聽 vMedi:=oConsBO:Fields("b_bodega"):Value
聽 聽 聽 聽 vNomb:=oConsBO:Fields("b_nombre"):Value
聽 聽 聽 聽 oConsBO:close()
聽 聽 聽 聽 MsgAlert("Bodega Existente:"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 聽 聽"C贸digo:->"+alltrim(vMedi)+CRLF+;
聽 聽 聽 聽 聽 聽 聽"Nombre:->"+alltrim(vNomb)+CRLF+;
聽 聽 聽 聽 聽 聽 聽"Digite Nuevamente",oLamcla:mDato)
聽 聽 聽 聽 oB2og1:setfocus()
聽 聽 聽 ELSE
聽 聽 聽 聽 oConsBO:close()
聽 聽 pGrabBod()
聽 聽 聽 ENDIF
聽 聽 ELSEIF oLamcla:vgraba=.f.
聽 聽 聽 pGrabBod()
聽 聽 ENDIF
聽 ENDIF
ENDIF
************************************
*Graba los datos en la base de datos
************************************
PROC pGrabBod()
uFec:=date()
uTim:=subs(time(),1,8)
uCou:=alltrim(oLamcla:vCous)
IF oLamcla:vgraba=.t.
聽 oLamcla:oRsBodega:Addnew()
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("umovim"):value := 0
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ELSE
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ENDIF
oLamcla:oRsBodega:Requery()
oLamcla:oBrwBode:Refresh()
oCuadr1:end()
******************
*Modificar Bodegas
******************
PROC pModiBod()
tama:=50-len(oLamcla:oRsBodega:Fields("b_nombre"):Value)
tamb:=50-len(oLamcla:oRsBodega:Fields("b_direcc"):Value)
tamc:=20-len(oLamcla:oRsBodega:Fields("b_telefo"):Value)
oB2vg1:=oLamcla:oRsBodega:Fields("b_bodega"):Value
oB2vg2:=oLamcla:oRsBodega:Fields("b_nombre"):Value+space(tama)
oB2vg3:=oLamcla:oRsBodega:Fields("b_direcc"):Value+space(tamb)
oB2vg4:=oLamcla:oRsBodega:Fields("b_telefo"):Value+space(tamc)
DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadr1 RESOURCE "orBodeg1" ICON "#8001" TRANSPARENT BRUSH oFondo
聽REDEFINE BUTTONBMP Btn_Grab ID 11 OF oCuadr1 BITMAP "Bgrab" ACTION pValiBod()
聽REDEFINE BUTTONBMP Btn_Canc ID 10 OF oCuadr1 BITMAP "Bcanc" ACTION oCuadr1:End()
聽REDEFINE GET oB2og1 VAR oB2vg1 ID 4001 OF oCuadr1
聽REDEFINE GET oB2og2 VAR oB2vg2 ID 4003 OF oCuadr1
聽REDEFINE GET oB2og3 VAR oB2vg3 ID 4004 OF oCuadr1
聽REDEFINE GET oB2og4 VAR oB2vg4 ID 4006 OF oCuadr1
聽oB2og1:disable()
聽oCuadr1:cTitle := "Modificar Registro Tabla Bodegas"
ACTIVATE DIALOG oCuadr1 CENTERED
****************
*Borrar Registro
****************
PROC pBorrBod()
nRegistros := oLamcla:oRsBodega:RecordCount()
IF nRegistros#0
聽 oM2vg1:=oLamcla:oRsBodega:Fields("b_bodega"):Value
聽 oM2vg2:=oLamcla:oRsBodega:Fields("b_nombre"):Value
聽 IF MSGNOYES("Confirma Eliminar Bodega"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 "C贸digo:->"+alltrim(oM2vg1)+CRLF+;
聽 聽 聽 聽 聽 "Nombre:->"+alltrim(oM2vg2),oLamcla:mCoto)
聽 聽 oLamcla:oRsBodega:Delete()
聽 聽 oLamcla:oRsBodega:Requery()
聽 聽 oLamcla:oBrwBode:Refresh()
聽 ENDIF
ENDIF
************************************
*hace la busqueda global en la tabla
************************************
PROC pBusBod()
IF Empty(oLamcla:oC1vg1)
聽 聽 oLamcla:oRsBodega:Filter := ""
ELSE
聽 oLamcla:oRsBodega:Filter := oLamcla:vOrden+" LIKE '%" + alltrim(oLamcla:oC1vg1) + "%'"
聽 IF oLamcla:oRsBodega:EOF .and. oLamcla:oRsBodega:BOF
聽 聽 MsgStop( oLamcla:mBusc,oLamcla:mDato)
聽 聽 oLamcla:oRsBodega:Filter := ""
聽 ENDIF
ENDIF
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()
RETURN( NIL )
******************
*orden de la tabla
******************
PROC pOrdBod()
oLamcla:oRsBodega:Sort := oLamcla:vOrden
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()
*********************
*Imprimir Informaci贸n
*********************
PROC pImprBod()
nRegistros := oLamcla:oRsBodega:RecordCount()
IF nRegistros#0
聽 IF (oLamcla:oTimpr=1,pIPBod(),pIXBod())
ELSE
聽 Msginfo(oLamcla:mErim,oLamcla:mDato)
ENDIF
********************
*IMPRIME EN PANTALLA
********************
PROC pIPBod()
local oReport,nLinea := 1, nHasta := oLamcla:oRsBodega:RECORDCOUNT(), ;
nBookMark := oLamcla:oRsBodega:BookMark
oLamcla:oRsBodega:MoveFirst()
uFec:=dtoc(date())
uTim:=subs(time(),1,8)
REPORT oReport CAPTION "TABLA DE BODEGAS" 聽HEADER oLamcla:vGnom,"NIT:"+lymatrim(oLamcla:vGnit)+"-"+lymatrim(oLamcla:vGdig),"TABLA DE BODEGAS","P谩gina N煤mero: " + STR (oReport:nPage, 3),"Fecha Reporte: "+uFec+" - Hora: "+uTim;
CENTER 聽PREVIEW
聽 COLUMN TITLE "C贸digo" DATA oLamcla:oRsBodega:Fields("b_bodega"):value SIZE 9
聽 COLUMN TITLE "Nombre" DATA oLamcla:oRsBodega:Fields("b_nombre"):value SIZE 25
聽 COLUMN TITLE "Direcci贸n" DATA oLamcla:oRsBodega:Fields("b_direcc"):value SIZE 25
聽 COLUMN TITLE "Tel茅fono" DATA oLamcla:oRsBodega:Fields("b_telefo"):value SIZE 15
END REPORT
oReport:bWhile := { || nLinea <= nHasta }
oReport:oDevice:SetPortrait()
oReport:oDevice:lPrvModal := .T.
IF oReport:lCreated
聽 oReport:bSkip := { | | nLinea++, oLamcla:oRsBodega:MoveNext() }
ENDIF
ACTIVATE REPORT oReport ;
ON END oLamcla:oRsBodega:BookMark := nBookMark
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()
********************
*IMPRIME EN EXCEL
********************
PROC pIXBod()
LOCAL fila:=1
LOCAL vCod:="CODIGO"
LOCAL vNom:="NOMBRE"
LOCAL vDir:="DIRECCION"
LOCAL vTel:="TELEFONO"
Gvtitu:="TABLA DE BODEGAS"
oXls 聽 聽:= Txls():New( ".\xls\Bodegas.xls",, .T. )
oXls:Width( 01 , 10 )
oXls:Width( 02 , 50 )
oXls:Width( 03 , 50 )
oXls:Width( 04 , 20 )
oXls:Say( fila, 01, Gvtitu ,,,,,1 )
++fila
oXls:Say( fila, 01, vCod ,,,,,1 )
oXls:Say( fila, 02, vNom ,,,,,1 )
oXls:Say( fila, 03, vDir ,,,,,1 )
oXls:Say( fila, 04, vTel ,,,,,1 )
++fila
oLamcla:oRsBodega:MoveFirst()
Do While !oLamcla:oRsBodega:Eof()
聽 oXls:Say( fila, 01, oLamcla:oRsBodega:Fields( "b_bodega" ):Value ,,,,,0 )
聽 oXls:Say( fila, 02, oLamcla:oRsBodega:Fields( "b_nombre" ):Value ,,,,,0 )
聽 oXls:Say( fila, 03, oLamcla:oRsBodega:Fields( "b_direcc" ):Value ,,,,,0 )
聽 oXls:Say( fila, 04, oLamcla:oRsBodega:Fields( "b_telefo" ):Value ,,,,,0 )
聽 oLamcla:oRsBodega:MoveNext()
聽 ++fila
EndDo
oXls:End()
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()
SHELLEXECUTE(,"OPEN",".\xls\Bodegas.xls",,,)