domingo, 1 de agosto de 2021

DICAS 3377 - WINDEV WEBDEV MOBILE - Assinar xml Sefaz com certificado A1 ou A3 em Windev - NFeDistribuicaoDFe - Parte 8 - Curso Webservice - 44





https://youtu.be/dA6a6eYCKAA




Bom Dia Boa Tarde Boa Noite

Mande um email pedido para receber todas notificaçoes dos videos 

==============================================================

Seja Membro do Canal e tenha direito a consultorias com precos diferenciados
https://www.youtube.com/channel/UCQGPHrppG5XKoRbeOIgLJEA/join
Beneficios Membros: 
     Skype Privado
     Sugerir ou pedir Videos
     Valroes de consultorias com precos acesiveis
     Pedir para eu refazer uma exemplo versao inferior
     Quero Refazer meu sistema no windev, onde comecar?
     Como fazer uma proteção on-line do seu sistema ?
     Meu projeto será grande, como devo fazer?

==============================================================


Esse Video vai estrear as 10:00 do dia 04/08/2021

DICAS 3377 - WINDEV WEBDEV MOBILE - NFeDistribuicaoDFe - Parte 8 - Assinar xml Sefaz com certificado A1 ou A3 - Curso Webservice - 44







Fonte do Projeto no Repositorio WINDEV 



ASSUNTOS

00:00 Introducao
00:43 Foi criado 3 campos novos no cadastro de empresa
01:35 Mostrando o codigo seleciona um certificado
02:08 Vamos entrar no codigo do assinar_Xml e acrescentar para receber parametro do arquivo e senha
02:44 Vamos criar a procedure assinar_xml_serial e copiar conteudo assinar_Xml
03:31 Vamos alterar o codigo do assinar certificado
03:44 Carrega Store do windows, utilizando o Usuario Logado
04:23 Carregar Certificados
04:41 Busca certificado que tem o SerialNumber
05:31 fazer um loop para pegar o certificado desejado

-------------------------- Codigo 

// PROCEDURE assinar_xml(recebe_xml,recebe_refUri,recebe_id,receber_certificado_local_arquivo,receber_senha)

//,recebe_dados_certificado
//Info(recebe_dados_certificado)

clX509certi is X509Certificate2(receber_certificado_local_arquivo,receber_senha)
//clX509certi is X509Certificate2(recebe_dados_certificado)

clDoc is System.Xml.XmlDocument;
clDoc.LoadXml(recebe_xml) // Ler um arquivo Xml 
nQtdeRefUri is int= clDoc.GetElementsByTagName(recebe_refUri).Count //_refUri= (sRefUri IS STRING = "infNFe")
IF (nQtdeRefUri) =0 THEN
RESULT "erro assinar" //nao existe // does not exists // ne pas exister
ELSE
VrSignedXml is SignedXml(clDoc) //cria um objeto assinado  
VrSignedXml.SigningKey = clX509certi.PrivateKey // adiciona a chave do certificado 
Reference is Reference //= new Reference(); // Cria a referencia para assinatura 
Reference.URI = "#" + recebe_id
Env is XmlDsigEnvelopedSignatureTransform  // adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura    
Reference.AddTransform(Env)    
c14 is XmlDsigC14NTransform 
Reference.AddTransform(c14)
VrSignedXml.AddReference(Reference) // adiciona a referencia no xml assinado 
VrkeyInfo is KeyInfo // Cria a chave 
VrkeyInfo.AddClause(new KeyInfoX509Data(clX509certi)) // carrega o certificado em um keyinfox509 e adiciona ao keyinfo 
VrSignedXml.KeyInfo = VrkeyInfo // adiciona o keyinfo ao xml assinado 
VrSignedXml.ComputeSignature()  
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml() // busca a representacao XML da assinatura e salva no XML       
clDoc.DocumentElement.AppendChild(clDoc.ImportNode(xmlDigitalSignature, True)) // adiciona a assinatura no documento  
RESULT clDoc.get_InnerXml() //salva o documento assinado 
END

