// Programa : DLL_EPSON
// Fecha/Hora : 26/04/2022 14:46:55
// Propósito : LLamadas Epson DLL
// Creado Por : Kelvis Escalante, Juan Navas
// Llamado por :
// Aplicación :
// Tabla :
#INCLUDE "DPXBASE.CH"
PROCE MAIN(cTipDoc,cNumero)
LOCAL cFileLog:="",cSql,cWhere,cEstatus
LOCAL cMaqui,cNombre,cRif,cDir1,cTel1,cNumFav
LOCAL cCant,cPrecio,cDescri,cAlicuota
LOCAL cPuerto :=RIGHT(oDp:cImpFisCom,1) // si es COM9, será 9
LOCAL nDivisa :=0
LOCAL oEpson,oTable,cPicture:="999999999.99"
DEFAULT cTipDoc:="TIK",;
cNumero:=SQLGETMAX("DPDOCCLI","DOC_NUMERO","DOC_TIPDOC"+GetWhere("=",cTipDoc))
cWhere:="DOC_CODSUC"+GetWhere("=",oDp:cSucursal)+" AND "+;
"DOC_TIPDOC"+GetWhere("=",cTipDoc )+" AND "+;
"DOC_NUMERO"+GetWhere("=",cNumero )+" AND "+;
"DOC_TIPTRA"+GetWhere("=","D" )
// Obtiene el Monto en Bs para que la impresora fiscal realice el Cálculo del IGTF.
nDivisa :=EJECUTAR("DPDOCCLIPAGDIV",oDp:cSucursal,cTipDoc,cNumero)
IF oDp:nImpFisLen>0
cPicture:=BuildPicture(oDp:nImpFisLen+1,oDp:nImpFisEnt,.F.)
ENDIF
IF !TYPE("oEpson")="O"
TDpClass():New(NIL,"oEpson")
ENDIF
oEpson:hDll :=NIL
oEpson:cName :="EPSON"
oEpson:cFileDll :="pnpdll.dll"
oEpson:cEstatus :=""
oEpson:oFile :=NIL
oEpson:lError :=.F.
cFileLog:="TEMP\"+cNumero+".LOG"
FERASE(cFileLog)
IF !FILE(oEpson:cFileDll)
MsgMemo("No se Encuentra Archivo "+oEpson:cFileDll)
RETURN NIL
ENDIF
oEpson:hDll := LoadLibrary(oEpson:cFileDll)
oEpson:cPort :=cPuerto // Valor por Defecto
IF !(Abs(oEpson:hDLL) > 32)
MensajeErr("Error Leyendo Libreria "+oEpson:cFileDll)
oEpson:IFCERRARDLL()
RETURN NIL
ENDIF
oEpson:oFile:=TFile():New(cFileLog)
oEpson:IFOPEN()
WHILE .T.
cEstatus:=oEpson:IFESTATUS()
SQLUPDATE("DPDOCCLI",{"DOC_NUMPER","DOC_IMPRES"},{cEstatus,.F.},cWhere) // Estatus Impresora
IF !Empty(oEpson:cEstatus).AND. MsgNoYes("Desea Intentar Nuevamente", "Estatus: "+oEpson:cEstatus)
oEpson:lError:=.F.0
LOOP
ENDIF
EXIT
ENDDO
IF !Empty(oEpson:cEstatus)
oEpson:IFCLOSE()
RETURN .F.
ENDIF
cSql:=" SELECT MOV_DOCUME,MOV_CODIGO,INV_DESCRI,MOV_TOTAL,DOC_OTROS,DOC_DCTO,MOV_PRECIO,MOV_DESCUE,MOV_CANTID,MOV_IVA,CCG_NOMBRE,CCG_RIF,CCG_DIR1,CCG_TEL1,"+;
" DOC_IMPRES,SFI_SERIMP "+;
" FROM DPMOVINV "+;
" INNER JOIN DPINV ON MOV_CODIGO=INV_CODIGO "+;
" INNER JOIN DPDOCCLI ON MOV_CODSUC=DOC_CODSUC AND MOV_TIPDOC=DOC_TIPDOC AND DOC_NUMERO=MOV_DOCUME AND DOC_TIPTRA='D'"+;
" LEFT JOIN DPSERIEFISCAL ON DOC_SERFIS=SFI_LETRA "+;
" LEFT JOIN DPCLIENTES ON DOC_CODIGO=CLI_CODIGO "+;
" LEFT JOIN DPCLIENTESCERO ON CCG_CODSUC=DOC_CODSUC AND CCG_TIPDOC=DOC_TIPDOC AND CCG_NUMDOC=DOC_NUMERO "+;
" WHERE MOV_CODSUC"+GetWhere("=",oDp:cSucursal)+;
" AND MOV_TIPDOC"+GetWhere("=",cTipDoc )+;
" AND MOV_DOCUME"+GetWhere("=",cNumero )+; " AND MOV_INVACT=1 " +;
" GROUP BY MOV_ITEM "+;
" ORDER BY MOV_ITEM "
oTable:=OpenTable(cSql,.T.)
IF oTable:DOC_IMPRES
MensajeErr("Número Fiscal "+cNumero+" ya fué impreso")
oTable:End()
RETURN .F.
ENDIF
// Serie Fiscal esta almacenada en DPSERFISCAL
cMaqui := ALLTRIM(PADR(oTable:SFI_SERIMP ,10))
cNombre := ALLTRIM(PADR(oTable:CCG_NOMBRE ,35))
cRif := ALLTRIM(PADR(oTable:CCG_RIF ,12))
cDir1 := ALLTRIM(PADR(oTable:CCG_DIR1 ,15))
cTel1 := ALLTRIM(PADR(oTable:CCG_TEL1 ,12))
cNumFav := ALLTRIM(PADR(oTable:MOV_DOCUME ,10))
oEpson:IFABREFISCAL()
oTable:Gotop()
WHILE !oTable:Eof()
IF oTable:Eof()
EXIT
ENDIF
cCant :=ALLTRIM(TRANSFORM(oTable:MOV_CANTID,"999999.999"))
cPrecio :=ALLTRIM(TRANSFORM(oTable:MOV_PRECIO,cPicture))
cDescri :=ALLTRIM(PADR(oTable:INV_DESCRI,20))
cAlicuota :=STRZERO(oTable:MOV_IVA*100,4)
oEpson:IFRENGLON()
oTable:DbSkip()
SysRefresh(.T.)
ENDDO
oTable:End()
oEpson:IFPRINT()
oEpson:IFCLOSE()
IF oEpson:lError
MsgMemo(MemoRead(cFileLog))
ENDIF
SQLUPDATE("DPDOCCLI",{"DOC_NUMPER","DOC_IMPRES"},{oEpson:IFESTATUS(),.T.},cWhere) // Estatus Impresora
SysRefresh(.T.)
RETURN .T.
/*
// Apertura del Puerto
*/
FUNCTION IFOPEN(cPort)
LOCAL cResp:=oEpson:PFRUNCMD("PFabrepuerto",cPuerto)
RETURN .T.
/*
// Mostrar el Estatu de la Impresora
*/
FUNCTION IFSHOWSTARTUS()
MsgMemo(oEpson:cEstatus)
RETURN .T.
/*
// Apertura del Encabezado
*/
FUNCTION IFABREFISCAL()
LOCAL cResp
LOCAL cLinea1,cLinea2,cLinea3,cLinea4
IF cTipDoc = "TIK" .OR. cTipDoc="FAV"
cResp:=oEpson:PFRUNCMD("PFabrefiscal",cNombre,cRif)
cLinea1:="Nro. Documento: "+cNumFav
cLinea2:="DIRECCION: "+cDIR1
cLinea3:="TELEFONO: "+cTel1
cLinea4:=REPLI("-",80)// ---------------------------------------"
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea1)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea2)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea3)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea4)
ENDIF
IF cTipDoc = "DEV" .OR. cTipDoc = "CRE"
cResp:=oEpson:PFRUNCMD("PFDevolucion",cNombre,cRIF,cNumFav,cMaqui,DTOC(DATE()),TIME())
cLinea1:="Nro. Documento: "+cNumFav
cLinea2:="DIRECCION: "+cDIR1
cLinea3:="TELEFONO: "+cTel1
cLinea4:=REPLI("-",80)// "----------------------------------------"
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea1)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea2)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea3)
cResp:=oEpson:PFRUNCMD("PFTfiscal",cLinea4)
ENDIF
RETURN .T.
FUNCTION IFTEXTOFISCAL()
RETURN oEpson:PFRUNCMD("PFTfiscal","")
/*
// Imprime el cuerpo de la factura
*/
FUNCTION IFRENGLON()
LOCAL cResp
cResp:=oEpson:PFRUNCMD("PFrenglon",cDescri,cCant,cPrecio,cAlicuota)
RETURN cResp
/*
// Cancela Documento Fiscal
*/
FUNCTION IFCANCELADOC()
cResp:=oEpson:PFRUNCMD("PFCancelaDoc","C","0")
RETURN cResp
/*
// Obtiene el Estatus de la Impresora
*/
FUNCTION IFESTATUS()
LOCAL cResp
cResp:=oEpson:PFRUNCMD("PFestatus","")
oEpson:cEstatus:=""
IF cResp = "TO"
oEpson:cEstatus:="Se excedió el tiempo de espera,"
oEpson:lError:=.T.
ENDIF
IF cResp = "NP"
oEpson:cEstatus:="Puerto no Abierto"
oEpson:lError:=.T.
ENDIF
IF cResp = "ER"
oEpson:cEstatus:="Existe un Error de Impresora"
oEpson:lError:=.T.
ENDIF
RETURN cResp
/*
// Cortar el Papel
*/
FUNCTION IFCUTPAPER()
LOCAL cResp
cResp:=oEpson:PFRUNCMD("PFCortar","")
RETURN
/*
// Totalizador
*/
FUNCTION IFPRINT()
LOCAL cResp,cMonto:=""
IF nDivisa>0
cMonto:="E|U|"+LSTR(nDivisa*100,10,0)
cResp :=oEpson:PFRUNCMD("PFComando",cMonto)
ELSE
cMonto:="E|U|000"
cResp :=oEpson:PFRUNCMD("PFComando",cMonto)
ENDIF
RETURN .T.
/*
// Ejecuta llamadas de las Funciones de la Impresora Epson
*/
FUNCTION PFRUNCMD(cFunc,cPar1,cPar2,cPar3,cPar4,cPar5,cPar6,cPar7,cPar8,cPar9)
LOCAL uResult, cFarProc, hDLL:=oEpson:hDll
cFarProc:= GetProcAddress(hDLL,cFunc,.T.,8,8,8,8,8,8,8,8,8,8 )
uResult := CallDLL(cFarProc,cPar1,cPar2,cPar3,cPar4,cPar5,cPar6,cPar7,cPar8,cPar9)
IF ValType(uResult)="C" .AND. uResult="ER"
oEpson:lError:=.T.
oEpson:oFile:AppStr(cFunc+","+cPar1+uResult)
ENDIF
RETURN uResult
/*
// Cierra la Conexión con la Impresora
*/
FUNCTION IFCLOSE()
oEpson:PFRUNCMD("PFcierrapuerto","")
oEpson:IFCERRARDLL()
IF !oEpson:oFile=NIL
oEpson:oFile:Close()
ENDIF
RETURN
/*
// Cerrar el Archivo pnpdll.dll
*/
FUNCTION IFCERRARDLL()
FreeLibrary(oEpson:hDLL )
oEpson:hDLL:=NIL
RETURN .T.
// EOF