Histórico da Página
MTA650GEM - Explosão da Estrutura - Geração dos Empenhos
Características do RequisitoPonto de Entrada
Linha de Produto: | Protheus |
Segmento: | Manufatura |
Módulo: | SIGAPCP |
Rotina: | MATA650 - Ordens de Produção |
Cadastros Iniciais:
Relacione os cadastros necessários que precisam ser preenchidos antes da utilização desse requisito.
Parâmetro(s):
Ponto de Entrada: | MTA650GEM - Explosão da Estrutura - Geração dos Empenhos |
Tickets relacionados | TVJRIT |
Requisito/Story/Issue (informe o requisito relacionado): | MMAN-201 |
País(es): |
Tabelas Utilizadas:
Informe as tabelas utilizadas.
Todos |
Banco(s) de Dados: |
TODOS
Todos |
Sistema(s) Operacional(is): |
Todos |
Ponto de Entrada
Descrição: |
Informe o Menu em que estará localizada a rotina
Localização:
Informe o Submenu em que estará localizada a rotina
Eventos:
Informe o Título da rotina
Programa Fonte:
Informe o Fonte da rotina
Função:
Informe o Nome do(s) produto(s) a ser utilizado ou “Todos”
Retorno:
Nome | Tipo | Descrição | Obrigatório |
|
|
|
|
|
|
|
|
|
|
|
Exemplo:
#Include 'Protheus.ch'
User Function CN120ALT()
Local aCabO ponto de entrada 'MTA650GEM' é chamado na geração dos empenhos no MATA650 (Ordens de Produção). Utilizando este PE é possível indicar quais os produtos intermediários de uma determinada ordem de produção deverá ser gerada a OP intermediária. Ao utilizar esse ponto de entrada, não será feita a geração padrão das ordens de produções intermediárias. As OPs intermediárias serão criadas dentro do PE (chamado no terceiro ponto) via EXECAUTO. Ou seja, a implementação da geração das OPs intermediárias será desenvolvida no PE de forma específica. IMPORTANTE Somente é possível utilizar este ponto de entrada quando a execução do MATA650 for pelo MENU, sem EXECAUTO. Como a geração dos empenhos das OPs intermediárias é feita via EXECAUTO dentro do PE, não é possível utilizar o PE executando o MATA650 pelo EXECAUTO. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Localização: | Este PE é chamado em três pontos:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programa Fonte: | MATA650.prw | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Parâmetros:: | Como parâmetro de entrada é enviado um Array (PARAMIXB) Quando chamado no primeiro ponto: Onde são selecionadas as ordens e os PIs que deverão ser geradas as OPs intermediárias.
Quando chamado no segundo ponto: Onde retornará se a OP enviada será processada de forma especial ou não.
Quando chamado no terceiro ponto: Onde será executado o execauto para criação das OPs intermediárias que foram selecionadas.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Retorno: | Quando chamado no primeiro ponto: Onde são selecionadas as ordens e os PIs que deverão ser geradas as OPs intermediárias. Indicador = '1'.
Quando chamado no segundo ponto: Onde retornará se a OP enviada será processada de forma especial ou não. Indicador = '2'.
Quando chamado no terceiro ponto: Onde será executado o execauto para criação das OPs intermediárias que foram selecionadas. Indicador = '3'.
|
Exemplo:
Estrutura:
TST-PA
|
|----------------------------------------|
TST-PI1 TST-PI2
| |
TST-PI3 TST-MP2
|
TST-PI4
|
TST-MP1
#INCLUDE "PROTHEUS.CH"
/////////////////////////////////
USER Function MTA650GEM()
/////////////////////////////////
Local cTipo := PARAMIXB[1]
Local
c2filial := PARAMIXB[2]
Local c2num := PARAMIXB[3]
Local c2item := PARAMIXB[4]
Local c2sequen := PARAMIXB[5]
Local c2itemgrd := PARAMIXB[6]
If cTipo == '1'
aCab[4][2]:= 'NF' //Validações do usuário
EndIf
Return aCab
Local c2prod := PARAMIXB[7]
Local aArrayProd
Local aArrayOps
Local lRet
Local i
Local aVetor := {}
Local dData
Local nOpc := 3
PRIVATE lMsErroAuto := .f.
DO CASE
//Quando cTipo == '1'
//É possível varrer a estrutura da OP principal para selecionar
//quais Produtos deverão ser geradas as OPs intermediárias.
//Poderá ser criada uma tela para selecionar esses produtos
//Esses produtos poderão ser armazenados em uma tabela específica ou em um array, contendo os campos necessários.
//O recomendável é que seja criada uma tabela específica
//Neste exemplo passarei fixo para o array aArrayProd quais produtos intermediários
//serão e não geradas as OPS.
//Também estarei alimentando o array aArrayOps com as ordens que terão esse tratamento especial
//Para que as demais OPs sejam criadas normalmente
CASE cTipo == '1'
aArrayProd := {}
aArrayOps := {}
Mta650GrAr(c2num,c2prod)
Return Nil
//Quando cTipo == '2'
//Retornará se a Ordem terá o tratamento especial ou não.
//Se retornar .T é porque NÃO terá um tratamento especial e serão processadas normalmente,
//Gerando todas OPs intermediárias automaticamente.
//Se retornar .F. é porque possui um tratamento especial e as ordens não serão geradas neste momento.
CASE cTipo == '2'
aArrayProd := Mta650BAPr()
aArrayOps := Mta650BAOp()
lRet := .T.
For i:=1 to Len(aArrayOps)
If aArrayProd[i,1] == c2num
lRet := aArrayOps[i,3]
Exit
EndIf
Next i
Return lRet
//Quando cTipo == '3'
//No final do processamento dos empenhos será chamado essa Opção 3 para criar as OPs intermediárias.
//Através de um EXECAUTO
CASE cTipo == '3'
MsErroAuto := .F.
RpcSetEnv( "99","01",,,,,,,,,)
dData:=dDataBase
aArrayProd := Mta650BAPr()
aArrayOps := Mta650BAOp()
For i:=1 to Len(aArrayProd)
If aArrayProd[i,4] == .T.
aVetor := {{"C2_PRODUTO",aArrayProd[i,2], NIL},;
{"C2_LOCAL","01" , NIL},;
{"C2_QUANT",aArrayProd[i,3] , NIL},;
{"C2_DATPRI", dDataBase , NIL},;
{"C2_DATPRF", dDataBase , NIL},;
{"C2_EMISSAO", dDataBase , NIL},;
{"C2_TPOP", "F" , NIL},;
{"AUTEXPLODE", "S" , NIL}}
msExecAuto({|x,y| MATA650(x,y)},aVetor,3)
If lMsErroAuto
Mostraerro()
else
CONOUT ("Inclusão OK")
Endif
EndIf
Next i
Return Nil
ENDCASE
/////////////////////////////////
Function Mta650GrAr(c2num,c2prod)
/////////////////////////////////
If c2prod == "TST-PA "
aadd(aArrayPro1,{c2num,"TST-PI1 ",20,.T.}) //OP - Produto intermediário - QTD - Gera ou não gera OP
aadd(aArrayPro1,{c2num,"TST-PI2 ",10,.F.})
aadd(aArrayPro1,{c2num,"TST-PI3 ",20,.F.})
aadd(aArrayPro1,{c2num,"TST-PI4 ",20,.T.})
aadd(aArrayOps1,{c2num,c2prod ,.F.}) // OP - Produto Acabado - .F. possui tratamento especial
Else
aadd(aArrayOps1,{c2num,c2prod ,.T.}) // OP - Produto Acabado - .T. não possui tratamento especial
EndIf
Return Nil
/////////////////////////////////
Function Mta650BAPr()
/////////////////////////////////
Return aArrayPro1
/////////////////////////////////
Function Mta650BAOp()
/////////////////////////////////
Return aArrayOps1