------------------------------- Codigo

// PROCEDURE assinar_xml_serial(recebe_xml,recebe_refUri,recebe_id,receber_serial_numero)
clCertificado is X509Store(StoreName.My, StoreLocation.CurrentUser) //Carrega Store do windows, utilizando o Usuario Logado
clCertificado.open(OpenFlags.ReadOnly)
clCertificado_carrega is X509Certificate2Collection(clCertificado.Certificates) // Carregar Certificados
clCertificado_colecao is X509Certificate2Collection(clCertificado_carrega.Find(X509FindType.FindBySerialNumber,receber_serial_numero,False)) //Busca certificado que tem o SerialNumber
clX509certi is X509Certificate2
FOR EACH clX509certi OF clCertificado_colecao // fazer um loop para pegar o certificado desejado
clDoc is System.Xml.XmlDocument;
clDoc.LoadXml(recebe_xml) // Ler um arquivo Xml 
nQtdeRefUri is int= clDoc.GetElementsByTagName(recebe_refUri).Count //_refUri= (sRefUri IS STRING = "infNFe")
IF (nQtdeRefUri) =0 THEN
RESULT "erro assinar" //nao existe // does not exists // ne pas exister
ELSE
VrSignedXml is SignedXml(clDoc) //cria um objeto assinado  
VrSignedXml.SigningKey = clX509certi.PrivateKey // adiciona a chave do certificado 
Reference is Reference //= new Reference(); // Cria a referencia para assinatura 
Reference.URI = "#" + recebe_id
Env is XmlDsigEnvelopedSignatureTransform  // adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura    
Reference.AddTransform(Env)    
c14 is XmlDsigC14NTransform 
Reference.AddTransform(c14)
VrSignedXml.AddReference(Reference) // adiciona a referencia no xml assinado 
VrkeyInfo is KeyInfo // Cria a chave 
VrkeyInfo.AddClause(new KeyInfoX509Data(clX509certi)) // carrega o certificado em um keyinfox509 e adiciona ao keyinfo 
VrSignedXml.KeyInfo = VrkeyInfo // adiciona o keyinfo ao xml assinado 
VrSignedXml.ComputeSignature()  
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml() // busca a representacao XML da assinatura e salva no XML       
clDoc.DocumentElement.AppendChild(clDoc.ImportNode(xmlDigitalSignature, True)) // adiciona a assinatura no documento  
RESULT clDoc.get_InnerXml() //salva o documento assinado 
END
END

--------------------------------------------------------------



--------------------- Indice WebService

