Árvore de páginas

Versões comparadas

Chave

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

Exemplo MsExecAuto Transferência Múltipla

Descrição:

Objetivo:
As transferências no segundo modelo, oferecido pelo Protheus, permite que vários produtos possam ser transferidos num único documento.

Importante:
Este modelo de transferência é semelhante à transferência normal, possuindo os mesmos parâmetros relacionados, tendo como única diferença o fato de que a data de emissão e o documento se aplicam a todas as transferências.
As transferências realizadas podem tratar casos particulares apresentados no "Ambiente de Inspeção de Entrada", onde pode ocorrer "Devolução para o Controle de Qualidade".

Dada a utilização de campos com mesmo nome (Origem e destino)  é extremamente recomendado o uso da sequencia de campos de acordo com a tela. No exemplo abaixo foi usado a referencia da disposição dos campos na tela padrão. Os campos devem ser informados mesmo que não usado, assim como é seu preenchimento em tela.

Linha de Produto:

Protheus

Segmento:

Serviços

Módulo:

SIGAEST - Estoque/Custos

Rotina:

Rotina

Nome Técnico

MATA261

Transferência Múltipla

País(es):

Todos

Banco(s) de Dados:

Todos

Tabelas Utilizadas:

SB7 - Descrição genérica do Produto 

SD3 - Movimentações Internas

Parâmetro:
Informa qual ação a rotina automática irá tomar:
Inclusão: 3 ou NILEstorno: 6


MV_PDEVLOC - Em rotinas automáticas, os valores são apenas 0 e 1.

PEST049 - MV_PDEVLOC - Definição de procedimento para estorno de movimento

Retorno:NIL (Nulo)
Exemplo: Inclusão e de estorno de Transferência Múltipla
#Include "protheus.ch"
#Include "rwmake.ch"
#Include "tbiconn.ch"


User Function MyMata261()
Local aAuto := {}
Local aItem := {}
Local aLinha := {}
/*
É necessario que:
O parametro MV_LOCALIZ = S
Local alista
O produto com codigo PA001 tenha controle de endereco ativo
O armazem padrao definido no produto deve ter 2 endereços: ENDER01 e ENDER02
Saldo inicial igual ou superior a 1
E este saldo deve ser enderecçado ao ENDER01
*/
Local aLista := {'PA001','PA001'} //
Produto Utilizado
Os produtos a serem utilizados
Local nX
Local nOpcAuto := 0
Local cDocumen :=
3
""
Local lContinua := .T.

Private lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST" TABLES "SB1", "SD3"

//
conout("Exemplo de inclusão de movimentação multipla")

