<?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 ADVPL - MVC &#8211; Sem Preju</title>
	<atom:link href="https://sempreju.com.br/category/advpl/advpl-mvc/feed/" rel="self" type="application/rss+xml" />
	<link>https://sempreju.com.br/category/advpl/advpl-mvc/</link>
	<description>Conhecimento Gratuito</description>
	<lastBuildDate>Sun, 12 Apr 2020 07:41:01 +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>ADVPL em MVC – Grupo de Despesa ou Receita</title>
		<link>https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/</link>
					<comments>https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Sat, 25 Apr 2020 07:31:41 +0000</pubDate>
				<category><![CDATA[ADVPL - MVC]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=629</guid>

					<description><![CDATA[<p>Post Anteriores: 1-Escopo do projeto aqui. 2-Introdução ao MVC aqui. 3-Criar update aqui. 4-Cadastro de despesa ou receita aqui. Nos posts anteriores criamos toda a estrutura necessária para começarmos nosso projeto bem como a primeira rotina MVC para cadastro das despesas e receitas. Essa primeira rotina era somente uma tabela<a class="moretag" href="https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/">ADVPL em MVC – Grupo de Despesa ou Receita</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Post Anteriores:</p>
<p>1-Escopo do projeto <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">aqui</a>.</p>
<p>2-Introdução ao MVC <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">aqui</a>.</p>
<p>3-Criar update <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">aqui</a>.</p>
<p>4-Cadastro de despesa ou receita <a href="https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/">aqui</a>.</p>
<p>Nos posts anteriores criamos toda a estrutura necessária para começarmos nosso projeto bem como a primeira rotina MVC para cadastro das despesas e receitas. Essa primeira rotina era somente uma tabela sem relacionamento, realmente bem simples.</p>
<p>Nesse post criaremos a segunda rotina em MVC, essa rotina será responsável por disponibilizar os grupos de Despesas e Receitas para nós, nessa rotina usaremos entre destaque o relacionamento de duas tabelas (pai e filho).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre class="brush: cpp; light: false; title: ; toolbar: true; notranslate">

#INCLUDE &quot;PROTHEUS.CH&quot;
#INCLUDE &quot;FWMBROWSE.CH&quot;
#INCLUDE &quot;FWMVCDEF.CH&quot;

/*/{Protheus.doc} SPFIN02
Tela de cadastro grupo de despesa (modelo 3)
@author
@since
@version 1.0
@project
/*/
User Function SPFIN02()
Local oBrowse   as Object
Private aRotina as ARRAY

// Instanciamento da Classe de Browse
oBrowse := FWMBrowse():New()

// Definição da tabela do Browse
oBrowse:SetAlias('ZRB')

// Titulo da Browse
oBrowse:SetDescription('Cadastro de Grupo de Despesa')

// Ativação da Classe
oBrowse:Activate()

Return Nil




/*/{Protheus.doc} MenuDef
MenuDef definition
@author
@since
@version 1.0
@project
*/
Static Function MenuDef()
Local aRotina as array

aRotina := {}
ADD OPTION aRotina Title &quot;Vizualizar&quot; 	Action 'VIEWDEF.SPFIN02'	OPERATION MODEL_OPERATION_VIEW ACCESS   0 //View
ADD OPTION aRotina Title &quot;Incluir&quot;	    Action 'VIEWDEF.SPFIN02'	OPERATION MODEL_OPERATION_INSERT ACCESS 0 //Add
ADD OPTION aRotina Title &quot;Alterar&quot;      Action 'VIEWDEF.SPFIN02'   	OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //Change
ADD OPTION aRotina Title &quot;Deletar&quot; 	    Action 'VIEWDEF.SPFIN02'    OPERATION MODEL_OPERATION_DELETE ACCESS 0 //Delete

/*
maneira simplificada
Será criado um menu padrão com as opções: Visualizar, Incluir, Alterar, Excluir, Imprimir e Copiar

Static Function MenuDef()
Return FWMVCMenu( 'SPFIN01' ))
*/

Return aRotina


/*/{Protheus.doc}
ModelDef definition
@author
@since
@version 1.0
@project
/*/
Static Function ModelDef()
Local oStrZRB 		as Object
Local oStrZRC 		as Object
Local oModel 		as Object  // Modelo de dados que será construído

oModel 		:= MPFormModel():New(&quot;_SPFIN02&quot;) // Cria o objeto do Modelo de Dados
oStrZRB		:= FWFormStruct(1, &quot;ZRB&quot;) // Cria a estrutura a ser usada no Modelo de Dados
oStrZRC		:= FWFormStruct(1, &quot;ZRC&quot;) // Cria a estrutura a ser usada no Modelo de Dados
oModel:AddFields(&quot;ZRBMASTER&quot;,, oStrZRB)// Adiciona ao modelo um componente de formulário


oModel:AddGrid(&quot;ZRCDETAIL&quot;, &quot;ZRBMASTER&quot;, oStrZRC)// Adiciona ao modelo um componente de Grid
oModel:GetModel(&quot;ZRCDETAIL&quot;):SetDescription('Despesas/Receitas  ') //Sections
oModel:GetModel(&quot;ZRCDETAIL&quot;):SetUniqueLine({&quot;ZRC_FILIAL&quot;,&quot;ZRC_CODGRP&quot;,&quot;ZRC_CODZRA&quot;},/*bCodeLineIsNotUnique*/)
oModel:GetModel(&quot;ZRCDETAIL&quot;):SetOptional(.T.)//opcionaol informar ou nao os itens

//Define o relacionamento
oModel:SetRelation(&quot;ZRCDETAIL&quot;, {{&quot;ZRC_FILIAL&quot;,&quot;xFilial('ZRB')&quot;},;
                                  {&quot;ZRC_CODGRP&quot;,&quot;ZRB_CODIGO&quot;}},ZRC-&gt;(IndexKey(1)))

// Adiciona a descrição do Modelo de Dados
oModel:SetDescription( 'Cadastro de Grupo de despesa ou receita' )

//Cria gatilho para preencher a descricao da despesa/receita, poderia seer feito via SX7 ou SXB
//oStrZRC:AddTrigger(&quot;ZRC_CODZRA&quot; , &quot;ZRC_DESCRI&quot; ,,  {|oModel| SPTRIGGER(&quot;ZRC_CODZRA&quot;)})

//oUpdF5VEvt := SPFIN02Event():New()
//oModel:InstallEvent(&quot;SPFIN02EventID&quot;,,oUpdF5VEvt)

// Retorna o Modelo de dados
Return oModel


/*/{Protheus.doc}
ViewDef definition
@author
@since
@version 1.0
@project
/*/
Static Function ViewDef()
// Cria um objeto de Modelo de dados baseado no ModelDef() do fonte informado
Local oModel := FWLoadModel( 'SPFIN02' )

// Cria a estrutura a ser usada na View
Local oStruZRB := FWFormStruct( 2, 'ZRB')
Local oStruZRC := FWFormStruct( 2, 'ZRC', {|x| !AllTrim(x) $ &quot;ZRC_CODGRP&quot;}) //remover codigo do grupo da tela
//oStruZRC:RemoveField(&quot;ZRC_CODGRP&quot;) //outra opcao para remover o campo da tela

// Interface de visualização construída
Local oView

// Cria o objeto de View
oView := FWFormView():New()

// Define qual o Modelo de dados será utilizado na View
oView:SetModel( oModel )

// Adiciona no nosso View um controle do tipo formulário  // (antiga Enchoice)
oView:AddField( 'VIEW_ZRB', oStruZRB, 'ZRBMASTER' )

//Adiciona o grid
oView:AddGrid(&quot;VIEW_ZRC&quot;, oStruZRC, &quot;ZRCDETAIL&quot;)

// Criar um &quot;box&quot; horizontal para receber algum elemento da view
oView:CreateHorizontalBox( 'TELA' , 35 )
oView:CreateHorizontalBox( 'ITEM' , 65 )

// Relaciona o identificador (ID) da View com o &quot;box&quot; para exibição
oView:SetOwnerView( 'ZRBMASTER', 'TELA' )
oView:SetOwnerView( 'ZRCDETAIL', 'ITEM' )

Return oView



</pre>
<p><strong><em>Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.</em></strong></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>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>O post <a href="https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/">ADVPL em MVC – Grupo de Despesa ou Receita</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/advpl-em-mvc-grupo-de-despesa-ou-receita/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ADVPL em MVC – Cadastro de despesa ou receita</title>
		<link>https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/</link>
					<comments>https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Mon, 20 Apr 2020 07:21:00 +0000</pubDate>
				<category><![CDATA[ADVPL - MVC]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=627</guid>

					<description><![CDATA[<p>Post Anteriores: 1-Escopo do projeto aqui. 2-Introdução ao MVC aqui. 3-Criar update aqui. Nos posts anteriores criamos toda a estrutura necessária para começarmos nosso projeto, nesse post criaremos a primeira rotina em MVC, essa rotina será responsável por disponibilizar os códigos de Despesas e Receitas para nós. Prescisaremos incluir no<a class="moretag" href="https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/">ADVPL em MVC – Cadastro de despesa ou receita</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Post Anteriores:</p>
<p>1-Escopo do projeto <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">aqui</a>.</p>
<p>2-Introdução ao MVC <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">aqui</a>.</p>
<p>3-Criar update <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">aqui</a>.</p>
<p>Nos posts anteriores criamos toda a estrutura necessária para começarmos nosso projeto, nesse post criaremos a primeira rotina em MVC, essa rotina será responsável por disponibilizar os códigos de Despesas e Receitas para nós.</p>
<p>Prescisaremos incluir no nosso menu a rotina SPFIN01 &#8211; Cad. Despesa e Receita</p>
<p>O código está documentado para ajudar o entendimento da rotina, abaixo o código utilizado</p>
<p>&nbsp;</p>
<pre class="brush: cpp; light: false; title: ; toolbar: true; notranslate">
#INCLUDE &quot;PROTHEUS.CH&quot;
#INCLUDE &quot;FWMBROWSE.CH&quot;
#INCLUDE &quot;FWMVCDEF.CH&quot;

/*/{Protheus.doc} SPFIN01
Tela de cadastro de despesa
@author
@since
@version 1.0
@project
/*/
User Function SPFIN01()
Local oBrowse   as Object
Private aRotina as ARRAY

// Instanciamento da Classe de Browse
oBrowse := FWMBrowse():New()

// Definição da tabela do Browse
oBrowse:SetAlias('ZRA')

// Titulo da Browse
oBrowse:SetDescription('Cadastro de Despesa ou Receita')

// Ativação da Classe
oBrowse:Activate()

Return Nil


/*/{Protheus.doc}
MenuDef definition
@author
@since
@version 1.0
@project
*/
Static Function MenuDef()
Local aRotina as array

aRotina := {}
ADD OPTION aRotina Title &quot;Vizualizar&quot; 	Action 'VIEWDEF.SPFIN01'	OPERATION MODEL_OPERATION_VIEW ACCESS   0 //View
ADD OPTION aRotina Title &quot;Incluir&quot;	    Action 'VIEWDEF.SPFIN01'	OPERATION MODEL_OPERATION_INSERT ACCESS 0 //Add
ADD OPTION aRotina Title &quot;Alterar&quot;      Action 'VIEWDEF.SPFIN01'   	OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //Change
ADD OPTION aRotina Title &quot;Deletar&quot; 	    Action 'VIEWDEF.SPFIN01'    OPERATION MODEL_OPERATION_DELETE ACCESS 0 //Delete

/*
maneira simplificada
Será criado um menu padrão com as opções: Visualizar, Incluir, Alterar, Excluir, Imprimir e Copiar

Static Function MenuDef()
Return FWMVCMenu( 'SPFIN01' ))
*/

Return aRotina


/*/{Protheus.doc}
ModelDef definition
@author
@since
@version 1.0
@project
/*/
Static Function ModelDef()
Local oStrZRA 		as Object
Local oModel 		as Object  // Modelo de dados que será construído

oModel 		:= MPFormModel():New(&quot;_SPFIN01&quot;) // Cria o objeto do Modelo de Dados
oStrZRA		:= FWFormStruct(1, &quot;ZRA&quot;) // Cria a estrutura a ser usada no Modelo de Dados
oModel:AddFields(&quot;ZRAMASTER&quot;,, oStrZRA)// Adiciona ao modelo um componente de formulário

// Adiciona a descrição do Modelo de Dados
oModel:SetDescription( 'Cadastro despesa ou receita' )

// Retorna o Modelo de dados
Return oModel


/*/{Protheus.doc}
ViewDef definition
@author
@since
@version 1.0
@project
/*/
Static Function ViewDef()
// Cria um objeto de Modelo de dados baseado no ModelDef() do fonte informado
Local oModel := FWLoadModel( 'SPFIN01' )

// Cria a estrutura a ser usada na View
Local oStruZRA := FWFormStruct( 2, 'ZRA')

// Interface de visualização construída
Local oView

// Cria o objeto de View
oView := FWFormView():New()

// Define qual o Modelo de dados será utilizado na View
oView:SetModel( oModel )

// Adiciona no nosso View um controle do tipo formulário  // (antiga Enchoice)
oView:AddField( 'VIEW_ZRA', oStruZRA, 'ZRAMASTER' )

// Criar um &quot;box&quot; horizontal para receber algum elemento da view
oView:CreateHorizontalBox( 'TELA' , 100 )

// Relaciona o identificador (ID) da View com o &quot;box&quot; para exibição
oView:SetOwnerView( 'ZRAMASTER', 'TELA' )

Return oView

</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><em>Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.</em></strong></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>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>O post <a href="https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/">ADVPL em MVC – Cadastro de despesa ou receita</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/advpl-em-mvc-cadastro-de-despesa-ou-receita/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ADVPL em MVC –  Criando seu próprio update</title>
		<link>https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/</link>
					<comments>https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Sun, 12 Apr 2020 12:58:28 +0000</pubDate>
				<category><![CDATA[ADVPL - Dicas]]></category>
		<category><![CDATA[ADVPL - MVC]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=624</guid>

					<description><![CDATA[<p>Post Anteriores: Escopo do projeto aqui. Introdução ao MVC aqui. &#160; Continuando a nossa série sobre MVC,  iremos realizar agora a criação de nossas tabelas para serem utilizadas nas rotinas, para facilitar a replicação e não precisarmos acessar o configurador, criei um update para rodarmos em nosso ambinete. Nesse update<a class="moretag" href="https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/">ADVPL em MVC –  Criando seu próprio update</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Post Anteriores:</p>
<p>Escopo do projeto <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">aqui</a>.</p>
<p>Introdução ao MVC <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">aqui</a>.</p>
<p>&nbsp;</p>
<p>Continuando a nossa série sobre MVC,  iremos realizar agora a criação de nossas tabelas para serem utilizadas nas rotinas, para facilitar a replicação e não precisarmos acessar o configurador, criei um update para rodarmos em nosso ambinete.</p>
<p>Nesse update criaremos as tabelas necessárias, apenas garanta não ter as tabelas atualmente em seu ambiente, se ja existir , você precisará alterar para uma não existente, as tabela que utilizaremos até momento são: ZRA, ZRB, ZRC e ZRD. Se necessário no decorrer da série criaremos mais.</p>
<p>No passado a TOTVS muitas vezes mandava junto com o patch executar um update por exemplo U_UPDCTB. E depois disso era criado novos campos e tabelas em nosso ambiente.</p>
<p>É exatamente isso que vamos aprender agora, como criar e rodar o nosso compatibilizador, para isso precisaremos compilar o fonte abaixo em nosso ambiente e depois é apenas necesário exeutar a rotina U_UPDMVC como o print abaixo.</p>
<p><img fetchpriority="high" decoding="async" src="https://sempreju.com.br/wp-content/uploads/2020/04/2020-04-12-10_18_03-Ambientes-284x300.png" alt="sempreju_advpl_protheus" width="284" height="300" class="size-medium wp-image-625 aligncenter" srcset="https://sempreju.com.br/wp-content/uploads/2020/04/2020-04-12-10_18_03-Ambientes-284x300.png 284w, https://sempreju.com.br/wp-content/uploads/2020/04/2020-04-12-10_18_03-Ambientes.png 312w" sizes="(max-width: 284px) 100vw, 284px" /></p>
<p>Sequindo os passos da rotina as tabelas serão criadas, lembre-se, deve executar sempre em modo exclusivo!</p>
<p>&nbsp;</p>
<p>Abaixo o código utilizado.</p>
<pre class="brush: cpp; light: false; title: ; toolbar: true; notranslate">
#INCLUDE &quot;PROTHEUS.CH&quot;

#DEFINE SIMPLES Char( 39 )
#DEFINE DUPLAS  Char( 34 )

#DEFINE CSSBOTAO	&quot;QPushButton { color: #024670; &quot;+;
&quot;    border-image: url(rpo:fwstd_btn_nml.png) 3 3 3 3 stretch; &quot;+;
&quot;    border-top-width: 3px; &quot;+;
&quot;    border-left-width: 3px; &quot;+;
&quot;    border-right-width: 3px; &quot;+;
&quot;    border-bottom-width: 3px }&quot;+;
&quot;QPushButton:pressed {	color: #FFFFFF; &quot;+;
&quot;    border-image: url(rpo:fwstd_btn_prd.png) 3 3 3 3 stretch; &quot;+;
&quot;    border-top-width: 3px; &quot;+;
&quot;    border-left-width: 3px; &quot;+;
&quot;    border-right-width: 3px; &quot;+;
&quot;    border-bottom-width: 3px }&quot;

/*
TODO
-Implementar UUID para amarraçoes
-Index para tabelas (ZRD em especial)

*/

//--------------------------------------------------------------------
/*/{Protheus.doc} UPDMVC
Função de update de dicionários para ser usado no estudo do MVC do projeto MVC_Simplificado

@author Rafael Gonçalves
@since  Março/2020
@version 1.0
/*/
//--------------------------------------------------------------------
User Function UPDMVC( cEmpAmb, cFilAmb )

Local   aSay      := {}
Local   aButton   := {}
Local   aMarcadas := {}
Local   cTitulo   := &quot;ATUALIZAÇÃO DE DICIONARIO&quot;
Local   cDesc1    := &quot;Esta rotina tem como função&quot;
Local   cDesc2    := &quot;Este processo deve ser executado em modo EXCLUSIVO, ou seja não podem haver outros&quot;
Local   cDesc3    := &quot;usuários  ou  jobs utilizando  o sistema.  É EXTREMAMENTE recomendavél  que  se  faça um&quot;
Local   cDesc4    := &quot;BACKUP  dos DICIONÁRIOS  e da  BASE DE DADOS antes desta atualização, para que caso &quot;
Local   cDesc5    := &quot;ocorram eventuais falhas, esse backup possa ser restaurado.&quot;
Local   cDesc6    := &quot;&quot;
Local   cDesc7    := &quot;&quot;
Local   lOk       := .F.
Local   lAuto     := ( cEmpAmb &lt;&gt; NIL .or. cFilAmb &lt;&gt; NIL )

Private oMainWnd  := NIL
Private oProcess  := NIL

#IFDEF TOP
    TCInternal( 5, &quot;*OFF&quot; ) // Desliga Refresh no Lock do Top
#ENDIF

__cInterNet := NIL
__lPYME     := .F.

Set Dele On

// Mensagens de Tela Inicial
aAdd( aSay, cDesc1 )
aAdd( aSay, cDesc2 )
aAdd( aSay, cDesc3 )
aAdd( aSay, cDesc4 )
aAdd( aSay, cDesc5 )
//aAdd( aSay, cDesc6 )
//aAdd( aSay, cDesc7 )

// Botoes Tela Inicial
aAdd(  aButton, {  1, .T., { || lOk := .T., FechaBatch() } } )
aAdd(  aButton, {  2, .T., { || lOk := .F., FechaBatch() } } )

If lAuto
	lOk := .T.
Else
	FormBatch(  cTitulo,  aSay,  aButton )
EndIf

If lOk
	If lAuto
		aMarcadas :={{ cEmpAmb, cFilAmb, &quot;&quot; }}
	Else
		aMarcadas := EscEmpresa()
	EndIf
	//Aadd(aMarcadas,{&quot;99&quot;,&quot;01&quot;,&quot; &quot;})

	If !Empty( aMarcadas )
		If lAuto .OR. MsgNoYes( &quot;Confirma a atualização dos dicionários ?&quot;, cTitulo )
			oProcess := MsNewProcess():New( { | lEnd | lOk := FSTProc( @lEnd, aMarcadas, lAuto ) }, &quot;Atualizando&quot;, &quot;Aguarde, atualizando ...&quot;, .F. )
			oProcess:Activate()

			If lAuto
				If lOk
					MsgStop( &quot;Atualização Realizada.&quot;, &quot;UPDFST&quot; )
				Else
					MsgStop( &quot;Atualização não Realizada.&quot;, &quot;UPDFST&quot; )
				EndIf
				dbCloseAll()
			Else
				If lOk
					Final( &quot;Atualização Concluída.&quot; )
				Else
					Final( &quot;Atualização não Realizada.&quot; )
				EndIf
			EndIf

		Else
			MsgStop( &quot;Atualização não Realizada.&quot;, &quot;UPDFST&quot; )

		EndIf

	Else
		MsgStop( &quot;Atualização não Realizada.&quot;, &quot;UPDFST&quot; )

	EndIf

EndIf


Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSTProc
Função de processamento da gravação dos arquivos
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSTProc( lEnd, aMarcadas, lAuto )
Local   aInfo     := {}
Local   aRecnoSM0 := {}
Local   cAux      := &quot;&quot;
Local   cFile     := &quot;&quot;
Local   cFileLog  := &quot;&quot;
Local   cMask     := &quot;Arquivos Texto&quot; + &quot;(*.TXT)|*.txt|&quot;
Local   cTCBuild  := &quot;TCGetBuild&quot;
Local   cTexto    := &quot;&quot;
Local   cTopBuild := &quot;&quot;
Local   lOpen     := .F.
Local   lRet      := .T.
Local   nI        := 0
Local   nPos      := 0
Local   nRecno    := 0
Local   nX        := 0
Local   oDlg      := NIL
Local   oFont     := NIL
Local   oMemo     := NIL

Private aArqUpd   := {}

If ( lOpen := MyOpenSm0(.T.) )

	dbSelectArea( &quot;SM0&quot; )
	dbGoTop()

	While !SM0-&gt;( EOF() )
		// Só adiciona no aRecnoSM0 se a empresa for diferente
		If aScan( aRecnoSM0, { |x| x&#x5B;2] == SM0-&gt;M0_CODIGO } ) == 0 ;
		   .AND. aScan( aMarcadas, { |x| x&#x5B;1] == SM0-&gt;M0_CODIGO } ) &gt; 0
			aAdd( aRecnoSM0, { Recno(), SM0-&gt;M0_CODIGO } )
		EndIf
		SM0-&gt;( dbSkip() )
	End

	SM0-&gt;( dbCloseArea() )

	If lOpen

		For nI := 1 To Len( aRecnoSM0 )

			If !( lOpen := MyOpenSm0(.F.) )
				MsgStop( &quot;Atualização da empresa &quot; + aRecnoSM0&#x5B;nI]&#x5B;2] + &quot; não efetuada.&quot; )
				Exit
			EndIf

			SM0-&gt;( dbGoTo( aRecnoSM0&#x5B;nI]&#x5B;1] ) )

			RpcSetType( 3 )
			RpcSetEnv( SM0-&gt;M0_CODIGO, SM0-&gt;M0_CODFIL )

			lMsFinalAuto := .F.
			lMsHelpAuto  := .F.

			AutoGrLog( Replicate( &quot;-&quot;, 128 ) )
			AutoGrLog( Replicate( &quot; &quot;, 128 ) )
			AutoGrLog( &quot;LOG DA ATUALIZAÇÃO DOS DICIONÁRIOS&quot; )
			AutoGrLog( Replicate( &quot; &quot;, 128 ) )
			AutoGrLog( Replicate( &quot;-&quot;, 128 ) )
			AutoGrLog( &quot; &quot; )
			AutoGrLog( &quot; Dados Ambiente&quot; )
			AutoGrLog( &quot; --------------------&quot; )
			AutoGrLog( &quot; Empresa / Filial...: &quot; + cEmpAnt + &quot;/&quot; + cFilAnt )
			AutoGrLog( &quot; Nome Empresa.......: &quot; + Capital( AllTrim( GetAdvFVal( &quot;SM0&quot;, &quot;M0_NOMECOM&quot;, cEmpAnt + cFilAnt, 1, &quot;&quot; ) ) ) )
			AutoGrLog( &quot; Nome Filial........: &quot; + Capital( AllTrim( GetAdvFVal( &quot;SM0&quot;, &quot;M0_FILIAL&quot; , cEmpAnt + cFilAnt, 1, &quot;&quot; ) ) ) )
			AutoGrLog( &quot; DataBase...........: &quot; + DtoC( dDataBase ) )
			AutoGrLog( &quot; Data / Hora Ínicio.: &quot; + DtoC( Date() )  + &quot; / &quot; + Time() )
			AutoGrLog( &quot; Environment........: &quot; + GetEnvServer()  )
			AutoGrLog( &quot; StartPath..........: &quot; + GetSrvProfString( &quot;StartPath&quot;, &quot;&quot; ) )
			AutoGrLog( &quot; RootPath...........: &quot; + GetSrvProfString( &quot;RootPath&quot; , &quot;&quot; ) )
			AutoGrLog( &quot; Versão.............: &quot; + GetVersao(.T.) )
			AutoGrLog( &quot; Usuário TOTVS .....: &quot; + __cUserId + &quot; &quot; +  cUserName )
			AutoGrLog( &quot; Computer Name......: &quot; + GetComputerName() )

			aInfo   := GetUserInfo()
			If ( nPos    := aScan( aInfo,{ |x,y| x&#x5B;3] == ThreadId() } ) ) &gt; 0
				AutoGrLog( &quot; &quot; )
				AutoGrLog( &quot; Dados Thread&quot; )
				AutoGrLog( &quot; --------------------&quot; )
				AutoGrLog( &quot; Usuário da Rede....: &quot; + aInfo&#x5B;nPos]&#x5B;1] )
				AutoGrLog( &quot; Estação............: &quot; + aInfo&#x5B;nPos]&#x5B;2] )
				AutoGrLog( &quot; Programa Inicial...: &quot; + aInfo&#x5B;nPos]&#x5B;5] )
				AutoGrLog( &quot; Environment........: &quot; + aInfo&#x5B;nPos]&#x5B;6] )
				AutoGrLog( &quot; Conexão............: &quot; + AllTrim( StrTran( StrTran( aInfo&#x5B;nPos]&#x5B;7], Chr( 13 ), &quot;&quot; ), Chr( 10 ), &quot;&quot; ) ) )
			EndIf
			AutoGrLog( Replicate( &quot;-&quot;, 128 ) )
			AutoGrLog( &quot; &quot; )

			If !lAuto
				AutoGrLog( Replicate( &quot;-&quot;, 128 ) )
				AutoGrLog( &quot;Empresa : &quot; + SM0-&gt;M0_CODIGO + &quot;/&quot; + SM0-&gt;M0_NOME + CRLF )
			EndIf

			oProcess:SetRegua1( 9 )

			//------------------------------------
			// Atualiza o dicionário SX2
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de arquivos SX2&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			FSAtuSX2()

			//------------------------------------
			// Atualiza o dicionário SX3
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de arquivos SX3&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			FSAtuSX3()

			//------------------------------------
			// Atualiza o dicionário SIX
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de índices&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			FSAtuSIX()

			oProcess:IncRegua1( &quot;Dicionário de dados&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			oProcess:IncRegua2( &quot;Atualizando campos/índices&quot; )

			// Alteração física dos arquivos
			__SetX31Mode( .F. )

			If FindFunction(cTCBuild)
				cTopBuild := &amp;cTCBuild.()
			EndIf

			For nX := 1 To Len( aArqUpd )

				If cTopBuild &gt;= &quot;20090811&quot; .AND. TcInternal( 89 ) == &quot;CLOB_SUPPORTED&quot;
					If ( ( aArqUpd&#x5B;nX] &gt;= &quot;NQ &quot; .AND. aArqUpd&#x5B;nX] &lt;= &quot;NZZ&quot; ) .OR. ( aArqUpd&#x5B;nX] &gt;= &quot;O0 &quot; .AND. aArqUpd&#x5B;nX] &lt;= &quot;NZZ&quot; ) ) .AND.; !aArqUpd&#x5B;nX] $ &quot;NQD,NQF,NQP,NQT&quot; TcInternal( 25, &quot;CLOB&quot; ) EndIf EndIf If Select( aArqUpd&#x5B;nX] ) &gt; 0
					dbSelectArea( aArqUpd&#x5B;nX] )
					dbCloseArea()
				EndIf

				X31UpdTable( aArqUpd&#x5B;nX] )

				If __GetX31Error()
					Alert( __GetX31Trace() )
					MsgStop( &quot;Ocorreu um erro desconhecido durante a atualização da tabela : &quot; + aArqUpd&#x5B;nX] + &quot;. Verifique a integridade do dicionário e da tabela.&quot;, &quot;ATENÇÃO&quot; )
					AutoGrLog( &quot;Ocorreu um erro desconhecido durante a atualização da estrutura da tabela : &quot; + aArqUpd&#x5B;nX] )
				EndIf

				If cTopBuild &gt;= &quot;20090811&quot; .AND. TcInternal( 89 ) == &quot;CLOB_SUPPORTED&quot;
					TcInternal( 25, &quot;OFF&quot; )
				EndIf

			Next nX

			//------------------------------------
			// Atualiza o dicionário SX6
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de parâmetros&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			//FSAtuSX6()

			//------------------------------------
			// Atualiza o dicionário SX7
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de gatilhos&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			//FSAtuSX7()

			//------------------------------------
			// Atualiza o dicionário SXB
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de consultas padrão&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			FSAtuSXB()

			//------------------------------------
			// Atualiza o dicionário SX9
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de relacionamentos&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			//FSAtuSX9()

			//------------------------------------
			// Atualiza o dicionário SX1
			//------------------------------------
			oProcess:IncRegua1( &quot;Dicionário de perguntas&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			//FSAtuSX1()

			//------------------------------------
			// Atualiza os helps
			//------------------------------------
			oProcess:IncRegua1( &quot;Helps de Campo&quot; + &quot; - &quot; + SM0-&gt;M0_CODIGO + &quot; &quot; + SM0-&gt;M0_NOME + &quot; ...&quot; )
			//FSAtuHlp()

			AutoGrLog( Replicate( &quot;-&quot;, 128 ) )
			AutoGrLog( &quot; Data / Hora Final.: &quot; + DtoC( Date() ) + &quot; / &quot; + Time() )
			AutoGrLog( Replicate( &quot;-&quot;, 128 ) )

			RpcClearEnv()

		Next nI

		If !lAuto

			cTexto := LeLog()

			Define Font oFont Name &quot;Mono AS&quot; Size 5, 12

			Define MsDialog oDlg Title &quot;Atualização concluida.&quot; From 3, 0 to 340, 417 Pixel

			@ 5, 5 Get oMemo Var cTexto Memo Size 200, 145 Of oDlg Pixel
			oMemo:bRClicked := { || AllwaysTrue() }
			oMemo:oFont     := oFont

			Define SButton From 153, 175 Type  1 Action oDlg:End() Enable Of oDlg Pixel // Apaga
			Define SButton From 153, 145 Type 13 Action ( cFile := cGetFile( cMask, &quot;&quot; ), If( cFile == &quot;&quot;, .T., ;
			MemoWrite( cFile, cTexto ) ) ) Enable Of oDlg Pixel

			Activate MsDialog oDlg Center

		EndIf

	EndIf

Else

	lRet := .F.

EndIf

Return lRet


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX2
Função de processamento da gravação do SX2 - Arquivos
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX2()
Local aEstrut   := {}
Local aSX2      := {}
Local cAlias    := &quot;&quot;
Local cCpoUpd   := &quot;X2_ROTINA /X2_UNICO  /X2_DISPLAY/X2_SYSOBJ /X2_USROBJ /X2_POSLGT /&quot;
Local cEmpr     := &quot;&quot;
Local cPath     := &quot;&quot;
Local nI        := 0
Local nJ        := 0
Local cTamF 	:= &quot; &quot;
Local cTamU 	:= &quot; &quot;
Local cTamE 	:= &quot; &quot;

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SX2&quot; + CRLF )

aEstrut := { &quot;X2_CHAVE&quot;  , &quot;X2_PATH&quot;   , &quot;X2_ARQUIVO&quot;, &quot;X2_NOME&quot;   , &quot;X2_NOMESPA&quot;, &quot;X2_NOMEENG&quot;, &quot;X2_MODO&quot;   , ;
             &quot;X2_TTS&quot;    , &quot;X2_ROTINA&quot; , &quot;X2_PYME&quot;   , &quot;X2_UNICO&quot;  , &quot;X2_DISPLAY&quot;, &quot;X2_SYSOBJ&quot; , &quot;X2_USROBJ&quot; , ;
             &quot;X2_POSLGT&quot; , &quot;X2_CLOB&quot;   , &quot;X2_AUTREC&quot; , &quot;X2_MODOEMP&quot;, &quot;X2_MODOUN&quot; , &quot;X2_MODULO&quot; , &quot;X2_LOCALIZ&quot; }


dbSelectArea( &quot;SX2&quot; )
SX2-&gt;( dbSetOrder( 1 ) )
SX2-&gt;( dbGoTop() )
cPath := SX2-&gt;X2_PATH
cPath := IIf( Right( AllTrim( cPath ), 1 ) &lt;&gt; &quot;\&quot;, PadR( AllTrim( cPath ) + &quot;\&quot;, Len( cPath ) ), cPath )
cEmpr := Substr( SX2-&gt;X2_ARQUIVO, 4 )
If Fieldpos(&quot;X2_TAMFIL&quot;) &gt; 0
	cTamF := SX2-&gt;X2_TAMFIL
	cTamU := SX2-&gt;X2_TAMUN
	cTamE := SX2-&gt;X2_TAMEMP
	aEstrut := { &quot;X2_CHAVE&quot;  , &quot;X2_PATH&quot;   , &quot;X2_ARQUIVO&quot;, &quot;X2_NOME&quot;   , &quot;X2_NOMESPA&quot;, &quot;X2_NOMEENG&quot;, &quot;X2_MODO&quot;   , ;
             &quot;X2_TTS&quot;    , &quot;X2_ROTINA&quot; , &quot;X2_PYME&quot;   , &quot;X2_UNICO&quot;  , &quot;X2_DISPLAY&quot;, &quot;X2_SYSOBJ&quot; , &quot;X2_USROBJ&quot; , ;
             &quot;X2_POSLGT&quot; , &quot;X2_CLOB&quot;   , &quot;X2_AUTREC&quot; , &quot;X2_MODOEMP&quot;, &quot;X2_MODOUN&quot; , &quot;X2_MODULO&quot; , &quot;X2_LOCALIZ&quot;,&quot;X2_TAMFIL&quot;,&quot;X2_TAMUN&quot;,&quot;X2_TAMEMP&quot; }
Endif

//
// Tabela ZRA
//
aAdd( aSX2, { ;
	'ZRA'																	, ; //X2_CHAVE
	cPath																	, ; //X2_PATH
	'ZRA'+cEmpr																, ; //X2_ARQUIVO
	'Tipo Movimento'														, ; //X2_NOME
	'Tipo Movimento'														, ; //X2_NOMESPA
	'Tipo Movimento'														, ; //X2_NOMEENG
	'C'																		, ; //X2_MODO
	''																		, ; //X2_TTS
	''																		, ; //X2_ROTINA
	'S'																		, ; //X2_PYME
	'ZRA_FILIAL+ZRA_CODIGO'													, ; //X2_UNICO
	''																		, ; //X2_DISPLAY
	''																		, ; //X2_SYSOBJ
	''																		, ; //X2_USROBJ
	'1'																		, ; //X2_POSLGT
	'2'																		, ; //X2_CLOB
	'2'																		, ; //X2_AUTREC
	'C'																		, ; //X2_MODOEMP
	'C'																		, ; //X2_MODOUN
	0	   																	, ; //X2_MODULO
	''	   																	, ; //X2_LOCALIZ
	cTamF	   																, ; //X2_TAMFIL
	cTamU	   																, ; //X2_TAMUN
	cTamE	   																} ) //X2_TAMEMP


//
// Tabela ZRB
//
aAdd( aSX2, { ;
	'ZRB'																	, ; //X2_CHAVE
	cPath																	, ; //X2_PATH
	'ZRB'+cEmpr																, ; //X2_ARQUIVO
	'Grupo Movimento'														, ; //X2_NOME
	'Grupo Movimento'														, ; //X2_NOMESPA
	'Grupo Movimento'														, ; //X2_NOMEENG
	'C'																		, ; //X2_MODO
	''																		, ; //X2_TTS
	''																		, ; //X2_ROTINA
	'S'																		, ; //X2_PYME
	'ZRB_FILIAL+ZRB_CODIGO'													, ; //X2_UNICO
	''																		, ; //X2_DISPLAY
	''																		, ; //X2_SYSOBJ
	''																		, ; //X2_USROBJ
	'1'																		, ; //X2_POSLGT
	'2'																		, ; //X2_CLOB
	'2'																		, ; //X2_AUTREC
	'C'																		, ; //X2_MODOEMP
	'C'																		, ; //X2_MODOUN
	0	   																	, ; //X2_MODULO
	''	   																	, ; //X2_LOCALIZ
	cTamF	   																, ; //X2_TAMFIL
	cTamU	   																, ; //X2_TAMUN
	cTamE	   																} ) //X2_TAMEMP

//
// Tabela ZRC
//
aAdd( aSX2, { ;
	'ZRC'																	, ; //X2_CHAVE
	cPath																	, ; //X2_PATH
	'ZRC'+cEmpr																, ; //X2_ARQUIVO
	'Grupo Itens'															, ; //X2_NOME
	'Grupo Itens'															, ; //X2_NOMESPA
	'Grupo Itens'															, ; //X2_NOMEENG
	'C'																		, ; //X2_MODO
	''																		, ; //X2_TTS
	''																		, ; //X2_ROTINA
	'S'																		, ; //X2_PYME
	'ZRC_FILIAL+ZRC_CODGRP+ZRC_CODZRA'										, ; //X2_UNICO
	''																		, ; //X2_DISPLAY
	''																		, ; //X2_SYSOBJ
	''																		, ; //X2_USROBJ
	'1'																		, ; //X2_POSLGT
	'2'																		, ; //X2_CLOB
	'2'																		, ; //X2_AUTREC
	'C'																		, ; //X2_MODOEMP
	'C'																		, ; //X2_MODOUN
	0	   																	, ; //X2_MODULO
	''	   																	, ; //X2_LOCALIZ
	cTamF	   																, ; //X2_TAMFIL
	cTamU	   																, ; //X2_TAMUN
	cTamE	   																} ) //X2_TAMEMP


//
// Tabela ZRD
//
aAdd( aSX2, { ;
	'ZRD'																	, ; //X2_CHAVE
	cPath																	, ; //X2_PATH
	'ZRD'+cEmpr																, ; //X2_ARQUIVO
	'Movimento'																, ; //X2_NOME
	'Movimento'																, ; //X2_NOMESPA
	'Movimento'																, ; //X2_NOMEENG
	'C'																		, ; //X2_MODO
	''																		, ; //X2_TTS
	''																		, ; //X2_ROTINA
	'S'																		, ; //X2_PYME
	''																		, ; //X2_UNICO //TODO verificar se deve ter registro unico?
	''																		, ; //X2_DISPLAY
	''																		, ; //X2_SYSOBJ
	''																		, ; //X2_USROBJ
	'1'																		, ; //X2_POSLGT
	'2'																		, ; //X2_CLOB
	'2'																		, ; //X2_AUTREC
	'C'																		, ; //X2_MODOEMP
	'C'																		, ; //X2_MODOUN
	0	   																	, ; //X2_MODULO
	''	   																	, ; //X2_LOCALIZ
	cTamF	   																, ; //X2_TAMFIL
	cTamU	   																, ; //X2_TAMUN
	cTamE	   																} ) //X2_TAMEMP


//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSX2 ) )

dbSelectArea( &quot;SX2&quot; )
dbSetOrder( 1 )

For nI := 1 To Len( aSX2 )

	oProcess:IncRegua2( &quot;Atualizando Arquivos (SX2)...&quot; )

	If !SX2-&gt;( dbSeek( aSX2&#x5B;nI]&#x5B;1] ) )

		If !( aSX2&#x5B;nI]&#x5B;1] $ cAlias )
			cAlias += aSX2&#x5B;nI]&#x5B;1] + &quot;/&quot;
			AutoGrLog( &quot;Foi incluída a tabela &quot; + aSX2&#x5B;nI]&#x5B;1] )
		EndIf

		RecLock( &quot;SX2&quot;, .T. )
		For nJ := 1 To Len( aSX2&#x5B;nI] )
			If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
				If AllTrim( aEstrut&#x5B;nJ] ) == &quot;X2_ARQUIVO&quot;
					FieldPut( FieldPos( aEstrut&#x5B;nJ] ), SubStr( aSX2&#x5B;nI]&#x5B;nJ], 1, 3 ) + cEmpAnt +  &quot;0&quot; )
				Else
					FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX2&#x5B;nI]&#x5B;nJ] )
				EndIf
			EndIf
		Next nJ
		MsUnLock()

	Else

		/*If  !( StrTran( Upper( AllTrim( SX2-&gt;X2_UNICO ) ), &quot; &quot;, &quot;&quot; ) == StrTran( Upper( AllTrim( aSX2&#x5B;nI]&#x5B;12]  ) ), &quot; &quot;, &quot;&quot; ) )
			RecLock( &quot;SX2&quot;, .F. )
			SX2-&gt;X2_UNICO := aSX2&#x5B;nI]&#x5B;12]
			MsUnlock()

			If MSFILE( RetSqlName( aSX2&#x5B;nI]&#x5B;1] ),RetSqlName( aSX2&#x5B;nI]&#x5B;1] ) + &quot;_UNQ&quot;  )
				TcInternal( 60, RetSqlName( aSX2&#x5B;nI]&#x5B;1] ) + &quot;|&quot; + RetSqlName( aSX2&#x5B;nI]&#x5B;1] ) + &quot;_UNQ&quot; )
			EndIf

			AutoGrLog( &quot;Foi alterada a chave única da tabela &quot; + aSX2&#x5B;nI]&#x5B;1] )
		EndIf*/

		RecLock( &quot;SX2&quot;, .F. )
		For nJ := 1 To Len( aSX2&#x5B;nI] )
			If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
				If PadR( aEstrut&#x5B;nJ], 10 ) $ cCpoUpd
					FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX2&#x5B;nI]&#x5B;nJ] )
				EndIf

			EndIf
		Next nJ
		MsUnLock()

	EndIf

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX2&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX3
Função de processamento da gravação do SX3 - Campos

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX3()
Local aEstrut   := {}
Local aSX3      := {}
Local cAlias    := &quot;&quot;
Local cAliasAtu := &quot;&quot;
Local cSeqAtu   := &quot;&quot;
Local cX3Campo  := &quot;&quot;
Local cX3Dado   := &quot;&quot;
Local nI        := 0
Local nJ        := 0
Local nPosArq   := 0
Local nPosCpo   := 0
Local nPosOrd   := 0
Local nPosSXG   := 0
Local nPosTam   := 0
Local nPosVld   := 0
Local nSeqAtu   := 0
Local nTamSeek  := Len( SX3-&gt;X3_CAMPO )
Local nTamFil 	:= TamSX3( &quot;A1_FILIAL&quot; )&#x5B;1]
Local cUsaFil	:= FsX3Info(&quot;A1_FILIAL&quot;,1)
Local cUsaOBg	:= FsX3Info(&quot;A1_CGC&quot;,1)
Local cUsaCpo	:= FsX3Info(&quot;A1_BAIRRO&quot;,1)
Local cResFil	:= FsX3Info(&quot;A1_FILIAL&quot;,2)
Local cResObg	:= FsX3Info(&quot;A1_CGC&quot;,2)
Local cResCpo	:= FsX3Info(&quot;A1_BAIRRO&quot;,2)

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SX3&quot; + CRLF )

aEstrut := { { &quot;X3_ARQUIVO&quot;, 0 }, { &quot;X3_ORDEM&quot;  , 0 }, { &quot;X3_CAMPO&quot;  , 0 }, { &quot;X3_TIPO&quot;   , 0 }, { &quot;X3_TAMANHO&quot;, 0 }, { &quot;X3_DECIMAL&quot;, 0 }, { &quot;X3_TITULO&quot; , 0 }, ;
             { &quot;X3_TITSPA&quot; , 0 }, { &quot;X3_TITENG&quot; , 0 }, { &quot;X3_DESCRIC&quot;, 0 }, { &quot;X3_DESCSPA&quot;, 0 }, { &quot;X3_DESCENG&quot;, 0 }, { &quot;X3_PICTURE&quot;, 0 }, { &quot;X3_VALID&quot;  , 0 }, ;
             { &quot;X3_USADO&quot;  , 0 }, { &quot;X3_RELACAO&quot;, 0 }, { &quot;X3_F3&quot;     , 0 }, { &quot;X3_NIVEL&quot;  , 0 }, { &quot;X3_RESERV&quot; , 0 }, { &quot;X3_CHECK&quot;  , 0 }, { &quot;X3_TRIGGER&quot;, 0 }, ;
             { &quot;X3_PROPRI&quot; , 0 }, { &quot;X3_BROWSE&quot; , 0 }, { &quot;X3_VISUAL&quot; , 0 }, { &quot;X3_CONTEXT&quot;, 0 }, { &quot;X3_OBRIGAT&quot;, 0 }, { &quot;X3_VLDUSER&quot;, 0 }, { &quot;X3_CBOX&quot;   , 0 }, ;
             { &quot;X3_CBOXSPA&quot;, 0 }, { &quot;X3_CBOXENG&quot;, 0 }, { &quot;X3_PICTVAR&quot;, 0 }, { &quot;X3_WHEN&quot;   , 0 }, { &quot;X3_INIBRW&quot; , 0 }, { &quot;X3_GRPSXG&quot; , 0 }, { &quot;X3_FOLDER&quot; , 0 }, ;
             { &quot;X3_CONDSQL&quot;, 0 }, { &quot;X3_CHKSQL&quot; , 0 }, { &quot;X3_IDXSRV&quot; , 0 }, { &quot;X3_ORTOGRA&quot;, 0 }, { &quot;X3_TELA&quot;   , 0 }, { &quot;X3_POSLGT&quot; , 0 }, { &quot;X3_IDXFLD&quot; , 0 }, ;
             { &quot;X3_AGRUP&quot;  , 0 }, { &quot;X3_MODAL&quot;  , 0 }, { &quot;X3_PYME&quot;   , 0 } ,{ &quot;X3_LOCALIZ&quot;, 0 }  }

aEval( aEstrut, { |x| x&#x5B;2] := SX3-&gt;( FieldPos( x&#x5B;1] ) ) } ) //checa somente os que existem na base e atualiza a segunda posição

//
// --- ATENÇÃO ---
// Coloque .F. na 2a. posição de cada elemento do array, para os dados do SX3
// que não serão atualizados quando o campo já existir.
//

//
// Campos Tabela ZA0
//
aAdd( aSX3, { ;
	{ 'ZRA'																	, .T. }, ; //X3_ARQUIVO
	{ '01'																	, .T. }, ; //X3_ORDEM
	{ 'ZRA_FILIAL'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ nTamFil																, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Filial'																, .T. }, ; //X3_TITULO
	{ 'Sucursal'															, .T. }, ; //X3_TITSPA
	{ 'Branch'																, .T. }, ; //X3_TITENG
	{ 'Filial do Sistema'													, .T. }, ; //X3_DESCRIC
	{ 'Sucursal'															, .T. }, ; //X3_DESCSPA
	{ 'Branch of the System'												, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaFil																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 1																		, .T. }, ; //X3_NIVEL
	{ cResFil																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'N'																	, .T. }, ; //X3_BROWSE
	{ ''																	, .T. }, ; //X3_VISUAL
	{ ''																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ '033'																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRA'																	, .T. }, ; //X3_ARQUIVO
	{ '02'																	, .T. }, ; //X3_ORDEM
	{ 'ZRA_CODIGO'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 6																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Codigo'																, .T. }, ; //X3_TITULO
	{ 'Codigo'																, .T. }, ; //X3_TITSPA
	{ 'Codigo'																, .T. }, ; //X3_TITENG
	{ 'Cod. Receita/Despesa'												, .T. }, ; //X3_DESCRIC
	{ 'Cod. Receita/Despesa'												, .T. }, ; //X3_DESCSPA
	{ 'Cod. Receita/Despesa'												, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaObg																, .T. }, ; //X3_USADO
	{ 'GetSxeNum(&quot;ZRA&quot;,&quot;ZRA_CODIGO&quot;)'										, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResObg																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'X'																	, .T. }, ; //X3_OBRIGAT
	{ 'ExistChav(&quot;ZRA&quot;)'													, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ 'INCLUI'																, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRA'																	, .T. }, ; //X3_ARQUIVO
	{ '03'																	, .T. }, ; //X3_ORDEM
	{ 'ZRA_DESCRI'														, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 50																	, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Nome'																, .T. }, ; //X3_TITULO
	{ 'Nome'																, .T. }, ; //X3_TITSPA
	{ 'Nome'																, .T. }, ; //X3_TITENG
	{ 'Nome'																, .T. }, ; //X3_DESCRIC
	{ 'Nome'																, .T. }, ; //X3_DESCSPA
	{ 'Nome'																, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'x'																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRA'																	, .T. }, ; //X3_ARQUIVO
	{ '04'																	, .T. }, ; //X3_ORDEM
	{ 'ZRA_TIPO'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 1																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Tipo'																, .T. }, ; //X3_TITULO
	{ 'Tipo'																, .T. }, ; //X3_TITSPA
	{ 'Tipo'																, .T. }, ; //X3_TITENG
	{ 'Tipo'																, .T. }, ; //X3_DESCRIC
	{ 'Tipo'																, .T. }, ; //X3_DESCSPA
	{ 'Tipo'																, .T. }, ; //X3_DESCENG
	{ ''																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'x'																	, .T. }, ; //X3_OBRIGAT
	{ 'Pertence(&quot;12&quot;)'														, .T. }, ; //X3_VLDUSER
	{ '1=Credito;2=Debito'													, .T. }, ; //X3_CBOX
	{ '1=Credito;2=Debito'													, .T. }, ; //X3_CBOXSPA
	{ '1=Credito;2=Debito'													, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ
/*
aAdd( aSX3, { ;
	{ 'ZRA'																	, .T. }, ; //X3_ARQUIVO
	{ '05'																	, .T. }, ; //X3_ORDEM
	{ 'ZRA_BITMAP'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 20																	, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Foto'																, .T. }, ; //X3_TITULO
	{ 'Foto'																, .T. }, ; //X3_TITSPA
	{ 'Foto'																, .T. }, ; //X3_TITENG
	{ 'Foto'																, .T. }, ; //X3_DESCRIC
	{ 'Foto'																, .T. }, ; //X3_DESCSPA
	{ 'Foto'																, .T. }, ; //X3_DESCENG
	{ ''																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'B'																	, .T. }, ; //X3_PROPRI
	{ 'N'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ
*/


//
// Campos Tabela ZRB
//
aAdd( aSX3, { ;
	{ 'ZRB'																	, .T. }, ; //X3_ARQUIVO
	{ '01'																	, .T. }, ; //X3_ORDEM
	{ 'ZRB_FILIAL'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ nTamFil																, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Filial'																, .T. }, ; //X3_TITULO
	{ 'Sucursal'															, .T. }, ; //X3_TITSPA
	{ 'Branch'																, .T. }, ; //X3_TITENG
	{ 'Filial do Sistema'													, .T. }, ; //X3_DESCRIC
	{ 'Sucursal'															, .T. }, ; //X3_DESCSPA
	{ 'Branch of the System'												, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaFil																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 1																		, .T. }, ; //X3_NIVEL
	{ cResFil																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'N'																	, .T. }, ; //X3_BROWSE
	{ ''																	, .T. }, ; //X3_VISUAL
	{ ''																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ '033'																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRB'																	, .T. }, ; //X3_ARQUIVO
	{ '02'																	, .T. }, ; //X3_ORDEM
	{ 'ZRB_CODIGO'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 6																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Codigo'																, .T. }, ; //X3_TITULO
	{ 'Codigo'																, .T. }, ; //X3_TITSPA
	{ 'Codigo'																, .T. }, ; //X3_TITENG
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCRIC
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCSPA
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaObg																, .T. }, ; //X3_USADO
	{ 'GetSxeNum(&quot;ZRB&quot;,&quot;ZRB_CODIGO&quot;)'										, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResObg																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'X'																	, .T. }, ; //X3_OBRIGAT
	{ 'ExistChav(&quot;ZRB&quot;)'													, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ 'INCLUI'																, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRB'																	, .T. }, ; //X3_ARQUIVO
	{ '03'																	, .T. }, ; //X3_ORDEM
	{ 'ZRB_DESCRICAO'														, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 50																	, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Nome'																, .T. }, ; //X3_TITULO
	{ 'Nome'																, .T. }, ; //X3_TITSPA
	{ 'Nome'																, .T. }, ; //X3_TITENG
	{ 'Nome'																, .T. }, ; //X3_DESCRIC
	{ 'Nome'																, .T. }, ; //X3_DESCSPA
	{ 'Nome'																, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'x'																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ



//
// Campos Tabela ZRC
//
aAdd( aSX3, { ;
	{ 'ZRC'																	, .T. }, ; //X3_ARQUIVO
	{ '01'																	, .T. }, ; //X3_ORDEM
	{ 'ZRC_FILIAL'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ nTamFil																, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Filial'																, .T. }, ; //X3_TITULO
	{ 'Sucursal'															, .T. }, ; //X3_TITSPA
	{ 'Branch'																, .T. }, ; //X3_TITENG
	{ 'Filial do Sistema'													, .T. }, ; //X3_DESCRIC
	{ 'Sucursal'															, .T. }, ; //X3_DESCSPA
	{ 'Branch of the System'												, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaFil																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 1																		, .T. }, ; //X3_NIVEL
	{ cResFil																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'N'																	, .T. }, ; //X3_BROWSE
	{ ''																	, .T. }, ; //X3_VISUAL
	{ ''																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ '033'																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ


aAdd( aSX3, { ;
	{ 'ZRC'																	, .T. }, ; //X3_ARQUIVO
	{ '02'																	, .T. }, ; //X3_ORDEM
	{ 'ZRC_CODGRP'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 6																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Codigo Grp.'															, .T. }, ; //X3_TITULO
	{ 'Codigo Grp.'															, .T. }, ; //X3_TITSPA
	{ 'Codigo Grp.'															, .T. }, ; //X3_TITENG
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCRIC
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCSPA
	{ 'Cod. Grupo'															, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'X'																	, .T. }, ; //X3_OBRIGAT
	{ ''													, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ


aAdd( aSX3, { ;
	{ 'ZRC'																	, .T. }, ; //X3_ARQUIVO
	{ '03'																	, .T. }, ; //X3_ORDEM
	{ 'ZRC_CODZRA'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 6																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITULO
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITSPA
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITENG
	{ 'Cod. Desp/Receito'													, .T. }, ; //X3_DESCRIC
	{ 'Cod Desp/Receit'														, .T. }, ; //X3_DESCSPA
	{ 'Cod Desp/Receit'														, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaObg																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ 'ZRA'																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResObg																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'X'																	, .T. }, ; //X3_OBRIGAT
	{ ''													, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRC'																	, .T. }, ; //X3_ARQUIVO
	{ '04'																	, .T. }, ; //X3_ORDEM
	{ 'ZRC_DESCRI'														, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 50																	, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Nome'																, .T. }, ; //X3_TITULO
	{ 'Nome'																, .T. }, ; //X3_TITSPA
	{ 'Nome'																, .T. }, ; //X3_TITENG
	{ 'Nome'																, .T. }, ; //X3_DESCRIC
	{ 'Nome'																, .T. }, ; //X3_DESCSPA
	{ 'Nome'																, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ &quot;&quot;, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'V'																	, .T. }, ; //X3_VISUAL
	{ 'V'																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ


//
// Campos Tabela ZRD
//
aAdd( aSX3, { ;
	{ 'ZRD'																	, .T. }, ; //X3_ARQUIVO
	{ '01'																	, .T. }, ; //X3_ORDEM
	{ 'ZRD_FILIAL'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ nTamFil																, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Filial'																, .T. }, ; //X3_TITULO
	{ 'Sucursal'															, .T. }, ; //X3_TITSPA
	{ 'Branch'																, .T. }, ; //X3_TITENG
	{ 'Filial do Sistema'													, .T. }, ; //X3_DESCRIC
	{ 'Sucursal'															, .T. }, ; //X3_DESCSPA
	{ 'Branch of the System'												, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaFil																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 1																		, .T. }, ; //X3_NIVEL
	{ cResFil																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'N'																	, .T. }, ; //X3_BROWSE
	{ ''																	, .T. }, ; //X3_VISUAL
	{ ''																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ '033'																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRD'																	, .T. }, ; //X3_ARQUIVO
	{ '02'																	, .T. }, ; //X3_ORDEM
	{ 'ZRD_CODZRA'															, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 6																		, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITULO
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITSPA
	{ 'Cod Desp/Receit.'													, .T. }, ; //X3_TITENG
	{ 'Cod. Desp/Receito'													, .T. }, ; //X3_DESCRIC
	{ 'Cod Desp/Receit'														, .T. }, ; //X3_DESCSPA
	{ 'Cod Desp/Receit'														, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaObg																, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ 'ZRA'																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResObg																, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'A'																	, .T. }, ; //X3_VISUAL
	{ 'R'																	, .T. }, ; //X3_CONTEXT
	{ 'X'																	, .T. }, ; //X3_OBRIGAT
	{ ''													, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

aAdd( aSX3, { ;
	{ 'ZRD'																	, .T. }, ; //X3_ARQUIVO
	{ '03'																	, .T. }, ; //X3_ORDEM
	{ 'ZRD_DESCRICAO'														, .T. }, ; //X3_CAMPO
	{ 'C'																	, .T. }, ; //X3_TIPO
	{ 50																	, .T. }, ; //X3_TAMANHO
	{ 0																		, .T. }, ; //X3_DECIMAL
	{ 'Nome'																, .T. }, ; //X3_TITULO
	{ 'Nome'																, .T. }, ; //X3_TITSPA
	{ 'Nome'																, .T. }, ; //X3_TITENG
	{ 'Nome'																, .T. }, ; //X3_DESCRIC
	{ 'Nome'																, .T. }, ; //X3_DESCSPA
	{ 'Nome'																, .T. }, ; //X3_DESCENG
	{ '@!'																	, .T. }, ; //X3_PICTURE
	{ ''																	, .T. }, ; //X3_VALID
	{ cUsaCpo					, .T. }, ; //X3_USADO
	{ ''																	, .T. }, ; //X3_RELACAO
	{ ''																	, .T. }, ; //X3_F3
	{ 0																		, .T. }, ; //X3_NIVEL
	{ cResCpo												, .T. }, ; //X3_RESERV
	{ ''																	, .T. }, ; //X3_CHECK
	{ ''																	, .T. }, ; //X3_TRIGGER
	{ 'U'																	, .T. }, ; //X3_PROPRI
	{ 'S'																	, .T. }, ; //X3_BROWSE
	{ 'V'																	, .T. }, ; //X3_VISUAL
	{ 'V'																	, .T. }, ; //X3_CONTEXT
	{ ''																	, .T. }, ; //X3_OBRIGAT
	{ ''																	, .T. }, ; //X3_VLDUSER
	{ ''																	, .T. }, ; //X3_CBOX
	{ ''																	, .T. }, ; //X3_CBOXSPA
	{ ''																	, .T. }, ; //X3_CBOXENG
	{ ''																	, .T. }, ; //X3_PICTVAR
	{ ''																	, .T. }, ; //X3_WHEN
	{ ''																	, .T. }, ; //X3_INIBRW
	{ ''																	, .T. }, ; //X3_GRPSXG
	{ ''																	, .T. }, ; //X3_FOLDER
	{ ''																	, .T. }, ; //X3_CONDSQL
	{ ''																	, .T. }, ; //X3_CHKSQL
	{ 'N'																	, .T. }, ; //X3_IDXSRV
	{ 'N'																	, .T. }, ; //X3_ORTOGRA
	{ ''																	, .T. }, ; //X3_TELA
	{ '1'																	, .T. }, ; //X3_POSLGT
	{ 'N'																	, .T. }, ; //X3_IDXFLD
	{ ''																	, .T. }, ; //X3_AGRUP
	{ 'N'																	, .T. }, ; //X3_MODAL
	{ 'S'																	, .T. }, ; //X3_PYME
	{ ''																	, .T. }} ) //X3_LOCALIZ

//
// Atualizando dicionário
//
nPosArq := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_ARQUIVO&quot; } )
nPosOrd := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_ORDEM&quot;   } )
nPosCpo := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_CAMPO&quot;   } )
nPosTam := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_TAMANHO&quot; } )
nPosSXG := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_GRPSXG&quot;  } )
nPosVld := aScan( aEstrut, { |x| AllTrim( x&#x5B;1] ) == &quot;X3_VALID&quot;   } )

aSort( aSX3,,, { |x,y| x&#x5B;nPosArq]&#x5B;1]+x&#x5B;nPosOrd]&#x5B;1]+x&#x5B;nPosCpo]&#x5B;1] &lt; y&#x5B;nPosArq]&#x5B;1]+y&#x5B;nPosOrd]&#x5B;1]+y&#x5B;nPosCpo]&#x5B;1] } ) oProcess:SetRegua2( Len( aSX3 ) ) dbSelectArea( &quot;SX3&quot; ) dbSetOrder( 2 ) cAliasAtu := &quot;&quot; For nI := 1 To Len( aSX3 ) // // Verifica se o campo faz parte de um grupo e ajusta tamanho // If !Empty( aSX3&#x5B;nI]&#x5B;nPosSXG]&#x5B;1] ) SXG-&gt;( dbSetOrder( 1 ) )
		If SXG-&gt;( MSSeek( aSX3&#x5B;nI]&#x5B;nPosSXG]&#x5B;1] ) )
			If aSX3&#x5B;nI]&#x5B;nPosTam]&#x5B;1] &lt;&gt; SXG-&gt;XG_SIZE
				aSX3&#x5B;nI]&#x5B;nPosTam]&#x5B;1] := SXG-&gt;XG_SIZE
				AutoGrLog( &quot;O tamanho do campo &quot; + aSX3&#x5B;nI]&#x5B;nPosCpo]&#x5B;1] + &quot; NÃO atualizado e foi mantido em &#x5B;&quot; + ;
				AllTrim( Str( SXG-&gt;XG_SIZE ) ) + &quot;]&quot; + CRLF + ;
				&quot; por pertencer ao grupo de campos &#x5B;&quot; + SXG-&gt;XG_GRUPO + &quot;]&quot; + CRLF )
			EndIf
		EndIf
	EndIf

	SX3-&gt;( dbSetOrder( 2 ) )

	If !( aSX3&#x5B;nI]&#x5B;nPosArq]&#x5B;1] $ cAlias )
		cAlias += aSX3&#x5B;nI]&#x5B;nPosArq]&#x5B;1] + &quot;/&quot;
		aAdd( aArqUpd, aSX3&#x5B;nI]&#x5B;nPosArq]&#x5B;1] )
	EndIf

	If !SX3-&gt;( dbSeek( PadR( aSX3&#x5B;nI]&#x5B;nPosCpo]&#x5B;1], nTamSeek ) ) )

		//
		// Busca ultima ocorrencia do alias
		//
		If ( aSX3&#x5B;nI]&#x5B;nPosArq]&#x5B;1] &lt;&gt; cAliasAtu )
			cSeqAtu   := &quot;00&quot;
			cAliasAtu := aSX3&#x5B;nI]&#x5B;nPosArq]&#x5B;1]

			dbSetOrder( 1 )
			SX3-&gt;( dbSeek( cAliasAtu + &quot;ZZ&quot;, .T. ) )
			dbSkip( -1 )

			If ( SX3-&gt;X3_ARQUIVO == cAliasAtu )
				cSeqAtu := SX3-&gt;X3_ORDEM
			EndIf

			nSeqAtu := Val( RetAsc( cSeqAtu, 3, .F. ) )
		EndIf

		nSeqAtu++
		cSeqAtu := RetAsc( Str( nSeqAtu ), 2, .T. )

		RecLock( &quot;SX3&quot;, .T. )
		For nJ := 1 To Len( aSX3&#x5B;nI] )
			If SX3-&gt;(FieldPos( aEstrut&#x5B;nJ]&#x5B;1])) &gt; 0
				If     nJ == nPosOrd  // Ordem
					SX3-&gt;( FieldPut( FieldPos( aEstrut&#x5B;nJ]&#x5B;1] ), cSeqAtu ) )

				ElseIf aEstrut&#x5B;nJ]&#x5B;2] &gt; 0
					SX3-&gt;( FieldPut( FieldPos( aEstrut&#x5B;nJ]&#x5B;1] ), aSX3&#x5B;nI]&#x5B;nJ]&#x5B;1] ) )
				EndIf
			EndIf
		Next nJ

		dbCommit()
		MsUnLock()

		AutoGrLog( &quot;Criado campo &quot; + aSX3&#x5B;nI]&#x5B;nPosCpo]&#x5B;1] )

	Else

		//
		// Verifica se o campo faz parte de um grupo e ajsuta tamanho
		//
		If !Empty( SX3-&gt;X3_GRPSXG ) .AND. SX3-&gt;X3_GRPSXG &lt;&gt; aSX3&#x5B;nI]&#x5B;nPosSXG]&#x5B;1]
			SXG-&gt;( dbSetOrder( 1 ) )
			If SXG-&gt;( MSSeek( SX3-&gt;X3_GRPSXG ) )
				If aSX3&#x5B;nI]&#x5B;nPosTam]&#x5B;1] &lt;&gt; SXG-&gt;XG_SIZE
					aSX3&#x5B;nI]&#x5B;nPosTam]&#x5B;1] := SXG-&gt;XG_SIZE
					AutoGrLog( &quot;O tamanho do campo &quot; + aSX3&#x5B;nI]&#x5B;nPosCpo]&#x5B;1] + &quot; NÃO atualizado e foi mantido em &#x5B;&quot; + ;
					AllTrim( Str( SXG-&gt;XG_SIZE ) ) + &quot;]&quot;+ CRLF + ;
					&quot;   por pertencer ao grupo de campos &#x5B;&quot; + SX3-&gt;X3_GRPSXG + &quot;]&quot; + CRLF )
				EndIf
			EndIf
		EndIf

		//
		// Verifica todos os campos
		//
		For nJ := 1 To Len( aSX3&#x5B;nI] )
			If SX3-&gt;(FieldPos( aEstrut&#x5B;nJ]&#x5B;1])) &gt; 0
				If aSX3&#x5B;nI]&#x5B;nJ]&#x5B;2]
					cX3Campo := AllTrim( aEstrut&#x5B;nJ]&#x5B;1] )
					cX3Dado  := SX3-&gt;( FieldGet( aEstrut&#x5B;nJ]&#x5B;2] ) )

					If  aEstrut&#x5B;nJ]&#x5B;2] &gt; 0 .AND. ;
						PadR( StrTran( AllToChar( cX3Dado ), &quot; &quot;, &quot;&quot; ), 250 ) &lt;&gt; ;
						PadR( StrTran( AllToChar( aSX3&#x5B;nI]&#x5B;nJ]&#x5B;1] ), &quot; &quot;, &quot;&quot; ), 250 ) .AND. ;
						!cX3Campo  == &quot;X3_ORDEM&quot;

						AutoGrLog( &quot;Alterado campo &quot; + aSX3&#x5B;nI]&#x5B;nPosCpo]&#x5B;1] + CRLF + ;
						&quot;   &quot; + PadR( cX3Campo, 10 ) + &quot; de &#x5B;&quot; + AllToChar( cX3Dado ) + &quot;]&quot; + CRLF + ;
						&quot;            para &#x5B;&quot; + AllToChar( aSX3&#x5B;nI]&#x5B;nJ]&#x5B;1] )           + &quot;]&quot; + CRLF )

						RecLock( &quot;SX3&quot;, .F. )
						FieldPut( FieldPos( aEstrut&#x5B;nJ]&#x5B;1] ), aSX3&#x5B;nI]&#x5B;nJ]&#x5B;1] )
						MsUnLock()
					EndIf
				EndIf
			EndIf
		Next

	EndIf

	oProcess:IncRegua2( &quot;Atualizando Campos de Tabelas (SX3)...&quot; )

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX3&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSIX
Função de processamento da gravação do SIX - Indices

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSIX()
Local aEstrut   := {}
Local aSIX      := {}
Local lAlt      := .F.
Local lDelInd   := .F.
Local nI        := 0
Local nJ        := 0

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SIX&quot; + CRLF )

aEstrut := { &quot;INDICE&quot; , &quot;ORDEM&quot; , &quot;CHAVE&quot;, &quot;DESCRICAO&quot;, &quot;DESCSPA&quot;  , ;
             &quot;DESCENG&quot;, &quot;PROPRI&quot;, &quot;F3&quot;   , &quot;NICKNAME&quot; , &quot;SHOWPESQ&quot; ,&quot;IX_LOCALIZ&quot;}

//
// Tabela ZRA
//
aAdd( aSIX, { ;
	'ZRA'																	, ; //INDICE
	'1'																		, ; //ORDEM
	'ZRA_FILIAL+ZRA_CODIGO'													, ; //CHAVE
	'Codigo'																, ; //DESCRICAO
	'Codigo'																, ; //DESCSPA
	'Codigo'																, ; //DESCENG
	'U'																		, ; //PROPRI
	''																		, ; //F3
	''																		, ; //NICKNAME
	'S'																		, ; //SHOWPESQ
	''																		} ) //IX_LOCALIZ


//
// Tabela ZRB
//
aAdd( aSIX, { ;
	'ZRB'																	, ; //INDICE
	'1'																		, ; //ORDEM
	'ZRB_FILIAL+ZRB_CODIGO'													, ; //CHAVE
	'Codigo'																, ; //DESCRICAO
	'Codigo'																, ; //DESCSPA
	'Codigo'																, ; //DESCENG
	'U'																		, ; //PROPRI
	''																		, ; //F3
	''																		, ; //NICKNAME
	'S'																		, ; //SHOWPESQ
	''																		} ) //IX_LOCALIZ

//
// Tabela ZRC
//
aAdd( aSIX, { ;
	'ZRC'																	, ; //INDICE
	'1'																		, ; //ORDEM
	'ZRC_FILIAL+ZRC_CODGRP'										, ; //CHAVE
	'Codigo'												, ; //DESCRICAO
	'Codigo'												, ; //DESCSPA
	'Codigo'												, ; //DESCENG
	'U'																		, ; //PROPRI
	''																		, ; //F3
	''																		, ; //NICKNAME
	'S'																		, ; //SHOWPESQ
	''																		} ) //IX_LOCALIZ

//
// Tabela ZRD
//
aAdd( aSIX, { ;
	'ZRD'																	, ; //INDICE
	'1'																		, ; //ORDEM
	'ZRD_FILIAL+ZRD_CODZRA'													, ; //CHAVE
	'Codigo + Despesa'														, ; //DESCRICAO
	'Codigo + Despesa'														, ; //DESCSPA
	'Codigo + Despesa'														, ; //DESCENG  //TODO VERIICAR Index
	'U'																		, ; //PROPRI
	''																		, ; //F3
	''																		, ; //NICKNAME
	'S'																		, ; //SHOWPESQ
	''																		} ) //IX_LOCALIZ

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSIX ) )

dbSelectArea( &quot;SIX&quot; )
SIX-&gt;( dbSetOrder( 1 ) )

For nI := 1 To Len( aSIX )

	lAlt    := .F.
	lDelInd := .F.

	If !SIX-&gt;( dbSeek( aSIX&#x5B;nI]&#x5B;1] + aSIX&#x5B;nI]&#x5B;2] ) )
		AutoGrLog( &quot;Indice criado &quot; + aSIX&#x5B;nI]&#x5B;1] + &quot;/&quot; + aSIX&#x5B;nI]&#x5B;2] + &quot; - &quot; + aSIX&#x5B;nI]&#x5B;3] )
	Else
		lAlt := .T.
		aAdd( aArqUpd, aSIX&#x5B;nI]&#x5B;1] )
		If !StrTran( Upper( AllTrim( CHAVE )       ), &quot; &quot;, &quot;&quot; ) == ;
		    StrTran( Upper( AllTrim( aSIX&#x5B;nI]&#x5B;3] ) ), &quot; &quot;, &quot;&quot; )
			AutoGrLog( &quot;Chave do indice alterado &quot; + aSIX&#x5B;nI]&#x5B;1] + &quot;/&quot; + aSIX&#x5B;nI]&#x5B;2] + &quot; - &quot; + aSIX&#x5B;nI]&#x5B;3] )
			lDelInd := .T. // Se for alteração precisa apagar o indice do banco
		EndIf
	EndIf

	RecLock( &quot;SIX&quot;, !lAlt )
	For nJ := 1 To Len( aSIX&#x5B;nI] )
		If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
			FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSIX&#x5B;nI]&#x5B;nJ] )
		EndIf
	Next nJ
	MsUnLock()

	dbCommit()

	If lDelInd
		TcInternal( 60, RetSqlName( aSIX&#x5B;nI]&#x5B;1] ) + &quot;|&quot; + RetSqlName( aSIX&#x5B;nI]&#x5B;1] ) + aSIX&#x5B;nI]&#x5B;2] )
	EndIf

	oProcess:IncRegua2( &quot;Atualizando índices...&quot; )

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SIX&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX6
Função de processamento da gravação do SX6 - Parâmetros

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX6()
Local aEstrut   := {}
Local aSX6      := {}
Local cAlias    := &quot;&quot;
Local lContinua := .T.
Local lReclock  := .T.
Local nI        := 0
Local nJ        := 0
Local nTamFil   := Len( SX6-&gt;X6_FIL )
Local nTamVar   := Len( SX6-&gt;X6_VAR )

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SX6&quot; + CRLF )

aEstrut := { &quot;X6_FIL&quot;    , &quot;X6_VAR&quot;    , &quot;X6_TIPO&quot;   , &quot;X6_DESCRIC&quot;, &quot;X6_DSCSPA&quot; , &quot;X6_DSCENG&quot; , &quot;X6_DESC1&quot;  , ;
             &quot;X6_DSCSPA1&quot;, &quot;X6_DSCENG1&quot;, &quot;X6_DESC2&quot;  , &quot;X6_DSCSPA2&quot;, &quot;X6_DSCENG2&quot;, &quot;X6_CONTEUD&quot;, &quot;X6_CONTSPA&quot;, ;
             &quot;X6_CONTENG&quot;, &quot;X6_PROPRI&quot; , &quot;X6_VALID&quot;  , &quot;X6_INIT&quot;   , &quot;X6_DEFPOR&quot; , &quot;X6_DEFSPA&quot; , &quot;X6_DEFENG&quot; , ;
             &quot;X6_PYME&quot;   }

aAdd( aSX6, { ;
	'  '																	, ; //X6_FIL
	'FS_GCTCOT'																, ; //X6_VAR
	'C'																		, ; //X6_TIPO
	'Tipo Contrato para cotacao'											, ; //X6_DESCRIC
	'Tipo Contrato para cotizacion'											, ; //X6_DSCSPA
	'Contract type for quotation'											, ; //X6_DSCENG
	''																		, ; //X6_DESC1
	''																		, ; //X6_DSCSPA1
	''																		, ; //X6_DSCENG1
	''																		, ; //X6_DESC2
	''																		, ; //X6_DSCSPA2
	''																		, ; //X6_DSCENG2
	'001'																	, ; //X6_CONTEUD
	'001'																	, ; //X6_CONTSPA
	'001'																	, ; //X6_CONTENG
	'S'																		, ; //X6_PROPRI
	''																		, ; //X6_VALID
	''																		, ; //X6_INIT
	'001'																	, ; //X6_DEFPOR
	'001'																	, ; //X6_DEFSPA
	'001'																	, ; //X6_DEFENG
	'S'																		} ) //X6_PYME

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSX6 ) )

dbSelectArea( &quot;SX6&quot; )
dbSetOrder( 1 )

For nI := 1 To Len( aSX6 )
	lContinua := .F.
	lReclock  := .F.

	If !SX6-&gt;( dbSeek( PadR( aSX6&#x5B;nI]&#x5B;1], nTamFil ) + PadR( aSX6&#x5B;nI]&#x5B;2], nTamVar ) ) )
		lContinua := .T.
		lReclock  := .T.
		AutoGrLog( &quot;Foi incluído o parâmetro &quot; + aSX6&#x5B;nI]&#x5B;1] + aSX6&#x5B;nI]&#x5B;2] + &quot; Conteúdo &#x5B;&quot; + AllTrim( aSX6&#x5B;nI]&#x5B;13] ) + &quot;]&quot; )
	Else
		lContinua := .T.
		lReclock  := .F.
		AutoGrLog( &quot;Foi alterado o parâmetro &quot; + aSX6&#x5B;nI]&#x5B;1] + aSX6&#x5B;nI]&#x5B;2] + &quot; de &#x5B;&quot; + ;
		AllTrim( SX6-&gt;X6_CONTEUD ) + &quot;]&quot; + &quot; para &#x5B;&quot; + AllTrim( aSX6&#x5B;nI]&#x5B;13] ) + &quot;]&quot; )
	EndIf

	If lContinua
		If !( aSX6&#x5B;nI]&#x5B;1] $ cAlias )
			cAlias += aSX6&#x5B;nI]&#x5B;1] + &quot;/&quot;
		EndIf

		RecLock( &quot;SX6&quot;, lReclock )
		For nJ := 1 To Len( aSX6&#x5B;nI] )
			If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
				FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX6&#x5B;nI]&#x5B;nJ] )
			EndIf
		Next nJ
		dbCommit()
		MsUnLock()
	EndIf

	oProcess:IncRegua2( &quot;Atualizando Arquivos (SX6)...&quot; )

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX6&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX7
Função de processamento da gravação do SX7 - Gatilhos

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX7()
Local aEstrut   := {}
Local aAreaSX3  := SX3-&gt;( GetArea() )
Local aSX7      := {}
Local cAlias    := &quot;&quot;
Local nI        := 0
Local nJ        := 0
Local nTamSeek  := Len( SX7-&gt;X7_CAMPO )

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SX7&quot; + CRLF )

aEstrut := { &quot;X7_CAMPO&quot;, &quot;X7_SEQUENC&quot;, &quot;X7_REGRA&quot;, &quot;X7_CDOMIN&quot;, &quot;X7_TIPO&quot;, &quot;X7_SEEK&quot;, ;
             &quot;X7_ALIAS&quot;, &quot;X7_ORDEM&quot;  , &quot;X7_CHAVE&quot;, &quot;X7_PROPRI&quot;, &quot;X7_CONDIC&quot; ,&quot;X7_LOCALIZ&quot;}

//
// Campo ZA2_AUTOR
//
aAdd( aSX7, { ;
	'ZA2_AUTOR'																, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZA0-&gt;ZA0_NOME'															, ; //X7_REGRA
	'ZA2_NOME'																, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZA0'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZA0&quot;)+M-&gt;ZA2_AUTOR'											, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

aAdd( aSX7, { ;
	'ZA2_AUTOR'																, ; //X7_CAMPO
	'002'																	, ; //X7_SEQUENC
	&quot;X3COMBO('ZA0_TIPO',ZA0-&gt;ZA0_TIPO)&quot;										, ; //X7_REGRA
	'ZA2_TIPO'																, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'N'																		, ; //X7_SEEK
	''																		, ; //X7_ALIAS
	0																		, ; //X7_ORDEM
	''																		, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZA4_MUSICA
//
aAdd( aSX7, { ;
	'ZA4_MUSICA'															, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZA1-&gt;ZA1_TITULO'														, ; //X7_REGRA
	'ZA4_TITULO'															, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZA1'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZA1&quot;)+M-&gt;ZA4_MUSICA'											, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZA5_INTER
//
aAdd( aSX7, { ;
	'ZA5_INTER'																, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZA0-&gt;ZA0_NOME'															, ; //X7_REGRA
	'ZA5_NOME'																, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZA0'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZA0&quot;)+M-&gt;ZA5_INTER'											, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZB5_CODTUR
//
aAdd( aSX7, { ;
	'ZB5_CODTUR'															, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZB1-&gt;ZB1_DESCRI'														, ; //X7_REGRA
	'ZB5_DESTUR'															, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZB1'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZB1&quot;)+M-&gt;ZB5_CODTUR'											, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZB6_RA
//
aAdd( aSX7, { ;
	'ZB6_RA'																, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZB2-&gt;ZB2_NOME'															, ; //X7_REGRA
	'ZB6_NOME'																, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZB2'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZB2&quot;)+M-&gt;ZB6_RA'												, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZB7_CODDIS
//
aAdd( aSX7, { ;
	'ZB7_CODDIS'															, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'ZB3-&gt;ZB3_DESCRI'														, ; //X7_REGRA
	'ZB7_DESDIS'															, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'S'																		, ; //X7_SEEK
	'ZB3'																	, ; //X7_ALIAS
	1																		, ; //X7_ORDEM
	'xFilial(&quot;ZB3&quot;)+M-&gt;ZB7_CODDIS'											, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ

//
// Campo ZC4_VALOR
//
aAdd( aSX7, { ;
	'ZC4_VALOR'																, ; //X7_CAMPO
	'001'																	, ; //X7_SEQUENC
	'M-&gt;( ZC4_QUANT * ZC4_VALOR )'											, ; //X7_REGRA
	'ZC4_TOTAL'																, ; //X7_CDOMIN
	'P'																		, ; //X7_TIPO
	'N'																		, ; //X7_SEEK
	''																		, ; //X7_ALIAS
	0																		, ; //X7_ORDEM
	''																		, ; //X7_CHAVE
	'U'																		, ; //X7_PROPRI
	''																		, ; //X7_CONDIC
	''																		} ) //X7_LOCALIZ



//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSX7 ) )

dbSelectArea( &quot;SX3&quot; )
dbSetOrder( 2 )

dbSelectArea( &quot;SX7&quot; )
dbSetOrder( 1 )

For nI := 1 To Len( aSX7 )

	If !SX7-&gt;( dbSeek( PadR( aSX7&#x5B;nI]&#x5B;1], nTamSeek ) + aSX7&#x5B;nI]&#x5B;2] ) )

		If !( aSX7&#x5B;nI]&#x5B;1] $ cAlias )
			cAlias += aSX7&#x5B;nI]&#x5B;1] + &quot;/&quot;
			AutoGrLog( &quot;Foi incluído o gatilho &quot; + aSX7&#x5B;nI]&#x5B;1] + &quot;/&quot; + aSX7&#x5B;nI]&#x5B;2] )
		EndIf

		RecLock( &quot;SX7&quot;, .T. )
	Else

		If !( aSX7&#x5B;nI]&#x5B;1] $ cAlias )
			cAlias += aSX7&#x5B;nI]&#x5B;1] + &quot;/&quot;
			AutoGrLog( &quot;Foi alterado o gatilho &quot; + aSX7&#x5B;nI]&#x5B;1] + &quot;/&quot; + aSX7&#x5B;nI]&#x5B;2] )
		EndIf

		RecLock( &quot;SX7&quot;, .F. )
	EndIf

	For nJ := 1 To Len( aSX7&#x5B;nI] )
		If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
			FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX7&#x5B;nI]&#x5B;nJ] )
		EndIf
	Next nJ

	dbCommit()
	MsUnLock()

	If SX3-&gt;( dbSeek( SX7-&gt;X7_CAMPO ) )
		RecLock( &quot;SX3&quot;, .F. )
		SX3-&gt;X3_TRIGGER := &quot;S&quot;
		MsUnLock()
	EndIf

	oProcess:IncRegua2( &quot;Atualizando Arquivos (SX7)...&quot; )

Next nI

RestArea( aAreaSX3 )

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX7&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSXB
Função de processamento da gravação do SXB - Consultas Padrao

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSXB()
Local aEstrut   := {}
Local aSXB      := {}
Local cAlias    := &quot;&quot;
Local nI        := 0
Local nJ        := 0

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SXB&quot; + CRLF )

aEstrut := { &quot;XB_ALIAS&quot;  , &quot;XB_TIPO&quot;   , &quot;XB_SEQ&quot;    , &quot;XB_COLUNA&quot; , &quot;XB_DESCRI&quot; , &quot;XB_DESCSPA&quot;, &quot;XB_DESCENG&quot;, ;
             &quot;XB_WCONTEM&quot;, &quot;XB_CONTEM&quot; , &quot;XB_LOCALIZ&quot;}


//
// Consulta ZRA - Despesa ou receita
//
aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'1'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'DB'																	, ; //XB_COLUNA
	'Despesa ou Receita  '															, ; //XB_DESCRI
	'Despesa ou Receita  '															, ; //XB_DESCSPA
	'Despesa ou Receita  '															, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA'																		, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'2'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'01'																	, ; //XB_COLUNA
	'Codigo'																, ; //XB_DESCRI
	'Codigo'																, ; //XB_DESCSPA
	'Codigo'																, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	''																		, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'3'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'01'																	, ; //XB_COLUNA
	'Incluir'																, ; //XB_DESCRI
	'Incluir'																, ; //XB_DESCSPA
	'Incluir'																, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'01'																		, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'4'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'01'																	, ; //XB_COLUNA
	'Codigo'																	, ; //XB_DESCRI
	'Codigo'																	, ; //XB_DESCSPA
	'Codigo'																	, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA_CODIGO'																		, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'4'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'02'																	, ; //XB_COLUNA
	'Descricao'																	, ; //XB_DESCRI
	'Descricao'																	, ; //XB_DESCSPA
	'Descricao'																	, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA_DESCRI'														, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ
aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'4'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	'03'																	, ; //XB_COLUNA
	'Tipo'																	, ; //XB_DESCRI
	'Tipo'																	, ; //XB_DESCSPA
	'Tipo'																	, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA_TIPO'														, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'5'																		, ; //XB_TIPO
	'01'																	, ; //XB_SEQ
	''																		, ; //XB_COLUNA
	''																		, ; //XB_DESCRI
	''																		, ; //XB_DESCSPA
	''																		, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA-&gt;ZRA_CODIGO'											, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

aAdd( aSXB, { ;
	'ZRA'																, ; //XB_ALIAS
	'5'																		, ; //XB_TIPO
	'02'																	, ; //XB_SEQ
	''																		, ; //XB_COLUNA
	''																		, ; //XB_DESCRI
	''																		, ; //XB_DESCSPA
	''																		, ; //XB_DESCENG
	''																		, ; //XB_WCONTEM
	'ZRA-&gt;ZRA_DESCRI'											, ; //XB_CONTEM
	''																	} ) //XB_LOCALIZ

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSXB ) )

dbSelectArea( &quot;SXB&quot; )
dbSetOrder( 1 )

For nI := 1 To Len( aSXB )

	If !Empty( aSXB&#x5B;nI]&#x5B;1] )

		If !SXB-&gt;( dbSeek( PadR( aSXB&#x5B;nI]&#x5B;1], Len( SXB-&gt;XB_ALIAS ) ) + aSXB&#x5B;nI]&#x5B;2] + aSXB&#x5B;nI]&#x5B;3] + aSXB&#x5B;nI]&#x5B;4] ) )

			If !( aSXB&#x5B;nI]&#x5B;1] $ cAlias )
				cAlias += aSXB&#x5B;nI]&#x5B;1] + &quot;/&quot;
				AutoGrLog( &quot;Foi incluída a consulta padrão &quot; + aSXB&#x5B;nI]&#x5B;1] )
			EndIf

			RecLock( &quot;SXB&quot;, .T. )

			For nJ := 1 To Len( aSXB&#x5B;nI] )
				If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
					FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSXB&#x5B;nI]&#x5B;nJ] )
				EndIf
			Next nJ

			dbCommit()
			MsUnLock()

		Else

			//
			// Verifica todos os campos
			//
			For nJ := 1 To Len( aSXB&#x5B;nI] )

				//
				// Se o campo estiver diferente da estrutura
				//
				If aEstrut&#x5B;nJ] == SXB-&gt;( FieldName( nJ ) ) .AND. ;
					!StrTran( AllToChar( SXB-&gt;( FieldGet( nJ ) ) ), &quot; &quot;, &quot;&quot; ) == ;
					 StrTran( AllToChar( aSXB&#x5B;nI]&#x5B;nJ]            ), &quot; &quot;, &quot;&quot; )

					RecLock( &quot;SXB&quot;, .F. )
					FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSXB&#x5B;nI]&#x5B;nJ] )
					dbCommit()
					MsUnLock()

					If !( aSXB&#x5B;nI]&#x5B;1] $ cAlias )
						cAlias += aSXB&#x5B;nI]&#x5B;1] + &quot;/&quot;
						AutoGrLog( &quot;Foi alterada a consulta padrão &quot; + aSXB&#x5B;nI]&#x5B;1] )
					EndIf

				EndIf

			Next

		EndIf

	EndIf

	oProcess:IncRegua2( &quot;Atualizando Consultas Padrões (SXB)...&quot; )

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SXB&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX9
Função de processamento da gravação do SX9 - Relacionamento

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX9()
Local aEstrut   := {}
Local aSX9      := {}
Local cAlias    := &quot;&quot;
Local nI        := 0
Local nJ        := 0
Local nTamSeek  := Len( SX9-&gt;X9_DOM )

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; SX9&quot; + CRLF )

aEstrut := { &quot;X9_DOM&quot;    , &quot;X9_IDENT&quot;  , &quot;X9_CDOM&quot;   , &quot;X9_EXPDOM&quot; , &quot;X9_EXPCDOM&quot;, &quot;X9_PROPRI&quot; , &quot;X9_LIGDOM&quot; , ;
             &quot;X9_LIGCDOM&quot;, &quot;X9_CONDSQL&quot;, &quot;X9_USEFIL&quot; , &quot;X9_VINFIL&quot; , &quot;X9_CHVFOR&quot; , &quot;X9_ENABLE&quot; ,&quot;X9_LOCALIZ&quot; }


//
// Domínio ZA0
//
aAdd( aSX9, { ;
	'ZA0'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZA2'																	, ; //X9_CDOM
	'ZA0_CODIGO'															, ; //X9_EXPDOM
	'ZA2_AUTOR'																, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																		, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

aAdd( aSX9, { ;
	'ZA0'																	, ; //X9_DOM
	'002'																	, ; //X9_IDENT
	'ZA5'																	, ; //X9_CDOM
	'ZA0_CODIGO'															, ; //X9_EXPDOM
	'ZA5_INTER'																, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																		, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

aAdd( aSX9, { ;
	'ZA0'																	, ; //X9_DOM
	'003'																	, ; //X9_IDENT
	'ZA6'																	, ; //X9_CDOM
	'ZA0_CODIGO'															, ; //X9_EXPDOM
	'ZA6_CODIGO'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'1'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																		, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZA1
//
aAdd( aSX9, { ;
	'ZA1'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZA2'																	, ; //X9_CDOM
	'ZA1_MUSICA'															, ; //X9_EXPDOM
	'ZA2_MUSICA'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

aAdd( aSX9, { ;
	'ZA1'																	, ; //X9_DOM
	'002'																	, ; //X9_IDENT
	'ZA4'																	, ; //X9_CDOM
	'ZA1_MUSICA'															, ; //X9_EXPDOM
	'ZA4_MUSICA'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZA3
//
aAdd( aSX9, { ;
	'ZA3'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZA4'																	, ; //X9_CDOM
	'ZA3_ALBUM'																, ; //X9_EXPDOM
	'ZA4_ALBUM'																, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZA4
//
aAdd( aSX9, { ;
	'ZA4'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZA5'																	, ; //X9_CDOM
	'ZA4_ALBUM+ZA4_MUSICA'													, ; //X9_EXPDOM
	'ZA5_ALBUM+ZA5_MUSICA'													, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																		, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZB1
//
aAdd( aSX9, { ;
	'ZB1'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZB5'																	, ; //X9_CDOM
	'ZB5_CODTUR'															, ; //X9_EXPDOM
	'ZB1_CODIGO'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZB2
//
aAdd( aSX9, { ;
	'ZB2'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZB6'																	, ; //X9_CDOM
	'ZB6_RA'																, ; //X9_EXPDOM
	'ZB2_RA'																, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZB3
//
aAdd( aSX9, { ;
	'ZB3'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZB7'																	, ; //X9_CDOM
	'ZB7_CODDIS'															, ; //X9_EXPDOM
	'ZB3_CODIGO'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZB5
//
aAdd( aSX9, { ;
	'ZB5'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZB6'																	, ; //X9_CDOM
	'ZB5_CODTUR'															, ; //X9_EXPDOM
	'ZB6_CODTUR'															, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Domínio ZB6
//
aAdd( aSX9, { ;
	'ZB6'																	, ; //X9_DOM
	'001'																	, ; //X9_IDENT
	'ZB7'																	, ; //X9_CDOM
	'ZB6_CODTUR+ZB6_RA'														, ; //X9_EXPDOM
	'ZB7_CODTUR+ZB7_RA'														, ; //X9_EXPCDOM
	'U'																		, ; //X9_PROPRI
	'1'																		, ; //X9_LIGDOM
	'N'																		, ; //X9_LIGCDOM
	''																		, ; //X9_CONDSQL
	'S'																		, ; //X9_USEFIL
	'S'																		, ; //X9_VINFIL
	'S'																		, ; //X9_CHVFOR
	'S'																	, ; //X9_ENABLE
	''																	} ) //X9_LOCALIZ

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSX9 ) )

dbSelectArea( &quot;SX9&quot; )
dbSetOrder( 2 )

For nI := 1 To Len( aSX9 )

	If !SX9-&gt;( dbSeek( PadR( aSX9&#x5B;nI]&#x5B;3], nTamSeek ) + PadR( aSX9&#x5B;nI]&#x5B;1], nTamSeek ) ) )

		If !( aSX9&#x5B;nI]&#x5B;1]+aSX9&#x5B;nI]&#x5B;3] $ cAlias )
			cAlias += aSX9&#x5B;nI]&#x5B;1]+aSX9&#x5B;nI]&#x5B;3] + &quot;/&quot;
		EndIf

		RecLock( &quot;SX9&quot;, .T. )
		For nJ := 1 To Len( aSX9&#x5B;nI] )
			If FieldPos( aEstrut&#x5B;nJ] ) &gt; 0
				FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX9&#x5B;nI]&#x5B;nJ] )
			EndIf
		Next nJ
		dbCommit()
		MsUnLock()

		AutoGrLog( &quot;Foi incluído o relacionamento &quot; + aSX9&#x5B;nI]&#x5B;1] + &quot;/&quot; + aSX9&#x5B;nI]&#x5B;3] )

		oProcess:IncRegua2( &quot;Atualizando Arquivos (SX9)...&quot; )

	EndIf

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX9&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuHlp
Função de processamento da gravação dos Helps de Campos

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuHlp()
Local aHlpPor   := {}
Local aHlpEng   := {}
Local aHlpSpa   := {}

AutoGrLog( &quot;Ínicio da Atualização&quot; + &quot; &quot; + &quot;Helps de Campos&quot; + CRLF )


oProcess:IncRegua2( &quot;Atualizando Helps de Campos ...&quot; )

//
// Helps Tabela ZA0
//
//
// Helps Tabela ZA1
//
//
// Helps Tabela ZA2
//
//
// Helps Tabela ZA3
//
//
// Helps Tabela ZA4
//
//
// Helps Tabela ZA5
//
//
// Helps Tabela ZA6
//
//
// Helps Tabela ZB1
//
//
// Helps Tabela ZB2
//
//
// Helps Tabela ZB3
//
//
// Helps Tabela ZB5
//
//
// Helps Tabela ZB6
//
//
// Helps Tabela ZB7
//
AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; &quot; + &quot;Helps de Campos&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return {}


//--------------------------------------------------------------------
/*/{Protheus.doc} EscEmpresa
Função genérica para escolha de Empresa, montada pelo SM0

@return aRet Vetor contendo as seleções feitas.
             Se não for marcada nenhuma o vetor volta vazio

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function EscEmpresa()

//---------------------------------------------
// Parâmetro  nTipo
// 1 - Monta com Todas Empresas/Filiais
// 2 - Monta só com Empresas
// 3 - Monta só com Filiais de uma Empresa
//
// Parâmetro  aMarcadas
// Vetor com Empresas/Filiais pré marcadas
//
// Parâmetro  cEmpSel
// Empresa que será usada para montar seleção
//---------------------------------------------
Local   aRet      := {}
Local   aSalvAmb  := GetArea()
Local   aSalvSM0  := {}
Local   aVetor    := {}
Local   cMascEmp  := &quot;??&quot;
Local   cVar      := &quot;&quot;
Local   lChk      := .F.
Local   lOk       := .F.
Local   lTeveMarc := .F.
Local   oNo       := LoadBitmap( GetResources(), &quot;LBNO&quot; )
Local   oOk       := LoadBitmap( GetResources(), &quot;LBOK&quot; )
Local   oDlg, oChkMar, oLbx, oMascEmp, oSay
Local   oButDMar, oButInv, oButMarc, oButOk, oButCanc
local _ni := 0

Local   aMarcadas := {}


If !MyOpenSm0(.F.)
	Return aRet
EndIf

dbSelectArea( &quot;SM0&quot; )
aSalvSM0 := SM0-&gt;( GetArea() )
dbSetOrder( 1 )
dbGoTop()
While !SM0-&gt;( EOF() )
	If aScan( aVetor, {|x| x&#x5B;2] == SM0-&gt;M0_CODIGO} ) == 0
		aAdd(  aVetor, { aScan( aMarcadas, {|x| x&#x5B;1] == SM0-&gt;M0_CODIGO .and. x&#x5B;2] == SM0-&gt;M0_CODFIL} ) &gt; 0, alltrim(SM0-&gt;M0_CODIGO), alltrim(SM0-&gt;M0_CODFIL), alltrim(SM0-&gt;M0_NOME), alltrim(SM0-&gt;M0_FILIAL) } )
	EndIf
	dbSkip()
End
RestArea( aSalvSM0 )


//TODO, remover ao corrigir o bloco abaixo
For _ni := 1 to len(aVetor)
	aVetor&#x5B;_ni,1] := .T. //marca todas empresas e filiais
Next
RetSelecao( @aRet, aVetor )

/*
Removido, list box vazio //TODO verificar

Define MSDialog  oDlg Title &quot;&quot; From 0, 0 To 280, 395 Pixel

oDlg:cToolTip := &quot;Tela para Múltiplas Seleções de Empresas/Filiais&quot;

oDlg:cTitle   := &quot;Selecione a(s) Empresa(s) para Atualização&quot;

//@ 10, 10 Listbox  oLbx Var  cVar Fields Header &quot; &quot;, &quot; &quot;, &quot;Empresa&quot; Size 178, 095 Of oDlg Pixel

oLbx := TwBrowse():New(10,10,178,095,,{&quot; &quot;, &quot; &quot;, &quot;Empresa&quot;},,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
	oLbx:SetArray( aVetor )
	oLbx:bLine := {|| {IIf( aVetor&#x5B;oLbx:nAt, 1], oOk, oNo ), ;
							aVetor&#x5B;oLbx:nAt, 2], ;
							aVetor&#x5B;oLbx:nAt, 4]}}
	oLbx:BlDblClick := { || aVetor&#x5B;oLbx:nAt, 1] := !aVetor&#x5B;oLbx:nAt, 1], VerTodos( aVetor, @lChk, oChkMar ), oChkMar:Refresh(), oLbx:Refresh()}
	//oLbx:cToolTip   :=  oDlg:cTitle
	//oLbx:lHScroll   := .F. // NoScroll

@ 112, 10 CheckBox oChkMar Var  lChk Prompt &quot;Todos&quot; Message &quot;Marca / Desmarca&quot;+ CRLF + &quot;Todos&quot; Size 40, 007 Pixel Of oDlg;
on Click MarcaTodos( lChk, @aVetor, oLbx )

// Marca/Desmarca por mascara
@ 113, 51 Say   oSay Prompt &quot;Empresa&quot; Size  40, 08 Of oDlg Pixel
@ 112, 80 MSGet oMascEmp Var  cMascEmp Size  05, 05 Pixel Picture &quot;@!&quot;  Valid (  cMascEmp := StrTran( cMascEmp, &quot; &quot;, &quot;?&quot; ), oMascEmp:Refresh(), .T. ) ;
Message &quot;Máscara Empresa ( ?? )&quot;  Of oDlg
oSay:cToolTip := oMascEmp:cToolTip

@ 128, 10 Button oButInv    Prompt &quot;&amp;Inverter&quot;  Size 32, 12 Pixel Action ( InvSelecao( @aVetor, oLbx, @lChk, oChkMar ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message &quot;Inverter Seleção&quot; Of oDlg
oButInv:SetCss( CSSBOTAO )
@ 128, 50 Button oButMarc   Prompt &quot;&amp;Marcar&quot;    Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .T. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message &quot;Marcar usando&quot; + CRLF + &quot;máscara ( ?? )&quot;    Of oDlg
oButMarc:SetCss( CSSBOTAO )
@ 128, 80 Button oButDMar   Prompt &quot;&amp;Desmarcar&quot; Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .F. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message &quot;Desmarcar usando&quot; + CRLF + &quot;máscara ( ?? )&quot; Of oDlg
oButDMar:SetCss( CSSBOTAO )
@ 112, 157  Button oButOk   Prompt &quot;Processar&quot;  Size 32, 12 Pixel Action (  RetSelecao( @aRet, aVetor ), oDlg:End()  ) ;
Message &quot;Confirma a seleção e efetua&quot; + CRLF + &quot;o processamento&quot; Of oDlg
oButOk:SetCss( CSSBOTAO )
@ 128, 157  Button oButCanc Prompt &quot;Cancelar&quot;   Size 32, 12 Pixel Action ( IIf( lTeveMarc, aRet :=  aMarcadas, .T. ), oDlg:End() ) ;
Message &quot;Cancela o processamento&quot; + CRLF + &quot;e abandona a aplicação&quot; Of oDlg
oButCanc:SetCss( CSSBOTAO )

Activate MSDialog  oDlg Center
*/
RestArea( aSalvAmb )
dbSelectArea( &quot;SM0&quot; )
dbCloseArea()

Return  aRet


//--------------------------------------------------------------------
/*/{Protheus.doc} MarcaTodos
Função auxiliar para marcar/desmarcar todos os ítens do ListBox ativo

@param lMarca  Contéudo para marca .T./.F.
@param aVetor  Vetor do ListBox
@param oLbx    Objeto do ListBox

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MarcaTodos( lMarca, aVetor, oLbx )
Local  nI := 0

For nI := 1 To Len( aVetor )
	aVetor&#x5B;nI]&#x5B;1] := lMarca
Next nI

oLbx:Refresh()

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} InvSelecao
Função auxiliar para inverter a seleção do ListBox ativo

@param aVetor  Vetor do ListBox
@param oLbx    Objeto do ListBox

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function InvSelecao( aVetor, oLbx )
Local  nI := 0

For nI := 1 To Len( aVetor )
	aVetor&#x5B;nI]&#x5B;1] := !aVetor&#x5B;nI]&#x5B;1]
Next nI

oLbx:Refresh()

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} RetSelecao
Função auxiliar que monta o retorno com as seleções

@param aRet    Array que terá o retorno das seleções (é alterado internamente)
@param aVetor  Vetor do ListBox

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function RetSelecao( aRet, aVetor )
Local  nI    := 0

aRet := {}
For nI := 1 To Len( aVetor )
	If aVetor&#x5B;nI]&#x5B;1]
		aAdd( aRet, { aVetor&#x5B;nI]&#x5B;2] , aVetor&#x5B;nI]&#x5B;3], aVetor&#x5B;nI]&#x5B;2] +  aVetor&#x5B;nI]&#x5B;3] } )
	EndIf
Next nI

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} MarcaMas
Função para marcar/desmarcar usando máscaras

@param oLbx     Objeto do ListBox
@param aVetor   Vetor do ListBox
@param cMascEmp Campo com a máscara (???)
@param lMarDes  Marca a ser atribuída .T./.F.

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MarcaMas( oLbx, aVetor, cMascEmp, lMarDes )
Local cPos1 := SubStr( cMascEmp, 1, 1 )
Local cPos2 := SubStr( cMascEmp, 2, 1 )
Local nPos  := oLbx:nAt
Local nZ    := 0

For nZ := 1 To Len( aVetor )
	If cPos1 == &quot;?&quot; .or. SubStr( aVetor&#x5B;nZ]&#x5B;2], 1, 1 ) == cPos1
		If cPos2 == &quot;?&quot; .or. SubStr( aVetor&#x5B;nZ]&#x5B;2], 2, 1 ) == cPos2
			aVetor&#x5B;nZ]&#x5B;1] := lMarDes
		EndIf
	EndIf
Next

oLbx:nAt := nPos
oLbx:Refresh()

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} VerTodos
Função auxiliar para verificar se estão todos marcados ou não

@param aVetor   Vetor do ListBox
@param lChk     Marca do CheckBox do marca todos (referncia)
@param oChkMar  Objeto de CheckBox do marca todos

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function VerTodos( aVetor, lChk, oChkMar )
Local lTTrue := .T.
Local nI     := 0

For nI := 1 To Len( aVetor )
	lTTrue := IIf( !aVetor&#x5B;nI]&#x5B;1], .F., lTTrue )
Next nI

lChk := IIf( lTTrue, .T., .F. )
oChkMar:Refresh()

Return NIL


//--------------------------------------------------------------------
/*/{Protheus.doc} MyOpenSM0
Função de processamento abertura do SM0 modo exclusivo

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function MyOpenSM0(lShared)

Local lOpen := .F.
Local nLoop := 0

For nLoop := 1 To 20
	If MPDicInDB()
		If lShared
			OpenSm0(,.T.)
		Else
			OpenSM0Excl(,.F.)
		EndIf

		If !Empty( Select( 'SM0' ) )
			lOpen := .T.
			Exit
		EndIF
	Else
		dbUseArea( .T., , &quot;SIGAMAT.EMP&quot;, &quot;SM0&quot;, lShared, .F. )
		If !Empty( Select( &quot;SM0&quot; ) )
			lOpen := .T.
			dbSetIndex( &quot;SIGAMAT.IND&quot; )
			Exit
		EndIf
	EndIf

	Sleep( 500 )

Next nLoop

If !lOpen
	MsgStop( &quot;Não foi possível a abertura da tabela &quot; + ;
	IIf( lShared, &quot;de empresas (SM0).&quot;, &quot;de empresas (SM0) de forma exclusiva.&quot; ), &quot;ATENÇÃO&quot; )
EndIf

Return lOpen

//--------------------------------------------------------------------
/*/{Protheus.doc} LeLog
Função de leitura do LOG gerado com limitacao de string

@version 1.0
/*/
//--------------------------------------------------------------------
Static Function LeLog()
Local cRet  := &quot;&quot;
Local cFile := NomeAutoLog()
Local cAux  := &quot;&quot;

FT_FUSE( cFile )
FT_FGOTOP()

While !FT_FEOF()

	cAux := FT_FREADLN()

	If Len( cRet ) + Len( cAux ) &lt; 1048000 cRet += cAux + CRLF Else cRet += CRLF cRet += Replicate( &quot;=&quot; , 128 ) + CRLF cRet += &quot;Tamanho de exibição maxima do LOG alcançado.&quot; + CRLF cRet += &quot;LOG Completo no arquivo &quot; + cFile + CRLF cRet += Replicate( &quot;=&quot; , 128 ) + CRLF Exit EndIf FT_FSKIP() End FT_FUSE() Return cRet ///////////////////////////////////////////////////////////////////////////// Static Function FsX3Info(cCampo,nTipo) Local cRet := &quot;&quot; Local aArea := SX3-&gt;(GetArea())

SX3-&gt;( dbSetOrder( 2 ) )
If SX3-&gt;( dbSeek(cCampo) )
	If nTipo == 1
		cRet := SX3-&gt;X3_USADO
	Else
		cRet := SX3-&gt;X3_RESERV
	EndIf
EndIf

RestArea(aArea)
Return cRet

//--------------------------------------------------------------------
/*/{Protheus.doc} FSAtuSX1
Função de processamento da gravação do SX1 - Perguntas
@version 1.0
/*/
//--------------------------------------------------------------------
Static Function FSAtuSX1()
Local aEstrut   := {}
Local aSX1      := {}
Local aStruDic  := SX1-&gt;( dbStruct() )
Local cAlias    := &quot;&quot;
Local nI        := 0
Local nJ        := 0
Local nTam1     := Len( SX1-&gt;X1_GRUPO )
Local nTam2     := Len( SX1-&gt;X1_ORDEM )

AutoGrLog( &quot;Ínicio da Atualização &quot; + cAlias + CRLF )

aEstrut := { &quot;X1_GRUPO&quot;  , &quot;X1_ORDEM&quot;  , &quot;X1_PERGUNT&quot;, &quot;X1_PERSPA&quot; , &quot;X1_PERENG&quot; , &quot;X1_VARIAVL&quot;, &quot;X1_TIPO&quot;   , ;
             &quot;X1_TAMANHO&quot;, &quot;X1_DECIMAL&quot;, &quot;X1_PRESEL&quot; , &quot;X1_GSC&quot;    , &quot;X1_VALID&quot;  , &quot;X1_VAR01&quot;  , &quot;X1_DEF01&quot;  , ;
             &quot;X1_DEFSPA1&quot;, &quot;X1_DEFENG1&quot;, &quot;X1_CNT01&quot;  , &quot;X1_VAR02&quot;  , &quot;X1_DEF02&quot;  , &quot;X1_DEFSPA2&quot;, &quot;X1_DEFENG2&quot;, ;
             &quot;X1_CNT02&quot;  , &quot;X1_VAR03&quot;  , &quot;X1_DEF03&quot;  , &quot;X1_DEFSPA3&quot;, &quot;X1_DEFENG3&quot;, &quot;X1_CNT03&quot;  , &quot;X1_VAR04&quot;  , ;
             &quot;X1_DEF04&quot;  , &quot;X1_DEFSPA4&quot;, &quot;X1_DEFENG4&quot;, &quot;X1_CNT04&quot;  , &quot;X1_VAR05&quot;  , &quot;X1_DEF05&quot;  , &quot;X1_DEFSPA5&quot;, ;
             &quot;X1_DEFENG5&quot;, &quot;X1_CNT05&quot;  , &quot;X1_F3&quot;     , &quot;X1_PYME&quot;   , &quot;X1_GRPSXG&quot; , &quot;X1_HELP&quot;   , &quot;X1_PICTURE&quot;, ;
             &quot;X1_IDFIL&quot;  }

//
// Perguntas MLOM002
//

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'01'																	, ; //X1_ORDEM
	'Data Calculo'															, ; //X1_PERGUNT
	'Data Calculo'															, ; //X1_PERSPA
	'Data Calculo'															, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'D'																		, ; //X1_TIPO
	8																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	0																		, ; //X1_PRESEL
	'G'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR01'																, ; //X1_VAR01
	''																		, ; //X1_DEF01
	''																		, ; //X1_DEFSPA1
	''																		, ; //X1_DEFENG1
	'20170317'																, ; //X1_CNT01
	''																		, ; //X1_VAR02
	''																		, ; //X1_DEF02
	''																		, ; //X1_DEFSPA2
	''																		, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	''																		, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'02'																	, ; //X1_ORDEM
	'Ativo De'																, ; //X1_PERGUNT
	'Ativo De'																, ; //X1_PERSPA
	'Ativo De'																, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'C'																		, ; //X1_TIPO
	15																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	0																		, ; //X1_PRESEL
	'G'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR02'																, ; //X1_VAR01
	''																		, ; //X1_DEF01
	''																		, ; //X1_DEFSPA1
	''																		, ; //X1_DEFENG1
	''																		, ; //X1_CNT01
	''																		, ; //X1_VAR02
	''																		, ; //X1_DEF02
	''																		, ; //X1_DEFSPA2
	''																		, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	''																		, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'03'																	, ; //X1_ORDEM
	'Ativo Até'																, ; //X1_PERGUNT
	'Ativo Até'																, ; //X1_PERSPA
	'Ativo Até'																, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'C'																		, ; //X1_TIPO
	15																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	0																		, ; //X1_PRESEL
	'G'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR03'																, ; //X1_VAR01
	''																		, ; //X1_DEF01
	''																		, ; //X1_DEFSPA1
	''																		, ; //X1_DEFENG1
	'ZZZZZZZZZZZZZZZ'														, ; //X1_CNT01
	''																		, ; //X1_VAR02
	''																		, ; //X1_DEF02
	''																		, ; //X1_DEFSPA2
	''																		, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	''																		, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'04'																	, ; //X1_ORDEM
	'Mostra CTB'															, ; //X1_PERGUNT
	'Mostra CTB'															, ; //X1_PERSPA
	'Mostra CTB'															, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'N'																		, ; //X1_TIPO
	1																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	1																		, ; //X1_PRESEL
	'C'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR04'																, ; //X1_VAR01
	'Sim'																	, ; //X1_DEF01
	'Sim'																	, ; //X1_DEFSPA1
	'Sim'																	, ; //X1_DEFENG1
	''																		, ; //X1_CNT01
	''																		, ; //X1_VAR02
	'Não'																	, ; //X1_DEF02
	'Não'																	, ; //X1_DEFSPA2
	'Não'																	, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	''																		, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'05'																	, ; //X1_ORDEM
	'Aglutina'																, ; //X1_PERGUNT
	'Aglutina'																, ; //X1_PERSPA
	'Aglutina'																, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'N'																		, ; //X1_TIPO
	1																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	1																		, ; //X1_PRESEL
	'C'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR05'																, ; //X1_VAR01
	'Sim'																	, ; //X1_DEF01
	'Sim'																	, ; //X1_DEFSPA1
	'Sim'																	, ; //X1_DEFENG1
	''																		, ; //X1_CNT01
	''																		, ; //X1_VAR02
	'Não'																	, ; //X1_DEF02
	'Não'																	, ; //X1_DEFSPA2
	'Não'																	, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	''																		, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'06'																	, ; //X1_ORDEM
	'Filial De?'															, ; //X1_PERGUNT
	'Filial De?'															, ; //X1_PERSPA
	'Filial De?'															, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'C'																		, ; //X1_TIPO
	12																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	0																		, ; //X1_PRESEL
	'G'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR06'																, ; //X1_VAR01
	''																		, ; //X1_DEF01
	''																		, ; //X1_DEFSPA1
	''																		, ; //X1_DEFENG1
	''																		, ; //X1_CNT01
	''																		, ; //X1_VAR02
	''																		, ; //X1_DEF02
	''																		, ; //X1_DEFSPA2
	''																		, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	'SM0'																	, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL

aAdd( aSX1, { ;
	'MLOM002'																, ; //X1_GRUPO
	'07'																	, ; //X1_ORDEM
	'Filial Até?'															, ; //X1_PERGUNT
	'Filial Até?'															, ; //X1_PERSPA
	'Filial Até?'															, ; //X1_PERENG
	'MV_CH0'																, ; //X1_VARIAVL
	'C'																		, ; //X1_TIPO
	12																		, ; //X1_TAMANHO
	0																		, ; //X1_DECIMAL
	0																		, ; //X1_PRESEL
	'G'																		, ; //X1_GSC
	''																		, ; //X1_VALID
	'MV_PAR07'																, ; //X1_VAR01
	''																		, ; //X1_DEF01
	''																		, ; //X1_DEFSPA1
	''																		, ; //X1_DEFENG1
	'ZZZZZZZZZZZZ'															, ; //X1_CNT01
	''																		, ; //X1_VAR02
	''																		, ; //X1_DEF02
	''																		, ; //X1_DEFSPA2
	''																		, ; //X1_DEFENG2
	''																		, ; //X1_CNT02
	''																		, ; //X1_VAR03
	''																		, ; //X1_DEF03
	''																		, ; //X1_DEFSPA3
	''																		, ; //X1_DEFENG3
	''																		, ; //X1_CNT03
	''																		, ; //X1_VAR04
	''																		, ; //X1_DEF04
	''																		, ; //X1_DEFSPA4
	''																		, ; //X1_DEFENG4
	''																		, ; //X1_CNT04
	''																		, ; //X1_VAR05
	''																		, ; //X1_DEF05
	''																		, ; //X1_DEFSPA5
	''																		, ; //X1_DEFENG5
	''																		, ; //X1_CNT05
	'SM0'																	, ; //X1_F3
	''																		, ; //X1_PYME
	''																		, ; //X1_GRPSXG
	''																		, ; //X1_HELP
	''																		, ; //X1_PICTURE
	''																		} ) //X1_IDFIL


//
// Atualizando dicionário
//

nPosPerg:= aScan( aEstrut, &quot;X1_GRUPO&quot;   )
nPosOrd := aScan( aEstrut, &quot;X1_ORDEM&quot;   )
nPosTam := aScan( aEstrut, &quot;X1_TAMANHO&quot; )
nPosSXG := aScan( aEstrut, &quot;X1_GRPSXG&quot;  )

oProcess:SetRegua2( Len( aSX1 ) )

dbSelectArea( &quot;SX1&quot; )
SX1-&gt;( dbSetOrder( 1 ) )

For nI := 1 To Len( aSX1 )

	//
	// Verifica se o campo faz parte de um grupo e ajusta tamanho
	//
	If !Empty( aSX1&#x5B;nI]&#x5B;nPosSXG]  )
		SXG-&gt;( dbSetOrder( 1 ) )
		If SXG-&gt;( MSSeek( aSX1&#x5B;nI]&#x5B;nPosSXG] ) )
			If aSX1&#x5B;nI]&#x5B;nPosTam] &lt;&gt; SXG-&gt;XG_SIZE
				aSX1&#x5B;nI]&#x5B;nPosTam] := SXG-&gt;XG_SIZE
				AutoGrLog( &quot;O tamanho da pergunta &quot; + aSX1&#x5B;nI]&#x5B;nPosPerg] + &quot; / &quot; + aSX1&#x5B;nI]&#x5B;nPosOrd] + &quot; NÃO atualizado e foi mantido em &#x5B;&quot; + ;
				AllTrim( Str( SXG-&gt;XG_SIZE ) ) + &quot;]&quot; + CRLF + ;
				&quot;   por pertencer ao grupo de campos &#x5B;&quot; + SXG-&gt;XG_GRUPO + &quot;]&quot; + CRLF )
			EndIf
		EndIf
	EndIf

	oProcess:IncRegua2( &quot;Atualizando perguntas...&quot; )

	If !SX1-&gt;( dbSeek( PadR( aSX1&#x5B;nI]&#x5B;nPosPerg], nTam1 ) + PadR( aSX1&#x5B;nI]&#x5B;nPosOrd], nTam2 ) ) )
		AutoGrLog( &quot;Pergunta Criada. Grupo/Ordem &quot; + aSX1&#x5B;nI]&#x5B;nPosPerg] + &quot;/&quot; + aSX1&#x5B;nI]&#x5B;nPosOrd] )
		RecLock( &quot;SX1&quot;, .T. )
	Else
		AutoGrLog( &quot;Pergunta Alterada. Grupo/Ordem &quot; + aSX1&#x5B;nI]&#x5B;nPosPerg] + &quot;/&quot; + aSX1&#x5B;nI]&#x5B;nPosOrd] )
		RecLock( &quot;SX1&quot;, .F. )
	EndIf

	For nJ := 1 To Len( aSX1&#x5B;nI] )
		If aScan( aStruDic, { |aX| PadR( aX&#x5B;1], 10 ) == PadR( aEstrut&#x5B;nJ], 10 ) } ) &gt; 0
			SX1-&gt;( FieldPut( FieldPos( aEstrut&#x5B;nJ] ), aSX1&#x5B;nI]&#x5B;nJ] ) )
		EndIf
	Next nJ

	MsUnLock()

Next nI

AutoGrLog( CRLF + &quot;Final da Atualização&quot; + &quot; SX1&quot; + CRLF + Replicate( &quot;-&quot;, 128 ) + CRLF )

Return NIL


</pre>
<p><strong><em>Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.</em></strong></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>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>O post <a href="https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/">ADVPL em MVC –  Criando seu próprio update</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/advpl-em-mvc-criando-seu-proprio-update/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ADVPL em MVC &#8211; Introdução MVC</title>
		<link>https://sempreju.com.br/advpl-em-mvc-introducao-mvc/</link>
					<comments>https://sempreju.com.br/advpl-em-mvc-introducao-mvc/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Fri, 03 Apr 2020 17:30:58 +0000</pubDate>
				<category><![CDATA[ADVPL - MVC]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=608</guid>

					<description><![CDATA[<p>Post Anteriores: Escopo do projeto aqui. &#160; O que é o MVC Framework? A estrutura Model-View-Controller (MVC) é um padrão arquitetural que separa um aplicativo em três componentes lógicos principais Model, View e Controller. Daí a abreviação MVC. Cada componente da arquitetura é criado para lidar com aspectos específicos do desenvolvimento<a class="moretag" href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">ADVPL em MVC &#8211; Introdução MVC</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Post Anteriores:</p>
<p>Escopo do projeto <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">aqui</a>.</p>
<p>&nbsp;</p>
<h2><span>O que é o MVC Framework?</span></h2>
<p><span>A estrutura </span><strong><span>Model-View-Controller (MVC)</span></strong><span> é um padrão arquitetural que separa um aplicativo em três componentes lógicos principais Model, View e Controller. Daí a abreviação MVC. Cada componente da arquitetura é criado para lidar com aspectos específicos do desenvolvimento de um aplicativo. O MVC separa a lógica de negócios e a camada de apresentação uma da outra. Tradicionalmente, era usado para interfaces gráficas de usuário (GUIs) da área de trabalho. Atualmente, a arquitetura MVC se tornou popular para projetar aplicativos da Web e software.</span></p>
<p><span>Os componentes são:</span></p>
<ul>
<li><span>Modelo: inclui todos os dados e sua lógica relacionada</span></li>
<li><span>View: apresentar dados ao usuário ou manipular a interação do usuário</span></li>
<li><span>Controller: Uma interface entre os componentes Model e View</span></li>
</ul>
<p><span>Vamos nos ver esse componente em detalhes:</span></p>
<h3><span>View</span></h3>
<p><span>Uma Visualização é a parte do aplicativo que representa a apresentação dos dados.</span></p>
<p><span>As views são criadas pelos dados coletados dos dados do modelo. Uma visualização solicita que o modelo forneça informações para que ele reenvie a apresentação de saída para o usuário.</span></p>
<p>&nbsp;</p>
<h3><span>Controller</span></h3>
<p><span>O Controller é a parte do aplicativo que lida com a interação do usuário. O controlador interpreta as entradas do mouse e teclado do usuário, informando o modelo e a visualização para alterar conforme apropriado.</span></p>
<p><span>Os comandos de um controlador enviam ao modelo para atualizar seu estado (por exemplo, salvando uma rotina específico). O controlador também envia comandos para a visualização associada para alterar a apresentação da visualização (por exemplo, rolando um documento específico).</span></p>
<p>&nbsp;</p>
<h3><span>Modelo</span></h3>
<p><span>O componente do modelo armazena dados e sua lógica relacionada. Representa os dados que estão sendo transferidos entre os componentes do controlador ou qualquer outra lógica de negócios relacionada. Por exemplo, um objeto Controller recuperará as informações do cliente do banco de dados. Ele manipula os dados e envia de volta ao banco de dados ou utiliza-os para renderizar os mesmos dados.</span></p>
<p>&nbsp;</p>
<h2><span>Exemplos MVC</span></h2>
<p><span>Vamos ver o Model, View e Controller da vida cotidiana para fixar o entendimento:</span></p>
<h5><span>Exemplo 1:</span></h5>
<p><img decoding="async" src="https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-1-300x177.png" alt="MVC ADVPL" width="300" height="177" class="aligncenter wp-image-609 size-medium" srcset="https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-1-300x177.png 300w, https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-1.png 479w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<ul>
<li><span>Vamos supor que você vá a um restaurante. Você não vai à cozinha e prepara a comida que certamente pode fazer em sua casa. Em vez disso, basta ir até lá e esperar o garçom chegar.</span></li>
<li><span>Agora o garçom chega até você e você pede a comida. O garçom não sabe quem você é e o que deseja, apenas anotou os detalhes do seu pedido de comida.</span></li>
<li><span>Então, o garçom se move para a cozinha. No garçom da cozinha, não prepare sua comida.</span></li>
<li><span>O cozinheiro prepara sua comida. O garçom transmite seu pedido junto com o número da sua mesa.</span></li>
<li><span>O cozinheiro usa ingredientes para cozinhar a comida. Vamos supor que você pediu um sanduíche de vegetais. Então ele precisa de pão, tomate, batata, pimento, cebola, pouco, queijo, etc., que ele obtém da geladeira</span></li>
<li><span>O cozinheiro finaliza sua comida e entrega para o garçon. Agora é tarefa do garçom mover essa comida para fora da cozinha.</span></li>
<li><span>Agora o garçom sabe qual comida você pediu e como é servida.</span></li>
</ul>
<p>&nbsp;</p>
<h5><span>Exemplo 2:</span></h5>
<p><img decoding="async" src="https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-2-300x169.png" alt="ADVPL MVC" width="300" height="169" class="aligncenter wp-image-610 size-medium" srcset="https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-2-300x169.png 300w, https://sempreju.com.br/wp-content/uploads/2020/04/mvc_advpl_exemplo-2.png 602w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>&nbsp;</p>
<p><span>Mecanismo de direção de carro é outro exemplo do modelo MVC do nosso cotidiano.</span></p>
<ul>
<li><span>Cada carro consiste em três partes principais.</span></li>
<li><span>View = Interface do usuário: (alavanca de câmbio, painéis, volante, freio, etc.)</span></li>
<li><span>Mecanismo do Controller(Motor)</span></li>
<li><span>Model &#8211; Armazenamento (tanque de Gasolina ou Descarte)</span></li>
</ul>
<p><span>Os carros quando ligados consomem combustível do armazenamento, mas são executados apenas usando os dispositivos de interface do usuário mencionados.</span></p>
<p>&nbsp;</p>
<p>Documentação oficial disponível <a href="https://tdn.totvs.com/display/public/PROT/AdvPl+utilizando+MVC">aqui</a>.</p>
<p>&nbsp;</p>
<p><strong><em>Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.</em></strong></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>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>O post <a href="https://sempreju.com.br/advpl-em-mvc-introducao-mvc/">ADVPL em MVC &#8211; Introdução MVC</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/advpl-em-mvc-introducao-mvc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ADVPL em MVC &#8211; Escopo Projeto</title>
		<link>https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/</link>
					<comments>https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/#respond</comments>
		
		<dc:creator><![CDATA[Rafael Gonçalves]]></dc:creator>
		<pubDate>Wed, 01 Apr 2020 17:48:51 +0000</pubDate>
				<category><![CDATA[ADVPL - MVC]]></category>
		<guid isPermaLink="false">https://sempreju.com.br/?p=603</guid>

					<description><![CDATA[<p>Iniciaremos hoje uma série demonstrando o como utilizar o MVC no nosso dia a dia, inicialmente pode ser um pouco chato, mas logo ficará claro as vantagens e beneficios. &#160; Nessa série vamos montar um pequeno gerenciador financeiro, onde vamos registrar Receita ou despesa em uma determinada data. Para isso<a class="moretag" href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/"> Leia mais&#8230;</a></p>
<p>O post <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">ADVPL em MVC &#8211; Escopo Projeto</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Iniciaremos hoje uma série demonstrando o como utilizar o MVC no nosso dia a dia, inicialmente pode ser um pouco chato, mas logo ficará claro as vantagens e beneficios.</p>
<p>&nbsp;</p>
<p>Nessa série vamos montar um pequeno gerenciador financeiro, onde vamos registrar Receita ou despesa em uma determinada data.</p>
<p>Para isso vamos criar algumas novas tabelas, aqui utilizaremos: ZRA, ZRB, ZRC e ZRD (caso eluirmos mais o projetos novas tabelas pode ser necessárias), um desenho simples de nossas tabelas e relacionamentos poder ser vizualizados em:</p>
<p><a href="https://dbdiagram.io">dbdiagram.io</a>, usando o código abaixo:</p>
<pre class="brush: sql; light: false; title: ; toolbar: true; notranslate">

// Creating tables
Table ZRA_DESRES as ZRA {
  CODIGO char &#x5B;pk, increment] // auto-increment
  FILIAL varchar
  DESCRI varchar
  TIPO char
}

// Creating tables
Table ZRB_GRP as ZRB {
  CODIGO varchar &#x5B;pk, increment] // auto-increment
  DESCRI varchar
}

// Creating tables
Table ZRC_ITEMGRP as ZRC {
  COD_ZRB varchar &#x5B;pk, increment] // auto-increment
  COD_ZRA varchar
  DESCRI varchar
}


Table ZRD_MOVIM as ZRD {
  CODIGO varchar &#x5B;pk]
  COD_ZRA varchar
  DATA int
  VALOR varchar
 }



// Creating references
// You can also define relaionship separately
// &gt; many-to-one; &lt; one-to-many; - one-to-one
Ref: ZRB.CODIGO &lt; ZRC.COD_ZRB
Ref: ZRC.COD_ZRA &lt; ZRA.CODIGO
Ref: ZRD.COD_ZRA &lt; ZRA.CODIGO
</pre>
<p>Com esse código teremos a modelagem que vamos utilizar na nossa série.</p>
<p>&nbsp;</p>
<p><strong><em>Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.</em></strong></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>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>O post <a href="https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/">ADVPL em MVC &#8211; Escopo Projeto</a> apareceu primeiro em <a href="https://sempreju.com.br">Sem Preju</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sempreju.com.br/prenda-a-utilizar-o-padrao-mvc-em-seus-projetos-advpl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
