Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Backoffice

Linha de Produto:

Linha Protheus

Segmento:

Backoffice

Módulo:SIGATMK - Call Center
Função:TMKA030 - Acessórios
Abrangências:Microsiga Protheus 12
Versões:Microsiga Protheus 12
Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível com as Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Todos


02. SITUAÇÃO/REQUISITO

Função utilizada para manutenção do cadastro de Acessórios via rotina automática (ExecAuto - MVC).

03. EXEMPLOS

Este é o exemplo básico para a execução da Rotina Automática de Acessórios no processo de Inclusão:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "FWMVCDEF.CH" 
#Include "RWMAKE.CH"
 
User Function MyTmka030()
 
Local oModel := Nil
Local oSUGMod := Nil
Local oSU1Mod := Nil
Local oSUGStruct := Nil
Local oSU1Struct := Nil
local aCpoSUG := {}
local aCpoSU1 := {}
local aAux := {}
Local lRet := .T.
Local lAux := .T.
Local nItErro := 0
Local nI := 0
Local nJ := 0
 
//****************************************************************
//* Abertura do ambiente
//****************************************************************
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "TMK"
 
oModel := FWLoadModel('TMKA030')
 
oModel:SetOperation( MODEL_OPERATION_INSERT ) //Seta a operação de inserção
oModel:Activate()
 
//Dados do Produto
oSUGMod := oModel:GetModel( "SUGMASTER" )
oSUGStruct := oSUGMod:GetStruct()
aAux := oSUGStruct:GetFields()

aAdd( aCpoSUG, { "UG_PRODUTO", "FAT000000000000000000000000182" } )

If lRet
    For nI := 1 To Len( aCpoSUG )
        // Verifica se os campos passados existem na estrutura do cabeçalho
        If ( nPos := aScan( aAux, {  |x| AllTrim( x[3]  ) ==   AllTrim( aCpoSUG[nI][1] ) } ) ) > 0
            // É feita  a  atribuição  do  dado  aocampo  do  Model  do cabeçalho
            If  !(  lAux  :=  oModel:SetValue(  "SUGMASTER", aCpoSUG[nI][1], aCpoSUG[nI][2] ) )
                // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo)
                // o método SetValue retorna .F.
                lRet    := .F.
                Exit
            EndIf
        EndIf
    Next
EndIf

If lRet
    aAux := {}
    aAdd( aAux, { "U1_ACESSOR", "FAT000000000000000000000000001" } )
    aAdd( aCpoSU1, aAux )
    aAux := {}
    aAdd( aAux, { "U1_ACESSOR", "FAT000000000000000000000000002" } )
    aAdd( aCpoSU1, aAux )
    aAux := {}
    aAdd( aAux, { "U1_ACESSOR", "FAT000000000000000000000000003" } )
    aAdd( aCpoSU1, aAux )
    aAux := {}
    aAdd( aAux, { "U1_ACESSOR", "FAT000000000000000000000000004" } )
    aAdd( aCpoSU1, aAux )

    // Instanciamos apenas a parte do modelo referente aos dados do item
    oSU1Mod := oModel:GetModel( "SU1DETAIL" )
    // Obtemos a estrutura de dados do item
    oSU1Struct := oSU1Mod:GetStruct()
    aAux := oSU1Struct:GetFields()

    nItErro  := 0
    
    For nI := 1 To Len( aCpoSU1 )
        // Incluímos uma linha nova
        // ATENÇÃO: Os itens são criados em uma estrutura de grid (FORMGRID), portanto já é criada uma primeira linha
        // branco automaticamente, desta forma começamos a inserir novas linhas a partir da 2ª vez
        If nI > 1
            // Incluímos uma nova linha de item
            If  ( nItErro := oSU1Mod:AddLine() ) <> nI
                // Se por algum motivo o método AddLine() não consegue incluir a linha,
                // ele retorna a quantidade de linhas já
                // existem no grid. Se conseguir retorna a quantidade mais 1
                lRet    := .F.
                Exit
            EndIf
        EndIf

        For nJ := 1 To Len( aCpoSU1[nI] )
            // Verifica se os campos passados existem na estrutura de item
            If ( nPos := aScan( aAux, { |x| AllTrim( x[3] ) ==  AllTrim( aCpoSU1[nI][nJ][1] ) } ) ) > 0
                If !( lAux := oModel:SetValue( "SU1DETAIL", aCpoSU1[nI][nJ][1], aCpoSU1[nI][nJ][2] ) )
                    // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo)
                    // o método SetValue retorna .F.
                    lRet    := .F.
                    nItErro := nI
                    Exit
                EndIf
            EndIf
        Next
        
        If !lRet
            Exit
        EndIf
    
    Next
    
EndIf

If lRet
    // Faz-se a validação dos dados, note que diferentemente das tradicionais "rotinas automáticas"
    // neste momento os dados não são gravados, são somente validados.
    If ( lRet := oModel:VldData() )
        // Se os dadosforam validados faz-se a gravação efetiva dos
        // dados (commit)
        oModel:CommitData()
    EndIf
EndIf

