Identificador de Regra

CPR-440SULOT01

Módulo: CPR - Compras.

Finalidade: Ao estar cadastrado, ativado e ligado a uma regra, será executado a cada inserção de linha na grade de distribuição de lotes, e terá como objetivo retornar da regra um novo código de lote, sugerindo o referido código para a grade. Será passado para a regra as informações referentes à empresa, filial, produto, derivação, depósito e a informação referente ao número de registros na grade de produtos (CprNQtdReg), que poderá ser usado no cálculo do incremento do novo código do lote.

Este identificador somente será executado para distribuição de lotes e caso a tela de distribuição tenha sido chamada de uma rotina proveniente de nota fiscal de entrada. Para a distribuição de vários lotes, tanto o controle de identificação do lote quanto o controle de incremento do novo código de lote deverá ser feito via regra.

Tela: F000DLS

Transação: Não se aplica.

Regra:

@REGRA 02: Incremento do código de lote "LOTE-00001"@
@ Variáveis da regra @
definir numero CprNCodEmp;
definir numero CprNCodFil;
definir alfa CprACodPro;
definir alfa CprACodDer;
definir alfa CprACodDep;
definir alfa CprACodLot;
definir numero CprNQtdReg; @ Quantidade de registros na grade - cálculo do incremento @

@ Variáveis de manipulação do código do lote @
definir cursor cur_E210Dls;
definir alfa CodLotSQL;
definir alfa xStrIncremento;
definir alfa xStrIncAux;
definir numero xTamIncLot;
definir numero xTamIncremento;
definir numero xCnvIncLot;
definir numero xIncremento;

@ Busca o último código do lote@
cur_E210Dls.SQL
"SELECT CODLOT FROM E210DLS WHERE CODEMP=:CprNCodEmp AND CODPRO=:CprACodPro AND CODDER=:CprACodDer AND CODDEP=:CprACodDep ORDER BY CODLOT DESC";
cur_E210Dls.AbrirCursor();
Se (cur_E210Dls.Achou) {
CodLotSQL = cur_E210Dls.CodLot;
}
cur_E210Dls.FecharCursor();

@ Manipulação do código do lote - tomando como base o código "LOTE-00001" (5 posições incrementais (00001)) @
xStrIncAux = CodLotSQL;
CopiarStr(xStrIncAux, 6, 5); @ Pega a parte do código do lote que é incremental (00001)@
TamanhoAlfa(xStrIncAux, xTamIncLot); @ Pega o tamanho do incremento (5) @
AlfaParaInt(xStrIncAux, xCnvIncLot); @ Converte o incremento do lote para inteiro (1) @
xIncremento = xCnvIncLot + CprNQtdReg; @ Soma o incremento do lote com base nos registros da grade @
IntParaAlfa(xIncremento, xStrIncremento); @ Converte para alfa para ser concatenado ao incremento do lote @
TamanhoAlfa(xStrIncremento, xTamIncremento); @ Pega o tamanho do incremento do lote convertido (1) @
DeletarAlfa(xStrIncAux, 5 - (xTamIncremento-1), xTamIncremento); @ Deleta a parte do código a ser substituído do incremento@
DeletarAlfa(CodLotSQL, 6, 5); @ Deleta a parte do código a ser substituído do código do lote @
xStrIncAux = xStrIncAux + xStrIncremento; @ Deleta a parte do incremento a ser substituído do código do lote @
CodLotSQL = CodLotSQL + xStrIncAux; @ Atribui o incremento ao código de lote @

CprACodLot = CodLotSQL;

Variáveis Disponibilizadas:

Nome Tipo Observações Retorna Valor
CprNCodEmp NÚMERO Código da empresa logada N
CprNCodFil NÚMERO Código da filial logada N
CprACodPro ALFA Código do produto N
CprACodDer ALFA Código da derivação N
CprACodDep ALFA Código do depósito N
CprNQtdReg NÚMERO Quantidade de registros na grade da tela F000DLS (para cálculo do incremento do lote) N
CprACodLot ALFA Código do lote a ser sugerido para a grid S

Atenção

Caso o parâmetro global LisVarReg esteja habilitado, a variável ListaVariaveis estará disponível em todos os identificadores de regras do sistema. O conteúdo desta variável lista os campos disponibilizados no identificador de regras em questão.

Não é aconselhada a ativação desse parâmetro global para o uso cotidiano. Esse recurso de listagem dos campos de identificadores auxilia a construção de regras e o Suporte para, por exemplo, depuração ou quando não houver acesso à documentação dos identificadores de regras.

Este artigo ajudou você?