Versões: | Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Microsiga Protheus 10 |
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível às Bases de Dados: | Todos |
Idiomas: | Espanhol , Inglês |
LOCALIZAÇÃO : Executado na função MATA242 (desmontagem de produtos).
EM QUE PONTO : O ponto de entrada 'MT242S' é utilizado para validação da quantidade secundária da desmontagem, é chamada no momento da validação da quantidade secundária. Pode ser utilizada para preencher o array aCols com as quantidades ou produtos que serão o resultado da desmontagem ou validar a quantidade secundária da desmontagem digitada.
MATA242.PRX
MTA242S - Preenche o array aCols com quantidades/produtos da desmontagem ou validar a quantidade secundária da desmontagem ( < PARAMIXB> ) --> lContinua
Nome | Tipo | Descrição | Referência |
cProduto | Caractere | Código do Produto Origem da Desmontagem | Não |
nQtdOrigSe | Numérico | Quantidade digitada na desmontagem (2ª U.M.) | Não |
oGet | Objeto | Objeto do tipo MsGetDados, referente ao grid dos itens da desmontagem | Sim |
- (logico)
- Caso verdadeiro prossegue com a digitacao do cabeçalho da desmontagem. Caso falso impede a digitacao dos demais campos e aguarda a validação do conteúdo digitado.
#include 'totvs.ch' /*/{Protheus.doc} User Function MTA242S Permite validar o campo de Quantidade (na segunda unidade de medida) Permite manipular o objeto oGet (MsGetDados) @type Function @author TOTVS /*/ User Function MTA242S() Local cCodPro := ParamIXB[1] Local nQuant2 := ParamIXB[2] Local oGet := ParamIXB[3] Local nQuant := 0 Local nProDest := AScan(aHeader, {|x| AllTrim(x[2]) == 'D3_COD'}) Local nQDest := AScan(aHeader, {|x| AllTrim(x[2]) == 'D3_QUANT'}) Local nQDest2 := AScan(aHeader, {|x| AllTrim(x[2]) == 'D3_QTSEGUM'}) Local nLocDest := AScan(aHeader, {|x| AllTrim(x[2]) == 'D3_LOCAL'}) Local lRet := .T. Local nBkp := n //Inserir as validações do cabeçalho //... //Exemplo de Desmontagem onde preenche o grid com vários produtos ao informar a quantidade //Atenção: O preenchimento desta forma não executa validações de campo ou de linha //As validações devem ser feitas na própria customização //Via rotina automática, o objeto oGet não está disponível If AllTrim(cCodPro) == 'TESTE' .And. nQuant2 > 0 .And. !IsBlind() //O objeto já está instanciado com a primeira linha criada n := 1 aCols[n, nProDest] := PadR('TESTE1', TamSX3('D3_COD')[1]) aCols[n, nQDest2] := 1*nQuant2 aCols[n, nQDest] := 1*ConvUM(cCodPro, nQuant2) aCols[n, nLocDest] := PadR('01', TamSX3('D3_LOCAL')[1]) //Adiciona outra linha oGet:AddLine() n := 2 aCols[n, nProDest] := PadR('TESTE2', TamSX3('D3_COD')[1]) aCols[n, nQDest2] := 4*nQuant2 aCols[n, nQDest] := 4*ConvUM(cCodPro, nQuant2) aCols[n, nLocDest] := PadR('01', TamSX3('D3_LOCAL')[1]) //Atualiza a interface com os dados inseridos oGet:ForceRefresh() EndIf n := nBkp Return lRet /*/{Protheus.doc} ConvUM Converte a segunda unidade de medida na primeira /*/ Static Function ConvUM(cProduto, nQt2) Local aArea := GetArea() Local aAreaSB1 := SB1->(GetArea()) Local nQt1 := 0 Local nFator := 0 Local cMult := '' cMult := Posicione('SB1', 1, FWXFilial('SB1')+cProduto, 'B1_TIPCONV') nFator := Posicione('SB1', 1, FWXFilial('SB1')+cProduto, 'B1_CONV') If cMult == 'M' nQt1 := nQt2 / nFator ElseIf cMult == 'D' nQt1 := nQt2 * nFator EndIf SB1->(RestArea(aAreaSB1)) RestArea(aArea) Return nQt1
Resultado gerado:
Observações
- O parâmetro oGet é uma instância da classe MsGetDados, armazenando informações do grid. Para mais informações sobre a classe, acesse: https://tdn.totvs.com/display/framework/MsGetDados
- O ponto de entrada está localizado na validação do campo de Quantidade secundária do cabeçalho e também permite validar a quantidade inserida. No exemplo acima, é recomendável incluir quaisquer validações antes de preencher o grid com os produtos da estrutura.
- O parâmetro oGet não está disponível em execuções automáticas (via MsExecAuto), assim, é recomendável que se proteja o bloco que trata o preenchimento do objeto oGet com a função IsBlind. Veja em: https://tdn.totvs.com/pages/viewpage.action?pageId=6814878
- Caso seja necessário deletar uma linha do grid pelo ponto de entrada, basta preencher a última posição da linha do array aCols com .T., exemplo: aCols[2, Len(aCols[2]) := .T. deleta a segunda linha do grid
Assuntos relacionados :