If !lRet
    // Se os dados não foram validados obtemos a descrição do erro para gerar
    // LOG ou mensagem de aviso
    aErro   := oModel:GetErrorMessage()
    // A estrutura do vetor com erro é:
    // [1] identificador (ID) do formulário de origem
    // [2] identificador (ID) do campo de origem
    // [3] identificador (ID) do formulário de erro
    // [4] identificador (ID) do campo de erro
    // [5] identificador (ID) do erro
    // [6] mensagem do erro
    // [7] mensagem da solução
    // [8] Valor atribuído
    // [9] Valor anterior
    
    AutoGrLog( "Id do formulário de origem:" + ' [' + AllToChar( aErro[1]  ) + ']' )
    AutoGrLog( "Id do campo de origem:     " + ' [' + AllToChar( aErro[2]  ) + ']' )
    AutoGrLog( "Id do formulário de erro:  " + ' [' + AllToChar( aErro[3]  ) + ']' )
    AutoGrLog( "Id do campo de erro:       " + ' [' + AllToChar( aErro[4]  ) + ']' )
    AutoGrLog( "Id do erro:                " + ' [' + AllToChar( aErro[5]  ) + ']' )
    AutoGrLog( "Mensagem do erro:          " + ' [' + AllToChar( aErro[6]  ) + ']' )
    AutoGrLog( "Mensagem da solução:       " + ' [' + AllToChar( aErro[7]  ) + ']' )
    AutoGrLog( "Valor atribuído:           " + ' [' + AllToChar( aErro[8]  ) + ']' )
    AutoGrLog( "Valor anterior:            " + ' [' + AllToChar( aErro[9]  ) + ']' )
    
    If nItErro > 0
        AutoGrLog(  "Erro no  Item:                 " + ' [' + AllTrim( AllToChar( nItErro  ) ) + ']' )
    EndIf
    
    MostraErro()
EndIf

// Desativamos o Model
oModel:DeActivate()
oModel:Destroy()
 
RESET ENVIRONMENT
 
Return lRet

Este é o exemplo básico para a execução da Rotina Automática de Acessórios no processo de Alteração:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "FWMVCDEF.CH" 
#Include "RWMAKE.CH"
 
User Function MyTmka030()
 
Local oModel := Nil
Local oSU1Mod := Nil
Local oSU1Struct := Nil
local aCpoSU1 := {}
local aAux := {}
Local lRet := .T.
Local lAux := .T.
Local nQtdAcess := 0
Local nNovaLinha := 0
Local nJ := 0
 
//****************************************************************
//* Abertura do ambiente
//****************************************************************
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "TMK"
 
SUG->( DbSetOrder(1) )
If SUG->( DbSeek( xFilial( "SUG" ) + "000012" ) ) // Realiza a busca pelo registro
    oModel := FWLoadModel('TMKA030')
    
    oModel:SetOperation( MODEL_OPERATION_UPDATE ) //Seta a operação de alteração
    oModel:Activate()

    aAdd( aCpoSU1, { "U1_ACESSOR", "FAT000000000000000000000000005" } )    // Cria os dados a serem
    aAdd( aCpoSU1, { "U1_KIT", "2" } )                                     // adicionados no registro

    // Instanciamos apenas a parte do modelo referente aos dados do item
    oSU1Mod := oModel:GetModel( "SU1DETAIL" )
    // Obtemos a estrutura de dados do item
    oSU1Struct := oSU1Mod:GetStruct()
    aAux := oSU1Struct:GetFields()
    
    nQtdAcess := Len( oSU1Mod:ADATAMODEL ) // Retorna a quantidade de acessórios
    nNovaLinha := oSU1Mod:AddLine() // Tenta incluir mais uma linha para adicionar um novo acessório
    If  nNovaLinha == nQtdAcess
        // Se por algum motivo o método AddLine() não consegue incluir a linha,
        // ele retorna a quantidade de linhas já
        // existem no grid. Se conseguir retorna a quantidade mais 1
        lRet    := .F.
    Else
        For nJ := 1 To Len( aCpoSU1 )
            // Verifica se os campos passados existem na estrutura de item
            If ( nPos := aScan( aAux, { |x| AllTrim( x[3] ) ==  AllTrim( aCpoSU1[nJ][1] ) } ) ) > 0
                If !( lAux := oModel:SetValue( "SU1DETAIL", aCpoSU1[nJ][1], aCpoSU1[nJ][2] ) )
                    // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo)
                    // o método SetValue retorna .F.
                    lRet    := .F.
                    Exit
                Else
                EndIf
            EndIf
        Next
    EndIf
    
EndIf

If lRet
    // Faz-se a validação dos dados, note que diferentemente das tradicionais "rotinas automáticas"
    // neste momento os dados não são gravados, são somente validados.
    If ( lRet := oModel:VldData() )
        // Se os dadosforam validados faz-se a gravação efetiva dos
        // dados (commit)
        oModel:CommitData()
    EndIf
EndIf

