Árvore de páginas

Linha de Produto:

Microsiga Protheus

Segmento:

Central de Obrigações

Módulo:

SIGACEN

Função:

U_CenRmTAB

Situação:

Identificado através da rotina importação em massa, que os arquivos .csv contém caracteres especiais (TAB) no campo "Nome da Mãe", o qual gera a crítica B025 na tabela de críticas (B3F).

Solução:

Criado rotina para remover os caracteres "TAB" do campo nome mãe (B3K_NOMMAE) da tabela de beneficiários (B3K).

Para executar a rotina deve-se:

  • Efetuar backup da tabela B3K.
  • A partir da tela inicial de execução do smartclient, chamar a função U_CENRMTAB
  • Informar o código da empresa. Exemplo: 01 - Clicar em continuar.
  • Aguardar o processamento. Ao final será exibido a quantidade de registros corrigidos.

OBS: Essa rotina corrige apenas o conteúdo do campo B3K_NOMMAE para os registros que contém o caracter "TAB" no mesmo e estão criticados na tabela B3F.

Exemplo:

Abaixo segue o Programa que disponibiliza a atualização acima. Basta compilar o programa e seguir os passos acima.

Programa:

#INCLUDE "PROTHEUS.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "FILEIO.CH"  

/*
Descricao : Verifica e ajusta registros do campo B3K_NOMMAE que contenham caracter "TAB"
*/

user function CenRmTAB()

    Local cTitulo := "Ajusta Campo Nome Mãe Tabela B3K"
    PRIVATE cEm := Space(2)

    DEFINE MSDIALOG oDlg TITLE cTitulo FROM 000,000 TO 250,375 PIXEL 

        @ 010,010 SAY "Esta rotina verifica a existência e remove os  "     SIZE 200,10 OF oDlg PIXEL
        @ 020,010 SAY "caracteres TAB do campo Nome da Mae da tabela B3K. " SIZE 200,10 OF oDlg PIXEL

        @ 040,010 SAY "Antes de continuar, certifique-se de que esteja com acesso " SIZE 200,10 OF oDlg PIXEL
        @ 050,010 SAY "exclusivo ao sistema e de ter backup do banco de dados. "    SIZE 200,10 OF oDlg PIXEL
        
        @ 070,010 SAY "Empresa: " SIZE 55,07 OF oDlg PIXEL
        @ 068,050 MSGET cEm SIZE 35,11 OF oDlg PIXEL /*F3 "SM0"*/
        
        @ 110,75  BUTTON "Continuar" SIZE 060, 010 PIXEL OF oDlg ACTION (regua(),oDlg:End())
        @ 110,150 BUTTON "Sair"      SIZE 030, 010 PIXEL OF oDlg ACTION (oDlg:End())

    ACTIVATE MSDIALOG oDlg CENTERED

return(NIL)

//--------------------------------------------------------------------------------------------------------

Static Function regua()

    Processa( {|| UpdNmMae() }, "Aguarde...", "Atualizando conteudo dos campos...",.F.)

Return

//--------------------------------------------------------------------------------------------------------

Static Function UpdNmMae()

    Local cQuery    := ""
    Local cMae      := ""
    Local cMsg      := "Não foram encontrados registros com inconsistências no nome da mãe na tabela B3K"
    Local nStatus   := 0
    Local nI        := 0
    Local aNomes    := {}
    Private cAlias  := GetNextAlias()
    Private cAlias2 := GetNextAlias()

    rpcSetType(3)    
    rpcSetEnv( AllTrim(cEm), ,,,GetEnvServer(),, )

    cQuery += " SELECT B3K_FILIAL, B3K_MATRIC, B3K_NOMMAE " + CRLF
    cQuery += " FROM " + RetSQLName("B3K") + " " + CRLF
    cQuery += " WHERE B3K_MATRIC IN ( SELECT B3F_IDEORI FROM " + RetSQLName("B3F") + " WHERE B3F_CODCRI = 'B025' AND D_E_L_E_T_ = '' ) " + CRLF
    cQuery += " AND D_E_L_E_T_ = '' " + CRLF

    nStatus := TCSQLExec(cQuery) 
    if (nStatus < 0)
        alert("TCSQLError() " + TCSQLError())
        RETURN
    endif           

    dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAlias,.T.,.T.)
    (cAlias)->( dbGoTop() )  

    aSize(aNomes,(cAlias)->(RECCOUNT()))

    while (cAlias)->(!Eof())
        cMae := Alltrim((cAlias)->B3K_NOMMAE)
        If (right(cMae,1) == "    " .OR. left(cMae,1) == "    " .OR. right(cMae,1) == CHR(9) .OR. left(cMae,1) == CHR(9) )
            aAdd(aNomes, { (cAlias)->B3K_FILIAL, (cAlias)->B3K_MATRIC, cMae } ) 
        EndIf
        (cAlias)->(DBSkip())
    EndDo

    For nI := 1 To Len(aNomes)
        if right(aNomes[nI][3],1) == " " .OR. right(aNomes[nI][3],1) == CHR(9)
            cMae := left(aNomes[nI][3],len(AllTrim(aNomes[nI][3]))-1)
        else
            cMae := right(aNomes[nI][3],len(AllTrim(aNomes[nI][3]))-1)    
        endif
        cQuery := " UPDATE " + RetSQLName("B3K") + " " + CRLF
        cQuery += " SET B3K_NOMMAE = '" + cMae + "' " + CRLF
        cQuery += " WHERE B3K_FILIAL = '" + aNomes[nI][1] + "' " + CRLF
        cQuery += " AND B3K_MATRIC = '" + aNomes[nI][2] + "' " + CRLF
        cQuery += " AND D_E_L_E_T_ = '' " + CRLF

        nStatus := TCSQLExec(cQuery) 
        if (nStatus < 0)
            alert("TCSQLError() " + TCSQLError())
            RETURN
        endif
        TcSqlExec( "COMMIT" )

    Next nI

    If len(aNomes) > 0
        cMsg := "Foram identificados e corrigidos " + CVALTOCHAR( len(aNomes) ) + " registros inconsistentes no campo nome da mãe da tabela B3K"
    EndIf

Return(MSGAlert(cMsg,"Aviso"))