Árvore de páginas

Carregando...

CONTEÚDO

  1. Descrição
  2. Localização
  3. Programa Fonte
  4. Parâmetros
  5. Retorno
  6. Exemplo de utilização

01. DESCRIÇÃO

 O ponto de entrada MT220GRL permite manipular as informações do array da rotina automática MATA390 - Manutenção de Lotes, quando é incluso novo saldo inicial - MATA220 para produtos que possuem controle de rastreabilidade (tabela SD5 - Requisições por lote).

02. LOCALIZAÇÃO

O Ponto de entrada MT220GRL está localizado na função A220AtuSD5, na montagem do array da rotina automática do MATA390 - Manutenção de Lotes.

03. PROGRAMA FONTE

MATA220.PRX

04. Parâmetros

NomeTipoDescrição
aLotesArray

Array de Itens da rotina automática MATA390. Possui a estrutura:

aLotes[nX] - Linha SD5

aLotes[nX, nY] - Array do campo SD5

aLotes[nX, nY, 1] - Nome do campo. Ex: D5_DTVALID

aLotes[nX, nY, 2] - Conteúdo do campo. Ex: 15/10/2015

aLotes[nX, nY, 3] - Nil - por se tratar sempre de inclusão

aHeaderArray

Array contendo os campos do cabeçalho da tela de preenchimento dos lotes.

05. RETORNO


NomeTipoDescrição
aLotesArrayRetornar novo array na mesma estrutura descrita no item 04. Parâmetros


06. EXEMPLO DE UTILIZAÇÃO

Exemplo
#Include 'TOTVS.ch'

/*/{Protheus.doc} User Function MT220GRL
    Permite alterar o array da rotina automática do MATA390 - Manutenção de Lotes
    na inclusão de saldo inicial (MATA220)
    Por conta da implementação do ponto de entrada, é recomendado acessar sempre a última posição
    do array, pois o ponto de entrada é chamado uma vez por linha da SD5, onde é incluida uma linha
    nova a cada chamada.
    @type  Function
    @author TOTVS 
    /*/
User Function MT220GRL()
    Local aLotes   := ParamIXB[1]
    Local aHeader  := ParamIXB[2]
    Local nLast    := Len(aLotes)
    Local nPDtVenc := 0
    Local nPQtd    := 0
    Local nPLote   := 0
    Local cUnMed   := ''
    Local nNewLast := 0
    Local cNewLote := ''

    //Alterando somente a última posição do array
    //Exemplo: Caso a data de vencimento informada seja igual a data de hoje, alterar para 31/12/2049
    nPDtVenc := AScan(aLotes[nLast], {|x| AllTrim(x[1]) == 'D5_DTVALID'})
    If nPDtVenc > 0 .And. aLotes[nLast, nPDtVenc, 2] <= dDataBase
        aLotes[nLast, nPDtVenc, 2] := CToD('31/12/2049')
    EndIf

    //Exemplo: Para produtos controlados em KG, quebra em lotes de 100Kg
    cUnMed := Posicione('SB1', 1, FWXFilial('SB1')+SB9->B9_COD, 'B1_UM')
    nPLote := AScan(aLotes[nLast], {|x| AllTrim(x[1]) == 'D5_LOTECTL'})
    nPQtd := AScan(aLotes[nLast], {|x| AllTrim(x[1]) == 'D5_QUANT'})
    If cUnMed == 'KG' .And. nPQtd > 0 .And. nPLote > 0
        cNewLote := Soma1(RTrim(aLotes[nLast, nPLote, 2]))
        While aLotes[nLast, nPQtd, 2] > 100
            If ASCan(aLotes, {|x| RTrim(x[nPLote, 2]) == RTrim(cNewLote)}) > 0
                cNewLote := Soma1(cNewLote)
                Loop
            EndIf
            aLotes[nLast, nPQtd, 2] -= 100
            AAdd(aLotes, aClone(aLotes[nLast]))
            nNewLast := Len(aLotes)
            aLotes[nNewLast, nPQtd, 2]  := 100
            aLotes[nNewLast, nPLote, 2] := cNewLote
        EndDo
    EndIf

Return aLotes
  


Ver também: MT220LOT - Permite habilitar campos para edição ao informar os lotes do saldo inicial