Você está na página 1de 34

#INCLUDE "TOTVS.

CH"

#DEFINE SIMPLES Char( 39 )


#DEFINE DUPLAS Char( 34 )

/*/{Protheus.doc} ZUPDCCE

Funcao de update dos dicionários para compatibilização


Gerado por EXPORDIC / Upd. V.4.10.5 EFS
Acelerador Impressão de Carta de Correção

@type function
@author Joao Zabotto
@since 04/01/2013

@param cEmpAmb, String, Código do Grupo da Empresa


@param cFilAmb, String, Código da Empresa/Filial
/*/
User Function ZUPDCCE( cEmpAmb, cFilAmb )

Local aSay := {}
Local aButton := {}
Local aMarcadas := {}
Local cTitulo := "ATUALIZAÇÃO DE DICIONÁRIOS E TABELAS"
Local cDesc1 := "Esta rotina tem como função fazer a atualização dos
dicionários do Sistema ( SX?/SIX )"
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 := "ocorra eventuais falhas, esse backup seja ser
restaurado."
Local cDesc6 := ""
Local cDesc7 := ""
Local lOk := .F.
Local lAuto := ( cEmpAmb <> NIL .or. cFilAmb <> NIL )

Private oMainWnd := NIL


Private oProcess := NIL

// Adicionado Zabotto
Private aParamBox := {}
Private cTabela := ''
Private cCampo := ''
Private aSays := {}
Private aButtons := {}
Private lExist := .F.

#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

If !Empty( aMarcadas )
If lAuto .OR. MsgNoYes( "Confirma a atualização dos
dicionários ?", cTitulo )
oProcess := MsNewProcess():New( { | lEnd | lOk :=
FSTProc( @lEnd, aMarcadas ) }, "Atualizando", "Aguarde, atualizando ...", .F. )
oProcess:Activate()

If lAuto
If lOk
MsgStop( "Atualização Realizada.", "UPDGER" )
dbCloseAll()
Else
MsgStop( "Atualização não Realizada.", "UPDGER"
)
dbCloseAll()
EndIf
Else
If lOk
Final( "Atualização Concluída." )
Else
Final( "Atualização não Realizada." )
EndIf
EndIf

Else
MsgStop( "Atualização não Realizada.", "UPDGER" )

EndIf

Else
MsgStop( "Atualização não Realizada.", "UPDGER" )

EndIf
EndIf

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ FSTProc º Autor ³ TOTVS Protheus º Data ³ 04/01/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento da gravação dos arquivos ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ FSTProc - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function FSTProc( lEnd, aMarcadas )
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() )


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

cTexto += Replicate( "-", 128 ) + CRLF


cTexto += "Empresa : " + SM0->M0_CODIGO + "/" + SM0-
>M0_NOME + CRLF + CRLF

oProcess:SetRegua1( 8 )

//Adicionado Zabotto

ZPARAM(@cTexto)

If lExist
Return .F.
EndIf

// Alteracao fisica 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" )
cTexto += "Ocorreu um erro desconhecido durante
a atualização da estrutura da tabela : " + aArqUpd[nX] + CRLF
EndIf

If cTopBuild >= "20090811" .AND. TcInternal( 89 ) ==


"CLOB_SUPPORTED"
TcInternal( 25, "OFF" )
EndIf

Next nX

RpcClearEnv()

Next nI

If MyOpenSm0(.T.)

cAux += Replicate( "-", 128 ) + CRLF


cAux += Replicate( " ", 128 ) + CRLF
cAux += "LOG DA ATUALIZACAO DOS DICIONÁRIOS" + CRLF
cAux += Replicate( " ", 128 ) + CRLF
cAux += Replicate( "-", 128 ) + CRLF
cAux += CRLF
cAux += " Dados Ambiente" + CRLF
cAux += " --------------------" + CRLF
cAux += " Empresa / Filial...: " + cEmpAnt + "/" + cFilAnt
+ CRLF
cAux += " Nome Empresa.......: " +
Capital( AllTrim( GetAdvFVal( "SM0", "M0_NOMECOM", cEmpAnt + cFilAnt, 1, "" ) ) ) +
CRLF
cAux += " Nome Filial........: " +
Capital( AllTrim( GetAdvFVal( "SM0", "M0_FILIAL" , cEmpAnt + cFilAnt, 1, "" ) ) ) +
CRLF
cAux += " DataBase...........: " + DtoC( dDataBase ) +
CRLF
cAux += " Data / Hora Inicio.: " + DtoC( Date() ) + " / "
+ Time() + CRLF
cAux += " Environment........: " + GetEnvServer() + CRLF
cAux += " StartPath..........: " +
GetSrvProfString( "StartPath", "" ) + CRLF
cAux += " RootPath...........: " +
GetSrvProfString( "RootPath" , "" ) + CRLF
cAux += " Versao.............: " + GetVersao(.T.) + CRLF
cAux += " Usuario TOTVS .....: " + __cUserId + " " +
cUserName + CRLF
cAux += " Computer Name......: " + GetComputerName() + CRLF

