Árvore de páginas


CONTEÚDO

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

01. DADOS GERAIS

Produto:

TOTVS Backoffice

Linha de Produto:

Linha Protheus 

Segmento:

Backoffice SP

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

02. VISÃO GERAL

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

03. EXEMPLOS

Abertura de ambiente sem usuário

O usuario se faz obrigatorio, caso controle de Alçadas estiver habilitado. Saiba mais na seção 5. Demais informações.


O modelo abaixo inclui uma solicitação com 4 itens, altera as quantidades ou exclui a solicitação, dependendo do parametro passado em Opcx.

Rotina Automática Inclusão
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function mymata105(Opcx)
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := 'EXEAUT'
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
    iF Opcx = '3'
        nOpcx := 3
        // Inclusão de Solicitação de Armazém --------------
/*      nSaveSx8:= GetSx8Len()
        cNumero := GetSx8Num( 'SCP', 'CP_NUM' )
*/
        dbSelectArea( 'SB1' )
        SB1->( dbSetOrder( 1 ) )

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

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

        Aadd( aItens, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil })
        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, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil }) 
        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_NUM" ,cNumero , Nil }) 
        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_NUM" ,cNumero , Nil }) 
        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 } ) 

        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' )
/*
CP_FILIAL CP_NUM CP_ITEM CP_PRODUTO                     CP_UM CP_QUANT               CP_CONTA             CP_DESCRI                                          D_E_L_E_T_
--------- ------ ------- ------------------------------ ----- ---------------------- -------------------- -------------------------------------------------- ----------
D MG 01   EXEAUT 01      PRD_001                        UN    10                                          PRD_001                                             
D MG 01   EXEAUT 02      PRD_002                        CT    20                                          PRD_002                                             
D MG 01   EXEAUT 03      PRD_003                        L     30                                          PRD_003                                             
D MG 01   EXEAUT 04      PRD_004                        TL    40                      1110210             PRD_004                                             

*/

        EndIf
    EndiF
    iF Opcx = '5'
        nOpcx := 5
        // exclusão em laço de documento
        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_NUM" ,cNumero , Nil })
                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_NUM" ,cNumero , Nil })
                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_NUM" ,cNumero , Nil })
                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_NUM" ,cNumero , Nil })
                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' )
/*
CP_FILIAL CP_NUM CP_ITEM CP_PRODUTO                     CP_UM CP_QUANT               CP_CONTA             CP_DESCRI                                          D_E_L_E_T_
--------- ------ ------- ------------------------------ ----- ---------------------- -------------------- -------------------------------------------------- ----------
D MG 01   EXEAUT 01      PRD_001                        UN    110                                         PRD_001                                             
D MG 01   EXEAUT 02      PRD_002                        CT    120                                         PRD_002                                             
D MG 01   EXEAUT 03      PRD_003                        L     130                                         PRD_003                                             
D MG 01   EXEAUT 04      PRD_004                        TL    140                     1110210             PRD_004                                             

*/
            EndIf
        NEXT N
    EndIf
    If Opcx = '4'
        nOpcx := 4 
        // alteração de Solicitação de Armazém --------------
        Aadd( aCab, { "CP_NUM" ,cNumero , Nil })
        Aadd( aCab, { "CP_EMISSAO" ,dDataBase , Nil })

        aItens := {}
        Aadd( aItens, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil })
        Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,110 , Nil } )

        Aadd( aItens, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil })
        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, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil })
        Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,130 , Nil } )

        Aadd( aItens, {} )
        Aadd( aItens[ Len( aItens ) ],{"CP_NUM" ,cNumero , Nil })
        Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
        Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,140 , 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' )
/*
CP_FILIAL CP_NUM CP_ITEM CP_PRODUTO                     CP_UM CP_QUANT               CP_CONTA             CP_DESCRI                                          D_E_L_E_T_
--------- ------ ------- ------------------------------ ----- ---------------------- -------------------- -------------------------------------------------- ----------
D MG 01   EXEAUT 01      PRD_001                        UN    110                                         PRD_001                                            *
D MG 01   EXEAUT 02      PRD_002                        CT    120                                         PRD_002                                            *
D MG 01   EXEAUT 03      PRD_003                        L     130                                         PRD_003                                            *
D MG 01   EXEAUT 04      PRD_004                        TL    140                     1110210             PRD_004                                            *
 */
        EndIf
    endif
EndIf


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

IMPORTANTE!

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.

Rotina Automática Exclusão
#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_NUM" , 'cNumero' , Nil } )
			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_NUM" , 'cNumero' , Nil } )
			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_NUM" , 'cNumero' , Nil } ) 
            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_NUM" , 'cNumero' , Nil } ) 
            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


05. DEMAIS INFORMAÇÕES