Árvore de páginas

Função: A430Reserv


Versões:Advanced Protheus 7.10 , Microsiga Protheus 8.11
Nível de Acesso:


Descrição:

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.

Programa Fonte:
.PRW
Sintaxe:

A430Reserv ( aOPERACAOcNUMEROcPRODUTOcLOCALnQUANTaLOTE [ aHEADER ] [ aCOLS ] [ nQUANTELIM ] ) --> Nil

Retorno:
Nil
    (nulo)
  • Informa que a operação foi bem sucessida.
Parâmetros:



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