Jump to content
Fivewin Brasil

ref a classe do gilmer


syspel

Recommended Posts

veja se ajuada... 

#include "fivewin.ch"
#include "image.ch"
	
Function Main(cTipoAmb,cEstado,cComandoPrompt,cPar1,cPar2)
   Local oDlg,oImagemFundo
   
   Public oMenu,oBtnBar
   Public cTpAmb      := cTipoAmb  //1-Produção;2-homologação
   Public cPromptInforma:=""
   Public lExecPrompt
   Public cEstadoEmitenteNFe:=cEstado
	    Default cTpAmb:= "2"
    Default cComandoPrompt:=""
    Default lExecPrompt:=.f.
    Default cEstadoEmitenteNFe:="SP"
    
   // setando data para impressão correta no DANFE
   Set Dele On
   Set Exclusive Off
   Set Date Format "dd/mm/yyyy"
   REQUEST DBFCDX
	   RddSetDefault("DBFCDX") // Define o Rdd padrão
   
   If Empty(cComandoPrompt)
       // Abertura do Arquivos do Sistema
       AbreArquivos()
	        cEstadoEmitenteNFe:=Emi->Estado
        
       Define Dialog oDlg Title "Exemplo FlexDoc + TVoNFe" Size 600,600 TRANSPARENT 
       Define image oImagemFundo 
       oImagemFundo:LoadBmp("nfe.jpg")
       oImagemFundo:SetSize(600,600,.t.)
       Activate Dialog oDlg center ON PAINT PalBmpDraw( hDc ,15, 0, oImagemFundo:hBitmap,oImagemFundo:hPalette,oImagemFundo:nWidth(),;
                                                                      oImagemFundo:nheight(),oImagemFundo:lTransparent,oImagemFundo:nClrPane) ON INIT BuildControls(oDlg)
    Else
    
        lExecPrompt:=.t.
        DO Case
            Case Upper(cComandoPrompt)=="TXT2XML"
                fErase("EnviaNFe.RET")
                cPromptInforma:="TXT2XML - "+cPar1+" - "+cTpAmb
               UtilImportTxt(cPar1)
               fErase("BuscaNFe.RET")
               cPromptInforma:="BUSCA - "+cPar1+" - "+cTpAmb
            Case Upper(cComandoPrompt)=="BUSCA"
                RetornoSefaz(cPar1,cPar2)
            Case Upper(cComandoPrompt)=="CONSULTA"
        Endcase
    Endif
        
Return(nil)
	
