CONTEÚDO
- Descrição
- Localização
- Programa Fonte
- Parâmetros
- Retorno
- 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
Nome | Tipo | Descrição |
---|---|---|
aLotes | Array | 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 |
aHeader | Array | Array contendo os campos do cabeçalho da tela de preenchimento dos lotes. |
05. RETORNO
Nome | Tipo | Descrição |
---|---|---|
aLotes | Array | Retornar novo array na mesma estrutura descrita no item 04. Parâmetros |
06. EXEMPLO DE UTILIZAÇÃO
#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