Criar Projeto WebService - Lista Site - - WebService - 001/...
Deploy - Gerando WebService/Levando Servidor/Instalar/Mostrar - WebService - 002/...
Instalando SoapUI - Testar WebService - Aula 1040 - WebService - 003/...
Ajustando Xml Lista Site WebService - WebService - 004/...
Consumir WebService - WebService - 005
Xml - Consumir Ler Xml e colocar Tabela - WebService - 006
Dolar - Consumir WebService - Cotação Dolar - 007
Cnpj Receita - Consumir WebService - 008/...
Cep Buscar WebService Correio - WebService - 009/...
CONSULTA CADASTRO SEFAZ P-1 - DICAS 1871 - WINDEV_23 - WEBSERVICE 010 - 
CONSULTA CADASTRO SEFAZ P-2 - 1872 - PUBLICA - WINDEV_23 - WEBSERVICE 011 - 
CONSULTA CADASTRO SEFAZ P-3 - 1873 - PUBLICA - WINDEV_23 - WEBSERVICE 012 -
DICAS 1877 - WINDEV_23 - WEBSERVICE 014 - CNPJ BUSCA CADASTRO ACBR
DICAS 2019 - WINDEV - WEBSERVICE - 015 - APRENDER A FAZER REST WEBSERVICE
DICAS 2020 - WINDEV - WEBSERVICE - 016 - CRIANDO TABELAS
DICAS 2021 - WINDEV - WEBSERVICE - 017 - WDTESTREST
DICAS 2022 - WINDEV MOBILE - WEBSERVICE - 018 - LER WEBSERVICE RESTSend
DICAS 2023 - WINDEV MOBILE - WEBSERVICE - 019 - LER WEBSERVICE RESTSend SOMENTE 1 REGISTRO
DICAS 2024 - WINDEV MOBILE - WEBSERVICE - 020 - WEBSERVICE RESTSend CRIA NOVO REGISTRO - httpPost
DICAS 2025 - WINDEV MOBILE - WEBSERVICE - 021 - WEBSERVICE RESTSend ALTERA REGISTRO - httpPut
DICAS 2026 - WINDEV MOBILE - WEBSERVICE - 022 - WEBSERVICE httpRequest httpDelete
DICAS 2033 - WINDEV - WEBSERVICE 23 - HTTPRequest - HTTPGetResult - fSaveBuffer - BAIXAR ARQUIVO
AO VIVO-SOAP-DICA 2095-WINDEV MOBILE WEBDEV-WEBSERVICE COM MOBILE -
DICAS 2096-2095 - WINDEV WEBDEV MOBILE - WEBSERVICE 25 - SOAP
DICAS 2097 - WINDEV MOBILE - WEBSERVICE 26 - MOSTRAR CLIENTES - SOAP
DICAS 2132 - HANGOUT AO VIVO 20 HORAS 30/05 - WEBSERVICE SOAP COM MOBILE
DICAS 2163 WINDEV WEBDEV MOBILE WEBSERVICE 28 SOAP
DICAS 2226 WINDEV WEBDEV MOBILE 24 NOVIDADES 26 WEBSERVICE 29 HTTPREQUEST - BUSCA CNPJ
DICA 2687 - WINDEV WEBDEV MOBILE - WEBSERVICE 32 - EXPLICANDO WEBSERVICE SOAP E CONSUMIDO MOBILE E DESKTOP

------------------- 















DICAS 3376 - WINDEV WEBDEV MOBILE - NFeDistribuicaoDFe - Parte 7 - download Xml da Nota em Windev - Curso Webservice - 43







https://youtu.be/P30JEoclnIs



Bom Dia Boa Tarde Boa Noite

Mande um email pedido para receber todas notificaçoes dos videos 

==============================================================

Seja Membro do Canal e tenha direito a consultorias com precos diferenciados
https://www.youtube.com/channel/UCQGPHrppG5XKoRbeOIgLJEA/join
Beneficios Membros: 
     Skype Privado
     Sugerir ou pedir Videos
     Valroes de consultorias com precos acesiveis
     Pedir para eu refazer uma exemplo versao inferior
     Quero Refazer meu sistema no windev, onde comecar?
     Como fazer uma proteção on-line do seu sistema ?
     Meu projeto será grande, como devo fazer?

==============================================================


Esse Video vai estrear as 06:15 do dia 02/08/2021

DICAS 3376 - WINDEV WEBDEV MOBILE - NFeDistribuicaoDFe - Parte 7 - download Xml da Nota em Windev - Curso Webservice - 43




ASSUNTOS


00:00 Introducao
00:39 Vamos entrar no projeto NFeDistribuicaoDfe_Donwload_xml_nota_windev_3376 
57:15 Vamos ir no campo Nfd Distribuicao e transformar o codigo em procedure busca_manifestacoes
01:28 Vamos receber um parametro chave nfe nessa nova procedure 
02:15 sXml_modelo - vamos criar um xml com ultnsu ou chave nfe 
02:36 Fazendo o xml com as tagx ultnsu 
03:15 Fazendo o xml com as tagx chNFe
03:52 colocando os nomes dos retornos e explicando
04:28 Criar as variaveis que vamos precisar
05:05 Verificar se retorno e´ resNFe
06:03 Verificar se retorno e´ nfeProc e protNfe,quer dizer xml baixado do sefaz
07:28 Vamos marcar que esse resumo é um xml baixado e salvar arquivo
07:57 Vamos gravar no resumo o xml baixado
09:30 vamos criar o botao dowload Xml
09:46 Ajustar codigo manifestacao
09:59 Colocar o codigo no botao dowload xml
10:18 Fazer botao para mostrar o xml baixado
10:30 Vamos fazer o codigo para mostrar o xml baixado
12:07 Vamos executar o programa 
12:38 Finalizando e dizendo qual sera proxima aula 

