Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


CONTEÚDO

  1. Dados Gerais
  2. Visão Geral
  3. Exemplos
  4. Demais Informações
  5. Tabelas UtilizadasAssuntos Relacionados

01. DADOS GERAIS

Produto:

TOTVS Backoffice

Linha de Produto:

Linha Protheus 

Segmento:

Backoffice SP

Módulo:ESTOQUE E CUSTOS (SIGAEST)
Função:INDICADORES DE PRODUTOS (MATA019SOLICITAÇÃO AO ARMAZEM (MATA105)

02. VISÃO GERAL

Exemplo de rotina automática MVC para incluir, alterar e excluir Indicadores de Produtossolicitação ao armazem.

03. EXEMPLOS

Escolha o O modelo desejado abaixo conforme a sua necessidade de execução:abaixo inclui uma solicitação com 4 itens.

Bloco de código
languagejava
themeConfluence
titleRotina Automática MVC - Indicadores de Produtos (MATA019)Inclusão
linenumberstrue
#INCLUDE "PROTHEUSRWMAKE.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "FWMVCDef.ch"

//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO
*/
//------------------------------------------------------------------------
User Function m019Inc1()
Local oModel      := Nil
Private lMsErroAuto := .F.
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST"
 
If "SBZ" $ SuperGetMv("MV_CADPROD",.F.,"")
    oModel := FwLoadModel("MATA010")
    oModel:SetOperation(MODEL_OPERATION_INSERT)
    oModel:Activate()
    oModel:SetValue("SB1MASTER", "B1_COD", "000000000000001")
    oModel:SetValue("SB1MASTER", "B1_DESC", "PRODUTO TESTE")
    oModel:SetValue("SB1MASTER", "B1_TIPO", "PA")
    oModel:SetValue("SB1MASTER", "B1_UM", "UN")
    oModel:SetValue("SB1MASTER", "B1_LOCPAD", "01")
    oModel:SetValue("SB1MASTER", "B1_LOCALIZ", "N")

    oModel:SetValue("SBZDETAIL","BZ_FILIAL" ,"01") 
    oModel:SetValue("SBZDETAIL","BZ_LOCPAD" ,"01")

    If oModel:VldData(User Function mymata105()
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := ''
Local N := 0

Local nOpcx := 0

Private lMsErroAuto := .F.
Private lMsErroHelp := .T.

RpcClearEnv()
RpcSetType( 3 )
lRet := RpcSetEnv( 'T1', 'D MG 01 '  )

If ( !lRet )
        ConOut( 'Problemas na Inicialização do Ambiente' )
Else

    //---------- nOpcx = 3 Inclusão de Solicitação de Armazém --------------
    nOpcx := 3
    nSaveSx8:= GetSx8Len()
    cNumero := GetSx8Num( 'SCP', 'CP_NUM' )

    dbSelectArea( 'SB1' )
    SB1->( dbSetOrder( 1 ) )

    dbSelectArea( 'SCP' )
    SCP->( dbSetOrder( 1 ) )

    If nOpcx == 3
        While SCP->( dbSeek( xFilial( 'SCP' ) + cNumero ) )
        oModel:CommitData    ConfirmSx8()
        MsgInfo("Registro INCLUIDO!", "Atenção")
    Else    cNumero := GetSx8Num('SCP', 'CP_NUM')
        VarInfo("",oModel:GetErrorMessage())EndDo
    EndIf

    Aadd( aCab, { 
    "CP_NUM" ,cNumero , Nil })
    
Aadd( aCab, {  oModel:DeActivate()
    oModel:Destroy("CP_EMISSAO" ,dDataBase , Nil })

    Aadd( oModel := NIL
ElseaItens, {} )
    MsgInfoAadd("Parâmetro MV_CADPROD deve conter tabela SBZ", "Atenção")
EndIf

RESET ENVIRONMENT

Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO (Utilizando a função FwMvcRotAuto apenas em caráter didático)
*/
//------------------------------------------------------------------------
User Function m019Inc2()
Local aDadosCab := {}
Local aDadosIte := {}
Local aItens := {}
 
Private oModel := Nil
Private lMsErroAuto := .F.
Private aRotina := {}
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST"

If "SBZ" $ SuperGetMv("MV_CADPROD",.F.,"") 
    oModel := FwLoadModel("MATA010")
    
    //Adicionando os dados do ExecAuto Cabeçalho
    aAdd(aDadosCab, {"B1_COD", "000000000000001" , Nil})
    aAdd(aDadosCab, {"B1_DESC", "PRODUTO TESTE" , Nil})
    aAdd(aDadosCab, {"B1_TIPO", "PA" , Nil})
    aAdd(aDadosCab, {"B1_UM", "UN" , Nil})
    aAdd(aDadosCab, {"B1_LOCPAD", "01" , Nil})
    aAdd(aDadosCab, {"B1_LOCALIZ", "N" , Nil})
    
    //Adicionando os dados do ExecAuto Item
    aAdd(aDadosIte, {"BZ_FILIAL", "01" , Nil})
    aAdd(aDadosIte, {"BZ_LOCPAD", "01" , Nil})

    //No item o array precisa de um nivel superior.
    aAdd(aItens,aDadosIte)
    
    //Chamando a inclusão - Modelo 2 
    FWMVCRotAuto( oModel,"SB1",MODEL_OPERATION_INSERT,{{"SB1MASTER", aDadosCab},{"SBZDETAIL", aItens}})
    
    //Se houve erro no ExecAuto, mostra mensagem
    If lMsErroAuto
        MostraErro()
    //Senão, mostra uma mensagem de inclusão aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } )

    Aadd( aItens, {} )
    Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,20 , Nil } )

    Aadd( aItens, {} )
    Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } )

    Aadd( aItens, {} )
    Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
    Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } )

    //---------- nOpcx = 5 Exclusão de Solicitação de Armazém --------------
    SB1->( dbSetOrder( 1 ) )
    SCP->( dbSetOrder( 1 ) )
    MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx )
    If lMsErroAuto
        If !__lSX8
            RollBackSx8()
        EndIf

    MsgStop( 'Erro ao Executar o Processo' )
    MostraErro()
    lRet := .F.

    Else
    While ( GetSx8Len() > MsgInfo("Registro INCLUIDO!", "Atenção"nSaveSx8 )
        ConfirmSx8()
    EndIfEnd
Else
    CONOUT MsgInfo("Parâmetro MV_CADPROD deve conter tabela SBZ", "Atenção")
EndIf

RESET ENVIRONMENT

Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO QUANDO JÁ EXISTE PRODUTO CADASTRADO
*/
//------------------------------------------------------------------------
User Function m019Inc3()
Local oModel := Nil
Local aFils  := {}
Local aArmz  := {}
Local nI     := 0
Private lMsErroAuto := .F.
  
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " USER "Administrador" PASSWORD "" MODULO "EST"
  
//Posiciona
SB1->(DbSetOrder(1))
If SB1->(DbSeek(xFilial("SB1") + "TESTE"))
    oModel := FwLoadModel("MATA019")
    oModel:SetOperation(MODEL_OPERATION_UPDATE)
    oModel:Activate()

    aFils := {"D MG 01 ", "D MG 02 ", "M SP 01 ", "M SP 02 "}
    aArmz := {"04", "02", "03", "01"}

    //Altera a primeira linha
    oModelGrid := oModel:GetModel('SBZDETAIL')
    If oModelGrid:Length() > 0
        oModelGrid:GoLine(1)
        oModelGrid:SetValue("BZ_FILIAL",aFils[1])
        oModelGrid:SetValue("BZ_LOCPAD",aArmz[1])
    EndIf

    //Adiciona mais 3 linhas
    For nI := 2 To 4
        If oModelGrid:Length() < nI
            oModelGrid:AddLine()
        EndIf
        oModelGrid:GoLine(nI)
        oModelGrid:SetValue("BZ_FILIAL", aFils[nI])
        oModelGrid:SetValue("BZ_LOCPAD", aArmz[nI])
    Next
  
    If oModel:VldData()
        oModel:CommitData()
        MsgInfo("Registro ALTERADO!", "Atenção")
    Else
        Conout(VarInfo("",oModel:GetErrorMessage()))
    EndIf
     
    oModel:DeActivate()
Else
    MsgInfo("Registro NAO LOCALIZADO!", "Atenção")
EndIf
 
RESET ENVIRONMENT
 
Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE ALTERAÇÃO / INCLUSÃO QUANDO JÁ EXISTE PRODUTO CADASTRADO
*/
//------------------------------------------------------------------------
User Function m019Alt()
Local oModel := Nil
Private lMsErroAuto := .F.
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST"
 
//Posiciona
SB1->(DbSetOrder(1))
If SB1->(DbSeek(xFilial("SB1") + "000000000000001"))
    oModel := FwLoadModel("MATA019")
    oModel:SetOperation(MODEL_OPERATION_UPDATE)
    oModel:Activate()
    oModel:SetValue("SBZDETAIL","BZ_FILIAL","E1U102")
    oModel:SetValue("SBZDETAIL","BZ_LOCPAD","02")
 
    If oModel:VldData()
        oModel:CommitData()
        MsgInfo("Registro ALTERADO!", "Atenção")
    Else
        VarInfo("",oModel:GetErrorMessage())
    EndIf
    
    oModel:DeActivate()
Else
    MsgInfo("Registro NAO LOCALIZADO!", "Atenção")
EndIf

RESET ENVIRONMENT

Return Nil
 
//------------------------------------------------------------------------
/*
EXEMPLO DE EXCLUSÃO
*/
//------------------------------------------------------------------------
User Function m019Exc()
Local oModel := Nil
Private aRotina := {}
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST"

//Posiciona
SB1->(DbSetOrder(1))
If SB1->(DbSeek(xFilial("SB1") + "000000000000001"))
    oModel := FwLoadModel ("MATA019")
    oModel:SetOperation(MODEL_OPERATION_DELETE)
    oModel:Activate()
 
    If oModel:VldData()
        oModel:CommitData()
        MsgInfo("Registro EXCLUIDO!", "Atenção")
    Else
        VarInfo("",oModel:GetErrorMessage())
    EndIf

    oModel:DeActivate()
Else
    MsgInfo("Registro NAO LOCALIZADO!", "Atenção")
EndIf

RESET ENVIRONMENT
 
Return Nil

04. DEMAIS INFORMAÇÕES

Aviso
titleIMPORTANTE!

Ao utilizar a rotina MATA010 como modelo, é necessário que o parâmetro MV_CADPROD contenha a tabela SBZ para que o submodelo da rotina MATA019 também seja carregado e possibilite a manipulação dos dados.

05. TABELAS UTILIZADAS

  • SB1
  • SBZ

06. ASSUNTOS RELACIONADOS

Cross Segmento - Backoffice (Linha Protheus) - SIGAEST - MATA019 - Indicador de Produtos

PEST018 - MV_CADPROD - Parâmetro para informar quais cadastros complementares devem ser apresentados no cadastro de produto

...

 'Processo Executado' )