If !lRet
    // Se os dados não foram validados obtemos a descrição do erro para gerar
    // LOG ou mensagem de aviso
    aErro   := oModel:GetErrorMessage()
    // A estrutura do vetor com erro é:
    // [1] identificador (ID) do formulário de origem
    // [2] identificador (ID) do campo de origem
    // [3] identificador (ID) do formulário de erro
    // [4] identificador (ID) do campo de erro
    // [5] identificador (ID) do erro
    // [6] mensagem do erro
    // [7] mensagem da solução
    // [8] Valor atribuído
    // [9] Valor anterior
    
    AutoGrLog( "Id do formulário de origem:" + ' [' + AllToChar( aErro[1]  ) + ']' )
    AutoGrLog( "Id do campo de origem:     " + ' [' + AllToChar( aErro[2]  ) + ']' )
    AutoGrLog( "Id do formulário de erro:  " + ' [' + AllToChar( aErro[3]  ) + ']' )
    AutoGrLog( "Id do campo de erro:       " + ' [' + AllToChar( aErro[4]  ) + ']' )
    AutoGrLog( "Id do erro:                " + ' [' + AllToChar( aErro[5]  ) + ']' )
    AutoGrLog( "Mensagem do erro:          " + ' [' + AllToChar( aErro[6]  ) + ']' )
    AutoGrLog( "Mensagem da solução:       " + ' [' + AllToChar( aErro[7]  ) + ']' )
    AutoGrLog( "Valor atribuído:           " + ' [' + AllToChar( aErro[8]  ) + ']' )
    AutoGrLog( "Valor anterior:            " + ' [' + AllToChar( aErro[9]  ) + ']' )
    
    If nNovaLinha > 0
        AutoGrLog(  "Erro no  Item:                 " + ' [' + AllTrim( AllToChar( nNovaLinha  ) ) + ']' )
    EndIf
    
    MostraErro()
EndIf

// Desativamos o Model
oModel:DeActivate()
oModel:Destroy()
 
RESET ENVIRONMENT
 
Return lRet
Este é o exemplo básico para a execução da Rotina Automática de Acessórios no processo de Exclusão:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "FWMVCDEF.CH" 
#Include "RWMAKE.CH"
 
User Function MyTmka030()
 
Local oModel := Nil
Local lRet := .T.
Local lEncontrou := .T.
 
//****************************************************************
//* Abertura do ambiente
//****************************************************************
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "TMK"
 
SUG->( DbSetOrder(1) )
If SUG->( DbSeek( xFilial( "SUG" ) + "000012" ) ) // Reraliza a busca pelo registro
    oModel := FWLoadModel('TMKA030')
    
    oModel:SetOperation( MODEL_OPERATION_DELETE ) //Seta a operação de exclusão
    oModel:Activate()
Else
    lEncontrou := .F.
EndIf

If lEncontrou
    // Faz-se a validação dos dados, note que diferentemente das tradicionais "rotinas automáticas"
    // neste momento os dados não são gravados, são somente validados.
    If ( lRet := oModel:VldData() )
        // Se os dadosforam validados faz-se a gravação efetiva dos
        // dados (commit)
        oModel:CommitData()
    EndIf
Else
    lRet := .F.
EndIf

If !lRet
    If !lEncontrou
        AutoGrLog(  "Registro não encontrado" )
    Else
        // Se os dados não foram validados obtemos a descrição do erro para gerar
        // LOG ou mensagem de aviso
        aErro   := oModel:GetErrorMessage()
        // A estrutura do vetor com erro é:
        // [1] identificador (ID) do formulário de origem
        // [2] identificador (ID) do campo de origem
        // [3] identificador (ID) do formulário de erro
        // [4] identificador (ID) do campo de erro
        // [5] identificador (ID) do erro
        // [6] mensagem do erro
        // [7] mensagem da solução
        // [8] Valor atribuído
        // [9] Valor anterior
        
        AutoGrLog( "Id do formulário de origem:" + ' [' + AllToChar( aErro[1]  ) + ']' )
        AutoGrLog( "Id do campo de origem:     " + ' [' + AllToChar( aErro[2]  ) + ']' )
        AutoGrLog( "Id do formulário de erro:  " + ' [' + AllToChar( aErro[3]  ) + ']' )
        AutoGrLog( "Id do campo de erro:       " + ' [' + AllToChar( aErro[4]  ) + ']' )
        AutoGrLog( "Id do erro:                " + ' [' + AllToChar( aErro[5]  ) + ']' )
        AutoGrLog( "Mensagem do erro:          " + ' [' + AllToChar( aErro[6]  ) + ']' )
        AutoGrLog( "Mensagem da solução:       " + ' [' + AllToChar( aErro[7]  ) + ']' )
        AutoGrLog( "Valor atribuído:           " + ' [' + AllToChar( aErro[8]  ) + ']' )
        AutoGrLog( "Valor anterior:            " + ' [' + AllToChar( aErro[9]  ) + ']' )
    EndIf

    MostraErro()

EndIf

If ValType( oModel ) == "O"
    // Desativamos o Model
    oModel:DeActivate()
    oModel:Destroy()
EndIf
 
RESET ENVIRONMENT
 
Return lRet


04. DEMAIS INFORMAÇÕES

Não há

05. ASSUNTOS RELACIONADOS