//Cabecalho a Incluir
aadd(aAuto,{
cDocumen := GetSxeNum("SD3","D3_DOC")
aadd(aAuto,{cDocumen,dDataBase}) //Cabecalho

//Itens a Incluir
aItem := {}

for nX := 1 to len(
alista
aLista) step 2
aLinha
    aLinha := {}
    //Origem
SB1
    SB1->(DbSeek(xFilial("SB1")+PadR(
alista
aLista[nX], tamsx3('D3_COD') [1])))
aadd
    aadd(aLinha,{"ITEM",'00'+cvaltochar(nX),Nil})
aadd
    aadd(aLinha,{"D3_COD", SB1->B1_COD, Nil}) //Cod Produto origem
aadd
    aadd(aLinha,{"D3_DESCRI", SB1->B1_DESC, Nil}) //descr produto origem
aadd
    aadd(aLinha,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida origem
aadd
    aadd(aLinha,{"D3_LOCAL", SB1->B1_LOCPAD, Nil}) //armazem origem
aadd
    aadd(aLinha,{"D3_LOCALIZ", PadR("ENDER01", tamsx3('D3_LOCALIZ') [1]),Nil}) //Informar
endereço
endereço origem
    
    //Destino
SB1
    SB1->(DbSeek(xFilial("SB1")+PadR(
alista
aLista[nX+1], tamsx3('D3_COD') [1])))
aadd
    aadd(aLinha,{"D3_COD", SB1->B1_COD, Nil}) //cod produto destino
aadd
    aadd(aLinha,{"D3_DESCRI", SB1->B1_DESC, Nil}) //descr produto destino
aadd
    aadd(aLinha,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida destino
aadd
    aadd(aLinha,{"D3_LOCAL", SB1->B1_LOCPAD, Nil}) //armazem destino
aadd
    aadd(aLinha,{"D3_LOCALIZ", PadR("ENDER02", tamsx3('D3_LOCALIZ') [1]),Nil}) //Informar
endereço
endereço destino
aadd
    
    aadd(aLinha,{"D3_NUMSERI", "", Nil}) //Numero serie
aadd
    aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote Origem
aadd
    aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote origem
aadd
    aadd(aLinha,{"D3_DTVALID", '', Nil}) //data validade
aadd
    aadd(aLinha,{"D3_POTENCI", 0, Nil}) // Potencia
aadd
    aadd(aLinha,{"D3_QUANT", 1, Nil}) //Quantidade
aadd
    aadd(aLinha,{"D3_QTSEGUM", 0, Nil}) //Seg unidade medida
aadd
    aadd(aLinha,{"D3_ESTORNO", "", Nil}) //Estorno
aadd
    aadd(aLinha,{"D3_NUMSEQ", "", Nil}) // Numero sequencia D3_NUMSEQ
aadd
    
    aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote destino
aadd
    aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote destino
aadd
    aadd(aLinha,{"D3_DTVALID", '', Nil}) //validade lote destino
aadd
    aadd(aLinha,{"D3_ITEMGRD", "", Nil}) //Item Grade
    
aadd
    aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod origem
aadd
    aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod destino
aAdd
    
    aAdd(aAuto,aLinha)

Next nX
nOpcAuto := 3 // Inclusao
MSExecAuto({|x,y| mata261(x,y)},aAuto,nOpcAuto)

if lMsErroAuto
MostraErro
    MostraErro()
EndIf

RESET ENVIRONMENT

Return

Exemplo: Estorno de Transferência Múltipla

#Include "protheus.ch"
#Include "rwmake.ch"
#Include "tbiconn.ch"

User Function mysample()

MyMata261()
M261Estorn()

Return

User Function MyMata261()
Local aAuto := {}
Local aItem := {}
Local aLinha := {}
Local alista := {'PA001','PA001'} //Produto Utilizado
Local nX

Local nOpcAuto := 3

Private lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST" TABLES "SB1", "SD3"

//Cabecalho a Incluir
aadd(aAuto,{GetSxeNum("SD3","D3_DOC"),dDataBase}) //Cabecalho

//Itens a Incluir
aItem := {}

for
    lContinua := .F.
else
    //
    conout("Inclusão de movimentação multipla efetuada com sucesso")
    lContinua := .T.
EndIf

conout("Finalizado a inclusão de movimentação multipla")

If lContinua

    //
    conout("Exemplo de estorno de movimentação multipla baseado na inclusão do movimentação multipla anterior")

    lMsErroAuto := .F.
    for nX := 1 to len(
alista
aLista) step 2
aLinha := {}
//Origem
SB1->(DbSeek(xFilial("SB1")+PadR(alista[nX], tamsx3('D3_COD') [1])))
aadd(aLinha,{"ITEM",'00'+cvaltochar(nX),Nil})
aadd(aLinha
    
        //-- Preenchimento dos campos
        aAuto := {}
        aadd(aAuto,{"D3_
COD
DOC",
SB1->B1_COD
cDocumen, Nil})
//Cod Produto origem
aadd(aLinha

        aadd(aAuto,{"D3_
DESCRI
COD",
SB1->B1_DESC
aLista[nX], Nil})
//descr produto origem
aadd(aLinha,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida origem
aadd(aLinha,{"D3_LOCAL", SB1->B1_LOCPAD, Nil}) //armazem origem
aadd(aLinha,{"D3_LOCALIZ", PadR("ENDER01", tamsx3('D3_LOCALIZ') [1]),Nil}) //Informar endereço origem

//Destino
SB1->(DbSeek(xFilial("SB1")+PadR(alista[nX+1], tamsx3('D3_COD') [1])))
aadd(aLinha,{"D3_COD", SB1->B1_COD, Nil}) //cod produto destino
aadd(aLinha,{"D3_DESCRI", SB1->B1_DESC, Nil}) //descr produto destino
aadd(aLinha,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida destino
aadd(aLinha,{"D3_LOCAL", SB1->B1_LOCPAD, Nil}) //armazem destino
aadd(aLinha,{"D3_LOCALIZ", PadR("ENDER02", tamsx3('D3_LOCALIZ') [1]),Nil}) //Informar endereço destino

aadd(aLinha,{"D3_NUMSERI", "", Nil}) //Numero serie
aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote Origem
aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote origem
aadd(aLinha,{"D3_DTVALID", '', Nil}) //data validade
aadd(aLinha,{"D3_POTENCI", 0, Nil}) // Potencia
aadd(aLinha,{"D3_QUANT", 1, Nil}) //Quantidade
aadd(aLinha,{"D3_QTSEGUM", 0, Nil}) //Seg unidade medida
aadd(aLinha,{"D3_ESTORNO", "", Nil}) //Estorno
aadd(aLinha,{"D3_NUMSEQ", "", Nil}) // Numero sequencia D3_NUMSEQ

aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote destino
aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote destino
aadd(aLinha,{"D3_DTVALID", '', Nil}) //validade lote destino
aadd(aLinha,{"D3_ITEMGRD", "", Nil}) //Item Grade

aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod origem
aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod destino

aAdd(aAuto,aLinha)

Next nX

MSExecAuto({

        
        DbSelectArea("SD3")
        DbSetOrder(2)
        DbSeek(xFilial("SD3")+cDocumen+aLista[nX])
    
        //-- Teste de Estorno
        nOpcAuto := 6 // Estornar
        MSExecAuto({|x,y| mata261(x,y)},aAuto,nOpcAuto)
if
        
        If lMsErroAuto
MostraErro
            MostraErro()
EndIf

RESET ENVIRONMENT

Return

User Function M261Estorn()
Local nOpcAuto := 6 // Estorno.
Local cProd //Codigo do produto
Local cDoc //Codigo do documento de transferencia
Local aItens := {}
Local aAuto := {}

Private lMsErroAuto := .F.

//-- Preenchimento dos campos
aadd(aItens,{"D3_DOC", cDoc, Nil})
aadd(aItens,{"D3_COD", cProd, Nil})
aadd(aAuto, aItens)

DbSelectArea("SD3")
DbSetOrder(2)
DbSeek(xFilial("SD3")+cDoc+cProd)
//-- Teste de Estorno
MSExecAuto({|x,y| mata261(x,y)},aAuto,nOpcAuto)
if lMsErroAuto
MostraErro(
        Else
            conout("Estorno de movimentação multipla efetuada com sucesso")
        EndIf

    Next nX
    conout("Finalizado a estorno de movimentação multipla")
EndIf
RESET ENVIRONMENT

Return