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