Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Spike‌ ‌-‌ ‌S_T_A_M_P_‌  para Extrator Fiscal

Objetivo

Com base no estudo  clique aqui.

1. Após a atualização do extrator, quando o usuário executar o RUPFIS, iremos validar tudo que o sistema precisa, lib, dbacess, etc... estando
Ao estar tudo "ok", iremos executar a rotina de criação do S_T_A_M_P nas tabela SFT e também o TAFSTAMP na tabela C20 do TAF.

2. No extrator cria criar um botão de habilitar integração automática, com isso iremos validar se o cliente possui lib, dbaccess, bin atualizados e se o S_T_A_M_P existe na tabela,
se sim iremos subir o Job que fica validando a SFT e integrando com o TAF ( habilitar o parâmetro MV_TAFINT ). Considerar o parâmetro MV_EXTQTTH para abertura de threads.


Conclusão

A primeira Primeira questão não é viável, pois o RUPFIS só é "chamado" na execução do UPDDISTR  de virada de release, em atualizações pontuais, ou acumulados, o RUPFIS não é executado.

Segunda questão: É totalmente viável executar as verificação verificações necessárias.

  • Schedule: Como a funcionalidade será apenas para o TAF módulo,  não há necessidade de automatizar o processo de schedule, a configuração será diretamente no SIGACFG via recurso padrão do Protheus.

...

  • O banco de dados suporta o campo S_T_A_M_P_? 
    A função TCConfig( < cParms > ) possui o recurso SETUSEROWSTAMP=ON|OFF que rmite OFF que permite ligar ou desligar a criação da coluna interna S_T_A_M_P_ para novas tabelas.
    Pode retornar "OK" em caso de sucesso, "NOT_SUPPORTED" caso o Banco de Dados não tenha suporte para a coluna S_T_A_M_P_,
    ou "INVALID_OPTION", caso seja informado um parâmetro diferente de "ON" ou "OFF".

  • TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019
    Usar GetBuild( .f.).

  • A versão do DBAcces deve ser maior ou igual 19/11/2019
    Usar TCAPIBuild()

Com as verificações acima, apenas se o TAF for módulo, a base já se mostra apta a receber o campo S_T_A_M_T_P, neste momento será criado um botão no extrator ficalfiscal,
com um texto informativo de que o cliente já pode implementar o novo campo, o campo é um link para a documentação de implementação do campo.

Se o TAF form for módulo, porém , algum dos outros prepré-requisitos não entendamentenderem, o botão ficará com uma cor de "erro/falha/inapto" (vermelho por exemplo)   ,
com a mensagem do motivo específico e com o link direcionando para a pagina página específica do motivo.

Exemplo de erro, onde algum pré-requisito não é antedido:

Exemplo onde todos os pré-requisitos são atendidos:

Caso o TAF seja segregado, o botão não aparece.


Exemplo do algoritmo das validações e disponibilização do botão



Local lTafModule := TemRegC1E()

if lTafModule
cConfigRow := TCConfig('SETUSEROWSTAMP=ON')
aGetBuild := strtokarr(GetBuild( .f.),'-')
cDbAcesBld := TCAPIBuild()

if cConfigRow <> 'OK'
cTexto := 'O banco de dados não possui suporte para integração on-line (automática)'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif aGetBuild[1] < '7.00.191205P'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif aGetBuild[1] >= '7.00.191205P' .and. aGetBuild[2] < '20190923'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif substr(cDbAcesBld,1,8) < '20191119'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif lButtonOk
if Ascan( TCStruct(RetSqlName( "C20" )), {|x| x[1] == 'S_T_A_M_P_' }) == 0
DbSelectArea("C20")
endif
if Ascan( TCStruct(RetSqlName( "SFT" )), {|x| x[1] == 'S_T_A_M_P_' }) == 0
DbSelectArea("SFT")
endif
cTexto := "Base apta a integração on-line (automático), clique para maiores informações."
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
endif
endif



//CSS do botão:

if lTafModule
cCssBtn2 := "QPushButton {"
cCssBtn2 += " background-repeat: none; margin: 2px;"
cCssBtn2 += " border-style: outset;"
cCssBtn2 += " border-width: 2px;"
cCssBtn2 += " border: 1px solid #FF0000;"
cCssBtn2 += " border-radius: 5px;"
cCssBtn2 += " border-color: #0b5c6f;"
cCssBtn2 += " font: bold 12px Arial;"
if !lButtonOk
cCssBtn2 += " color: #FF0000;"
else
cCssBtn2 += " color: #0b5c6f;"
endif
cCssBtn2 += " padding: 6px;"
cCssBtn2 += "}"
endif



// Estanciando o botão 

if lTafModule
oBtnNews2 := TButton():New( 150, 15,cTexto,oP01Fldr,{||ShellExecute("open",cLink,"","",1)},,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtnNews2:SetCss(cCssBtn2)
endif


O fonte FisaExtWiz.prw, usado para o POC, está anexo a issue.