/* * Programador: Wanderlei Cardoso * Modulo de impressão da Daruma */ #define DC_CALL_STD 0x0020 #define LF chr(13)+chr(10) memvar NrDocto, cNome, cEnder, vpUserDir, VRetorno, Abrelib, ECF, MAQ ************************************************************************************************ FUNCTION Daruma(vComando) ************************************************************************************************ local iRetorno := 0, vLogCom := "", Str_Info := "", xRetAliq, xRetorno Local oErr, Servico := "", vRel := "" vRetorno := "" vArgumento := "" Arg := {} FLogEcf := "EcfDaruma"+dtos(date())+".log" 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 vLogCom += 'Comando...: '+vComando+Space(15)+'Recebido em.: '+Time()+LF vLogCom += 'Argumento.: ' if len(Arg)>0 for y := 1 to Len(Arg) vLogCom += Arg[y]+'|' Next vLogCom += LF Else vLogCom += 'Sem Argumento'+LF Endif fwrite( FLogEcf, vLogCom ) VLogCom := '' Servico := '('+vComando+')' if vComando == 'B00' .or. vComando = 'B03' //Abrir Cupom if len(Arg)=0 iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFAbrirPadrao_ECF_Daruma") else iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFAbrir_ECF_Daruma",iif(len(arg)>=1,arg[1],''),iif(len(arg)>=2,arg[2],''),iif(len(arg)>=3,arg[3],'') ) Endif Elseif vComando == 'B01' .or. vComando == 'B01A' //:= Definir_Cupom_VenderItem if len(Arg)<>7 iRetorno := -2 return endi Cod := Arg[1] Descr := Arg[2] Aliq := Arg[3] if Aliq = 'IS' Aliq := 'II' elseif Aliq = 'NT' Aliq := 'NN' Endi vQtde := Left(Arg[4],len(Arg[4])-4)+','+right(Arg[4],3) Unidade := Arg[5] ValorUnit := Left(Arg[6],len(Arg[6])-3)+','+right(Arg[6],2) ValorDesc := Left(Arg[7],len(Arg[7])-3)+','+right(Arg[7],2) TipoQtde := 'F' Decimais := '2' TipoDesc := 'D$' iRetorno := DLLCall(abrelib, 32, "iCFVender_ECF_Daruma", Aliq, vQtde, ValorUnit, TipoDesc, ValorDesc, Cod, Arg[5], Descr) Elseif vComando == 'B04' //'Cupom_Cancelar Item'; OK iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFCancelarItem_ECF_Daruma", Arg[1]) Elseif vComando=='B05A' .or. vComando=='B05B' .or. vComando=='B05C' .or. vComando=='B05D' //Definir_Cupom_Iniciar Fechamento TipoAD := iif(Val(Arg[1])>0,'A$','D$') iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFTotalizarCupom_ECF_Daruma", TipoAd, Arg[1]) Elseif vComando=='B06' .or. vComando=='B12' .or. vComando=='B13' .or. vComando=='B14' iRetorno := DLLCall(abrelib, 32 , "confCadastrar_ECF_Daruma", iif(vComando='B06','FPGTO', ; if(vComando='B12','TNF','ALIQUOTA') ) , if(vComando='B14','S','')+Arg[1], '|' ) Elseif vComando=='B07' //Cupom_EfetuarFormaPagto iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFEfetuarPagamento_ECF_Daruma", Arg[1], Arg[2]) Elseif vComando=='B08' //Cupom_TerminarFechamento Mensag := '' for x := 1 to Len(Arg) Mensag += Arg[x]+Chr(13)+Chr(10) Next iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFEncerrarConfigMsg_ECF_Daruma", Mensag) Elseif vComando=='B09' //Programacao_HorarioVerao Str_Info := space(1) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '108', Str_Info) if iRetorno = 1 .and. Str_Info = '0' //Horario de Verao Desabilitado iRetorno := DLLCall(abrelib, 32, "confHabilitarHorarioVerao_ECF_Daruma") Elseif iRetorno = 1 .and. Str_Info = '1' //Horario de Verao Habilitado iRetorno := DLLCall(abrelib, 32, "confDesabilitarHorarioVerao_ECF_Daruma") Endif Elseif vComando=='B11' //Cupom_Cancelar iRetorno := DLLCall(abrelib, DC_CALL_STD, "iCFCancelar_ECF_Daruma" ) Elseif vComando=='C00' //RelatorioFiscal_EmitirReducaoZ xRetorno := space(66) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '21', xRetorno) vCooInicialTmp := SubStr(xRetorno,7,6) dia := Iif(Len(Arg)>=1,arg[1],'') Hs := Iif(Len(Arg)>=2,arg[2],'') iRetorno := DLLCall(abrelib, DC_CALL_STD, "iReducaoZ_ECF_Daruma", Dia, Hs ) elseif VComando == 'C01' iRetorno := DLLCall(abrelib, DC_CALL_STD, "iLeituraX_ECF_Daruma") Elseif vComando=='C02A' .or. vComando=='C02B' .or. vComando=='C02C' .or. vComando=='C02D' .or. vComando=='C02E' //'Programacao_LinhasEntreCupons'; vEntreLinha := 0 //Ind.: 121 tam Ret.: 2 vLinDoc := 0 //Ind.: 122 Tam Ret.: 2 vLinGui := 0 //Ind.: 123 Tam Ret.: 2 vGuiStatus := 0 //Ind.: 113 Ret.: 0-Des 1-Habilitada vImpCliche := 0 //Ind.: 119 Ret.: 0-Sim 1-Nao Str_Indice := '121+122+123+113+1119' Str_Info := space(12) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",Str_Indice, Str_Info) vEntreLinha := Left(Str_Info,2) vLinDoc := SubStr(Str_Info,4,2) vLinGui := SubStr(Str_Info,7,2) vGuiStatus := SubStr(Str_Info,10,1) vImpCliche := Right(Str_Info,1) iRetorno := DLLCall(abrelib, 32, "confProgramarAvancoPapel_ECF_Daruma",vEntreLinha, Arg[1], vLinGui, vGuiStatus, vImpCliche) Elseif vComando=='C03A' .or. vComando=='C03E' .or. ; //RelatorioFiscal_EmitirLeituraMemoriaFiscalPorData vComando=='C03B' .or. vComando=='C03C' //RelatorioFiscal_EmitirLeituraMemoriaFiscalPorReducao if upper(Arg[3])='C' iRetorno:= DLLCall(abrelib, 32, "regAlterarValor_Daruma", "ECF\LMFCompleta", "1") Else iRetorno:= DLLCall(abrelib, 32, "regAlterarValor_Daruma", "ECF\LMFCompleta", "0") Endi if iRetorno = 1 iRetorno := DLLCall(abrelib, 32, "iMFLer_ECF_Daruma", Arg[1], Arg[2]) Endif Elseif vComando=='C03D' .or. vComando=='C03F' //RelatorioFiscal_EmitirLeituraMemoriaFiscalSerialPorReducao if upper(Arg[3])='C' iRetorno:= DLLCall(abrelib, 32, "regAlterarValor_Daruma", "ECF\LMFCompleta", "1") Else iRetorno:= DLLCall(abrelib, 32, "regAlterarValor_Daruma", "ECF\LMFCompleta", "0") Endi if iRetorno = 1 iRetorno := DLLCall(abrelib, 32, "iMFLerSerial_ECF_Daruma", Arg[1], Arg[2]) Endif Elseif vComando=='C03G' //ArquivoFiscal_RealizarDownloadMFD _NomeOrigem := vpUserDir + '\sintegra\RETORNO.TXT' MENSAG("Fazendo o Download da MFD...",,,.t.) iRetorno := DLLCall(abrelib, 32, "rGerarEspelhoMFD_ECF_Daruma", Arg[1], Arg[2], Arg[3]) if file(vpUserDir+"\SINTEGRA\ESPELHO_MFD.TXT") do while FRename( vpUserDir+"\SINTEGRA\ESPELHO_MFD.TXT", vpUserDir+"\SINTEGRA\RETORNO.TXT" ) <> 0 mensag("Aguarde... Lendo os dados da ECF para gerar o arquivo "+substr(desenho,_a,1),"R*/W+",,.t.) _a++ if _a=5 ; _a:= 1 ; endif DELAY(50) enddo endif Elseif vComando=='D00' //RelatorioGerencial_Abrir iRetorno := DLLCall(abrelib, 32, "iRGAbrirPadrao_ECF_Daruma") Elseif vComando=='D01' //RelatorioGerencial_Fechar if UltvComando = 'D04' iRetorno := DLLCall(abrelib, 32, "iCCDFechar_ECF_Daruma") Else iRetorno := DLLCall(abrelib, 32, "iRGFechar_ECF_Daruma") Endif iRetorno = 1 Elseif vComando=='D02' .or. vComando = 'D04' //RelatorioGerencial_Emitir LinImp := 0 Texto := '' TImp := round(len(Arg[1])/40,0) for x = 1 to TImp if len(Arg[1])>40 Texto += space(4)+Left(Arg[1],40)+LF Arg[1] := Right(Arg[1],len(Arg[1])-40) Else Texto += Arg[1]+LF Arg[1] := '' Endif LinImp += 1 if LinImp >= 3 .or. Arg[1]='' .or. len(Arg[1])=0 if vComando = 'D02' .or. UltvComando = 'D00' iRetorno := DLLCall(abrelib, 32, "iRGImprimirTexto_ECF_Daruma", Texto) Elseif vComando = 'D04' iRetorno := DLLCall(abrelib, 32, "iCCDImprimirTexto_ECF_Daruma", Texto) Endif Texto := '' LinImp := 0 Endif Next if vComando = 'D04' .and. UltvComando = 'D00' vComando := 'D02' Endif Elseif vComando=='D03' //Comprovante_Abrir CCD-TEF ABRE("FPAGTO") if FPAGTO->( bof() ) .and. FPAGTO->( eof() ) if Arg[2]=Nil .or. Arg[2] == "01" .or. Arg[2] == "02" Arg[2] := "A Vista" elseif Arg[2] == "03" Arg[2] := "Convenio" elseif Arg[2] == "04" Arg[2] := "Credito" elseif Arg[2] == "05" Arg[2] := "Cartao" elseif Arg[2] == "06" Arg[2] := "Cheque" elseif Arg[2] == "07" Arg[2] := "Trn-centre" elseif Arg[2] == "08" Arg[2] := "Subsidio" elseif Arg[2] == "09" Arg[2] := "FarmaciaPopular" elseif Arg[2] == "10" Arg[2] := "E-Pharma" elseif Arg[2] == "11" Arg[2] := "Vidalink" endif else if Arg[2] == "01" Arg[2] := "02" endif if FPAGTO->( dbseek(ECF+Arg[1]) ) .and. !empty(FPAGTO->NMFORMA) Arg[2] := FPAGTO->NMFORMA else if Arg[2]=Nil .or. Arg[2] == "01" .or. Arg[2] == "02" Arg[2] := "A Vista" elseif Arg[2] == "03" Arg[2] := "Convenio" elseif Arg[2] == "04" Arg[2] := "Credito" elseif Arg[2] == "05" Arg[2] := "Cartao" elseif Arg[2] == "06" Arg[2] := "Cheque" elseif Arg[2] == "07" Arg[2] := "Trn-centre" elseif Arg[2] == "08" Arg[2] := "Subsidio" elseif Arg[2] == "09" Arg[2] := "FarmaciaPopular" elseif Arg[2] == "10" Arg[2] := "E-Pharma" elseif Arg[2] == "11" Arg[2] := "Vidalink" endif endif endif FPAGTO->( dbclosearea() ) if left(Right(Arg[3],3),1) = '.' Arg[3] = Left(Arg[3],len(Arg[3])-3)+','+Right(Arg[3],2) Endif iRetorno := DLLCall(abrelib, 32, "iCCDAbrir_ECF_Daruma",; Arg[2], ; //Forma de Pagamento no maximo 16 caracter '1', ; //Parcelas Arg[1], ; //Numero do cupom fiscal tamanho de 6 Arg[3], ; //Valor com 14,2 iif(len(Arg)>=4,Arg[4],''), ; //CPF ou CNPJ do Cliente com até 29 iif(len(Arg)>=5,Arg[5],''), ; //Nome do Cliente com até 30 iif(len(Arg)>=6,Arg[6],'') ) //Endereço com até 80 caracter Elseif vComando=='D04' //Comprovante_Emitir LinImp := 0 Texto := '' TImp := round(len(Arg[1])/40,0) for x = 1 to TImp if len(Arg[1])>40 Texto += space(4)+Left(Arg[1],40)+LF Arg[1] := Right(Arg[1],len(Arg[1])-40) Else Texto += Arg[1]+LF Arg[1] := '' Endif LinImp += 1 if LinImp >= 3 .or. len(Arg[1])=0 iRetorno := DLLCall(abrelib, 32, "iCCDImprimirTexto_ECF_Daruma", Texto) Texto := '' LinImp := 0 Endif Next Elseif vComando=='D05' //Comprovante_Fechar iRetorno := DLLCall(abrelib, 32, "iCCDFechar_ECF_Daruma" ) Elseif vComando=='D06' //Caixa_EfetuarSangria iRetorno := DLLCall(abrelib, 32, "iSangria_ECF_Daruma", Arg[1], iif(len(Arg)>=2,Arg[2],"") ); Elseif vComando=='D07' //Caixa - Suprimento iRetorno := DLLCall(abrelib, 32, "iSuprimento_ECF_Daruma", Arg[1], iif(len(Arg)>=2,Arg[2],"") ); Elseif vComando=='D08' //CupomNFV_Cancelar; iRetorno := DLLCall(abrelib, 32, "iCNFCancelar_ECF_Daruma") if iRetorno <> 1 iRetorno := DLLCall(abrelib, 32, "iCCDEstornarPadrao_ECF_Daruma") endif ElseIf vComando = 'F00' xStatus := 0 iRetorno = DLLCall(abrelib, 32, "rStatusGaveta_DUAL_DarumaFramework", xStatus) If iRetorno = 1 .and. xStatus = 0 iRetorno := DLLCall(abrelib, 32, "iAcionarGaveta_DUAL_DarumaFramework") ElseIf iRetorno = 1 .and. xStatus = 0 iRetorno := DLLCall(abrelib, 32, "iAcionarGaveta_DUAL_DarumaFramework") Endif Elseif vComando == 'G00' //Estado Impressora xEstado := VerificaEstadoDaruma(.f.) vLogCom += 'Retorno...: '+xEstado+Space(15)+'Finalizado em.: '+Time()+LF+LF fwrite( FLogEcf, vLogCom ) vLogCom := '' Return(xEstado) iRetorno = 1 Elseif vComando=='G06' //ObterNumeroSerie Str_Info := space(21)//Verificar se correto pegar apenas 20 iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",'78', Str_Info) vRetorno := Left(Str_info,20) elseif vComando=='G12' //ObterNumeroUltimoCupom Str_Info := Space(66) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '21', Str_Info) vRetorno := left(Str_Info,6) Elseif vComando=='G29' //ObterDataAtual Str_Info := space(14) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",'66', Str_Info) vRetorno := Str_info Elseif vComando = 'S6A' //RelatorioTipo60Analitico _NomeArq := vpUserDir + '\sintegra\retor'+MAQ+'.txt' ferase(_NomeArq) Str_Info := space(1164) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '140', Str_Info) if iRetorno == 1 vRel := 'Tipo do relatório.........: 60'+LF vRel += 'Subtipo...................: A'+LF vRel += 'Data de emissão...........: '+left(Str_Info,2)+'/'+SubStr(Str_Info,3,2)+'/'+SubStr(Str_Info,5,4)+LF vRel += 'Número de série...........: ' xRetorno := space(21) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",'78', xRetorno) vRel += Left(Alltrim(xRetorno),20)+LF vRel += 'Cancelamentos.............: '+Transform( Val(SubStr(Str_Info, 73, 14))/100,"@E 9,999,999.99")+LF vRel += 'Descontos.................: '+Transform((Val(SubStr(Str_Info, 45, 14))+Val(SubStr(Str_Info, 59, 14))+Val(SubStr(Str_Info, 801, 14))) /100,"@E 9,999,999.99")+LF vRel += 'F.........................: '+Transform((Val(SubStr(Str_Info, 353, 14))+Val(SubStr(Str_Info, 367, 14)))/100,"@E 9,999,999.99")+LF vRel += 'I.........................: '+Transform((Val(SubStr(Str_Info, 381, 14))+Val(SubStr(Str_Info, 395, 14)))/100,"@E 9,999,999.99")+LF vRel += 'N.........................: '+Transform((Val(SubStr(Str_Info, 409, 14))+Val(SubStr(Str_Info, 423, 14)))/100,"@E 9,999,999.99")+LF //Pegar as aliquotas cadastradas no E.C.F. xRetAliq := space(150) iRetorno := DLLCall(abrelib, 32, "rLerAliquotas_ECF_Daruma", xRetAliq) Do while Len(xRetAliq)>0 .and. at(';',xRetAliq)>0 if (left(xRetAliq,1) = 'T') .and. IsDigit(SubStr(xRetAliq,2,1)) .and. Val(SubStr(xRetAliq,2,4))>0 vRetorno := VRetorno+left(xRetAliq,(at(";",xRetAliq)-1)) Endif xRetAliq := right(xRetAliq,len(xRetAliq)-at(";",xRetAliq) ) Enddo For xAliq := 1 To Len(vRetorno)/5 vRel += SubStr(vRetorno, (xAliq*5)-3 ,4)+'......................: '+; Transform(Val(SubStr(Str_Info, 129+(xAliq*14)-14 , 14))/100,"@E 9,999,999.99")+LF Next vRel += 'ISS.......................: '+Transform((Val(SubStr(Str_Info, 465, 14))+Val(SubStr(Str_Info, 479, 14)) ) /100,"@E 9,999,999.99")+LF _Arq := fcreate( _NomeArq ) fwrite( _Arq, VRel ) fclose( _Arq ) vRetorno := _NomeArq endif Elseif vComando=='S6M' //RelatorioTipo60Mestre_Gerar _NomeArq := vpUserDir + '\sintegra\retor'+MAQ+'.txt' ferase(_NomeArq) Str_Info := space(1164) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '140', Str_Info) if iRetorno = 1 vRel := 'Tipo do relatório.........: 60'+LF vRel += 'Subtipo...................: M'+LF vRel += 'Data de emissão...........: '+left(Str_Info,2)+'/'+SubStr(Str_Info,3,2)+'/'+SubStr(Str_Info,5,4)+LF vRel += 'Número de série...........: ' xRetorno := space(21) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",'78', xRetorno) vRel += xRetorno+LF vRel += 'Número do equipamento.....: ' xRetorno := space(3) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '107', xRetorno) vRel += StrZero(Val(xRetorno),4)+LF vRel += 'Modelo do documento fiscal: 2D' + LF vRel += 'COO inicial...............: ' + SubStr(Str_Info,935,6)+LF // POG vRel += 'COO final.................: ' + SubStr(Str_Info,935,6)+LF vRel += 'Contador de reduções......: ' + SubStr(Str_Info,927,4)+LF vRel += 'Reinicio de Operacao......: ' + SubStr(Str_Info,923,4)+LF vRel += 'Venda Bruta...............: ' vRel += transform( (Val(SubStr(Str_Info,9,18))/100)-(Val(SubStr(Str_Info,27,18))/100),"@E 9,999,999.99")+LF vRel += 'Totalizador geral.........: ' + Transform(Val(SubStr(Str_Info,9,18))/100,"@E 9,999,999.99")+LF vRel += LF+LF+LF+LF+Str_Info _Arq := fcreate( _NomeArq ) fwrite( _Arq, VRel ) fclose( _Arq ) if iRetorno = 1 vRetorno := _NomeArq endif Endi Elseif vComando=='R10' //Comprovante_Recebimento //Usar rRetornarInformacao_ECF_Daruma para pegar Indice de Recbo Convenio e Credito Indice = 09 Str_Info := Space(247) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '9', Str_Info ) //Imprimir Comprovante if Arg[1] = '10' iRetorno = Int(At('Recto Convenio',Str_Info)/13) Arg[1] := iif(IRetorno<>0,StrZero(iretorno+1,2), Arg[1]) elseif Arg[1] = '11' iRetorno = Int(At('Recto Credito',Str_Info)/13) Arg[1] := iif(IRetorno<>0,StrZero(iretorno+1,2), Arg[1]) Endif if Arg[2] == "01" .or. Arg[1] == "02" Arg[2] := "Dinheiro" elseif Arg[2] == "03" Arg[2] := "Convenio" elseif Arg[2] == "04" Arg[2] := "Credito" elseif Arg[2] == "05" Arg[2] := "Cartao" elseif Arg[2] == "06" Arg[2] := "Cheque" elseif Arg[2] == "07" Arg[2] := "Trn-centre" elseif Arg[2] == "08" Arg[2] := "Subsidio" elseif Arg[2] == "09" Arg[2] := "FarmaciaPopular" elseif Arg[2] == "10" Arg[2] := "E-Pharma" elseif Arg[2] == "11" Arg[2] := "Vidalink" endif if left(Right(Arg[3],3),1) = '.' Arg[3] = Left(Arg[3],len(Arg[3])-3)+','+Right(Arg[3],2) Endif if left(Right(Arg[4],3),1) = '.' Arg[4] = Str(Val(Left(Arg[4],len(Arg[4])-3)))+','+Right(Arg[4],2) Endif iRetorno := DLLCall(abrelib, 32, "iCNFAbrir_ECF_Daruma", NrDocto, cNome, cEnder) //Abrir comprovante if iRetorno <> 0 iRetorno := DLLCall(abrelib, 32, "iCNFReceber_ECF_Daruma", Arg[1], Arg[3], 'A$', '0,00' ) //Imprimir Comprovante if iRetorno <> 0 iRetorno := DLLCall(abrelib, 32, "iCNFTotalizarComprovantePadrao_ECF_Daruma") iRetorno := DLLCall(abrelib, 32, "iCNFEfetuarPagamento_ECF_Daruma", Arg[2] , Arg[4], "..." ) //Efetua Pagamento if iRetorno <> 0 iRetorno := DLLCall(abrelib, 32,"iCNFEncerrarPadrao_ECF_Daruma") //Fechar Comprovante Endif Endif Endif Elseif vComando=='C03H' //ObterMFAdicional Str_Info := space(21) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma",'78', Str_Info) vRetorno := Right(Str_info,1) Elseif vComando=='C03I' //ObterTipoECF Str_Info := space(7) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '79', Str_Info) vRetorno := iif(iRetorno=1,Str_Info,'') Elseif vComando=='C03J' //ObterMarcaECF Str_Info := space(20) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '80', Str_Info) vRetorno := iif(iRetorno=1,Str_Info,'') Elseif vComando=='C03K' //ObterModeloECF Str_Info := space(20) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '81', Str_Info) vRetorno := iif(iRetorno=1,Str_Info,'') Elseif vComando=='C03L' //ObterVersaoSWBasico Str_Info := space(6) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '83', Str_Info) vRetorno := Str_Info Elseif vComando=='C03M' //ObterDataGravacaoSWBasico Str_Info := space(14) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '85', Str_Info) vRetorno := iif(iRetorno=1,Str_Info,'') Elseif vComando=='C03N' //ObterNumeroCaixa Str_Info := space(3) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '107', Str_Info) vRetorno := iif(iRetorno=1,AllTrim(Str(Val(Str_Info))),'') Elseif vComando=='C03O' //ObterCNPJ Str_Info := space(20) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '90', Str_Info) vRetorno := Str_Info Elseif vComando=='C03P' //ObterIE Str_Info := space(20) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '91', Str_Info) vRetorno := Str_Info Elseif vComando=='C03Q' //Cliche Proprietario Str_Info := space(219) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '132', Str_Info) vRetorno := Str_Info Elseif vComando=='C03R' //ObterDataGravacaoUltUsuario Str_Info := space(14) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '75', Str_Info) vRetorno := Str_Info Elseif vComando=='C03S' //ObterNumeroUsuario Str_Info := space(2) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '151', Str_Info) vRetorno := Str_Info Elseif vComando=='C03T' //ObterGrandeTotal Str_Info := space(18) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '1', Str_Info) vRetorno := Str_Info Elseif vComando=='C03U' //ObterContadorCupomFiscal Str_Info := space(6) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '30', Str_Info) vRetorno := Str_Info Elseif vComando=='C03V' //ObterContadorOperacaoNaoFiscal'; nao implementado no Integrador Str_Info := space(6) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '28', Str_Info) vRetorno := Str_Info Elseif vComando=='C03X' //ObterContadorRelatorioGerencial Str_Info := space(6) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '33', Str_Info) vRetorno := Str_Info Elseif vComando=='C03W' //ObterContadorComprovanteCredito Str_Info := space(4) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '45', Str_Info) vRetorno := Str_Info Elseif vComando=='C03Y' //ObterContadorReducaoZ Str_Info := space(4) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '24', Str_Info) vRetorno := Str_Info Elseif vComando=='C03Z' //ObterCROReducaoZ Str_Info := space(3) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '23', Str_Info) vRetorno := Right(Str_Info,6) Elseif vComando=='C04A' //ObterDataMovimentoReducaoZ Str_Info := space(1164) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '140', Str_Info) vRetorno := Left( Str_Info,8 ) Elseif vComando=='C04B' //ObterDataEmissaoReducaoZ Str_Info := space(14) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '154', Str_Info) vRetorno := Str_Info Elseif vComando=='C04C' //ObterDataUltimoDocumento Str_Info := space(14) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '172', Str_Info) vRetorno := Str_Info Elseif vComando=='C04D' //ObterReducaoZAutomatica ?'; Elseif vComando=='C04E' //ObterCOOInicialFinal Str_Info := space(6) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '27', Str_Info) if iRetorno = 1 VRetorno := Str_Info Str_Info := space(66) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '21', Str_Info) if iRetorno = 1 VRetorno += left(Str_Info,6) Endif Endif Elseif vComando=='C04F' //ObterCOOFinal Str_Info := space(66) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '21', Str_Info) VRetorno := left(Str_Info,6) Elseif vComando=='C04G' //ObterVendaBruta Str_Info := space(18) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '1', Str_Info) ValorTot := Val(Str_Info)/100 Str_Info := space(18) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '2', Str_Info) ValorDia := Val(Str_Info)/100 vRetorno := AllTrim(Str((ValorTot-ValorDia)*100,18,0 )) // retirar casas decimais vRetorno := Replicate('0',18-len(vRetorno))+vRetorno //Ver Funcao rRetornarVendaBruta_ECF_Daruma Elseif vComando=='C04H' //'ObterAliquotas'; Totalizadores parciais Str_Info := space(150) iRetorno := DLLCall(abrelib, 32, "rLerAliquotas_ECF_Daruma", Str_Info) vRetorno := '' Do while Len(Str_Info)>0 .and. at(';',Str_Info)>0 if (left(Str_Info,1) = 'T') .and. IsDigit(SubStr(Str_Info,2,1)) .and. Val(SubStr(Str_Info,2,4))>0 vRetorno := VRetorno+iif(Len(vRetorno)>0,',','')+left(Str_Info,(at(";",Str_Info)-1)) Endif Str_Info := right(Str_Info,len(Str_Info)-at(";",Str_Info) ) Enddo Elseif vComando=='C04I' //ObterCOOReducaoZ Str_Info := space(940) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '140', Str_Info) vRetorno := Right(Str_Info,6) Elseif vComando=='C04J' //ObterDescontoIssqnHabilitado Str_Info := space(1) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '109', Str_Info) vRetorno := Str_Info Elseif vComando=='C04K' //Definir_ArquivoFiscal_FormatarDados ???? FILECOPY(vpUserDir+"\SINTEGRA\DOWNLOAD.MFD", vpUserDir+"\SINTEGRA\"+Arg[2] ) iRetorno := 1 Elseif vComando=='C04L' //ArquivoFiscal_GerarRegistrosCAT52 DLLCall(abrelib, 32, "regAlterarValor_Daruma","START\LocalArquivosRelatorios", vpUserDir+ "\sintegra\") vRetorno := 'NOT FOUND' Arg[2] := Dtoc(Ctod(Arg[2])) Arg[2] := Left(Arg[2],2)+Substr(Arg[2],4,2)+Right(Arg[2],4) Arg[3] := Dtoc(Ctod(Arg[3])) Arg[3] := Left(Arg[3],2)+Substr(Arg[3],4,2)+Right(Arg[3],4) iRetorno := DLLCall(abrelib, 32, "rGerarMFD_ECF_Daruma", "DATAM", Arg[2], Arg[3] ) vRetorno := vpUserDir + '\sintegra\'+'ATO_MFD_DATA.TXT' if iRetorno = -12 iRetorno := 1 Endif Elseif vComando=='C04M' //ArquivoFiscal_GerarArquivoMFD vRetorno := 'NOT FOUND' iRetorno := DLLCall(abrelib, 32, "regAlterarValor_Daruma","START\LocalArquivosRelatorios", vpUserDir+ "\sintegra\") if iRetorno = 1 iRetorno := DLLCall(abrelib, 32, "rGerarMFD_ECF_Daruma", "COO", Arg[6], Arg[7] ) vRetorno := vpUserDir + '\sintegra\'+'ATO_MFD_COO.TXT' if iRetorno = -12 iRetorno := 1 Endif Endif Elseif vComando=='C04N' //ObterDadosUltimaReducao'; Comparar com C04D Str_Info := space(1164) iRetorno := DLLCall(abrelib, 32, "rRetornarInformacao_ECF_Daruma", '140', Str_Info) vRetorno := Str_Info Elseif vComando =='R00' .or. vComando='R01' iRetorno := 1 Elseif vComando == "R05" DLLCall( abrelib, 32, "BlockInput", True ) Elseif vComando == "R06" DLLCall( abrelib, 32, "BlockInput", False ) Else vRetorno := 'Erro - Comando não reconhecido' iRetorno := -1 Endif If iRetorno <> 1 xRetorno := ErroDaruma( iRetorno, vComando ) VRetorno := xRetorno+' - '+iif(vRetorno<>'',VRetorno,'')+' - '+Servico Else if !empty(vRetorno) //POG Saber se vRetorno é vazio VRetorno := 'OK'+' - '+VRetorno+' - '+Servico Else VRetorno := 'OK' Endif Endif vRetorno := alltrim(strtran(strtran(strtran(strtran(strtran(strtran(vRetorno,"Ã","A"),"€","Ç"),"‡","ç"),"„","ã"),"¢","ó"),"”","õ")) vRetorno := StrTran(strtran(strtran(strtran(strtran(strtran(strtran(vRetorno,"ˆ","ê"),"£","ú"),"¡","í")," ","á"),"‚","é"),"“","o"),'Ç','C') vLogCom += 'Retorno...: '+vRetorno+Space(15)+'Finalizado em.: '+Time()+LF+LF fwrite( FLogEcf, vLogCom ) vLogCom := '' UltvComando := vComando Return(vRetorno) ************************************************************************************************ Function VerificaEstadoDaruma(RedZ) //Tentando Resolver tudo na chamada G00 ************************************************************************************************ xRetorno := DLLCall(abrelib, 32, "rVerificarImpressoraLigada_ECF_Daruma") if xRetorno <> 1 Return('ERRO - Impressora Desligada') Endi if RedZ xPendente := ' ' xRetorno := DLLCall(abrelib, 32, "rVerificarReducaoZ_ECF_Daruma",xPendente) if XPendente = '1' Return('REDUCAO Z PENDENTE') Endif Endif xEstado := 'OK' Str_Info := Space(14) xRetorno := DLLCall(abrelib, 32, "rStatusImpressora_ECF_Daruma", Str_Info) if xRetorno = 1 For X := 1 to 14 vRet := SubStr(Str_Info,x,1) xRet := iif(vRet='A',10,iif(vRet='B',11,if(vRet='C',12,iif(vRet='D',13,iif(vRet='E',14,iif(vRet='F',15,val(vRet))))))) if X = 1 if xRet >= 8 xEstado := Erro_Ecf[2] Break xRet -= 8 Endif Elseif X = 2 if xRet >= 8 xEstado := Erro_Ecf[18] xRet := -8 Endif Elseif X = 4 if xRet >= 8 xEstado := Erro_Ecf[24] xRet -= 8 Endif if xRet >= 4 xEstado := Erro_Ecf[25] xRet -= 4 Endif if xRet >= 2 xRet -= 2 Endif if xRet >= 1 xEstado := Erro_Ecf[9] xRet -= 1 Endif Elseif X = 6 if xRet >= 8 xRet -= 8 Endif if xRet >= 4 xRet -= 4 Endif if xRet >= 2 xEstado := Erro_Ecf[5] xRet -= 2 Endif if xRet >= 1 xRet -= 1 Endif Elseif X = 7 if xRet >= 8 xRet -= 8 Endif if xRet >= 4 xRet -= 4 Endif if xRet >= 2 xEstado := Erro_Ecf[15] xRet -= 2 Endif if xRet >= 1 // xEstado := Erro_Ecf[]'Queda de Energia' xRet -= 1 Endif Elseif X = 9 if xRet >= 8 xEstado := 'ECF Bloqueada' xRet -= 8 Endif if xRet >= 4 xRet -= 4 Endif if xRet >= 2 xRet -= 2 Endif if xRet >= 1 xEstado := Erro_Ecf[12] //'Tampa Aberta' xRet -= 1 Endif Elseif X = 10 if xRet >= 8 xRet -= 8 Endif if xRet >= 4 xEstado := Erro_Ecf[12] //'ECF c/ tampa da cabeça aberta' xRet -= 4 Endif if xRet >= 2 xEstado := Erro_Ecf[12] //'ECF em Pausa' xRet -= 2 Endif if xRet >= 1 xRet -= 1 Endif Elseif X = 11 if xRet < 12 xEstado = Erro_Ecf[12] //'Impressora em erro' Endif if xRet >= 8 xRet -= 8 Endif if xRet >= 4 xRet -= 4 Endif if xRet >= 2 xRet -= 2 Endif if xRet >= 1 xRetorno := Erro_Ecf[11] //'Erro no Relógio' xRet -= 1 Endif Elseif X = 12 if xRet >= 8 xEstado := Erro_Ecf[12] //'ECF com aquecimento na cabeça térmica' xRet -= 8 Endif if xRet >= 4 xRet -= 4 Endif if xRet >= 2 xRet -= 2 Endif if xRet >= 1 xRet -= 1 Endif Elseif X = 13 if xRet > 1 xEstado := Erro_Ecf[12] //'Impressora em Erro' endif Elseif X = 14 if xRet > 1 xEstado := Erro_Ecf[12] //'Impressora em Erro' endif Endif Next elseif xRetorno <> 12 ErroDaruma(xRetorno, 'G00') Endif Return(xEstado) ************************************************************************************************ Function ErroDaruma(xRetorno,xComando) ************************************************************************************************ if xRetorno = 0 vRetErro := Erro_Ecf[24] elseif xRetorno = -1 vRetErro := Erro_Ecf[24] elseif xRetorno = -2 .or. xRetorno = -4 vRetErro := Erro_Ecf[16] Elseif xRetorno = -3 vRetErro := Erro_Ecf[20] elseif xRetorno = -5 vRetErro := Erro_Ecf[4] elseif xRetorno = -6 vRetErro := Erro_Ecf[5] elseif xRetorno = -7 vRetErro := Erro_Ecf[24] elseif xRetorno = -8 vRetErro := Erro_Ecf[6] elseif xRetorno = -9 vRetErro := Erro_Ecf[2] elseif xRetorno = -10 .or. xRetorno = -24 vRetErro := Erro_Ecf[7] elseif xRetorno = -12 Int_Retorno := 0 Str_Msg_NumErro :=Space(300) Str_Msg_NumAviso :=Space(300) Int_Retorno := DLLCall(abrelib, 32, "eRetornarAvisoErroUltimoCMD_ECF_Daruma", Str_Msg_NumAviso, Str_Msg_NumErro ) Str_Msg_NumErro := Alltrim(Str_Msg_NumErro) Str_Msg_NumAviso := AllTrim(Str_Msg_NumAviso) if AllTrim(Str_Msg_NumAviso)='Papel acabando' vRetErro := Erro_Ecf[10] Endi if AllTrim(Str_Msg_NumErro)<>'Sem Erro' if Str_Msg_NumErro == 'ECF com falha mecânica' .or. Str_Msg_NumErro == 'Superaquecimento da cabeça de Impressão' .or. ; Str_Msg_NumErro == 'Perda de dados da MT' vRetErro := Erro_Ecf[12] Elseif Str_Msg_NumErro == 'MF não conectada' .or. Str_Msg_NumErro == 'MFD não conectada' .or. ; Str_Msg_NumErro == 'MF não inicializada' .or. Str_Msg_NumErro == 'MFD não inicializada' .or. ; Str_Msg_NumErro == 'MFD foi substituída' .or. Str_Msg_NumErro == 'Erro gravando moeda na MF' .or. ; Str_Msg_NumErro == 'Erro gravando símbolos de decodificação do GT na MF' .or. ; Str_Msg_NumErro == 'Erro gravando número de fabricação da MFD na MF' .or. ; Str_Msg_NumErro == 'Erro gravando usuário na MF' .or. Str_Msg_NumErro == 'Erro gravando GT do usuário anterior na MF' .or. ; Str_Msg_NumErro == 'Erro gravando registro de marcação na MF' .or. Str_Msg_NumErro=='Erro gravando CRO na MF' .or. ; Str_Msg_NumErro == 'Erro gravando impressão de FD na MF' .or. Str_Msg_NumErro == 'MFD com problemas' .or. ; Str_Msg_NumErro == 'MFD não cadastrada' vRetErro := Erro_Ecf[19] Elseif Str_Msg_NumErro == 'MFD esgotada' .or. Str_Msg_NumErro = 'Capacidade da MF esgotada' .or. ; Str_Msg_NumErro == 'Excedeu limite de impressão de FD ( capacidade na MF esgotada )' vRetErro := Erro_Ecf[18] Elseif Str_Msg_NumErro == 'Erro na comunicação com a MF' .or. Str_Msg_NumErro == 'Erro na comunicação com a MFD' .or. ; Str_Msg_NumErro == 'Erro no verificador da comunicação' .or. Str_Msg_NumErro == 'Leitor CMC-7 não instalado' .or. ; Str_Msg_NumErro == 'Erro de leitura do código CMC-7' vRetErro := Erro_Ecf[2] Elseif Str_Msg_NumErro == 'Erro na inicialização da MFD' vRetErro := Erro_Ecf[3] Elseif Str_Msg_NumErro == 'Faltam parâmetros de inicialização na MF' vRetErro := Erro_Ecf[16] Elseif Str_Msg_NumErro == 'Comando não suportado' vRetErro := Erro_Ecf[14] Elseif Str_Msg_NumErro == 'Data Inexistente' .or. Str_Msg_NumErro == 'Data inferior ao do último documento' .or. ; Str_Msg_NumErro == 'intervalo inconsistente' .or. Str_Msg_NumErro == 'Índice inválido' .or. ; Str_Msg_NumErro == 'Índice do meio de pagamento inválido' .or. Str_Msg_NumErro=='Intervalo invertido' .or. ; Str_Msg_NumErro == 'Utilize apenas 0 ou 1' .or. Str_Msg_NumErro == 'Falta pelo menos 1 campo no nome da moeda para cheque' .or. ; Left(Str_Msg_NumErro,21) = 'Parâmetro só pode ser' .or. Str_Msg_NumErro == 'Falta unidade doproduto' .or. ; Str_Msg_NumErro == 'Velocidade não permitida' .or. Str_Msg_NumErro == 'Código repetido' .or. ; Str_Msg_NumErro == 'Fora dos limites' .or. Str_Msg_NumErro == 'Já identificou o consumidor' .or. ; Str_Msg_NumErro == 'Opção inválida' .or. Str_Msg_NumErro == 'Parâmetros inválidos' .or. ; Str_Msg_NumErro == 'IE inválido' .or. Str_Msg_NumErro == 'IM inválido' vRetErro := Erro_Ecf[17] Elseif Str_Msg_NumErro == 'Clichê de formato inválido' .or. Str_Msg_NumErro == 'CNPJ inválido' .or. ; Str_Msg_NuMErro == 'Usuário sem CNPJ' .or. Str_Msg_NumErro == 'Usuário sem IM' vRetErro := Erro_Ecf[23] Elseif Str_Msg_NumErro == 'Deve ajustar o relógio - permitido apenas em MIT' .or. Str_Msg_NumErro == 'Relógio inoperante' .or. ; Str_Msg_NumErro == 'Erro ao ajustar o relógio' vRetErro := Erro_Ecf[11] Elseif Str_Msg_NumErro == 'Fim do papel' vRetErro := Erro_Ecf[9] Elseif Str_Msg_NumErro == 'CF aberto' .or. Str_Msg_NumErro == 'CNF aberto' .or. Str_Msg_NumErro == 'CCD aberto' .or. ; Str_Msg_NumErro == 'RG aberto' vRetErro := Erro_Ecf[15] Elseif Str_Msg_NumErro == 'RZ do movimento anterior pendente' vRetErro = Erro_Ecf[25] Elseif Str_Msg_NumErro == 'Totalizador sem alíquota programada' vRetErro = Erro_Ecf[20] Elseif Str_Msg_NumErro == 'Opção não suportada' .or. Str_Msg_NumErro == 'Falha não recuperável durante a operação' vRetErro = Erro_Ecf[1] Elseif Str_Msg_NumErro == 'Meio de pagamento não programado' vRetErro = Erro_Ecf[7] Elseif Str_Msg_NumErro == 'Último documento não é cancelável' .or. Str_Msg_NumErro == 'Não pode cancelar' vRetErro = Erro_Ecf[22] Elseif Str_Msg_NumErro == 'ECF OFF LINE' vRetErro = Erro_Ecf[5] Else vRetErro := Erro_Ecf[24] Endif Endif elseif xRetorno = -25 vRetErro := Erro_Ecf[8] elseif xRetorno = -27 vRetErro := Erro_Ecf[12] elseif xRetorno = -28 vRetErro := Erro_Ecf[2] elseif xRetorno = -40 vRetErro := Erro_Ecf[1] elseif xRetorno = -50 .or. xRetorno = -51 vRetErro := Erro_Ecf[1] elseif xRetorno = -52 vRetErro := Erro_Ecf[24] elseif xRetorno = -53 vRetErro := Erro_Ecf[1] elseif xRetorno = -60 vRetErro := Erro_Ecf[24] elseif xRetorno = -90 vRetErro := Erro_Ecf[2] elseif xRetorno = -99 vRetErro := Erro_Ecf[16] elseif xRetorno = -101 vRetErro := Erro_Ecf[6] elseif xRetorno = -102 vRetErro := Erro_Ecf[1] elseif xRetorno = -103 .or. xRetorno = -104 .or. xRetorno = -105 .or. xRetorno = -106 vRetErro := Erro_Ecf[24] elseif xRetorno = -107 vRetErro := Erro_Ecf[2] elseif xRetorno = -114 vRetErro := Erro_Ecf[19] elseif xRetorno = -116 vRetErro := Erro_Ecf[17] elseif xRetorno = -118 vRetErro := Erro_Ecf[4] else vRetErro := Erro_Ecf[1] endif return( vRetErro ) ************************************************************************************************ Function MostrarRetorno(xRetorno) ************************************************************************************************ Local Str_Msg_NumErro := Space(300) Local Str_NumAviso := Space(04) Local Str_NumErro := Space(04) Int_NumErro := 0 Int_NumAviso := 0 xRetorno := 'OK' Int_Retorno := DLLCall(abrelib, 32, "rStatusUltimoCMDInt_ECF_Daruma", Int_NumErro, Int_NumAviso ) if Int_NumErro = -3 .or. Int_NumErro = 90 //Erros do Metodo xRetorno := 'ALIQUOTA NAO DEFINIDA' Elseif Int_NumErro<>0 xRetorno := 'ERRO DE COMUNICACAO' Endif if Int_NumAviso = 1 xRetorno := 'POUCO PAPEL' Endif Return(xRetorno)