Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by oribeiro

  1. Pessoal,

    Eu estou programando a consulta no WebService para obtenção de informações do GTIN mas não estou acertando.

    Por favor, vejam o código abaixo e, se possível, me informem onde eu estou errando.

    Obrigado.

    ///////
    // CONSULTA WEBSERVICE: GTIN
    //
    #include "FiveWin.ch"
    function Main()
       local oWnd, oBar, oWebServer
       DEFINE WINDOW oWnd TITLE "Web Service"
       DEFINE BUTTONBAR oBar BUTTONSIZE 60,30 OF oWnd _3D
       DEFINE BUTTON OF oBar PROMPT "&Execute" ACTION ConectarSOAP()
       DEFINE BUTTON OF oBar PROMPT "&Sair"    ACTION oWnd:End()
       ACTIVATE WINDOW oWnd
    return nil
    
    //----------------------------------------------------------------------------//
    Static Function ConectarSOAP() // Função para consumir WebService
       #Include "Common.ch"  // fwh\include
       #Include "winapi.ch"  // fwh\include
       #Include "objects.ch" // fwh\include
       #include "hbXml.ch"   // fwh\include
    
       // Variáveis utilizadas //
       Local doc, http, cXmlBody, cFilename, oText, hFile, xmldoc, xmlnote, cnome, cxmlretorno, xmlnode, response
    
       CursorWait()
    
       // Abertura das funções para WebService do xHarbour //
       doc  = CreateObject( "MSXML2.DOMDocument" )
       http = CreateObject( "MSXML2.XMLHTTP" ) // Funciona também -> "Microsoft.XMLHTTP"
    
       ///////////////////////////////////////////////////////////////////
    ** // 1 - Aqui você coloca o endereço do WebService a ser consumido //
       ///////////////////////////////////////////////////////////////////
       // Exemplo:
       // http:Open( "POST" , "http://www.conectapdv.com.br/concentrador/concentrador.asmx?wsdl" , .f. )
       http:Open( "POST" , "https://dfe-servico.svrs.rs.gov.br/ws/ccgConsGTIN/ccgConsGTIN.asmx" , .f. )
    
       ///////////////////////////////////////////////////////////////////
    ** // 2 - Aqui você coloca o seu XML com a requisição = request     //
       ///////////////////////////////////////////////////////////////////
       // Exemplo:
       // cXMlBody = '<?xml version="1.0" encoding="UTF-8"?>' + ;
       // '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://dfe-servico.svrs.rs.gov.br/">'+;
       // '       <SOAP-ENV:Body>'+       ;
       // '       <WS_Busc_Projetos xmlns="http://tempuri.org/">'+;
       // '               <cIdentifica>&lt;identifica&gt;&lt;cnpj&gt;11222333000181&lt;/cnpj&gt;&lt;terminal&gt;020012&lt;/terminal&gt;&lt;autentica&gt;51131212&lt;/autentica&gt;&lt;/identifica&gt;</cIdentifica>'+;
       // '               </WS_Busc_Projetos>'+;
       // '       </SOAP-ENV:Body>'+;
       // '</SOAP-ENV:Envelope>'
       cXMlBody = ''+;
       '<?xml version="1.0" encoding="UTF-8"?>'+;
       '<xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">'+;
       '    <xs:include schemaLocation="tiposBasicosCcgConsGTIN_v1.00.xsd"/>'+;
       '    <xs:complexType name="TConsGTIN">'+       ;
       '        <xs:annotation>'+;
       '            <xs:documentation>Tipo Consulta pública Cadastro Centralizado de GTIN</xs:documentation>'+;
       '        <xs:annotation>'+;
       '        <xs:sequence>'+;
       '            <xs:element name="GTIN" type="TCodGTIN">'+;
       '                <xs:GTIN>7894900019896</xs:GTIN>'+ ;
       '            </xs:element>'+;
       '        </xs:sequence>'+;
       '        <xs:attribute name="versao" type="TVerConsGTIN" use="required"/>'+;
       '    </xs:complexType>'+;
       '</xs:schema>'
    
    /*
       cXMlBody = ''+;
       '<?xml version="1.0" encoding="UTF-8"?>'+;
       '<xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">'+;
       '    <xs:include schemaLocation="tiposBasicosCcgConsGTIN_v1.00.xsd"/>'+;
       '    <xs:complexType name="TConsGTIN">'+;
       '        <xs:annotation>'+;
       '            <xs:documentation>Tipo Consulta pública Cadastro Centralizado de GTIN</xs:documentation>'+;
       '        </xs:annotation>'+;
       '        <xs:sequence>'+;
       '            <xs:element name="GTIN" type="TCodGTIN">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Informar o código GTIN a ser consultado.</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '        </xs:sequence>'+;
       '        <xs:attribute name="versao" type="TVerConsGTIN" use="required"/>'+;
       '    </xs:complexType>'+;
       '    <xs:complexType name="TRetConsGTIN">'+;
       '        <xs:annotation>'+;
       '            <xs:documentation>Tipo Retorno da Consulta pública Cadastro Centralizado de GTIN</xs:documentation>'+;
       '        </xs:annotation>'+;
       '        <xs:sequence>'+;
       '            <xs:element name="verAplic" type="TVerAplic">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Versão da aplicação da SVRS.</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="cStat" type="TStat">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Código do Status da resposta (resultado do processamento do lote).</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="xMotivo" type="TMotivo">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Descrição literal do Status da resposta (resultado do processamento do lote).</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="dhResp" type="TDateTimeUTC">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Data e hora da resposta, no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time).</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="GTIN" type="TCodGTIN" minOccurs="0">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>(idem mensagem de entrada) Código GTIN.</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="tpGTIN" type="TTpGTIN" minOccurs="0">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Tipo do GTIN, quantidade de dígitos (8, 12, 13 ou 14).</xs:documentation>'+;
       '                </xs:annotation>'+;
       '            </xs:element>'+;
       '            <xs:element name="xProd" minOccurs="0">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Descrição do produto.</xs:documentation>'+;
       '                </xs:annotation>'+;
       '                <xs:simpleType>'+;
       '                    <xs:restriction base="TString">'+;
       '                        <xs:minLength value="2"/>'+;
       '                        <xs:maxLength value="500"/>'+;
       '                    </xs:restriction>'+;
       '                </xs:simpleType>'+;
       '            </xs:element>'+;
       '            <xs:element name="NCM" minOccurs="0">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Código do NCM (8 posições).</xs:documentation>'+;
       '                </xs:annotation>'+;
       '                <xs:simpleType>'+;
       '                    <xs:restriction base="TString">'+;
       '                        <xs:pattern value="[0-9]{8}"/>'+;
       '                    </xs:restriction>'+;
       '                </xs:simpleType>'+;
       '            </xs:element>'+;
       '            <xs:element name="CEST" minOccurs="0" maxOccurs="3">'+;
       '                <xs:annotation>'+;
       '                    <xs:documentation>Código Especificador da Substituição Tributária - CEST, que identifica a mercadoria sujeita aos regimes de  substituição tributária e de antecipação do recolhimento  do imposto.</xs:documentation>'+;
       '                </xs:annotation>'+;
       '                <xs:simpleType>'+;
       '                    <xs:restriction base="TString">'+;
       '                        <xs:pattern value="[0-9]{7}"/>'+;
       '                    </xs:restriction>'+;
       '                </xs:simpleType>'+;
       '            </xs:element>'+;
       '        </xs:sequence>'+;
       '        <xs:attribute name="versao" type="TVerConsGTIN" use="required"/>'+;
       '    </xs:complexType>'+;
       '    <xs:simpleType name="TVerConsGTIN">'+;
       '        <xs:annotation>'+;
       '            <xs:documentation>Tipo Versão do Leiaute para Consulta Pública GTIN</xs:documentation>'+;
       '        </xs:annotation>'+;
       '        <xs:restriction base="xs:token">'+;
       '            <xs:pattern value="1\.00"/>'+;
       '        </xs:restriction>'+;
       '    </xs:simpleType>'+;
       '</xs:schema>'
    */
    
       ///////////////////////////////////////////////////////////////////
    ** // 3 - Aqui você coloca a ação que o WebService deve executar    //
       ///////////////////////////////////////////////////////////////////
       // Exemplo:
       // http:SetRequestHeader( "SOAPAction" , "http://tempuri.org/WS_Busc_Projetos" )
       // http:SetRequestHeader( "Content-Type" , "text/xml" )
    
       // Funções do WebService //
       doc:LoadXML( cXmlBody )      // Carrega o request
       http:Send( doc:xml )         // Envia o request
       response = http:responseText // Recebe o response
       cFilename:="texto.xml"       // Nome do arquivo temporário
       FErase(cfilename)            // Apaga o arquivo, caso exista
    
       //Cria o arquivo temporário e armazena o XML retornado
       oText:= TTxtFile():New( cfilename )
       if oText:Open()
          oText:add(alltrim(response))
       endif
       oText:close()
    
       // Mostra o XML retornado //
       ? "XML RETORNADO:",,response
    
       // Abre o arquivo temporário
       hFile := FOpen( cFileName )
       IF hFile == -1
          MsgStop("Erro ao abrir arquivo:"+cFileName)
          Return Nil
       ENDIF
    
       // Pega o conteudo do arquivo temporário pela classe TxmlDocument() //
       xmlDoc := TXmlDocument():New( hFile )
    
       ///////////////////////////////////////////////////////////////////
    ** // 4 - Captura os dados do nó principal "WS_Busc_ProjetosResult" //
       //     que deverá ser substituído pelo seu.                      //
       ///////////////////////////////////////////////////////////////////
       xmlNode := xmlDoc:oRoot:oChild
       DO WHILE xmlNode != NIL
          cNome:=xmlNode:cName
          if cNome=='WS_Busc_ProjetosResult'
             cXMLRetorno:=xmlNode:cData
          endif
          xmlNode := xmlNode:NextInTree()
       ENDDO
       fclose(hFile) // Fecha o arquivo temporário
    
       // Mostra o conteudo do nó principal //
       ? "RETORNO DA CONSULTA:",,cXMLRetorno
    Return nil

     

  2. Tentei Alexandre, mas quando eu dou Ctrl+V numa pasta ele não cola o arquivo. Eu tentei também usar o Ctrl+V numa planilha Excel em branco mas ele retorna apenas alguns caracteres estranhos. Alguma outra sugestão para eu colocar uma planilha Excel na área de transferêcia?

  3. Eu estou planejando algo que atenderia exatamente o que o cliente quer. Sem seleção de arquivos. O que eu preciso é que o sistema coloque um arquivo na área de transferência, como se eu tivesse clicado sobre ele no explorer e escolhido copiar. Alguém já fez isso? Vi um post onde se tentou colocar uma planilha excel no ClipBoard mas não tem a solução lá.

  4. Agora eu estou com outro problema:

    Com esse comando no oQry:Query()
          WHERE cases.date BETWEEN '2022-01-01 00:00:00' AND '2022-01-12 23:59:59';
    Retornam 31 registros, sendo os dois últimos com data '2022-01-13 00:47:50'

    Usando a mesma Select no HeidiSql, retornam 29 registros corretamente dentro do período 01 a 12 de janeiro.

    Alguém teve esse mesmo problema com a classe nativa?
     

  5. Muito obrigado Aferra.
    Eu estava aguardando essa resposta com ansiedade.
    Procurei muito nos exemplos e não tinha encontrado.
    Não reconheceu o ReQuery(), mas usando um novo Query() deu certo.
    Qual é a classe que mostra os comandos nativos do SQL?
    Mais uma vez, muito obrigado

  6. Pessoal, 

    Onde o xBrowse guarda o nome do campo que foi passado para a função oCol:bEditValue := { || cDbf->code } ?

    Eu quero pegar exatamente essa expressão cDbf->code em algum objeto do xBrowse.

  7. Boa tarde amigo,

    Para obter o certificado eu faço assim:
         

          oDll:=ACBrNFe():New(pDado+"ACBrLib.ini")
          oDll:ConfigGravarValor("DFe", "SSLCryptLib",   "3") // Default=1 -> 0=cryNone 1=cryOpenSSL "3=cryWinCrypt"
          oDll:ConfigGravarValor("DFe", "SSLHttpLib",    "2") // Default=3 -> 0=httpNone 1=httpWinINet "2=httpWinHttp" 3=httpOpenSSL
          oDll:ConfigGravarValor("DFe", "SSLXmlSignLib", "4") // Defailt=4 -> 0=xsNone "4=xsLibXml2"
          ret:=oDll:ObterCertificados()



     

  8. Eu preciso de uma função que baixe o XML do próprio cliente. 

    Estou com um problema que, nas internets com instabilidade, as vezes é gerado o XML na SEFAZ mas não cria o arquivo no disco e daí o cliente precisa fazer o download do XML no site da SEFAZ e salvar na pasta do sistema. É muito chato isso! 

    Você tem alguma ideia para resolver esse problema?

×
×
  • Create New...