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
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.
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.
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).