aInfo := GetUserInfo()
If ( nPos := aScan( aInfo,{ |x,y| x[3] == ThreadId() } )
) > 0
cAux += " " + CRLF
cAux += " Dados Thread" + CRLF
cAux += " --------------------" + CRLF
cAux += " Usuario da Rede....: " + aInfo[nPos][1] +
CRLF
cAux += " Estacao............: " + aInfo[nPos][2] +
CRLF
cAux += " Programa Inicial...: " + aInfo[nPos][5] +
CRLF
cAux += " Environment........: " + aInfo[nPos][6] +
CRLF
cAux += " Conexao............: " +
AllTrim( StrTran( StrTran( aInfo[nPos][7], Chr( 13 ), "" ), Chr( 10 ), "" ) ) +
CRLF
EndIf
cAux += Replicate( "-", 128 ) + CRLF
cAux += CRLF

cTexto := cAux + cTexto + CRLF

cTexto += Replicate( "-", 128 ) + CRLF


cTexto += " Data / Hora Final.: " + DtoC( Date() ) + " / "
+ Time() + CRLF
cTexto += Replicate( "-", 128 ) + CRLF

cFileLog := MemoWrite( CriaTrab( , .F. ) + ".log", cTexto )

Define Font oFont Name "Mono AS" Size 5, 12

Define MsDialog oDlg Title "Atualizacao 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
Else

lRet := .F.

EndIf
EndIF

Return lRet

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ FSAtuSX2 º Autor ³ TOTVS Protheus º Data ³ 04/01/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento da gravacao do SX2 - Arquivos ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ FSAtuSX2 - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function FSAtuSX2( cTexto )
Local aEstrut := {}
Local aSX2 := {}
Local cAlias := ""
Local cEmpr := ""
Local cPath := ""
Local nI := 0
Local nJ := 0

cTexto += "Inicio da Atualizacao" + " SX2" + CRLF + CRLF

aEstrut := { "X2_CHAVE" , "X2_PATH" , "X2_ARQUIVO", "X2_NOME" ,


"X2_NOMESPA", "X2_NOMEENG", ;
"X2_DELET" , "X2_MODO" , "X2_TTS" , "X2_ROTINA", "X2_PYME" ,
"X2_UNICO" , ;
"X2_MODOEMP", "X2_MODOUN" , "X2_MODULO" }

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 )

//
// Tabela SZZ
//
aAdd( aSX2, { ;
cTabela
, ; //X2_CHAVE
cPath
, ; //X2_PATH
cTabela+cEmpr
, ; //X2_ARQUIVO
'PARAMETROS GERENCIAL'
, ; //X2_NOME
'PARAMETROS GERENCIAL'
, ; //X2_NOMESPA
'PARAMETROS GERENCIAL'
, ; //X2_NOMEENG
0
, ; //X2_DELET
'C'
, ; //X2_MODO
''
, ; //X2_TTS
''
, ; //X2_ROTINA
''
, ; //X2_PYME
''
, ; //X2_UNICO
'C'
, ; //X2_MODOEMP
'C'
, ; //X2_MODOUN
0
} ) //X2_MODULO

//
// 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] + "/"
cTexto += "Foi incluída a tabela " + aSX2[nI][1] + CRLF
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
dbCommit()
MsUnLock()

Else

If !( StrTran( Upper( AllTrim( SX2->X2_UNICO ) ), " ", "" ) ==


StrTran( Upper( AllTrim( aSX2[nI][12] ) ), " ", "" ) )
If MSFILE( RetSqlName( aSX2[nI][1] ),RetSqlName( aSX2[nI]
[1] ) + "_UNQ" )
TcInternal( 60, RetSqlName( aSX2[nI][1] ) + "|" +
RetSqlName( aSX2[nI][1] ) + "_UNQ" )
cTexto += "Foi alterada chave unica da tabela " +
aSX2[nI][1] + CRLF
Else
cTexto += "Foi criada chave unica da tabela " +
aSX2[nI][1] + CRLF
EndIf
EndIf

EndIf

Next nI