EndIf


O modelo abaixo altera uma solicitação com 4 itens

Bloco de código
languagejava
themeConfluence
titleRotina Automática alteração
linenumberstrue
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function mymata105()
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := ''
Local N := 0

Local nOpcx := 0

Private lMsErroAuto := .F.
Private lMsErroHelp := .T.

RpcClearEnv()
RpcSetType( 3 )
lRet := RpcSetEnv( 'T1', 'D MG 01 '  )

//---------- nOpcx = 4 Alteração de Solicitação de Armazém -------------

//-----------------------------------------------------------------------------//
// AUTDELETA - Opcional
// Atributo para Definir se o Item que pertence a Solicitação de Armazém deve
// ser Excluído ou Não no processo de Alteração.

// - N = Não Deve Ser Excluído
// - S = Sim Deve Ser Excluído
//-----------------------------------------------------------------------------//
nOpcx := 4
Aadd( aCab, { "CP_NUM" ,cNumero , Nil })
Aadd( aCab, { "CP_EMISSAO" ,dDataBase , Nil })

Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )

Aadd( aItens[ Len( aItens ) ],{"CP_NUM" , 'cNumero' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )

Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,120 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )

Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } )

Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'S' , Nil } )

Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } )

Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )

SB1->( dbSetOrder( 1 ) )
SCP->( dbSetOrder( 1 ) )
MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx )
If lMsErroAuto
	If !__lSX8
		RollBackSx8()
	EndIf