//----------------------------------------------------------------------------//
// Função para geração do XML de Envio
// Não é obrigatório a utilizaçao do mesmo seguindo o mesmo critério
	Function GerarNFe()
    local cDV := ""
	    nTpPagto    := "1" //0-pagto à vista;1-pagto a prazo;2-outros
    nSerie      := "0" //0-Unica
    cTpNF       := "1" //0-Entrada;1-Saida
    cTpImp      := "1" //1-retrato;2-paisagem
    cTpEmis     := "1" //1-Normal;2-Contigência
    cFinalidade := "1" //1-Normal;2-Complementar;3-Ajustes
	    cNatureza := "VENDA MERCA ADQ/REC DE TERC EM OPER"
	    oNfe := TVoNFe():New()
	    oNFe:SetValue("ide"   , 'cUF'     , RetCodUFIBGE(Emi->Estado) )
    oNFe:SetValue("ide"   , 'cNF'     , StrZero( val("10102"),9) )
    oNFe:SetValue("ide"   , 'natOp'   , cNatureza)
    oNFe:SetValue("ide"   , 'indPag'  , nTpPagto )
    oNFe:SetValue("ide"   , 'mod'     , "55" )
    oNFe:SetValue("ide"   , 'serie'   , 0 )
    oNFe:SetValue("ide"   , 'nNF'     , 101 ) // Numero Nota Fiscal
    oNFe:SetValue("ide"   , 'dEmi'    , Date() )
    oNFe:SetValue("ide"   , 'dSaiEnt' , 0 )
    oNFe:SetValue("ide"   , 'tpNF'    , cTpNF )
    oNFe:SetValue("ide"   , 'cMunFG'  , RetCodMunIBGE(Emi->Municipio, Emi->Estado ) )
   oNFe:SetValue("ide"   , 'tpImp'   , cTpImp ) //TpAmbiente
    oNFe:SetValue("ide"   , 'tpEmis'  , cTpEmis )
    oNFe:SetValue("ide"   , 'cDV'     , cDV ) //Não informar
    oNFe:SetValue("ide"   , 'tpAmb'   , cTpAmb )
    oNFe:SetValue("ide"   , 'finNFe'  , cFinalidade )
    oNFe:SetValue("ide"   , 'procEmi' , "0")
    oNFe:SetValue("ide"   , 'verProc' , "NF-eletronica.com")
	    //Dados do Emitente
    oNFe:SetValue("emit"  , "CNPJ"    , R_CnpjLienar(Emi->CNPJ_CNPF) )                // CPF ou CNPJ 
    oNFe:Setvalue("emit"  , "xNome"   , Emi->RAZAO )                                  // Razão Social
    oNFe:SetValue("emit"  , "xFant"   , Emi->FANTASIA )                               // Nome Fantasia
    oNFe:SetValue("emit"  , "xLgr"    , Emi->ENDERECO )                               // Endereço
   oNFe:SetValue("emit"  , "nro"     , Emi->NUMERO )                                 // Número do Endereço
    oNFe:SetValue("emit"  , "xCpl"    , Emi->COMPLEMENT )                             // Complemento do Endereço
    oNFe:SetValue("emit"  , "xBairro" , Emi->BAIRRO )                                 // Bairro
    oNFe:SetValue("emit"  , "cMun"    , RetCodMunIBGE(Emi->MUNICIPIO, Emi->ESTADO) )  // Codigo do IBGE do Municipio
    oNFe:SetValue("emit"  , "xMun"    , Emi->MUNICIPIO )                              // Municipio
    oNFe:SetValue("emit"  , "UF"      , Emi->ESTADO )                                 // Estado       
    oNFe:SetValue("emit"  , "CEP"     , ClearChar(Emi->CEP,{"-"})    )                // CEP
    oNFe:SetValue("emit"  , "cPais"   , RetCodPaisIBGE() ) //Default := Brasil        // Código do IBGE do Pais
    oNFe:SetValue("emit"  , "xPais"   , "Brasil" )                                    // Pais
   oNFe:SetValue("emit"  , "fone"    , ClearChar(Emi->TELEFONE ,{"(",")","-"," "} ) )// Telefone 
   oNFe:SetValue("emit"  , "IE"      , ClearChar(Emi->IE ,{".","-"}) )               // Inscrição Estadual
	    //Dados Do destinatario
    oNFe:SetValue("dest"  , "CNPJ"    , R_CnpjLienar(Cli->CNPJ_CNPF) )                // CPF ou CNPJ 
    oNFe:SetValue("dest"  , "xNome"   , Cli->RAZAO )                                  // Razão Social
    oNFe:SetValue("dest"  , "xFant"   , Cli->FANTASIA )                               // Nome Fabtasia
    oNFe:SetValue("dest"  , "xLgr"    , Cli->ENDERECO )                               // Endereço
    oNFe:SetValue("dest"  , "nro"     , Cli->NUMERO )                                 // Numero do Endereço                        
    oNFe:SetValue("dest"  , "xCpl"    , Cli->COMPLEMENT )                             // Complemento do Endereço
    oNFe:SetValue("dest"  , "xBairro" , Cli->BAIRRO )                                 // Bairro
    oNFe:SetValue("dest"  , "cMun"    , RetCodMunIBGE(Cli->MUNICIPIO, Cli->ESTADO) )  // Código do IBGE do Municipio
    oNFe:SetValue("dest"  , "xMun"    , Cli->MUNICIPIO )                              // Municipio
    oNFe:SetValue("dest"  , "UF"      , Cli->ESTADO )                                 // Estado
    oNFe:SetValue("dest"  , "CEP"     , ClearChar( Cli->CEP, {"-"})  )                // CEP
    oNFe:SetValue("dest"  , "cPais"   , RetCodPaisIBGE()) //Default := Brasil         // Código do IBGE do Pais
    oNFe:SetValue("dest"  , "xPais"   , "Brasil" )                                    // Pais
    oNFe:SetValue("dest"  , "fone"    , ClearChar(Cli->TELEFONE ,{"-","(",")"," "}) ) // Telefone
    oNFe:SetValue("dest"  , "IE"      , ClearChar(Cli->IE ,{".","-"} ) )              // Inscrição Estadual
    oNFe:SetValue("dest"  , "ISUF"    , Cli->SUFRAMA )                                // Inscrição Suframa
	   // Carrega Itens da NFe
    LoadItens( oNFe )
	    // Totais da NF
    oNFe:SetValue("total" , "vBC"     , Dnf->BASE_ICMS  )                             // Base de Cálculo do ICMS 
    oNFe:SetValue("total" , "vICMS"   , Dnf->TOTAL_ICMS )                             // Valor do ICMS
    oNFe:SetValue("total" , "vBCST"   , Dnf->B_ICMS_ST  )                             // Base de Cálculo do ICMS Substituição 
    oNFe:SetValue("total" , "vST"     , Dnf->V_ICMS_ST  )                             // Valor do ICMS Substituição
    oNFe:SetValue("total" , "vProd"   , Dnf->TOTAL_PROD )                             // Valor Total dos Produtos
    oNFe:SetValue("total" , "vFrete"  , Dnf->VLR_FRETE  )                             // Valor do Frete
    oNFe:SetValue("total" , "vSeg"    , Dnf->VLR_SEGURO )                             // Valor do Seguro
    oNFe:SetValue("total" , "vDesc"   , Dnf->V_DESCONTO )                             // Desconto
    oNFe:SetValue("total" , "vII"     , Dnf->VLR_IMP_I  )                             // Valor Isento
    oNFe:SetValue("total" , "vIPI"    , Dnf->TOTAL_IPI  )                             // Valor do IPI
    oNFe:SetValue("total" , "vPIS"    , Dnf->VLR_PIS    )                             // Valor do PIS
    oNFe:SetValue("total" , "vCOFINS" , Dnf->VLR_COFINS )                             // Valor do COFINS 
    oNFe:SetValue("total" , "vOutro"  , Dnf->OUTRA_DESP )                             // Outras Despesas
    oNFe:SetValue("total" , "vNF"     , Dnf->TOTAL_NOTA )                             // Total da Nota
	   // Totais da NF - Transportadora
   oNFe:SetValue("transp", 'modFrete', Dnf->TIPOFRETE )                              // 0-Emitente; 1=Destinatario
   oNFe:SetValue("transp", 'CNPJ'    , R_CnpjLienar( Tra->CNPJ_CNPF ) )              // CNPJ ou CPF da Transportadora
   oNFe:SetValue("transp", 'xNome'   , Tra->RAZAO )                                  // Razão Social da Transportadora
   oNFe:SetValue("transp", 'IE'      , alltrim(clearChar(Tra->IE,{".","-"} ) ) )     // Inscrição Estadual 
   oNFe:SetValue("transp", 'xEnder'  , Tra->ENDERECO)                                // Endereço
   oNFe:SetValue("transp", 'xMun'    , Tra->MUNICIPIO)                               // Municipio
   oNFe:SetValue("veicTransp", 'UF'      , Tra->ESTADO)                                  // Estado da Transportadora
	   oNFe:SetValue("transp", "qVol" , Tra->qvol  ) // Quantidade
   oNFe:SetValue("transp", "esp"  , Tra->esp   ) // Especie
   oNFe:SetValue("transp", "marca", Tra->marca ) // Marca
   oNFe:SetValue("transp", "nVol" , Tra->nvol  ) // Numeração
   oNFe:SetValue("transp", "pesoB", Tra->pesob ) // Peso Bruto
   oNFe:SetValue("transp", "pesoL", Tra->pesol ) // Peso liquido
	   oNFe:setValue( "transp", "placa", clearChar(Tra->PLACA,{".","-"} ) )
   oNFe:setValue( "transp", "UF", Tra->PLACAUF )
	   //Carrega Duplicatas
   LoadDuplicatas( oNFe )
   
   // Rodapé - Informações Adicionais
   oNFe:SetValue("infAdic", 'infCpl' , Dnf->INFOR_ADIC )                            // Informações Adicionais
   oNFe:SetValue("compra", 'xPed' , 0)                                              //0-Emitente; 1=Destinatario
   
   
	
    if ! oNFe:ValidarStru()
       return( .f. )
    Endif
	    cDocXml := ""
    if oNFe:GerarXml( @cDocXml )
	      // faz validação e envio do do XML para Sefaz
      cXmlAssinado:=""
      EnviaSefaz(cDocXml,cTpAmb,,oNFe:cChvAcesso,@cXmlAssinado)
      oNFe:SaveXml(,cXmlAssinado, 2 )
      
      
      
    Endif
	return( .t. )
	//----------------------------------------------------------------------------//