cTexto += CRLF + "Final da Atualizacao" + " SX2" + CRLF + Replicate( "-", 128
) + CRLF + CRLF

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ FSAtuSX3 º Autor ³ TOTVS Protheus º Data ³ 04/01/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento da gravacao do SX3 - Campos ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ FSAtuSX3 - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function FSAtuSX3( cTexto )
Local aEstrut := {}
Local aSX3 := {}
Local cAlias := ""
Local cAliasAtu := ""
Local cMsg := ""
Local cSeqAtu := ""
Local lTodosNao := .F.
Local lTodosSim := .F.
Local nI := 0
Local nJ := 0
Local nOpcA := 0
Local nPosArq := 0
Local nPosCpo := 0
Local nPosOrd := 0
Local nPosSXG := 0
Local nPosTam := 0
Local nSeqAtu := 0
Local nTamSeek := Len( SX3->X3_CAMPO )

cTexto += "Inicio da Atualizacao" + " SX3" + CRLF + CRLF

aEstrut := { "X3_ARQUIVO", "X3_ORDEM" , "X3_CAMPO" , "X3_TIPO" ,


"X3_TAMANHO", "X3_DECIMAL", ;
"X3_TITULO" , "X3_TITSPA" , "X3_TITENG" , "X3_DESCRIC", "X3_DESCSPA",
"X3_DESCENG", ;
"X3_PICTURE", "X3_VALID" , "X3_USADO" , "X3_RELACAO", "X3_F3" ,
"X3_NIVEL" , ;
"X3_RESERV" , "X3_CHECK" , "X3_TRIGGER", "X3_PROPRI" , "X3_BROWSE" ,
"X3_VISUAL" , ;
"X3_CONTEXT", "X3_OBRIGAT", "X3_VLDUSER", "X3_CBOX" , "X3_CBOXSPA",
"X3_CBOXENG", ;
"X3_PICTVAR", "X3_WHEN" , "X3_INIBRW" , "X3_GRPSXG" , "X3_FOLDER" ,
"X3_PYME" }

//
// Tabela SZZ
//
aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'01'
, ; //X3_ORDEM
cCampo + '_FILIAL'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
4
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Filial'
, ; //X3_TITULO
'Sucursal'
, ; //X3_TITSPA
'Branch'
, ; //X3_TITENG
'Filial do Sistema'
, ; //X3_DESCRIC
'Sucursal'
, ; //X3_DESCSPA
'Branch of the System'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128)
, ; //X3_USADO
''
, ; //X3_RELACAO
''
, ; //X3_F3
1
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'N'
, ; //X3_BROWSE
''
, ; //X3_VISUAL
''
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
'033'
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'02'
, ; //X3_ORDEM
cCampo + '_TABELA'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
3
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Tabela'
, ; //X3_TITULO
'Tabela'
, ; //X3_TITSPA
'Tabela'
, ; //X3_TITENG
'Tabela'
, ; //X3_DESCRIC
'Tabela'
, ; //X3_DESCSPA
'Tabela'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
"existchav('" + cTabela + "')"
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(160)
, ; //X3_USADO
''
, ; //X3_RELACAO
'SX21'
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'S'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'03'
, ; //X3_ORDEM
cCampo + '_DESCRI'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
30
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Descricao'
, ; //X3_TITULO
'Descricao'
, ; //X3_TITSPA
'Descricao'
, ; //X3_TITENG
'Descricao'
, ; //X3_DESCRIC
'Descricao'
, ; //X3_DESCSPA
'Descricao'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(160)
, ; //X3_USADO
''
, ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'S'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'04'
, ; //X3_ORDEM
cCampo + '_CODCON'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
6
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Memo Insert'
, ; //X3_TITULO
'Memo Insert'
, ; //X3_TITSPA
'Memo Insert'
, ; //X3_TITENG
'Memo Insert'
, ; //X3_DESCRIC
'Memo Insert'
, ; //X3_DESCSPA
'Memo Insert'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128)
, ; //X3_USADO
''
, ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'N'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'05'
, ; //X3_ORDEM
cCampo + '_CONDIC'
, ; //X3_CAMPO
'M'
, ; //X3_TIPO
10
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Condicao Ins'
, ; //X3_TITULO
'Condicao Ins'
, ; //X3_TITSPA
'Condicao Ins'
, ; //X3_TITENG
'Condicao Insert'
, ; //X3_DESCRIC
'Condicao Insert'
, ; //X3_DESCSPA
'Condicao Insert'
, ; //X3_DESCENG
''
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(160)
, ; //X3_USADO
"IF(!INCLUI,D_E_L_E_T_ = '' ,MSMM(" + cTabela + "->" + cCampo +"_TABELA))"
, ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'S'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'06'
, ; //X3_ORDEM
cCampo + '_CODDEL'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
6
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Memo Delete'
, ; //X3_TITULO
'Memo Delete'
, ; //X3_TITSPA
'Memo Delete'
, ; //X3_TITENG
'Memo Delete'
, ; //X3_DESCRIC
'Memo Delete'
, ; //X3_DESCSPA
'Memo Delete'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128)
, ; //X3_USADO
''
, ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'N'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'07'
, ; //X3_ORDEM
cCampo + '_CONDDEL'
, ; //X3_CAMPO
'M'
, ; //X3_TIPO
10
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Condicao Del'
, ; //X3_TITULO
'Condicao Del'
, ; //X3_TITSPA
'Condicao Del'
, ; //X3_TITENG
'Condicao Delete'
, ; //X3_DESCRIC
'Condicao Delete'
, ; //X3_DESCSPA
'Condicao Delete'
, ; //X3_DESCENG
''
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(160)
, ; //X3_USADO
"IF(!INCLUI,D_E_L_E_T_ = '' ,MSMM(" + cTabela + "->" + cCampo +"_TABELA))"
, ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'S'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
''
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

