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.

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