---------------------------------Codigo


// btn donwload xml

busca_manifestacoes(TABLE_Manifestacao_resumo.COL_ChNfe)

------------------------------- codigo

// mostrar xml baixado

HReadSeekFirst(manifestacao_resumo,chNfe,TABLE_Manifestacao_resumo.COL_ChNfe)
IF HFound(manifestacao_resumo) THEN
IF manifestacao_resumo.xml_baixado=False
       Info("nao foi baixado xml")
    ELSE
    sNome_arquivo_baixado is string="c:\temp\"+TABLE_Manifestacao_resumo.COL_ChNfe+"-procNFe.xml"
    fSaveText(sNome_arquivo_baixado,manifestacao_resumo.xml_baixado_documento)
    ShellExecute(sNome_arquivo_baixado)
    END 
END

------------------------------- codigo

//PROCEDURE busca_manifestacoes(sRecebe_chave_nfe is string="")


// Status Nfe // btnNfeDistribuicaoDfe

s_recebe_thumprint_certificado is string = "" // vamos criar duas variaveis - 
s_web_service is string = ""
IF RADIO_ambiente=1 THEN // se o ambiente for igual 1- Producao ou se for igual 2 - Homologaão
s_web_service="https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"
ELSE 
s_web_service="https://hom.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"
END

// vamos fazer sEnvelopE_soap
sUltnsu_15 is string = NumToString(EDT_UltNSU,"015d")

sXml_modelo is string=""
IF sRecebe_chave_nfe="" THEN
   // vamos fazer a consulta por nsu
   sXml_modelo=[
<distNSU>
<ultNSU>[%sUltnsu_15%]</ultNSU>
</distNSU>
]
ELSE
   // vamos fazer a consulta por chave nfe
sXml_modelo=[
<consChNFe>
<chNFe>[%sRecebe_chave_nfe%]</chNFe>
</consChNFe>
]
END
sEnvelope_soap is string = [
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<nfeDistDFeInteresse xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeDistribuicaoDFe">
<nfeDadosMsg>
<distDFeInt xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
<tpAmb>[%RADIO_ambiente%]</tpAmb>
<CNPJ>[%EDT_Cnpj_cpf_dfe%]</CNPJ>
[%sXml_modelo%]
</distDFeInt>
</nfeDadosMsg>
</nfeDistDFeInteresse>
</soap12:Body>
</soap12:Envelope>
]

sEnvelope_soap = Replace(sEnvelope_soap,CR,"") // vamos tirar os cr da variavel senvelope_soap
EDT_ENVELOPE_SOAP_ENVIADO = sEnvelope_soap // vamos agora colocar o envelope soap no edt 
// vamos ler o cadastro de empresas e pegar o certificado ja selecionado

HReadSeekFirst(empresa,empresaID,1)
IF HFound(empresa) THEN
s_recebe_thumprint_certificado=NoSpace(empresa.certificado_thumprint,sscAll)
Message("Procurando HttpCertificate ...")
ELSE
s_recebe_thumprint_certificado=""
END
HTTPCertificate(s_recebe_thumprint_certificado) // vamos ler o certificado com HTTPCertificate - e caso ele nao encontre nada, ele vai pedir para escolehr 
HTTP.IgnoreError = httpIgnoreRevocation
HTTP.IgnoreError = httpErrorInvalidCertificate
HTTP.IgnoreError = httpErrorInvalidCertificateName

bMensagem is boolean=HTTPRequest(s_web_service,"","",sEnvelope_soap,"text/xml;charset=UTF-8","","")
HTTPCertificate("") //Vamos limpar da memoria o certificado 

