marcioe Posted November 20, 2014 Report Share Posted November 20, 2014 Estou usando hoje o UNIMAKE, uninfe, mas estou pensando em colocar meu sistema para poder usar ACBrNFeMonitor, alguem usa, que possa trocar ideias Quote Link to comment Share on other sites More sharing options...
CIACPD Posted November 20, 2014 Report Share Posted November 20, 2014 Márcio, eu uso o acbr e a classe hbnfe que não foi atualizada para a 3.10, no site pctoledo tem exemplos de uso. Quando crio uma nota ja preparo tanto com a classe hbnfe quanto com o ini para o acbr. WITH OBJECT oNF:Emi :CNPJ := alltrim(ccgcemp) :xNome := ALLTRIM(cnomemp) :xFant := ALLTRIM(cnomempt) :xLgr := ALLTRIM(cruaemp) :nro := ALLTRIM(cnumruaemp) :xBairro := ALLTRIM(cbaiemp) :cMun := ALLTRIM(ccodibgecid) :xMun := ALLTRIM(ccidemp) :UF := ALLTRIM(cufemp) :CEP := ALLTRIM(ccepemp) :fone := RIGHT(ctelemp,10) :IE := alltrim(cieemp) // :CNAE := 13981723 :CRT := ccodcrt A_Nota += "[Emitente]" + CRLF A_Nota += "CRT=" + txt( alltrim(ccodcrt) ) + CRLF A_Nota += "CNPJ=" + txt( alltrim(ccgcemp) ) + CRLF A_Nota += "IE=" + txt( alltrim(cieemp) ) + CRLF A_Nota += "Razao=" + txt( ALLTRIM(cnomemp) ) + CRLF A_Nota += "Fantasia=" + txt( ALLTRIM(cnomempt) ) + CRLF A_Nota += "Fone=" + txt( RIGHT(ctelemp,10) ) + CRLF A_Nota += "CEP=" + txt( ALLTRIM(ccepemp) ) + CRLF A_Nota += "Logradouro=" + txt( ALLTRIM(cruaemp) ) + CRLF A_Nota += "Numero=" + txt( ALLTRIM(cnumruaemp) ) + CRLF A_Nota += "Complemento=" + CRLF A_Nota += "Bairro=" + txt( ALLTRIM(cbaiemp) ) + CRLF A_Nota += "CidadeCod=" + txt( ALLTRIM(ccodibgecid) ) + CRLF A_Nota += "Cidade=" + txt( ALLTRIM(ccidemp) ) + CRLF A_Nota += "UF=" + txt( ALLTRIM(cufemp) ) + CRLF END WITH Daniel Segura Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted November 20, 2014 Report Share Posted November 20, 2014 Eu uso. Pretendo mudar para a classe do Gilmer assim que ele se libertar da FlexDocs. Enquanto isso, uso ACBrNFeMonitor e Emissor gratuito. Gero o TXT conforme o layout do emissor gratuito, que também é lido pelo ACBrNFeMonitor. Não gero arquivo .ini do ACBr porque preferi fazer apenas uma rotina que servisse para os dois. Caso queira algumas dicas, entre em contato pelo ariston.ap@hotmail.com Quote Link to comment Share on other sites More sharing options...
marcioe Posted November 21, 2014 Author Report Share Posted November 21, 2014 sabe se funciona com XML ACBrNFeMonitor, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 21, 2014 Report Share Posted November 21, 2014 Meu uso é similar ao do Ariston, compatibilizei a minha aplicação com o programa gratuito do SEFAZ e o ACBr usando o mesmo TXT. Meus clientes estão satisfeitos. rafaoasys 1 Quote Link to comment Share on other sites More sharing options...
marcioe Posted November 21, 2014 Author Report Share Posted November 21, 2014 Alguem sabe de outro (monitor) tipo o unimake, que usa XML, o UNIMAKE esta funcionando bem nao tenho nada a reclamar, mas gostaria de deixar uma segunda opção funcionando. Quote Link to comment Share on other sites More sharing options...
HASA Posted November 21, 2014 Report Share Posted November 21, 2014 Olá Márcio o acbrnfemonitor aceita o xml sem a assinatura, depois de validar, transmitir ele lê o certificado e assina ok HASA Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted November 21, 2014 Report Share Posted November 21, 2014 sabe se funciona com XML ACBrNFeMonitor, Márcio Boa noite O AcbrNfemonitor, funciona para nfe com o arquivo INI (Layout próprio), TXT (Layout sefaz) e Xml. Os comandos podem ser TXT, XML e via comunicação TCP/IP, então tem pra todo gosto, com suporte gratuito ou Sac pago, o qual te dá direito a baixar semanalmente uma cópia binária atualizada, ou então os fontes em Deplhi gratuitamente. []s, Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted November 21, 2014 Report Share Posted November 21, 2014 Como eu gero o TXT da NF-e para usar tanto Emissor Gratuito como no ACBrNFeMonitor. FUNCTION GeraTxtNFe(_NfeNr) LOCAl c_Txt, cNfeVer, l_ACBr, cQDesc, lQDesc, cCodRg, cComDes, cDesPr LOCAL nTarIR, nTarCS, nTaPIS, nTaCOF // Pegar base de cálculo do IR/CS/PIS/COFINS n_Area := SELECT() cQDesc := GetPvProfString( "CONFIGURACAO", "CfgDesconto", " ", ".\sisnfe.Ini") cComDes:= GetPvProfString( "CONFIGURACAO", "ComDesconto", "0", ".\sisnfe.Ini") c_Version := GetPvProfString( "CONFIGURACAO", "APPVERSION", "2.2.20", ".\sisnfe.Ini") l_ACBr := IIF(GetPvProfString( "VENDACFG", "NFeVia_ACBrNFe", "N", ".\siscom.ini")="S",.T.,.F.) cTpAmb := GetPvProfString( "CONFIGURACAO", "TIPAMBIENTE", " ", ".\sisnfe.Ini") // 1-Produção; 2-homologação c_Ambi := GetPvProfString("WebService", "Ambiente", "0", "C:\ACBrNFeMonitor\ACBrNFeMonitor.ini") IF c_Ambi = "0" ; cTpAmb := "1" ; ENDIF // 1-Produção IF c_Ambi = "1" ; cTpAmb := "2" ; ENDIF // 2-homologação // Deletar os TXTs gerados para agilizar a importação aFiles := DIRECTORY( CurDrive()+":\"+CurDir()+"\remessa\NFe-*.txt" ) FOR nX := 1 TO Len( aFiles ) IF aFiles[nX,3] < DATE() FERASE(CurDrive()+":\"+CurDir()+"\remessa\"+aFiles[ nX, 1 ]) ENDIF NEXT DEFINE DIALOG o_Wait FROM 0, 0 TO 4, 20 TITLE "Gerando TXT da NFe..." o_Wait:lHelpIcon := .f. @05,05 SAY oAguarde PROMPT "Gerando TXT. Aguarde..." SIZE 80, 10 PIXEL OF o_Wait UPDATE ACTIVATE DIALOG o_Wait CENTER NOWAIT c_Txt := "NOTA FISCAL|1|"+CRLF c_Txt += "A|2.00|NFe|"+CRLF c_Txt += "B|"+RetCodUFIBGE(NFE_INFO->NFE_UF)+; // Cód. da UF do emitente "| |"+ALLTRIM(NFE_INFO->NATOP)+; // Natureza da operação "|"+ALLTRIM(NFE_INFO->FORMPG)+; // 0=A vista; 1 = A Prazo; 2 = Outros "|55"+; // Modelo "|"+ALLTRIM(NFE_INFO->SERIE)+; // Série 0=única ; 900-SCAN "|"+STRZERO(NFE_INFO->NFENUM,9)+; // Número do documento fiscal "|"+STR(YEAR(NFE_INFO->NFEEMI),4)+"-"+STRZERO(MONTH(NFE_INFO->NFEEMI),2)+"-"+STRZERO(DAY(NFE_INFO->NFEEMI),2)+; // Emissão - AAAA-MM-DD "|"+STR(YEAR(NFE_INFO->DTSAID),4)+"-"+STRZERO(MONTH(NFE_INFO->DTSAID),2)+"-"+STRZERO(DAY(NFE_INFO->DTSAID),2)+; // Saída - AAAA-MM-DD "|"+IIF(SECS(NFE_INFO->NFHORA+":00") > 0, NFE_INFO->NFHORA+":00", "")+; // Hora da saída - Emissão "|"+NFE_INFO->NFETIP+; // Tipo: 0=Entrada; 1=Saída "|"+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->MUNICI, NFE_INFO->NFE_UF, .F.)),7)+; // Código do município "|1"+; // Tipo de impressão: 1=Retrato; 2=Paisagem "|"+IIF(NFE_INFO->TPEMIS $ "1;2;3", NFE_INFO->TPEMIS, "1")+; // Tipo de emissão: 1=Nomral; 2=Contingencia; 3=SCAN "| "+; // Dígito verificador. Não informar para importação. "|"+cTpAmb+; // Tipo de ambiente: 1=Produção; 2=Homologação "|"+NFE_INFO->FINALI+; // Finalidade da NFe: 1=Nomral; 2=Complementar; 3=Ajuste "|3"+; // Processo de NFe: 3=Emissão pelo aplicativo do fisco "|"+c_Version // Versão do palicativo emissor gratuito IF VAL(ALLTRIM(NFE_INFO->SERIE)) >= 900 c_Txt += "|"+STR(YEAR(NFE_INFO->NFEEMI),4)+"-"+STRZERO(MONTH(NFE_INFO->NFEEMI),2)+"-"+STRZERO(DAY(NFE_INFO->NFEEMI),2)+" "+LEFT(NFE_INFO->NFHORA,5)+":00"+"|PROBLEMAS NOS SERVICOS DE NFe DA SEFAZ" ENDIF c_Txt += "|"+CRLF // Fim da TAG // Se for Devolução de Mercadorias, Substituição de NF cancelada, // Complementação de NF, etc., informar o campo B13 IF !EMPTY(NFE_INFO->REFNFE) c_Txt += "B13|"+NFE_INFO->REFNFE+"|"+CRLF // Chave de Acesso da NF-e referenciada ENDIF // Se for referenciar um NF normal, informar os registros do campo B14 IF !EMPTY(NFE_INFO->NF1NRO) c_Txt += "B14|"+RetCodUFIBGE(NFE_INFO->NF1_UF)+; // Código da UF do emitente - IBGE (NF normal) "|"+RIGHT(STR(YEAR(NFE_INFO->NFEEMI),4),2)+STRZERO(MONTH(NFE_INFO->NFEEMI),2)+; // Ano/Ano emissão da NF-e "|"+R_CnpjLienar(NFE_INFO->NF1CGC)+; // Cnpj do emitente da NF (NF normal) "|01"+; // Modelo do documento fiscal - 01 (NF normal) "|"+ALLTRIM(NFE_INFO->NF1SER)+; // Série do documento fiscal (NF normal) "|"+ALLTRIM(STR(VAL(NFE_INFO->NF1NRO)))+; // Número do documento fiscal (NF normal) "|"+CRLF // Fechamento da TAG ENDIF // Se for referenciar um Cupom Fiscal, informar os registros do campo B20j IF VAL(NFE_INFO->NROECF) > 0 .AND. VAL(NFE_INFO->NROCOO) > 0 c_Txt += "B20j|"+ALLTRIM(NFE_INFO->MODECF)+; // Modelo "|"+STRZERO(VAL(NFE_INFO->NROECF),3)+; // Número ECF "|"+STRZERO(VAL(NFE_INFO->NROCOO),6)+; // Número COO "|"+CRLF // Fechamento da TAG ENDIF // Emitente cCodRg := NFE_INFO->REGIME // 1=Simples Nacional; 2=Simples Excesso de sublimite; 3=Regime Normal IF EMPTY(cCodRg) cCodRg := "3" // Regime Normal IF l_Simp cCodRg := "1" // Simples Nacional IF l_SExc cCodRg := "2" // Simples Nacional - Excesso de sublimite ENDIF ENDIF ENDIF c_Txt += "C|"+TiraAcentos(ALLTRIM(NFE_INFO->E_NOME))+; // Razão social ou nome do emitente "|"+TiraAcentos(ALLTRIM(NFE_INFO->E_FANT))+; // Nome de fantasia "|"+ALLTRIM(ClearChar(NFE_INFO->E_IEST ,{".","-"}))+; // Inscrição Estadual "|"+; // ID do substituto tributário "|"+; // Inscrição Municipal "|"+; // CNAE FISCAL = Deve ser informado quando IM for informado "|"+cCodRg+"|"+CRLF // Código de Regime Tributário - CRT: 1 - Simples Nacional; 2 - Simples Nacional - excesso de sublimite de receita bruta; 3 - Regime Normal // Seleção entre CNPJ e CPF do emitente IF LEN(ALLTRIM(ClearChar(NFE_INFO->E_CNPJ, {".","-","/",","}))) < 14 c_Txt += "C02a|"+R_cpfLienar(NFE_INFO->E_CNPJ)+"|"+CRLF // CPF ELSE c_Txt += "C02|"+R_CnpjLienar(NFE_INFO->E_CNPJ)+"|"+CRLF // CNPJ ENDIF // Endereço do emitente c_Txt += "C05|"+TiraAcentos(ALLTRIM(NFE_INFO->E_LOGR))+; // Logradouro "|"+ALLTRIM(NFE_INFO->E_NUME)+; // Número "|"+TiraAcentos(ALLTRIM(NFE_INFO->E_CMPL))+; // Complemento "|"+TiraAcentos(ALLTRIM(NFE_INFO->E_BAIR))+; // Bairro "|"+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->MUNICI, NFE_INFO->NFE_UF, .F.)),7)+; // Cód. município "|"+TiraAcentos(ALLTRIM(NFE_INFO->MUNICI))+; // Município "|"+ALLTRIM(NFE_INFO->NFE_UF)+; // Sigla UF "|"+LEFT(ClearChar(NFE_INFO->E_CEP,{".","-"}),8)+; // CEP "|"+RetCodPaisIBGE("BRASIL")+; // Código do País "|Brasil"+; // País "|"+RIGHT(ClearChar(ALLTRIM(NFE_INFO->E_FONE),{"(",")","-"," "}),10)+"|"+CRLF // Fone // Destinatário d_IE := "" if LEN(ALLTRIM(ClearChar(NFE_INFO->D_CNPJ,{".","-","/",","}))) = 14 if EMPTY(NFE_INFO->D_IEST) .or. AllTrim(NFE_INFO->D_IEST) = "ISENTO" d_IE := "ISENTO" else d_IE := ClearChar(NFE_INFO->D_IEST ,{".","-"}) endif else d_IE := "ISENTO" Endif c_xNome := "" IF cTpAmb = "2" // Se for homologação c_xNome := "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL" ELSE c_xNome := "("+ALLTRIM(STR(NFE_INFO->D_NCLI))+") "+TiraAcentos(ALLTRIM(NFE_INFO->D_NOME)) ENDIF IF UPPER(ALLTRIM(NFE_INFO->D_PAIS)) != "BRASIL" ; d_IE := "" ; ENDIF c_Txt += "E|"+LEFT(c_xNome, 60)+; // Nome do destinatário - 2 a 60 caracteres "|"+ALLTRIM(d_IE)+; // Inscrição estadual "|"+ALLTRIM(NFE_INFO->D_SUFR)+"|"+; // Inscrição na SUFRAMA "|"+ALLTRIM(NFE_INFO->D_MAIL)+"|"+CRLF // E-mail IF LEN(ALLTRIM(ClearChar(NFE_INFO->D_CNPJ, {".","-","/",","}))) < 14 c_Cnpj := R_cpfLienar(NFE_INFO->D_CNPJ) IF VAL(c_Cnpj) = 0 ; c_Cnpj := "" ; ENDIF c_Txt += "E03|"+c_Cnpj+"|"+CRLF // CPF ELSE c_Txt += "E02|"+R_CnpjLienar(NFE_INFO->D_CNPJ)+"|"+CRLF // CNPJ ENDIF // Endereço do destinatário c_Txt += "E05|"+TiraAcentos(ALLTRIM(NFE_INFO->D_LOGR))+; // Logradouro "|"+ALLTRIM(NFE_INFO->D_NUME)+; // Número "|"+TiraAcentos(ALLTRIM(NFE_INFO->D_CMPL))+; // Complemento "|"+TiraAcentos(ALLTRIM(NFE_INFO->D_BAIR))+; // Bairro "|"+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->D_CIDA, NFE_INFO->D_UF, .F.)),7)+; // Cód. município "|"+TiraAcentos(ALLTRIM(NFE_INFO->D_CIDA))+; // Município "|"+ALLTRIM(NFE_INFO->D_UF)+; // Sigla UF "|"+LEFT(ALLTRIM(ClearChar(NFE_INFO->D_CEP,{".","-"})),8)+; // CEP "|"+RetCodPaisIBGE(NFE_INFO->D_PAIS)+; // Código do País "|"+ALLTRIM(NFE_INFO->D_PAIS)+; // País "|"+RIGHT(ClearChar(ALLTRIM(NFE_INFO->D_FONE),{"(",")","-", ""}),10)+"|"+CRLF // Fone // Incluir os itens na nfe SELECT(n_ItmArea) _nDes := 0 nItem := 0 nBCim := 0 nICMS := 0 nBCst := 0 nVRst := 0 c_Err := "" nTpro := 0 nImposto := 0 // De Olho no Imposto nBclIPPT := 0 // Base de calculo do imposto WHILE ! NFE_ITEM->(EOF()) // .T. _cField := "NFE_ITEM->NFENRO" IF &(_cField) = _NfeNr nItem ++ n_Vprod := (NFE_ITEM->QUANTI * NFE_ITEM->PRUNIT) nBcIcms := NFE_ITEM->BCICMS // (NFE_ITEM->QUANTI * NFE_ITEM->PRUNIT) n_Desc := 0 IF NFE_ITEM->PRUNIT < NFE_ITEM->PRSDES IF cComDes = "2" // Mostra o desconto só no item. Total já com desconto imbutido n_Desc := (NFE_ITEM->PRSDES-NFE_ITEM->PRUNIT) * NFE_ITEM->QUANTI n_Vprod := (NFE_ITEM->QUANTI * NFE_ITEM->PRUNIT) ELSEIF cComDes = "3" // Mostra o desconto no item e no cabeçalho. Total sem e com desconto n_Desc := (NFE_ITEM->PRSDES - NFE_ITEM->PRUNIT) * NFE_ITEM->QUANTI n_Vprod := (NFE_ITEM->QUANTI * NFE_ITEM->PRSDES) _nDes += n_Desc ELSE // Sem desconto n_Vprod := (NFE_ITEM->QUANTI * NFE_ITEM->PRUNIT) ENDIF ENDIF nTpro += n_Vprod cDesPr := TiraAcentos(ALLTRIM(STRTRAN(NFE_ITEM->DESCRI,"¥"," L:")))+; // Descrição do produto ou serviço IIF(!EMPTY(NFE_ITEM->DISCRIM), ";"+ALLTRIM(NFE_ITEM->DISCRIM), "") // Discriminação detalhada cStrDesc := "" IF n_Desc > 0 // Mostrar desconto IF cComDes = "2" // Só na descrição do itne cDesPr += ";Desc. R$ "+ALLTRIM(TRANS(n_Desc, "@E 999,999.99"))+" ("+ALLTRIM(TRANS(AR_ROUND((100/NFE_ITEM->PRSDES) * (NFE_ITEM->PRSDES-NFE_ITEM->PRUNIT)),"@E 999.99"))+"%)" ENDIF ENDIF c_NCM := +ALLTRIM(ClearChar(NFE_ITEM->CFISCA,{"."})) IF VAL(c_NCM) = 0 ; c_NCM := "99999900" ; ENDIF c_Txt += "H|"+ALLTRIM(STR(nItem))+"||"+CRLF // Número do item e informação adicional IF cComDes != "3" c_Txt += "I|"+STRZERO(VAL(NFE_ITEM->EAN_13),13)+; // Código do produto ou serviço "|"+; // Código Ean13 "|"+LEFT(cDesPr,120)+; // Descrição do produto "|"+c_NCM+; // Código NCM "|"+; // Código EX_IPI "|"+ALLTRIM(ClearChar(NFE_ITEM->CFOP, {"."} ))+; // CFOP "|"+ALLTRIM(NFE_ITEM->UNIDAD)+; // UND "|"+ALLTRIM(STR(NFE_ITEM->QUANTI,15,4))+; // Qtd "|"+ALLTRIM(STR(NFE_ITEM->PRUNIT,21,10))+; // Valor da Unidade Comercial* "|"+ALLTRIM(STR(NFE_ITEM->PRUNIT * NFE_ITEM->QUANTI,15,2))+; // Tot. bruto* "|"+; // Código Ean13 tributável "|"+ALLTRIM(NFE_ITEM->UNIDAD)+; // UND tributável "|"+ALLTRIM(STR(NFE_ITEM->QUANTI,15,4))+; // Qtd tributável "|"+ALLTRIM(STR(NFE_ITEM->PRUNIT,21,10))+; // PrUn UND tributável* "|"+IIF(NFE_ITEM->V_FRET > 0, ALLTRIM(STR(NFE_ITEM->V_FRET,15,2)), "")+; // Valor do frete "|"+IIF(NFE_ITEM->V_SEGU > 0, ALLTRIM(STR(NFE_ITEM->V_SEGU,15,2)), "")+; // Valor do seguro "|"+; // Desconto* "|"+IIF(NFE_ITEM->V_OUTR > 0, ALLTRIM(STR(NFE_ITEM->V_OUTR,15,2)), "")+; // Outras despesas "|1"+; // indTot - 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) 1 – o valor do item (vProd) compõe o valor total da NF-e. "|"+IIF(cMovCd > 0,ALLTRIM(STR(cMovCd))," ")+; // xPed - Numero do pedido de compra de uso do emissor "||"+CRLF // informar o número do item do pedido de compra, o campo é de livre uso do emissor. ELSE c_Txt += "I|"+STRZERO(VAL(NFE_ITEM->EAN_13),13)+; // Código do produto ou serviço "|"+; // Código Ean13 "|"+LEFT(cDesPr,120)+; // Descrição do produto "|"+c_NCM+; // Código NCM "|"+; // EXTIPI "|"+ALLTRIM(ClearChar(NFE_ITEM->CFOP, {"."} ))+; // CFOP "|"+ALLTRIM(NFE_ITEM->UNIDAD)+; // UND "|"+ALLTRIM(STR(NFE_ITEM->QUANTI,15,4))+; // Qtd "|"+ALLTRIM(STR(NFE_ITEM->PRSDES,21,10))+; // Valor da Unidade Comercial* "|"+ALLTRIM(STR(NFE_ITEM->PRSDES * NFE_ITEM->QUANTI,15,2))+; // Tot. bruto* "|"+; // Código Ean13 Tributável "|"+ALLTRIM(NFE_ITEM->UNIDAD)+; // UND tributável "|"+ALLTRIM(STR(NFE_ITEM->QUANTI,15,4))+; // Qtd tributável "|"+ALLTRIM(STR(NFE_ITEM->PRSDES,21,10))+; // PrUn UND tributável* "|"+IIF(NFE_ITEM->V_FRET > 0, ALLTRIM(STR(NFE_ITEM->V_FRET,15,2)), "")+; // Valor do frete "|"+IIF(NFE_ITEM->V_SEGU > 0, ALLTRIM(STR(NFE_ITEM->V_SEGU,15,2)), "")+; // Valor do seguro "|"+IIF(n_Desc > 0, ALLTRIM(STR(n_Desc,15,2)), "")+; // Desconto* "|"+IIF(NFE_ITEM->V_OUTR > 0, ALLTRIM(STR(NFE_ITEM->V_OUTR,15,2)), "")+; // Outras despesas "|1"+; // indTot - 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) 1 – o valor do item (vProd) compõe o valor total da NF-e. "|"+IIF(cMovCd > 0,ALLTRIM(STR(cMovCd))," ")+; // xPed - Numero do pedido de compra de uso do emissor "||"+CRLF // informar o número do item do pedido de compra, o campo é de livre uso do emissor. ENDIF // Dados de importação, se houver IF !EMPTY(NFE_ITEM->DINMRO) c_Txt += "I18|"+ALLTRIM(NFE_ITEM->DINMRO)+; // Número da DI "|"+STR(YEAR(NFE_ITEM->DIRGDT),4)+"-"+STRZERO(MONTH(NFE_ITEM->DIRGDT),2)+"-"+STRZERO(DAY(NFE_ITEM->DIRGDT),2)+; // /Data de registro - AAAA-MM-DD "|"+ALLTRIM(NFE_ITEM->DILOCA)+; // Local de desembaraço "|"+ALLTRIM(NFE_ITEM->DIUFDA)+; // Sigla da UF onde ocorreu o Desembaraço Aduaneiro "|"+STR(YEAR(NFE_ITEM->DIDADT),4)+"-"+STRZERO(MONTH(NFE_ITEM->DIDADT),2)+"-"+STRZERO(DAY(NFE_ITEM->DIDADT),2)+; // Data do Desembaraço Aduaneiro "|"+ALLTRIM(NFE_ITEM->DICODX)+; // Código do exportador "|"+CRLF // Gechamento da TAG IF ! EMPTY(NFE_ITEM->DIADN1) c_Txt += "I25|1"+; // Número da adição - 01 "|"+ALLTRIM(STR(VAL(NFE_ITEM->DIADN1)))+; // Número sequencial do item 1 "|"+ALLTRIM(NFE_ITEM->DIFAB1)+; // Cód. fabricante 1 "|"+; // Desconto 1 "|"+CRLF // Gechamento da TAG ENDIF IF ! EMPTY(NFE_ITEM->DIADN2) c_Txt += "I25|2"+; // Número da adição - 01 "|"+ALLTRIM(STR(VAL(NFE_ITEM->DIADN2)))+; // Número sequencial do item 1 "|"+ALLTRIM(NFE_ITEM->DIFAB2)+; // Cód. fabricante 1 "|"+; // Desconto 2 "|"+CRLF // Gechamento da TAG ENDIF IF ! EMPTY(NFE_ITEM->DIADN3) c_Txt += "I25|3"+; // Número da adição - 01 "|"+ALLTRIM(STR(VAL(NFE_ITEM->DIADN3)))+; // Número sequencial do item 1 "|"+ALLTRIM(NFE_ITEM->DIFAB3)+; // Cód. fabricante 1 "|"+; // Desconto 3 "|"+CRLF // Gechamento da TAG ENDIF IF ! EMPTY(NFE_ITEM->DIADN4) c_Txt += "I25|4"+; // Número da adição - 01 "|"+ALLTRIM(STR(VAL(NFE_ITEM->DIADN4)))+; // Número sequencial do item 1 "|"+ALLTRIM(NFE_ITEM->DIFAB4)+; // Cód. fabricante 1 "|"+; // Desconto 4 "|"+CRLF // Gechamento da TAG ENDIF IF ! EMPTY(NFE_ITEM->DIADN5) c_Txt += "I25|5"+; // Número da adição - 01 "|"+ALLTRIM(STR(VAL(NFE_ITEM->DIADN5)))+; // Número sequencial do item 1 "|"+ALLTRIM(NFE_ITEM->DIFAB5)+; // Cód. fabricante 1 "|"+; // Desconto 5 "|"+CRLF // Gechamento da TAG ENDIF ENDIF // LOTE DO ITEM IF (!EMPTY(NFE_ITEM->LOTENR)) .AND. ; (!EMPTY(DTOS(NFE_ITEM->FABRIC))) .AND. ; (!EMPTY(DTOS(NFE_ITEM->VALIDA))) nQtLote := INT(NFE_ITEM->QTLOTE) nVlrPmc := NFE_ITEM->VLRPMC IF nQtLote = 0 ; nQtLote := INT(NFE_ITEM->QUANTI) ; ENDIF IF nVlrPmc = 0 ; nVlrPmc := NFE_ITEM->PRUNIT ; ENDIF c_Txt += "K"+; // Medicamento "|"+ALLTRIM(NFE_ITEM->LOTENR)+; // Número do Lote do medicamento "|"+ALLTRIM(STR(nQtLote))+; // Quantidade de produto no Lote do medicamento "|"+STR(YEAR(NFE_ITEM->FABRIC),4)+"-"+STRZERO(MONTH(NFE_ITEM->FABRIC),2)+"-"+STRZERO(DAY(NFE_ITEM->FABRIC),2)+; // Data de fabricação - AAAA-MM-DD "|"+STR(YEAR(NFE_ITEM->VALIDA),4)+"-"+STRZERO(MONTH(NFE_ITEM->VALIDA),2)+"-"+STRZERO(DAY(NFE_ITEM->VALIDA),2)+; // Data de validade - AAAA-MM-DD "|"+ALLTRIM(STR(nVlrPmc,15,02))+; // Preço máximo consumidor "|"+CRLF // Fechamento da TAG ENDIF // LOTES DA NF-E AVULSA aItLts := GetNfeItmLotes(ALLTRIM(STR(NFE_ITEM->NFENRO)), NFE_ITEM->EAN_13) IF LEN(aItLts) > 0 FOR nLt := 1 TO LEN(aItLts) nQtLote := INT(aItLts[nLt,2]) nVlrPmc := aItLts[nLt,5] c_Txt += "K"+; // Medicamento "|"+ALLTRIM(aItLts[nLt,1])+; // Número do Lote do medicamento "|"+ALLTRIM(STR(nQtLote))+; // Quantidade de produto no Lote do medicamento "|"+STR(YEAR(aItLts[nLt,3]),4)+"-"+STRZERO(MONTH(aItLts[nLt,3]),2)+"-"+STRZERO(DAY(aItLts[nLt,3]),2)+; // Data de fabricação - AAAA-MM-DD "|"+STR(YEAR(aItLts[nLt,4]),4)+"-"+STRZERO(MONTH(aItLts[nLt,4]),2)+"-"+STRZERO(DAY(aItLts[nLt,4]),2)+; // Data de validade - AAAA-MM-DD "|"+ALLTRIM(STR(nVlrPmc,15,02))+; // Preço máximo consumidor "|"+CRLF // Fechamento da TAG NEXT ENDIF IF !EMPTY(NFE_ITEM->CODANP) c_Txt += "L01"+; // Combustíveis e lubrificantes "|"+ALLTRIM(NFE_ITEM->CODANP)+; // COD ANP "|"+; // CODIF "|"+; // QTemp "|"+cUFcon+; // UF de consumo "|"+CRLF // Fechamento da TAG ENDIF c_Txt += "M|"+CRLF // Grupo de tributos incidentes no produto ou serviço c_Txt += "N|"+CRLF // ICMS c_CST := alltrim(NFE_ITEM->S_TRIB) c_Orig := "0" IF VAL(cCodRg) == 1 // Simples nacional c_Orig := NFE_ITEM->ORIGIT // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno IF EMPTY(c_Orig) ; c_Orig := "0"; ENDIF IF EMPTY(c_CST); c_CST := "102" ; ENDIF IF c_CST != "101" c_Txt += "N10d|"+c_Orig+"|"+c_CST+"|"+CRLF ELSE c_Txt += "N10c|"+c_Orig+"|"+c_CST+; "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota aplicável de calculo de crédito "|"+ALLTRIM(STR((nBcIcms / 100)*NFE_ITEM->B_ICMS,15,2))+; // Crédito do ICMS que pode ser aproveitado "|"+CRLF // Fechamento da TAG ENDIF ELSE // Normal ou excesso de sublimite (2 ou 3) c_Orig := LEFT(NFE_ITEM->S_TRIB,1) // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno c_CST := RIGHT(alltrim(NFE_ITEM->S_TRIB),2) IF EMPTY(c_Orig) ; c_Orig := "0"; ENDIF DO CASE CASE (NFE_ITEM->RDICMS = 0 .AND. NFE_ITEM->B_ICMS > 0) .AND. ; // Tributada integralmente (NFE_ITEM->ST_MVA = 0 .AND. NFE_ITEM->B_ICST = 0) // Sem MVA c_Txt += "N02|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+RIGHT(NFE_ITEM->S_TRIB,2)+; // Código da Situação Tributária "|0"+; // Modalidade de determinação da BC do ICMS ( 0 - Margem Valor Agregado 1-Pauta (Valor) 2 = Preço Tabelado Máx. (valor) 3 -Valor da Operação ) "|"+ALLTRIM(STR(nBcIcms,15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR((nBcIcms / 100)*NFE_ITEM->B_ICMS,15,2))+; // Valor do ICMS "|"+CRLF // Fechamento da TAG nBCim += nBcIcms nICMS += (nBcIcms / 100) * NFE_ITEM->B_ICMS CASE (NFE_ITEM->RDICMS = 0 .AND. NFE_ITEM->B_ICMS > 0) .AND. ; // Tributada integralmente (NFE_ITEM->ST_MVA > 0 .AND. NFE_ITEM->B_ICST > 0) .AND. c_CST == "90" // Com MVA nIcmsMva := NFE_ITEM->BCICST nBCst += nIcmsMva nVRst += NFE_ITEM->V_ICST nBCim += (NFE_ITEM->QUANTI * NFE_ITEM->PRUNIT) nICMS += (nBcIcms / 100) * NFE_ITEM->B_ICMS c_Txt += "N10|"+c_Orig+; // 2-Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // 3-Código da Situação Tributária "|"+NFE_ITEM->MBICMS+; // 4-Modalidade de determinação BC ICMS "|"+IIF(NFE_ITEM->RDICMS == 0,"",ALLTRIM(STR(NFE_ITEM->RDICMS,5,2)))+; // Percentual de redução da base de cálculo "|"+ALLTRIM(STR(nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICMS),15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR(((nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICMS))/100)*NFE_ITEM->B_ICMS,15,2))+; // Valor do ICMS "|"+NFE_ITEM->MBISIT+; // 9-Modalidade de determinação BC ICMS ST "|"+IIF(NFE_ITEM->ST_MVA > 0, ALLTRIM(STR(NFE_ITEM->ST_MVA, 5,2)), "")+; // 10-Percentual do MVA ST "|"+; // 11-Percentual redução do MVA ST "|"+ALLTRIM(STR(nIcmsMva, 15, 2))+; // 12-Valor da BC do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->B_ICST,5,2))+; // 13-Percentual do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->V_ICST,15,2))+; // 14-Valor do ICMS "|"+CRLF // Fechamento da TAG CASE NFE_ITEM->RDICMS > 0 .AND. NFE_ITEM->B_ICMS > 0 // Com redução de base de cálculo IF NFE_ITEM->V_ICST == 0 // Sem ICMS ST c_Txt += "N04|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+RIGHT(NFE_ITEM->S_TRIB,2)+; // Código da Situação Tributária "|0"+; // Modalidade de determinação da BC do ICMS ( 0 - Margem Valor Agregado 1-Pauta (Valor) 2 = Preço Tabelado Máx. (valor) 3 -Valor da Operação ) "|"+ALLTRIM(STR(NFE_ITEM->RDICMS,5,2))+; // Percentual de redução da base de cálculo "|"+ALLTRIM(STR(NFE_ITEM->V_PROD - ((NFE_ITEM->V_PROD / 100) * NFE_ITEM->RDICMS),15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR(((NFE_ITEM->V_PROD - ((NFE_ITEM->V_PROD / 100) * NFE_ITEM->RDICMS))/100)*NFE_ITEM->B_ICMS,15,2))+; // Valor do ICMS "|"+CRLF // Fechamento da TAG nBCim += NFE_ITEM->V_PROD - ((NFE_ITEM->V_PROD / 100) * NFE_ITEM->RDICMS) nICMS += ((NFE_ITEM->V_PROD - ((NFE_ITEM->V_PROD / 100) * NFE_ITEM->RDICMS))/100) * NFE_ITEM->B_ICMS ELSE // Com ICMS ST - Outros IF EMPTY(c_CST) ; c_CST := "70" ; ENDIF nIcmsMva := NFE_ITEM->BCICST nBCst += NFE_ITEM->BCICST nVRst += NFE_ITEM->V_ICST nBCim += NFE_ITEM->BCICMS nICMS += NFE_ITEM->VRICMS c_Txt += "N09|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // Código da Situação Tributária "|"+NFE_ITEM->MBICMS+; // Modalidade de determinação da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->RDICMS,5,2))+; // Percentual da redução "|"+ALLTRIM(STR(NFE_ITEM->BCICMS,15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR(NFE_ITEM->VRICMS,15,2))+; // Valor do ICMS "|"+NFE_ITEM->MBISIT+; // Modalidade de determinação da BC do ICMS ST "|"+; // Percentual adicinado (Opcional) "|"+; // Percentual da redução "|"+ALLTRIM(STR(NFE_ITEM->BCICST,15,2))+; // Valor da BC do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->B_ICST,5,2))+; // Aliquota do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->V_ICST,15,2))+; // Valor do ICMS ST "|"+CRLF // Fechamento da TAG ENDIF CASE NFE_ITEM->RDICMS = 0 .AND. NFE_ITEM->B_ICMS = 0 // 40=Isenta, 41=Não tributada e 50=Suspensão; 30,60 = ST IF NFE_ITEM->V_ICST > 0 // CST – 90 - ICMS substituição tributária com ou sem MVA nBCst += NFE_ITEM->BCICST nVRst += NFE_ITEM->V_ICST IF EMPTY(c_CST) ; c_CST := "90" ; ENDIF c_Txt += "N10|"+c_Orig+; // 2-Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // 3-Código da Situação Tributária "|"+; // 4-Modalidade de determinação BC ICMS "|"+; // 5-Valor da BC do ICMS "|"+; // 6-ercentual de redução da base de cálculo "|"+; // 7-Aliquota do ICMS "|"+; // 8-Valor do ICMS "|4"+; // 9-Modalidade de determinação BC ICMS ST "|"+IIF(NFE_ITEM->ST_MVA > 0, ALLTRIM(STR(NFE_ITEM->ST_MVA, 5,2)), "")+; // 10-Percentual do MVA ST "|"+; // 11-Percentual redução do MVA ST "|"+ALLTRIM(STR(NFE_ITEM->BCICST,15,2))+; // 12-Valor da BC do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->B_ICST, 5,2))+; // 13-Percentual do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->V_ICST,15,2))+; // 14-Valor do ICMS "|"+CRLF // Fechamento da TAG ELSEIF (NFE_ITEM->B_ICST > 0 .AND. NFE_ITEM->RDICST > 0) .OR. c_CST == "70" // ST C/Redução e Outros // CST - 70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária IF EMPTY(c_CST) ; c_CST := "70" ; ENDIF c_Txt += "N04|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // Código da Situação Tributária "|0"+; // Modalidade de determinação da BC do ICMS ( 0 - Margem Valor Agregado 1-Pauta (Valor) 2 = Preço Tabelado Máx. (valor) 3 -Valor da Operação ) "|"+ALLTRIM(STR(NFE_ITEM->RDICST,5,2))+; // Percentual de redução da base de cálculo "|"+ALLTRIM(STR(nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST),15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICST,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR(((nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST))/100)*NFE_ITEM->B_ICST,15,2))+; // Valor do ICMS "|"+CRLF // Fechamento da TAG nBCim += NFE_ITEM->BCICMS // nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST) nICMS += ((nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST))/100) * NFE_ITEM->B_ICST c_Txt += "N09|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // Código da Situação Tributária "|"+NFE_ITEM->MBICMS+; // Modalidade de determinação da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->RDICST,5,2))+; // Percentual da redução "|"+ALLTRIM(STR(NFE_ITEM->BCICMS,15,2))+; // Valor da BC do ICMS "|"+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+; // Aliquota do ICMS "|"+ALLTRIM(STR(NFE_ITEM->VRICMS,15,2))+; // Valor do ICMS "|"+NFE_ITEM->MBISIT+; // Modalidade de determinação da BC do ICMS ST "|0"+; // Percentual adicinado (Opcional) "|"+ALLTRIM(STR(NFE_ITEM->RDICST,5,2))+; // Percentual da redução "|"+ALLTRIM(STR(NFE_ITEM->BCICST,15,2))+; // Valor da BC do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->B_ICST,5,2))+; // Aliquota do ICMS ST "|"+ALLTRIM(STR(NFE_ITEM->V_ICST,15,2))+; // Valor do ICMS ST "|"+CRLF // Fechamento da TAG nBCst += nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST) nVRst += ((nBcIcms - ((nBcIcms / 100) * NFE_ITEM->RDICST))/100) * NFE_ITEM->B_ICST ELSE // Isento ou não tributado IF EMPTY(c_CST) ; c_CST := "41" ; ENDIF c_Txt += "N06|"+c_Orig+; // Origem da mercadoria: 0=Nacional; 1=Estrangeira importada; 2=Estrangeira adquirida no mercado interno "|"+c_CST+; // Código da Situação Tributária "|"+CRLF // Fechamento da TAG ENDIF ENDCASE ENDIF // IPI IF ! EMPTY(NFE_ITEM->DINMRO) // Se for importação não calcular - Isento c_Txt += "O"+; "|"+; // Classe de enquadramento (cigarros/bebidas) "|"+; // CNPJ do produtor (quando diferente do emitente) "|"+; // Cód. Selo controle do IPI "|"+CRLF // Quantidade de selos c_Txt += "O08|02|"+CRLF // Veja tabela ELSE IF ! EMPTY(NFE_ITEM->CST_IPI) // IPI normal c_Txt += "O"+; "|"+; // Classe de enquadramento (cigarros/bebidas) "|"+; // CNPJ do produtor (quando diferente do emitente) "|"+; // Cód. Selo controle do IPI "|"+CRLF // Quantidade de selos IF NFE_ITEM->B_IPI > 0 // Tributado pelo IPI c_Txt += "O07|"+ALLTRIM(NFE_ITEM->CST_IPI)+"|"+ALLTRIM(STR(NFE_ITEM->VR_IPI,15,2))+CRLF c_Txt += "O10|"+ALLTRIM(STR(nBcIcms,15,2))+"|"+ALLTRIM(STR(NFE_ITEM->B_IPI,5,2))+CRLF ELSE // Não tributado ou isado de IPI c_Txt += "O08|"+ALLTRIM(NFE_ITEM->CST_IPI)+CRLF ENDIF ENDIF ENDIF // Imposto de importação: P|VBC|VDespAdu|VII|VIOF| IF ! EMPTY(NFE_ITEM->DINMRO) c_Txt += "P"+; "|"+ALLTRIM(STR(NFE_ITEM->IIVRBC,15,2))+; // BC II "|"+ALLTRIM(STR(NFE_ITEM->IIDESP,15,2))+; // Desp. Aduaneiras "|"+ALLTRIM(STR(NFE_ITEM->IIVLOR,15,2))+; // Valor II "|"+ALLTRIM(STR(NFE_ITEM->IIVIOF,15,2))+; // Valor IOF "|"+CRLF // Fechamento da TAG ENDIF c_Txt += "Q|"+CRLF // PIS IF NFE_ITEM->B_PIS > 0 c_Txt += "Q02|01"+; // Operação Tributável (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)) "|"+ALLTRIM(STR(NFE_ITEM->B_PIS,15,2))+; // BC PIS "|"+ALLTRIM(STR(NFE_ITEM->A_PIS, 5,2))+; // Aliquota PIS "|"+ALLTRIM(STR(NFE_ITEM->V_PIS,15,2))+; // Valor PIS "|"+CRLF // Fechamento da TAG ELSE c_Txt += "Q04|07|"+CRLF // 07=Isento de contriubuição ENDIF c_Txt += "S|"+CRLF // COFINS IF NFE_ITEM->B_COFI > 0 c_Txt += "S02|01"+; // Operação Tributável (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)) "|"+ALLTRIM(STR(NFE_ITEM->B_COFI,15,2))+; // BC COFINS "|"+ALLTRIM(STR(NFE_ITEM->A_COFI, 5,2))+; // Aliquota COFINS "|"+ALLTRIM(STR(NFE_ITEM->V_COFI,15,2))+; // Valor COFINS "|"+CRLF // Fechamento da TAG ELSE c_Txt += "S04|07|"+CRLF // 07=Isento de contriubuição ENDIF // Cálculo no valor do imposto com base na tabela do IPPT (Lei De Olho no Imposto) // Para os CFOPs de venda ao consumidor IF ALLTRIM(ClearChar(NFE_ITEM->CFOP, {"."} )) $ "5101|5102|5103|5104|5105|5403|5405|6101|6102|6103|6104|6105|6403|6405|" nImposto += CalcIPPT(c_NCM, c_Orig, n_Vprod) nBclIPPT += n_Vprod ENDIF ELSE EXIT ENDIF NFE_ITEM->(DBSKIP(1)) END SELECT(n_InfArea) // Totais cVfret := IIF(NFE_INFO->T_FRET > 0, ALLTRIM(STR(NFE_INFO->T_FRET,15,2)), "0") cVsegu := IIF(NFE_INFO->T_SEGU > 0, ALLTRIM(STR(NFE_INFO->T_SEGU,15,2)), "0") cVoutr := IIF(NFE_INFO->T_DESP > 0, ALLTRIM(STR(NFE_INFO->T_DESP,15,2)), "0") c_Txt += "W|"+CRLF // Grupo de Totais c_Txt += "W02"+; // Grupo de valores totais referentes ao ICMS "|"+ALLTRIM(STR(nBCim,15,2))+; // Base de cálculo do ICMS "|"+ALLTRIM(STR(nICMS,15,2))+; // Valor do ICMS "|"+ALLTRIM(STR(NFE_INFO->T_BSUB,15,2))+; // Base de cálculo do ICMS ST "|"+ALLTRIM(STR(NFE_INFO->T_ISUB,15,2))+; // Valor do ICMS ST "|"+ALLTRIM(STR(nTpro,15,2))+; // Valor total dos produtos "|"+cVfret+; // Valor do frete "|"+cVsegu+; // Valor do seguro "|"+ALLTRIM(STR(_nDes,15,2))+; // Valor do desconto "|"+ALLTRIM(STR(NFE_INFO->T_VRII,15,2))+; // Valor II "|"+ALLTRIM(STR(NFE_INFO->T_IPI,15,2))+; // Valor do IPI "|"+ALLTRIM(STR(NFE_INFO->T_PIS,15,2))+; // Valor do PIS "|"+ALLTRIM(STR(NFE_INFO->T_COFI,15,2))+; // Valor do COFINS "|"+cVoutr+; // Outras despesas "|"+ALLTRIM(STR(NFE_INFO->T_TOTA,15,2))+; // Total da nfe "|"+CRLF // Fechamento da TAG nTtlNfe := NFE_INFO->T_TOTA // Transporte c_Txt += "X|"+STR(NFE_INFO->T_MFRT,1)+"|"+CRLF // 0=Por conta do emitente; 1=Por conta do destinatário c_Txt += "X03"+; // Transportador "|"+TiraAcentos(ALLTRIM(NFE_INFO->T_RAZA))+; // Nome ou Razão Social "|"+ALLTRIM(clearChar(NFE_INFO->T_IEST,{".","-"}))+; // IE "|"+TiraAcentos(ALLTRIM(NFE_INFO->T_ENDE))+; // Endereço "|"+TiraAcentos(ALLTRIM(NFE_INFO->T_ESTA))+; // UF "|"+TiraAcentos(ALLTRIM(NFE_INFO->T_CIDA))+; // Cidade "|"+CRLF // Fechamento da TAG IF ! EMPTY(NFE_INFO->T_CNPJ) IF LEN(ALLTRIM(ClearChar(NFE_INFO->T_CNPJ, {".","-","/",","}))) < 14 c_Txt += "X05|"+R_cpfLienar(NFE_INFO->T_CNPJ)+"|"+CRLF // CPF do transpotador ELSE c_Txt += "X04|"+R_CnpjLienar(NFE_INFO->T_CNPJ)+"|"+CRLF // CNPJ da Transportadora ENDIF ELSE c_Txt += "X04| |"+CRLF // CNPJ da Transportadora ENDIF c_Txt += "X26"+; // Volumes "|"+ALLTRIM(STR(IIF(NFE_INFO->T_VOLS > 0, NFE_INFO->T_VOLS, nItem)))+; // Quantidade - 15 caracteres "|"+ALLTRIM(IIF(!EMPTY(NFE_INFO->T_ESPE),NFE_INFO->T_ESPE, "ITENS"))+; // Espécie "|"+ALLTRIM(NFE_INFO->T_MARC)+; // Marca "|"+ALLTRIM(STR(NFE_INFO->T_NVOL))+; // Volume "|"+ALLTRIM(STR(NFE_INFO->T_PESL,15,3))+; // Peso bruto "|"+ALLTRIM(STR(NFE_INFO->T_PESB,15,3))+; // Peso liquido "|"+CRLF // Fechamento da TAG nTtlPar := 0 SELECT(n_DupArea) NFE_DUPL->( dbGotop() ) NFE_DUPL->(DBSETORDER(2)) _cField := "NFE_DUPL->NFENRO" IF NFE_DUPL->(DBSEEK(_NfeNr)) c_Txt += "Y|"+CRLF // Cobrança n_Par := 1 WHILE ! NFE_DUPL->( EOF() ) IF &(_cField) = _NfeNr nTtlPar += NFE_DUPL->NVALOR c_Txt += "Y07"+; // Duplicata "|"+ALLTRIM(STR(n_Par))+; // Numero da Duplicata "|"+STR(YEAR(NFE_DUPL->DVENCI),4)+"-"+STRZERO(MONTH(NFE_DUPL->DVENCI),2)+"-"+STRZERO(DAY(NFE_DUPL->DVENCI),2)+; // Vencimento - AAAA-MM-DD "|"+ALLTRIM(STR(NFE_DUPL->NVALOR,15,2))+; // Valor da Duplicata "|"+CRLF // Fechamento da TAG ELSE EXIT ENDIF n_Par ++ NFE_DUPL->( dbSkip() ) END ENDIF // Informações adicionais cVlrImp := "" IF nImposto > 0 nImpAlq := ((100/nBclIPPT)*nImposto) cVlrImp := "VALOR APROXIMADO DOS TRIBUTOS: "+ALLTRIM(TRANS(nImposto, "@E 999,999.99"))+" ("+ALLTRIM(TRANS(nImpAlq,"@E9999.99"))+"%) Fonte: IBPT. " ELSE cVlrImp := "(SEM DADO SUFICIENTE PARA CÁLCULO DO VALOR APROXIMADO DOS TRIBUTOS.) " ENDIF c_Txt += "Z||"+cVlrImp+ALLTRIM(NFE_INFO->T_INFO)+"|" cPathTxt := CurDrive()+":\"+CurDir()+"\remessa" cFile := cPathTxt+"\NFe-"+alltrim(str(_NfeNr))+".txt" IF ! FileWrite(cFile, c_Txt) o_Wait:End() RETURN NIL ENDIF o_Wait:End() IF ! l_ACBr IF MsgYesNo("Arquivo TXT criado com sucesso:"+CRLF+CRLF+; cFile+CRLF+; "NF-e número: "+ALLTRIM(STR(NFE_INFO->NFENUM))+CRLF+CRLF+; "Para transmitir, utilize o programa fornecido pelo Fisco.","TXT Criado") ENDIF ELSE MsgEnviar(cPathTxt+"\NFe-"+alltrim(str(_NfeNr))+".txt") ENDIF RETURN NIL Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted November 21, 2014 Report Share Posted November 21, 2014 Funções para emissão de comandos para o ACBrNFeMonitor via txt ou socket (TCP/IP) ///////////////////////////////////////////////////////////////////////////// // // ACBR - Funcoes Compativeis com Monitor ACBr NFe // // Autor: Jose Carlos da Rocha // Data: 24/03/2009 // Email: irochinha@itelefonica.com.br // MSN: fivolution@hotmail.com // Linguagem: xBase // Prefixo: ACBR_NFE_ // Plataformas: DOS, Windows // Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo ) // ///////////////////////////////////////////////////////////////////////////// #include "fivewin.ch" #include "fileio.ch" #include "commands.ch" #define ETX chr(3) #define CR chr(13) #define LF chr(10) Static sENDER := '' ,; SEM_ERRO := .F. ,; RET_IMP := '' Static sSOCKET *------------------------------------------------------------------------------* function ACBR_NFE_StatusServico() cCmd := "" ACBR_NFE_Comando( "NFE.StatusServico", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(30) return retorno function ACBR_NFE_CriarNFeSefaz( cTxtNFe ) cCmd := iif(cTxtNFe=nil,"",cTxtNFe) ACBR_NFE_Comando( "NFE.CriarNFeSefaz", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(45) return retorno function ACBR_NFE_ValidarNFe( cXML ) cCmd := iif(cXML=nil,"",cXML) ACBR_NFE_Comando( "NFE.ValidarNFe", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(30) return retorno function ACBR_NFE_AssinarNFe( cXML ) cCmd := iif(cXML=nil,"",cXML) ACBR_NFE_Comando( "NFE.AssinarNFe", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(30) return retorno function ACBR_NFE_EnviarNFe( cArquivo, nLote, nAssina, nImprime ) nLote := str( nLote ) nAssina := str( nAssina ) nImprime := str( nImprime ) cCmd := ["]+cArquivo+[",]+nLote+[,]+nAssina+[,]+nImprime ACBR_NFE_Comando( "NFE.EnviarNFe", cCmd ) retorno := ACBR_NFE_Retorno() return retorno function ACBR_NFE_ConsultarNFe( cNFe ) cCmd := iif(cNFe=nil,"",cNFe) ACBR_NFE_Comando( "NFE.ConsultarNFe", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(60) return retorno function ACBR_NFE_CancelarNFe( cNFe, xMotivo ) cCmd := ["]+cNFe+[","]+xMotivo+["] ACBR_NFE_Comando( "NFE.CancelarNFe", cCmd ) retorno := ACBR_NFE_Retorno(60) return retorno function ACBR_NFE_ImprimirDANFe( cXML ) cCmd := iif(cXML=nil,"",cXML) ACBR_NFE_Comando( "NFE.ImprimirDANFe", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(15) return retorno function ACBR_NFE_GerarPDF( cXML ) cCmd := iif(cXML=nil,"",cXML) ACBR_NFE_Comando( "NFE.ImprimirDanfePDF", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(15) return retorno function ACBR_NFE_CCe( cIni ) cCmd := iif(cIni=nil,"",cIni) ACBR_NFE_Comando( "NFE.CARTADECORRECAO", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(60) return retorno function ACBR_NFE_InutilizarNFe( cCNPJ, cJustificativa, nAno, nModelo, nSerie, nNumInicial, nNumFinal ) cCNPJ := iif(cCNPJ=nil,"XXXXXXXXXXXXXX",cCNPJ) cJustificativa := iif(cJustificativa=nil,"TESTE NFE",cJustificativa) nAno := str( nAno ) nModelo := str( nModelo ) nSerie := str( nSerie ) nNumInicial := str( nNumInicial ) nNumFinal := str( nNumfinal ) cCmd := ["]+cCNPJ+[","]+cJustificativa+[",]+nAno+[,]+nModelo+[,]+nSerie+[,]+nNumInicial+[,]+nNumFinal ACBR_NFE_Comando( "NFE.InutilizarNFe", cCmd ) retorno := ACBR_NFE_Retorno(60) return retorno function ACBR_NFE_CertDtVenc() cCmd := "" ACBR_NFE_Comando( "NFE.CertificadoDataVencimento", ["]+cCmd+["] ) retorno := ACBR_NFE_Retorno(10) return retorno function ACBR_NFE_Comando( cIndice, cDados ) local ret_line := "chr(13)+chr(10)" // Checar se a impressora está instalada... cPath := "C:\ACBrNFeMonitor" IF ! lIsDir(cPath) MsgInfo("O ACBrNFeMonitor não está instalado", "Aviso") RETURN NIL ENDIF cTcpIp := GetPvProfString( "ACBrNFeMonitor", "Modo_TCP", " ", "C:\ACBrNFeMonitor\ACBrNFeMonitor.ini") cIsTxt := GetPvProfString( "ACBrNFeMonitor", "Modo_TXT", " ", "C:\ACBrNFeMonitor\ACBrNFeMonitor.ini") c_Gate := GetPvProfString( "ACBrNFeMonitor", "TCP_Porta", "3436", "C:\ACBrNFeMonitor\ACBrNFeMonitor.ini") c_Ende := "" IF cTcpIp = "1" ; c_Ende := "127.0.0.1:"+c_Gate ; ENDIF IF cIsTxt = "1" ; c_Ende := "C:\ACBrNFeMonitor" ; ENDIF IF EMPTY(c_Ende) ; MsgAlert("Detectado erro de configuração no ACBrNFeMonitor","Aviso"); RETURN .F. ; ENDIF cDirDoMonitor := cPath errfile := "ENTNFE.CMD" cDados := iif(ValType(cDados)#"C","",cDados) cBuffer := cIndice + iif( len( cDados )=0,"()","(" + cDados + ")") IF cIsTxt = "1" errhandle := FCREATE(errfile) FWRITE(errhandle,cBuffer+&ret_line.) FCLOSE(errhandle) FERASE( cDirDoMonitor+"\ENTNFE.TXT" ) FERASE( cDirDoMonitor+"\SAINFE.TXT" ) COPY FILE &(errfile) TO &(cDirDoMonitor+"\"+errfile) FRENAME( cDirDoMonitor+"\"+errfile, cDirDoMonitor+"\ENTNFE.TXT" ) ELSEIF cTcpIp = "1" IF ! NFE_INIT(c_Ende) ; MsgAlert("Erro ao tentar abrir a porta de comunicação!","Aviso!") ; RETURN .F. ; ENDIF SysRefresh() IF ! NFE_ABERTA() ; RETURN .F. ; ENDIF SysRefresh() NFE_COMANDO( cBuffer ) SysRefresh() NFE_END() ENDIF return .t. function ACBR_NFE_Retorno(_Wait_) LOCAL cIsTxt := GetPvProfString( "ACBrNFeMonitor", "Modo_TXT", " ", "C:\ACBrNFeMonitor\ACBrNFeMonitor.ini") LOCAL c_Bufr DEFAULT _Wait_ := 300 // 5 MINUTOS IF _Wait_ < 30 ; _Wait_ := 30 ; ENDIF cPath := "C:\ACBrNFeMonitor" IF ! lIsDir(cPath) MsgInfo("O ACBrNFeMonitor não está instalado", "Aviso") RETURN NIL ENDIF cDirDoMonitor := cPath cNFELOG := RET_IMP if cIsTxt = "1" SysRefresh() DEFINE DIALOG o_Hold FROM 0, 0 TO 4, 54 TITLE "Espere..." o_Hold:lHelpIcon := .f. @05,05 SAY oAguarde PROMPT "Aguardando a resposta. Espere um momento..." SIZE 120, 24 PIXEL OF o_Hold UPDATE ACTIVATE DIALOG o_Hold CENTER NOWAIT do while _Wait_ > 0 SysRefresh() if file( cDirDoMonitor+"\SAINFE.TXT" ) cNFELOG := memoread( cDirDoMonitor+"\SAINFE.TXT" ) EXIT endif INKEY(1) _Wait_ -- enddo IF EMPTY(cNFELOG) ; cNFELOG := "ERRO: Sem resposta do Monitor da NF-e" ; ENDIF o_Hold:End() ENDIF c_Bufr := cNFELOG c_Linh := MEMOLINE(c_Bufr, 25, 1) if "ERRO:" $ c_Linh IF "Forbidden (403)" $ c_Bufr c_Bufr := "ERRO: WebService Consulta Status serviço: Forbidden (403)"+CRLF+CRLF+; "Causas prováveis:"+CRLF+; "O certificado digital não se encontra no período de validade."+CRLF+; "O certificado digital do cliente não é confiável ou é inválido."+CRLF+; "O certificado digital se encontra revogado."+CRLF+; "O certificado digital não foi enviado para o servidor."+CRLF+; "Muitos usuários conectados (erro raro)." ENDIF IF "The operation timed out" $ c_Bufr c_Bufr := STRTRAN(c_Bufr,"The operation timed out", "O tempo para a operação esgotou (The operation timed out).") c_Bufr := ALLTRIM(c_Bufr)+CRLF+CRLF+; "Talvez a NF-e tenha sido autorizada mas não houve retorno da SEFAZ. Consulte a NF-e"+CRLF+; "para se certificar disso. Se não constar na base da SEFAZ repita a transmissão." ENDIF IF "ERRO: Rejeicao: Uma NF-e da faixa ja esta inutilizada na Base de dados da SEFAZ" $ c_Bufr c_Bufr := "ERRO: Rejeicao: Uma NF-e da faixa ja esta inutilizada na Base de dados da SEFAZ" ENDIF SysRefresh() MsgErro(c_Bufr, 'Mensagem de erro do ACBrMonitor') endif return cNFELOG function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ ) oIni := TIni():New( _inifile_ ) if _grava_ = .t. oIni:Set( _section_, _entry_, _var_ ) endif return oIni:Get( _section_, _entry_, _var_, _var_ ) ************************************************************************ Function NFE_INIT(ENDERECO) // Abre a comunicação com o ACBrmonitor * ENDERECO -> Diretorio ( quando usando TXT) Ex: C:\ACBR\ ************************************************************************ Local P, RET := .T., TFIM, IP, PORTA, RESP if ! empty(sENDER) // J est aberto... return .t. endif SEM_ERRO := .F. sENDER := alltrim(ENDERECO) IP := '' PORTA := 0 P := at(':',sENDER) if P = 0 P := len(sENDER)+1 endif IP := substr(sENDER,1,P-1) if empty(IP) RET := .F. else PORTA := val(substr(sENDER,P+1)) if PORTA = 0 PORTA := 3434 endif inetinit() RET := .F. TFIM := Seconds() + 5 /// Tenta conectar durante 5 segundos /// do while Seconds() < TFIM .and. ! RET sSOCKET := inetconnect(IP,PORTA) RET := (ineterrorcode(sSOCKET) = 0) SysWait(0.2) enddo endif if RET InetSetTimeout( sSOCKET, 300 ) // Timeout de Recepção 3 seg // RESP := InetRecvEndBlock( sSOCKET, ETX ) RET := ('Conectado' $ RESP ) // Recebeu as boas vindas ? endif if ! RET sENDER := '' endif return RET ************************************************************************ Function NFE_COMANDO(CMD,VET_PARAM,ESPERA,TENTA) * Funcao de uso interno para enviar os comandos e * registrar os erros retornados. Exibe os erros se existirem ************************************************************************ Local REQ, RESP, TEMPOR, TINI, TFIM, BLOCO, BYTES, I, TIPO_PARAM if empty(sENDER) if ! SEM_ERRO MsgAlert('ACBrNFeMonitor n†o foi inicializado.',"Aviso") endif return '' endif DEFAULT VET_PARAM to {} ,; ESPERA to 300 ,; // 5 minutos TENTA to .t. RET_IMP := '' c_Cmmd := SUBSTR(CMD,1,AT("(",CMD)-1) SysRefresh() DEFINE DIALOG o_Hold FROM 0, 0 TO 4, 54 TITLE "Espere..." o_Hold:lHelpIcon := .f. @05,05 SAY oAguarde PROMPT 'Processando o comando: '+c_Cmmd+". Espere um momento..." SIZE 200, 24 PIXEL OF o_Hold UPDATE ACTIVATE DIALOG o_Hold CENTER NOWAIT //////// Transmitindo o comando ///////// CMD := ALLTRIM(CMD)+CRLF+"."+CRLF // Requisitos do ACBR InetSetTimeout( sSOCKET, 300 ) // Timeout de Envio 3 seg // if inetsendall( sSOCKET, CMD ) <= 0 RET_IMP := 'ERRO: Nao foi possivel transmitir dados para o ACBrMonitor|'+; '('+AllTrim(Str(InetErrorCode( sSOCKET )))+') '+; InetErrorDesc( sSOCKET ) + ETX endif TINI := Seconds() do while (right(RET_IMP,1) <> ETX) SysRefresh() BLOCO := space(64) //////// Lendo a resposta //////// InetSetTimeout( sSOCKET, 300 ) BYTES := inetrecv(sSOCKET, @BLOCO, 64) RET_IMP += left(BLOCO,BYTES) if Seconds() > (TINI + ESPERA) if ! TENTA RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+; ' segundos (TimeOut)' + ETX else if ALERT('O ACBrMonitor n†o est respondendo. '+; 'Deseja tentar novamente ?',{'SIM','NAO'}) # 1 RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+; ' segundos (TimeOut)' + ETX else TINI := Seconds() endif endif endif enddo do while right(RET_IMP,1) $ CR+LF+ETX // Remove sinalizadores do final RET_IMP := left(RET_IMP,len(RET_IMP)-1) enddo o_Hold:End() return RET_IMP ************************************************************************ Function NFE_END() // Fecha a porta da Impressora * Encerra a comunicacao com a impressora, nao precisa de parametros ************************************************************************ if ! empty(sENDER) inetsendall( sSocket, 'ACBR.bye' ) endif if sSOCKET <> NIL inetclose(sSOCKET) inetdestroy(sSOCKET) inetcleanup() SysWait(0.2) sSOCKET := NIL endif sENDER := '' return .t. ************************************************************************ Function NFE_ABERTA() // Retorna .t. se a COM ja est aberta ************************************************************************ return ! empty(sENDER) Quote Link to comment Share on other sites More sharing options...
marcioe Posted November 22, 2014 Author Report Share Posted November 22, 2014 ok amigos, muito obrigado pelas dicas. Mas tem algum que usa o XML direto. Pois o Xml é um leque maior de possibiliades. Quote Link to comment Share on other sites More sharing options...
miragerr Posted November 22, 2014 Report Share Posted November 22, 2014 Ola amigos Montei uma classe para usar a DLL da FLEXDOCS é muito mais pratico... a propria DLL monta o XML tanto para NFe como para a NFCe, voce apenas coloca os paramentros. muito pratico mesmo. O Custo atualmente é de R$ 100,00 por CNPJ. Function ProcessaNFe3g( cTipoEnvio, aProd, cChaveEnvio, nModeloNfe, aDados, nTipoNFCe ) //************************************************************************** // // aDados = 1 -> NR DO BOLETO/DAV // 2 -> Descrição da Venda CFOP local cDV := "" local nRet Local cCmd Local cSQL Local aDuplicatas, k Private aSQL DEFAULT nModeloNfe := 55 //VERSÃO 2.0 cSQL := "SELECT crt, csosn FROM afirma" aSQL := Array_Sql(cSQL,,,.f.,.f.,.f.) IF !Empty( aSQL ) cCRT := AllTrimStr(aSQL[1][1]) cCSOSN := AllTrimStr(aSQL[1][2]) IF Empty( aSQL[1][1] ) MsgStop("Esta faltando configurar CRT","Atenção...") RETU ENDIF Else MsgStop("Esta faltando configurar CRT e CSOSN","Atenção...") RETU ENDIF IF Empty( USERINFO_FIRMA ) cCmd := "Select * From afirma" IF !TemporarioSQL( cCmd, "Buscando Dados da Empresa", "SYSTEM" ) RETU ENDIF aGeralIni[001] := Pad( IIF( Empty(SYSTEM->ARFIRMA ),Space(Len(SYSTEM->ARFIRMA)), DeCrypt( SYSTEM->ARFIRMA ,"jackson" ) ), Len(SYSTEM->ARFIRMA) ) aGeralIni[114] := IIF( Empty(SYSTEM->ARFANTASIA ),"", DeCrypt( SYSTEM->ARFANTASIA,"jackson" ) ) aGeralIni[002] := IIF( Empty(SYSTEM->ARENDFIRMA ),"", DeCrypt( SYSTEM->ARENDFIRMA,"jackson" ) ) aGeralIni[003] := IIF( Empty(SYSTEM->ARBAIFIRMA ),"", DeCrypt( SYSTEM->ARBAIFIRMA,"jackson" ) ) aGeralIni[005] := IIF( Empty(SYSTEM->ARCIDFIRMA ),"", DeCrypt( SYSTEM->ARCIDFIRMA,"jackson" ) ) aGeralIni[006] := IIF( Empty(SYSTEM->ARUFDFIRMA ),"", DeCrypt( SYSTEM->ARUFDFIRMA,"jackson" ) ) aGeralIni[004] := IIF( Empty(SYSTEM->ARCEPFIRMA ),"", DeCrypt( SYSTEM->ARCEPFIRMA,"jackson" ) ) aGeralIni[007] := IIF( Empty(SYSTEM->ARFO1FIRMA ),"", DeCrypt( SYSTEM->ARFO1FIRMA,"jackson" ) ) aGeralIni[008] := IIF( Empty(SYSTEM->ARFAXFIRMA ),"", DeCrypt( SYSTEM->ARFAXFIRMA,"jackson" ) ) aGeralIni[019] := IIF( Empty(SYSTEM->ARCGCFIRMA ),"", DeCrypt( SYSTEM->ARCGCFIRMA,"jackson" ) ) aGeralIni[020] := IIF( Empty(SYSTEM->ARINSFIRMA ),"", DeCrypt( SYSTEM->ARINSFIRMA,"jackson" ) ) aGeralIni[160] := IIF( Empty(SYSTEM->ARI_MFIRMA ),"", DeCrypt( SYSTEM->ARI_MFIRMA,"jackson" ) ) aGeralIni[144] := Right( aGeralIni[002], 10 ) aGeralIni[002] := Left( aGeralIni[002], 60 ) ENDIF IF Valtype( oDlg_Nfe ) == "O" oDlg_Nfe:aControls[1]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[1]:Refresh() ENDIF SysRefresh() nTotalDesGrao := 0 nValorICMSDispensado := 0 //0-pagto à vista;1-pagto a prazo;2-outros nTpPagto := IIF( lTemCupom, 2, IIF( cTipoEnvio $ "01|03|05","0",IIF( cTipoEnvio == "02" ,1,2)) ) nSerie := nNumeroSerieNfe //0-Unica nTpNF := IIF( cTipoEnvio $ ENTRADA_PRODUTO,0,1) //0-Entrada ;1-Saida nTpImp := 1 //1-retrato ;2-paisagem nTpEmis := 1 //1-Normal ;2-Contigência // nFinalidade := IIF( NATOPERA->arfinalidade_cfop, 4, 1 ) //1-Normal ;2-Complementar;3-Ajustes;4 - Devolução/Retorno nTpAmb := IIF( Alltrim(cNomeUsuario) == "Master", 2, 1 ) //1-Produção 2-Homologação cNatureza := Subs( Pc_StrTransform( aDados[2] ), 1, 60 ) cLicenca := aGeralIni[188] oNfe := MyNFe_NFCe():New( USERINFO_UF , AllTrimStr( nTpAmb ), cCertificado,,,,cLicenca,.t.,,LocalDBF+"\SAC" ) oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() //Identificação da NFe WITH OBJECT oNfe :cNf := val( aDados[1] ) //Informar o código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e para evitar acessos indevidos da NF-e. :nMod := nModeloNfe //Modelo 55 ou 65 :nSerie := nSerie //Serie da NFe If :nMod == 55 :nNFe := val(VMNFISCA_NOTA) //Numero da NFe Else MsgGet( , "Numero da NFe/NFCe", @nNumeroNFe, , '@9' ) :nNFe := nNumeroNFe EndIf :nTpNf := nTpNF :nTpEmis := nTpEmis //informar o código da forma de emissão: //1 - Emissão normal (não em contingência); //2 - Contingência FS-IA, com impressão do DANFE em formulário de segurança; //3 - Contingência SCAN (Sistema de Contingência do Ambiente Nacional) Desativação prevista para 30/06/2014; //4 - Contingência DPEC (Declaração Prévia da Emissão em Contingência); //5 - Contingência FS-DA, com impressão do DANFE em formulário de segurança; //6 - Contingência SVC-AN (SEFAZ Virtual de Contingência do AN); //7 - Contingência SVC-RS (SEFAZ Virtual de Contingência do RS); //9 - Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e); //Nota 1: Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9. //Nota 2: SVC-AN e SVC-RS substituem o SCAN - NT 2013/007. //Geração da Chave pelo Sistema :CriaChaveAcesso_Nfe() If :Consulta_NFe() If !File( :aRetornoXml['arquivo'] ) .AND. MsgYesNo( "Esta NFe já foi enviada mais o XML não foi encontrado"+CRLF+"Gostaria de Baixar o XML ?","Atenção..." ) If !:DownLoadXml_NFe( :aRetornoXml['chave'] ) MsgStop( "Impossivel Baixar XML da "+IIF( :nMod == 55, 'NFe', 'NFCe' ),"Atenção..." ) Retu Endif Endif GerarDanfeFast( :aRetornoXml['chave'], :aRetornoXml['protocolo'], :aRetornoXml['recibo'], :aRetornoXml['arquivo'] ) Retu Endif :cNatOp := cNatureza :cMunFG := RetCodMunIBGE( Pc_StrTransform(USERINFO_CIDADE), USERINFO_UF ) :cNFref := '' :nIndPag := nTpPagto //informar o indicador da forma de pagamento: //0 - pagamento à vista; //1 - pagamento à prazo; //2 - outros. IF !lExporta .AND. !lImporta :nIdDest := IIF( USERINFO_UF == VM_UFCLI_CLIE, 1, 2 ) //Informar o identificador de local de destino da operação: Else //1 - Operação interna; :nIdDest := 3 //2 - Operação interestadual; Endif //3 - Operação com exterior. :nTpImp := IIF( :nMod == 55, 1, 4 ) //informar o formato de impressão do DANFE: //0 - Sem geração de DANFE; //1 - DANFE normal, Retrato; //2 - DANFE normal, Paisagem; //3 - DANFE Simplificado; //4 - DANFE NFC-e; //5 - DANFE NFC-e em mensagem eletrônica (o envio de mensagem eletrônica pode ser // feita de forma simultânea com a impressão do DANFE; // usar o tpImp - 5 quando esta for a única forma de disponibilização do DANFE :nTpAmb := nTpAmb //informar o código de identificação do Ambiente: //1 - Produção; //2 - Homologação //NFCe deve ser somente 1 :nFinNFe := nFinalidade //infformar o código da finalidade de emissão da NF-e: //1 - NF-e normal; //2 - NF-e complementar; //3 - NF-e de ajuste; //4 - Devolução/Retorno. //NFCe deve ser somente 1 If :nMod == 65 :nIndFinal := 1 //informar o indicador de operação com Consumidor final: Else //0 - Não; :nIndFinal := 1 //1 - Consumidor final (sempre para NFCe) EndIF //NFCe deve ser somente 1 ou 4 //Sendo que quando for 4 deve informar o TRANSPORTADOR :nIndPres := 1 //Informar o indicador de presença do comprador no estabelecimento comercial no momento da operação: //0 - Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste); //1 - Operação presencial; //2 - Operação não presencial, pela Internet; //3 - Operação não presencial, Teleatendimento; //4 - NFC-e em operação com entrega a domicílio; //9 - Operação não presencial, outros :nProcEmi := 0 //informar o código de identificação do processo de emissão da NF-e: Identificador do processo de emissão da NF-e: //0 - emissão de NF-e com aplicativo do contribuinte :cVerProc := "Ontop 4.0" If :nMod == 65 :cDhSai := NIL Endif //Tenho que adcionar IF VMNFE_ECOMPLEM // oNFe:SetValue("ide" , 'refNFe', VMNFE_COMPLEME ) ENDIF :Identifica_NFe() ***: ******** Dados do Emitente ****************************************************************** ***: :CNPJ_Emi := R_CnpjLienar(USERINFO_CNPJ) :xNome_Emi := ClearChar(USERINFO_FIRMA, { '&' } ) :xFant_Emi := ClearChar(USERINFO_FANTASIA, { '&' } ) :xLgr_Emi := ClearChar(USERINFO_ENDERECO, { '&' } ) :nro_Emi := USERINFO_NR_END :xBairro_Emi := USERINFO_BAIRRO :cMun_Emi := RetCodMunIBGE( Pc_StrTransform(USERINFO_CIDADE), USERINFO_UF ) :xMun_Emi := USERINFO_CIDADE :CEP_Emi := ClearChar(USERINFO_CEP,{"-","."}) :fone_Emi := ClearChar(USERINFO_TELEFONE ,{"(",")","-"," "} ) :IE_Emi := ClearChar(USERINFO_INSCEST ,{".","-"}) :CRT_Emi := oSystema:CRT :Emitente_NFe() ***: ******** Dados do Destinatário ****************************************************************** ***: IF !lExporta .AND. !lImporta IF Len( Alltrim(cnpj_cpf_CLIE) ) > 11 //:CNPJ_Dest := IIF( :nTpAmb == 2, '99999999000191', R_CnpjLienar(cnpj_cpf_CLIE) ) // CPF ou CNPJ :CNPJ_Dest := R_CnpjLienar(cnpj_cpf_CLIE) // CNPJ Else :CPF_Dest := R_CPFLienar(cnpj_cpf_CLIE) // CPF Endif IF RetCodMunIBGE( VMCIDCLI_CLIE , VM_UFCLI_CLIE ) == "" .AND. :nMod == 55 MsgInfo("O Municipio do Destinatário não foi encontrado","Atenção") RETU .F. Endif Else :CNPJ_Dest := '' // CPF ou CNPJ :idEstrangeiro_Dest := ClearChar( VM_CICLI_CLIE, { " " } ) //DOCUMENTO DO ESTRANGEIRO EndIF :xNome_Dest := IIF( nTpAmb == 2, 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL', Pc_StrTransform( VMNOMCLI_CLIE)+"("+cCodigo+") " ) // Razão Social :xLgr_Dest := Pc_StrTransform( VMENDCLI_CLIE ) :nro_Dest := IIF( Empty(VMNUMEND_CLIE), "S/N", Alltrim(VMNUMEND_CLIE) ) // Numero do Endereço :xBairro_Dest := VMBAICLI_CLIE // Bairro :cMun_Dest := IIF( lExporta .OR. lImporta, "9999999", RetCodMunIBGE( VMCIDCLI_CLIE , VM_UFCLI_CLIE ) ) // Código do IBGE do Municipio :xMun_Dest := Alltrim( IIF( lExporta .OR. lImporta, "EXTERIOR", VMCIDCLI_CLIE ) ) // Municipio :UF_Dest := IIF( lExporta .OR. lImporta, "EX", VM_UFCLI_CLIE ) // Estado IF lExporta .OR. lImporta :CEP_Dest := '' Else :CEP_Dest := IIF( Empty( VMCEPCLI_CLIE ), '69306000', ClearChar( VMCEPCLI_CLIE, {"-","."}) ) // CEP EndIF :cPais_Dest := IIF( lExporta .OR. lImporta, VMCDPAIS_NOTA, RetCodPaisIBGE()) //Default := Brasil // Código do IBGE do Pais :xPais_Dest := IIF( lExporta .OR. lImporta, VMNMPAIS_NOTA, "Brasil" ) // Pais :fone_Dest := ClearChar( VMTELCLI_CLIE ,{"-","(",")"," "}) // Telefone :IE_Dest := '' IF !lExporta IF :nMod == 65 // Indicador da IE do Destinatário, informar: :indIEDest_Dest := '9' //1 - Contribuinte ICMS (informar a IE do destinatário); Else //2 - Contribuinte isento de Inscrição no cadastro de Contribuintes do ICMS; If !lExporta .AND. !lImporta .AND. VMTIPCLI_CLIE == 'J' //9 - Não Contribuinte, que pode ou não possuir Inscrição Estadual no Cadastro de Contribuintes do ICMS. If Upper( Alltrim( VMINSCLI_CLIE ) ) == 'ISENTO' //Nota 1: No caso de NFC-e informar indIEDest=9 e não informar a tag IE do destinatário; :indIEDest_Dest := '9' //Nota 2: No caso de operação com o Exterior informar indIEDest=9 e não informar a tag IE do destinatário; Else //Nota 3: No caso de Contribuinte Isento de Inscrição (indIEDest=2), não informar a tag IE do destinatário. :indIEDest_Dest := '1' :IE_Dest := ClearChar( VMINSCLI_CLIE ,{".","-"} ) Endif Else :indIEDest_Dest := '9' Endif Endif Else :indIEDest_Dest := '9' Endif :IESUF_Dest := '' :IM_Dest := '' :eMail_Dest := ClearChar( VMEMAILL_CLIE ,{"-","(",")"," "} ) //email do cliente :Destinatario_NFe() IF lExporta :UFSaidaPais_export := USERINFO_UF // UF do local de embarque :xLocEmbarq_export := VMLOC_EMBARQUE // Local de embarque :Exporta_NFe() ENDIF ***: ******** Dados do Transporte ****************************************************************** ***: If :nMod == 55 //NFe If !Empty( VMCGCTRA_NOTA ) VMCGCTRA_NOTA := ClearChar( VMCGCTRA_NOTA, { '.','-','/' } ) IF Len( Alltrim(VMCGCTRA_NOTA) ) > 11 :tadora_CNPJ := R_CnpjLienar( VMCGCTRA_NOTA ) :tadora_IE := alltrim(clearChar(VMINSTRA_NOTA,{".","-"} ) ) Else :tadora_CPF := R_CnpjLienar( VMCGCTRA_NOTA ) Endif :tadora_xNome := Pc_StrTransform( VMNOMTRA_NOTA ) :tadora_xEnder := Pc_StrTransform( VMENDTRA_NOTA ) :tadora_xMun := Pc_StrTransform( VMCIDTRA_NOTA ) :tadora_UF := VMUFPTRA_NOTA :TransPortadora_Nfe() :veic_placa := clearChar(VMPLAC_TRATOR,{".","-"} ) :veic_UF := VMUF_TRATOR :veic_RNTC := VMRNTC_TRATOR :VeiculoTransporte_Nfe() :reboq_placa := clearChar( VMPLAC_DOLLY ,{".","-"} ) :reboq_UF := VMUF_DOLLY :reboq_RNTC := VMRNTC_DOLLY :ReboqueTransporte_Nfe() cLacres := Alltrim( VMLACRES_DOLLY ) :LacresTransporte_Nfe( cLacres ) :vol_qVol := VMQTDTRA_NOTA :vol_esp := VMESPTRA_NOTA :vol_marca := VMMARTRA_NOTA :vol_nVol := VMNUMTRA_NOTA :vol_pesoL := VMPBRTRA_NOTA :vol_pesoB := VMPLQTRA_NOTA :VolumesTransporte_Nfe() Endif :modFrete_transp := VMTIPFRE_NOTA :TransPortador_Nfe() IF VMNFE_EGOVERNO :xNEmp_comp := VMEMPE_GOVERNO :xCont_comp := VMCONT_GOVERNO :xPed_comp := VMPEDI_GOVERNO :Compra_Nfe() ENDIF ElseIf :nMod == 65 //NFCe :modFrete_transp := 9 If :nIndPres == 4 // :tadora_CNPJ := '00000000000191' :tadora_CPF := '19972407268' :tadora_xNome := 'Transportadora Rapida Ltda' // :tadora_IE := '240030836' :tadora_xEnder := 'Av. Dr Altino Arantes, 131 - Centro' :tadora_xMun := 'Ourinhos' :tadora_UF := 'RR' :TransPortadora_Nfe() Endif :TransPortador_Nfe() Endif END WITH /* // Carrega Itens da NFe nTotalDaNFe := 0 nTotalDescNFe := 0 nTotalDesGrao := 0 nBaseICMSNFe := 0 nValorICMSNFe := 0 nValorICMSDispensado := 0 nValorBaseICMSDispensado := 0 nValorIsentosNFe := 0 nBaseSubs := 0 nValoBaseST := 0 nValorPis := 0 nValorCoffins := 0 nTotalDoFrete := 0 nTotalDoSeguro := 0 nTotalDoOutros := 0 nTotal_II := 0 nTotal_Impostos := 0 aSoma_Liquidos := {} */ lRodapePercenIcmsSimplesNacional := .T. lRodapeIcmsIsento := .T. lRodapePisCofinsLei := .T. nTotalProdutosNFe_Simples_Nacional := 0 oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() MsgRun( "Processando itens da NFe/NFCe","Aguarde...", { || LoadItens3g( oNFe, aProd, cTipoEnvio ) } ) oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() WITH OBJECT oNFe //Carrega Duplicatas IF _FATURA_AUTOMATICA_NOTA_FISCAL .AND. BOLETOS->artpvend == '02' GeraFaturaAutoMatica( BOLETOS->arnrdoct, :vST_tIcms + :vProd_tIcms , , 0, :vST_tIcms ) Endif cCmd := "Select CONCAT( arsequen, arcontro,'-',arparcel ) AS nr_fatura, ardtvenc AS data_venc, arvrdupl AS valor, CONCAT( arsequen, arcontro ) FROM re04 WHERE CONCAT( arsequen, arcontro ) = '"+BOLETOS->arfatura+"' AND arcodcli = '"+BOLETOS->arcodcli+"'" aDuplicatas := Array_Sql( cCmd ) If !Empty( aDuplicatas ) nVal_Dup := 0 FOR k=1 TO Len( aDuplicatas ) :nDup_dup := aDuplicatas[ k, 1 ] :dVenc_dup := aDuplicatas[ k, 2 ] :vDup_dup := aDuplicatas[ k, 3 ] nVal_Dup += :vDup_dup :Duplicata_NFe() Next :nFat_cob := aDuplicatas[ 1, 4 ] :vOrig_cob := nVal_Dup :Cobranca_NFe() Endif If :nMod == 65 //Formas de Pagamentos somente para NFCe em PRODUÇÃO /* 01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros. */ cCmd := "Select artpvend, arvrvend FROM esto_53 WHERE arnrdoct = ?" aPagamentos := Array_SQL( cCmd,,{ BOLETOS->arnrdoct }) IF Empty( aPagamentos ) aPagamentos :={{ BOLETOS->artpvend, BOLETOS->arvrvend }} EndIf FOR k=1 TO Len( aPagamentos ) If aPagamentos[k,1] == '01' :tPag := '01' ElseIf aPagamentos[k,1] == '05' :tPag := '02' ElseIf aPagamentos[k,1] $ '03|25' :tPag := '03' ElseIf aPagamentos[k,1] == '02' :tPag := '05' Else :tPag := '99' Endif :vPag := aPagamentos[k,2] :Pagamento_Nfe() Next Endif END WITH // Rodapé - Informações Adicionais cDadosAdcionais := Alltrim(Pc_StrTransform( StrTran( StrTran( VMINFO_ADCIONAL, Chr(13), ';' ), Chr(10), "" ) )) IF !Empty( nTotalDesGrao ) // Desconto concedido Conforme Lei 215/98 cDadosAdcionais += ";Desconto concedido Conforme Lei 215/98;Total desconto "+cCooperativa+" R$ "+Alltrim( Trans( nTotalDesGrao,"@E 99,999,999.99" ) ) ENDIF IF cCRT == '1' .AND. oSystema:PercenIcmsSimplesNacional > 0 .AND. lRodapePercenIcmsSimplesNacional nPercenIcmsSimplesNacional := 0 IF oSystema:lPercenIcmsSimplesNacional_TotalNota nPercenIcmsSimplesNacional := Round( VMTTNFIS_NOTA * ( oSystema:PercenIcmsSimplesNacional / 100 ), 2 ) Else nPercenIcmsSimplesNacional := Round( nTotalProdutosNFe_Simples_Nacional * ( oSystema:PercenIcmsSimplesNacional / 100 ), 2 ) EndIF cDadosAdcionais += ';NFe Emitida por Empresa optante do SIMPLES NACIONAL permitindo aproveitamento de credito de;ICMS Valor R$ '+; Alltrim( Trans( nPercenIcmsSimplesNacional, "@E 99,999,999.99" ) )+" Correpondente a aliquota de "+AllTrimStr( oSystema:PercenIcmsSimplesNacional )+" %, nos termos do Art. 23 da LC 123/2006" EndIf IF !Empty( nValorICMSDispensado ) .AND. lRodapeIcmsIsento cDadosAdcionais += ';ICMS DISPENSADO DO VALOR DA NOTA FISCAL R$ '+Trans( nValorBaseICMSDispensado, "@E 99,999,999.99" )+' X 17% = ( '+Trans( nValorICMSDispensado, "@E 99,999,999.99" )+') Correspondente ao Valor do ICMS) ' EndIf cDadosAdcionais := StrTran( cDadosAdcionais, ';;',';' ) cDadosAdcionais := StrTran( cDadosAdcionais, ';;',';' ) /* a fazer For k=1 To Len( aSoma_Liquidos ) cDadosAdcionais += ";"+Pad( aSoma_Liquidos[k,1], 50 ) +" Qtd.:"+Trans( aSoma_Liquidos[k,2], "@E 999,999,999.999" )+" R$.:"+Trans( aSoma_Liquidos[k,3], "@E 999,999,999.99" ) Next */ IF oSystema:lLeiDaTransparencia .AND. !VMIMPORTACAO nPercenImposto := " ("+AlltrimStr( Round( ( oNFe:vTotTrib_ticms / ( Round( oNFe:vNF_tIcms, 2 ) ) ) * 100 , 2 ) )+"%)" // cDadosAdcionais += "Valor aprox. de Tributos R$"+AlltrimStr( oNFe:vTotTrib_ticms )+nPercenImposto EndIf oNFe:infCpl_infAdi := cDadosAdcionais oNFe:Inf_Adicionais_NFe() oNFe:ConsolidaXml_Nfe() IF Valtype( oDlg_Nfe ) == "O" oDlg_Nfe:aControls[2]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[2]:Refresh() oDlg_Nfe:aControls[3]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[3]:Refresh() ENDIF SysRefresh() oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() nRet := 0 cMenssagem := '' MemoWrit( 'Consolida_ident.xml', oNFe:oMyNfe:IdentaXML( oNFe:aRetornoXml['consolida'], @nRet, @cMenssagem ), .F. ) If oNFe:ValidaXml_Nfe() IF Valtype( oDlg_Nfe ) == "O" oDlg_Nfe:aControls[4]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[4]:Refresh() oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() ENDIF SysRefresh() nRet := 0 cMenssagem := '' MemoWrit( 'Sem_assinado_ident.xml', oNFe:oMyNfe:IdentaXML( oNFe:aRetornoXml['consolida'], @nRet, @cMenssagem ), .F. ) MemoWrit( 'assinado_ident.xml', oNFe:oMyNfe:IdentaXML( oNFe:aRetornoXml['assinado'], @nRet, @cMenssagem ), .F. ) MemoWrit( 'assinado.xml', oNFe:aRetornoXml['assinado'], .F. ) IF oNFe:Envia_NFe() MemoWrit( 'Autorizada_ident_'+AllTrimStr( oNFe:nNFe )+'.xml', oNFe:oMyNfe:IdentaXML( oNFe:aRetornoXml['autorizada'], @nRet, @cMenssagem ), .F. ) If oNFe:nMod == 65 If Alltrim(cNomeUsuario) == "Master" oSystema:End_Qrcode_Nfce := 'http://200.174.88.103:8080/nfce/servlet/qrcode' Endif oNFe:url_idToken := oSystema:Id_Csc_Nfce oNFe:url_Token := oSystema:Csc_Cli_Nfce oNfe:url_ws := oSystema:End_Qrcode_Nfce oNFe:GeraUrl_NFCe() /* ? ProcName(), oNfe:url_ws oCode := TCodeBars():New(305,305,3,3,14, oNFe:aRetornoXml['url'], 0 ) oCode:Build() oCode:SaveToBmp( 'QrCode.JPG', 2 ) oCode:End() */ cCmd := "UPDATE nota_nfce SET arcodopr = ?, arcodcli = ?, archanfe = ?, arrecnfe = ?, ardtrnfe = ?, ar_xml = ?, ar_url_qrcode = ? WHERE sr_recno = ?" Array_SQL( cCmd,,{ NATOPERA->arcodopr, BOLETOS->arcodcli, oNFe:aRetornoXml['chave'], oNFe:aRetornoXml['protocolo'], oNFe:aRetornoXml['recibo'], oNFe:aRetornoXml['autorizada'], oNfe:url_ws, oNFe:nNFe }) EndIf IF Valtype( oDlg_Nfe ) == "O" oDlg_Nfe:aControls[5]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[5]:Refresh() oDlg_Nfe:aControls[10]:Varput( Elaptime( cTime_NFe, Time() ) ) oDlg_Nfe:aControls[10]:Refresh() ENDIF SysRefresh() GerarDanfeFast( oNFe:aRetornoXml['chave'], oNFe:aRetornoXml['protocolo'], oNFe:aRetornoXml['recibo'], oNFe:aRetornoXml['arquivo'] , , , cTipoEnvio, , ,nModeloNfe, nTipoNFCe, oNFe:aRetornoXml['url'] ) ? "Autorizada com Sucesso", oNFe:aRetornoXml['recibo'], oNFe:aRetornoXml['protocolo'] Endif Else ? "Nfe não validada corretamente" Endif /* //Exportacao IF lExporta oNFe:SetValue("exporta" , "UFEmbarq" , USERINFO_UF ) // UF do local de embarque oNFe:SetValue("exporta" , "xLocEmbarq" , VMLOC_EMBARQUE ) // Local de embarque ENDIF // nTotalDeconto := IIF( _aIcms[10]+nTotalDesGrao > 0, ((nTotalDaNFe - _aIcms[10])+IIF( lTemCupom, 0, nTotalDesGrao ) ), 0 ) nTotalDeconto := nTotalDesGrao + nTotalDescNFe nTotalProdutosNFe := ( nTotalDaNFe-nTotalDeconto ) nDescontoBaseIcms := Round( nTotalProdutosNFe / (nTotalDaNFe-nTotalDeconto), 16 ) nBaseICMSNFe *= IIF( !Empty( nDescontoBaseIcms ), nDescontoBaseIcms, 1 ) nValorICMSNFe *= IIF( !Empty( nDescontoBaseIcms ), nDescontoBaseIcms, 1 ) // Totais da NF oNFe:SetValue("total" , "vBC" , nBaseICMSNFe ) // Base de Cálculo do ICMS oNFe:SetValue("total" , "vICMS" , nValorICMSNFe ) // Valor do ICMS oNFe:SetValue("total" , "vBCST" , nBaseSubs ) // Base de Cálculo do ICMS Substituição oNFe:SetValue("total" , "vST" , nValoBaseST ) // Valor do ICMS Substituição oNFe:SetValue("total" , "vProd" , nTotalDaNFe ) // Valor Total dos Produtos oNFe:SetValue("total" , "vFrete" , nTotalDoFrete ) // Valor do Frete oNFe:SetValue("total" , "vSeg" , nTotalDoSeguro ) // Valor do Seguro oNFe:SetValue("total" , "vDesc" , nTotalDeconto ) // Desconto oNFe:SetValue("total" , "vII" , nTotal_II ) // Valor Isento oNFe:SetValue("total" , "vIPI" , 0 ) // Valor do IPI oNFe:SetValue("total" , "vPIS" , nValorPis ) // Valor do PIS oNFe:SetValue("total" , "vCOFINS" , nValorCoffins ) // Valor do COFINS oNFe:SetValue("total" , "vOutro" , nTotalDoOutros ) // Outras Despesas oNFe:SetValue("total" , "vNF" , nTotalProdutosNFe+nValoBaseST+nTotalDoFrete+nTotalDoSeguro+nTotalDoOutros+IIF( oSystema:Importadora .AND. VMIMPORTACAO, (nValorPis+nValorCoffins)-nValoBaseST, 0 ) ) // Total da Nota IF oSystema:lLeiDaTransparencia oNFe:SetValue("total" , "vTotTrib" , nTotal_Impostos ) // Lei da Transparencia ENDIF VMVRICMS_NOTA := nValorICMSNFe VMTTICMS_NOTA := nBaseICMSNFe VMVRBASESUB_NOTA := nBaseSubs VMVRICMSSUB_NOTA := nValoBaseST VMVRISENTOS_NOTA := nValorIsentosNFe VMVRPIS_NOTA := nValorPis VMVRCOFINS_NOTA := nValorCoffins VMTTNFIS_NOTA := nTotalProdutosNFe+nValoBaseST+nTotalDoFrete+nTotalDoSeguro+nTotalDoOutros VMDESCONT_NF_NOTA := nTotalDeconto VMPRODUTO_NF_NOTA := nTotalDaNFe oNotaDbf:Save() BOLETOS->( SR_dBRefresh() ) BOLETOS->( dBLockRec() ) SR_BeginTransaction() REPLA BOLETOS->arvsubst_tri WITH nValoBaseST,; BOLETOS->aremisnf WITH Date() BOLETOS->( dBCommit() ) BOLETOS->( GravaMD5() ) dBCommitAll() ; SR_CommitTransaction() ; SR_EndTransaction() ; SR_dBRefresh() //Carrega Duplicatas IF _FATURA_AUTOMATICA_NOTA_FISCAL .AND. BOLETOS->artpvend == '02' GeraFaturaAutoMatica( BOLETOS->arnrdoct, nTotalProdutosNFe+nValoBaseST, , 0, nValoBaseST ) ENDIF LoadDuplicatas( oNFe ) // Rodapé - Informações Adicionais cDadosAdcionais := Alltrim(Pc_StrTransform( StrTran( StrTran( VMINFO_ADCIONAL, Chr(13), ';' ), Chr(10), "" ) )) IF !Empty( nTotalDesGrao ) // Desconto concedido Conforme Lei 215/98 cDadosAdcionais += ";Desconto concedido Conforme Lei 215/98;Total desconto "+cCooperativa+" R$ "+Alltrim( Trans( nTotalDesGrao,"@E 99,999,999.99" ) ) ENDIF IF cCRT == '1' .AND. oSystema:PercenIcmsSimplesNacional > 0 .AND. lRodapePercenIcmsSimplesNacional nPercenIcmsSimplesNacional := 0 IF oSystema:lPercenIcmsSimplesNacional_TotalNota nPercenIcmsSimplesNacional := Round( VMTTNFIS_NOTA * ( oSystema:PercenIcmsSimplesNacional / 100 ), 2 ) Else nPercenIcmsSimplesNacional := Round( nTotalProdutosNFe_Simples_Nacional * ( oSystema:PercenIcmsSimplesNacional / 100 ), 2 ) EndIF cDadosAdcionais += ';NFe Emitida por Empresa optante do SIMPLES NACIONAL permitindo aproveitamento de credito de;ICMS Valor R$ '+; Alltrim( Trans( nPercenIcmsSimplesNacional, "@E 99,999,999.99" ) )+" Correpondente a aliquota de "+AllTrimStr( oSystema:PercenIcmsSimplesNacional )+" %, nos termos do Art. 23 da LC 123/2006" EndIf IF !Empty( nValorICMSDispensado ) .AND. lRodapeIcmsIsento cDadosAdcionais += ';ICMS DISPENSADO DO VALOR DA NOTA FISCAL R$ '+Trans( nValorBaseICMSDispensado, "@E 99,999,999.99" )+' X 17% = ( '+Trans( nValorICMSDispensado, "@E 99,999,999.99" )+') Correspondente ao Valor do ICMS) ' EndIf cDadosAdcionais := StrTran( cDadosAdcionais, ';;',';' ) cDadosAdcionais := StrTran( cDadosAdcionais, ';;',';' ) For k=1 To Len( aSoma_Liquidos ) cDadosAdcionais += ";"+Pad( aSoma_Liquidos[k,1], 50 ) +" Qtd.:"+Trans( aSoma_Liquidos[k,2], "@E 999,999,999.999" )+" R$.:"+Trans( aSoma_Liquidos[k,3], "@E 999,999,999.99" ) Next IF oSystema:lLeiDaTransparencia nPercenImposto := " ("+AlltrimStr( Round( ( nTotal_Impostos / ( Round( nTotalProdutosNFe+nValoBaseST, 2 ) ) ) * 100 , 2 ) )+"%)" cDadosAdcionais += "Valor aprox. de Tributos R$"+AlltrimStr( nTotal_Impostos )+nPercenImposto EndIf oNFe:SetValue("infAdic","infCpl" , cDadosAdcionais ) // Informações Adicionais oNFe:SetValue("compra", "xPed" , BOLETOS->arnrdoct ) // 0-Emitente; 1=Destinatario cDocXml := "" IF oNFe:GerarXml( @cDocXml ) IF lMatricial RETU oNfe ENDIF IF Valtype( oDlg_Nfe ) == "O" oDlg_Nfe:aControls[2]:LoadImage( , [&LocalDBF\sac\bmp\icon_checked.bmp] ) oDlg_Nfe:aControls[2]:Refresh() Sysrefresh() ENDIF // faz validação e envio do XML para Sefaz cXmlAssinado := "" cRecibo := "" cRecebimento := "" nRet := 0 cFileXmlNFe := "" IF GetKeyState( VK_CONTROL ) IF !MsgYesNo("Continua a Emissão Desta Nota","OK" ) retu .f. ENDIF ENDIF IF EnviaSefaz2g( cDocXml, cTpAmb, Nil, oNFe:cChvAcesso, @cXmlAssinado, @cFileXmlNFe ) VMXML_NFE := cXmlAssinado oNotaDbf:Save() cChaveEnvio := oNFe:cChvAcesso GerarDanfeFast( oNFe:cChvAcesso, cRecibo, cRecebimento, cFileXmlNFe, , , cTipoEnvio ) ENDIF ENDIF */ return( .t. ) Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted November 22, 2014 Report Share Posted November 22, 2014 Uso uma classe. Os envios são por xmls #include "Fivewin.ch" #Include "TsSay.ch" FUNCTION ACBR_NFE_IMPRIMIR(f_cFileXmlName) Local oAcbrNfeMonitor, lImprimido := .F. oAcbrNfeMonitor := AcbrNFeMonitor():New() lImprimido := oAcbrNfeMonitor:AcbrNfe_ImprimirDanfe(f_cFileXmlName) oAcbrNfeMonitor:End() RETURN lImprimido /// CONFIG_TERMINAL_VARS_UPDATE() /// https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx /// https://nfe.sefaz.sp.gov.br/nfe/services/NfeStatusServico Class AcbrNFeMonitor Data oDb_Semaforo Data cComando Data cCaminhoAcbrLocal, cCaminhoAcbrRede, cCaminhoAcbrFound Data cCaminhoAcbrXmlConfigEnvioResposta Data cCaminhoAcbrConfigComandos, cCaminhoAcbrXmlConfigNormal, cCaminhoAcbrXmlConfigCancelado Data cCaminhoAcbrXmlConfigInutilizados, cCaminhoAcbrXmlConfigPdf Data nHandleFileEntrada, nHandleFileretorno Data cSefazEnvio_TpAmb, cSefazEnvio_CStat, cSefazEnvio_XMotivo, cSefazEnvio_Data, cSefazEnvio_Horas Data cSefazRetorno_NRec, cSefazRetorno_TpAmb, cSefazRetorno_CStat, cSefazRetorno_XMotivo Data cSefazNFeProtocolo, cSefazDigitoValor Data aNFesManifesto, cUltimoNSU Data aPrintersInstalados, cPrinterDefault Data lRetornoOk, cRetornoTxt Method New() Constructor Method End() Method AcbrNFe_ConsultarNFe(f_cFileXmlName) Method AcbrNFe_ConsultaNFeDest(f_cCnpj,f_cUltNSU) Method AcbrNFe_ManifestoDestinatario(f_cCnpj,f_cDanfeChave) Method AcbrNFe_EnviaComando() method AcbrNFe_EsperaResposta() Method AcbrNFe_StatusServico() Method AcbrNFe_Validar(f_cFileXmlName) Method AcbrNFe_Assinar(f_cFileXmlName) Method AcbrNFe_Transmitir(f_cFileXmlName) Method AcbrNfe_Cancelar(f_cChaveDanfe,f_cJustificativa,f_cCnpj) Method AcbrNfe_ImprimirDanfe(f_cFileXmlName) Method AcbrNFe_ImprimirDanfePdf(f_cFileXmlName) Method AcbrNfe_ImprimirEvento(f_cFileXmlEvento,f_cFileXmlNFe) Method AcbrNfe_ImprimirEventoPdf(f_cFileXmlEvento) Method AcbrNFe_DownLoadNFe(f_cCnpj,f_cChave) EndClass //----------------------------------------------------------------------------- Method New() class AcbrNFeMonitor Local cFileIniAcbr := "", cTmp := "", cFileIniPrinters := "", nCountPrn := 0, iFor := 0 ::cCaminhoAcbrConfigComandos := "C:\ACBrNFeMonitor" ::cCaminhoAcbrFound := "" ::cRetornoTxt := "" ::lRetornoOk := .F. ::aNFesManifesto := {} ::cUltimoNSU := "0" ::oDb_Semaforo := SEMAFORO_DB():New() ::oDb_Semaforo:GoTo(1471) ::cCaminhoAcbrLocal := AllTrim(::oDb_Semaforo:VarGet("FLAG_ATUAL")) ::oDb_Semaforo:GoTo(1472) ::cCaminhoAcbrRede := AllTrim(::oDb_Semaforo:VarGet("FLAG_ATUAL")) If File(::cCaminhoAcbrLocal+"\ACBrNFeMonitor.exe") ::cCaminhoAcbrFound := ::cCaminhoAcbrLocal elseif File(::cCaminhoAcbrRede+"\ACBrNFeMonitor.exe") ::cCaminhoAcbrFound := ::cCaminhoAcbrRede EndIf ::aPrintersInstalados := {} If !Empty(::cCaminhoAcbrFound) cFileIniAcbr := ::cCaminhoAcbrFound + "\ACBrNFeMonitor.ini" cTmp := ALLTRIM(GetPvProfString( "DANFE", "DecimaisValor","0", cFileIniAcbr )) If cTmp != "3" WritePProString("DANFE", "DecimaisValor","3", cFileIniAcbr ) EndIf WritePProString("ACBrNFeMonitor", "Intervalo","800", cFileIniAcbr ) ::cCaminhoAcbrXmlConfigEnvioResposta := ALLTRIM(GetPvProfString( "Geral", "PathSalvar","", cFileIniAcbr )) ::cCaminhoAcbrXmlConfigPdf := ALLTRIM(GetPvProfString( "DANFE", "PathPDF","", cFileIniAcbr )) ::cCaminhoAcbrXmlConfigNormal := ALLTRIM(GetPvProfString( "Arquivos", "PathNFe","", cFileIniAcbr )) ::cCaminhoAcbrXmlConfigCancelado := ALLTRIM(GetPvProfString( "Arquivos", "PathCan","", cFileIniAcbr )) ::cCaminhoAcbrXmlConfigInutilizados := ALLTRIM(GetPvProfString( "Arquivos", "PathInu","", cFileIniAcbr )) cFileIniPrinters := ::cCaminhoAcbrFound+"\PrinterGerente.ini" ///msginfo(cFileIniPrinters) ::aPrintersInstalados := {} Do While .T. nCountPrn ++ cTmp := GetPvProfString( "PRINTERS", "PRN_"+StrZero(nCountPrn,2),"", cFileIniPrinters ) ///msginfo(cTmp) If !Empty(cTmp) aadd(::aPrintersInstalados,cTmp) Else Exit EndIf EndDo EndIf ///msgarray(::aPrintersInstalados) ::cSefazEnvio_TpAmb := "" ::cSefazEnvio_CStat := "" ::cSefazEnvio_XMotivo := "" ::cSefazEnvio_Data := Date() ::cSefazEnvio_Horas := "" ::cSefazRetorno_NRec := "" ::cSefazRetorno_TpAmb := "" ::cSefazRetorno_CStat := "" ::cSefazRetorno_XMotivo := "" ::cSefazNFeProtocolo := "" ::cSefazDigitoValor := "" Return Self //----------------------------------------------------------------------------- Method End() class AcbrNFeMonitor ::oDb_Semaforo:End() Return Self //----------------------------------------------------------------------------- Method AcbrNFe_ConsultarNFe(f_cDanfeChave) class AcbrNFeMonitor Loca cFileXmlImprimir := "", nTmp := 0, lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" ::cComando := "NFE.ConsultarNFe('"+f_cDanfeChave+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_ConsultaNFeDest(f_cCnpj,f_cUltNSU,f_oList) class AcbrNFeMonitor Local cFileXmlImprimir := "", nTmp := 0, lRetTmp := .F. Local cTmpManifesto := Dir_Temp()+"NFeManifesto.txt" Local iFor := 0 Local cIndCont := "", cCabecalho := "", cNSU := "", aTmp := {}, cTmp := "", cChaves := "" Default f_cUltNSU := "0" ::aNFesManifesto := {} ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" //::cComando := "NFE.ConsultaNFeDest('"+f_cCnpj+"',1,0,"+AllTrim(Str(f_cUltNSU))+")" Do While .T. nTmp ++ ::cComando := "NFE.ConsultaNFeDest("+f_cCnpj+",1,0,"+AllTrim(f_cUltNSU)+")" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(.5) lRetTmp := ::AcbrNFe_EsperaResposta() Else Exit Endif If at("ERRO",::cRetornoTxt) > 0 .or. !lRetTmp Exit EndIf MemoWrit(cTmpManifesto,"[INICIAL]"+CRLF+::cRetornoTxt) ///MemoWrit(Dir_Temp()+"TxtMan"+StrZero(nTmp,3)+".txt",::cRetornoTxt) f_cUltNSU := GetPvProfString( "INICIAL", "ultNSU","0", cTmpManifesto ) ::cUltimoNSU := f_cUltNSU For Ifor := 1 To 100 cCabecalho := "RESNFE"+StrZero(iFor,3) IF At(cCabecalho,::cRetornoTxt) == 0 Exit EndIf cNSU := GetPvProfString( cCabecalho, "NSU","0", cTmpManifesto ) If cNSU != "0" aTmp := Array(20) aTmp[01] := cNSU aTmp[02] := GetPvProfString( cCabecalho, "chNFe","0", cTmpManifesto ) aTmp[03] := GetPvProfString( cCabecalho, "CNPJ","0", cTmpManifesto ) aTmp[04] := Upper(GetPvProfString( cCabecalho, "xNome","0", cTmpManifesto )) aTmp[05] := GetPvProfString( cCabecalho, "IE","0", cTmpManifesto ) aTmp[06] := cTod(GetPvProfString( cCabecalho, "dEmi","0", cTmpManifesto )) aTmp[07] := Val(GetPvProfString( cCabecalho, "tpNF","0", cTmpManifesto )) aTmp[08] := Val(StrTran(GetPvProfString( cCabecalho, "vNF","0", cTmpManifesto ),",",".")) aTmp[09] := GetPvProfString( cCabecalho, "digVal","0", cTmpManifesto ) aTmp[10] := GetPvProfString( cCabecalho, "dhRecbto","0", cTmpManifesto ) aTmp[11] := GetPvProfString( cCabecalho, "cSitNFe","0", cTmpManifesto ) aTmp[12] := GetPvProfString( cCabecalho, "cSitConf","0", cTmpManifesto ) aTmp[19] := cTod(SubStr(aTmp[10],1,10)) aTmp[20] := SubStr(aTmp[10],12) aadd(::aNFesManifesto,aTmp) cChaves += aTmp[2]+CRLF If !Hb_IsNil(f_oList) f_oList:Add(dToc(aTmp[06])+" - "+aTmp[04]) f_oList:GoBottom() f_oList:Refresh() SysRefresh() cursorwait() EndIf EndIf Next cIndCont := GetPvProfString( "INICIAL", "indCont","2", cTmpManifesto ) If cIndCont == "0" Exit EndIf EndDo //MemoWrit(Dir_Temp()+"Chaves.txt",cChaves) //xbrowse(::aNFesManifesto) ///::AcbrNFe_DownLoadNFe(f_cCnpj,aTmp[2]) Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_ManifestoDestinatario(f_cCnpj,f_cDanfeChave) Class AcbrNFeMonitor Local nConclusao := 0, lRetTmp := .F. Local cDataNow := dToc(date())+" "+ Time() // Local cDataNow := SubStr(dToc(date()),1,6)+SubStr(AllTrim(str(Year(Date()))),3)+ " " + Time() ::cComando := "NFe.EnviarEvento('" //+CRLF ::cComando += "[Evento]"+CRLF ::cComando += "idLote=2"+CRLF ::cComando += "[Evento001]"+CRLF ::cComando += "chNFe="+f_cDanfeChave+CRLF ::cComando += "cOrgao=91"+CRLF ::cComando += "CNPJ="+f_cCnpj+CRLF ::cComando += "dhEvento="+cDataNow+CRLF ::cComando += "tpEvento=210200"+CRLF ::cComando += "nSeqEvento=1"+CRLF ::cComando += "versaoEvento=1.00"+CRLF ::cComando += "descEvento=CONFIRMACAO DA OPERACAO"+CRLF ::cComando += "xCorrecao="+CRLF ::cComando += "xCondUso="+CRLF ::cComando += "nProt="+CRLF ::cComando += "xJust=')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(.5) lRetTmp := ::AcbrNFe_EsperaResposta() Endif If !lRetTmp nConclusao := -1 // Acbr não responde Else If at("ERRO",::cRetornoTxt) > 0 nConclusao := 1 // Não foi processado ElseIf at("REJEICAO",Upper(::cRetornoTxt)) > 0 .or. at("REJEIÇÃO",Upper(::cRetornoTxt)) > 0 nConclusao := 2 // Rejeitado EndIf EndIf Return nConclusao //----------------------------------------------------------------------------- Method AcbrNFe_Validar(f_cFileXml) class AcbrNFeMonitor Loca cFileXmlCopy := "", nTmp := 0, lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" If !File(f_cFileXml) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml não encontrado ou não foi gerado." Return ::lRetornoOk EndIf nTmp := RAT("\", f_cFileXml) cFileXmlCopy := ::cCaminhoAcbrXmlConfigNormal + SubStr(f_cFileXml,nTmp) lMkDir(::cCaminhoAcbrXmlConfigNormal) Copy file (f_cFileXml) to (cFileXmlCopy) ::cComando := "NFE.ValidarNFe('"+cFileXmlCopy+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_Assinar(f_cFileXmlName) class AcbrNFeMonitor Loca cFileXmlAssinar := "", nTmp := 0, lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" cFileXmlAssinar := ::cCaminhoAcbrXmlConfigNormal + "\" + Alltrim(f_cFileXmlName) If !File(cFileXmlAssinar) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml não encontrado ou não foi gerado." Return ::lRetornoOk EndIf ////Copy file (f_cFileXml) to (cFileXmlAssinar) ::cComando := "NFE.AssinarNFe('"+cFileXmlAssinar+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_Transmitir(f_cFileXmlName,f_nNumeroNFe) class AcbrNFeMonitor Local cFileXmlTransmitir := "", nTmp := 0, cTmp := "", lRetTmp := .F., cFileSefazRetorno := "" Local cGrupoNFe := "" ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" cGrupoNFe := "NFE"+M_Str(f_nNumeroNFe) cFileXmlTransmitir := ::cCaminhoAcbrXmlConfigNormal + "\" + Alltrim(f_cFileXmlName) If !File(cFileXmlTransmitir) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml não encontrado ou não foi gerado." Return ::lRetornoOk EndIf ////Copy file (f_cFileXml) to (cFileXmlTransmitir) ::cComando := "NFE.EnviarNFe('"+cFileXmlTransmitir+"',0,0,0)" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(8) lRetTmp := ::AcbrNFe_EsperaResposta(50) Endif If !lRetTmp Return .F. EndIf cFileSefazRetorno := Dir_Temp()+"SefazRet.txt" fErase(cFileSefazRetorno) Memowrit(cFileSefazRetorno,::cRetornoTxt) ::cSefazEnvio_TpAmb := ALLTRIM(GetPvProfString( "ENVIO", "TpAmb","", cFileSefazRetorno )) ::cSefazEnvio_CStat := ALLTRIM(GetPvProfString( "ENVIO", "CStat","", cFileSefazRetorno )) ::cSefazEnvio_XMotivo := ALLTRIM(GetPvProfString( "ENVIO", "XMotivo","", cFileSefazRetorno )) cTmp := ALLTRIM(GetPvProfString( "ENVIO", "DhRecbto","", cFileSefazRetorno )) ::cSefazEnvio_Data := cTod(SubStr(cTmp,1,10)) ::cSefazEnvio_Horas := SubStr(cTmp,12) ::cSefazRetorno_NRec := ALLTRIM(GetPvProfString( "RETORNO", "NRec","", cFileSefazRetorno )) ::cSefazRetorno_TpAmb := ALLTRIM(GetPvProfString( "RETORNO", "TpAmb","", cFileSefazRetorno )) ::cSefazRetorno_CStat := ALLTRIM(GetPvProfString( "RETORNO", "CStat","", cFileSefazRetorno )) ::cSefazRetorno_XMotivo := ALLTRIM(GetPvProfString( "RETORNO", "XMotivo","", cFileSefazRetorno )) ::cSefazNFeProtocolo := ALLTRIM(GetPvProfString( cGrupoNFe, "NProt","", cFileSefazRetorno )) ::cSefazDigitoValor := ALLTRIM(GetPvProfString( cGrupoNFe, "DigVal","", cFileSefazRetorno )) If At("AUTORIZADO",UPPER(::cSefazRetorno_XMotivo)) == 0 lRetTmp := .F. EndIf Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNfe_Cancelar(f_cChaveDanfe,f_cJustificativa,f_cCnpj) class AcbrNFeMonitor Loca lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" ::cComando := "NFE.CancelarNFE('"+f_cChaveDanfe+"','"+f_cJustificativa+"',"+f_cCnpj+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(5) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNfe_ImprimirDanfe(f_cFileXmlName,f_cPrinterName, f_nCopias) class AcbrNFeMonitor Local cFileXmlImprimir := "", nTmp := 0, lRetTmp := .F., iFor := 0 Default f_cPrinterName := "", f_nCopias := 1 ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" If At("\",f_cFileXmlName) == 0 cFileXmlImprimir := ::cCaminhoAcbrXmlConfigNormal + "\" + Alltrim(f_cFileXmlName) Else cFileXmlImprimir := f_cFileXmlName EndIf If !File(cFileXmlImprimir) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml não encontrado ou não foi gerado." Return ::lRetornoOk EndIf ////Copy file (f_cFileXml) to (cFileXmlImprimir) If Empty(f_cPrinterName) ::cComando := "NFE.ImprimirDanfe('"+cFileXmlImprimir+"')" Else ///::cComando := "NFE.AcbrNfe_ImprimirDanfe('"+cFileXmlImprimir+"','"+f_cPrinterName+"',"+M_Str(f_nCopias,0)+")" ::cComando := "NFE.ImprimirDanfe('"+cFileXmlImprimir+"','"+f_cPrinterName+"',1)" EndIf ::cComando := STRTRAN(::cComando,"'",CHR(34)) ///msginfo(::cComando) For iFor := 1 to f_nCopias lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(5) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Next ///If lRetTmp /// hb_idleSleep(5) /// lRetTmp := ::AcbrNFe_EsperaResposta() ///Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_ImprimirDanfePdf(f_cFileXmlName) class AcbrNFeMonitor Local cFileXmlImprimir := "", nTmp := 0, lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" ///If !File(cFileXmlImprimir) cFileXmlImprimir := ::cCaminhoAcbrXmlConfigNormal + "\" + Alltrim(f_cFileXmlName) If !File(cFileXmlImprimir) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml não encontrado ou não foi gerado." Return ::lRetornoOk EndIf ////Copy file (f_cFileXml) to (cFileXmlImprimir) ::cComando := "NFE.ImprimirDanfePdf('"+cFileXmlImprimir+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(5) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNfe_ImprimirEvento(f_cFileXmlEvento,f_cFileXmlNFe) class AcbrNFeMonitor Local lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" If !File(f_cFileXmlEvento) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml do evento não encontrado."+CRLF+ ; "Arquivo: "+f_cFileXmlEvento Return ::lRetornoOk EndIf ::cComando := "NFE.ImprimirEvento('"+f_cFileXmlEvento+"','"+f_cFileXmlNFe+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNfe_ImprimirEventoPdf(f_cFileXmlEvento) class AcbrNFeMonitor Local lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" If !File(f_cFileXmlEvento) ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Arquivo Xml do evento não encontrado."+CRLF+ ; "Arquivo: "+f_cFileXmlEvento Return ::lRetornoOk EndIf ::cComando := "NFE.ImprimirEventoPdf('"+f_cFileXmlEvento+"')" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_DownLoadNFe(f_cCnpj,f_cChave) class AcbrNFeMonitor Local cTxtNFe := "",lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" // ::cComando := "DownloadNFE('"+f_cCnpj+"','"+f_cChave+"')" ::cComando := "DownloadNFE("+f_cCnpj+","+f_cChave+")" ::cComando := STRTRAN(::cComando,"'",CHR(34)) lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp hb_idleSleep(2) lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- Method AcbrNFe_EnviaComando() class AcbrNFeMonitor Local iFor := 0 ::lRetornoOk := .F. fErase(::cCaminhoAcbrFound+"\SAINFE.TXT") For iFor := 1 To 4 ::nHandleFileEntrada := Fcreate(::cCaminhoAcbrFound+"\ENTNFE.TXT") If ::nHandleFileEntrada == -1 SysWait(.3) Else Fwrite(::nHandleFileEntrada,::cComando) FClose(::nHandleFileEntrada) EndIf Next If ::nHandleFileEntrada == -1 ::lRetornoOk := .F. ::cRetornoTxt := "Erro: Não foi possivel criar o arquivo de entrada ENTNFE.TXT" Else ::lRetornoOk := .T. EndIf Return ::lRetornoOk //----------------------------------------------------------------------------- Method AcbrNFe_EsperaResposta(f_nSecondsEspera) class AcbrNFeMonitor Local lOpen := .F., nTentativa := 0, nEsperaResposta := 0 Default f_nSecondsEspera := 20 f_nSecondsEspera := (f_nSecondsEspera * 5) nEsperaResposta := f_nSecondsEspera * 2 ::cRetornoTxt := Space(32768) hb_idleSleep( .2 ) Do While .T. nTentativa ++ if File(::cCaminhoAcbrFound+"\SAINFE.TXT") ::nHandleFileEntrada := Fopen(::cCaminhoAcbrFound+"\SAINFE.TXT",16) If ::nHandleFileEntrada == -1 hb_idleSleep( 0.2 ) else lOpen := .T. Exit EndIf Else hb_idleSleep( 0.2 ) EndIf If nTentativa > nEsperaResposta If MsgNoYes("O AcbrNFeMonitor não esta respondendo ou esta inativo."+CRLF+CRLF+; "Deseja Abortar o procedimento.",; "Atenção, Responda.") Exit EndIf EndIf EndDo ::lRetornoOk := lOpen If lOpen Fread(::nHandleFileEntrada,@::cRetornoTxt,32768) ::cRetornoTxt := rTrim(::cRetornoTxt) Else If nTentativa > 80 ::cRetornoTxt := "Erro: O tempo de limite de espera do arquivo de retorno expirou" Else ::cRetornoTxt := "Erro: Não foi possivel abrir o arquivo de retorno SAINFE.TXT" Endif Endif If ::nHandleFileEntrada > 0 FClose(::nHandleFileEntrada) EndIf If At("ERRO",UPPER(::cRetornoTxt)) > 0 ::lRetornoOk := .F. EndIf Return ::lRetornoOk //----------------------------------------------------------------------------- Method AcbrNFe_StatusServico() class AcbrNFeMonitor Local lRetTmp := .F. ::cComando := "" ::lRetornoOk := .F. ::cRetornoTxt := "" ::cComando := "NFE.StatusServico" lRetTmp := ::AcbrNFe_EnviaComando() If lRetTmp lRetTmp := ::AcbrNFe_EsperaResposta() Endif Return lRetTmp //----------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////// FUNCTION Acbr_Nfe_Monitor_Config_Printers() Local oDb_SemaforoIni := SEMAFORO_DB():New() Local cPastaAcbr := "" Local aPrinters := {}, iFor := 0, cFileIni := "" oDb_SemaforoIni:GoTo(1471) cPastaAcbr := oDb_SemaforoIni:VarGetRtrim("FLAG_ATUAL") oDb_SemaforoIni:End() If !File(cPastaAcbr+"\ACBrNFeMonitor.exe") ///msginfo(cPastaAcbr+"\ACBrNFeMonitor.exe") Return Nil EndIf cFileIni := cPastaAcbr + "\PrinterGerente.ini" fErase(cFileIni) aPrinters := aGetPrinters() For Ifor := 1 To Len(aPrinters) WritePProString( "PRINTERS", "PRN_"+StrZero(iFor,2), aPrinters[ifor], cFileIni) Next Return nil Quote Link to comment Share on other sites More sharing options...
fladimir Posted March 9, 2015 Report Share Posted March 9, 2015 Eu uso desde 2009, não tenho o q reclamar, logicamente se fosse via classe hbNFe q existe seria melhor (não dependeria de app externo). Hj faço tipo o Ariston... mas gostei da forma q o Giovany Vecchi demonstrou, vlw... []´s Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.