aAdd( aSX3, { ;
cTabela
, ; //X3_ARQUIVO
'08'
, ; //X3_ORDEM
cCampo + '_HABIL'
, ; //X3_CAMPO
'C'
, ; //X3_TIPO
1
, ; //X3_TAMANHO
0
, ; //X3_DECIMAL
'Habilitado'
, ; //X3_TITULO
'Habilitado'
, ; //X3_TITSPA
'Habilitado'
, ; //X3_TITENG
'Habilitado'
, ; //X3_DESCRIC
'Habilitado'
, ; //X3_DESCSPA
'Habilitado'
, ; //X3_DESCENG
'@!'
, ; //X3_PICTURE
''
, ; //X3_VALID
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(128) + ;
Chr(128) + Chr(128) + Chr(128) + Chr(128) + Chr(160)
, ; //X3_USADO
"" , ; //X3_RELACAO
''
, ; //X3_F3
0
, ; //X3_NIVEL
Chr(254) + Chr(192)
, ; //X3_RESERV
''
, ; //X3_CHECK
''
, ; //X3_TRIGGER
'U'
, ; //X3_PROPRI
'S'
, ; //X3_BROWSE
'A'
, ; //X3_VISUAL
'R'
, ; //X3_CONTEXT
''
, ; //X3_OBRIGAT
''
, ; //X3_VLDUSER
'1=Sim;2=Não'
, ; //X3_CBOX
''
, ; //X3_CBOXSPA
''
, ; //X3_CBOXENG
''
, ; //X3_PICTVAR
''
, ; //X3_WHEN
''
, ; //X3_INIBRW
''
, ; //X3_GRPSXG
''
, ; //X3_FOLDER
''
} ) //X3_PYME

//
// Atualizando dicionário
//

nPosArq := aScan( aEstrut, { |x| AllTrim( x ) == "X3_ARQUIVO" } )


nPosOrd := aScan( aEstrut, { |x| AllTrim( x ) == "X3_ORDEM" } )
nPosCpo := aScan( aEstrut, { |x| AllTrim( x ) == "X3_CAMPO" } )
nPosTam := aScan( aEstrut, { |x| AllTrim( x ) == "X3_TAMANHO" } )
nPosSXG := aScan( aEstrut, { |x| AllTrim( x ) == "X3_GRPSXG" } )

aSort( aSX3,,, { |x,y| x[nPosArq]+x[nPosOrd]+x[nPosCpo] < y[nPosArq]


+y[nPosOrd]+y[nPosCpo] } )

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 ajsuta tamanho
//
If !Empty( aSX3[nI][nPosSXG] )
SXG->( dbSetOrder( 1 ) )
If SXG->( MSSeek( aSX3[nI][nPosSXG] ) )
If aSX3[nI][nPosTam] <> SXG->XG_SIZE
aSX3[nI][nPosTam] := SXG->XG_SIZE
cTexto += "O tamanho do campo " + aSX3[nI][nPosCpo] +
" nao atualizado e foi mantido em ["
cTexto += AllTrim( Str( SXG->XG_SIZE ) ) + "]" + CRLF
cTexto += " por pertencer ao grupo de campos [" +
SX3->X3_GRPSXG + "]" + CRLF + CRLF
EndIf
EndIf
EndIf

