No vídeo de hoje, vamos demonstrar em como abrir a página de consulta do SINTEGRA direto via programação já populando o campo de estado, cnpj e inscrição estadual.
A dúvida de hoje, nos perguntaram, se seria possível via programação, abrirmos a página do SINTEGRA (via Cadastro Centralizado de Contribuinte – https://dfe-portal.svrs.rs.gov.br/NFE/CCC ), e já popularmos as informações (como Estado, CNPJ e Inscrição Estadual).
Pensando nisso, montamos um exemplo, onde vamos demonstrar em como usar as classes TWebChannel e TWebEngine junto com o método RunJavaScript.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "tlpp-core.th"
//Declaração da namespace
Namespace custom.terminal.youtube
/*/{Protheus.doc} User Function video0156
Função para testar a consulta do Sintegra
@type Function
@author Atilio
@since 03/06/2024
@example custom.terminal.youtube.u_video0156()
/*/
User Function video0156()
Local aArea := FWGetArea() As Array
//Acionando a função para abrir a tela do SINTEGRA
custom.terminal.youtube.u_consultSintegra()
FWRestArea(aArea)
Return
/*/{Protheus.doc} User Function consultSintegra
Abre o Sintegra
@author Atilio
@since 03/06/2024
@version 1.0
@type function
@param cParamUF, Caractere, Abreviação do Estado (exemplo AC; SP; RJ;)
@param cParamCNPJ, Caractere, Número do CNPJ que será pesquisado
@param cParamIE, Caractere, Número da Inscrição Estadual que será pesquisada
/*/
User Function consultSintegra(cParamUF, cParamCNPJ, cParamIE)
Local aArea := FWGetArea() As Array
Default cParamUF := ""
Default cParamCNPJ := ""
Default cParamIE := ""
Private cUF := cParamUF As Character
Private cCNPJ := cParamCNPJ As Character
Private cFormattedCNPJ := Transform(cCNPJ, "@R 99.999.999/9999-99") As Character
Private cIE := cParamIE As Character
//Somente se tiver estado e CNPJ OU Inscrição Estadual que irá acionar a montagem da tela
//If ! Empty(cUF) .And. (! Empty(cCNPJ) .Or. ! Empty(cIE))
Processa({|| makeDialog()})
//EndIf
FWRestArea(aArea)
Return
/*/{Protheus.doc} makeDialog
Montagem da tela
@author Atilio
@since 03/06/2024
@version 1.0
@type function
/*/
Static Function makeDialog()
Local aArea := FWGetArea() As Array
Local oDialogWeb As Object
Local cDialogTitle := 'Consulta Sintegra' As Character
Local cUFId := UfCodIBGE(cUF) As Character
//Tamanho da janela
Local aDialogSize := FwGetDialogSize() As Array
Local nDialogWidth := aDialogSize[4] / 2 As Numeric
Local nDialogHeight := aDialogSize[3] / 2 As Numeric
//Blocos de código dos botões
Local bClose := {|| oDialogWeb:DeActivate()} As CodeBlock
Local bPrint := {|| oWebEngine:PrintPDF()} As CodeBlock
Local bCopy := {|| CopyToClipboard(cURLSintegra)} As CodeBlock
//Variáveis dos objetos de navegação de páginas
Local cURLSintegra := 'https://dfe-portal.svrs.rs.gov.br/NFE/CCC' As Character
Local nPortChannel := 0 As Numeric
Local oPanelHtml As Object
Private aCommands := {} As Array
Private oWebChannel As Object
Private oWebEngine As Object
//Monta os comandos que vão ser executados via JavaScript
aAdd(aCommands, 'document.getElementById("CodUf").value = "' + cUFId + '"; ')
If ! Empty(cCNPJ)
aAdd(aCommands, 'document.getElementById("CodInscrMf").value = "' + cFormattedCNPJ + '" ; ')
EndIf
If ! Empty(cIE)
aAdd(aCommands, 'document.getElementById("CodIe").value = "' + cIE + '" ; ')
EndIf
//Instancia a classe, criando uma janela
oDialogWeb := FWDialogModal():New()
oDialogWeb:SetTitle(cDialogTitle)
oDialogWeb:SetSize(nDialogHeight, nDialogWidth)
oDialogWeb:EnableFormBar(.T.)
oDialogWeb:CreateDialog()
oDialogWeb:CreateFormBar()
oDialogWeb:AddButton('Fechar', bClose, 'Fechar', , .T., .F., .T., )
oDialogWeb:AddButton('Imprimir PDF', bPrint, 'Imprimir PDF', , .T., .F., .T., )
oDialogWeb:AddButton('Copiar URL', bCopy, 'Copiar URL', , .T., .F., .T., )
//Busca o painel principal da dialog
oPanelHtml := oDialogWeb:GetPanelMain()
//Prepara o conector WebSocket
oWebChannel := TWebChannel():New()
nPortChannel := oWebChannel:connect()
//Cria componente
oWebEngine := TWebEngine():New(oPanelHtml, 0, 0, 100, 100, , nPortChannel)
oWebEngine:bLoadFinished := {|self, url| runScripts()}
oWebEngine:Navigate(cURLSintegra)
oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT
//Abre a janela
oDialogWeb:Activate()
FWRestArea(aArea)
Return
/*/{Protheus.doc} runScripts
Comandos que serão executados após carregar a página
@author Atilio
@since 03/06/2024
@version 1.0
@type function
/*/
Static Function runScripts()
Local aArea := FWGetArea() As Array
Local nCurrent := 0 As Numeric
//Percorre os comandos e executa
For nCurrent := 1 To Len(aCommands)
oWebEngine:RunJavaScript(aCommands[nCurrent])
Next
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Show de Bola Parabens.
Bom dia, tudo joia?
Opa, obrigado pelo carinho e feedback.
Tenha uma ótima e abençoada quinta feira.
Um forte abraço.