IF bMensagem=False THEN
Error(ErrorInfo(errFullDetails))
ELSE 
EDT_RETORNO_SOAP = HTTPGetResult(httpResult)
EDT_Retorno_xml = XMLExtractString(EDT_RETORNO_SOAP,"nfeDistDFeInteresseResult")
EDT_TpAmb = XMLExtractString(EDT_Retorno_xml,"tpAmb")
EDT_Cstat = XMLExtractString(EDT_Retorno_xml,"cStat")
EDT_Xmotivo = XMLExtractString(EDT_Retorno_xml,"xMotivo")
EDT_dhResp = XMLExtractString(EDT_Retorno_xml,"dhResp")
EDT_UltNSU_retorno = XMLExtractString(EDT_Retorno_xml,"ultNSU")
EDT_maxNSU = XMLExtractString(EDT_Retorno_xml,"maxNSU")
// nesse momento ja temos o xml de retorno
sNome_tag is string = "" // nome_tag string - nUmero_nsu int  - Vamos criar duas variaveis
nUmero_nsu is int = 0
bAchouxml is boolean = XMLDocument("xml_dfe",EDT_Retorno_xml) // vamos abrir o documento xml 
XMLFind("xml_dfe",Null,XMLContinue+XMLChildItem)
WHILE XMLFound("xml_dfe") // vamos percorrer esse xml // WHILE XMLFound("XML_dfe")  
sNome_tag = XMLElementName("xml_dfe") //vamos pegar o nome da tag -
IF sNome_tag="docZip" THEN // vamos verificar se a tag encontrada é doczip 
bufFer_resumo is Buffer = XMLData("xml_dfe") // Vamos pegar o dado do resumo 
bufFer_descompactar is Buffer = Decrypt(bufFer_resumo,"",compressNone,encodeBASE64) // Vamos comecar a descompatar 
sDescompacta_xml is string = Uncompress(bufFer_descompactar) // vamos jogar numa string a descompactacao 
            XMLNext("xml_dfe") // agora vou para proxima tag pegar o numero do nsu 
nUmero_nsu=XMLData("xml_dfe") // como eu sei que a proxima tag é o numero do nsu , vou pegar ele
sChnfe is string=XMLExtractString(sDescompacta_xml,"chNFe") // Vamos pegar a chave da nota no resumo 
            sNome_arquivo_gravar is string="c:\temp\resumo_nota_"+nUmero_nsu+".xml" // Criar as variaveis que vamos precisar    
            sNome_resumo is string=""
            bTipo_xml_baixado is boolean=False
            IF Contains(sDescompacta_xml,"resNFe")=True THEN // Verificar se retorno e´ resNFe
            sNome_arquivo_gravar="C:\temp\"+"resNFe_"+nUmero_nsu+".xml"
            sNome_resumo="resNFe"
            END
            // Verificar se retorno e´ nfeProc e protNfe,quer dizer xml baixado do sefaz
            IF Contains(sDescompacta_xml,"nfeProc")=True AND Contains(sDescompacta_xml,"protNFe")=True THEN
sNome_arquivo_gravar = "C:\temp\"+sChnfe+"-procNFe.xml"
sNome_resumo = "nfeProc"
bTipo_xml_baixado=True
END
fSaveText(sNome_arquivo_gravar,sDescompacta_xml)
HReadSeekFirst(manifestacao_resumo,chNfe,sChnfe) // vamos verificar se essa chave existe no resumo 
IF HFound(manifestacao_resumo) THEN
                 // se existir manifestacao vamos regravar
                  IF bTipo_xml_baixado=True THEN
                      manifestacao_resumo.xml_baixado=True 
                      manifestacao_resumo.xml_baixado_documento=sDescompacta_xml
                      manifestacao_resumo.nsu_baixado=nUmero_nsu
                      HModify(manifestacao_resumo)
                  END
                    