SX3->( dbSetOrder( 2 ) )

If !( aSX3[nI][nPosArq] $ cAlias )
cAlias += aSX3[nI][nPosArq] + "/"
aAdd( aArqUpd, aSX3[nI][nPosArq] )
EndIf
If !SX3->( dbSeek( PadR( aSX3[nI][nPosCpo], nTamSeek ) ) )

//
// Busca ultima ocorrencia do alias
//
If ( aSX3[nI][nPosArq] <> cAliasAtu )
cSeqAtu := "00"
cAliasAtu := aSX3[nI][nPosArq]

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 nJ == nPosOrd // Ordem
FieldPut( FieldPos( aEstrut[nJ] ), cSeqAtu )

ElseIf FieldPos( aEstrut[nJ] ) > 0


FieldPut( FieldPos( aEstrut[nJ] ), aSX3[nI][nJ] )

EndIf
Next nJ

dbCommit()
MsUnLock()

cTexto += "Criado o campo " + aSX3[nI][nPosCpo] + CRLF

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]
SXG->( dbSetOrder( 1 ) )
If SXG->( MSSeek( SX3->X3_GRPSXG ) )
If aSX3[nI][nPosTam] <> SXG->XG_SIZE
aSX3[nI][nPosTam] := SXG->XG_SIZE
cTexto += "O tamanho do campo " + aSX3[nI]
[nPosCpo] + " nao atualizado e foi mantido em ["
cTexto += AllTrim( Str( SXG->XG_SIZE ) ) + "]"+
CRLF
cTexto += " por pertencer ao grupo de campos
[" + SX3->X3_GRPSXG + "]" + CRLF + CRLF
EndIf
EndIf
EndIf
//
// Verifica todos os campos
//
For nJ := 1 To Len( aSX3[nI] )

//
// Se o campo estiver diferente da estrutura
//
If aEstrut[nJ] == SX3->( FieldName( nJ ) ) .AND. ;
PadR( StrTran( AllToChar( SX3->( FieldGet( nJ )
) ), " ", "" ), 250 ) <> ;
PadR( StrTran( AllToChar( aSX3[nI][nJ] )
, " ", "" ), 250 ) .AND. ;
AllTrim( SX3->( FieldName( nJ ) ) ) <>
"X3_ORDEM"

cMsg := "O campo " + aSX3[nI][nPosCpo] + " está com o


" + SX3->( FieldName( nJ ) ) + ;
" com o conteúdo" + CRLF + ;
"[" + RTrim( AllToChar( SX3->( FieldGet( nJ ) )
) ) + "]" + CRLF + ;
"que será substituido pelo NOVO conteúdo" +
CRLF + ;
"[" + RTrim( AllToChar( aSX3[nI][nJ] ) ) + "]"
+ CRLF + ;
"Deseja substituir ? "

If lTodosSim
nOpcA := 1
ElseIf lTodosNao
nOpcA := 2
Else
nOpcA := Aviso( "ATUALIZAÇÃO DE DICIONÁRIOS E
TABELAS", cMsg, { "Sim", "Não", "Sim p/Todos", "Não p/Todos" }, 3, "Diferença de
conteúdo - SX3" )
lTodosSim := ( nOpcA == 3 )
lTodosNao := ( nOpcA == 4 )

If lTodosSim
nOpcA := 1
lTodosSim := MsgNoYes( "Foi selecionada a
opção de REALIZAR TODAS alterações no SX3 e NÃO MOSTRAR mais a tela de aviso." +
CRLF + "Confirma a ação [Sim p/Todos] ?" )
EndIf

If lTodosNao
nOpcA := 2
lTodosNao := MsgNoYes( "Foi selecionada a
opção de NÃO REALIZAR nenhuma alteração no SX3 que esteja diferente da base e NÃO
MOSTRAR mais a tela de aviso." + CRLF + "Confirma esta ação [Não p/Todos]?" )
EndIf

EndIf

If nOpcA == 1
cTexto += "Alterado o campo " + aSX3[nI]
[nPosCpo] + CRLF
cTexto += " " + PadR( SX3-
>( FieldName( nJ ) ), 10 ) + " de [" + AllToChar( SX3->( FieldGet( nJ ) ) ) + "]" +
CRLF
cTexto += " para [" +
AllToChar( aSX3[nI][nJ] ) + "]" + CRLF + CRLF

RecLock( "SX3", .F. )


FieldPut( FieldPos( aEstrut[nJ] ), aSX3[nI][nJ]
)
dbCommit()
MsUnLock()
EndIf

EndIf

Next

EndIf

oProcess:IncRegua2( "Atualizando Campos de Tabelas (SX3)..." )

Next nI

cTexto += CRLF + "Final da Atualizacao" + " SX3" + CRLF + Replicate( "-", 128
) + CRLF + CRLF

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ FSAtuSIX º Autor ³ TOTVS Protheus º Data ³ 04/01/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento da gravacao do SIX - Indices ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ FSAtuSIX - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function FSAtuSIX( cTexto )
Local aEstrut := {}
Local aSIX := {}
Local lAlt := .F.
Local lDelInd := .F.
Local nI := 0
Local nJ := 0

cTexto += "Inicio da Atualizacao" + " SIX" + CRLF + CRLF

aEstrut := { "INDICE" , "ORDEM" , "CHAVE", "DESCRICAO", "DESCSPA" , ;


"DESCENG", "PROPRI", "F3" , "NICKNAME" , "SHOWPESQ" }

//
// Tabela SZZ
//
aAdd( aSIX, { ;
cTabela
, ; //INDICE
'1'
, ; //ORDEM
"" + cCampo +"_FILIAL+" + cCampo +"_TABELA"
, ; //CHAVE
'Tabela'
, ; //DESCRICAO
'Tabela'
, ; //DESCSPA
'Tabela'
, ; //DESCENG
'U'
, ; //PROPRI
''
, ; //F3
''
, ; //NICKNAME
'S'
} ) //SHOWPESQ

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSIX ) )