//Rotina usada para enviar para Sefaz a NFe
Function EnviaSefaz(cDocXml,cTipoAmbiente,oNfeUtil,cChaveAcesso,cXmlAssinado)
	   cCertificado := GetPvProfString( "CONFIGURACAO", "CERTIFICADO", "", "VoNfeCertSign.Ini") 
   If oNfeUtil==Nil
      oNFeUtil  := TVoNFeUtil():New(cEstadoEmitenteNFe, cTipoAmbiente, cCertificado,,,,,.t.)
   Endif
	   if oNFeUtil == Nil
      return( .f. )
   Endif
	   If Empty(oNFEUtil:cCertificado)
	      MsgInfo("Informe um certificado Valido!","VO Informatica informa")
      oNfeUtil:End()
      Return( .f. )
	   Endif
	   WritePProString( "CONFIGURACAO", "CERTIFICADO", oNFeUtil:cCertificado, "VoNfeCertSign.Ini" )
    
   // Faz validação para NFe     
   if oNFeUtil:ValidaXml(cDocXml, 1) != 0
	      oNfeUtil:End()
      return( .f.  )
	   Endif
	   cXmlAssinado := ""
   cRecibo      := ""
	   if oNFeUtil:EnviaNFe( cDocXml, @cXmlAssinado, @cRecibo ) > 100
     
       If lExecPrompt
              // Devolve retorno para execução em prompt
           MemoWrit("EnviaNFe.RET","EXEC:"+cPromptInforma+CRLF+"STATUS:Enviado"+CRLF+"CHAVE:"+cChaveAcesso+;
                                       CRLF+"RECIBO:"+cRecibo+CRLF+"DATA:"+oNFeUtil:Recebimento)
       Else
          // guarde estas informações em banco de dados
           ? cChaveAcesso,cRecibo,oNFeUtil:Recebimento
          Endif
      
	   Endif
        
   oNfeUtil:End()
