Jump to content
Fivewin Brasil

toya

Membros
  • Posts

    293
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by toya

  1. Aprendi e continuo aprendendo ao longo da caminhada que quase tudo é possível nesta nossa linguagem...

    O que pareça não ser possível, o Python ajuda resolver sem complicação...

    Na questão cotação do dollar, dê uma analisada aqui:
    https://dadosabertos.bcb.gov.br/dataset/dolar-americano-usd-todos-os-boletins-diarios/resource/ae69aa94-4194-45a6-8bae-12904af7e176

    https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/documentacao

    Chame no meu e-mail/whatsapp que te envio um pequeno exe que retorna o proposto na API...
     

  2. Bom dia !!!

    Alguem teria um dica de como gerar o <dest> tendo como destinatário o Banco do Brasil S/A - no DF com o CNPJ 00000000000191.
    Retorna as Rejeições:
    210 - IE do destinatario invalida
    232 - IE do destinatario nao informada

    Dados consultados no CCC:
    Nome da Empresa: BANCO DO BRASIL S.A
    UF: DF - 53
    CNPJ: 00.000.000/0001-91
    Situação CNPJ: Sem restrição
    Inscrição Estadual (IE): 809427800174
    Situação IE: Habilitado
    Tipo IE: IE Não Contribuinte (Canteiro de Obras, IE Virtual, outros)
    CNAE Principal 6432800
    Data Situação na UF: 03/11/2021

    UF do Emitente: PR

    Resultados das tentativas já efetuadas:

    --------------------------------------------------
    </enderDest>
    <indIEDest>1</indIEDest>
    <IE>809427800174</IE>

    cStat = "210"
    xMotivo = "IE do destinatario invalida"
    --------------------------------------------------
    <indIEDest>9</indIEDest>
    <IE>809427800174</IE>

    cStat = "210"
    xMotivo = "IE do destinatario invalida"
    --------------------------------------------------
    </enderDest>
    <indIEDest>9</indIEDest>

    cStat = "232"
    xMotivo = "IE do destinatario nao informada"
    --------------------------------------------------

  3. Aos interessados, a solução que encontrei:

     

    	cBase64 := alltrim( hDados["login"] ) + ":" + alltrim( hDados["senha"] )
    	cBasic := alltrim( HB_Base64Encode( cBase64, len( cBase64 ) ) )
    	cBasic := strtran( cBasic, CRLF, "" )
    	cXmlFile := memoread(cFile)
    	
    	oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
    	oHttp:Open("POST", cUrl, .f. )
    	oHTTP:SetRequestHeader( "Authorization", "Basic " + cBasic )
    	oHTTP:SetRequestHeader( "Host", cHost ) 
    	oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=" + cBoundary )
    	cTexto := '--'
    	cTexto += cBoundary
    	cTexto += CRLF
    	cTexto += 'Content-Disposition: form-data; name="XML"; filename="'+cFile+'"'
    	cTexto += CRLF
    	cTexto += 'Content-Type: application/xml'
    	cTexto += CRLF
    	cTexto += CRLF
    	cTexto += cXmlFile
    	cTexto += CRLF
    	cTexto += CRLF
    	cTexto += '--'
    	cTexto += cBoundary
    	cTexto += '--'
    	oHttp:Send( cTexto )
    	cRet  := oHttp:ResponseText

     

  4. Para quem utiliza e/ou integra vossa aplicação com uma DLL Delphi na qual é utilizada a função FormatDateTime('yymmddhhmm', Now), deve estar se deparando com um erro do tipo: <numero> is not a valid integer value.
    Adotei a seguinte solução, digo isto para quem tem acesso à recompilação da tal DLL,:
    Todo <idLote> que adota este controle sequencial via DLL será tratado como um parâmetro que será gerado pela minha aplicação.
    Isto é em razão do <idLote> ser "Número seqüencial autoincremental único para identificação do Lote." conforme reza nos MOC de alguns DFe.

    Podendo também, para quem achar util, utilizar a função abaixo para adotar como sequencial sem a exigência do "anterior + 1"...

     

    function BugAno2022Sequencial(dData, cTime)
    // #toya: 05/01/2022 - 07:00:00 - JOB#NFe - Projeto Mrb
    
    	local Result := ""
    	local n0 := 0
    	local n31122021 := 211231
    	local nDifBug := 0
    	local cDia := ""
    	local cMes := ""
    	local cAno := ""
    	local cData := ""
    	local cHora := ""
    	local cMinutos := ""
    
    	DEFAULT dData := date()
    	DEFAULT cTime := time()
    
    	cDia := strzero(day(dData), 2, 0)
    	cMes := strzero(month(dData), 2, 0)
    	cAno := strzero(year(dData), 4, 0)
    	cData := substr(cAno, 3) + cMes + cDia 
    	cHora := left(cTime, 2)
    	cMinutos := substr(cTime, 4, 2)
    
    	if dData >= ctod("01/01/2022")
    		n0 := val(cData)
    		nDifBug := n0 - n31122021
    		Result := strzero(n31122021 + nDifBug - 8869, 6, 0) + cHora + cMinutos
    	else
    		Result := strzero(val(cData), 6, 0) + cHora + cMinutos
    	endif 	
    	
    return Result 	

    Com um pedido de desculpa aos colegas, estou alterando o PRG com os devidos ajustes.

    Segue abaixo a função para efetuar o retorno de um array contendo a Data e a Hora/Minuto a que se refere o Sequencial informado...

     

    function BugAno2022RestDataHora(pcSequencial)
    // #toya: 05/01/2022 - 07:00:00 - JOB#NFe - Projeto Mrb
    
    	local Result := {ctod(""),"00:00:00"}
    	local cAux := ""
    
    	DEFAULT pcSequencial := ""
    
    	pcSequencial := alltrim(pcSequencial)
    	if len(pcSequencial) <> 10
    		msgstop("Sequencial invalido.", "AVISO")
    		return Result
    	endif	
    	cAux := left(pcSequencial, 6)
    	if cAux <= "211231"
    		Result := {ctod(substr(cAux, 5, 2) + "/" + substr(cAux, 3, 2) + "/" + "20" + left(cAux, 2)), substr(pcSequencial, 7, 2) + ":" + substr(pcSequencial, 9, 2) + ":00" }
    	else 	
    		Result := {ctod("31/12/2021") + val(cAux) - 211231, substr(pcSequencial, 7, 2) + ":" + substr(pcSequencial, 9, 2) + ":00" }
    	endif 	
    
    return Result  	

     

  5. Consegui até aqui...
    Autentica, mas não envia o arquivo...

    #Include "FiveWin.ch"
    
    function NFSe()
    
        local cFile := ""
        local cUrl:= ""
        local cBasic := ""
        local cHost := ""
        local cRet := ""
        local cAux := ""
        local oHTTP := nil
    
        cUrl := "https://treinamento.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais"
        cBasic := "MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE="
        cFile := "H:\NFSe\S_NS9_000000003-nfSe.xml"
        cHost := "treinamento.atende.net"
        oHTTP := CreateObject( "Msxml2.ServerXMLHTTP.6.0" )    
        oHTTP:Open( "POST" ,  cUrl, .f. )
        oHTTP:SetRequestHeader( "Authorization", "Basic " + cBasic )
        oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" )  
        oHTTP:SetRequestHeader( "Content-Disposition", chr(34)+"form-data; name=\"+chr(34)+"XML\"+chr(34)+"; filename="+cFile+chr(34))
        oHTTP:SetRequestHeader( "Cookie", "PHPSESSID=ocqn90l0rfmovu1d8jrojju7s5; cidade=migra_pinhais" )
        oHTTP:SetRequestHeader( "Content-Type", "text/xml" )
        oHTTP:SetRequestHeader( "Host", cHost ) 
        ohttp:Send(  )
        cRet := oHTTP:responseText
    
        cAux += memoread( "nfsetoya.prg" )
        cAux += CRLF + CRLF + CRLF
        cAux += "//" + replicate( "-", 78 )
        cAux += CRLF
        cAux += "Retorno:"
        cAux += CRLF + CRLF
        cAux += cRet
        cAux += CRLF + CRLF + CRLF
        cAux += "//" + replicate( "-", 78 )
        cAux += CRLF + CRLF
        cAux += "no Postman:"
        cAux += CRLF + CRLF
        cAux += "Code e Retorno:"
        cAux += CRLF + CRLF
        cAux += memoread( "nfsetoya_postman.txt" )
        cAux += CRLF + CRLF
        MemoWrit( "NFSetoya.txt", cAux )
        cFile := cFilePath( GetModuleFileName( GetInstance() ) ) + "NFSetoya.txt"
        WinExec( "H:\Aplicativos\Notepad++\Notepad++.exe " + cFile )
     
    return nil    
    
    
    //------------------------------------------------------------------------------
    Retorno:
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <retorno>
    	<mensagem>
    		<codigo>9999 - Arquivo XML da Nota Fiscal de Servi?Eletr?a n?enviado!</codigo>
    	</mensagem>
    </retorno>
    
    
    //------------------------------------------------------------------------------
    
    no Postman:
    
    Code e Retorno:
    
    var client = new RestClient("https://treinamento.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais");
    client.Timeout = -1;
    var request = new RestRequest(Method.POST);
    request.AddHeader("Authorization", "Basic MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE=");
    request.AddHeader("Cookie", "PHPSESSID=ocqn90l0rfmovu1d8jrojju7s5; cidade=migra_pinhais");
    request.AddFile("XML", "/H:/NFSe/S_NS9_000000003-nfSe.xml");
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);
    
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <retorno>
    	<mensagem>
    	<codigo>00209 - J� consta uma NFSe para o referido prestador de servi�o com o mesmo IDENTIFICADOR de arquivo
    	</codigo></mensagem>
    	</retorno>

     

  6. Preciso de uma ajuda na transcrição HTTP (Postman) para o Harbour:
    ambiente Homologação

     

    POST /atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais HTTP/1.1
    Host: treinamento.atende.net
    Authorization: Basic MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE=
    Cookie: PHPSESSID=7pf56uromi3p4vnrj64mi264a1; cidade=migra_pinhais
    Content-Length: 222
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="XML"; filename="/E:/JOBs/NFSe/xml_teste/S_NS9_000000001-nfSe.xml"
    Content-Type: text/xml
    (data)
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    cFile := "E:\JOBs\NFSe\xml_teste\S_NS9_000000001-nfSe.xml"
    
    doc := CreateObject( "MSXML2.DOMDocument" )
    oHTTP := CreateObject( "MSXML2.XMLHTTP" )    
    oHTTP:Open( "POST" ,  cUrl, .f. )
    oHTTP:SetRequestHeader( "Content-Type"   , "text/xml" )    
    oHTTP:SetRequestHeader( "Authorization"  , "Basic " + cBasic )
    oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" )  
    oHTTP:SetRequestHeader( "Content-Disposition", 'form-data; name="XML"; filename=' + cFile )
    http:Send()

    Estou tendo o seguinte retorno:
     

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <retorno>
    	<mensagem>
    		<codigo>9999 - Arquivo XML da Nota Fiscal de Servi?Eletr?a n?enviado!</codigo>
    	</mensagem>
    </retorno>

     

  7. Abre-se um novo espaço de oportunidades onde muitos de nós, profissionais "lapidadores de bits",  poderemos nos encaixar...
    Acesse o edital e conheça mais sobre as atribuições, perfil desejado e informações para participação no processo

    https://www.gov.br/anpd/pt-br/assuntos/noticias/faca-parte-da-equipe-da-anpd-1/edital-final-1.pdf

    O prazo é até 31/08/2021.

     

    Confesso estar mui animado com este assunto LGPD...

    Vamos ter muiiiitas conversas e noites ralando para adequar nossos Sistemas...

     

  8. Segue...
     

    #include "toya2k20.ch"
    
    //------------------------------------------------------------------------------
    //	if NFe_validar_chave( "32191205570714000825550010062282521138571606" )
    //		msginfo( "Chave correta" )
    //	else	
    //		msginfo( "Chave incorreta" )
    //	endif
    //------------------------------------------------------------------------------
    
    function NFe_validar_chave( pcChave )
    // #toya: 17/09/2020 - 20:25:01 - mrb_dfe-2020 - Release .001.001
    
    local Result := .t.
    local aChave[09]
    local cChave := ""
    local cData := dtoc( date() ) 
    local cAAMM := ""
    local cAno := ""
    local cMes := ""
    local lRetorno := .f.
    local lOk := .t.
    local i := 0
    
    DEFAULT pcChave := ""
    
    cChave := SoNumeros( pcChave )
    if len( cChave ) <> 44
    	Result := .f.
    else
    	cAAMM := substr( cData, 7, 2 ) + substr( cData, 3, 2 )
    	if substr( cChave, 5, 2 ) < substr( cAAMM, 1, 2 )
    		cMes := "\01\02\03\04\05\06\07\08\09\10\11\12\"
    	elseif substr( cChave, 5, 2 ) == substr( cAAMM, 1, 2 )
    		cMes := "\"
    		for i = 1 to val( substr( cAAMM, 3, 2 ) )
    			cMes += strzero( i, 2, 0 ) + "\"
    		next
    	else
    		Result := .f.
    	endif
    endif
    if Result
    	Result := .f.
    	cAno := "\"
    	for i = 10 to val( substr( cAAMM, 1, 2 ) )
    	  cAno += strzero( i, 2, 0 ) + "\"
    	next
    	if substr( cChave, 1, 2 ) $ "\12\27\16\13\29\23\53\32\52\21\51\50\31\15\25\41\26\22\33\24\43\11\14\42\35\28\17\"
    		if substr( cChave, 3, 2 ) $ cAno .and. substr( cChave, 5, 2 ) $ cMes
    			if ValidaCNPJ_CPF( "J", substr( cChave, 7, 14 ) )
    				if substr( cChave, 21, 2 ) == "55"
    					if ( val( substr( cChave, 23, 3 ) ) >= 0 .and.;
    					   val( substr( cChave, 23, 3 ) ) <= 899 .and.;
    					   substr( cChave, 35, 1 ) == "1" ) .or.;
    					   ( val( substr( cChave, 23, 3 ) ) >= 900 .and.;
    					   val( substr( cChave, 23, 3 ) ) <= 999 .and.;
    					   substr( cChave, 35,1 ) $ "\2\3\4\5\" )
    						if val( substr( cChave, 26, 9 ) ) > 0
    							if substr( cChave, 35, 1 ) $ "\1\2\3\4\5\"
    								if val( substr( cChave, 36, 8 ) ) > 0
    									if substr( cChave, 44, 1 ) == NFe_Modulo11( substr( cChave, 1, 43 ) )
    										Result:=.t.
    									endif
    								endif
    							endif
    						endif
    					endif
    				endif
    			endif
    		endif
    	endif
    endif
    
    return Result
    
    //------------------------------------------------------------------------------
    
    static function NFe_Modulo11( pcNumero, aSeq, nLen )
    
    local Result := "%"
    local cNumero := ""
    local nTotal := 0
    local i := 0
    
    DEFAULT aSeq := { 4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2 }
    DEFAULT nLen := 43
    
    cNumero := iif( valtype( pcNumero ) == "N", padl( alltrim( str( pcNumero, nLen ) ), nLen ), padl( pcNumero, nLen ) )
    for i = 1 to nLen
        nTotal += val( substr( cNumero, i, 1 ) ) * aSeq[i]
    next
    Result := iif( nTotal % 11 < 2, "0", str( 11 - ( nTotal % 11 ), 1 ) )
    
    return Result
    
    //------------------------------------------------------------------------------
    
    static function Sonumeros( cString, cExcecao )
    
    local Result := ""
    local i := 0
    
    DEFAULT  cExcecao := ""
    
    for i = 1 to len( cString )
    	if substr( cString, i, 1 ) $ "1234567890" .or. substr( cString, i, 1 ) $ cExcecao
    		Result += substr( cString, i, 1 )
    	endif
    next
    
    return Result
    
    //------------------------------------------------------------------------------
    
    static function ValidaCNPJ_CPF( cTipo, cDados, lMsg )
    
    local Result := .f.
    
    DEFAULT cTipo := "J"
    DEFAULT lMsg  := .t.
    
    if cTipo == "F"
    	Result := ValidarCPF( cDados, lMsg )
    else
       Result := ValidarCNPJ( cDados, lMsg )
    endif
    
    return Result
    
    //------------------------------------------------------------------------------
    
    static function ValidarCPF( cCPF, lMsg )
    
    local Result := .t.
    local i
    local j
    local soma
    local controle
    local digito
    local num
    local wCPF := iif( ValType( cCPF ) == "U", "", cCPF )
    
    DEFAULT lMsg := .t.
    
    wCPF := strtran( wCPF, ".", "" )
    wCPF := strtran( wCPF, "-", "" )
    if empty( wCPF )
    	Result := .t.
    else
    	if len( wCPF ) < 11
    		Result  := .f.
    	else
    		controle := ""
    		num = 10
    		for j = 1 to 2
    			soma=0
    			for i = 1 to 9
    				soma += ( val( substr( wCPF, i, 1 ) ) * num )
    				num--
    			next
    			if j = 2
    				soma += ( 2 * val( controle ) )
    			endif
    			digito = soma - ( int( soma / 11 ) * 11 )
    			if digito == 0 .or. digito == 1
    				controle := controle + "0"
    			else
    				controle := controle + str( 11 - digito, 1 )
    			endif
    			num := 11
    		next
    		if controle <> substr( wCPF, 10, 2 )
    			Result := .f.
    		endif
    	endif
    	if !Result
    		if lMsg
    			msginfo( "CPF Incorreto ou Digito Invalido...", "ATENCAO" )
    		endif	
    	endif
    endif
    
    return Result
    
    //------------------------------------------------------------------------------
    
    static function ValidarCNPJ( cCNPJ, lMsg )
    
    local Result := .t.
    local i
    local j
    local soma
    local controle
    local digito
    local num
    local wCNPJ := iif( valtype( cCNPJ ) == "U", "", cCNPJ )
    
    DEFAULT lMsg := .t.
    
    wCNPJ := charrem( ".-/", wCNPJ )
    if empty( wCNPJ )
    	Result := .t.
    else
    	iF len( wCNPJ ) < 14
    		Result := .f.
    	else
    		controle := ""
    		num := 5
    		for j = 1 to 2
    			soma := 0
    			for i = 1 to 12
    				soma += ( val( substr( wCNPJ, i, 1 ) ) * num )
    				num--
    				if num == 1
    					num := 9
    				endif
    			next
    			if j == 2
    				soma += ( 2 * val( controle ) )
    			endif
    			digito := soma - ( int( soma / 11 ) * 11 )
    			if digito == 0 .or. digito == 1
    				controle := controle + "0"
    			else
    				controle := controle + str( 11 - digito, 1 )
    			endif
    			num := 6
    		next
    		if controle <> substr( wCNPJ,13,2)
    			Result := .f.
    		endif
    	endif
    	if !Result
    		if lMsg
    			msginfo( "CNPJ Incorreto ou Digito Invalido..." + " [" + controle + "]" )
    		endif
    	endif
    endif
    
    return Result
    
    //------------------------------------------------------------------------------
    

     

  9. Mui grato a todos os colegas....

    ...

    Consegui resolver de uma maneira simples e lusitana:

    Na montagem da tabela com os dados para impressão criei 6 campos
    (CORCOL01, CORCOL02, CORCOL03, CORCOL04, CORCOL05, CORCOL06), onde
    1=cor azul ($FF0000), 2=cor vermelha ($0000FF) e 3=cor preta ($000000).

    Na aba "Código->Linguagem: PascalScript:
     

    begin
        if (<DBFFR3."CORCOL01"> = 1) then LinhaDetalhe072.Font.Color := $FF0000;  
        if (<DBFFR3."CORCOL01"> = 2) then LinhaDetalhe072.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL01"> = 3) then LinhaDetalhe072.Font.Color := $000000;           
    
        if (<DBFFR3."CORCOL02"> = 3) then LinhaDetalhe082.Font.Color := $000000;           
        if (<DBFFR3."CORCOL02"> = 2) then LinhaDetalhe082.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL02"> = 1) then LinhaDetalhe082.Font.Color := $FF0000;
    
        if (<DBFFR3."CORCOL03"> = 1) then LinhaDetalhe092.Font.Color := $FF0000;  
        if (<DBFFR3."CORCOL03"> = 2) then LinhaDetalhe092.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL03"> = 3) then LinhaDetalhe092.Font.Color := $000000;           
    
        if (<DBFFR3."CORCOL04"> = 1) then LinhaDetalhe102.Font.Color := $FF0000;  
        if (<DBFFR3."CORCOL04"> = 2) then LinhaDetalhe102.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL04"> = 3) then LinhaDetalhe102.Font.Color := $000000;           
    
        if (<DBFFR3."CORCOL05"> = 1) then LinhaDetalhe112.Font.Color := $FF0000;  
        if (<DBFFR3."CORCOL05"> = 2) then LinhaDetalhe112.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL05"> = 3) then LinhaDetalhe112.Font.Color := $000000;           
    
        if (<DBFFR3."CORCOL06"> = 1) then LinhaDetalhe122.Font.Color := $FF0000;  
        if (<DBFFR3."CORCOL06"> = 2) then LinhaDetalhe122.Font.Color := $0000FF;  
        if (<DBFFR3."CORCOL06"> = 3) then LinhaDetalhe122.Font.Color := $000000;           
    end.
    

     

  10.  

    TOYA 
    Exatamente o que ocorre não sei te dizer mas, não funciona !!!
    Entrei em contato com a flexdocs e a resposta que obtive foi essa : 

     

    Data: 25-03-2019 11:27:57
    Nome: LUIZ ANTONIO DE OLIVEIRA
    E-mail: luizantoniooliveira (at) hotmail (dot) com
    produto: NFe_Util (Nota Fiscal eletrônica)
    ambiente: Windows 7
    linguagem: xHarbour

    Mensagem:

    BOM DIA 
    EU RODA A NFCE NO ESTADO DE SAO PAULO 
    NO MATO GROSSO E NO MATO GROSSO DO SUL
    SÓ QUE NO MATO GROSSO DO SUL EU TIVE QUE USAR A UNIMAKE

    VOCES TERIAM UMA SOLUÇÃO PARA O MATO GROSSO DO SUL ???
     

    Data: 25-03-2019 11:38:50
    Nome: Equipe de Suporte

    Mensagem:

     

    Prezado Sr. LUIZ ANTONIO DE OLIVEIRA,

    Não temos, e não há previsão de implementação.

    Atenciosamente.,

    Equipe de Suporte FlexDocs

    =>Importante:

    Alteração no leiaute da NF-e da NT2018/005 http://flexdocs.com.br/guianfe/guiaAtualizacao.NT2018005.html devem ser implementadas até 07/05/2019.

    www.facebook.com/flexdocs

    flx.png

    Luiz, exatamente isto...
    Lembro-me que quando desenvolvia NFCe para o RJ me informaram basicamente o mesmo, que a FlexDocs não tinha intenções de atender a NFCe,,,

    ...

    Data: 31-08-2017 19:08:32
    Nome: Equipe de Suporte

    Mensagem:

     

    Prezado Sr. Elcio Carlos,

    Não temos uma DLL para a NFC-e, o que acontece é que a DLL pode ser utilizada para consumir o WS da NFC-e no que for compatível com a NF-e, por conta e risco do usuário.

    ...

  11.  

    voce usou DLL
    ou consumo https ???
    ESTA FUNCIONANDO  o que me diz... ???


    é que ESTOU precisando achar uma solução mais SEGURA pra a NFCe no Mato grosso do sul
    pois a FLEXdocs não funciona la
    e O UNIMAKE com troca de arquivos as vezes da uns PROBLEMAS...
     

    Boa tarde Luiz !!!
    Fiquei um pouco assustado com o que reportastes sobre FlexDocs x MS...
    Terias como detalhar quais as dificuldades foram encontradas neste caso (MS) ?...

     

  12. ajustado:

    function NFe_CSRT()

    local Result := .t.
    local cIdCSRT := ""
    local cCSRT := ""
    local cChaveNFe := ""
    local cHashCSRT := ""
    local cBase64 := ""

    cIdCSRT := "01"
    cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
    cChaveNFe := "41180678393592000146558900000006041028190697"
    cHashCSRT := hb_sha1( cCSRT + cChaveNFe )

    msg_OK_titulo( 'cIdCSRT := "01"' + CRLF + 'cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"' + CRLF + 'cChaveNFe := "41180678393592000146558900000006041028190697"' + CRLF + 'cHashCSRT := hb_sha1( cCSRT + cChaveNFe )', "Hash do Código de Segurança do Responsável Técnico (CSRT)" )    
    cBase64 := HB_Base64Encode( HexToSTr( cHashCSRT ), 20 )
    msg_OK_titulo( "<idCSRT>01</idCSRT>" + CRLF + "<hashCSRT>" + cBase64 + "</hashCSRT>", "Hash do Código de Segurança do Responsável Técnico (CSRT)" )

    return Result

     

     

  13. function NFe_CSRT()
    // #toya: 01/02/2019 - 15:23:23 - bnpx_gxn-2019 - Release .001.001
    
    local Result := .t.
    local cIdCSRT := ""
    local cCSRT := ""
    local cChaveNFe := ""
    local cHashCSRT := ""
    
    // Identificador do CSRT utilizado para montar o hash do CSRT
    cIdCSRT := "01" 
    
    // O CSRT será um código alfanumérico (de 16 a 36 bytes) de conhecimento apenas
    //	da SEFAZ do emitente e da empresa responsável pelo sistema emissor de DFe.
    //	O conceito é bastante similar ao código CSC da NFCe
    cCSRT := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"	// 
    
    cChaveNFe := "41180678393592000146558900000006041028190697"
    
    // O hashCSRT é o resultado da função hash (SHA-1 – Base64) do CSRT fornecido pelo fisco mais a Chave de Acesso da NFe.
    cHashCSRT := hb_sha1( cCSRT + cChaveNFe )	  
    
    return Result
    

    Atenção: dados acima ficticios...

×
×
  • Create New...