dbSelectArea( "SIX" )
SIX->( dbSetOrder( 1 ) )

For nI := 1 To Len( aSIX )

lAlt := .F.

If !SIX->( dbSeek( aSIX[nI][1] + aSIX[nI][2] ) )


RecLock( "SIX", .T. )
lDelInd := .F.
cTexto += "Índice criado " + aSIX[nI][1] + "/" + aSIX[nI][2] + "
- " + aSIX[nI][3] + CRLF
Else
lAlt := .F.
RecLock( "SIX", .F. )
EndIf

If !StrTran( Upper( AllTrim( CHAVE ) ), " ", "") == ;


StrTran( Upper( AllTrim( aSIX[nI][3] ) ), " ", "" )
aAdd( aArqUpd, aSIX[nI][1] )

If lAlt
lDelInd := .T. // Se for alteracao precisa apagar o indice
do banco
cTexto += "Índice alterado " + aSIX[nI][1] + "/" + aSIX[nI]
[2] + " - " + aSIX[nI][3] + CRLF
EndIf

For nJ := 1 To Len( aSIX[nI] )


If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSIX[nI][nJ] )
EndIf
Next nJ
If lDelInd
TcInternal( 60, RetSqlName( aSIX[nI][1] ) + "|" +
RetSqlName( aSIX[nI][1] ) + aSIX[nI][2] ) // Exclui sem precisar baixar o TOP
EndIf

EndIf

dbCommit()
MsUnLock()

oProcess:IncRegua2( "Atualizando índices..." )

Next nI

cTexto += CRLF + "Final da Atualizacao" + " SIX" + CRLF + Replicate( "-", 128
) + CRLF + CRLF

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ FSAtuSX7 º Autor ³ TOTVS Protheus º Data ³ 05/02/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento da gravacao do SX7 - Gatilhos ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ FSAtuSX7 - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function FSAtuSX7( cTexto )
Local aEstrut := {}
Local aSX7 := {}
Local cAlias := ""
Local nI := 0
Local nJ := 0
Local nTamSeek := Len( SX7->X7_CAMPO )

cTexto += "Inicio da Atualizacao" + " SX7" + CRLF + CRLF

aEstrut := { "X7_CAMPO", "X7_SEQUENC", "X7_REGRA", "X7_CDOMIN", "X7_TIPO",


"X7_SEEK", ;
"X7_ALIAS", "X7_ORDEM" , "X7_CHAVE", "X7_PROPRI", "X7_CONDIC" }

//
// Campo Z9_TABELA
//
aAdd( aSX7, { ;
cCampo +"_TABELA"
, ; //X7_CAMPO
'001'
, ; //X7_SEQUENC
"POSICIONE('SX2',1,M->" + cCampo + "_TABELA,'X2_NOME')"
, ; //X7_REGRA
"" + cCampo +"_DESCRI"
, ; //X7_CDOMIN
'P'
, ; //X7_TIPO
'N'
, ; //X7_SEEK
''
, ; //X7_ALIAS
0
, ; //X7_ORDEM
''
, ; //X7_CHAVE
'U'
, ; //X7_PROPRI
''
} ) //X7_CONDIC