ELSE  
// nao encontrou - ou nao existe - vamos gravar um novo resumo
HReset(manifestacao_resumo) // Mostrar na aula - faltou colocar hreset
manifestacao_resumo.nsu = nUmero_nsu
manifestacao_resumo.chNfe = sChnfe
move_dados()
IF bTipo_xml_baixado=True THEN
manifestacao_resumo.xml_baixado = True 
manifestacao_resumo.xml_baixado_documento = sDescompacta_xml
manifestacao_resumo.nsu_baixado = nUmero_nsu
END
HAdd(manifestacao_resumo)
END
INTERNAL PROCEDURE move_dados()
manifestacao_resumo.xnome = XMLExtractString(sDescompacta_xml,"xNome")
manifestacao_resumo.ie = XMLExtractString(sDescompacta_xml,"IE")
manifestacao_resumo.tpNf = XMLExtractString(sDescompacta_xml,"tpNF")
manifestacao_resumo.digval = XMLExtractString(sDescompacta_xml,"digVal")
manifestacao_resumo.nProt = XMLExtractString(sDescompacta_xml,"nProt")
manifestacao_resumo.vnf = XMLExtractString(sDescompacta_xml,"vNF")
manifestacao_resumo.csitNfe = XMLExtractString(sDescompacta_xml,"cSitNFe")
manifestacao_resumo.cnpj = XMLExtractString(sDescompacta_xml,"CNPJ")
//<dhEmi>2021-07-14T12:43:48-03:00</dhEmi>
dAta is Date = ""
dhemissao_hora is string = XMLExtractString(sDescompacta_xml,"dhEmi")
dAta.Day = dhemissao_hora[[9 TO 10]]
dAta.Month = dhemissao_hora[[6 TO 7]]
dAta.Year = dhemissao_hora[[1 TO 4]]
hora is Time=""
hora.Hour = dhemissao_hora[[12 TO 13]]
hora.Minute = dhemissao_hora[[15 TO 16]]
hora.Second = dhemissao_hora[[18 TO 19]]
manifestacao_resumo.dhemi = dAta
manifestacao_resumo.hr_emissao = hora 
dAta = ""
dhemissao_hora = XMLExtractString(sDescompacta_xml,"dhRecbto")
dAta.Day = dhemissao_hora[[9 TO 10]]
dAta.Month = dhemissao_hora[[6 TO 7]]
dAta.Year = dhemissao_hora[[1 TO 4]]
hora = ""
hora.Hour = dhemissao_hora[[12 TO 13]]
hora.Minute = dhemissao_hora[[15 TO 16]]
hora.Second = dhemissao_hora[[18 TO 19]]
manifestacao_resumo.dhrecbto = dAta
manifestacao_resumo.hora_recibo = hora
manifestacao_resumo.ciencia_cstat = ""
manifestacao_resumo.ciencia_motivo = ""
manifestacao_resumo.confirmado_cstat = ""
manifestacao_resumo.confirmado_motivo = ""
manifestacao_resumo.desconhecimento_Csat = ""
manifestacao_resumo.desconhecimento_motivo = ""
manifestacao_resumo.xml_baixado_documento = ""
manifestacao_resumo.soap_enviado = EDT_ENVELOPE_SOAP_ENVIADO
manifestacao_resumo.soap_retorno = EDT_RETORNO_SOAP
manifestacao_resumo.xml_retorno = EDT_Retorno_xml
END
END
// vamos ao final da pergunta, ir para outra tag
XMLNext("xml_dfe")
END
fSaveText("c:\temp\EDT_ENVELOPE_SOAP_ENVIADO.txt",EDT_ENVELOPE_SOAP_ENVIADO)
fSaveText("c:\temp\EDT_RETORNO_SOAP.txt",EDT_RETORNO_SOAP)
fSaveText("c:\temp\EDT_Retorno_xml.txt",EDT_Retorno_xml)
TableDisplay(TABLE_Manifestacao_resumo,taInit)
Info("Buscado Notas")
//xml_erro
//xml_dist_dfe --> proprio xml
// S_xml_nfe
// S_xml_evento
// Doczip
// Xml_arquivo
// Local_arquivo
// Xml_baixado boolean
END





