Versões: | Advanced Protheus 7.10 , Microsiga Protheus 8.11 |
Nível de Acesso: |
A rotina automatica do MATA430 D foi desenvolvida através do uso de função em substituição a tradicional rotina automatica.
A mudança foi motivada pela necessidade de alta performance no uso desta funcionalidade.
.PRW
A430Reserv ( aOPERACAOcNUMEROcPRODUTOcLOCALnQUANTaLOTE [ aHEADER ] [ aCOLS ] [ nQUANTELIM ] ) --> Nil
- (nulo)
- Informa que a operação foi bem sucessida.
Nome | Tipo | Descrição | Default | Obrigatório | Referência | ||||||||||||
aOPERACAO | vetor | [1] -> [Operacao : 1 Inclui,2 Altera,3 Exclui] [2] -> [Tipo da Reserva] [3] -> [Documento que originou a Reserva] [4] -> [Solicitante] [5] -> [Filial da Reserva] [6] -> [Observacao] | X | ||||||||||||||
cNUMERO | caracter | Número da reserva | X | ||||||||||||||
cPRODUTO | caracter | Código do produto | X | ||||||||||||||
cLOCAL | caracter | Almoxarifado da reserva | X | ||||||||||||||
nQUANT | numerico | Quantidade reservada | X | ||||||||||||||
aLOTE | vetor | [1] -> [Numero do Lote] [2] -> [Lote de Controle] [3] -> [Localizacao] [4] -> [Numero de Serie] | X | ||||||||||||||
aHEADER | vetor | aHeader com os campos da getdados. Somente utilizar para gravar campos adicionais, ou que terão seu conteúdo modificado. | |||||||||||||||
aCOLS | vetor | Acols da getdados. Somente utilizar para gravar campos adicionais/modificar conteúdo padrão. | |||||||||||||||
nQUANTELIM | numerico | Não informar. Uso interno. |
Exemplo de execução utilizando campos que não são tratados pela rotina automática, utilizando a gravação do campo C0_FILRES, com um conteúdo diferente da filial logada.
Para esse tipo de procedimento funcionar corretamente, é necessário utilizar as variáveis aHeader e aCols, conforme documentada no quadro acima.
#include 'totvs.ch'
#include "RWMAKE.CH"
User Function My430RES()
Local aOperacao := {}
Local cNumero := '' //C0_NUM
Local cProduto := '000000000000002 ' //Será utilizado o conteúdo do campo C0_PRODUTO exatamente com o seu tamanho, contando os espaços em branco. Exemplo: C0_PRODUTO tamanho 16 → "000001 "
Local cLocal := '01' //C0_LOCAL
Local nQuant := 2 //C0_QUANT
Local aLote := {"","","",""}
Local nOpc := 1 //1 - Inclui, 2 - Altera, 3 - Exclui
Local lReservOk := .T.
Private aHeader := {}
Private aCols := {}
//PREPARACAO DO AMBIENTE
RpcSetEnv("T1","D MG 01","Administrador","","FAT","MATA430")
If nOpc == 1 //INCLUIR REGISTRO
ConOut(Repl("-",80))
ConOut(PadC("Teste de Inclusao",80))
//MONTAGEM DO HEADER E ACOLS PARA CAMPOS CUSTOMIZADOS OU PADRAO
DbSelectArea("SC0")
If FieldPos("C0_FILRES") > 0
aAdd(aHeader,{ GetSx3Cache("C0_FILRES", 'X3_TITULO'),;
GetSx3Cache("C0_FILRES", 'X3_CAMPO' ),;
GetSx3Cache("C0_FILRES", 'X3_PICTURE'),;
GetSx3Cache("C0_FILRES", 'X3_TAMANHO'),;
GetSx3Cache("C0_FILRES", 'X3_DECIMAL'),;
GetSx3Cache("C0_FILRES", 'X3_VALID' ),;
GetSx3Cache("C0_FILRES", 'X3_USADO' ),;
GetSx3Cache("C0_FILRES", 'X3_TIPO' ),;
GetSx3Cache("C0_FILRES", 'X3_F3' ),;
GetSx3Cache("C0_FILRES", 'X3_CONTEXT'),;
GetSx3Cache("C0_FILRES", 'X3_CBOX' ),;
GetSx3Cache("C0_FILRES", 'X3_RELACAO') })
Endif
aadd(aCOLS,"D MG 02")
aOperacao:= {nOpc,; //[1] -> [Operacao : 1 Inclui,2 Altera,3 Exclui]
"VD",; //[2] -> [Tipo da Reserva]
"",; //[3] -> [Documento que originou a Reserva]
"",; //[4] -> [Solicitante]
xFilial("SC0")} //[5] -> [Filial da Reserva]
lReservOk := a430Reserv(aOperacao,cNumero,cProduto,cLocal,nQuant,aLote,aHeader,aCols)
If lReservOk
Conout('Reserva cadastrada com Sucesso!')
Else
Conout('Problemas ao cadastrar reserva')
EndIf
ElseIf nOPC == 2 //ALTERAR REGISTRO
ConOut(Repl("-",80))
ConOut(PadC("Teste de Alteracao",80))
cNumero := 'FTU316'
//SELECIONAR ITEM PARA ALTERAR
DbSelectArea("SC0")
SC0->(DbSetOrder(1))
IF!SC0->(DbSeek(xFilial("SC0")+cNumero+cProduto+cLocal))
ConOut("Nao localizado o item para alterar")
lReservOk:=.F.
Return lReservOk
EndIf
aOperacao:= {nOpc,; //[1] -> [Operacao : 1 Inclui,2 Altera,3 Exclui]
"VD",; //[2] -> [Tipo da Reserva]
"000002 ",; //[3] -> [Documento que originou a Reserva]
SC0->C0_SOLICIT,; //[4] -> [Solicitante]
SC0->C0_FILIAL} //[5] -> [Filial da Reserva]
nQuant:= SC0->C0_QUANT
lReservOk := a430Reserv(aOperacao,cNumero,cProduto,cLocal,nQuant,aLote,aHeader,aCols)
If lReservOk
Conout('Reserva alterada com Sucesso!')
Else
Conout('Problemas ao alterar reserva')
EndIf
ElseIf nOPC == 3 //EXCLUIR REGISTRO
ConOut(Repl("-",80))
ConOut(PadC("Teste de Exclusao",80))
cNumero := 'FTU316'
//SELECIONAR ITEM PARA EXCLUIR
DbSelectArea("SC0")
SC0->(DbSetOrder(1))
IF!SC0->(DbSeek(xFilial("SC0")+cNumero+cProduto+cLocal))
ConOut("Nao localizado o item para excluir")
lReservOk:=.F.
Return lReservOk
EndIf
aOperacao:= {nOpc,; //[1] -> [Operacao : 1 Inclui,2 Altera,3 Exclui]
SC0->C0_TIPO,; //[2] -> [Tipo da Reserva]
SC0->C0_DOCRES,; //[3] -> [Documento que originou a Reserva]
SC0->C0_SOLICIT,; //[4] -> [Solicitante]
SC0->C0_FILIAL} //[5] -> [Filial da Reserva]
nQuant:= SC0->C0_QUANT
lReservOk := a430Reserv(aOperacao,cNumero,cProduto,cLocal,nQuant,aLote,aHeader,aCols)
If lReservOk
Conout('Reserva excluida com Sucesso!')
Else
Conout('Problemas ao excluir reserva')
EndIf
EndIf
RpcClearEnv()
Return lReservOk