<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos Configurador &#8211; Sem Preju</title>
	<atom:link href="https://sempreju.com.br/category/protheus/configurador/feed/" rel="self" type="application/rss+xml" />
	<link>https://sempreju.com.br/category/protheus/configurador/</link>
	<description>Conhecimento Gratuito</description>
	<lastBuildDate>Tue, 23 Mar 2021 00:03:00 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Bloqueando opções na Pergunte</title>
		<link>https://sempreju.com.br/bloqueando-opcoes-na-pergunte/</link>
					<comments>https://sempreju.com.br/bloqueando-opcoes-na-pergunte/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Tue, 23 Mar 2021 00:01:08 +0000</pubDate>
				<category><![CDATA[Configurador]]></category>
		<category><![CDATA[Protheus]]></category>
		<category><![CDATA[configurador]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=919</guid>

					<description><![CDATA[<p>Olá pessoal. Neste artigo iremos demonstrar como bloquear opções nas perguntes,  se está tendo problemas com alterações nas configurações pré-definidas do sistema, como contabilização automática ou aglutinação, vamos demonstrar  mostrar como restringir o acesso a alteração pelos usuários. Nesse exemplo vamos utilizar a rotina FINA040 (possui a pergunta FIN040 para<a class="moretag" href="https://sempreju.com.br/bloqueando-opcoes-na-pergunte/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/bloqueando-opcoes-na-pergunte/">Bloqueando opções na Pergunte</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal.</p>
<p align="justify">Neste artigo iremos demonstrar como bloquear opções nas perguntes,  se está tendo problemas com alterações nas configurações pré-definidas do sistema, como contabilização automática ou aglutinação, vamos demonstrar  mostrar como restringir o acesso a alteração pelos usuários.</p>
<p align="justify">Nesse exemplo vamos utilizar a rotina FINA040 (possui a pergunta FIN040 para parametrização da contabilização), acessando a rotina e pressionando F12, a pergunte é exibida.</p>
<p align="justify"><img fetchpriority="high" decoding="async" src="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio.jpg" alt="" width="1918" height="1015" class="aligncenter size-full wp-image-920" srcset="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio.jpg 1918w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio-300x159.jpg 300w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio-1024x542.jpg 1024w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio-768x406.jpg 768w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_pergunte_bloqueio-1536x813.jpg 1536w" sizes="(max-width: 1918px) 100vw, 1918px" /></p>
<p>Nesse exemplo vamos bloquear as perguntes MV_PAR01 e MV_PAR02, para isso acesso o <strong>configurador</strong>,<strong>.</strong></p>
<p><span>O caminho completo da rotina é :  </span><strong><em>Usuários &gt; Senhas &gt; Config. Perguntas</em></strong></p>
<p><img decoding="async" src="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_protheus_configurar_pergunte.jpg" alt="" width="372" height="271" class="aligncenter size-full wp-image-921" srcset="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_protheus_configurar_pergunte.jpg 372w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_protheus_configurar_pergunte-300x219.jpg 300w" sizes="(max-width: 372px) 100vw, 372px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Clique em </span><strong>Incluir</strong><span> para adicionarmos uma restrição ao pergunte, informe o nome da pergunta, no nosso exemplo será FIN040, as opções serão carregadas. A</span><span>s linhas do pergunte aparecerão como deletadas, recupere a linha que deseja efetuar a manutenção e defina o conteúdo padrão.</span></p>
<p>&nbsp;</p>
<p><img decoding="async" src="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte.jpg" alt="" width="1921" height="561" class="aligncenter size-full wp-image-922" srcset="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte.jpg 1921w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte-300x88.jpg 300w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte-1024x299.jpg 1024w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte-768x224.jpg 768w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_bloquear_pergunte-1536x449.jpg 1536w" sizes="(max-width: 1921px) 100vw, 1921px" /></p>
<p>&nbsp;</p>
<p>Informe o usuário ou grupo de usuário que desejar vincular a essa nova regra e salve.</p>
<p>Ao acessar a rotina novamente e verificar as perguntes estarão bloqueadas!</p>
<p><img loading="lazy" decoding="async" src="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado.jpg" alt="" width="1924" height="1008" class="aligncenter size-full wp-image-923" srcset="https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado.jpg 1924w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado-300x157.jpg 300w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado-1024x536.jpg 1024w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado-768x402.jpg 768w, https://sempreju.com.br/wp-content/uploads/2021/03/sempreju_resultado-1536x805.jpg 1536w" sizes="(max-width: 1924px) 100vw, 1924px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>O código fonte de outros exemplos podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a> oficial.</p>
<p><em>Post interessantes:</em></p>
<p>Aprenda a instalar o Protheus no Windows <a href="https://sempreju.com.br/tag/instalarprotheuswindows/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Linux <a href="https://sempreju.com.br/tag/instalarprotheuslinux/">aqui</a>.</p>
<p>configurar serviço rest <a href="https://sempreju.com.br/webservice-rest-no-erp-protheus-part-1/">aqui</a>.</p>
<p>Retornar datas por extenso <a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso <a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>O post <a href="https://sempreju.com.br/bloqueando-opcoes-na-pergunte/">Bloqueando opções na Pergunte</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/bloqueando-opcoes-na-pergunte/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Alterando para o novo visual do Protheus com PO UI</title>
		<link>https://sempreju.com.br/novo-vizual-do-protheus/</link>
					<comments>https://sempreju.com.br/novo-vizual-do-protheus/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Tue, 15 Dec 2020 13:43:41 +0000</pubDate>
				<category><![CDATA[ADVPL - REST]]></category>
		<category><![CDATA[Configurador]]></category>
		<category><![CDATA[ADVPL]]></category>
		<category><![CDATA[Protheus]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=815</guid>

					<description><![CDATA[<p>Olá pessoal, já conferiram o novo visual do protheus? Com a evolução da tecnologia, o Protheus veio se adaptando e evoluindo conforme as necessidades do mercado, um avanço mesmo por exemplo, foi a utilização de CSS nos componentes gráficos, através das funcionalidades fornecidas com o usdo to TWebEngine e FWCallApp,<a class="moretag" href="https://sempreju.com.br/novo-vizual-do-protheus/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/novo-vizual-do-protheus/">Alterando para o novo visual do Protheus com PO UI</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal, já conferiram o novo visual do protheus?</p>
<p>Com a evolução da tecnologia, o Protheus veio se adaptando e evoluindo conforme as necessidades do mercado, um avanço mesmo por exemplo, foi a utilização de CSS nos componentes gráficos, através das funcionalidades fornecidas com o usdo to TWebEngine e FWCallApp, será possível criar aplicações com o visual e recursos usados na web, ou seja visualmente mais modernos, e através de REST integrá-las com o Protheus.</p>
<p>A documentação (inclusive em como ativar) você confere em<span> </span><a href="https://tdn.totvs.com/display/framework/Nova+interface+do+Protheus+com+PO+UI">https://tdn.totvs.com/display/framework/Nova+interface+do+Protheus+com+PO+UI</a></p>
<p><span>Nessa primeira fase, a novidade chega com a tela de login e a de seleção de ambiente, abaixo o print do novo visual.</span></p>
<p><img decoding="async" src="https://tdn.totvs.com/download/attachments/573183963/2020-11-18%2016_52_57-TOTVS%20Constru%C3%A7%C3%A3o%20e%20Projetos%20%28TOTVS%29%2002.9.0099.png?version=1&amp;modificationDate=1605901009927&amp;api=v2" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>O código fonte desse e outros exemplos podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a>.</p>
<p><em>Post interessantes:</em></p>
<p>Ponto de entrada ao acessar o sistema <a href="https://sempreju.com.br/executando-rotinas-ao-abrir-um-modulo-afterlogin-advpl/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Windows <a href="https://sempreju.com.br/tag/instalarprotheuswindows/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Linux <a href="https://sempreju.com.br/tag/instalarprotheuslinux/">aqui</a>.</p>
<p>Retornar datas por extenso <a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso <a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>O post <a href="https://sempreju.com.br/novo-vizual-do-protheus/">Alterando para o novo visual do Protheus com PO UI</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/novo-vizual-do-protheus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como atualizar os arquivos de Help dos Campos &#8211; Completo</title>
		<link>https://sempreju.com.br/como-atualizar-o-help-de-campo/</link>
					<comments>https://sempreju.com.br/como-atualizar-o-help-de-campo/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Tue, 08 Dec 2020 17:53:26 +0000</pubDate>
				<category><![CDATA[Administração]]></category>
		<category><![CDATA[Configurador]]></category>
		<category><![CDATA[ADVPL]]></category>
		<category><![CDATA[Protheus]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=817</guid>

					<description><![CDATA[<p>Olá pessoal Segue como realizar a atualização do help dos campos, auxiliando o usuário na identificação de ajuda. &#160; Primeiramente faça o download do arquivo, seguindo as etapas abaixo: &#8211; Portal do Cliente: http://suporte.totvs.com &#8211; Menu Downloads e Atualizações &#8211; Linha Protheus &#8211; Microsiga Protheus Versão 12.1.XX (onde XX é a<a class="moretag" href="https://sempreju.com.br/como-atualizar-o-help-de-campo/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/como-atualizar-o-help-de-campo/">Como atualizar os arquivos de Help dos Campos &#8211; Completo</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal</p>
<p>Segue como realizar a atualização do help dos campos, auxiliando o usuário na identificação de ajuda.</p>
<p>&nbsp;</p>
<p>Primeiramente faça o download do arquivo, seguindo as etapas abaixo:</p>
<p><span>&#8211; Portal do Cliente: </span><a href="http://suporte.totvs.com/" class="external-link" rel="nofollow">http://suporte.totvs.com</a><br />
<span>&#8211; Menu Downloads e Atualizações</span><br />
<span>&#8211; Linha Protheus</span><br />
<span>&#8211; Microsiga Protheus Versão 12.1.XX (onde XX é a Release do seu P12)</span><br />
<span>&#8211; Todos</span><br />
<span>&#8211; Categoria: Help de campo/pergunta</span><br />
<span>&#8211; Baixe os arquivos HELPS DE CAMPOS/PERGUNTAS DIFERENCIAL &#8211; BRASIL e HELPS DE CAMPOS/PERGUNTAS COMPLETO &#8211; BRASIL</span></p>
<p>&nbsp;</p>
<p>Após baixar o pacote, descompacte os arquivos .txt para dentro da pasta<span> </span><strong>Systemload</strong><span> </span>do Protheus.</p>
<p>Para atualizar, pare o serviço do Protheus, acesse o módulo 99-Configurador, navegue em Atualizações / Help / Atualização do Help</p>
<p>&nbsp;</p>
<p>Aguarde o processamento para a atualizar todos os help.</p>
<p>&nbsp;</p>
<p>O código fonte desse e outros exemplos podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a>.</p>
<p><em>Post interessantes:</em></p>
<p>Ponto de entrada ao acessar o sistema <a href="https://sempreju.com.br/executando-rotinas-ao-abrir-um-modulo-afterlogin-advpl/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Windows <a href="https://sempreju.com.br/tag/instalarprotheuswindows/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Linux <a href="https://sempreju.com.br/tag/instalarprotheuslinux/">aqui</a>.</p>
<p>Retornar datas por extenso <a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso <a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>O post <a href="https://sempreju.com.br/como-atualizar-o-help-de-campo/">Como atualizar os arquivos de Help dos Campos &#8211; Completo</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/como-atualizar-o-help-de-campo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Entendendo o SX5 &#8211; Tabelas Genéricas do Protheus</title>
		<link>https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/</link>
					<comments>https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Mon, 07 Dec 2020 13:17:39 +0000</pubDate>
				<category><![CDATA[ADVPL - Dicas]]></category>
		<category><![CDATA[Configurador]]></category>
		<category><![CDATA[ADVPL]]></category>
		<category><![CDATA[Protheus]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=813</guid>

					<description><![CDATA[<p>Olá pessoal Esta vez trouxe uma dica para facilitar o entendimento da SX5. O que é SX5 Algumas vezes precisamos de um cadastro simples com duas colunas  código e valor, por exemplo, estado e sua sigla, temos no Microsiga Protheus uma estrutura genéricas de tabelas. O principal ganho é em<a class="moretag" href="https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/">Entendendo o SX5 &#8211; Tabelas Genéricas do Protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal</p>
<p><span>Esta vez trouxe uma dica para facilitar o entendimento da SX5.</span></p>
<div class="fullwidth">
<div class="vc_row wpb_row vc_row-fluid">
<div class="wpb_column vc_column_container vc_col-sm-12">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<h2 class="vc_custom_heading">O que é SX5</h2>
</div>
</div>
</div>
</div>
<p>Algumas vezes precisamos de um cadastro simples com duas colunas  código e valor, por exemplo, estado e sua sigla, temos no Microsiga Protheus uma estrutura genéricas de tabelas.</p>
<p>O principal ganho é em tempo, ao evitar que se crie mais uma tabela no banco de dados, crie rotinas para inclusão e consulta padrões para ela(LookUps).</p>
<p>Por padrão os valores das tabelas Genéricas são adicionados via o modulo de Configurador, que apenas os estão no grupo de Administradores tem acesso.</p>
<p>Devemos ficar atento, para identificarmos quando o uso do SX5 é uma boa ideia. Para isso tomamos como base duas simples de perguntas:</p>
<ol>
<li>O usuário comum irá poder adicionar dados nessa tabela?</li>
<li>É possível que num futuro essa tabela necessite de mais do que um campo valor?</li>
</ol>
<p>Quando respondemos sim para qualquer uma dessas perguntas, é bem provável que a tabela genérica não atenda as suas necessidades. O que ocorre quando respondemos sim para uma dessas perguntas.</p>
<ol>
<li>Se o usuário poderá adicionar os dados a tabela, é muito provável que precisaremos fazer validações sobre a entrada de dados dele, portanto uma rotina especifica é recomendada pois não temos mecanismos para efetuar isso na tabela Genérica; somente se ciarmos um fonte com essas tratativas chumbadas, o que pode não ser uma boa prática.</li>
<li>Caso se identifique que mais cedo ou mais tarde será necessário um ou mais campos na tabela não podemos o fazê-lo, pois o tabela é Genérica e não podemos criar um campo especifico apenas para sua tabela;</li>
</ol>
<div class="vc_row wpb_row vc_row-fluid">
<div class="wpb_column vc_column_container vc_col-sm-12">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<p><span style="font-size: 37px;">Estrutura SX5 Tabelas Genéricas</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="fullwidth">
<div class="vc_row wpb_row vc_row-fluid">
<div class="wpb_column vc_column_container vc_col-sm-12">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="vc_empty_space"><span class="vc_empty_space_inner"></span></div>
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<div class="table-responsive wprt_style_display">
<table class="confluenceTable table">
<tbody>
<tr>
<td class="confluenceTd"><strong>Campos</strong></td>
<td class="confluenceTd"><strong>Tipo</strong></td>
<td class="confluenceTd"><strong>Descrição</strong></td>
</tr>
<tr>
<td class="confluenceTd">X5_FILIAL</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Código da Filial do sistema</td>
</tr>
<tr>
<td class="confluenceTd">X5_TABELA</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Código da tabela que será utilizada como chave .</td>
</tr>
<tr>
<td class="confluenceTd">X5_CHAVE</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Código que pode ter 6 caracteres para identificação de um valor na tabela</td>
</tr>
<tr>
<td class="confluenceTd">X5_DESCRI</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Conteúdo no idioma Português</td>
</tr>
<tr>
<td class="confluenceTd">X5_DESCSPA</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Conteúdo  no idioma Espanhol</td>
</tr>
<tr>
<td class="confluenceTd">X5_DESCENG</td>
<td class="confluenceTd">Caracter</td>
<td class="confluenceTd">Conteúdo no idioma Inglês</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>O código fonte desse e outros exemplos podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a>.</p>
<p><em>Post interessantes:</em></p>
<p>Ponto de entrada ao acessar o sistema <a href="https://sempreju.com.br/executando-rotinas-ao-abrir-um-modulo-afterlogin-advpl/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Windows <a href="https://sempreju.com.br/tag/instalarprotheuswindows/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Linux <a href="https://sempreju.com.br/tag/instalarprotheuslinux/">aqui</a>.</p>
<p>Retornar datas por extenso <a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso <a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>O post <a href="https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/">Entendendo o SX5 &#8211; Tabelas Genéricas do Protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/entendendo-o-sx5-tabelas-genericas-do-protheus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Criação de Módulos Específicos no Protheus</title>
		<link>https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/</link>
					<comments>https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Sun, 15 Nov 2020 15:30:46 +0000</pubDate>
				<category><![CDATA[ADVPL - Dicas]]></category>
		<category><![CDATA[Configurador]]></category>
		<category><![CDATA[ADVPL]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=794</guid>

					<description><![CDATA[<p>Olá pessoal Esta vez trouxe uma dica para quem está precisando adicionar um novo modulo? As vezes customizamos um processo inteiro em nosso cliente que as rotinas não se encaixam em nenhum módulo padrão! No Protheus existe opção de criação de até três módulos específicos. Na realidade eles já existem,<a class="moretag" href="https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/">Criação de Módulos Específicos no Protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal</p>
<p><span>Esta vez trouxe uma dica para quem está precisando adicionar um novo modulo?</span></p>
<p>As vezes customizamos um processo inteiro em nosso cliente que as rotinas não se encaixam em nenhum módulo padrão!</p>
<p data-adtags-visited="true">No Protheus existe opção de criação de até três módulos específicos. Na realidade eles já existem, mas para que eles estejam disponíveis na escolha do módulos é necessário dar um nome a cada um deles como abaixo:</p>
<blockquote>
<p data-adtags-visited="true">
Não esqueça de dar permissão no configurador para o módulo e criar um menu =]</p>
</blockquote>
<p>Abaixo o código fonte, a rotina é bem simples basta compilar e executar para ver um exemplo.</p>
<pre class="brush: cpp; light: false; title: ; toolbar: true; notranslate">
#include 'totvs.ch'


/*/{Protheus.doc} SIGAESP - Módulo 97
Função ESPNOME - Define o nome para o módulo especifico - 97
@param Não recebe parâmetros
@return Não retorna nada
@author Rafael Goncalves
@owner sempreju.com.br
@version Protheus 12
@since Out|2020
/*/
User Function ESPNOME
Return (&quot;Novo Modulo 97&quot;)

/*/{Protheus.doc} ESP1NOME - Módulo 98
Função ESP1NOME - Define o nome para o módulo especifico - 98
@param Não recebe parâmetros
@return Não retorna nada
@author Rafael Goncalves
@owner sempreju.com.br
@version Protheus 12
@since Out|2020
/*/
User Function ESP1NOME
Return (&quot;Novo Modulo 98&quot;)

/*/{Protheus.doc} ESP2NOME - Módulo 99
Função ESP2NOME - Define o nome para o módulo especifico - 99
@param Não recebe parâmetros
@return Não retorna nada
@author Rafael Goncalves
@owner sempreju.com.br
@version Protheus 12
@since Out|2020
/*/
User Function ESP2NOME
Return (&quot;Novo Modulo 98&quot;)


//Tambem temos assim o ponto de entrada de carregamento do sistema, o nome da função é o mesmo da chamado do programa inicial.
user Function SigaEsp()
Alert( Time() )
Return .t. 

</pre>
<p>O código fonte desse e outros exemplos podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a>.</p>
<p><em>Post interessantes:</em></p>
<p>Ponto de entrada ao acessar o sistema <a href="https://sempreju.com.br/executando-rotinas-ao-abrir-um-modulo-afterlogin-advpl/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Windows <a href="https://sempreju.com.br/tag/instalarprotheuswindows/">aqui</a>.</p>
<p>Aprenda a instalar o Protheus no Linux <a href="https://sempreju.com.br/tag/instalarprotheuslinux/">aqui</a>.</p>
<p>Retornar datas por extenso <a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso <a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>O post <a href="https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/">Criação de Módulos Específicos no Protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/criacao-de-modulos-especificos-no-protheus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como criar filiais na Empresa Teste ?</title>
		<link>https://sempreju.com.br/como-criar-filiais-na-empresa-teste/</link>
					<comments>https://sempreju.com.br/como-criar-filiais-na-empresa-teste/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Thu, 21 May 2020 08:47:51 +0000</pubDate>
				<category><![CDATA[Configurador]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=678</guid>

					<description><![CDATA[<p>Saiba como adicionar mais filiais na Empresa Teste (99), sem consumir licenças. Naturalmente o Protheus cria a empresa 99 com a filial 02 &#8211; Matriz,  nesta empresa ainda é possível criar mais duas filiais (o código e descrição devem ser obrigatóriamente como abaixo) pelas rotinas padrões do Configurador. Existe uma<a class="moretag" href="https://sempreju.com.br/como-criar-filiais-na-empresa-teste/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/como-criar-filiais-na-empresa-teste/">Como criar filiais na Empresa Teste ?</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Saiba como adicionar mais filiais na Empresa Teste (99), sem consumir licenças.</p>
<p><span>Naturalmente o Protheus cria a empresa 99 com a filial 02 &#8211; Matriz,  nesta empresa ainda é possível criar mais duas filiais <em>(o código e descrição devem ser obrigatóriamente como abaixo)</em> pelas rotinas padrões do Configurador.</span><span><br />
</span></p>
<p>Existe uma forma de criar mais duas filiais na empresa teste seguindo um padrão estipulado pela TOTVS que considera as filiais novas como empresa testes desobrigando o uso de licenças.</p>
<h3>Como fazer na minha base?</h3>
<p>O resultado da configuração de mais duas filiais deve ser como abaixo:</p>
<div>
<blockquote>
<div><span>GRUPO DE EMPRESA: <strong>99</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>01</strong> &#8211; DESCRIÇÃO: MATRIZ</span></div>
<div>GRUPO DE EMPRESA: <strong>99</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>02</strong> &#8211; DESCRIÇÃO: FILIAL02</div>
<div>GRUPO DE EMPRESA: <strong>99</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>03</strong> &#8211; DESCRIÇÃO: FILIAL03</div>
</blockquote>
</div>
<p>&nbsp;</p>
<h3>Adicionar mais uma empresa com 3 filiais?</h3>
<p>Ainda é possível adicionar uma nova Empresa &#8211; ZZ, com três filiais, como resultado ficaria assim:</p>
<div>
<blockquote>
<div><span>GRUPO DE EMPRESA: <strong>ZZ</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>01</strong> &#8211; DESCRIÇÃO: MATRIZ</span></div>
<div>GRUPO DE EMPRESA: <strong>ZZ</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>02</strong> &#8211; DESCRIÇÃO: FILIAL02</div>
<div>GRUPO DE EMPRESA: <strong>ZZ</strong> &#8211; DESCRIÇÃO: TESTE &#8211; CÓDIGO DA FILIAL: <strong>03</strong> &#8211; DESCRIÇÃO: FILIAL03</div>
</blockquote>
</div>
<p>Obs.: <span>Não pode vincular nenhum cnpj e alterar a descrição nas filiais.</span></p>
<p>Todos os testes foram realizados na versão 12.1.27.</p>
<p>&nbsp;</p>
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled">
<p>Nossos códigos fontes podem ser encontrados em nosso <a href="https://github.com/llrafaell/SemPreju-Exemplos">git</a>.</p>
</div>
<p><em>Post interessantes:</em></p>
<p>Aprenda a instalar o Protheus<a href="https://sempreju.com.br/como-instalar-o-protheus-appserver-e-smartclient-parte-5/">aqui</a>.</p>
<p>Retornar datas por extenso<a href="https://sempreju.com.br/datas-por-extenso-no-protheus/">aqui</a>.</p>
<p>Barras de progresso<a href="https://sempreju.com.br/como-fazer-barras-de-progresso-no-advpl/">aqui</a>.</p>
<p>Dúvidas e sugestões, entre em contato.</p>
<p>Obrigado e até a próxima!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>O post <a href="https://sempreju.com.br/como-criar-filiais-na-empresa-teste/">Como criar filiais na Empresa Teste ?</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/como-criar-filiais-na-empresa-teste/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Exportar dicionário de dados do protheus</title>
		<link>https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/</link>
					<comments>https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Sat, 25 Jan 2020 18:21:57 +0000</pubDate>
				<category><![CDATA[ADVPL]]></category>
		<category><![CDATA[ADVPL – Funções]]></category>
		<category><![CDATA[Configurador]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=472</guid>

					<description><![CDATA[<p>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 &#34;Protheus.ch&#34; #INCLUDE &#34;fileio.ch&#34;<a class="moretag" href="https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/">Exportar dicionário de dados do protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://github.com/llrafaell/SemPreju-Exemplos">Aqui</a> 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.</p>
<p>Para saber mais sobre o dicionário de dados acesse <a href="https://tdn.totvs.com/pages/viewpage.action?pageId=22479539">aqui</a>.</p>
<p>Acesse nosso Git e baixe esse e outros exemplo clicando <a href="https://github.com/llrafaell/SemPreju-Exemplos">aqui</a>.</p>
<pre class="brush: cpp; light: false; title: ; toolbar: true; notranslate">

#Include &quot;Protheus.ch&quot;
#INCLUDE &quot;fileio.ch&quot;

#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-&gt;(DbGoTop())
While !SX2-&gt;(EoF())
    aArea := GETAREA()
        FSGERA()
    RESTAREA(aArea)
    SX2-&gt;(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(&quot;Iniciando: &quot;+cArquivo)
nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
    MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
    Return .t.
Endif

//inicio da montagem do HTML
fWrite(nHdl, '&lt;html&gt;' + CRLF)
fWrite(nHdl, '&lt;head&gt;&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;title&gt;Tabela: '+SX2-&gt;X2_CHAVE + ' - '+ EncodeUTF8(alltrim(FwSX2Util():GetX2Name( SX2-&gt;X2_CHAVE )))+'&lt;/title&gt;&lt;/head&gt;' + CRLF)
fWrite(nHdl, '&lt;body&gt;' + CRLF)
fWrite(nHdl, '&lt;font color=&quot;orange&quot;&gt;
&lt;h2 id=&quot;'+SX2-&gt;X2_CHAVE+'&quot;&gt;Tabela: '+SX2-&gt;X2_CHAVE + ' - '+ EncodeUTF8(alltrim(FwSX2Util():GetX2Name( SX2-&gt;X2_CHAVE )))+'&lt;/h2&gt;

&lt;/font&gt;' + CRLF)
fWrite(nHdl, '
' + CRLF)

//Informações da Tabela
fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
fWrite(nHdl, '
&lt;tr&gt;
&lt;td colspan=&quot;5&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Tabela(SX2)&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;

')
fWrite(nHdl, '
&lt;tr&gt;')
fWrite(nHdl,    '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;X2_NOME&lt;/b&gt;&lt;/td&gt;

')
fWrite(nHdl,    '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;X2_UNICO&lt;/b&gt;&lt;/td&gt;

')
fWrite(nHdl,    '
&lt;td&gt;&lt;b&gt;X2_SYSOBJ&lt;/b&gt;&lt;/td&gt;

')
fWrite(nHdl, '&lt;/tr&gt;

')
fWrite(nHdl, '
&lt;tr&gt;')
fWrite(nHdl,    EncodeUTF8('
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;'+alltrim(SX2-&gt;X2_NOME)+'&lt;/b&gt;&lt;/td&gt;

'))
fWrite(nHdl,    EncodeUTF8('
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;'+alltrim(SX2-&gt;X2_UNICO)+'&lt;/b&gt;&lt;/td&gt;

'))
fWrite(nHdl,    '
&lt;td&gt;&lt;b&gt;'+alltrim(SX2-&gt;X2_SYSOBJ)+'&lt;/b&gt;&lt;/td&gt;

')
fWrite(nHdl, '&lt;/tr&gt;

')
fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
&lt;hr&gt;

' + CRLF)
fWrite(nHdl, '
' + CRLF)


//imprime os indices da tabela
DbSelectArea('SIX')
SIX-&gt;(DbSetOrder(1))
If SIX-&gt;(DbSeek(SX2-&gt;X2_CHAVE))
    fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td colspan=&quot;5&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Indices(SIX)&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;Ordem&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;Chave&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, EncodeUTF8('
&lt;td&gt;&lt;b&gt;Descrição&lt;/b&gt;&lt;/td&gt;

'))
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;NickName&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')

    //Percorre os campos
    While ! SIX-&gt;(Eof()) .And. SIX-&gt;INDICE == SX2-&gt;X2_CHAVE
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, '
&lt;td&gt;'+SIX-&gt;ORDEM+'&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;'+Alltrim(SIX-&gt;CHAVE)+'&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;'+EncodeUTF8(Alltrim(SIX-&gt;DESCRICAO))+'&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;'+Alltrim(SIX-&gt;NICKNAME)+'&lt;/td&gt;

')
        fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)
        SIX-&gt;(DbSkip())
    EndDo
    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
EndIf

fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
&lt;hr&gt;

' + CRLF)
fWrite(nHdl, '
' + CRLF)


//Informações folders
DbSelectArea(&quot;SXA&quot;)
DbSetOrder(1)
If DbSeek(SX2-&gt;X2_CHAVE)
    fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td colspan=&quot;6&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Abas(SXA)&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XA_ALIAS&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XA_ORDEM&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;XA_DESCRIC&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XA_AGRUP&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XA_TIPO&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')
    While (!Eof()) .AND. (SXA-&gt;XA_ALIAS == SX2-&gt;X2_CHAVE)
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+Alltrim(SXA-&gt;XA_ALIAS)+'&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+Alltrim(SXA-&gt;XA_ORDEM)+'&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;'+Alltrim(SXA-&gt;XA_DESCRIC)+'&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+Alltrim(SXA-&gt;XA_AGRUP)+'&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+Alltrim(SXA-&gt;XA_TIPO)+'&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '&lt;/tr&gt;

')
        DbSelectArea(&quot;SXA&quot;)
        DbSkip()
    Enddo
    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
EndIf

fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
&lt;hr&gt;

' + CRLF)
fWrite(nHdl, '
' + CRLF)

//Percorre o SX3 para montar os campos
aFields := {}//Zera array de execuções anteriores
aFields := FWSX3Util():GetAllFields(SX2-&gt;X2_CHAVE,.T.) //
If len(aFields) &lt;= 0 MsgAlert(&quot;Não foi encontrato nenhum campo para a tabela &quot;+SX2-&gt;X2_CHAVE+&quot;!&quot;, &quot;Atenção&quot;)
    SX2-&gt;(DbSkip())
    fClose(nHdl)
    Return .t.
else
    //Cria tebela html para campos
    fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;' + CRLF)
    fWrite(nHdl, '
&lt;td colspan=&quot;24&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Campos(SX3)&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_CAMPO&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_TITULO&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;X3_DESCRIC&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td colspan=&quot;4&quot;&gt;&lt;b&gt;HELP Campo&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    // fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;HELP Solucao&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_TIPO&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_TAMANHO&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_DECIMAL&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_VALID&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_RELACAO&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_F3&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_TRIGGER&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_BROWSE&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_VISUAL&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_CONTEXT&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_OBRIGAT&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_CBOX&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_WHEN&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_INIBRW&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_GRPSXG&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X3_FOLDER&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '&lt;/tr&gt;

' + 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, '
&lt;tr&gt;' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_CAMPO' ))+'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, EncodeUTF8('
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_TITULO'))+'&lt;/td&gt;

') + CRLF)
    fWrite(nHdl, EncodeUTF8('
&lt;td colspan=&quot;2&quot;&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_DESCRIC'))+'&lt;/td&gt;

') + CRLF)

    fWrite(nHdl, '
&lt;td colspan=&quot;4&quot;&gt;'+EncodeUTF8(Alltrim(GetHlpSoluc(aFields&#x5B;_nI])&#x5B;1]))+'&lt;/td&gt;

' + CRLF)
    // fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;'+Alltrim(GetHlpSoluc(aFields&#x5B;_nI])&#x5B;2])+'&lt;/td&gt;

' + CRLF)

    fWrite(nHdl, '
&lt;td&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_TIPO') +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+cvaltochar(GetSx3Cache( aFields&#x5B;_nI], 'X3_TAMANHO')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+cvaltochar(GetSx3Cache( aFields&#x5B;_nI], 'X3_DECIMAL')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_VALID')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_RELACAO')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/tabelas/F3/'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_F3'))+'.html&quot;&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_F3')) +'&lt;/a&gt;&lt;/td&gt;

' + CRLF)
    if !Empty(GetSx3Cache( aFields&#x5B;_nI], 'X3_TRIGGER'))
        fWrite(nHdl, '
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/tabelas/gatilhos/'+Alltrim(aFields&#x5B;_nI])+'.html&quot;&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_TRIGGER') +'&lt;/td&gt;

' + CRLF)
    else
        fWrite(nHdl, '
&lt;td&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_TRIGGER') +'&lt;/td&gt;

' + CRLF)
    endif
    fWrite(nHdl, '
&lt;td&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_BROWSE') +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_VISUAL') +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+GetSx3Cache( aFields&#x5B;_nI], 'X3_CONTEXT') +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_OBRIGAT')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_CBOX')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_WHEN')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_INIBRW')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/tabelas/grupoCampo/'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_GRPSXG'))+'.html&quot;&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_GRPSXG')) +'&lt;/a&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;'+Alltrim(GetSx3Cache( aFields&#x5B;_nI], 'X3_FOLDER')) +'&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)
Next

If len(aFields) &gt; 0
    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
endif

fWrite(nHdl, '
' + CRLF)
fWrite(nHdl, '
&lt;hr&gt;

' + CRLF)
fWrite(nHdl, '
' + CRLF)

//Relacionamentos
DbSelectArea('SX9')
SX9-&gt;(DbSetOrder(1))
If SX9-&gt;(DbSeek(SX2-&gt;X2_CHAVE))
    fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;' + CRLF)
    fWrite(nHdl, '
&lt;td colspan=&quot;5&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Relacionamentos(SX9)&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;' + CRLF)
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X9_CDOM - Tabela Destino&lt;/b&gt;&lt;/td&gt;

' + CRLF)
    fWrite(nHdl, EncodeUTF8('
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;X9_EXPDOM - Expressão Origem&lt;/b&gt;&lt;/td&gt;

') + CRLF)
    fWrite(nHdl, EncodeUTF8('
&lt;td colspan=&quot;2&quot;&gt;&lt;b&gt;X9_EXPCDOM - Expressão Destino&lt;/b&gt;&lt;/td&gt;

') + CRLF)
    fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)

    //Percorre os campos
    While ! SX9-&gt;(Eof()) .And. SX9-&gt;X9_DOM == SX2-&gt;X2_CHAVE
        fWrite(nHdl, '
&lt;tr&gt;' + CRLF)
        fWrite(nHdl, '
&lt;td&gt;'+SX9-&gt;X9_CDOM+'&lt;/td&gt;

' + CRLF)
        fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;'+Alltrim(SX9-&gt;X9_EXPDOM)+'&lt;/td&gt;

' + CRLF)
        fWrite(nHdl, '
&lt;td colspan=&quot;2&quot;&gt;'+Alltrim(SX9-&gt;X9_EXPCDOM)+'&lt;/td&gt;

' + CRLF)
        fWrite(nHdl, '&lt;/tr&gt;

' + CRLF)

        SX9-&gt;(DbSkip())
    EndDo
EndIf

fWrite(nHdl, '&lt;/center&gt;
' + CRLF)
//Fecha ponteiro do arquivo
fWrite(nHdl, '&lt;/html&gt;' + CRLF)
fClose(nHdl)
conout(&quot;Finalizado: &quot;+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(&quot;Iniciando exportação do SXB&quot;)

if select(&quot;SXB_EXP&quot;) &gt; 0
    SXB_EXP-&gt;(DBCLOSEAREA())
endif
//-------------------
//Criação do objeto
//-------------------
oTempTable := FWTemporaryTable():New( &quot;SXB_EXP&quot; )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{&quot;XB_ALIAS&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_TIPO&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_SEQ&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_COLUNA&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_DESCRI&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_CONTEM&quot;,&quot;C&quot;,290,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex(&quot;01&quot;, {&quot;XB_ALIAS&quot;} )
//------------------
//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 := &quot;INSERT INTO &quot; + oTempTable:GetRealName() + ' ( '
    For ii := 1 To Len(aFields)
		cQuery += aFields&#x5B;ii]&#x5B;1] + &quot;,&quot;
	Next ii
	cQuery := SubStr(cQuery,1,Len(cQuery)-1)
	cQuery += &quot;) &quot;
    cQuery += &quot; SELECT XB_ALIAS,XB_TIPO,XB_SEQ,XB_COLUNA,XB_DESCRI,substring(XB_CONTEM,1,290)   &quot;
    cQuery += &quot; FROM SXB990 SXB &quot; //TODO mudar para o alias de sua tabela
    cQuery += &quot; WHERE SXB.D_E_L_E_T_ =' '&quot;
    conout(cQuery)
    if TCSqlExec(cQuery) &gt; 0
        conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
        return .t.
    endif
else
    conout('inserindo dados no arquivo temporario')
    DbSelectArea('SXB')
    SXB-&gt;(DbGoTop())
    While !SXB-&gt;(EOF())

        DbSelectArea('SXB_EXP')
        reclock('SXB_EXP',.t.)
            SXB_EXP-&gt;XB_ALIAS   := alltrim(SXB-&gt;XB_ALIAS)
            SXB_EXP-&gt;XB_TIPO    := alltrim(SXB-&gt;XB_TIPO)
            SXB_EXP-&gt;XB_SEQ     := alltrim(SXB-&gt;XB_SEQ)
            SXB_EXP-&gt;XB_COLUNA  := alltrim(SXB-&gt;XB_COLUNA)
            SXB_EXP-&gt;XB_DESCRI  := alltrim(SXB-&gt;XB_DESCRI)
            SXB_EXP-&gt;XB_CONTEM  := alltrim(SXB-&gt;XB_CONTEM)
        SXB_EXP-&gt;(MsUnlock())
        DbSelectArea('SXB')
        SXB-&gt;(DBSKIP())
    Enddo

Endif

//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
cQuery := &quot;select * from &quot;+ oTempTable:GetRealName() + &quot; Order by  XB_ALIAS,XB_TIPO,XB_SEQ,XB_COLUNA,XB_DESCRI,XB_CONTEM&quot;
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !eof()
    if cAliAnt &lt;&gt; QRYTMP-&gt;XB_ALIAS
        //Se nao for a primeira execucao, finaliza o arquivo anterior
        if !empty(cAliAnt)
            fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
            //Fecha ponteiro do arquivo
            fWrite(nHdl, '&lt;/html&gt;' + CRLF)
            fClose(nHdl)
            conout(&quot;Finalizado: &quot;+cArquivo)
        endif

        cAliAnt := QRYTMP-&gt;XB_ALIAS
        cArquivo := lower(alltrim(QRYTMP-&gt;XB_ALIAS))+'.html'
        conout(&quot;Iniciando: &quot;+cArquivo)
        nHdl := fCreate(cDiretori+cArquivo)
        //Se houve falhas, encerra a rotina
        If nHdl == -1
            MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
            exit
        Endif

        //inicio da montagem do HTML
        fWrite(nHdl, '&lt;html&gt;' + CRLF)
        fWrite(nHdl, EncodeUTF8('&lt;head&gt;&lt;title&gt;Consulta Pasdrão: '+ alltrim(QRYTMP-&gt;XB_ALIAS) + ' - '+ alltrim(QRYTMP-&gt;XB_DESCRI)+'&lt;/title&gt;&lt;/head&gt;') + CRLF)
        fWrite(nHdl, '&lt;body&gt;' + CRLF)
        fWrite(nHdl, '&lt;font color=&quot;orange&quot;&gt;
&lt;h2 id=&quot;'+SX2-&gt;X2_CHAVE+'&quot;&gt;Consulta Padrï¿½o: '+alltrim(QRYTMP-&gt;XB_ALIAS) + ' - '+ alltrim(QRYTMP-&gt;XB_DESCRI)+'&lt;/h2&gt;

&lt;/font&gt;' + CRLF)
        fWrite(nHdl, '
' + CRLF)

        fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, EncodeUTF8('
&lt;td colspan=&quot;6&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Consulta Padrão(SXB): '+alltrim(QRYTMP-&gt;XB_ALIAS) + ' - '+ alltrim(QRYTMP-&gt;XB_DESCRI)+'&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

'))
        fWrite(nHdl, '&lt;/tr&gt;

')
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_ALIAS&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_TIPO&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_SEQ&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_COLUNA&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_DESCRI&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XB_CONTEM&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '&lt;/tr&gt;

')
    endif

    //imprime todas as linhas
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_ALIAS)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_TIPO)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_SEQ)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_COLUNA)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_DESCRI)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;XB_CONTEM)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')

    DbSelectArea('QRYTMP')
    QRYTMP-&gt;(dbskip())
Enddo

//Se executou algum SXB, fecha ultimo arquivo
if !empty(cAliAnt)
    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
    //Fecha ponteiro do arquivo
    fWrite(nHdl, '&lt;/html&gt;' + CRLF)
    fClose(nHdl)
    conout(&quot;Finalizado: &quot;+cArquivo)
endif

//Fecha alias SQL
if select(&quot;QRYTMP&quot;) &gt; 0
    QRYTMP-&gt;(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(&quot;Iniciando SX7&quot;)
//Exportar SXB

if select(&quot;SX7_EXP&quot;) &gt; 0
    SX7_EXP-&gt;(DBCLOSEAREA())
endif
//-------------------
//Criaï¿½ï¿½o do objeto
//-------------------
oTempTable := FWTemporaryTable():New( &quot;SX7_EXP&quot; )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{&quot;X7_CAMPO&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_SEQUENC&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_REGRA&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_CDOMIN&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_TIPO&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_SEEK&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_ALIAS&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_ORDEM&quot;,&quot;N&quot;,20,1})
aadd(aFields,{&quot;X7_CHAVE&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;X7_CONDIC&quot;,&quot;C&quot;,240,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex(&quot;01&quot;, {&quot;X7_CAMPO&quot;} )
//------------------
//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 := &quot;INSERT INTO &quot; + oTempTable:GetRealName()+' ( '
        For ii := 1 To Len(aFields)
		cQuery += aFields&#x5B;ii]&#x5B;1] + &quot;,&quot;
	Next ii
	cQuery := SubStr(cQuery,1,Len(cQuery)-1)
	cQuery += &quot;) &quot;
    cQuery += &quot; 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) &quot;
    cQuery += &quot; FROM SX7990 SX7 &quot; //TODO mudar para o alias de sua tabela
    cQuery += &quot; WHERE SX7.D_E_L_E_T_ =' '  &quot;
    conout(cQuery)
    if TCSqlExec(cQuery) &gt; 0
        conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
        return .t.
    endif
else
    conout('inserindo dados no arquivo temporario')
    DbSelectArea('SX7')
    SX7-&gt;(DbGoTop())
    While !SX7-&gt;(EOF())
        DbSelectArea('SX7_EXP')
        reclock('SX7_EXP',.t.)
            SX7_EXP-&gt;X7_CAMPO   := alltrim(SX7-&gt;X7_CAMPO)
            SX7_EXP-&gt;X7_SEQUENC := alltrim(SX7-&gt;X7_SEQUENC)
            SX7_EXP-&gt;X7_REGRA   := alltrim(SX7-&gt;X7_REGRA)
            SX7_EXP-&gt;X7_CDOMIN  := alltrim(SX7-&gt;X7_CDOMIN)
            SX7_EXP-&gt;X7_TIPO    := alltrim(SX7-&gt;X7_TIPO)
            SX7_EXP-&gt;X7_SEEK    := alltrim(SX7-&gt;X7_SEEK)
            SX7_EXP-&gt;X7_ALIAS   := alltrim(SX7-&gt;X7_ALIAS)
            SX7_EXP-&gt;X7_ORDEM   := SX7-&gt;X7_ORDEM
            SX7_EXP-&gt;X7_CHAVE   := alltrim(SX7-&gt;X7_CHAVE)
            SX7_EXP-&gt;X7_CONDIC  := alltrim(SX7-&gt;X7_CONDIC)
        SX7_EXP-&gt;(MsUnlock())
        DbSelectArea('SX7')
        SX7-&gt;(DBSKIP())
    Enddo

Endif

//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
if Select('QRYTMP') &gt; 0
    QRYTMP-&gt;(DbCloseAlias())
endif
cQuery := &quot;select * from &quot;+ oTempTable:GetRealName() + &quot; Order by  X7_CAMPO, X7_SEQUENC &quot;
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !eof()
    if cAliAnt &lt;&gt; QRYTMP-&gt;X7_CAMPO
        //Se nao for a primeira execucao, finaliza o arquivo anterior
        if !empty(cAliAnt)
            fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
            //Fecha ponteiro do arquivo
            fWrite(nHdl, '&lt;/html&gt;' + CRLF)
            fClose(nHdl)
            conout(&quot;Finalizado: &quot;+cArquivo)
        endif

        cAliAnt := QRYTMP-&gt;X7_CAMPO
        cArquivo := alltrim(QRYTMP-&gt;X7_CAMPO)+'.html'
        conout(&quot;Iniciando: &quot;+cArquivo)
        nHdl := fCreate(cDiretori+cArquivo)
        //Se houve falhas, encerra a rotina
        If nHdl == -1
            MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' nï¿½o pode ser criado!&quot;, &quot;Atenï¿½ï¿½o&quot;)
            exit
        Endif

        //inicio da montagem do HTML
        fWrite(nHdl, '&lt;html&gt;' + CRLF)
        fWrite(nHdl, '&lt;head&gt;&lt;title&gt;Gatilhos Campo: '+ alltrim(QRYTMP-&gt;X7_CAMPO)+'&lt;/title&gt;&lt;/head&gt;' + CRLF)
        fWrite(nHdl, '&lt;body&gt;' + CRLF)
        fWrite(nHdl, '&lt;font color=&quot;orange&quot;&gt;
&lt;h2 id=&quot;'+SX2-&gt;X2_CHAVE+'&quot;&gt;Gatilhos no Campo: '+alltrim(QRYTMP-&gt;X7_CAMPO)+'&lt;/h2&gt;

&lt;/font&gt;' + CRLF)
        fWrite(nHdl, '
' + CRLF)

        fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, '
&lt;td colspan=&quot;10&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Gatilhos(SX7) no Campo: '+alltrim(QRYTMP-&gt;X7_CAMPO)+'&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '&lt;/tr&gt;

')
        fWrite(nHdl, '
&lt;tr&gt;')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_CAMPO&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_SEQUENC&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_REGRA&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_CDOMIN&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_TIPO&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_SEEK&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_ALIAS&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_ORDEM&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_CHAVE&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;X7_CONDIC&lt;/b&gt;&lt;/td&gt;

')
        fWrite(nHdl, '&lt;/tr&gt;

')
    endif

    //imprime todas as linhas
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_CAMPO)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_SEQUENC)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_REGRA)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_CDOMIN)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_TIPO)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_SEEK)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_ALIAS)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(cvaltochar(QRYTMP-&gt;X7_ORDEM))+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_CHAVE)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+alltrim(QRYTMP-&gt;X7_CONDIC)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')

    DbSelectArea('QRYTMP')
    QRYTMP-&gt;(dbskip())
Enddo

//Se executou algum SXB, fecha ultimo arquivo
if !empty(cAliAnt)
    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
    //Fecha ponteiro do arquivo
    fWrite(nHdl, '&lt;/html&gt;' + CRLF)
    fClose(nHdl)
    conout(&quot;Finalizado: &quot;+cArquivo)
endif

//Fecha alias SQL
if select(&quot;QRYTMP&quot;) &gt; 0
    QRYTMP-&gt;(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(&quot;Iniciando SXG&quot;)
//Exportar SXB

dbselectArea('SXG')
DbGoTop()
While !eof()
    cArquivo := alltrim(SXG-&gt;XG_GRUPO)+'.html'
    conout(&quot;Iniciando: &quot;+cArquivo)
    nHdl := fCreate(cDiretori+cArquivo)
    //Se houve falhas, encerra a rotina
    If nHdl == -1
        MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
        exit
    Endif

     //inicio da montagem do HTML
    fWrite(nHdl, '&lt;html&gt;' + CRLF)
    fWrite(nHdl, '&lt;head&gt;&lt;title&gt;Grupo de Campo(SXG): '+ alltrim(SXG-&gt;XG_GRUPO)+'&lt;/title&gt;&lt;/head&gt;' + CRLF)
    fWrite(nHdl, '&lt;body&gt;' + CRLF)
    fWrite(nHdl, '&lt;font color=&quot;orange&quot;&gt;
&lt;h2 id=&quot;'+SX2-&gt;X2_CHAVE+'&quot;&gt;Grupo de Campo(SXG): '+alltrim(SXG-&gt;XG_GRUPO)+'&lt;/h2&gt;

&lt;/font&gt;' + CRLF)
    fWrite(nHdl, '
' + CRLF)

    fWrite(nHdl, '

&lt;table border=&quot;1&quot;&gt;' + CRLF)
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td colspan=&quot;10&quot; align=&quot;center&quot;&gt;&lt;b&gt;&lt;i&gt;Grupo de Campo(SXG): '+alltrim(SXG-&gt;XG_GRUPO)+'&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')
    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_GRUPO&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_DESCRI&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_SIZEMAX&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_SIZEMIN&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_SIZE&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;XG_PICTURE&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')

    fWrite(nHdl, '
&lt;tr&gt;')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+ Alltrim(SXG-&gt;XG_GRUPO)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+ Alltrim(SXG-&gt;XG_DESCRI)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+ Alltrim(cvaltochar(SXG-&gt;XG_SIZEMAX))+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+ Alltrim(cvaltochar(SXG-&gt;XG_SIZEMIN))+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+ Alltrim(cvaltochar(SXG-&gt;XG_SIZE))+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '
&lt;td&gt;&lt;b&gt;'+Alltrim( SXG-&gt;XG_PICTURE)+'&lt;/b&gt;&lt;/td&gt;

')
    fWrite(nHdl, '&lt;/tr&gt;

')

    fWrite(nHdl, '&lt;/table&gt;

' + CRLF)
    //Fecha ponteiro do arquivo
    fWrite(nHdl, '&lt;/html&gt;' + CRLF)
    fClose(nHdl)
    conout(&quot;Finalizado: &quot;+cArquivo)

    dbselectArea('SXG')
    SXG-&gt;(DbSkip())
enddo

Return .t.







//Retorna o Header da Pagina
static function FSHeader()
Local cReturn as character
cReturn := ' '


//inicio da montagem do HTML
cReturn += '&lt;?php' + CRLF cReturn += &quot;if(file_exists('../../../wp-load.php')) {&quot; + CRLF cReturn += ' require_once(&quot;../../../wp-load.php&quot;);' + CRLF cReturn += &quot;} else if(file_exists('../../wp-load.php')) { &quot; + CRLF cReturn += 'require_once(&quot;../../wp-load.php&quot;);' + CRLF cReturn += &quot;} else if(file_exists('../wp-load.php')) {&quot; + CRLF cReturn += ' require_once(&quot;../wp-load.php&quot;);' + CRLF cReturn += &quot;} else if(file_exists('wp-load.php')) { &quot; + CRLF cReturn += ' require_once(&quot;wp-load.php&quot;);' + CRLF cReturn += &quot;} else if(file_exists('../../../../wp-load.php')) {&quot; + CRLF cReturn += 'require_once(&quot;../../../../wp-load.php&quot;); ' + CRLF cReturn += &quot; } else if(file_exists('../../../../wp-load.php')) {&quot; + CRLF cReturn += 'require_once(&quot;../../../../wp-load.php&quot;);' + CRLF cReturn += &quot;} else { &quot; + CRLF cReturn += &quot; if(file_exists('../../../wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;../../../wp-config.php&quot;);' + CRLF cReturn += &quot; } else if(file_exists('../../wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;../../wp-config.php&quot;); ' + CRLF cReturn += &quot; } else if(file_exists('../wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;../wp-config.php&quot;); ' + CRLF cReturn += &quot; } else if(file_exists('wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;wp-config.php&quot;); ' + CRLF cReturn += &quot; } else if(file_exists('../../../../wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;../../../../wp-config.php&quot;); ' + CRLF cReturn += &quot; } else if(file_exists('../../../../wp-config.php')) { &quot; + CRLF cReturn += ' require_once(&quot;../../../../wp-config.php&quot;); ' + CRLF cReturn += &quot; } else { &quot; + CRLF cReturn += ' exit; ' + CRLF cReturn += &quot; } &quot; + CRLF cReturn += '} ' + CRLF cReturn += 'get_header(); ' + CRLF cReturn += '?&gt; ' + CRLF

cReturn += '
&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7&quot; data-wp-preserve=&quot;%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&quot; data-mce-resize=&quot;false&quot; data-mce-placeholder=&quot;1&quot; class=&quot;mce-object&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;&amp;lt;style&amp;gt;&quot; title=&quot;&amp;lt;style&amp;gt;&quot; /&gt;

 ' + CRLF

return cReturn


//Retorna o rodapé
Static Function FSFooter()
Local cReturn as character

cReturn := ' '
cReturn += '&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7&quot; data-wp-preserve=&quot;%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&quot; data-mce-resize=&quot;false&quot; data-mce-placeholder=&quot;1&quot; class=&quot;mce-object&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;&amp;lt;script&amp;gt;&quot; title=&quot;&amp;lt;script&amp;gt;&quot; /&gt;' + CRLF
cReturn += '&lt;?php' + CRLF cReturn += 'get_footer();' + CRLF cReturn += '?&gt;' + 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(&quot;Iniciando: &quot;+cArquivo)

nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
    MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
    return
Endif

fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover

fWrite(nHdl, '&lt;body&gt; ' + CRLF)
fWrite(nHdl, '&lt;center&gt; 




' + CRLF)
fWrite(nHdl, '	
&lt;h2&gt;Tabelas Protheus &lt;/h2&gt;

 ' + CRLF)
fWrite(nHdl, EncodeUTF8('	&lt;input type=&quot;text&quot; id=&quot;myInput&quot; style=&quot;width: 400px;&quot; onkeyup=&quot;myFunction()&quot; placeholder=&quot;Digite código da tabela ou descrição..&quot;&gt; ') + CRLF)
fWrite(nHdl, '	
&lt;div id=&quot;table-wrapper&quot; style=&quot;width: 450px; height: 700px&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '	  
&lt;div id=&quot;table-scroll&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '		
&lt;table border=&quot;1&quot; id=&quot;myTable&quot; &gt; ' + CRLF)
fWrite(nHdl, '			
&lt;thead&gt;
 ' + CRLF)
fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
fWrite(nHdl, '					
&lt;th &gt;Tabela&lt;/th&gt;

 ' + CRLF)
fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
fWrite(nHdl, '			&lt;/thead&gt;

 ' + CRLF)
fWrite(nHdl, '			
&lt;tbody&gt; ' + CRLF)

DbSelectArea('SX2')
SX2-&gt;(DbGoTop())
While !SX2-&gt;(EoF())

    fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
    fWrite(nHdl, '					
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/tabelas/tabela_'+alltrim(lower(SX2-&gt;X2_CHAVE))+'.html&quot;&gt;'+EncodeUTF8(alltrim(Upper(SX2-&gt;X2_CHAVE)+' - '+(FwSX2Util():GetX2Name( SX2-&gt;X2_CHAVE ))))+'&lt;/a&gt;&lt;/td&gt;

 ' + CRLF)
    fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
    SX2-&gt;(DbSkip())

EndDo

fWrite(nHdl, '        &lt;/tbody&gt;

' + CRLF)
fWrite(nHdl, '        &lt;/table&gt;

' + CRLF)
fWrite(nHdl, '   &lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/center&gt;' + CRLF)

fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress

fClose(nHdl)
conout(&quot;Finalizado exportação da pagina de tabela: &quot;+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(&quot;Iniciando: &quot;+cArquivo)

nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
    MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
    return
Endif

fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover

fWrite(nHdl, '&lt;body&gt; ' + CRLF)
fWrite(nHdl, '&lt;center&gt; 




' + CRLF)
fWrite(nHdl, EncodeUTF8('	
&lt;h2&gt;Consulta Padrão  Protheus &lt;/h2&gt;

 ') + CRLF)
fWrite(nHdl, EncodeUTF8('	&lt;input type=&quot;text&quot; id=&quot;myInput&quot; style=&quot;width: 400px;&quot; onkeyup=&quot;myFunction()&quot; placeholder=&quot;Digite código da consulta ou descrição..&quot;&gt; ') + CRLF)
fWrite(nHdl, '	
&lt;div id=&quot;table-wrapper&quot; style=&quot;width: 450px; height: 700px&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '	  
&lt;div id=&quot;table-scroll&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '		
&lt;table border=&quot;1&quot; id=&quot;myTable&quot; &gt; ' + CRLF)
fWrite(nHdl, '			
&lt;thead&gt;
 ' + CRLF)
fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
fWrite(nHdl, EncodeUTF8('					
&lt;th &gt;Consulta Padrão&lt;/th&gt;

 ') + CRLF)
fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
fWrite(nHdl, '			&lt;/thead&gt;

 ' + CRLF)
fWrite(nHdl, '			
&lt;tbody&gt; ' + CRLF)

If select(&quot;SXB_EXP&quot;) &gt; 0
    SXB_EXP-&gt;(DBCLOSEAREA())
EndIf
//-------------------
//Criação do objeto tebela temporaria
//-------------------
oTempTable := FWTemporaryTable():New( &quot;SXB_EXP&quot; )
//--------------------------
//Monta os campos da tabela
//--------------------------
aFields := {}
aadd(aFields,{&quot;XB_ALIAS&quot;,&quot;C&quot;,240,0})
aadd(aFields,{&quot;XB_DESCRI&quot;,&quot;C&quot;,240,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex(&quot;01&quot;, {&quot;XB_ALIAS&quot;} )
//------------------
//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 := &quot;INSERT INTO &quot; + oTempTable:GetRealName() +&quot; ( &quot;
	For ii := 1 To Len(aFields)
		cQuery += aFields&#x5B;ii]&#x5B;1] + &quot;,&quot;
	Next ii
	cQuery := SubStr(cQuery,1,Len(cQuery)-1)
	cQuery += &quot;) &quot;
    cQuery += &quot; select XB_ALIAS,XB_DESCRI  from SXB990 SXB &quot;
    cQuery += &quot; where XB_TIPO=1 and SXB.D_E_L_E_T_ =' ' &quot;
    //cQuery += &quot; order by XB_ALIAS &quot;
    //conout(cQuery)
    if TCSqlExec(cQuery) &gt; 0
        conout('ERRO AO INSERIR DADOS NA TABELA TEMPORARIA')
        return .t.
    endif
else
    conout('inserindo dados no arquivo temporario')
    DbSelectArea('SXB')
    SXB-&gt;(DbGoTop())
    While !SXB-&gt;(EOF())
        If alltrim(SXB-&gt;XB_TIPO) &lt;&gt; '1'
            DbSelectArea('SXB')
            SXB-&gt;(DBSKIP())
            loop
        endif

        DbSelectArea('SXB_EXP')
        reclock('SXB_EXP',.t.)
            SXB_EXP-&gt;XB_ALIAS   := alltrim(SXB-&gt;XB_ALIAS)
            SXB_EXP-&gt;XB_DESCRI  := alltrim(SXB-&gt;XB_DESCRI)
        SXB_EXP-&gt;(MsUnlock())
        DbSelectArea('SXB')
        SXB-&gt;(DBSKIP())
    Enddo

Endif

//------------------------------------
//Executa query para leitura da tabela
//------------------------------------
cQuery := &quot;select * from &quot;+ oTempTable:GetRealName() + &quot; Order by  XB_ALIAS&quot;
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
cAliAnt := '' //controle novo arquivo
while !(QRYTMP-&gt;(eof()))

    fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
    fWrite(nHdl, '					
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/F3/'+alltrim(lower(QRYTMP-&gt;XB_ALIAS))+'.html&quot;&gt;'+EncodeUTF8(alltrim(Upper(QRYTMP-&gt;XB_ALIAS)+' - '+Capital(QRYTMP-&gt;XB_DESCRI)))+'&lt;/a&gt;&lt;/td&gt;

 ' + CRLF)
    fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)

    QRYTMP-&gt;(dbskip())
Enddo

fWrite(nHdl, '        &lt;/tbody&gt;

' + CRLF)
fWrite(nHdl, '        &lt;/table&gt;

' + CRLF)
fWrite(nHdl, '   &lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/center&gt;' + CRLF)

fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress

fClose(nHdl)
conout(&quot;Finalizado exportação da pagina de tabela: &quot;+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(&quot;Iniciando: &quot;+cArquivo)

nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
    MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
    return
Endif

fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover

fWrite(nHdl, '&lt;body&gt; ' + CRLF)
fWrite(nHdl, '&lt;center&gt; 




' + CRLF)
fWrite(nHdl, '	
&lt;h2&gt;Grupo de Campos Protheus &lt;/h2&gt;

 ' + CRLF)
fWrite(nHdl, EncodeUTF8('	&lt;input type=&quot;text&quot; id=&quot;myInput&quot; style=&quot;width: 400px;&quot; onkeyup=&quot;myFunction()&quot; placeholder=&quot;Digite código da Grupo ou descrição..&quot;&gt; ') + CRLF)
fWrite(nHdl, '	
&lt;div id=&quot;table-wrapper&quot; style=&quot;width: 450px; height: 700px&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '	  
&lt;div id=&quot;table-scroll&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '		
&lt;table border=&quot;1&quot; id=&quot;myTable&quot; &gt; ' + CRLF)
fWrite(nHdl, '			
&lt;thead&gt;
 ' + CRLF)
fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
fWrite(nHdl, '					
&lt;th &gt;Grupo de Campos&lt;/th&gt;

 ' + CRLF)
fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
fWrite(nHdl, '			&lt;/thead&gt;

 ' + CRLF)
fWrite(nHdl, '			
&lt;tbody&gt; ' + CRLF)

DbSelectArea('SXG')
SXG-&gt;(DbGoTop())
While !SXG-&gt;(EoF())

    fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
    fWrite(nHdl, '					
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/grupoCampo/'+alltrim(lower(SXG-&gt;XG_GRUPO))+'.html&quot;&gt;'+EncodeUTF8(alltrim(Upper(SXG-&gt;XG_GRUPO)+' - '+capital(SXG-&gt;XG_DESCRI)))+'&lt;/a&gt;&lt;/td&gt;

 ' + CRLF)
    fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
    SXG-&gt;(DbSkip())

EndDo

fWrite(nHdl, '        &lt;/tbody&gt;

' + CRLF)
fWrite(nHdl, '        &lt;/table&gt;

' + CRLF)
fWrite(nHdl, '   &lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/center&gt;' + CRLF)

fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress

fClose(nHdl)
conout(&quot;Finalizado exportação da pagina de grupo campos: &quot;+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(&quot;Iniciando: &quot;+cArquivo)

nHdl := fCreate(cDiretori+cArquivo)
//Se houve falhas, encerra a rotina
If nHdl == -1
    MsgAlert(&quot;O arquivo '&quot;+cDiretori+cArquivo+&quot;' não pode ser criado!&quot;, &quot;Atenção&quot;)
    return
Endif

fWrite(nHdl, FSHeader() + CRLF) //header para WordPress, se não usar remover

fWrite(nHdl, '&lt;body&gt; ' + CRLF)
fWrite(nHdl, '&lt;center&gt; 




' + CRLF)
fWrite(nHdl, '	
&lt;h2&gt;Gatilhos Protheus &lt;/h2&gt;

 ' + CRLF)
fWrite(nHdl, EncodeUTF8('	&lt;input type=&quot;text&quot; id=&quot;myInput&quot; style=&quot;width: 400px;&quot; onkeyup=&quot;myFunction()&quot; placeholder=&quot;Digite código do campo..&quot;&gt; ') + CRLF)
fWrite(nHdl, '	
&lt;div id=&quot;table-wrapper&quot; style=&quot;width: 450px; height: 700px&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '	  
&lt;div id=&quot;table-scroll&quot; &gt;
 ' + CRLF)
fWrite(nHdl, '		
&lt;table border=&quot;1&quot; id=&quot;myTable&quot; &gt; ' + CRLF)
fWrite(nHdl, '			
&lt;thead&gt;
 ' + CRLF)
fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
fWrite(nHdl, '					
&lt;th &gt;Gatilhos&lt;/th&gt;

 ' + CRLF)
fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
fWrite(nHdl, '			&lt;/thead&gt;

 ' + CRLF)
fWrite(nHdl, '			
&lt;tbody&gt; ' + CRLF)

DbSelectArea('SX7')
dbsetorder(1)
SX7-&gt;(DbGoTop())
cCampo := ' '
While !SX7-&gt;(EoF())
    If cCampo &lt;&gt; SX7-&gt;X7_CAMPO
        cCampo := SX7-&gt;X7_CAMPO
        fWrite(nHdl, '				
&lt;tr&gt; ' + CRLF)
        fWrite(nHdl, '					
&lt;td&gt;&lt;a href=&quot;/Tabelas_Protheus/gatilhos/'+alltrim(lower(SX7-&gt;X7_CAMPO))+'.html&quot;&gt;'+EncodeUTF8(alltrim(Upper(SX7-&gt;X7_CAMPO)))+'&lt;/a&gt;&lt;/td&gt;

 ' + CRLF)
        fWrite(nHdl, '				&lt;/tr&gt;

 ' + CRLF)
    Endif
    SX7-&gt;(DbSkip())
EndDo

fWrite(nHdl, '        &lt;/tbody&gt;

' + CRLF)
fWrite(nHdl, '        &lt;/table&gt;

' + CRLF)
fWrite(nHdl, '   &lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/div&gt;

' + CRLF)
fWrite(nHdl, '&lt;/center&gt;' + CRLF)

fWrite(nHdl, FSFooter() + CRLF) //rodapé para usar wordpress

fClose(nHdl)
conout(&quot;Finalizado exportação da pagina de gatilhos: &quot;+cArquivo)

Return .t.



</pre>
<p>Dicas e sugestões entre em contato</p>
<p>Obrigado</p>
<p>O post <a href="https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/">Exportar dicionário de dados do protheus</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/exportar-dicionario-de-dados-do-protheus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