Return( .t. )   
	
//----------------------------------------------------------------------------//
//Rotina usada para gerar os itens do XML de envio
Function LoadItens( oNFe )
    local cString := ""
    local nItem := 0
	   // Classe responsável pelos Calculos
   // Esta classe não calcula dos tipos de impostos, pode ser incluído ou modificado conforme sua necessidade
    oImposto := TVOImposto():new() 
	   // Monta CodeBlock para carregas as propriedade automáticamente
   // Todo este código pode ser modificado, lembrando que apenas o método oNFe:AddItem() que vai gerar as TAGS
   // O exemplo pega as informações dos Itens da Nota Fiscal, porem, isto pode ser modificado pra pegar
   // diretamente do Cadastro de produtos, porem, eu guardo no itens, para guardar todo calculo do passado.
    bLoad := {|x|  x:nValor     := nValor,;                              // Valor do Item vendido
                  x:nIcms     := Ite->ICMS,;                   // Percentual do ICMS
                  x:nIpi      := Ite->IPI ,;                   // Percentual do  IPI
                  x:nTxRdIcms := Ite->TX_RD_ICMS,;             // Percentual Taxa de Redução de ICMS 
                  x:nIVA      := Ite->IVA_ST,;                 // Percentual do IVA
                  x:nPis      := Ite->PIS,;                    // Percentual do PIS
                  x:nCofins   := Ite->COFINS,;                 // Percentual do COFINS
                  x:lSomarIpiABaseDeIcms := Ite->B_ICMS_IPI }  // Se deve somar IPI Base de ICMS 
	    oImposto:bLoad := bLoad
	
    Ite->( dbGotop() )
    while( !Ite->(eof()) )
	        cCFiscal    := ClearChar( Ite->C_FISCAL,{"."} )  // NCM - Classificação Fiscal
        cCFop       := ClearChar(Ite->CFOP, {"."} )      //CFOP   
      nValor      := Ite->QUANTIDADE *Ite->UNITARIO    //Valor total do Item
	       // Vai calcular os impostos na classe TVoImposto
        oImposto:Calcular(.t.)
	        oItem := TVoNFeProd()
        WITH OBJECT oItem
	           :cProd    := Ite->PRODUTO                    // Código do Produto        
            :cEAN     := Ite->C_EAN13                    // Código de Barra EAN13 (13 caracteres)
            :xProd    := Ite->DESCRICAO                  // Descrição do Produto
            :NCM      := cCFiscal                        // Código da NCM
            :EXTIPI   := Ite->EX_IPI                     // Código da EX da TIPI
            :genero   := left(cCFiscal,2)                // Parte do Código da NCM
            :CFOP     := cCFOP                           // Código Fiscal de Operação do Item
            :uCom     := Ite->UNIDADE                    // Unidade do Item
            :qCom     := Ite->QUANTIDADE                 // Quantidade vendida do Item
            :vUnCom   := Ite->UNITARIO                   // Valor Unitário do Item
            :vProd    := nValor                          // Valor Total do Item
            :cEANTrib := produtos->C_EAN13               // Código de Barra EAN13 do Produto Tributado               
            :uTrib    := Ite->UNIDADE                    // Unidade Trubutado
            :qTrib    := Ite->QUANTIDADE                 // Quantidade Tributada
            :vUnTrib  := Ite->UNITARIO                   // Valor Unitário Tributado
            :vFrete   := 0                               // Valor do Frete
            :vSeg     := 0                               // Valor do Seguro
            :vDesc      := 0                               // Valor do Desconto
         
         // Especifico de Medicamentos
         // Caso você tenha cliente com controle de lote de medicamentos, precisa passar 
         // estas informações
            /*:nLote    := item_rec->LOTE_FORNC          // Número do lote do medicamento
            :qLote    := (::cDBItens)->QUANTIDADE        // Quantidade de produto no lote de medicamentos
            :dFab     := dFabricacao                     // Data de Fabricação
            :dVal     := dValidade                       // Data da Validade
            :vPMC     := nPMC                            // Preço máximo consumidor
            */
                                                   
            :orig     := left(ite->SIT_TRIB,1)            // Origem do produto (0 - Nacional 1 - Estrangeira Importação direta 2-Estrangeira Adquirida no Mercado interno)
            :cCST     := right(Ite->SIT_TRIB,2)          // Código da Situação Tributária 
            :ModBC   := Ite->MOD_B_ICMS                 // 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 )  
            :pRedBC   := oImposto:nTxRdIcms              // Taxa de Redução de BC do ICMS
            :vBC      := oImposto:nBIcms                 // Valor da da BC do ICMS
            :pIcms    := oImposto:nIcms                  // Aliquota do ICMS
            :vIcms    := oImposto:nVlrIcms               // Valor do ICMS sobre o item
            
            :cST_IPI  := Ite->S_T_IPI                     // Código da situação tributária do IPI (00 - Entrada com recuperação de crédito  49 - Outras Entradas  50-Saida tributada  99-Outras saidas 
            :vBcIPI   := oImposto:nBIpi                  // valor da Base de calculo do IPI
            :pIPI     := oImposto:nIPI                   // Aliquota IPI
         :vIPI     := oImposto:nVlrIPI                // Valor do IPI    
         
         //:cIEnq    := ""                                   // classe de enquadramento do IPI para cigarros e bebidas
            //:CNPJProd := "00000000000000"                    // CNPJ do Produtor da Mercadoria, quando diferente do emitente, somente para os casos de exportação direta ou indireta 
            //:cSelo    := ""
            //:qSelo    := ""
            :cEnq     := "999"
    
	            :ModBCST := Ite->MOD_B_I_ST                 // Modalidade de determinação da BC do ICMS ST ( 0 - Preço tabelado ou máximo sugerido 1-Lista negativa(valor) 2- Lista Positiva(valor) 3-Lista Neutra(Valor), 4-Margem Valor Agregado(%) 5-Pauta(Valor))
            :pMVAST   := oImposto:nIva                   // Percentual da margem de valor             
            :pRedBCST := 0                               // Percentual da Redução de BC do ICMS ST
            :vBCST    := oImposto:nBIcmsST               // Base de Calculo do ICMS ST
            :pICMSST  := oImposto:nIcms                  // Aliquota do imposto do ICMS ST
            :vICMSST  := oImposto:nVlrIcmsST             // Valor do ICMS ST
            
            :CST_Pis   := Ite->S_T_PIS                   // Código de situação tributária do PIS ( 01 - Operação Tributavel (Base de Cálculo = Valor da operação. Aliquota normal (cumulativo/não cumulativo)) 02 - Operação tributável (base de cálculo=valor da operação(alíquota diferenciada))
            :vBC_Pis   := oImposto:nBPis                 // Valor da Base de Cálculo do PIS
            :pPIS      := oImposto:nPis                  // Alíquita do PIS (percentual)
            :vPIS      := oImposto:nVlrPis               // Valor do  PIS
	            :CST_Cofins := Ite->S_T_COFINS               // Código de Situação tributária do COFINS ( 99 - Outras Operações )
            :vBC_Cofins := oImposto:nBCofins             // Base de Cálculo da CONFINS 
            :pCofins    := oImposto:nCofins              // Aliquota da CONFINS
            :vCofins    := oImposto:nVlrCofins           // Valor da COFINS
	        END
	        oNFe:AddItem( oItem )
	        Ite->( dbSkip() )
	    Enddo
	Return(nil)
	
//----------------------------------------------------------------------------//
//Rotina usada para gerar as duplicatas do XML de envio
Function LoadDuplicatas( oNFe )
    local cString := ""
    local nItem := 0
	   Dupl->( dbGotop() )
    while( !Dupl->(eof()) )
	        oItem := TVoNFeDupl()
        WITH OBJECT oItem
            //Faturas
            :nFat         := Dupl->Numero
            :vOrig    := Dupl->Valor
            :vLiq      := Dupl->Valor
            //Duplicatas
           :nDup     := Dupl->Numero                    // Numero da Duplicata        
            :dVenc    := Dupl->Vencimento                // Data de vencimento
            :vDup     := Dupl->Valor                     // Valor Duplicata
        END
	        oNFe:AddItem( oItem )
	        (Dupl)->( dbSkip() )
	    Enddo
	Return(nil)


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...