//
// Atualizando dicionário
//
oProcess:SetRegua2( Len( aSX7 ) )

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] + "/"
cTexto += "Foi incluído o gatilho " + aSX7[nI][1] + "/" +
aSX7[nI][2] + CRLF
EndIf

RecLock( "SX7", .T. )


For nJ := 1 To Len( aSX7[nI] )
If FieldPos( aEstrut[nJ] ) > 0
FieldPut( FieldPos( aEstrut[nJ] ), aSX7[nI][nJ] )
EndIf
Next nJ

dbCommit()
MsUnLock()

EndIf
oProcess:IncRegua2( "Atualizando Arquivos (SX7)..." )

Next nI

cTexto += CRLF + "Final da Atualizacao" + " SX7" + CRLF + Replicate( "-", 128
) + CRLF + CRLF

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³ESCEMPRESAºAutor ³ Ernani Forastieri º Data ³ 27/09/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao Generica para escolha de Empresa, montado pelo SM0_ º±±
±±º ³ Retorna vetor contendo as selecoes feitas. º±±
±±º ³ Se nao For marcada nenhuma o vetor volta vazio. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function EscEmpresa()
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Parametro nTipo ³
//³ 1 - Monta com Todas Empresas/Filiais ³
//³ 2 - Monta so com Empresas ³
//³ 3 - Monta so com Filiais de uma Empresa ³
//³ ³
//³ Parametro aMarcadas ³
//³ Vetor com Empresas/Filiais pre marcadas ³
//³ ³
//³ Parametro cEmpSel ³
//³ Empresa que sera usada para montar selecao ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Local aSalvAmb := GetArea()
Local aSalvSM0 := {}
Local aRet := {}
Local aVetor := {}
Local oDlg := NIL
Local oChkMar := NIL
Local oLbx := NIL
Local oMascEmp := NIL
Local oMascFil := NIL
Local oButMarc := NIL
Local oButDMar := NIL
Local oButInv := NIL
Local oSay := NIL
Local oOk := LoadBitmap( GetResources(), "LBOK" )
Local oNo := LoadBitmap( GetResources(), "LBNO" )
Local lChk := .F.
Local lOk := .F.
Local lTeveMarc:= .F.
Local cVar := ""
Local cNomEmp := ""
Local cMascEmp := "??"
Local cMascFil := "??"

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, SM0->M0_CODIGO, SM0->M0_CODFIL, SM0->M0_NOME,
SM0->M0_FILIAL } )
EndIf

dbSkip()
End

RestArea( aSalvSM0 )

Define MSDialog oDlg Title "" From 0, 0 To 270, 396 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: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 Size 40, 007
Pixel Of oDlg;
on Click MarcaTodos( lChk, @aVetor, oLbx )

@ 123, 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

