Post Anteriores:

Escopo do projeto aqui.

Introdução ao MVC aqui.

 

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 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.

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.

É 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.

sempreju_advpl_protheus

Sequindo os passos da rotina as tabelas serão criadas, lembre-se, deve executar sempre em modo exclusivo!

 

Abaixo o código utilizado.

#INCLUDE "PROTHEUS.CH"
#DEFINE SIMPLES Char( 39 )
#DEFINE DUPLAS  Char( 34 )
#DEFINE CSSBOTAO	"QPushButton { color: #024670; "+;
"    border-image: url(rpo:fwstd_btn_nml.png) 3 3 3 3 stretch; "+;
"    border-top-width: 3px; "+;
"    border-left-width: 3px; "+;
"    border-right-width: 3px; "+;
"    border-bottom-width: 3px }"+;
"QPushButton:pressed {	color: #FFFFFF; "+;
"    border-image: url(rpo:fwstd_btn_prd.png) 3 3 3 3 stretch; "+;
"    border-top-width: 3px; "+;
"    border-left-width: 3px; "+;
"    border-right-width: 3px; "+;
"    border-bottom-width: 3px }"
/*
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   := "ATUALIZAÇÃO DE DICIONARIO"
Local   cDesc1    := "Esta rotina tem como função"
Local   cDesc2    := "Este processo deve ser executado em modo EXCLUSIVO, ou seja não podem haver outros"
Local   cDesc3    := "usuários  ou  jobs utilizando  o sistema.  É EXTREMAMENTE recomendavél  que  se  faça um"
Local   cDesc4    := "BACKUP  dos DICIONÁRIOS  e da  BASE DE DADOS antes desta atualização, para que caso "
Local   cDesc5    := "ocorram eventuais falhas, esse backup possa ser restaurado."
Local   cDesc6    := ""
Local   cDesc7    := ""
Local   lOk       := .F.
Local   lAuto     := ( cEmpAmb <> NIL .or. cFilAmb <> NIL )
Private oMainWnd  := NIL
Private oProcess  := NIL
#IFDEF TOP
TCInternal( 5, "*OFF" ) // 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, "" }}
Else
aMarcadas := EscEmpresa()
EndIf
//Aadd(aMarcadas,{"99","01"," "})
If !Empty( aMarcadas )
If lAuto .OR. MsgNoYes( "Confirma a atualização dos dicionários ?", cTitulo )
oProcess := MsNewProcess():New( { | lEnd | lOk := FSTProc( @lEnd, aMarcadas, lAuto ) }, "Atualizando", "Aguarde, atualizando ...", .F. )
oProcess:Activate()
If lAuto
If lOk
MsgStop( "Atualização Realizada.", "UPDFST" )
Else
MsgStop( "Atualização não Realizada.", "UPDFST" )
EndIf
dbCloseAll()
Else
If lOk
Final( "Atualização Concluída." )
Else
Final( "Atualização não Realizada." )
EndIf
EndIf
Else
MsgStop( "Atualização não Realizada.", "UPDFST" )
EndIf
Else
MsgStop( "Atualização não Realizada.", "UPDFST" )
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      := ""
Local   cFile     := ""
Local   cFileLog  := ""
Local   cMask     := "Arquivos Texto" + "(*.TXT)|*.txt|"
Local   cTCBuild  := "TCGetBuild"
Local   cTexto    := ""
Local   cTopBuild := ""
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( "SM0" )
dbGoTop()
While !SM0->( EOF() )
// Só adiciona no aRecnoSM0 se a empresa for diferente
If aScan( aRecnoSM0, { |x| x[2] == SM0->M0_CODIGO } ) == 0 ;
.AND. aScan( aMarcadas, { |x| x[1] == SM0->M0_CODIGO } ) > 0
aAdd( aRecnoSM0, { Recno(), SM0->M0_CODIGO } )
EndIf
SM0->( dbSkip() )
End
SM0->( dbCloseArea() )
If lOpen
For nI := 1 To Len( aRecnoSM0 )
If !( lOpen := MyOpenSm0(.F.) )
MsgStop( "Atualização da empresa " + aRecnoSM0[nI][2] + " não efetuada." )
Exit
EndIf
SM0->( dbGoTo( aRecnoSM0[nI][1] ) )
RpcSetType( 3 )
RpcSetEnv( SM0->M0_CODIGO, SM0->M0_CODFIL )
lMsFinalAuto := .F.
lMsHelpAuto  := .F.
AutoGrLog( Replicate( "-", 128 ) )
AutoGrLog( Replicate( " ", 128 ) )
AutoGrLog( "LOG DA ATUALIZAÇÃO DOS DICIONÁRIOS" )
AutoGrLog( Replicate( " ", 128 ) )
AutoGrLog( Replicate( "-", 128 ) )
AutoGrLog( " " )
AutoGrLog( " Dados Ambiente" )
AutoGrLog( " --------------------" )
AutoGrLog( " Empresa / Filial...: " + cEmpAnt + "/" + cFilAnt )
AutoGrLog( " Nome Empresa.......: " + Capital( AllTrim( GetAdvFVal( "SM0", "M0_NOMECOM", cEmpAnt + cFilAnt, 1, "" ) ) ) )
AutoGrLog( " Nome Filial........: " + Capital( AllTrim( GetAdvFVal( "SM0", "M0_FILIAL" , cEmpAnt + cFilAnt, 1, "" ) ) ) )
AutoGrLog( " DataBase...........: " + DtoC( dDataBase ) )
AutoGrLog( " Data / Hora Ínicio.: " + DtoC( Date() )  + " / " + Time() )
AutoGrLog( " Environment........: " + GetEnvServer()  )
AutoGrLog( " StartPath..........: " + GetSrvProfString( "StartPath", "" ) )
AutoGrLog( " RootPath...........: " + GetSrvProfString( "RootPath" , "" ) )
AutoGrLog( " Versão.............: " + GetVersao(.T.) )
AutoGrLog( " Usuário TOTVS .....: " + __cUserId + " " +  cUserName )
AutoGrLog( " Computer Name......: " + GetComputerName() )
aInfo   := GetUserInfo()
If ( nPos    := aScan( aInfo,{ |x,y| x[3] == ThreadId() } ) ) > 0
AutoGrLog( " " )
AutoGrLog( " Dados Thread" )
AutoGrLog( " --------------------" )
AutoGrLog( " Usuário da Rede....: " + aInfo[nPos][1] )
AutoGrLog( " Estação............: " + aInfo[nPos][2] )
AutoGrLog( " Programa Inicial...: " + aInfo[nPos][5] )
AutoGrLog( " Environment........: " + aInfo[nPos][6] )
AutoGrLog( " Conexão............: " + AllTrim( StrTran( StrTran( aInfo[nPos][7], Chr( 13 ), "" ), Chr( 10 ), "" ) ) )
EndIf
AutoGrLog( Replicate( "-", 128 ) )
AutoGrLog( " " )
If !lAuto
AutoGrLog( Replicate( "-", 128 ) )
AutoGrLog( "Empresa : " + SM0->M0_CODIGO + "/" + SM0->M0_NOME + CRLF )
EndIf
oProcess:SetRegua1( 9 )
//------------------------------------
// Atualiza o dicionário SX2
//------------------------------------
oProcess:IncRegua1( "Dicionário de arquivos SX2" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
FSAtuSX2()
//------------------------------------
// Atualiza o dicionário SX3
//------------------------------------
oProcess:IncRegua1( "Dicionário de arquivos SX3" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
FSAtuSX3()
//------------------------------------
// Atualiza o dicionário SIX
//------------------------------------
oProcess:IncRegua1( "Dicionário de índices" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
FSAtuSIX()
oProcess:IncRegua1( "Dicionário de dados" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
oProcess:IncRegua2( "Atualizando campos/índices" )
// Alteração física dos arquivos
__SetX31Mode( .F. )
If FindFunction(cTCBuild)
cTopBuild := &cTCBuild.()
EndIf
For nX := 1 To Len( aArqUpd )
If cTopBuild >= "20090811" .AND. TcInternal( 89 ) == "CLOB_SUPPORTED"
If ( ( aArqUpd[nX] >= "NQ " .AND. aArqUpd[nX] <= "NZZ" ) .OR. ( aArqUpd[nX] >= "O0 " .AND. aArqUpd[nX] <= "NZZ" ) ) .AND.; !aArqUpd[nX] $ "NQD,NQF,NQP,NQT" TcInternal( 25, "CLOB" ) EndIf EndIf If Select( aArqUpd[nX] ) > 0
dbSelectArea( aArqUpd[nX] )
dbCloseArea()
EndIf
X31UpdTable( aArqUpd[nX] )
If __GetX31Error()
Alert( __GetX31Trace() )
MsgStop( "Ocorreu um erro desconhecido durante a atualização da tabela : " + aArqUpd[nX] + ". Verifique a integridade do dicionário e da tabela.", "ATENÇÃO" )
AutoGrLog( "Ocorreu um erro desconhecido durante a atualização da estrutura da tabela : " + aArqUpd[nX] )
EndIf
If cTopBuild >= "20090811" .AND. TcInternal( 89 ) == "CLOB_SUPPORTED"
TcInternal( 25, "OFF" )
EndIf
Next nX
//------------------------------------
// Atualiza o dicionário SX6
//------------------------------------
oProcess:IncRegua1( "Dicionário de parâmetros" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
//FSAtuSX6()
//------------------------------------
// Atualiza o dicionário SX7
//------------------------------------
oProcess:IncRegua1( "Dicionário de gatilhos" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
//FSAtuSX7()
//------------------------------------
// Atualiza o dicionário SXB
//------------------------------------
oProcess:IncRegua1( "Dicionário de consultas padrão" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
FSAtuSXB()
//------------------------------------
// Atualiza o dicionário SX9
//------------------------------------
oProcess:IncRegua1( "Dicionário de relacionamentos" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
//FSAtuSX9()
//------------------------------------
// Atualiza o dicionário SX1
//------------------------------------
oProcess:IncRegua1( "Dicionário de perguntas" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
//FSAtuSX1()
//------------------------------------
// Atualiza os helps
//------------------------------------
oProcess:IncRegua1( "Helps de Campo" + " - " + SM0->M0_CODIGO + " " + SM0->M0_NOME + " ..." )
//FSAtuHlp()
AutoGrLog( Replicate( "-", 128 ) )
AutoGrLog( " Data / Hora Final.: " + DtoC( Date() ) + " / " + Time() )
AutoGrLog( Replicate( "-", 128 ) )
RpcClearEnv()
Next nI
If !lAuto
cTexto := LeLog()
Define Font oFont Name "Mono AS" Size 5, 12
Define MsDialog oDlg Title "Atualização concluida." 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, "" ), If( cFile == "", .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    := ""
Local cCpoUpd   := "X2_ROTINA /X2_UNICO  /X2_DISPLAY/X2_SYSOBJ /X2_USROBJ /X2_POSLGT /"
Local cEmpr     := ""
Local cPath     := ""
Local nI        := 0
Local nJ        := 0
Local cTamF 	:= " "
Local cTamU 	:= " "
Local cTamE 	:= " "
AutoGrLog( "Ínicio da Atualização" + " SX2" + CRLF )
aEstrut := { "X2_CHAVE"  , "X2_PATH"   , "X2_ARQUIVO", "X2_NOME"   , "X2_NOMESPA", "X2_NOMEENG", "X2_MODO"   , ;
"X2_TTS"    , "X2_ROTINA" , "X2_PYME"   , "X2_UNICO"  , "X2_DISPLAY", "X2_SYSOBJ" , "X2_USROBJ" , ;
"X2_POSLGT" , "X2_CLOB"   , "X2_AUTREC" , "X2_MODOEMP", "X2_MODOUN" , "X2_MODULO" , "X2_LOCALIZ" }
dbSelectArea( "SX2" )
SX2->( dbSetOrder( 1 ) )
SX2->( dbGoTop() )
cPath := SX2->X2_PATH
cPath := IIf( Right( AllTrim( cPath ), 1 ) <> "\", PadR( AllTrim( cPath ) + "\", Len( cPath ) ), cPath )
cEmpr := Substr( SX2->X2_ARQUIVO, 4 )
If Fieldpos("X2_TAMFIL") > 0
cTamF := SX2->X2_TAMFIL
cTamU := SX2->X2_TAMUN
cTamE := SX2->X2_TAMEMP
aEstrut := { "X2_CHAVE"  , "X2_PATH"   , "X2_ARQUIVO", "X2_NOME"   , "X2_NOMESPA", "X2_NOMEENG", "X2_MODO"   , ;
"X2_TTS"    , "X2_ROTINA" , "X2_PYME"   , "X2_UNICO"  , "X2_DISPLAY", "X2_SYSOBJ" , "X2_USROBJ" , ;
"X2_POSLGT" , "X2_CLOB"   , "X2_AUTREC" , "X2_MODOEMP", "X2_MODOUN" , "X2_MODULO" , "X2_LOCALIZ","X2_TAMFIL","X2_TAMUN","X2_TAMEMP" }
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( "SX2" )
dbSetOrder( 1 )
For nI := 1 To Len( aSX2 )
oProcess:IncRegua2( "Atualizando Arquivos (SX2)..." )
If !SX2->( dbSeek( aSX2[nI][1] ) )
If !( aSX2[nI][1] $ cAlias )
cAlias += aSX2[nI][1] + "/"
AutoGrLog( "Foi incluída a tabela " + aSX2[nI][1] )
EndIf
RecLock( "SX2", .T. )
For nJ := 1 To Len( aSX2[nI] )
If FieldPos( aEstrut[nJ] ) > 0
If AllTrim( aEstrut[nJ] ) == "X2_ARQUIVO"
FieldPut( FieldPos( aEstrut[nJ] ), SubStr( aSX2[nI][nJ], 1, 3 ) + cEmpAnt +  "0" )
Else
FieldPut( FieldPos( aEstrut[nJ] ), aSX2[nI][nJ] )
EndIf
EndIf
Next nJ
MsUnLock()
Else
/*If  !( StrTran( Upper( AllTrim( SX2->X2_UNICO ) ), " ", "" ) == StrTran( Upper( AllTrim( aSX2[nI][12]  ) ), " ", "" ) )
RecLock( "SX2", .F. )
SX2->X2_UNICO := aSX2[nI][12]
MsUnlock()
If MSFILE( RetSqlName( aSX2[nI][1] ),RetSqlName( aSX2[nI][1] ) + "_UNQ"  )
TcInternal( 60, RetSqlName( aSX2[nI][1] ) + "|" + RetSqlName( aSX2[nI][1] ) + "_UNQ" )
EndIf
AutoGrLog( "Foi alterada a chave única da tabela " + aSX2[nI][1] )
EndIf*/
RecLock( "SX2", .F. )
For nJ := 1 To Len( aSX2[nI] )
If FieldPos( aEstrut[nJ] ) > 0
If PadR( aEstrut[nJ], 10 ) $ cCpoUpd
FieldPut( FieldPos( aEstrut[nJ] ), aSX2[nI][nJ] )
EndIf
EndIf
Next nJ
MsUnLock()
EndIf
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SX2" + CRLF + Replicate( "-", 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    := ""
Local cAliasAtu := ""
Local cSeqAtu   := ""
Local cX3Campo  := ""
Local cX3Dado   := ""
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->X3_CAMPO )
Local nTamFil 	:= TamSX3( "A1_FILIAL" )[1]
Local cUsaFil	:= FsX3Info("A1_FILIAL",1)
Local cUsaOBg	:= FsX3Info("A1_CGC",1)
Local cUsaCpo	:= FsX3Info("A1_BAIRRO",1)
Local cResFil	:= FsX3Info("A1_FILIAL",2)
Local cResObg	:= FsX3Info("A1_CGC",2)
Local cResCpo	:= FsX3Info("A1_BAIRRO",2)
AutoGrLog( "Ínicio da Atualização" + " SX3" + CRLF )
aEstrut := { { "X3_ARQUIVO", 0 }, { "X3_ORDEM"  , 0 }, { "X3_CAMPO"  , 0 }, { "X3_TIPO"   , 0 }, { "X3_TAMANHO", 0 }, { "X3_DECIMAL", 0 }, { "X3_TITULO" , 0 }, ;
{ "X3_TITSPA" , 0 }, { "X3_TITENG" , 0 }, { "X3_DESCRIC", 0 }, { "X3_DESCSPA", 0 }, { "X3_DESCENG", 0 }, { "X3_PICTURE", 0 }, { "X3_VALID"  , 0 }, ;
{ "X3_USADO"  , 0 }, { "X3_RELACAO", 0 }, { "X3_F3"     , 0 }, { "X3_NIVEL"  , 0 }, { "X3_RESERV" , 0 }, { "X3_CHECK"  , 0 }, { "X3_TRIGGER", 0 }, ;
{ "X3_PROPRI" , 0 }, { "X3_BROWSE" , 0 }, { "X3_VISUAL" , 0 }, { "X3_CONTEXT", 0 }, { "X3_OBRIGAT", 0 }, { "X3_VLDUSER", 0 }, { "X3_CBOX"   , 0 }, ;
{ "X3_CBOXSPA", 0 }, { "X3_CBOXENG", 0 }, { "X3_PICTVAR", 0 }, { "X3_WHEN"   , 0 }, { "X3_INIBRW" , 0 }, { "X3_GRPSXG" , 0 }, { "X3_FOLDER" , 0 }, ;
{ "X3_CONDSQL", 0 }, { "X3_CHKSQL" , 0 }, { "X3_IDXSRV" , 0 }, { "X3_ORTOGRA", 0 }, { "X3_TELA"   , 0 }, { "X3_POSLGT" , 0 }, { "X3_IDXFLD" , 0 }, ;
{ "X3_AGRUP"  , 0 }, { "X3_MODAL"  , 0 }, { "X3_PYME"   , 0 } ,{ "X3_LOCALIZ", 0 }  }
aEval( aEstrut, { |x| x[2] := SX3->( FieldPos( x[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("ZRA","ZRA_CODIGO")'										, .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("ZRA")'													, .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("12")'														, .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("ZRB","ZRB_CODIGO")'										, .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("ZRB")'													, .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
{ "", .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[1] ) == "X3_ARQUIVO" } )
nPosOrd := aScan( aEstrut, { |x| AllTrim( x[1] ) == "X3_ORDEM"   } )
nPosCpo := aScan( aEstrut, { |x| AllTrim( x[1] ) == "X3_CAMPO"   } )
nPosTam := aScan( aEstrut, { |x| AllTrim( x[1] ) == "X3_TAMANHO" } )
nPosSXG := aScan( aEstrut, { |x| AllTrim( x[1] ) == "X3_GRPSXG"  } )
nPosVld := aScan( aEstrut, { |x| AllTrim( x[1] ) == "X3_VALID"   } )
aSort( aSX3,,, { |x,y| x[nPosArq][1]+x[nPosOrd][1]+x[nPosCpo][1] < y[nPosArq][1]+y[nPosOrd][1]+y[nPosCpo][1] } ) oProcess:SetRegua2( Len( aSX3 ) ) dbSelectArea( "SX3" ) dbSetOrder( 2 ) cAliasAtu := "" For nI := 1 To Len( aSX3 ) // // Verifica se o campo faz parte de um grupo e ajusta tamanho // If !Empty( aSX3[nI][nPosSXG][1] ) SXG->( dbSetOrder( 1 ) )
If SXG->( MSSeek( aSX3[nI][nPosSXG][1] ) )
If aSX3[nI][nPosTam][1] <> SXG->XG_SIZE
aSX3[nI][nPosTam][1] := SXG->XG_SIZE
AutoGrLog( "O tamanho do campo " + aSX3[nI][nPosCpo][1] + " NÃO atualizado e foi mantido em [" + ;
AllTrim( Str( SXG->XG_SIZE ) ) + "]" + CRLF + ;
" por pertencer ao grupo de campos [" + SXG->XG_GRUPO + "]" + CRLF )
EndIf
EndIf
EndIf
SX3->( dbSetOrder( 2 ) )
If !( aSX3[nI][nPosArq][1] $ cAlias )
cAlias += aSX3[nI][nPosArq][1] + "/"
aAdd( aArqUpd, aSX3[nI][nPosArq][1] )
EndIf
If !SX3->( dbSeek( PadR( aSX3[nI][nPosCpo][1], nTamSeek ) ) )
//
// Busca ultima ocorrencia do alias
//
If ( aSX3[nI][nPosArq][1] <> cAliasAtu )
cSeqAtu   := "00"
cAliasAtu := aSX3[nI][nPosArq][1]
dbSetOrder( 1 )
SX3->( dbSeek( cAliasAtu + "ZZ", .T. ) )
dbSkip( -1 )
If ( SX3->X3_ARQUIVO == cAliasAtu )
cSeqAtu := SX3->X3_ORDEM
EndIf
nSeqAtu := Val( RetAsc( cSeqAtu, 3, .F. ) )
EndIf
nSeqAtu++
cSeqAtu := RetAsc( Str( nSeqAtu ), 2, .T. )
RecLock( "SX3", .T. )
For nJ := 1 To Len( aSX3[nI] )
If SX3->(FieldPos( aEstrut[nJ][1])) > 0
If     nJ == nPosOrd  // Ordem
SX3->( FieldPut( FieldPos( aEstrut[nJ][1] ), cSeqAtu ) )
ElseIf aEstrut[nJ][2] > 0
SX3->( FieldPut( FieldPos( aEstrut[nJ][1] ), aSX3[nI][nJ][1] ) )
EndIf
EndIf
Next nJ
dbCommit()
MsUnLock()
AutoGrLog( "Criado campo " + aSX3[nI][nPosCpo][1] )
Else
//
// Verifica se o campo faz parte de um grupo e ajsuta tamanho
//
If !Empty( SX3->X3_GRPSXG ) .AND. SX3->X3_GRPSXG <> aSX3[nI][nPosSXG][1]
SXG->( dbSetOrder( 1 ) )
If SXG->( MSSeek( SX3->X3_GRPSXG ) )
If aSX3[nI][nPosTam][1] <> SXG->XG_SIZE
aSX3[nI][nPosTam][1] := SXG->XG_SIZE
AutoGrLog( "O tamanho do campo " + aSX3[nI][nPosCpo][1] + " NÃO atualizado e foi mantido em [" + ;
AllTrim( Str( SXG->XG_SIZE ) ) + "]"+ CRLF + ;
"   por pertencer ao grupo de campos [" + SX3->X3_GRPSXG + "]" + CRLF )
EndIf
EndIf
EndIf
//
// Verifica todos os campos
//
For nJ := 1 To Len( aSX3[nI] )
If SX3->(FieldPos( aEstrut[nJ][1])) > 0
If aSX3[nI][nJ][2]
cX3Campo := AllTrim( aEstrut[nJ][1] )
cX3Dado  := SX3->( FieldGet( aEstrut[nJ][2] ) )
If  aEstrut[nJ][2] > 0 .AND. ;
PadR( StrTran( AllToChar( cX3Dado ), " ", "" ), 250 ) <> ;
PadR( StrTran( AllToChar( aSX3[nI][nJ][1] ), " ", "" ), 250 ) .AND. ;
!cX3Campo  == "X3_ORDEM"
AutoGrLog( "Alterado campo " + aSX3[nI][nPosCpo][1] + CRLF + ;
"   " + PadR( cX3Campo, 10 ) + " de [" + AllToChar( cX3Dado ) + "]" + CRLF + ;
"            para [" + AllToChar( aSX3[nI][nJ][1] )           + "]" + CRLF )
RecLock( "SX3", .F. )
FieldPut( FieldPos( aEstrut[nJ][1] ), aSX3[nI][nJ][1] )
MsUnLock()
EndIf
EndIf
EndIf
Next
EndIf
oProcess:IncRegua2( "Atualizando Campos de Tabelas (SX3)..." )
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SX3" + CRLF + Replicate( "-", 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( "Ínicio da Atualização" + " SIX" + CRLF )
aEstrut := { "INDICE" , "ORDEM" , "CHAVE", "DESCRICAO", "DESCSPA"  , ;
"DESCENG", "PROPRI", "F3"   , "NICKNAME" , "SHOWPESQ" ,"IX_LOCALIZ"}
//
// 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( "SIX" )
SIX->( dbSetOrder( 1 ) )
For nI := 1 To Len( aSIX )
lAlt    := .F.
lDelInd := .F.
If !SIX->( dbSeek( aSIX[nI][1] + aSIX[nI][2] ) )
AutoGrLog( "Indice criado " + aSIX[nI][1] + "/" + aSIX[nI][2] + " - " + aSIX[nI][3] )
Else
lAlt := .T.
aAdd( aArqUpd, aSIX[nI][1] )
If !StrTran( Upper( AllTrim( CHAVE )       ), " ", "" ) == ;
StrTran( Upper( AllTrim( aSIX[nI][3] ) ), " ", "" )
AutoGrLog( "Chave do indice alterado " + aSIX[nI][1] + "/" + aSIX[nI][2] + " - " + aSIX[nI][3] )
lDelInd := .T. // Se for alteração precisa apagar o indice do banco
EndIf
EndIf
RecLock( "SIX", !lAlt )
For nJ := 1 To Len( aSIX[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSIX[nI][nJ] )
EndIf
Next nJ
MsUnLock()
dbCommit()
If lDelInd
TcInternal( 60, RetSqlName( aSIX[nI][1] ) + "|" + RetSqlName( aSIX[nI][1] ) + aSIX[nI][2] )
EndIf
oProcess:IncRegua2( "Atualizando índices..." )
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SIX" + CRLF + Replicate( "-", 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    := ""
Local lContinua := .T.
Local lReclock  := .T.
Local nI        := 0
Local nJ        := 0
Local nTamFil   := Len( SX6->X6_FIL )
Local nTamVar   := Len( SX6->X6_VAR )
AutoGrLog( "Ínicio da Atualização" + " SX6" + CRLF )
aEstrut := { "X6_FIL"    , "X6_VAR"    , "X6_TIPO"   , "X6_DESCRIC", "X6_DSCSPA" , "X6_DSCENG" , "X6_DESC1"  , ;
"X6_DSCSPA1", "X6_DSCENG1", "X6_DESC2"  , "X6_DSCSPA2", "X6_DSCENG2", "X6_CONTEUD", "X6_CONTSPA", ;
"X6_CONTENG", "X6_PROPRI" , "X6_VALID"  , "X6_INIT"   , "X6_DEFPOR" , "X6_DEFSPA" , "X6_DEFENG" , ;
"X6_PYME"   }
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( "SX6" )
dbSetOrder( 1 )
For nI := 1 To Len( aSX6 )
lContinua := .F.
lReclock  := .F.
If !SX6->( dbSeek( PadR( aSX6[nI][1], nTamFil ) + PadR( aSX6[nI][2], nTamVar ) ) )
lContinua := .T.
lReclock  := .T.
AutoGrLog( "Foi incluído o parâmetro " + aSX6[nI][1] + aSX6[nI][2] + " Conteúdo [" + AllTrim( aSX6[nI][13] ) + "]" )
Else
lContinua := .T.
lReclock  := .F.
AutoGrLog( "Foi alterado o parâmetro " + aSX6[nI][1] + aSX6[nI][2] + " de [" + ;
AllTrim( SX6->X6_CONTEUD ) + "]" + " para [" + AllTrim( aSX6[nI][13] ) + "]" )
EndIf
If lContinua
If !( aSX6[nI][1] $ cAlias )
cAlias += aSX6[nI][1] + "/"
EndIf
RecLock( "SX6", lReclock )
For nJ := 1 To Len( aSX6[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSX6[nI][nJ] )
EndIf
Next nJ
dbCommit()
MsUnLock()
EndIf
oProcess:IncRegua2( "Atualizando Arquivos (SX6)..." )
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SX6" + CRLF + Replicate( "-", 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->( GetArea() )
Local aSX7      := {}
Local cAlias    := ""
Local nI        := 0
Local nJ        := 0
Local nTamSeek  := Len( SX7->X7_CAMPO )
AutoGrLog( "Ínicio da Atualização" + " SX7" + CRLF )
aEstrut := { "X7_CAMPO", "X7_SEQUENC", "X7_REGRA", "X7_CDOMIN", "X7_TIPO", "X7_SEEK", ;
"X7_ALIAS", "X7_ORDEM"  , "X7_CHAVE", "X7_PROPRI", "X7_CONDIC" ,"X7_LOCALIZ"}
//
// Campo ZA2_AUTOR
//
aAdd( aSX7, { ;
'ZA2_AUTOR'																, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'ZA0->ZA0_NOME'															, ; //X7_REGRA
'ZA2_NOME'																, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZA0'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZA0")+M->ZA2_AUTOR'											, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
aAdd( aSX7, { ;
'ZA2_AUTOR'																, ; //X7_CAMPO
'002'																	, ; //X7_SEQUENC
"X3COMBO('ZA0_TIPO',ZA0->ZA0_TIPO)"										, ; //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->ZA1_TITULO'														, ; //X7_REGRA
'ZA4_TITULO'															, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZA1'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZA1")+M->ZA4_MUSICA'											, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
//
// Campo ZA5_INTER
//
aAdd( aSX7, { ;
'ZA5_INTER'																, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'ZA0->ZA0_NOME'															, ; //X7_REGRA
'ZA5_NOME'																, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZA0'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZA0")+M->ZA5_INTER'											, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
//
// Campo ZB5_CODTUR
//
aAdd( aSX7, { ;
'ZB5_CODTUR'															, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'ZB1->ZB1_DESCRI'														, ; //X7_REGRA
'ZB5_DESTUR'															, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZB1'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZB1")+M->ZB5_CODTUR'											, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
//
// Campo ZB6_RA
//
aAdd( aSX7, { ;
'ZB6_RA'																, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'ZB2->ZB2_NOME'															, ; //X7_REGRA
'ZB6_NOME'																, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZB2'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZB2")+M->ZB6_RA'												, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
//
// Campo ZB7_CODDIS
//
aAdd( aSX7, { ;
'ZB7_CODDIS'															, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'ZB3->ZB3_DESCRI'														, ; //X7_REGRA
'ZB7_DESDIS'															, ; //X7_CDOMIN
'P'																		, ; //X7_TIPO
'S'																		, ; //X7_SEEK
'ZB3'																	, ; //X7_ALIAS
1																		, ; //X7_ORDEM
'xFilial("ZB3")+M->ZB7_CODDIS'											, ; //X7_CHAVE
'U'																		, ; //X7_PROPRI
''																		, ; //X7_CONDIC
''																		} ) //X7_LOCALIZ
//
// Campo ZC4_VALOR
//
aAdd( aSX7, { ;
'ZC4_VALOR'																, ; //X7_CAMPO
'001'																	, ; //X7_SEQUENC
'M->( 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( "SX3" )
dbSetOrder( 2 )
dbSelectArea( "SX7" )
dbSetOrder( 1 )
For nI := 1 To Len( aSX7 )
If !SX7->( dbSeek( PadR( aSX7[nI][1], nTamSeek ) + aSX7[nI][2] ) )
If !( aSX7[nI][1] $ cAlias )
cAlias += aSX7[nI][1] + "/"
AutoGrLog( "Foi incluído o gatilho " + aSX7[nI][1] + "/" + aSX7[nI][2] )
EndIf
RecLock( "SX7", .T. )
Else
If !( aSX7[nI][1] $ cAlias )
cAlias += aSX7[nI][1] + "/"
AutoGrLog( "Foi alterado o gatilho " + aSX7[nI][1] + "/" + aSX7[nI][2] )
EndIf
RecLock( "SX7", .F. )
EndIf
For nJ := 1 To Len( aSX7[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSX7[nI][nJ] )
EndIf
Next nJ
dbCommit()
MsUnLock()
If SX3->( dbSeek( SX7->X7_CAMPO ) )
RecLock( "SX3", .F. )
SX3->X3_TRIGGER := "S"
MsUnLock()
EndIf
oProcess:IncRegua2( "Atualizando Arquivos (SX7)..." )
Next nI
RestArea( aAreaSX3 )
AutoGrLog( CRLF + "Final da Atualização" + " SX7" + CRLF + Replicate( "-", 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    := ""
Local nI        := 0
Local nJ        := 0
AutoGrLog( "Ínicio da Atualização" + " SXB" + CRLF )
aEstrut := { "XB_ALIAS"  , "XB_TIPO"   , "XB_SEQ"    , "XB_COLUNA" , "XB_DESCRI" , "XB_DESCSPA", "XB_DESCENG", ;
"XB_WCONTEM", "XB_CONTEM" , "XB_LOCALIZ"}
//
// 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->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->ZRA_DESCRI'											, ; //XB_CONTEM
''																	} ) //XB_LOCALIZ
//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSXB ) )
dbSelectArea( "SXB" )
dbSetOrder( 1 )
For nI := 1 To Len( aSXB )
If !Empty( aSXB[nI][1] )
If !SXB->( dbSeek( PadR( aSXB[nI][1], Len( SXB->XB_ALIAS ) ) + aSXB[nI][2] + aSXB[nI][3] + aSXB[nI][4] ) )
If !( aSXB[nI][1] $ cAlias )
cAlias += aSXB[nI][1] + "/"
AutoGrLog( "Foi incluída a consulta padrão " + aSXB[nI][1] )
EndIf
RecLock( "SXB", .T. )
For nJ := 1 To Len( aSXB[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSXB[nI][nJ] )
EndIf
Next nJ
dbCommit()
MsUnLock()
Else
//
// Verifica todos os campos
//
For nJ := 1 To Len( aSXB[nI] )
//
// Se o campo estiver diferente da estrutura
//
If aEstrut[nJ] == SXB->( FieldName( nJ ) ) .AND. ;
!StrTran( AllToChar( SXB->( FieldGet( nJ ) ) ), " ", "" ) == ;
StrTran( AllToChar( aSXB[nI][nJ]            ), " ", "" )
RecLock( "SXB", .F. )
FieldPut( FieldPos( aEstrut[nJ] ), aSXB[nI][nJ] )
dbCommit()
MsUnLock()
If !( aSXB[nI][1] $ cAlias )
cAlias += aSXB[nI][1] + "/"
AutoGrLog( "Foi alterada a consulta padrão " + aSXB[nI][1] )
EndIf
EndIf
Next
EndIf
EndIf
oProcess:IncRegua2( "Atualizando Consultas Padrões (SXB)..." )
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SXB" + CRLF + Replicate( "-", 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    := ""
Local nI        := 0
Local nJ        := 0
Local nTamSeek  := Len( SX9->X9_DOM )
AutoGrLog( "Ínicio da Atualização" + " SX9" + CRLF )
aEstrut := { "X9_DOM"    , "X9_IDENT"  , "X9_CDOM"   , "X9_EXPDOM" , "X9_EXPCDOM", "X9_PROPRI" , "X9_LIGDOM" , ;
"X9_LIGCDOM", "X9_CONDSQL", "X9_USEFIL" , "X9_VINFIL" , "X9_CHVFOR" , "X9_ENABLE" ,"X9_LOCALIZ" }
//
// 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( "SX9" )
dbSetOrder( 2 )
For nI := 1 To Len( aSX9 )
If !SX9->( dbSeek( PadR( aSX9[nI][3], nTamSeek ) + PadR( aSX9[nI][1], nTamSeek ) ) )
If !( aSX9[nI][1]+aSX9[nI][3] $ cAlias )
cAlias += aSX9[nI][1]+aSX9[nI][3] + "/"
EndIf
RecLock( "SX9", .T. )
For nJ := 1 To Len( aSX9[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSX9[nI][nJ] )
EndIf
Next nJ
dbCommit()
MsUnLock()
AutoGrLog( "Foi incluído o relacionamento " + aSX9[nI][1] + "/" + aSX9[nI][3] )
oProcess:IncRegua2( "Atualizando Arquivos (SX9)..." )
EndIf
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SX9" + CRLF + Replicate( "-", 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( "Ínicio da Atualização" + " " + "Helps de Campos" + CRLF )
oProcess:IncRegua2( "Atualizando Helps de Campos ..." )
//
// 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 + "Final da Atualização" + " " + "Helps de Campos" + CRLF + Replicate( "-", 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  := "??"
Local   cVar      := ""
Local   lChk      := .F.
Local   lOk       := .F.
Local   lTeveMarc := .F.
Local   oNo       := LoadBitmap( GetResources(), "LBNO" )
Local   oOk       := LoadBitmap( GetResources(), "LBOK" )
Local   oDlg, oChkMar, oLbx, oMascEmp, oSay
Local   oButDMar, oButInv, oButMarc, oButOk, oButCanc
local _ni := 0
Local   aMarcadas := {}
If !MyOpenSm0(.F.)
Return aRet
EndIf
dbSelectArea( "SM0" )
aSalvSM0 := SM0->( GetArea() )
dbSetOrder( 1 )
dbGoTop()
While !SM0->( EOF() )
If aScan( aVetor, {|x| x[2] == SM0->M0_CODIGO} ) == 0
aAdd(  aVetor, { aScan( aMarcadas, {|x| x[1] == SM0->M0_CODIGO .and. x[2] == SM0->M0_CODFIL} ) > 0, alltrim(SM0->M0_CODIGO), alltrim(SM0->M0_CODFIL), alltrim(SM0->M0_NOME), alltrim(SM0->M0_FILIAL) } )
EndIf
dbSkip()
End
RestArea( aSalvSM0 )
//TODO, remover ao corrigir o bloco abaixo
For _ni := 1 to len(aVetor)
aVetor[_ni,1] := .T. //marca todas empresas e filiais
Next
RetSelecao( @aRet, aVetor )
/*
Removido, list box vazio //TODO verificar
Define MSDialog  oDlg Title "" From 0, 0 To 280, 395 Pixel
oDlg:cToolTip := "Tela para Múltiplas Seleções de Empresas/Filiais"
oDlg:cTitle   := "Selecione a(s) Empresa(s) para Atualização"
//@ 10, 10 Listbox  oLbx Var  cVar Fields Header " ", " ", "Empresa" Size 178, 095 Of oDlg Pixel
oLbx := TwBrowse():New(10,10,178,095,,{" ", " ", "Empresa"},,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oLbx:SetArray( aVetor )
oLbx:bLine := {|| {IIf( aVetor[oLbx:nAt, 1], oOk, oNo ), ;
aVetor[oLbx:nAt, 2], ;
aVetor[oLbx:nAt, 4]}}
oLbx:BlDblClick := { || aVetor[oLbx:nAt, 1] := !aVetor[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 "Todos" Message "Marca / Desmarca"+ CRLF + "Todos" Size 40, 007 Pixel Of oDlg;
on Click MarcaTodos( lChk, @aVetor, oLbx )
// Marca/Desmarca por mascara
@ 113, 51 Say   oSay Prompt "Empresa" Size  40, 08 Of oDlg Pixel
@ 112, 80 MSGet oMascEmp Var  cMascEmp Size  05, 05 Pixel Picture "@!"  Valid (  cMascEmp := StrTran( cMascEmp, " ", "?" ), oMascEmp:Refresh(), .T. ) ;
Message "Máscara Empresa ( ?? )"  Of oDlg
oSay:cToolTip := oMascEmp:cToolTip
@ 128, 10 Button oButInv    Prompt "&Inverter"  Size 32, 12 Pixel Action ( InvSelecao( @aVetor, oLbx, @lChk, oChkMar ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Inverter Seleção" Of oDlg
oButInv:SetCss( CSSBOTAO )
@ 128, 50 Button oButMarc   Prompt "&Marcar"    Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .T. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Marcar usando" + CRLF + "máscara ( ?? )"    Of oDlg
oButMarc:SetCss( CSSBOTAO )
@ 128, 80 Button oButDMar   Prompt "&Desmarcar" Size 32, 12 Pixel Action ( MarcaMas( oLbx, aVetor, cMascEmp, .F. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Desmarcar usando" + CRLF + "máscara ( ?? )" Of oDlg
oButDMar:SetCss( CSSBOTAO )
@ 112, 157  Button oButOk   Prompt "Processar"  Size 32, 12 Pixel Action (  RetSelecao( @aRet, aVetor ), oDlg:End()  ) ;
Message "Confirma a seleção e efetua" + CRLF + "o processamento" Of oDlg
oButOk:SetCss( CSSBOTAO )
@ 128, 157  Button oButCanc Prompt "Cancelar"   Size 32, 12 Pixel Action ( IIf( lTeveMarc, aRet :=  aMarcadas, .T. ), oDlg:End() ) ;
Message "Cancela o processamento" + CRLF + "e abandona a aplicação" Of oDlg
oButCanc:SetCss( CSSBOTAO )
Activate MSDialog  oDlg Center
*/
RestArea( aSalvAmb )
dbSelectArea( "SM0" )
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[nI][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[nI][1] := !aVetor[nI][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[nI][1]
aAdd( aRet, { aVetor[nI][2] , aVetor[nI][3], aVetor[nI][2] +  aVetor[nI][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 == "?" .or. SubStr( aVetor[nZ][2], 1, 1 ) == cPos1
If cPos2 == "?" .or. SubStr( aVetor[nZ][2], 2, 1 ) == cPos2
aVetor[nZ][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[nI][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., , "SIGAMAT.EMP", "SM0", lShared, .F. )
If !Empty( Select( "SM0" ) )
lOpen := .T.
dbSetIndex( "SIGAMAT.IND" )
Exit
EndIf
EndIf
Sleep( 500 )
Next nLoop
If !lOpen
MsgStop( "Não foi possível a abertura da tabela " + ;
IIf( lShared, "de empresas (SM0).", "de empresas (SM0) de forma exclusiva." ), "ATENÇÃO" )
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  := ""
Local cFile := NomeAutoLog()
Local cAux  := ""
FT_FUSE( cFile )
FT_FGOTOP()
While !FT_FEOF()
cAux := FT_FREADLN()
If Len( cRet ) + Len( cAux ) < 1048000 cRet += cAux + CRLF Else cRet += CRLF cRet += Replicate( "=" , 128 ) + CRLF cRet += "Tamanho de exibição maxima do LOG alcançado." + CRLF cRet += "LOG Completo no arquivo " + cFile + CRLF cRet += Replicate( "=" , 128 ) + CRLF Exit EndIf FT_FSKIP() End FT_FUSE() Return cRet ///////////////////////////////////////////////////////////////////////////// Static Function FsX3Info(cCampo,nTipo) Local cRet := "" Local aArea := SX3->(GetArea())
SX3->( dbSetOrder( 2 ) )
If SX3->( dbSeek(cCampo) )
If nTipo == 1
cRet := SX3->X3_USADO
Else
cRet := SX3->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->( dbStruct() )
Local cAlias    := ""
Local nI        := 0
Local nJ        := 0
Local nTam1     := Len( SX1->X1_GRUPO )
Local nTam2     := Len( SX1->X1_ORDEM )
AutoGrLog( "Ínicio da Atualização " + cAlias + CRLF )
aEstrut := { "X1_GRUPO"  , "X1_ORDEM"  , "X1_PERGUNT", "X1_PERSPA" , "X1_PERENG" , "X1_VARIAVL", "X1_TIPO"   , ;
"X1_TAMANHO", "X1_DECIMAL", "X1_PRESEL" , "X1_GSC"    , "X1_VALID"  , "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"  }
//
// 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, "X1_GRUPO"   )
nPosOrd := aScan( aEstrut, "X1_ORDEM"   )
nPosTam := aScan( aEstrut, "X1_TAMANHO" )
nPosSXG := aScan( aEstrut, "X1_GRPSXG"  )
oProcess:SetRegua2( Len( aSX1 ) )
dbSelectArea( "SX1" )
SX1->( dbSetOrder( 1 ) )
For nI := 1 To Len( aSX1 )
//
// Verifica se o campo faz parte de um grupo e ajusta tamanho
//
If !Empty( aSX1[nI][nPosSXG]  )
SXG->( dbSetOrder( 1 ) )
If SXG->( MSSeek( aSX1[nI][nPosSXG] ) )
If aSX1[nI][nPosTam] <> SXG->XG_SIZE
aSX1[nI][nPosTam] := SXG->XG_SIZE
AutoGrLog( "O tamanho da pergunta " + aSX1[nI][nPosPerg] + " / " + aSX1[nI][nPosOrd] + " NÃO atualizado e foi mantido em [" + ;
AllTrim( Str( SXG->XG_SIZE ) ) + "]" + CRLF + ;
"   por pertencer ao grupo de campos [" + SXG->XG_GRUPO + "]" + CRLF )
EndIf
EndIf
EndIf
oProcess:IncRegua2( "Atualizando perguntas..." )
If !SX1->( dbSeek( PadR( aSX1[nI][nPosPerg], nTam1 ) + PadR( aSX1[nI][nPosOrd], nTam2 ) ) )
AutoGrLog( "Pergunta Criada. Grupo/Ordem " + aSX1[nI][nPosPerg] + "/" + aSX1[nI][nPosOrd] )
RecLock( "SX1", .T. )
Else
AutoGrLog( "Pergunta Alterada. Grupo/Ordem " + aSX1[nI][nPosPerg] + "/" + aSX1[nI][nPosOrd] )
RecLock( "SX1", .F. )
EndIf
For nJ := 1 To Len( aSX1[nI] )
If aScan( aStruDic, { |aX| PadR( aX[1], 10 ) == PadR( aEstrut[nJ], 10 ) } ) > 0
SX1->( FieldPut( FieldPos( aEstrut[nJ] ), aSX1[nI][nJ] ) )
EndIf
Next nJ
MsUnLock()
Next nI
AutoGrLog( CRLF + "Final da Atualização" + " SX1" + CRLF + Replicate( "-", 128 ) + CRLF )
Return NIL

Não deixe de assinar a nossa newsletter e fica por dentro de todos os post.

O código fonte desse e outros exemplos podem ser encontrados em nosso git.

Post interessantes:

Aprenda a instalar o Protheus aqui.

Retornar datas por extenso aqui.

Barras de progresso aqui.

Dúvidas e sugestões, entre em contato.

Obrigado e até a próxima!


0 comentário

Deixe um comentário