/* * Programador: Wanderlei Cardoso * Modulo de impressão da Bematech */ #define DC_CALL_STD 0x0020 memvar NrDocto, cNome, cEnder, vpUserDir, abrelib, ECF, MAQ FUNCTION BEMATECH(__Comando) **************************** local __Retorno := "OK", iRetorno := -100 local _Arqlog := "EcfBema"+dtos(date())+".log" __Comando := __Comando + "|" if NrDocto == nil NrDocto := "" endif if cNome == nil cNome := "" endif if cEnder == nil cEnder := "" endif vArgumento := "" Arg := {} vComando := __Comando vComando := vComando + iif(Right(vComando,1)<>'|','|','') if at('|',vComando) > 0 vArgumento := right(vComando,len(vComando)-at('|',vComando) ) vComando := left(vComando,at("|",VComando)-1) Do while Len(vArgumento)>0 aadd(Arg, left(vArgumento,(at("|",vArgumento)-1)) ) vArgumento := right(vArgumento,len(vArgumento)-at("|",vArgumento) ) Enddo Endif *---> Grava um log da transação <---* if left(__Comando,3) != "R00" .and. left(__Comando,3) != "R01" if(file(_Arqlog), handle:=fopen(_Arqlog,2), handle:=fcreate(_Arqlog)) fseek(handle,0,2) fwrite(handle, __Comando + HB_OsNewLine()) FClose(handle) endif if left(__Comando,4) == "B03|" .or. left(__Comando,4) == "B00|" iRetorno := DLLCall(abrelib, 32, "Bematech_FI_AbreCupomMFD", NrDocto,; //CPF ou CNPJ do Cliente com até 29 cNome, ; //Nome cEnder) //Endereço if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B01|" .or. left(__Comando,5) == "B01A|" //Alterado por GSS em 20032012 cBuscaIni := cBuscaFim := 5 _codigo := "" _descricao := "" _imposto := "" _qtde := "" _unidade := "" _valor := "" _desconto := "" FOR _x := 1 to 7 cBuscaIni := cBuscaFim cBuscaFim := at( "|" , __Comando , cBuscaIni ) if cBuscaFim == 0 cBuscaFim := cBuscaIni+10 endif if _x == 1 _codigo := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) elseif _x == 2 _descricao := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) elseif _x == 3 _imposto := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) elseif _x == 4 _qtde := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) elseif _x == 5 _unidade := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) elseif _x == 6 _valor := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) _valor := _valor+"0" elseif _x == 7 _desconto := substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni)) endif cBuscaFim++ next iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_VendeItemDepartamento",; _codigo,; //Codigo tamanho maximo de 13 _descricao,; //Descricao tamanho maximo de 29 _Imposto,; //Aliquta tamanho de 4 ou 5 para valor ou 2 para percentual _valor,; //Valor unitario _qtde,; //Quantidade tamanho de 4 para inteiro ou 7 com 3 casas decimais "0",; //Valor do acrescimo _desconto,; //valor do desconto "01",; //indice do departamento _unidade) //Unidade de medida if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "" _SubTotal := Space(14) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_SubTotal",; _SubTotal) //Variavel para receber o valor do total if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B05A" .or. left(__Comando,4) == "B05B" .or. left(__Comando,4) == "B05C" .or. left(__Comando,4) == "B05D" _Valor := substr(__Comando,6,15) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_IniciaFechamentoCupom", ; "D",; //A=Acréscimo D=Desconto "$",; //$=Valor %=Percentual _Valor) //Valor do Desconto ou Acréscimo if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B06|" iRetorno := DLLCall(abrelib, 32 , "Bematech_FI_ProgramaFormaPagamentoMFD", Arg[1], '1' ) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B07|" _IndForma := substr(__Comando,5,2) _Valor := strtran(substr(__Comando,8,15),".",",") iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_EfetuaFormaPagamentoIndice",; _IndForma,; //Indice da Forma de pagamento no ECF _Valor) //Valor Forma de Pagamento tamanho 14 if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B08|" _Mensagem := "" cBuscaIni := cBuscaFim := 5 do while .t. cBuscaIni := cBuscaFim cBuscaFim := at( "|" , __comando , cBuscaIni ) if cBuscaFim == 0 exit endif _Mensagem += left(substr( __comando , cBuscaIni , (cBuscaFim-cBuscaIni))+space(48),48) cBuscaFim++ enddo iRetorno := DLLCall(abrelib, 32 , "Bematech_FI_TerminaFechamentoCupom", _Mensagem) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B09|" iRetorno := DLLCall(abrelib, 32, "Bematech_FI_ProgramaHorarioVerao" ) elseif left(__Comando,4) == "B12|" //Programa Totalizadores Nao Fiscais if len(Arg) < 2 .or. Val(Arg[1]) > 30 iRetorno := -2 Else iRetorno := DLLCall(abrelib, 32, "Bematech_FI_NomeiaTotalizadorNaoSujeitoIcms", Val(Arg[1]), Arg[2] ) Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := "OK - - Nomeia Totalizador N.Tributado" endif Elseif left(__Comando,4) == "B13|" .or. left(__Comando,4) == "B14|" if len(Arg) < 1 iRetorno := -2 Else if left(__Comando,4) == "B13|" iRetorno := DLLCall(abrelib, 32, "Bematech_FI_ProgramaAliquota", Arg[1], 0) Else iRetorno := DLLCall(abrelib, 32, "Bematech_FI_ProgramaAliquota", Arg[1], 1) Endif Endif if iRetorno != 1 TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := "OK - - Programa Aliquota" Endif elseif left(__Comando,4) == "G12|" NumeroCupom := Space(6) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_NumeroCupom", NumeroCupom) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+NumeroCupom+" - ObterNumeroUltimoCupom" endif elseif left(__Comando,4) == "D02|" //Imprime linha não fiscal gerencial __Comando := substr(__Comando,5,len(__Comando)-1) __Comando := strtran(__Comando,"|") _tot := round(len(__Comando) / 40,0) _Inicio := 1 __Comando__ := "" FOR _x:=1 to _tot __Comando__ += substr(__Comando,_Inicio,40)+space(8) _Inicio := _Inicio+40 NEXT __Comando := __Comando__ _tot := round(len(__Comando) / 480,0) _inicio := 1 FOR _x :=1 to _tot+1 _Envia := substr(__Comando,_inicio,480) if !empty(_Envia) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_UsaRelatorioGerencialMFD",; _Envia) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif _inicio += 480 endif NEXT elseif left(__Comando,4) == "D03|" _NumeroCupom := substr(__Comando,5,6) _Formapg := substr(__Comando,12,2) _Valor := strtran(substr(__Comando,15,13),".",",") ABRE("FPAGTO") if FPAGTO->( bof() ) .and. FPAGTO->( eof() ) if _Formapg == "01" .or. _Formapg == "02" _Formapg := "A Vista" elseif _Formapg == "03" _Formapg := "Convenio" elseif _Formapg == "04" _Formapg := "Credito" elseif _Formapg == "05" _Formapg := "Cartao" elseif _Formapg == "06" _Formapg := "Cheque" elseif _Formapg == "07" _Formapg := "Trn-Centre" elseif _Formapg == "08" _Formapg := "Subsidio" elseif _Formapg == "09" _Formapg := "FarmaciaPopular" elseif _Formapg == "10" _Formapg := "E-Pharma" elseif _Formapg == "11" _Formapg := "VidaLink" elseif _Formapg == "12" _Formapg := "PharmaLink" endif else if _Formapg == "01" _Formapg := "02" endif if FPAGTO->( dbseek(ECF+_Formapg) ) .and. !empty(FPAGTO->NMFORMA) _Formapg := FPAGTO->NMFORMA else if _Formapg == "01" .or. _Formapg == "02" _Formapg := "A Vista" elseif _Formapg == "03" _Formapg := "Convenio" elseif _Formapg == "04" _Formapg := "Credito" elseif _Formapg == "05" _Formapg := "Cartao" elseif _Formapg == "06" _Formapg := "Cheque" elseif _Formapg == "07" _Formapg := "Trn-Centre" elseif _Formapg == "08" _Formapg := "Subsidio" elseif _Formapg == "09" _Formapg := "FarmaciaPopular" elseif _Formapg == "10" _Formapg := "E-Pharma" elseif _Formapg == "11" _Formapg := "VidaLink" elseif _Formapg == "12" _Formapg := "PharmaLink" endif endif endif FPAGTO->( dbclosearea() ) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_AbreComprovanteNaoFiscalVinculado",; _Formapg,; //Forma de Pagamento no maximo 16 caracter _Valor,; //Valor com 14,2 _NumeroCupom) //Numero do cupom fiscal tamanho de 6 if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "D04|" //Imprime linha não fiscal __Comando := substr(__Comando,5,len(__Comando)-1) __Comando := strtran(__Comando,"|") _tot := round(len(__Comando) / 40,0) _Inicio := 1 __Comando__ := "" FOR _x:=1 to _tot __Comando__ += substr(__Comando,_Inicio,40)+space(8) _Inicio := _Inicio+40 NEXT __Comando := __Comando__ _tot := round(len(__Comando) / 480,0) _inicio := 1 FOR _x :=1 to _tot+1 _Envia := substr(__Comando,_inicio,480) if !empty(_Envia) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_UsaComprovanteNaoFiscalVinculado",; _Envia) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) _x := _Tot+2 endif _inicio += 480 endif NEXT elseif left(__Comando,4) == "D05|" iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_FechaComprovanteNaoFiscalVinculado") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C04A" //Data Movimento Reducao Z sMarca := space(15) sModelo := space(20) sTipo := space(7) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_MarcaModeloTipoImpressoraMFD", sMarca, sModelo, sTipo) If iRetorno = 1 if Upper(left(sModelo,6)) = 'MP20FI' .or. Upper(Left(sModelo,6))='MP40FI' vInfo := Space(631) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_DadosUltimaReducao", vInfo) if iRetorno = 1 vInfo := Substr(vInfo, 596, 6) vInfo := Substr(vInfo,1,2)+'/'+Substr(vInfo,3,2)+'/'+SubStr(vInfo,5,2) Endif Else vInfo := Space(1278) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_DadosUltimaReducaoMFD", vInfo) if iRetorno = 1 vInfo := Substr(vInfo, 1273, 6) vInfo := Substr(vInfo,1,2)+'/'+Substr(vInfo,3,2)+'/'+SubStr(vInfo,5,2) Endif Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := HB_AnsiToOem("OK - " + Dtoc(ctod(vInfo))+' - Data Movimento Redução Z') endif Else __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C04B" _Data := space(6) _Hora := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DataHoraReducao",; _Data,; //Data atual do ECF _Hora) //Hora atual do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+substr(_data,1,4)+"20"+substr(_data,5,2)+_Hora+" - Data e Hora da ultima reduçãoZ" endif elseif left(__Comando,4) == "C04C" _DataHora := space(12) iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_DataHoraUltimoDocumentoMFD",; _DataHora) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + _DataHora+' - Data do Último Documento' endif elseif left(__Comando,4) == "C04D" sDados := space(1278) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DadosUltimaReducaoMFD",; sDados) // String para receber as informações. if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + SubStr(sDados1,2) + " - Redução Z Automática" endif elseif left(__Comando,4) == "C04I" //Coo Redução Z sMarca := space(15) sModelo := space(20) sTipo := space(7) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_MarcaModeloTipoImpressoraMFD", sMarca, sModelo, sTipo) If iRetorno = 1 vInfo := Space(06) if Upper(left(sModelo,6)) = 'MP20FI' .or. Upper(Left(sModelo,6))='MP40FI' iRetorno := DLLCall(abrelib, 32, "Bematech_FI_MapaResumo", vInfo) If iRetorno = 1 cFile := MemoRead(Origem) vInfo := Right(memoline(cFile,,2),6) __Retorno := HB_AnsiToOem("OK - " + vInfo+' - Coo da Redução Z') Endif Else vInfo := Space(1278) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_DadosUltimaReducaoMFD", vInfo) if iRetorno = 1 vInfo := SubStr(vInfo,14,6) __Retorno := HB_AnsiToOem("OK - " + vInfo+' - Coo da Redução Z') Endif Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Endif Else __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C04J" //Desconto Issqn Habilitado vFlag := Space(06) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_FlagsFiscais3MFD", vFlag) vFlag := Val(vFlag) if vFlag >= 128 Vflag -= 128 Endif if vFlag >= 64 vFlag -= 64 Endif if vFlag >= 32 vFlag -= 32 Endif if vFlag >= 16 vFlag := '1' Else vFlag := '0' Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := 'OK - '+vFlag+' - Desconto Issqn Habilitado' Endif elseif left(__Comando,4) == "C04N" sDados := space(1278) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DadosUltimaReducaoMFD",; sDados) // String para receber as informações. if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + sDados + " - dados da última Redução Z" endif elseif left(__Comando,4) == "D08|" iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_EstornoNaoFiscalVinculadoMFD",; NrDocto,; //CPF ou CNPJ do Cliente cNome, ; //Nome do Cliente cEnder) //Endereço do Cliente if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "D00|" //Abre relatorio gerencial iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_RelatorioGerencial") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "D01|" //Encerra relatorio gerencial iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_FechaRelatorioGerencial") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B11|" iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_CancelaCupomMFD",; NrDocto,; //CPF ou CNPJ do Cliente cNome,; //Nome do Cliente cEnder) //Endereço do Cliente if iRetorno != 1 __Retorno := "CANCELAMENTO NAO PERMITIDO" TrataRetorno(iRetorno, left(__Comando,4) ) endif elseif left(__Comando,4) == "C01|" iRetorno = DLLCall(abrelib, 32, "Bematech_FI_LeituraX") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == 'C02A' .or. left(__Comando,4) == 'C02B' .or. left(__Comando,4) == 'C02C' .or. ; left(__Comando,4) == 'C02D' .or. left(__Comando,4) == 'C02E' iRetorno = DLLCall(abrelib, 32, "Bematech_FI_LinhasEntreCupons", vArg[1]) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C00|" iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_ReducaoZ",; dtoc(date()),; time()) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif Elseif Left(__Comando,4) =='F00|' iRetorno = DLLCall(abrelib, 32, "Bematech_FI_AcionaGaveta") If iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Endif elseif left(__Comando,4) == "R10|" _indice := substr(__Comando,5,2) _indforma := substr(__Comando,8,2) _valor := substr(__Comando,11,13) _valortot := substr(__comando,25,13) iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_AbreRecebimentoNaoFiscalMFD",; NrDocto,; //CPF ou CNPJ do Cliente cNome,; //Nome do Cliente cEnder) //Endereço do Cliente if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_EfetuaRecebimentoNaoFiscalMFD",; _indice,; //indice da forma de recebimento não fiscal _valor) //valor do recebimento if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_IniciaFechamentoRecebimentoNaoFiscalMFD",; "D",; //tipo de acrescimo 'A' ou desconto 'D' ou ambos 'X' "%",; //tipo de acrescimo '%' percentual ou '$' valor "0000",; //valor do acrescimo "0000") //valor do desconto if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_EfetuaFormaPagamentoIndiceMFD",; _indforma,; //indice da forma de recebimento não fiscal _valortot,; //valor total da forma de pagamento "1",; //numero de parcelas "") //mensagem if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_FechaRecebimentoNaoFiscalMFD",; "") //mensagem if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif endif endif endif endif elseif left(__Comando,4) == "C04G" _vBruta := space(23) iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_VendaBruta",; _vBruta) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C04O" iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_CupomAdicionalMFD") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C04P" iRetorno = DLLCall(abrelib,; 32,; "Bematech_FI_VerificaImpressoraLigada") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "G00|" //Lê Estado da Impressora __Retorno := VerificaEstadoBEMA() elseif left(__Comando,4) == "G06|" sNumeroSerie := space(20) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_NumeroSerieMFD",; sNumeroSerie) //Variavel para receber o numero de serie do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+sNumeroSerie+" - Verifica N£mero de Serie" endif elseif left(__Comando,4) == "C03I" .or. left(__Comando,4) == "C03J" .or. left(__Comando,4) == "C03K" sMarca := space(15) sModelo := space(20) sTipo := space(7) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_MarcaModeloTipoImpressoraMFD", ; sMarca,; //Marca do ecf sModelo,; //Modelo do ecf sTipo) //Tipo do ecf if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else If vComando = 'C03I' __Retorno := "OK - "+sTipo+" - Obtem Tipo do ECF" Elseif vComando = 'C03J' __Retorno := "OK - "+sMarca+" - Obtem a Marca do ECF" Elseif vComando = 'C03K' __Retorno := "OK - "+sModelo+" - Obtem Modelo do ECF" Endif endif elseif left(__Comando,4) == "C03S" //Numero Usuario vInfo := Space(04) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_NumeroSubstituicoesProprietario",vInfo) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+AllTrim(vInfo)+" - Número Usuário" Endif elseif left(__Comando,4) == "D07|" _valor := substr(__comando,5,13) _Forma := substr(__comando,19,8) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_Suprimento",; _valor,; //Valor para suprimento _Forma) //espécie de suprimento - Dinheiro if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "D06|" _valor := substr(__comando,5,13) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_Sangria",; _valor) //Valor para sangria if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "B04|" _Item := substr(__comando,5,3) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_CancelaItemGenerico",; _Item) //Item a ser cancelado if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "G29|" _Data := space(6) _Hora := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DataHoraImpressora",; _Data,; //Data atual do ECF _Hora) //Hora atual do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+substr(_data,1,4)+"20"+substr(_data,5,2)+_Hora endif elseif left(__Comando,4) == "D00|" _Data := space(6) _Hora := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DataHoraImpressora",; _Data,; //Data atual do ECF _Hora) //Hora atual do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+substr(_data,1,4)+"20"+substr(_data,5,2)+_Hora endif elseif left(__Comando,4) == "S6M|" _NomeArq := vpUserDir + '\sintegra\retorno.txt' ferase(_NomeArq) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_RelatorioTipo60Mestre") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + _NomeArq+' - Relatorio Tipo 60 Mestre' endif elseif left(__Comando,4) == "S6A|" _NomeArq := vpUserDir + '\sintegra\retorno.txt' ferase(_NomeArq) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_RelatorioTipo60Analitico") if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + _NomeArq+' - Relatorio Tipo 60 Analitico' endif elseif left(__Comando,4) == "C04E" .or. left(__Comando,4) == "C04F" cCOOInicial := space(6) cCOOFinal := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_InicioFimCOOsMFD",; cCOOInicial,; //COO Inicial cCOOFinal) //COO Final if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else if left(__Comando,4) == "C04E" __Retorno := "OK - " + cCOOInicial+cCOOFinal + " - COO inicial e COO Final" ElseIf left(__Comando,4) == "C04F" __Retorno := "OK - " + cCOOFinal + " - COO Final" Endif endif elseif left(__Comando,4) == "C04H" _TotParc := space(445) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_VerificaTotalizadoresParciais",; _TotParc) //Aliquotas cadastradas no ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + _TotParc + " - Totalizadores" endif elseif left(__Comando,4) == "C03N" _NumeroCaixa := space(4) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_NumeroCaixa",; _NumeroCaixa) //Numero do Caixa if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + right(_NumeroCaixa,2) + " - Numero do caixa" endif elseif left(__Comando,4) == "C03O" sCNPJ := space(20) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_CNPJMFD",; sCNPJ) //CNPJ do usuario if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + sCNPJ + " - CNPJUsuar" endif elseif left(__Comando,4) == "C03P" sInscricaoEstadual := space(20) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_InscricaoEstadualMFD",; sInscricaoEstadual) //Inscricao Estadual do usuario if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + sInscricaoEstadual + " - INSCEST" endif Elseif left(__Comando,4) == "C03L" //Versao SWBasico sMarca := space(15) sModelo := space(20) sTipo := space(7) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_MarcaModeloTipoImpressoraMFD", ; sMarca,; //Marca do ecf sModelo,; //Modelo do ecf sTipo) //Tipo do ecf if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Elseif Upper(left(sModelo,6)) = 'MP20FI' .or. Upper(Left(sModelo,6))='MP40FI' vVersao := Space(04) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_VersaoFirmware", vVersao) else vVersao := Space(06) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_VersaoFirmwareMFD", vVersao) Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := "OK - "+vVersao+" - Obtem Versao SwBasico" Endif elseif left(__Comando,4) == "C03H" .or. left(__Comando,4) == "C03M" .or. left(__Comando,4) == "C03R" if ( Left(__Comando,4) = "C03H" .and. MfAdicional =Space(02) ) .or. ; ( Left(__Comando,4) = "C03M" .and. dataSwBasico=Space(20) ) .or. ; ( Left(__Comando,4) = "C03R" .and. DataUsuario =Space(20) ) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_DataHoraGravacaoUsuarioSWBasicoMFAdicional",; dataUsuario,; //Data e Hora Usúario dataSWBasico,; //Data e Hora SWBasico MFAdicional) //Sigla do MF adicional Else iRetorno := 1 Endif if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else If left(__Comando,4) == "C03H" __Retorno := "OK - " + MfAdicional + " - DataHoraSB" Elseif left(__Comando,4) == "C03M" __Retorno := "OK - " + dataSWBasico + " - DataHoraSB" Else __Retorno := "OK - " + dataUsuario + " - DtHrCadast" Endif endif Elseif left(__Comando,4) == "C03Q" //Cliche Proprietario vCliche := Space(187) iRetorno := iRetorno := DLLCall(abrelib, 32, "Bematech_FI_ClicheProprietario",vCliche) if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + vCliche + " - Clichê do Proprietário" endif elseif left(__Comando,4) == "C03T" _GrandeTotal := Space(18) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_GrandeTotal",; _GrandeTotal) //Grande Total acumulado no ecf if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - " + _GrandeTotal + " - Grande Total acumulado no ecf" endif elseif left(__Comando,4) == "C03Y" _ContRed := space(4) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_NumeroReducoes",; _ContRed) //Contador de reduções if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContRed +" - Contador de ReduçãoZ" endif elseif left(__Comando,4) == "C03Z" _ContOper := space(4) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_NumeroIntervencoes",; _ContOper) //Contador de reinicio de operações if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContOper +" - Contador de Reinicio de operações" endif elseif left(__Comando,4) == "C03W" _ContCDC := space(4) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_ContadorComprovantesCreditoMFD",; _ContCDC) //Contador de Comprovante de Crédito ou Débito if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContCDC +" - Contador de Comprovante de Crédito ou Débito" endif elseif left(__Comando,4) == "C03X" _ContGRG := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_ContadorRelatoriosGerenciaisMFD",; _ContGRG) //Contador Geral de Relatório Gerencial if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContGRG +" - Contador Geral de Relatório Gerencial" endif elseif left(__Comando,4) == "C03V" _ContGNF := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_ContadorFitaDetalheMFD",; _ContGNF) //Contador Geral de Operação Não Fiscal if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContGNF +" - Contador Geral de Operação Não Fiscal" endif elseif left(__Comando,4) == "C03U" _ContCCF := space(6) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_ContadorCupomFiscalMFD", _ContCCF) //Contador Cupom Fiscal if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ _ContCCF +" - Contador Cupom Fiscal" endif elseif left(__Comando,4) == "C03A" .or. left(__Comando,4) == "C03E" //Alt.GSS em 20032012 //Emitir Leitura Memoria Fiscal (Simplificada ou Completa) por Data cDataInicial := substr(__Comando,6,6) cDataFinal := substr(__Comando,13,6) cTipo := substr(__Comando,20,1) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_LeituraMemoriaFiscalDataMFD",; cDataInicial,; //Data inicial cDataFinal,; //Data final cTipo) //Tipo 'c' Completo e 's' Simplificada if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C03B" .or. left(__Comando,4) == "C03C" //Emite a leitura da memória fiscal da impressora por intervalo de reduções cReducaoInicial := substr(__Comando,6,4) cReducaoFinal := substr(__Comando,11,4) cTipo := substr(__Comando,16,1) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_LeituraMemoriaFiscalReducaoMFD",; cReducaoInicial,; //Numero da redução inicial cReducaoFinal,; //Numero da redução final cTipo) //Tipo 'c' Completo e 's' Simplificada if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C03D" //Recebe os dados da leitura da memória fiscal por intervalo de reduções pela serial e grava em arquivo texto. ferase(vpUserDir+"\SINTEGRA\RETORNO.TXT") cReducaoInicial := substr(__Comando,6,4) cReducaoFinal := substr(__Comando,11,4) cTipo := substr(__Comando,16,1) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_LeituraMemoriaFiscalSerialReducaoMFD",; cReducaoInicial, cReducaoFinal, cTipo) //Tipo 'c' Completo e 's' Simplificada if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C03F" //Gravar Leitura Memoria Fiscal (Simplificada ou Completa) por Data ferase(vpUserDir+"\SINTEGRA\RETORNO.TXT") cDataInicial := substr(__Comando,6,6) cDataFinal := substr(__Comando,13,6) cTipo := substr(__Comando,20,1) iRetorno := DLLCall(abrelib, 32, "Bematech_FI_LeituraMemoriaFiscalSerialDataMFD",; cDataInicial, cDataFinal, cTipo) //Tipo 'c' Completo e 's' Simplificada if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif elseif left(__Comando,4) == "C03G" //Gerar Espelho MFD por intervalo de Data xData1 := substr( __Comando, 08, 06 ) xData2 := substr( __Comando, 15, 06 ) xTipoDown := substr( __Comando, 06, 01 ) _NomeOrigem := vpUserDir + '\sintegra\RETORNO.TXT' MENSAG("Fazendo o Download da MFD...",,,.t.) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DownloadMFD",; _NomeOrigem,; //Nome do arquivo a ser gerado xTipoDown,; //Tipo do download '0' Geral, '1' Data, '2' COO xData1,; //Data Inicial ou COO xData2,; //Data Final ou COO "1") // número de ordem do proprietário do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) endif MENSAG("",,,.t.) elseif left(__Comando,4) == "C04K" //Formata dados MFD por intervalo de Data //_comando := "C04K|DOWNLOAD.MFD|RETDATA.TXT|0|1|090911|090911|" + str(NrUsuario) //_comando := "C04K|DOWNLOAD.MFD|RETCOO.TXT|0|2|123456|123456|" + str(NrUsuario) xNomeArqDown := vpUserDir + '\sintegra\DOWNLOAD.MFD' if substr( __Comando, 19, 10 ) == "RETCOO.TXT" xNomeArqRet := vpUserDir + '\sintegra\RETCOO.TXT' xData1 := substr( __Comando, 34, 06 ) xData2 := substr( __Comando, 41, 06 ) xTipoDown := "2" else xNomeArqRet := vpUserDir + '\sintegra\RETDATA.TXT' xData1 := substr( __Comando, 35, 06 ) xData2 := substr( __Comando, 42, 06 ) xTipoDown := "1" endif ferase(xNomeArqRet) MENSAG("Formatando Dados da MFD...",,,.t.) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_FormatoDadosMFD",; xNomeArqDown,; //Arquivo gerado pelo Download xNomeArqRet,; //Nome do arquivo a ser gerado como TXT "0",; //Tipo do formato a ser gerado '0' .TXT, '1' .RTF, '2' .MDB xTipoDown,; //Tipo do download '0' Geral, '1' Data, '2' COO xData1,; //Data Inicial ou COO xData2,; //Data Final ou COO "1") // número de ordem do proprietário do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else ferase(xNomeArqDown) endif MENSAG("",,,.t.) elseif left(__Comando,4) == "C04L" //Gerar Arquivo MFD por intervalo de Data xNomeArq := vpUserDir + "\sintegra\"+substr( __Comando, 06, 12 ) xData := substr( __Comando, 19, 10 ) ferase(xNomeArq) MENSAG("Fazendo o Download da MFD...",,,.t.) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_GeraRegistrosCAT52MFDEx",; '',; //Nome do arquivo a ser gerado xData, xNomeArq) //Data if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else __Retorno := "OK - "+ xNomeArq + " - Arquivo MFD" endif MENSAG("",,,.t.) elseif left(__Comando,4) == "C04M" //Gerar Arquivo MFD por intervalo de COO cBuscaIni := 9 FOR _x:=1 to 7 if _x == 1 _NomeOrigem := vpUserDir + "\sintegra\"+Arg[2] elseif _x == 5 cData1 := Left(Right(__Comando, 14),6) elseif _x == 6 cData2 := Left(Right(__Comando, 7),6) endif cBuscaIni := cBuscaIni+1 NEXT cNomeArq := vpUserDir + '\sintegra\RETCOO.TXT' ferase(_NomeOrigem) MENSAG("Fazendo o Download da MFD...",,,.t.) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DownloadMFD",; _NomeOrigem,; //Nome do arquivo a ser gerado "2",; //Tipo do download '0' Geral, '1' Data, '2' COO cData1,; //Data Inicial cData2,; //Data Final "1") // número de ordem do proprietário do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) else MENSAG("Formatando Dados da MFD...",,,.t.) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_FormatoDadosMFD",; _NomeOrigem,; //Arquivo gerado pelo Download cNomeArq,; //Nome do arquivo a ser gerado como TXT "0",; //Tipo do formato a ser gerado '0' .TXT, '1' .RTF, '2' .MDB "2",; //Tipo do download '0' Geral, '1' Data, '2' COO cData1,; //Data Inicial cData2,; //Data Final "1") // número de ordem do proprietário do ECF if iRetorno != 1 __Retorno := "ERRO DE COMUNICACAO" TrataRetorno(iRetorno,left(__Comando,4)) Else __Retorno := "OK - "+_NomeOrigem+" - Arq. MFD" endif endif MENSAG("",,,.t.) Elseif left(__Comando,3) == "R00" .or. left(__Comando,3) == "R01" Elseif left(__Comando,3) == "R05" DLLCall( abrelib, 32, "BlockInput", True ) Elseif left(__Comando,3) == "R06" DLLCall( abrelib, 32, "BlockInput", False ) endif RETURN(__Retorno) *************************************************************** Function TrataRetorno(iRetorno,_Comando) *************************************************************** if _Comando = Nil _Comando = '' Endif if iRetorno == 0 ptalertx("Erro de Comunicação - "+_Comando,16) elseif iRetorno == -1 ptalertx("Erro de execução da função - "+_Comando,16) elseif iRetorno == -2 ptalertx("Parâmetro Inválido - "+_Comando,16) elseif iRetorno == -4 ptalertx("Arquivo ini não encontrado ou parâmetro inválido para o nome da porta - "+_Comando,16) elseif iRetorno == -5 ptalertx("Erro ao abrir a porta de comunicação - "+_Comando,16) elseif iRetorno == -6 ptalertx("Impressora desligada ou cabo de comunicação desconectado - "+_Comando,16) else if iRetorno = nil ptalertx("Erro de Desconhecido (BM) - Nil - "+_Comando,16) Else ptalertx("Erro de Desconhecido (BM) - "+str(iRetorno)+" - "+_Comando,16) Endif endif return **************************************************************** Function VerificaEstadoBema(RedZ) **************************************************************** * Teste o exemplo acima com ST1 = 66, e repare que você terá dois erros, pouco papel (64) e cupom aberto (2). * local iAck, iSt1, iSt2, sMsg, iRetorno if RedZ == nil RedZ := .f. endif iAck := space(3) iSt1 := space(3) iSt2 := space(3) sMsg := "OK" iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_VerificaEstadoImpressoraStr",; iAck,; iSt1,; iSt2) if iRetorno != 1 if iRetorno == -6 sMsg := "ECF DESLIGADA" else sMsg := "ERRO DE COMUNICACAO" endif TrataRetorno(iRetorno,"G00|") return(sMsg) endif if RedZ if ReducaoZPendente() return("REDUCAO Z PENDENTE") endif endif iSt1 := val(iSt1) iSt2 := val(iSt2) &&Codificando o ST1 if iSt1 > 0 If iSt1 >= 128 // bit 7 iSt1 = iSt1 - 128 sMsg = "Fim de Papel" EndIf If iSt1 >= 64 // bit 6 iSt1 = iSt1 - 64 sMsg = "Pouco Papel" EndIf If iSt1 >= 32 // bit 5 iSt1 = iSt1 - 32 sMsg = "Erro no Relógio" EndIf If iSt1 >= 16 // bit 4 iSt1 = iSt1 - 16 sMsg = "Impressora em Erro" EndIf If iSt1 >= 8 // bit 3 iSt1 = iSt1 - 8 sMsg = "Comando não iniciado com ESC" EndIf If iSt1 >= 4 // bit 2 iSt1 = iSt1 - 4 sMsg = "Comando Inexistente" EndIf If iSt1 >= 2 // bit 1 iSt1 = iSt1 - 2 sMsg = "Cupom Aberto" EndIf If iSt1 >= 1 // bit 0 iSt1 = iSt1 - 1 sMsg = "Número de Parâmetro(s) Inválido(s)" EndIf endif &&Codificando o ST2 if iSt2 > 0 If iSt2 >= 128 // bit 7 iSt2 = iSt2 - 128 sMsg = "Tipo de Parâmetro de Comando Inválido" EndIf If iSt2 >= 64 // bit 6 iSt2 = iSt2 - 64 sMsg = "Memória Fiscal Lotada" EndIf If iSt2 >= 32 // bit 5 iSt2 = iSt2 - 32 sMsg = "Erro na Memória RAM" EndIf If iSt2 >= 16 // bit 4 iSt2 = iSt2 - 16 sMsg = "Alíquota Não Programada" EndIf If iSt2 >= 8 // bit 3 iSt2 = iSt2 - 8 sMsg = "Capacidade de Alíquotas Lotada" EndIf If iSt2 >= 4 // bit 2 iSt2 = iSt2 - 4 sMsg = "Cancelamento Não Permitido" EndIf If iSt2 >= 2 // bit 1 iSt2 = iSt2 - 2 sMsg = "CNPJ/IE do Proprietário Não Programado" EndIf If iSt2 >= 1 // bit 0 iSt2 = iSt2 - 1 sMsg = "Comando Não Executado" EndIf endif return(sMsg) ********************************************************** Function ReducaoZPendente() ********************************************************** local _retorno := .f., DT_RZ, DT_MOV DT_RZ := Space(6) DT_MOV := space(6) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DataMovimento",; DT_MOV) iRetorno := DLLCall(abrelib,; 32 ,; "Bematech_FI_DataMovimentoUltimaReducaoMFD",; DT_RZ) if DT_RZ != "000000" .and. DT_MOV != "000000" DT_RZ := ctod(substr(DT_RZ,1,2) +"/"+substr(DT_RZ,3,2) +"/"+substr(DT_RZ,5,2)) DT_MOV := ctod(substr(DT_MOV,1,2)+"/"+substr(DT_MOV,3,2)+"/"+substr(DT_MOV,5,2)) if DT_RZ < date() .and. DT_MOV < date() _retorno := .t. endif endif return(_retorno)