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)
If aBrowse[nX][1]
FWMsgRun(, {|| StartRPC(aBrowse[nX][2],aTables) }, "Processando", "Atualizando dados empresa "+aBrowse[nX][2])
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
nTamNew := FWSX3Util():GetFieldStruct( aFields[1] )[3]
For nY := 1 to Len(aFields)
cAlias := SUBSTR(aFields[nY], 1, AT("_", aFields[nY]) - 1)
If Len(cAlias) == 2
cAlias := "S"+cAlias
Endif
Aadd(aTables,{cAlias,aFields[nY]})
Next nY
For nX := 1 to Len(aTables)
UPDATETBL(aTables[nX][1],aTables[nX][2],nTamNew,@cLogMsg)
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
cLogText := "Execução da THREAD" + "[" + AllTrim(Str(ThreadID())) + "]" + CRLF + cLogText;
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
|