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