--------------------- Indice WebService

Criar Projeto WebService - Lista Site - - WebService - 001/...
Deploy - Gerando WebService/Levando Servidor/Instalar/Mostrar - WebService - 002/...
Instalando SoapUI - Testar WebService - Aula 1040 - WebService - 003/...
Ajustando Xml Lista Site WebService - WebService - 004/...
Consumir WebService - WebService - 005
Xml - Consumir Ler Xml e colocar Tabela - WebService - 006
Dolar - Consumir WebService - Cotação Dolar - 007
Cnpj Receita - Consumir WebService - 008/...
Cep Buscar WebService Correio - WebService - 009/...
CONSULTA CADASTRO SEFAZ P-1 - DICAS 1871 - WINDEV_23 - WEBSERVICE 010 - 
CONSULTA CADASTRO SEFAZ P-2 - 1872 - PUBLICA - WINDEV_23 - WEBSERVICE 011 - 
CONSULTA CADASTRO SEFAZ P-3 - 1873 - PUBLICA - WINDEV_23 - WEBSERVICE 012 -
DICAS 1877 - WINDEV_23 - WEBSERVICE 014 - CNPJ BUSCA CADASTRO ACBR
DICAS 2019 - WINDEV - WEBSERVICE - 015 - APRENDER A FAZER REST WEBSERVICE
DICAS 2020 - WINDEV - WEBSERVICE - 016 - CRIANDO TABELAS
DICAS 2021 - WINDEV - WEBSERVICE - 017 - WDTESTREST
DICAS 2022 - WINDEV MOBILE - WEBSERVICE - 018 - LER WEBSERVICE RESTSend
DICAS 2023 - WINDEV MOBILE - WEBSERVICE - 019 - LER WEBSERVICE RESTSend SOMENTE 1 REGISTRO
DICAS 2024 - WINDEV MOBILE - WEBSERVICE - 020 - WEBSERVICE RESTSend CRIA NOVO REGISTRO - httpPost
DICAS 2025 - WINDEV MOBILE - WEBSERVICE - 021 - WEBSERVICE RESTSend ALTERA REGISTRO - httpPut
DICAS 2026 - WINDEV MOBILE - WEBSERVICE - 022 - WEBSERVICE httpRequest httpDelete
DICAS 2033 - WINDEV - WEBSERVICE 23 - HTTPRequest - HTTPGetResult - fSaveBuffer - BAIXAR ARQUIVO
AO VIVO-SOAP-DICA 2095-WINDEV MOBILE WEBDEV-WEBSERVICE COM MOBILE -
DICAS 2096-2095 - WINDEV WEBDEV MOBILE - WEBSERVICE 25 - SOAP
DICAS 2097 - WINDEV MOBILE - WEBSERVICE 26 - MOSTRAR CLIENTES - SOAP
DICAS 2132 - HANGOUT AO VIVO 20 HORAS 30/05 - WEBSERVICE SOAP COM MOBILE
DICAS 2163 WINDEV WEBDEV MOBILE WEBSERVICE 28 SOAP
DICAS 2226 WINDEV WEBDEV MOBILE 24 NOVIDADES 26 WEBSERVICE 29 HTTPREQUEST - BUSCA CNPJ
DICA 2687 - WINDEV WEBDEV MOBILE - WEBSERVICE 32 - EXPLICANDO WEBSERVICE SOAP E CONSUMIDO MOBILE E DESKTOP

------------------- 














Dica de Imagen Webdev - Paulo Viana - 01 08 2021

Bom dia!

sobre a conversa imagens do WB

vai uma dica que estou pesquisando agora





a imagem está muito próxima do lado esquerdo



temos a opção de padding dentro da posição horizontal
além do padrão ele aceita um valor







outro detalhe é sobre cores





vou pegar uma imagem preta






arrastando o ligthness para o lado direito ela fica branca





tem que ativar o HSL
para manipular esse valor





Teste

Teste
teste