// 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, " ", "?" ), cMascFil := StrTran( cMascFil,
" ", "?" ), oMascEmp:Refresh(), .T. ) ;
Message "Máscara Empresa ( ?? )" Of oDlg
@ 123, 50 Button oButMarc Prompt "&Marcar" Size 32, 12 Pixel Action
( MarcaMas( oLbx, aVetor, cMascEmp, .T. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Marcar usando máscara ( ?? )" Of oDlg
@ 123, 80 Button oButDMar Prompt "&Desmarcar" Size 32, 12 Pixel Action
( MarcaMas( oLbx, aVetor, cMascEmp, .F. ), VerTodos( aVetor, @lChk, oChkMar ) ) ;
Message "Desmarcar usando máscara ( ?? )" Of oDlg

Define SButton From 111, 125 Type 1 Action ( RetSelecao( @aRet, aVetor ),
oDlg:End() ) OnStop "Confirma a Seleção" Enable Of oDlg
Define SButton From 111, 158 Type 2 Action ( IIf( lTeveMarc, aRet :=
aMarcadas, .T. ), oDlg:End() ) OnStop "Abandona a Seleção" Enable Of oDlg
Activate MSDialog oDlg Center

RestArea( aSalvAmb )
dbSelectArea( "SM0" )
dbCloseArea()

Return aRet

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³MARCATODOSºAutor ³ Ernani Forastieri º Data ³ 27/09/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao Auxiliar para marcar/desmarcar todos os itens do º±±
±±º ³ ListBox ativo º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function MarcaTodos( lMarca, aVetor, oLbx )
Local nI := 0

For nI := 1 To Len( aVetor )


aVetor[nI][1] := lMarca
Next nI

oLbx:Refresh()

Return

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³INVSELECAOºAutor ³ Ernani Forastieri º Data ³ 27/09/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao Auxiliar para inverter selecao do ListBox Ativo º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
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

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³RETSELECAOºAutor ³ Ernani Forastieri º Data ³ 27/09/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao Auxiliar que monta o retorno com as selecoes º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
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

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³ MARCAMAS ºAutor ³ Ernani Forastieri º Data ³ 20/11/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao para marcar/desmarcar usando mascaras º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
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

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºRotina ³ VERTODOS ºAutor ³ Ernani Forastieri º Data ³ 20/11/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Funcao auxiliar para verificar se estao todos marcardos º±±
±±º ³ ou nao º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Generico º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
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

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa ³ MyOpenSM0º Autor ³ TOTVS Protheus º Data ³ 04/01/2013 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±º Descricao³ Funcao de processamento abertura do SM0 modo exclusivo ³±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±³ Uso ³ MyOpenSM0 - Gerado por EXPORDIC / Upd. V.4.10.5 EFS ³±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Static Function MyOpenSM0(lShared)

Local lOpen := .F.


Local nLoop := 0

For nLoop := 1 To 20
dbUseArea( .T., , "SIGAMAT.EMP", "SM0", .T., .F. )

If !Empty( Select( "SM0" ) )


lOpen := .T.
dbSetIndex( "SIGAMAT.IND" )
Exit
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

/*
Tela para Múltiplas Seleções de Empresas/Filiais
João Zabotto - 21/12/2012
*/
Static Function ZTABELA()
Local aSalvAmb := GetArea()
Local oDlg := NIL
Local oOk := LoadBitmap( GetResources(), "LBOK" )
Local oNo := LoadBitmap( GetResources(), "LBNO" )
Local oGetTabela
Local cGetTabela := Space(3)
Local oSayTabela

Define MSDialog oDlg Title "" From 0, 0 To 150, 200 Pixel

oDlg:cToolTip := "Tela para Múltiplas Seleções de Empresas/Filiais"

oDlg:cTitle := "Selecione a(s) Empresa(s) para Atualização"

@ 013, 004 SAY oSayTabela PROMPT "Tabela:" SIZE 025, 007 OF oDlg COLORS 0,
16777215 PIXEL
@ 013, 031 MSGET oGetTabela VAR cGetTabela SIZE 060, 012 OF oDlg COLORS 0,
16777215 PIXEL

Define SButton From 035, 030 Type 1 Action ( oDlg:End() ) Enable Of oDlg
Define SButton From 035, 065 Type 2 Action ( oDlg:End() ) Enable Of oDlg

Activate MSDialog oDlg Center

Return cGetTabela

/*
Define os parâmetros da SX6
*/
Static Function ZPARAM(cTexto)

Local aEstrut := {}
Local aSX6 := {}
Local cAlias := ""
Local cMsg := ""
Local lContinua := .T.
Local lReclock := .T.
Local lTodosNao := .F.
Local lTodosSim := .F.
Local nI := 0
Local nJ := 0
Local nOpcA := 0
Local nTamFil := Len( SX6->X6_FIL )
Local nTamVar := Len( SX6->X6_VAR )

cTexto += "Inicio da Atualizacao" + " SX6" + CRLF + 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_PYME" }
aAdd( aSX6, { ;
' '
, ; //X6_FIL
'ZZ_CCETSS'
, ; //X6_VAR
'C'
, ; //X6_TIPO
'Alias do banco de Dados TSS' , ; //X6_DESCRIC
'Alias do banco de Dados TSS' , ; //X6_DSCSPA
'Alias do banco de Dados TSS' , ; //X6_DSCENG
'Alias do banco de Dados TSS' , ; //X6_DESC1
'Alias do banco de Dados TSS' , ; //X6_DSCSPA1
'Alias do banco de Dados TSS' , ; //X6_DSCENG1
'Alias do banco de Dados TSS' , ; //X6_DESC2
'Alias do banco de Dados TSS' , ; //X6_DSCSPA2
'Alias do banco de Dados TSS' , ; //X6_DSCENG2
'[TSSTEST]'
, ; //X6_CONTEUD
''
, ; //X6_CONTSPA
''
, ; //X6_CONTENG
'U'
, ; //X6_PROPRI
''
} ) //X6_PYME

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.
cTexto += "Foi incluído o parâmetro " + aSX6[nI][1] + aSX6[nI][2]
+ " Conteúdo [" + AllTrim( aSX6[nI][13] ) + "]"+ CRLF
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

Return