Árvore de páginas

Versões comparadas

Chave

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

MTA650GEM - Explosão da Estrutura - Geração dos Empenhos

Ponto de Entrada

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP

Rotina:

MATA650 - Ordens de Produção

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):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos


Ponto de Entrada

Descrição:

O 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:

  1. A650RunBatch: Onde são selecionadas as ordens e os PIs que deverão ser geradas as OPs intermediárias.
  2. MontEstru: Onde retornará se a OP enviada será processada de forma especial ou não.
  3. A650RunBatch: Onde será executado o execauto para criação das OPs intermediárias que foram selecionadas.

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.

NomeTipoDescrição
IndicadorCaracter

Indica em qual ponto do MATA650 o PE está sendo chamado.

Neste caso é passado o indicador '1'

SC2->C2_FILIALCaracterIndica a filial da OP.
SC2->C2_NUMCaracterIndica o número da OP.
SC2->C2_ITEMCaracterIndica o item da OP.
SC2->C2_SEQUENCaracterIndica a sequência da OP.
SC2->C2_ITEMGRDCaracterIndica o item grade da OP.
SC2->C2_PRODUTOCaracterIndica o produto da OP.


Quando chamado no segundo ponto: Onde retornará se a OP enviada será processada de forma especial ou não.

NomeTipoDescrição
IndicadorCaracter

Indica em qual ponto do MATA650 o PE está sendo chamado.

Neste caso é passado o indicador '2'

SC2->C2_FILIALCaracterIndica a filial da OP.
SC2->C2_NUMCaracterIndica o número da OP.
SC2->C2_ITEMCaracterIndica o item da OP.
SC2->C2_SEQUENCaracterIndica a sequência da OP.
SC2->C2_ITEMGRDCaracterIndica o item grade da OP.
NIL
Nulo


Quando chamado no terceiro ponto: Onde será executado o execauto para criação das OPs intermediárias que foram selecionadas.

NomeTipoDescrição
IndicadorCaracter

Indica em qual ponto do MATA650 o PE está sendo chamado.

Neste caso é passado o indicador '3'

NIL
Nulo
NIL
Nulo
NIL
Nulo
NIL
Nulo
NIL
Nulo
NIL
Nulo




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'.

  • Não espera retorno.


Quando chamado no segundo ponto: Onde retornará se a OP enviada será processada de forma especial ou não. Indicador = '2'.

  • Espera como retorno .T. (Ordem normal, sem seleção de PIs) ou .F. (Geração especial, seleção de PIs).


Quando chamado no terceiro ponto: Onde será executado o execauto para criação das OPs intermediárias que foram selecionadas. Indicador = '3'.

  •  Não espera retorno.

 

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]
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