RDMAKE
#include "protheus.ch" #include "totvs.ch"
User Function FIXSEQBX()
MsApp():New( "SIGAFIN" ) oApp:cInternet := Nil __cInterNet := NIL *oApp:bMainInit := { | ( oApp:lFlat := .F. , WizardSeq() , FnQuit(oApp) ) }* oApp:CreateEnv() OpenSM0()
PtSetTheme( "TEMAP10" ) SetFunName( "FIXSEQBX" ) oApp:lMessageBar := .T.
oApp:Activate()
Return Nil
Static Function WizardSeq()
Local oWizard As Object Local aBrowse As Array
Static __TmpTbl As Object
__TmpTbl := NIL aBrowse := {} oWizard := FwWizardControl():New() oWizard:ActiveUISteps()
//---------------------------- // Pagina 1 - Apresentação //---------------------------- *o1stPage := oWizard:AddStep("1STSTEP",{ | Panel | cria_pn1(Panel)})* o1stPage:SetStepDescription("Apresentação") o1stPage:SetNextTitle("Avançar") *o1stPage:SetNextAction({ | .T.})* *o1stPage:SetCancelAction({ | .T.})*
//--------------------------------------- // Pagina 2 - Escolha do grupo de empresas //--------------------------------------- *o2ndPage := oWizard:AddStep("2RDSTEP", { | Panel | cria_pn2(Panel,@aBrowse)})* o2ndPage:SetStepDescription("Grupo de empresa") o2ndPage:SetNextTitle("Avançar") o2ndPage:SetPrevTitle("Retornar") *o2ndPage:SetNextAction({ | .T.})* *o2ndPage:SetPrevWhen({ | .F. })* *o2ndPage:SetCancelAction({ | .T.})*
//---------------------------- // Pagina 3 - Aviso do backup //---------------------------- *o3rdPage := oWizard:AddStep("3NDSTEP", { | Panel | cria_pn3(Panel,aBrowse)})* o3rdPage:SetStepDescription("Avisos") o3rdPage:SetNextTitle("Concluir") o3rdPage:SetPrevTitle("Retornar") *o3rdPage:SetNextAction({ | ExecFix(aBrowse) })* *o3rdPage:SetPrevAction({ | .T.})* *o3rdPage:SetCancelAction({ | .T.})*
oWizard:Activate() oWizard:Destroy()
Return
Static Function cria_pn1(oPanel As Object)
Local oSay0 AS Object Local oSay1 AS Object Local oSay2 AS Object Local oFontAS Object Local oFont2 AS Object
oFont := TFont():New( ,, -25, .T., .T.,,,,, ) oFont2 := TFont():New("Arial",,-15,,.F.,,,,,,.F.,.F.) *oSay0 := TSay():New(010,015, { | "Ajuste sequencia de baixa" }, oPanel,,oFont ,,,,.T.,CLR_BLUE, )* *oSay1 := TSay():New(045,015, { | "Esse FIX tem como objetivo ajustar a sequencia de baixa dos campos que estiverem"}, oPanel,,oFont2,,,,.T.,CLR_BLACK,)* *oSay1 := TSay():New(060,015, { | "contidos no grupo de campos 134 - Sequencia de baixa"}, oPanel,,oFont2,,,,.T.,CLR_BLACK,)* *oSay2 := TSay():New(075,015, { | "Clique no botão avançar para continuar" }, oPanel,,oFont2,,,,.T.,CLR_BLACK,)*
Return
Static Function cria_pn2(oPanel,aBrowse) Local oMrkBrowse Local nX := 0 Local oOk := LoadBitMap(GetResources(), "LBOK") Local oNo := LoadBitMap(GetResources(), "LBNO")
aGrupo := FWAllGrpCompany()
For nX := 1 to len(aGrupo) <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="6a506289-76bd-489b-9c5c-938202c98e7c"><ac:plain-text-body><![CDATA[ Aadd(aBrowse,{.F.,aGrupo[nX],FWGrpName(aGrupo[nX])}) ]]></ac:plain-text-body></ac:structured-macro> Next nX
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="0249e3d3-070c-4d6a-840d-48b499e44f74"><ac:plain-text-body><![CDATA[ *oMrkBrowse := TWBrowse():New( 010 , 010 , (oPanel:nClientWidth/2 - 020) , oPanel:nClientHeight/2 - 020 ,,,,oPanel,,,,,{ | IIF(!Empty(aBrowse[oMrkBrowse:nAt][2]), aBrowse[oMrkBrowse:nAt][1] := !aBrowse[oMrkBrowse:nAt][1] , '') , oMrkBrowse:Refresh() },,,,,,,.F.,,.T.,,.F.,,, )* ]]></ac:plain-text-body></ac:structured-macro> oMrkBrowse:SetArray(aBrowse)
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1588d25b-b15a-4bae-bc15-b04d42090260"><ac:plain-text-body><![CDATA[ *oMrkBrowse:AddColumn(TCColumn():New("", { | Iif(aBrowse[oMrkBrowse:nAt][1],oOK,oNO)},,,,'CENTER',20,.T.,.F.,,,,.F.,))* ]]></ac:plain-text-body></ac:structured-macro> <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b0035ae4-5e05-4672-8e34-a7b34b194db6"><ac:plain-text-body><![CDATA[ *oMrkBrowse:AddColumn(TCColumn():New("EMPRESA", { | aBrowse[oMrkBrowse:nAt][2] },,,,'LEFT' ,40,.F.,.F.,,,,.F.,))* ]]></ac:plain-text-body></ac:structured-macro> <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3a97388d-f7cc-4d81-a2fa-15c178ccffe7"><ac:plain-text-body><![CDATA[ *oMrkBrowse:AddColumn(TCColumn():New("DESCRIÇÃO", { | aBrowse[oMrkBrowse:nAt][3] },,,,'LEFT' ,70,.F.,.F.,,,,.F.,))* ]]></ac:plain-text-body></ac:structured-macro> Return
Static Function cria_pn3(oPanel As Object, aBrowse As Array)
Local oSay0 AS Object Local oSay1 AS Object Local oFontAS Object Local oFont2 AS Object
oFont := TFont():New( ,, -25, .T., .T.,,,,, ) oFont2 := TFont():New("Arial",,-15,,.F.,,,,,,.F.,.F.) *oSay0 := TSay():New(010,015, { | "Verificação do ambiente" }, oPanel,,oFont ,,,,.T.,CLR_BLUE, )* *oSay1 := TSay():New(045,015, { | "Execute o processo em modo exclusivo"}, oPanel,,oFont2,,,,.T.,CLR_BLACK,)* *oSay1 := TSay():New(060,015, { | "Execute o FIX em uma base de homologação para validar os ajustes"}, oPanel,,oFont2,,,,.T.,CLR_BLACK,)* *oSay1 := TSay():New(075,015, { | "Faça o backup do banco de dados antes de iniciar a execução"}, oPanel,,oFont2,,,,.T.,CLR_BLACK,)*
Return
Static Function ExecFix(aBrowse As Array) Local nX As Numeric Local aTables := {"SE2","SE5","FK2","FK1","FK5","SE1"}
For nX := 1 to Len(aBrowse) <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="5b055a1b-0a6d-42bb-aa7f-666b74bc786e"><ac:plain-text-body><![CDATA[ If aBrowse[nX][1] ]]></ac:plain-text-body></ac:structured-macro> <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="e312b4b4-e734-4071-8f77-830b6af4bb32"><ac:plain-text-body><![CDATA[ *FWMsgRun(, { | StartRPC(aBrowse[nX][2],aTables) }, "Processando", "Atualizando dados empresa "+aBrowse[nX][2])* ]]></ac:plain-text-body></ac:structured-macro> Endif Next nX
Return .T.
Static Function StartRPC(cGrpEmp,aTables)
RpcSetType(3) RpcSetEnv( cGrpEmp,,,,,,aTables,,,.T. )
FnSeqBx() RpcClearEnv() Return
Static Function FnSeqBx() Local aTables := {} Local nX := 0 Local cAlias := "" Local nY := 0 Local nTamNew := 0 Local cLogMsg := ""
aFields := FWSX3Util():GetAllGroupFields( "134" )
//Pego o tamanho de qualquer campos, pois todos terão o mesmo tamanho <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="dba483c2-a175-451e-8844-c3d288508620"><ac:plain-text-body><![CDATA[ nTamNew := FWSX3Util():GetFieldStruct( aFields[1] )[3] ]]></ac:plain-text-body></ac:structured-macro> For nY := 1 to Len(aFields) <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fda6bdee-cce3-4b72-8410-8457e0701870"><ac:plain-text-body><![CDATA[ cAlias := SUBSTR(aFields[nY], 1, AT("_", aFields[nY]) - 1) ]]></ac:plain-text-body></ac:structured-macro> If Len(cAlias) == 2 cAlias := "S"+cAlias Endif <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4fc6999a-01f0-4223-ba18-81c736c8ada6"><ac:plain-text-body><![CDATA[ Aadd(aTables,{cAlias,aFields[nY]}) ]]></ac:plain-text-body></ac:structured-macro> Next nY
For nX := 1 to Len(aTables) <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="93eb615a-b968-4519-895c-8a4981406007"><ac:plain-text-body><![CDATA[ UPDATETBL(aTables[nX][1],aTables[nX][2],nTamNew,@cLogMsg) ]]></ac:plain-text-body></ac:structured-macro> Next nX
If TCSPExist("UPDTMP_"+cEmpAnt) If TcSqlExec("DROP PROCEDURE UPDTMP_"+cEmpAnt) <> 0 Conou("Erro ao deletar Stored procedure "+ TcSqlError()) Endif EndIf
FnLog(cLogMsg)
Return
Static Function UPDATETBL(cTable,cField,nTamNew,cLogMsg) Local cQuery := "" Local cErro := "" Local cOut := "" Local cRet := "" Local nError := 0 Local lRet := .T. Local cAliasQry := "" Local cCampo := cTable + "->" + cField
If TCSPExist("UPDTMP_"+cEmpAnt) If TcSqlExec("DROP PROCEDURE UPDTMP_"+cEmpAnt) <> 0 lRet := .F. Endif EndIf
If lRet If Alltrim(TcGetDB()) == "ORACLE" cQuery := "SELECT R_E_C_N_O_ RECNO" cQuery += "FROM "+RetSqlName(cTable) + " " cQuery = "WHERE "+cField" <> '' AND D_E_L_E_T_ = '' "
cQuery := ChangeQuery(cQuery) cAliasQry := MpSysOpenQuery(cQuery)
(cAliasQry)->(DbGotop()) DbSelectArea(cTable) If (cAliasQry)->(!EOF()) WHILE (cAliasQry)->(!EOF()) &(cTable)>(DbGoto((cAliasQry)>RECNO))
If Len(ALLTRIM(&cCampo)) < nTamNew cZero := Replicate("0", nTamNew - Len(ALLTRIM(&cCampo))) Reclock(cTable,.F.) Do Case CASE cTable == "FIP" FIP->FIP_SEQBX := cZero + ALLTRIM(FIP->FIP_SEQBX) CASE cTable == "FIS" FIS->FIS_SEQBX := cZero + ALLTRIM(FIS->FIS_SEQBX) CASE cTable == "FK1" FK1->FK1_SEQ := cZero + ALLTRIM(FK1->FK1_SEQ) CASE cTable == "FK2" FK2->FK2_SEQ := cZero + ALLTRIM(FK2->FK2_SEQ) CASE cTable == "FK5" FK5->FK5_SEQ := cZero + ALLTRIM(FK5->FK5_SEQ) CASE cTable == "FR2" FR2->FR2_SEQBX := cZero + ALLTRIM(FR2->FR2_SEQBX) CASE cTable == "GZK" GZK->GZK_SEQ := cZero + ALLTRIM(GZK->GZK_SEQ) CASE cTable == "MDM" MDM->MDM_SEQ := cZero + ALLTRIM(MDM->MDM_SEQ) CASE cTable == "N9G" N9G->N9G_SEQBXA := cZero + ALLTRIM(N9G->N9G_SEQBXA) CASE cTable == "SE1" SE1->E1_SEQBX := cZero + ALLTRIM(SE1->E1_SEQBX) CASE cTable == "SE2" SE2->E2_SEQBX := cZero + ALLTRIM(SE2->E2_SEQBX) CASE cTable == "SE5" SE5->E5_SEQ := cZero + ALLTRIM(SE5->E5_SEQ) CASE cTable == "SEI" SEI->EI_SEQ := cZero + ALLTRIM(SEI->EI_SEQ) CASE cTable == "SEV" SEV->EV_SEQ := cZero + ALLTRIM(SEV->EV_SEQ) CASE cTable == "SEZ" SEZ->EZ_SEQ := cZero + ALLTRIM(SEZ->EZ_SEQ) CASE cTable == "SFQ" SFQ->FQ_SEQORI := cZero + ALLTRIM(SFQ->FQ_SEQORI) CASE cTable == "SFQ" SFQ->FQ_SEQDES := cZero + ALLTRIM(SFQ->FQ_SEQDES) END CASE MsUnLock() Endif (cAliasQry)->(DbSkip()) ENDDO cLogMsg = 'Atualização executada com sucesso, Tabela '+cTable ' Atualizada ' + chr(10) Endif Else cQuery := "CREATE PROCEDURE UPDTMP_" + cEmpAnt + " AS " + CRLF cQuery = "DECLARE CUR_SEQUEN CURSOR FOR SELECT "+cField", R_E_C_N_O_ " + CRLF cQuery += "FROM "+RetSqlName(cTable) + CRLF + " " cQuery = "WHERE "+cField" <> '' AND LEN("cField") < "cValTochar(nTamNew+1)" AND D_E_L_E_T_ = '' " + CRLF cQuery += "DECLARE @NEWSEQ CHAR(4) " + CRLF cQuery += "DECLARE @FIELD CHAR(10) " + CRLF cQuery += "DECLARE @RECNO INT " + CRLF
cQuery += "OPEN CUR_SEQUEN " + CRLF
cQuery += "FETCH NEXT FROM CUR_SEQUEN " + CRLF cQuery += "INTO @FIELD, @RECNO " + CRLF
cQuery += "WHILE @@FETCH_STATUS = 0 " + CRLF cQuery += "BEGIN " + CRLF *cQuery = "SELECT @NEWSEQ = REPLICATE( '0' ,"+cValTochar(nTamNew)" - LEN(@FIELD)) | @FIELD " + CRLF* cQuery = "UPDATE "+RetSqlName(cTable)" SET "cField" = @NEWSEQ WHERE R_E_C_N_O_ = @RECNO " + CRLF
cQuery += "FETCH NEXT FROM CUR_SEQUEN " + CRLF cQuery += "INTO @FIELD, @RECNO " + CRLF cQuery += "END " + CRLF
cQuery += "CLOSE CUR_SEQUEN " + CRLF cQuery += "DEALLOCATE CUR_SEQUEN " + CRLF
cRet := msparsefull(cQuery,Alltrim(TcGetDB()), @cErro, @cOut)
If cRet == '1' cLogMsg += "Resultado: Parse da query executado com sucesso!" + chr(10) nError := TcSqlExec(cOut)
If nError < 0 cLogMsg += 'Erro na criação da Stored Procedure : ' + TcSqlError() + chr(10) Else TCSPEXEC( xProcedures("UPDTMP") ) If !Empty(TcSqlError()) cLogMsg += 'Erro na execução da Stored Procedure : ' + TcSqlError() + chr(10) Else cLogMsg = 'Procedure executada com sucesso, Tabela '+cTable ' Atualizada ' + chr(10) Endif Endif Else cLogMsg += "Resultado: Falha!" + chr(10) + "Error: " + cErro + chr(10) + "Parcial: " + cOut Endif Endif Endif
Return
Static Function FnLog(cLogText) Local cLogFile As Character Local cLogHead As Character Local lContinua As Logical Local nHandle As Numeric
lContinua := .T. cLogFile := "\SYSTEM\FIXSEQBX.log"
If !File(cLogFile) nHandle := FCreate( cLogFile ) If nHandle == -1 lContinua := .F. Else cLogHead:= DToC(date()) + CRLF FSeek ( nHandle, 0, 2 )// Posiciona no final do arquivo. FWrite( nHandle, cLogHead, Len(cLogHead) ) FClose(nHandle)
EndIf EndIf
If lContinua // Grava o texto no Arquivo de LOG <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="edde1928-f153-4e00-8e5c-44d3e2c5b9da"><ac:plain-text-body><![CDATA[ cLogText := "Execução da THREAD" + "[" + AllTrim(Str(ThreadID())) + "]" + CRLF + cLogText; ]]></ac:plain-text-body></ac:structured-macro> nHandle := FOpen(cLogFile, 2 ) FSeek ( nHandle, 0, 2 )// Posiciona no final do arquivo. FWrite( nHandle, cLogText, Len(cLogText) ) FClose( nHandle ) EndIf
Return
Static Function FnQuit(oApp)
oApp:CreateEnv()
MsgInfo("Foi gerado um arquivo de log na system com o nome FIXSEQBX.log com as informações da execução","LOG de processamento") Final( "Encerramento Normal" , "" )
Return
|
---|