Duvida Como gerar "REQ"?

Discussão em 'Progress 4GL' iniciado por ds201, Junho 12, 2015.

  1. ds201

    ds201 Membro Participativo

    Bom dia

    Usando a CPAPI001 é possível gerar "ACA". Tenho um programa que já faz isto.
    Estou tendo dificuldades em gerar "REQ", pois não consegui usar bem os conceitos de "reservas" e "saldo de estoque".
    Qual é a API para gerar "REQ"?

    Obrigado
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Meu caro, tive esses problemas também, acabei fazendo o seguinte, fazendo na mão, ou seja, usando o ceapi001 (movimento de estoque), gerei os movimentos de REQ, depois editei os registros da tabela reservas e ajustei os valores, pra fazer um RRQ, mesma coisa, funciona direitinho.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Analisa o codigo ....
    Código:
    /*  -----------------------------------------------------------------
        Programa .: imesul.ems2.producao.Gerenciador2.RequisicaoOrdem.cls
        Autor ....: Richard Edgar - Imesul
        Data .....: 17/08/2012
        Descricao : Gerar requisição do item para ordem
        ----------------------------------------------------------------- */
        {grid2/error.i}
    
        class imesul.ems2.producao.Gerenciador2.RequisicaoOrdem:
            {cep/ceapi001.i}
    
            define temp-table tt-erro no-undo
                field i-sequen as integer
                field cd-erro  as integer
                field mensagem as character.
    
            define variable error        as ExceptionControl no-undo.
            define variable parametrosGlobais as imesul.common.ParametrosGlobais no-undo.
            define variable testaReserva as logical          no-undo.
            define variable temPlano     as logical          no-undo.
    
            constructor public RequisicaoOrdem():
                assign error = ExceptionControl:getInstance()
                       parametrosGlobais = new imesul.common.ParametrosGlobais().
                assign testaReserva = yes.
    
                clearTempTable().
            end constructor.
    
            method private void clearTempTable():
                empty temp-table tt-movto.
                empty temp-table tt-erro.
            end method.
    
            method public void setReserva(campo as logical):
                assign testaReserva = campo.
            end method.
    
            method public void new(codUnidNegoc as character, numeroPlano as integer, nrOrdProdu as integer, dataTransacao as date):
    
                find first ord-prod no-lock
                     where ord-prod.nr-ord-produ = nrOrdProdu
                           no-error.
                if not avail ord-prod then error:throwException('RequisicaoOrdem','Erro ordem producao','Ordem producao nao encontrada').
    
                assign temPlano = no.
                if numeroPlano <> 0 then do:
                    find first cst_ger_plano no-lock
                         where cst_ger_plano.cod-unid-negoc = codUnidNegoc
                           and cst_ger_plano.numero         = numeroPlano
                               no-error.
                    if not avail cst_ger_plano then error:throwException('RequisicaoOrdem','Erro plano de producao','Plano de producao informado não encontrado').
                    assign temPlano = yes.
                end.
    
                clearTempTable().
    
                create tt-movto.
                assign tt-movto.cod-versao-integracao = 1
                       tt-movto.cod-prog-orig         = 'RequisicaoOrdem.cls'
                       tt-movto.l-mov-erro            = no.
                                                        
                assign tt-movto.dt-trans          = dataTransacao
                       tt-movto.usuario           = parametrosGlobais:getUsuario()
                       tt-movto.atualiza-ul-ent   = no
                       tt-movto.gera-saldo        = no.
    
                assign tt-movto.ct-codigo      = ord-prod.ct-codigo
                       tt-movto.sc-codigo      = ord-prod.sc-codigo
                       tt-movto.nr-ord-produ   = ord-prod.nr-ord-produ
                       tt-movto.conta-contabil = ord-prod.ct-codigo + ord-prod.sc-codigo.
                       tt-movto.nro-docto      = (if temPlano then 'PL_' + cst_ger_plano.cod-unid-negoc + string(cst_ger_plano.numero,'999999999') else string(ord-prod.nr-ord-produ)).
    
            end method.
    
            method public void setItem(codDepos as character, codEstabel as character, codLocaliz as character, lote as character, itCodigo as character):
                find first saldo-estoq no-lock
                     where saldo-estoq.cod-depos = codDepos
                       and saldo-estoq.cod-estabel = codEstabel
                       and saldo-estoq.cod-localiz = codLocaliz
                       and saldo-estoq.lote        = lote
                       and saldo-estoq.it-codigo   = itCodigo
                           no-error.
    
                if not avail saldo-estoq then error:throwException('RequisicaoOrdem','Erro item','Saldo estoque para item informado não encontrado').
    
                find first item no-lock
                     where item.it-codigo = saldo-estoq.it-codigo
                           no-error.
                if not avail item then error:throwException('RequisicaoOrdem','Erro item','item informado não encontrado').
    
                if testaReserva then do:
                    find first reservas no-lock
                         where reservas.it-codigo    = saldo-estoq.it-codigo
                           and reservas.nr-ord-produ = ord-prod.nr-ord-produ
                               no-error.
    
                    if not avail reservas then error:throwException('RequisicaoOrdem','Erro reservas','Reservas para item informado não encontrado').
    
                    assign tt-movto.op-codigo    = reservas.op-codigo
                           tt-movto.item-pai     = reservas.item-pai
                           tt-movto.cod-roteiro  = reservas.cod-roteiro.
    
                    find first oper-ord no-lock
                         where oper-ord.nr-ord-produ = reservas.nr-ord-produ
                           and oper-ord.op-codigo    = reservas.op-codigo
                               no-error.
    
                    if avail oper-ord then do:
                        assign tt-movto.op-seq = 0.
                    end.
        /*             if avail oper-ord then                           */
        /*                 assign tt-movto.op-seq = oper-ord.sequencia. */
                end.
    
    
            end method.
    
            method public void requisitar(quantidade as decimal):
                assign tt-movto.tipo-trans   = 2
                       tt-movto.esp-docto    = {ininc/i03in218.i 6 'REQ'}
                       tt-movto.un           = item.un
                       tt-movto.cod-refer    = item.cod-refer
                       tt-movto.it-codigo    = item.it-codigo
                       tt-movto.cod-depos    = saldo-estoq.cod-depos
                       tt-movto.cod-estabel  = saldo-estoq.cod-estabel
                       tt-movto.dt-vali-lote = saldo-estoq.dt-vali-lote
                       tt-movto.cod-localiz  = saldo-estoq.cod-localiz
                       tt-movto.lote         = saldo-estoq.lote
                       tt-movto.quantidade   = quantidade.
                executaAPI().
                ajustarSaldoReserva().
                gerarRequisicaoOrdem().
            end method.
    
            method public void estornar(quantidade as decimal, rowidMovto as rowid):
                assign tt-movto.tipo-trans   = 1
                       tt-movto.esp-docto    = {ininc/i03in218.i 6 'RRQ'}
                       tt-movto.un           = item.un
                       tt-movto.cod-refer    = item.cod-refer
                       tt-movto.it-codigo    = item.it-codigo
                       tt-movto.cod-depos    = saldo-estoq.cod-depos
                       tt-movto.cod-estabel  = saldo-estoq.cod-estabel
                       tt-movto.dt-vali-lote = saldo-estoq.dt-vali-lote
                       tt-movto.cod-localiz  = saldo-estoq.cod-localiz
                       tt-movto.lote         = saldo-estoq.lote
                       tt-movto.quantidade   = quantidade
                       tt-movto.r-mov-orig   = rowidMovto.
                executaAPI().
                ajustarSaldoReserva().
                estornarRequisicaoOrdem().
    
            end method.
    
            method private void gerarRequisicaoOrdem():
                find first req-ord
                     where req-ord.nr-ord-produ       = tt-movto.nr-ord-produ
                       and req-ord.item-pai           = tt-movto.item-pai
                       and req-ord.cod-roteiro        = tt-movto.cod-roteiro
                       and req-ord.op-codigo          = tt-movto.op-codigo
                       and req-ord.it-codigo          = tt-movto.it-codigo
                       and req-ord.cod-refer          = tt-movto.cod-refer
                       and req-ord.cod-estabel        = tt-movto.cod-estabel
                       and req-ord.cod-depos          = tt-movto.cod-depos
                       and req-ord.cod-localiz        = tt-movto.cod-localiz
                       and req-ord.lote-serie         = tt-movto.lote
                           no-error.
    
                if not avail req-ord then do:
                    create req-ord.
                    assign req-ord.nr-ord-produ       = tt-movto.nr-ord-produ
                           req-ord.item-pai           = tt-movto.item-pai
                           req-ord.cod-roteiro        = tt-movto.cod-roteiro
                           req-ord.op-codigo          = tt-movto.op-codigo
                           req-ord.it-codigo          = tt-movto.it-codigo
                           req-ord.cod-refer          = tt-movto.cod-refer
                           req-ord.cod-estabel        = tt-movto.cod-estabel
                           req-ord.cod-depos          = tt-movto.cod-depos
                           req-ord.cod-localiz        = tt-movto.cod-localiz
                           req-ord.lote-serie         = tt-movto.lote
                           req-ord.qt-requis          = 0
                           req-ord.qtd-requisitd-lote = 0
                           req-ord.num-id-reserva     = 0
                           req-ord.num-id-saldo-estoq = 0.
                end.
    
                assign req-ord.qt-requis          = req-ord.qt-requis + tt-movto.quantidade.
                assign req-ord.qtd-requisitd-lote = req-ord.qt-requis.
    
                release req-ord no-error.
    
            end method.
    
            method private void estornarRequisicaoOrdem():
                find first req-ord
                     where req-ord.nr-ord-produ       = tt-movto.nr-ord-produ
                       and req-ord.item-pai           = tt-movto.item-pai
                       and req-ord.cod-roteiro        = tt-movto.cod-roteiro
                       and req-ord.op-codigo          = tt-movto.op-codigo
                       and req-ord.it-codigo          = tt-movto.it-codigo
                       and req-ord.cod-refer          = tt-movto.cod-refer
                       and req-ord.cod-estabel        = tt-movto.cod-estabel
                       and req-ord.cod-depos          = tt-movto.cod-depos
                       and req-ord.cod-localiz        = tt-movto.cod-localiz
                       and req-ord.lote-serie         = tt-movto.lote
                           no-error.
       
                if avail req-ord then do:
                    assign req-ord.qt-requis          = req-ord.qt-requis - tt-movto.quantidade.
                    assign req-ord.qtd-requisitd-lote = req-ord.qt-requis.
    
                    if req-ord.qt-requis <= 0 then delete req-ord no-error.
    
                    release req-ord no-error.
                end.
            end method.
    
            method private void ajustarSaldoReserva():
                find first tt-movto no-error.
    
                if testaReserva then do:
                    find current reservas exclusive-lock.
                    if tt-movto.tipo-trans = 1 then assign reservas.quant-requis = reservas.quant-requis - tt-movto.quantidade
                                                           reservas.quant-atend  = reservas.quant-atend  - tt-movto.quantidade.
                    if tt-movto.tipo-trans = 2 then assign reservas.quant-requis = reservas.quant-requis + tt-movto.quantidade
                                                           reservas.quant-atend  = reservas.quant-atend  + tt-movto.quantidade.
                    find current reservas no-lock.
                end.
            end method.
    
            method private void executaAPI():
                run cep/ceapi001.p (input-output table tt-movto,
                                    input-output table tt-erro,
                                    input yes).
                error:clearExceptions().
                for each tt-erro:
                    error:addException('RequisicaoOrdem','CEAPI001 - Erro ' + string(tt-erro.cd-erro), tt-erro.mensagem).
                end.
                if error:catchException() then error:throwException().
            end method.
        end class.
    
    
  4. ds201

    ds201 Membro Participativo

    Boa tarde

    Muito obrigado pelo apoio. Vou estudar esta solução.

    Sds
  5. af.dums

    af.dums Membro Ativo

    Olá...

    Há um tempo atrás que precisei utilizei esta rotina, gerou movto-mat e movto-estoq corretamente (usei a própria api):

    Código:
    /******************************************************************************
     ** 
     **  INCLUDE  : CPAPI012.I 
     **
     **  OBJETIVO : Definir as temp-tables da API de Requis. de Materiais 
     **
     ******************************************************************************/
    
     def temp-table tt-requis no-undo
         field tipo-trans       as integer init 1
         field nr-ord-produ     like ord-prod.nr-ord-produ
         field quantidade       as decimal
         field data             as date
         field item-ini         as char    init "                "
         field item-fim         as char    init "ZZZZZZZZZZZZZZZZ"
         field deposito-ini     as char    init "   "
         field deposito-fim     as char    init "ZZZ"
         field op-codigo-ini    as integer init 0
         field op-codigo-fim    as integer init 9999
         field cod-localiz-ini  as char    init "          "
         field cod-localiz-fim  as char    init "ZZZZZZZZZZ"
         field procura-saldos   as logical
         field carrega-reservas as logical init yes
         field prog-seg         as char
         field time-out         as integer init 30
         field tentativas       as integer init 10
         field cod-versao-integracao as integer format "999"
         field nro-docto  like movto-mat.serie-docto
         field serie-docto like movto-mat.nro-docto.
    
    {cdp/cd0666.i}
    
    CREATE tt-requis.
    ASSIGN tt-requis.tipo-trans            = 1
           tt-requis.nr-ord-produ          = 259330 /*movto-estoq.nr-ord-produ*/
           tt-requis.quantidade            = 80 /*movto-estoq.quantidade*/
           tt-requis.data                  = 09/24/2014 /*movto-estoq.dt-trans*/
           tt-requis.item-ini              = ""
           tt-requis.item-fim              = "ZZZZZZZZZZZZZZZZ"
           tt-requis.deposito-ini          = "1"
           tt-requis.deposito-fim          = "1"
           tt-requis.op-codigo-ini         = 0
           tt-requis.op-codigo-fim         = 99999
           tt-requis.cod-localiz-ini       = ""
           tt-requis.cod-localiz-fim       = ""
           tt-requis.procura-saldos        = NO
           tt-requis.carrega-reservas      = YES
           tt-requis.prog-seg              = "ACERTO"
           /*tt-requis.time-out              =
           tt-requis.tentativas            =*/
           tt-requis.cod-versao-integracao = 001
           tt-requis.nro-docto             = STRING(tt-requis.nr-ord-produ)
           tt-requis.serie-docto           = "MIG".
    
    FIND FIRST ord-prod
         WHERE ord-prod.nr-ord-prod = tt-requis.nr-ord-prod EXCLUSIVE-LOCK NO-ERROR.
    IF AVAIL ord-prod AND ord-prod.estado = 7 THEN
        ASSIGN ord-prod.estado = 6.
    
    RUN cpp/cpapi012.p(INPUT        TABLE tt-requis,
                       INPUT-OUTPUT TABLE tt-erro,
                       INPUT              YES).
    
    MESSAGE RETURN-VALUE
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    RUN cdp/cd0666.w(INPUT TABLE tt-erro).
    
    
  6. ds201

    ds201 Membro Participativo

    Obrigado pela informação.

Compartilhe esta Página