MsgStop( 'Erro ao Executar o Processo' )
MostraErro()
lRet := .F.

Else
While ( GetSx8Len() > nSaveSx8 )
	ConfirmSx8()
End

CONOUT ( 'Processo Executado' )


O modelo abaixo Exclui 1 ou mais itens de uma solicitação com 4 itens.

Aviso
titleIMPORTANTE!

Ao utilizar a rotina automatica MATA105 como exclusão, deve-se levar em consideração que a exclusão se dá apenas por item, não é possivel excluir por documento.

Bloco de código
languagejava
themeConfluence
titleRotina Automática Exclusão
linenumberstrue
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function mymata105()
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := ''
Local N := 0

Local nOpcx := 0

Private lMsErroAuto := .F.
Private lMsErroHelp := .T.

RpcClearEnv()
RpcSetType( 3 )
lRet := RpcSetEnv( 'T1', 'D MG 01 '  )
If ( !lRet )
        ConOut( 'Problemas na Inicialização do Ambiente' )
Else

    //---------- nOpcx = 5 Exclusão de Solicitação de Armazém --------------
    SB1->( dbSetOrder( 1 ) )
    SCP->( dbSetOrder( 1 ) )

    nOpcx := 5

    Aadd( aCab, { "CP_NUM" ,cNumero , Nil })
    Aadd( aCab, { "CP_EMISSAO" ,dDataBase , Nil })

    for N := 1 to 4
        aItens := {}
        Aadd( aItens, {} )
        If n = 1
            Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
        elseif n = 2
            Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" , 20 , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
        elseif n = 3
            Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'S' , Nil } )
        elseiF N = 4
            Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } )
            Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
        EndIf
    //----------------------------------------------------------------------


        SB1->( dbSetOrder( 1 ) )
        SCP->( dbSetOrder( 1 ) )
        MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx )

        If lMsErroAuto
            If !__lSX8
                RollBackSx8()
            EndIf

            MsgStop( 'Erro ao Executar o Processo' )
            MostraErro()
            lRet := .F.
        Else
            While ( GetSx8Len() > nSaveSx8 )
                ConfirmSx8()
            End
            CONOUT ( 'Processo Executado' )
        EndIf
    NEXT N
EndIf

04. TABELAS UTILIZADAS

  • SCP