Aqui temos um exemplo de como gerar os arquivos do dicionário de dados do protheus que usamos para gerar as páginas usadas aqui no site.
Para saber mais sobre o dicionário de dados acesse aqui.
Acesse nosso Git e baixe esse e outros exemplo clicando aqui.
#Include "Protheus.ch"
#INCLUDE "fileio.ch"
#define CAMINHO 'D:\TOTVS\Tabelas\'
Static lBySQL := .T. //inserir dados via SQL
User Function SPEXPALL()
//Exporta tabelas
u_SPEXPTABL() //sem threads
//gera pagina principal com todas os links para paginas das tabelas
U_SPEXP1()
//gera pagina principal com todas os links para paginas das consultas padrões
U_SPEXP2()
//gera pagina principal com todas os links para paginas de grupo de campo
U_SPEXP3()
//gera pagina principal com todas os links para paginas de gatilhoss
U_SPEXP4()
//gera tabelas de consulta padrão
U_SPEXP5()
//gera tabelas de gatilhos
U_SPEXP6()
//gera tabelas de Grupo de Campos
U_SPEXP7()
Return .t.
/*/{Protheus.doc} SPEXPTABL
Função responsável por gerar documentação das tabelas do Protheus
@type function
@author Rafael Gonçalves da Silva
@since 16/12/2019
@version 1.0
/*/
User Function SPEXPTABL()
Local aArea as array
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
Local aFields as array // arary com campos de uma determinada tabela
Local _nI as numeric
cDiretori := CAMINHO+'\tabelas\'
//remover se for chamar do menu
RpcSetType(3)
RpcSetEnv('99', '01')
DbSelectArea('SX2')
SX2->(DbGoTop())
While !SX2->(EoF())
aArea := GETAREA()
FSGERA()
RESTAREA(aArea)
SX2->(DbSkip())
EndDo
Return .t.
//gera arquivo SX2
Static Function FSGERA()
Local aArea as array
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
Local aFields as array // arary com campos de uma determinada tabela
Local _nI as numeric
cDiretori := CAMINHO+'\tabelas\'
cArquivo := 'tabela_'+lower(X2_CHAVE)+'.html'
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
Return .t.
Endif
//inicio da montagem do HTML
fWrite(nHdl, '<html>' + CRLF)
fWrite(nHdl, '<head><meta charset="UTF-8"><title>Tabela: '+SX2->X2_CHAVE + ' - '+ EncodeUTF8(alltrim(FwSX2Util():GetX2Name( SX2->X2_CHAVE )))+'</title></head>' + CRLF)
fWrite(nHdl, '<body>' + CRLF)
fWrite(nHdl, '<font color="orange">
<h2 id="'+SX2->X2_CHAVE+'">Tabela: '+SX2->X2_CHAVE + ' - '+ EncodeUTF8(alltrim(FwSX2Util():GetX2Name( SX2->X2_CHAVE )))+'</h2>
</font>' + CRLF)
fWrite(nHdl, '
' + CRLF)
//Informações da Tabela
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>
<td colspan="5" align="center"><b><i>Tabela(SX2)</i></b></td>
</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td colspan="2"><b>X2_NOME</b></td>
')
fWrite(nHdl, '
<td colspan="2"><b>X2_UNICO</b></td>
')
fWrite(nHdl, '
<td><b>X2_SYSOBJ</b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, EncodeUTF8('
<td colspan="2"><b>'+alltrim(SX2->X2_NOME)+'</b></td>
'))
fWrite(nHdl, EncodeUTF8('
<td colspan="2"><b>'+alltrim(SX2->X2_UNICO)+'</b></td>
'))
fWrite(nHdl, '
<td><b>'+alltrim(SX2->X2_SYSOBJ)+'</b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '</table>
' + CRLF)
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<hr>
' + CRLF)
fWrite(nHdl, '
' + CRLF)
//imprime os indices da tabela
DbSelectArea('SIX')
SIX->(DbSetOrder(1))
If SIX->(DbSeek(SX2->X2_CHAVE))
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td colspan="5" align="center"><b><i>Indices(SIX)</i></b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>Ordem</b></td>
')
fWrite(nHdl, '
<td colspan="2"><b>Chave</b></td>
')
fWrite(nHdl, EncodeUTF8('
<td><b>Descrição</b></td>
'))
fWrite(nHdl, '
<td><b>NickName</b></td>
')
fWrite(nHdl, '</tr>
')
//Percorre os campos
While ! SIX->(Eof()) .And. SIX->INDICE == SX2->X2_CHAVE
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td>'+SIX->ORDEM+'</td>
')
fWrite(nHdl, '
<td colspan="2">'+Alltrim(SIX->CHAVE)+'</td>
')
fWrite(nHdl, '
<td>'+EncodeUTF8(Alltrim(SIX->DESCRICAO))+'</td>
')
fWrite(nHdl, '
<td>'+Alltrim(SIX->NICKNAME)+'</td>
')
fWrite(nHdl, '</tr>
' + CRLF)
SIX->(DbSkip())
EndDo
fWrite(nHdl, '</table>
' + CRLF)
EndIf
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<hr>
' + CRLF)
fWrite(nHdl, '
' + CRLF)
//Informações folders
DbSelectArea("SXA")
DbSetOrder(1)
If DbSeek(SX2->X2_CHAVE)
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td colspan="6" align="center"><b><i>Abas(SXA)</i></b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>XA_ALIAS</b></td>
')
fWrite(nHdl, '
<td><b>XA_ORDEM</b></td>
')
fWrite(nHdl, '
<td colspan="2"><b>XA_DESCRIC</b></td>
')
fWrite(nHdl, '
<td><b>XA_AGRUP</b></td>
')
fWrite(nHdl, '
<td><b>XA_TIPO</b></td>
')
fWrite(nHdl, '</tr>
')
While (!Eof()) .AND. (SXA->XA_ALIAS == SX2->X2_CHAVE)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>'+Alltrim(SXA->XA_ALIAS)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+Alltrim(SXA->XA_ORDEM)+'</b></td>
')
fWrite(nHdl, '
<td colspan="2"><b>'+Alltrim(SXA->XA_DESCRIC)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+Alltrim(SXA->XA_AGRUP)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+Alltrim(SXA->XA_TIPO)+'</b></td>
')
fWrite(nHdl, '</tr>
')
DbSelectArea("SXA")
DbSkip()
Enddo
fWrite(nHdl, '</table>
' + CRLF)
EndIf
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<hr>
' + CRLF)
fWrite(nHdl, '
' + CRLF)
//Percorre o SX3 para montar os campos
aFields := {}//Zera array de execuções anteriores
aFields := FWSX3Util():GetAllFields(SX2->X2_CHAVE,.T.) //
If len(aFields) <= 0 MsgAlert("Não foi encontrato nenhum campo para a tabela "+SX2->X2_CHAVE+"!", "Atenção")
SX2->(DbSkip())
fClose(nHdl)
Return .t.
else
//Cria tebela html para campos
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td colspan="24" align="center"><b><i>Campos(SX3)</i></b></td>
' + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td><b>X3_CAMPO</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_TITULO</b></td>
' + CRLF)
fWrite(nHdl, '
<td colspan="2"><b>X3_DESCRIC</b></td>
' + CRLF)
fWrite(nHdl, '
<td colspan="4"><b>HELP Campo</b></td>
' + CRLF)
// fWrite(nHdl, '
<td colspan="2"><b>HELP Solucao</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_TIPO</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_TAMANHO</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_DECIMAL</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_VALID</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_RELACAO</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_F3</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_TRIGGER</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_BROWSE</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_VISUAL</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_CONTEXT</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_OBRIGAT</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_CBOX</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_WHEN</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_INIBRW</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_GRPSXG</b></td>
' + CRLF)
fWrite(nHdl, '
<td><b>X3_FOLDER</b></td>
' + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
Endif
//Percorre array de campos
_nI := 1
For _nI:=1 to len(aFields)
//https://tdn.totvs.com/pages/releaseview.action?pageId=6815033
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_CAMPO' ))+'</td>
' + CRLF)
fWrite(nHdl, EncodeUTF8('
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_TITULO'))+'</td>
') + CRLF)
fWrite(nHdl, EncodeUTF8('
<td colspan="2">'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_DESCRIC'))+'</td>
') + CRLF)
fWrite(nHdl, '
<td colspan="4">'+EncodeUTF8(Alltrim(GetHlpSoluc(aFields[_nI])[1]))+'</td>
' + CRLF)
// fWrite(nHdl, '
<td colspan="2">'+Alltrim(GetHlpSoluc(aFields[_nI])[2])+'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+GetSx3Cache( aFields[_nI], 'X3_TIPO') +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+cvaltochar(GetSx3Cache( aFields[_nI], 'X3_TAMANHO')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+cvaltochar(GetSx3Cache( aFields[_nI], 'X3_DECIMAL')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_VALID')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_RELACAO')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/tabelas/F3/'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_F3'))+'.html">'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_F3')) +'</a></td>
' + CRLF)
if !Empty(GetSx3Cache( aFields[_nI], 'X3_TRIGGER'))
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/tabelas/gatilhos/'+Alltrim(aFields[_nI])+'.html">'+GetSx3Cache( aFields[_nI], 'X3_TRIGGER') +'</td>
' + CRLF)
else
fWrite(nHdl, '
<td>'+GetSx3Cache( aFields[_nI], 'X3_TRIGGER') +'</td>
' + CRLF)
endif
fWrite(nHdl, '
<td>'+GetSx3Cache( aFields[_nI], 'X3_BROWSE') +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+GetSx3Cache( aFields[_nI], 'X3_VISUAL') +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+GetSx3Cache( aFields[_nI], 'X3_CONTEXT') +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_OBRIGAT')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_CBOX')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_WHEN')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_INIBRW')) +'</td>
' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/tabelas/grupoCampo/'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_GRPSXG'))+'.html">'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_GRPSXG')) +'</a></td>
' + CRLF)
fWrite(nHdl, '
<td>'+Alltrim(GetSx3Cache( aFields[_nI], 'X3_FOLDER')) +'</td>
' + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
Next
If len(aFields) > 0
fWrite(nHdl, '</table>
' + CRLF)
endif
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<hr>
' + CRLF)
fWrite(nHdl, '
' + CRLF)
//Relacionamentos
DbSelectArea('SX9')
SX9->(DbSetOrder(1))
If SX9->(DbSeek(SX2->X2_CHAVE))
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td colspan="5" align="center"><b><i>Relacionamentos(SX9)</i></b></td>
' + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td><b>X9_CDOM - Tabela Destino</b></td>
' + CRLF)
fWrite(nHdl, EncodeUTF8('
<td colspan="2"><b>X9_EXPDOM - Expressão Origem</b></td>
') + CRLF)
fWrite(nHdl, EncodeUTF8('
<td colspan="2"><b>X9_EXPCDOM - Expressão Destino</b></td>
') + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
//Percorre os campos
While ! SX9->(Eof()) .And. SX9->X9_DOM == SX2->X2_CHAVE
fWrite(nHdl, '
<tr>' + CRLF)
fWrite(nHdl, '
<td>'+SX9->X9_CDOM+'</td>
' + CRLF)
fWrite(nHdl, '
<td colspan="2">'+Alltrim(SX9->X9_EXPDOM)+'</td>
' + CRLF)
fWrite(nHdl, '
<td colspan="2">'+Alltrim(SX9->X9_EXPCDOM)+'</td>
' + CRLF)
fWrite(nHdl, '</tr>
' + CRLF)
SX9->(DbSkip())
EndDo
EndIf
fWrite(nHdl, '</center>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
return .t.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//gera tabelas de consulta padrão
User Function SPEXP5()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO +'F3\'
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
conout("Iniciando exportação do SXB")
if select("SXB_EXP") > 0
SXB_EXP->(DBCLOSEAREA())
endif
//-------------------
//Criação do objeto
//-------------------
oTempTable := FWTemporaryTable():New( "SXB_EXP" )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{"XB_ALIAS","C",240,0})
aadd(aFields,{"XB_TIPO","C",240,0})
aadd(aFields,{"XB_SEQ","C",240,0})
aadd(aFields,{"XB_COLUNA","C",240,0})
aadd(aFields,{"XB_DESCRI","C",240,0})
aadd(aFields,{"XB_CONTEM","C",290,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex("01", {"XB_ALIAS"} )
//------------------
//Criação da tabela
//------------------
oTempTable:Create()
//------------------
//Grava os dados na tabela temporaria by SQL
//------------------
if lBySQL
conout('inserindo dados no arquivo temporario por SQL')
cQuery := "INSERT INTO " + oTempTable:GetRealName() + ' ( '
For ii := 1 To Len(aFields)
cQuery += aFields[ii][1] + ","
Next ii
cQuery := SubStr(cQuery,1,Len(cQuery)-1)
cQuery += ") "
cQuery += " SELECT XB_ALIAS,XB_TIPO,XB_SEQ,XB_COLUNA,XB_DESCRI,substring(XB_CONTEM,1,290) "
cQuery += " FROM SXB990 SXB " //TODO mudar para o alias de sua tabela
cQuery += " WHERE SXB.D_E_L_E_T_ =' '"
conout(cQuery)
if TCSqlExec(cQuery) > 0
conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
return .t.
endif
else
conout('inserindo dados no arquivo temporario')
DbSelectArea('SXB')
SXB->(DbGoTop())
While !SXB->(EOF())
DbSelectArea('SXB_EXP')
reclock('SXB_EXP',.t.)
SXB_EXP->XB_ALIAS := alltrim(SXB->XB_ALIAS)
SXB_EXP->XB_TIPO := alltrim(SXB->XB_TIPO)
SXB_EXP->XB_SEQ := alltrim(SXB->XB_SEQ)
SXB_EXP->XB_COLUNA := alltrim(SXB->XB_COLUNA)
SXB_EXP->XB_DESCRI := alltrim(SXB->XB_DESCRI)
SXB_EXP->XB_CONTEM := alltrim(SXB->XB_CONTEM)
SXB_EXP->(MsUnlock())
DbSelectArea('SXB')
SXB->(DBSKIP())
Enddo
Endif
//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
cQuery := "select * from "+ oTempTable:GetRealName() + " Order by XB_ALIAS,XB_TIPO,XB_SEQ,XB_COLUNA,XB_DESCRI,XB_CONTEM"
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !eof()
if cAliAnt <> QRYTMP->XB_ALIAS
//Se nao for a primeira execucao, finaliza o arquivo anterior
if !empty(cAliAnt)
fWrite(nHdl, '</table>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
endif
cAliAnt := QRYTMP->XB_ALIAS
cArquivo := lower(alltrim(QRYTMP->XB_ALIAS))+'.html'
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
exit
Endif
//inicio da montagem do HTML
fWrite(nHdl, '<html>' + CRLF)
fWrite(nHdl, EncodeUTF8('<head><title>Consulta Pasdrão: '+ alltrim(QRYTMP->XB_ALIAS) + ' - '+ alltrim(QRYTMP->XB_DESCRI)+'</title></head>') + CRLF)
fWrite(nHdl, '<body>' + CRLF)
fWrite(nHdl, '<font color="orange">
<h2 id="'+SX2->X2_CHAVE+'">Consulta Padr�o: '+alltrim(QRYTMP->XB_ALIAS) + ' - '+ alltrim(QRYTMP->XB_DESCRI)+'</h2>
</font>' + CRLF)
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, EncodeUTF8('
<td colspan="6" align="center"><b><i>Consulta Padrão(SXB): '+alltrim(QRYTMP->XB_ALIAS) + ' - '+ alltrim(QRYTMP->XB_DESCRI)+'</i></b></td>
'))
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>XB_ALIAS</b></td>
')
fWrite(nHdl, '
<td><b>XB_TIPO</b></td>
')
fWrite(nHdl, '
<td><b>XB_SEQ</b></td>
')
fWrite(nHdl, '
<td><b>XB_COLUNA</b></td>
')
fWrite(nHdl, '
<td><b>XB_DESCRI</b></td>
')
fWrite(nHdl, '
<td><b>XB_CONTEM</b></td>
')
fWrite(nHdl, '</tr>
')
endif
//imprime todas as linhas
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_ALIAS)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_TIPO)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_SEQ)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_COLUNA)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_DESCRI)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->XB_CONTEM)+'</b></td>
')
fWrite(nHdl, '</tr>
')
DbSelectArea('QRYTMP')
QRYTMP->(dbskip())
Enddo
//Se executou algum SXB, fecha ultimo arquivo
if !empty(cAliAnt)
fWrite(nHdl, '</table>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
endif
//Fecha alias SQL
if select("QRYTMP") > 0
QRYTMP->(DBCLOSEAREA())
endif
//---------------------------------
//Exclui a tabela
//---------------------------------
oTempTable:Delete()
Return .t.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//gera tabelas de gatilhos
User Function SPEXP6()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO +'gatilhos\'
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
conout("Iniciando SX7")
//Exportar SXB
if select("SX7_EXP") > 0
SX7_EXP->(DBCLOSEAREA())
endif
//-------------------
//Cria��o do objeto
//-------------------
oTempTable := FWTemporaryTable():New( "SX7_EXP" )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{"X7_CAMPO","C",240,0})
aadd(aFields,{"X7_SEQUENC","C",240,0})
aadd(aFields,{"X7_REGRA","C",240,0})
aadd(aFields,{"X7_CDOMIN","C",240,0})
aadd(aFields,{"X7_TIPO","C",240,0})
aadd(aFields,{"X7_SEEK","C",240,0})
aadd(aFields,{"X7_ALIAS","C",240,0})
aadd(aFields,{"X7_ORDEM","N",20,1})
aadd(aFields,{"X7_CHAVE","C",240,0})
aadd(aFields,{"X7_CONDIC","C",240,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex("01", {"X7_CAMPO"} )
//------------------
//Cria��o da tabela
//------------------
oTempTable:Create()
//------------------
//Grava os dados na tabela temporaria by SQL
//------------------
if lBySQL
conout('inserindo dados no arquivo temporario por SQL')
cQuery := "INSERT INTO " + oTempTable:GetRealName()+' ( '
For ii := 1 To Len(aFields)
cQuery += aFields[ii][1] + ","
Next ii
cQuery := SubStr(cQuery,1,Len(cQuery)-1)
cQuery += ") "
cQuery += " SELECT substring(X7_CAMPO,1,240),substring(X7_SEQUENC,1,240),substring(X7_REGRA,1,240),substring(X7_CDOMIN,1,240),substring(X7_TIPO,1,240),substring(X7_SEEK,1,240),substring(X7_ALIAS,1,240),X7_ORDEM,substring(X7_CHAVE,1,240),substring(X7_CONDIC,1,240) "
cQuery += " FROM SX7990 SX7 " //TODO mudar para o alias de sua tabela
cQuery += " WHERE SX7.D_E_L_E_T_ =' ' "
conout(cQuery)
if TCSqlExec(cQuery) > 0
conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
return .t.
endif
else
conout('inserindo dados no arquivo temporario')
DbSelectArea('SX7')
SX7->(DbGoTop())
While !SX7->(EOF())
DbSelectArea('SX7_EXP')
reclock('SX7_EXP',.t.)
SX7_EXP->X7_CAMPO := alltrim(SX7->X7_CAMPO)
SX7_EXP->X7_SEQUENC := alltrim(SX7->X7_SEQUENC)
SX7_EXP->X7_REGRA := alltrim(SX7->X7_REGRA)
SX7_EXP->X7_CDOMIN := alltrim(SX7->X7_CDOMIN)
SX7_EXP->X7_TIPO := alltrim(SX7->X7_TIPO)
SX7_EXP->X7_SEEK := alltrim(SX7->X7_SEEK)
SX7_EXP->X7_ALIAS := alltrim(SX7->X7_ALIAS)
SX7_EXP->X7_ORDEM := SX7->X7_ORDEM
SX7_EXP->X7_CHAVE := alltrim(SX7->X7_CHAVE)
SX7_EXP->X7_CONDIC := alltrim(SX7->X7_CONDIC)
SX7_EXP->(MsUnlock())
DbSelectArea('SX7')
SX7->(DBSKIP())
Enddo
Endif
//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
if Select('QRYTMP') > 0
QRYTMP->(DbCloseAlias())
endif
cQuery := "select * from "+ oTempTable:GetRealName() + " Order by X7_CAMPO, X7_SEQUENC "
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !eof()
if cAliAnt <> QRYTMP->X7_CAMPO
//Se nao for a primeira execucao, finaliza o arquivo anterior
if !empty(cAliAnt)
fWrite(nHdl, '</table>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
endif
cAliAnt := QRYTMP->X7_CAMPO
cArquivo := alltrim(QRYTMP->X7_CAMPO)+'.html'
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' n�o pode ser criado!", "Aten��o")
exit
Endif
//inicio da montagem do HTML
fWrite(nHdl, '<html>' + CRLF)
fWrite(nHdl, '<head><title>Gatilhos Campo: '+ alltrim(QRYTMP->X7_CAMPO)+'</title></head>' + CRLF)
fWrite(nHdl, '<body>' + CRLF)
fWrite(nHdl, '<font color="orange">
<h2 id="'+SX2->X2_CHAVE+'">Gatilhos no Campo: '+alltrim(QRYTMP->X7_CAMPO)+'</h2>
</font>' + CRLF)
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td colspan="10" align="center"><b><i>Gatilhos(SX7) no Campo: '+alltrim(QRYTMP->X7_CAMPO)+'</i></b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>X7_CAMPO</b></td>
')
fWrite(nHdl, '
<td><b>X7_SEQUENC</b></td>
')
fWrite(nHdl, '
<td><b>X7_REGRA</b></td>
')
fWrite(nHdl, '
<td><b>X7_CDOMIN</b></td>
')
fWrite(nHdl, '
<td><b>X7_TIPO</b></td>
')
fWrite(nHdl, '
<td><b>X7_SEEK</b></td>
')
fWrite(nHdl, '
<td><b>X7_ALIAS</b></td>
')
fWrite(nHdl, '
<td><b>X7_ORDEM</b></td>
')
fWrite(nHdl, '
<td><b>X7_CHAVE</b></td>
')
fWrite(nHdl, '
<td><b>X7_CONDIC</b></td>
')
fWrite(nHdl, '</tr>
')
endif
//imprime todas as linhas
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_CAMPO)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_SEQUENC)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_REGRA)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_CDOMIN)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_TIPO)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_SEEK)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_ALIAS)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(cvaltochar(QRYTMP->X7_ORDEM))+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_CHAVE)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+alltrim(QRYTMP->X7_CONDIC)+'</b></td>
')
fWrite(nHdl, '</tr>
')
DbSelectArea('QRYTMP')
QRYTMP->(dbskip())
Enddo
//Se executou algum SXB, fecha ultimo arquivo
if !empty(cAliAnt)
fWrite(nHdl, '</table>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
endif
//Fecha alias SQL
if select("QRYTMP") > 0
QRYTMP->(DBCLOSEAREA())
endif
//---------------------------------
//Exclui a tabela
//---------------------------------
oTempTable:Delete()
Return .t.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//gera tabelas de Grupo de Campos
User Function SPEXP7()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO +'grupoCampo\'
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
conout("Iniciando SXG")
//Exportar SXB
dbselectArea('SXG')
DbGoTop()
While !eof()
cArquivo := alltrim(SXG->XG_GRUPO)+'.html'
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
exit
Endif
//inicio da montagem do HTML
fWrite(nHdl, '<html>' + CRLF)
fWrite(nHdl, '<head><title>Grupo de Campo(SXG): '+ alltrim(SXG->XG_GRUPO)+'</title></head>' + CRLF)
fWrite(nHdl, '<body>' + CRLF)
fWrite(nHdl, '<font color="orange">
<h2 id="'+SX2->X2_CHAVE+'">Grupo de Campo(SXG): '+alltrim(SXG->XG_GRUPO)+'</h2>
</font>' + CRLF)
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
<table border="1">' + CRLF)
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td colspan="10" align="center"><b><i>Grupo de Campo(SXG): '+alltrim(SXG->XG_GRUPO)+'</i></b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>XG_GRUPO</b></td>
')
fWrite(nHdl, '
<td><b>XG_DESCRI</b></td>
')
fWrite(nHdl, '
<td><b>XG_SIZEMAX</b></td>
')
fWrite(nHdl, '
<td><b>XG_SIZEMIN</b></td>
')
fWrite(nHdl, '
<td><b>XG_SIZE</b></td>
')
fWrite(nHdl, '
<td><b>XG_PICTURE</b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '
<tr>')
fWrite(nHdl, '
<td><b>'+ Alltrim(SXG->XG_GRUPO)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+ Alltrim(SXG->XG_DESCRI)+'</b></td>
')
fWrite(nHdl, '
<td><b>'+ Alltrim(cvaltochar(SXG->XG_SIZEMAX))+'</b></td>
')
fWrite(nHdl, '
<td><b>'+ Alltrim(cvaltochar(SXG->XG_SIZEMIN))+'</b></td>
')
fWrite(nHdl, '
<td><b>'+ Alltrim(cvaltochar(SXG->XG_SIZE))+'</b></td>
')
fWrite(nHdl, '
<td><b>'+Alltrim( SXG->XG_PICTURE)+'</b></td>
')
fWrite(nHdl, '</tr>
')
fWrite(nHdl, '</table>
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '</html>' + CRLF)
fClose(nHdl)
conout("Finalizado: "+cArquivo)
dbselectArea('SXG')
SXG->(DbSkip())
enddo
Return .t.
//Retorna o Header da Pagina
static function FSHeader()
Local cReturn as character
cReturn := ' '
//inicio da montagem do HTML
cReturn += '<?php' + CRLF cReturn += "if(file_exists('../../../wp-load.php')) {" + CRLF cReturn += ' require_once("../../../wp-load.php");' + CRLF cReturn += "} else if(file_exists('../../wp-load.php')) { " + CRLF cReturn += 'require_once("../../wp-load.php");' + CRLF cReturn += "} else if(file_exists('../wp-load.php')) {" + CRLF cReturn += ' require_once("../wp-load.php");' + CRLF cReturn += "} else if(file_exists('wp-load.php')) { " + CRLF cReturn += ' require_once("wp-load.php");' + CRLF cReturn += "} else if(file_exists('../../../../wp-load.php')) {" + CRLF cReturn += 'require_once("../../../../wp-load.php"); ' + CRLF cReturn += " } else if(file_exists('../../../../wp-load.php')) {" + CRLF cReturn += 'require_once("../../../../wp-load.php");' + CRLF cReturn += "} else { " + CRLF cReturn += " if(file_exists('../../../wp-config.php')) { " + CRLF cReturn += ' require_once("../../../wp-config.php");' + CRLF cReturn += " } else if(file_exists('../../wp-config.php')) { " + CRLF cReturn += ' require_once("../../wp-config.php"); ' + CRLF cReturn += " } else if(file_exists('../wp-config.php')) { " + CRLF cReturn += ' require_once("../wp-config.php"); ' + CRLF cReturn += " } else if(file_exists('wp-config.php')) { " + CRLF cReturn += ' require_once("wp-config.php"); ' + CRLF cReturn += " } else if(file_exists('../../../../wp-config.php')) { " + CRLF cReturn += ' require_once("../../../../wp-config.php"); ' + CRLF cReturn += " } else if(file_exists('../../../../wp-config.php')) { " + CRLF cReturn += ' require_once("../../../../wp-config.php"); ' + CRLF cReturn += " } else { " + CRLF cReturn += ' exit; ' + CRLF cReturn += " } " + CRLF cReturn += '} ' + CRLF cReturn += 'get_header(); ' + CRLF cReturn += '?> ' + CRLF
cReturn += '
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%3E%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%23table-scroll%20%7B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20height%3A450px%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20overflow%3Aauto%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20margin-top%3A20px%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%7D%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%23table-wrapper%20table%20thead%20th%20.text%20%7B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20position%3Aabsolute%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20top%3A-20px%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20z-index%3A2%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20height%3A20px%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20width%3A35%25%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20border%3A1px%20solid%20red%3B%20'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%7D%20'%20%2B%20CRLF%0AcReturn%20%2B%3D'%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<style>" title="<style>" />
' + CRLF
return cReturn
//Retorna o rodapé
Static Function FSFooter()
Local cReturn as character
cReturn := ' '
cReturn += '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'function%20myFunction()%20%7B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%2F%2F%20Declare%20variables'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20var%20input%2C%20filter%2C%20table%2C%20tr%2C%20td%2C%20i%2C%20txtValue%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20input%20%3D%20document.getElementById(%22myInput%22)%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20filter%20%3D%20input.value.toUpperCase()%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20table%20%3D%20document.getElementById(%22myTable%22)%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20tr%20%3D%20table.getElementsByTagName(%22tr%22)%3B'%20%2B%20CRLF%0A%0AcReturn%20%2B%3D%20'%20%20%2F%2F%20Loop%20through%20all%20table%20rows%2C%20and%20hide%20those%20who%20dont%20match%20the%20search%20query'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20for%20(i%20%3D%200%3B%20i%20%3C%20tr.length%3B%20i%2B%2B)%20%7B'%20%2B%20CRLF%20cReturn%20%2B%3D%20'%20td%20%3D%20tr%5Bi%5D.getElementsByTagName(%22td%22)%5B0%5D%3B'%20%2B%20CRLF%20cReturn%20%2B%3D%20'%20if%20(td)%20%7B'%20%2B%20CRLF%20cReturn%20%2B%3D%20'%20txtValue%20%3D%20td.textContent%20%7C%7C%20td.innerText%3B'%20%2B%20CRLF%20cReturn%20%2B%3D%20'%20if%20(txtValue.toUpperCase().indexOf(filter)%20%3E%20-1)%20%7B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%20%20%20%20%20%20tr%5Bi%5D.style.display%20%3D%20%22%22%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%20%20%20%20%7D%20else%20%7B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%20%20%20%20%20%20tr%5Bi%5D.style.display%20%3D%20%22none%22%3B'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%20%20%20%20%7D'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%20%20%7D'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%20%20%7D'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%7D'%20%2B%20CRLF%0AcReturn%20%2B%3D%20'%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />' + CRLF
cReturn += '<?php' + CRLF cReturn += 'get_footer();' + CRLF cReturn += '?>' + CRLF
return cReturn
//gera arquivo com todas as tabelas(listagem)
User Function SPEXP1()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
cArquivo := 'Tabelas_Protheus.php' //arquivo pai que chamas todos as demais tabelas
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
return
Endif
fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover
fWrite(nHdl, '<body> ' + CRLF)
fWrite(nHdl, '<center>
' + CRLF)
fWrite(nHdl, '
<h2>Tabelas Protheus </h2>
' + CRLF)
fWrite(nHdl, EncodeUTF8(' <input type="text" id="myInput" style="width: 400px;" onkeyup="myFunction()" placeholder="Digite código da tabela ou descrição.."> ') + CRLF)
fWrite(nHdl, '
<div id="table-wrapper" style="width: 450px; height: 700px" >
' + CRLF)
fWrite(nHdl, '
<div id="table-scroll" >
' + CRLF)
fWrite(nHdl, '
<table border="1" id="myTable" > ' + CRLF)
fWrite(nHdl, '
<thead>
' + CRLF)
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<th >Tabela</th>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
fWrite(nHdl, ' </thead>
' + CRLF)
fWrite(nHdl, '
<tbody> ' + CRLF)
DbSelectArea('SX2')
SX2->(DbGoTop())
While !SX2->(EoF())
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/tabelas/tabela_'+alltrim(lower(SX2->X2_CHAVE))+'.html">'+EncodeUTF8(alltrim(Upper(SX2->X2_CHAVE)+' - '+(FwSX2Util():GetX2Name( SX2->X2_CHAVE ))))+'</a></td>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
SX2->(DbSkip())
EndDo
fWrite(nHdl, ' </tbody>
' + CRLF)
fWrite(nHdl, ' </table>
' + CRLF)
fWrite(nHdl, ' </div>
' + CRLF)
fWrite(nHdl, '</div>
' + CRLF)
fWrite(nHdl, '</center>' + CRLF)
fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress
fClose(nHdl)
conout("Finalizado exportação da pagina de tabela: "+cArquivo)
Return .t.
//gera arquivo com todas as consulta padrões(listagem)
User Function SPEXP2()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
Local ii as numeric
cDiretori := CAMINHO
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
cArquivo := 'Consulta_Padrao_Protheus.php' //arquivo pai que chamas todos as demais tabelas
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
return
Endif
fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover
fWrite(nHdl, '<body> ' + CRLF)
fWrite(nHdl, '<center>
' + CRLF)
fWrite(nHdl, EncodeUTF8('
<h2>Consulta Padrão Protheus </h2>
') + CRLF)
fWrite(nHdl, EncodeUTF8(' <input type="text" id="myInput" style="width: 400px;" onkeyup="myFunction()" placeholder="Digite código da consulta ou descrição.."> ') + CRLF)
fWrite(nHdl, '
<div id="table-wrapper" style="width: 450px; height: 700px" >
' + CRLF)
fWrite(nHdl, '
<div id="table-scroll" >
' + CRLF)
fWrite(nHdl, '
<table border="1" id="myTable" > ' + CRLF)
fWrite(nHdl, '
<thead>
' + CRLF)
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, EncodeUTF8('
<th >Consulta Padrão</th>
') + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
fWrite(nHdl, ' </thead>
' + CRLF)
fWrite(nHdl, '
<tbody> ' + CRLF)
If select("SXB_EXP") > 0
SXB_EXP->(DBCLOSEAREA())
EndIf
//-------------------
//Criação do objeto tebela temporaria
//-------------------
oTempTable := FWTemporaryTable():New( "SXB_EXP" )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{"XB_ALIAS","C",240,0})
aadd(aFields,{"XB_DESCRI","C",240,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex("01", {"XB_ALIAS"} )
//------------------
//Criação da tabela temporaria
//------------------
oTempTable:Create()
//------------------
//Grava os dados na tabela temporaria by SQL
//------------------
if lBySQL
conout('inserindo dados no arquivo temporario por SQL')
cQuery := "INSERT INTO " + oTempTable:GetRealName() +" ( "
For ii := 1 To Len(aFields)
cQuery += aFields[ii][1] + ","
Next ii
cQuery := SubStr(cQuery,1,Len(cQuery)-1)
cQuery += ") "
cQuery += " select XB_ALIAS,XB_DESCRI from SXB990 SXB "
cQuery += " where XB_TIPO=1 and SXB.D_E_L_E_T_ =' ' "
//cQuery += " order by XB_ALIAS "
//conout(cQuery)
if TCSqlExec(cQuery) > 0
conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
return .t.
endif
else
conout('inserindo dados no arquivo temporario')
DbSelectArea('SXB')
SXB->(DbGoTop())
While !SXB->(EOF())
If alltrim(SXB->XB_TIPO) <> '1'
DbSelectArea('SXB')
SXB->(DBSKIP())
loop
endif
DbSelectArea('SXB_EXP')
reclock('SXB_EXP',.t.)
SXB_EXP->XB_ALIAS := alltrim(SXB->XB_ALIAS)
SXB_EXP->XB_DESCRI := alltrim(SXB->XB_DESCRI)
SXB_EXP->(MsUnlock())
DbSelectArea('SXB')
SXB->(DBSKIP())
Enddo
Endif
//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
cQuery := "select * from "+ oTempTable:GetRealName() + " Order by XB_ALIAS"
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !(QRYTMP->(eof()))
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/F3/'+alltrim(lower(QRYTMP->XB_ALIAS))+'.html">'+EncodeUTF8(alltrim(Upper(QRYTMP->XB_ALIAS)+' - '+Capital(QRYTMP->XB_DESCRI)))+'</a></td>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
QRYTMP->(dbskip())
Enddo
fWrite(nHdl, ' </tbody>
' + CRLF)
fWrite(nHdl, ' </table>
' + CRLF)
fWrite(nHdl, ' </div>
' + CRLF)
fWrite(nHdl, '</div>
' + CRLF)
fWrite(nHdl, '</center>' + CRLF)
fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress
fClose(nHdl)
conout("Finalizado exportação da pagina de tabela: "+cArquivo)
Return .t.
//gera arquivo com todas os grupo de campo
User Function SPEXP3()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
cArquivo := 'grupo_campos_Protheus.php' //arquivo pai que chamas todos as demais tabelas
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
return
Endif
fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover
fWrite(nHdl, '<body> ' + CRLF)
fWrite(nHdl, '<center>
' + CRLF)
fWrite(nHdl, '
<h2>Grupo de Campos Protheus </h2>
' + CRLF)
fWrite(nHdl, EncodeUTF8(' <input type="text" id="myInput" style="width: 400px;" onkeyup="myFunction()" placeholder="Digite código da Grupo ou descrição.."> ') + CRLF)
fWrite(nHdl, '
<div id="table-wrapper" style="width: 450px; height: 700px" >
' + CRLF)
fWrite(nHdl, '
<div id="table-scroll" >
' + CRLF)
fWrite(nHdl, '
<table border="1" id="myTable" > ' + CRLF)
fWrite(nHdl, '
<thead>
' + CRLF)
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<th >Grupo de Campos</th>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
fWrite(nHdl, ' </thead>
' + CRLF)
fWrite(nHdl, '
<tbody> ' + CRLF)
DbSelectArea('SXG')
SXG->(DbGoTop())
While !SXG->(EoF())
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/grupoCampo/'+alltrim(lower(SXG->XG_GRUPO))+'.html">'+EncodeUTF8(alltrim(Upper(SXG->XG_GRUPO)+' - '+capital(SXG->XG_DESCRI)))+'</a></td>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
SXG->(DbSkip())
EndDo
fWrite(nHdl, ' </tbody>
' + CRLF)
fWrite(nHdl, ' </table>
' + CRLF)
fWrite(nHdl, ' </div>
' + CRLF)
fWrite(nHdl, '</div>
' + CRLF)
fWrite(nHdl, '</center>' + CRLF)
fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress
fClose(nHdl)
conout("Finalizado exportação da pagina de grupo campos: "+cArquivo)
Return .t.
//gera arquivo com todas os gatilhos
User Function SPEXP4()
Local cDiretori as character
Local cArquivo as character
Local nHdl as numeric
cDiretori := CAMINHO
If !ExistDir( cDiretori ) //Checar se diretorio existe
Conout('O Diretório: '+cDiretori+' Não existe, crie antes de continuar')
Return .t.
else
Conout('O arquivo será gerado no caminho: '+cDiretori+'.')
Endif
//conout(IsBlind())
If !IsBlind() //nao for executado do menu
RpcSetType(3)
RpcSetEnv('99', '01')
Endif
cArquivo := 'Gatilhos_Protheus.php' //arquivo pai que chamas todos as demais tabelas
conout("Iniciando: "+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
MsgAlert("O arquivo '"+cDiretori+cArquivo+"' não pode ser criado!", "Atenção")
return
Endif
fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover
fWrite(nHdl, '<body> ' + CRLF)
fWrite(nHdl, '<center>
' + CRLF)
fWrite(nHdl, '
<h2>Gatilhos Protheus </h2>
' + CRLF)
fWrite(nHdl, EncodeUTF8(' <input type="text" id="myInput" style="width: 400px;" onkeyup="myFunction()" placeholder="Digite código do campo.."> ') + CRLF)
fWrite(nHdl, '
<div id="table-wrapper" style="width: 450px; height: 700px" >
' + CRLF)
fWrite(nHdl, '
<div id="table-scroll" >
' + CRLF)
fWrite(nHdl, '
<table border="1" id="myTable" > ' + CRLF)
fWrite(nHdl, '
<thead>
' + CRLF)
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<th >Gatilhos</th>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
fWrite(nHdl, ' </thead>
' + CRLF)
fWrite(nHdl, '
<tbody> ' + CRLF)
DbSelectArea('SX7')
dbsetorder(1)
SX7->(DbGoTop())
cCampo := ' '
While !SX7->(EoF())
If cCampo <> SX7->X7_CAMPO
cCampo := SX7->X7_CAMPO
fWrite(nHdl, '
<tr> ' + CRLF)
fWrite(nHdl, '
<td><a href="/Tabelas_Protheus/gatilhos/'+alltrim(lower(SX7->X7_CAMPO))+'.html">'+EncodeUTF8(alltrim(Upper(SX7->X7_CAMPO)))+'</a></td>
' + CRLF)
fWrite(nHdl, ' </tr>
' + CRLF)
Endif
SX7->(DbSkip())
EndDo
fWrite(nHdl, ' </tbody>
' + CRLF)
fWrite(nHdl, ' </table>
' + CRLF)
fWrite(nHdl, ' </div>
' + CRLF)
fWrite(nHdl, '</div>
' + CRLF)
fWrite(nHdl, '</center>' + CRLF)
fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress
fClose(nHdl)
conout("Finalizado exportação da pagina de gatilhos: "+cArquivo)
Return .t.
Dicas e sugestões entre em contato
Obrigado
0 comentário