1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] Gerar pedido de compra emergencial

Discussão em 'EMS , HCM e Totvs 11' iniciado por cintiasottelli, Março 23, 2016.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. wellington

    wellington Membro Participativo

  2. gilsiqueira

    gilsiqueira Membro Participativo

    oi, boa tarde,
    poderia me enviar por gentileza... muito agradecido
  3. reissobr

    reissobr Membro Participativo

    Boa Tarde Cintia.

    Pode enviar para mim ?
    Estou estudando utilizaçao de B.O, e um exemplo deste ai ser muito bom.
    reissobr@gmail.com
  4. gilsiqueira

    gilsiqueira Membro Participativo

    oi Cintia, acabei esquecendo o email, poderia passar para mim, por favor

    gilsiqueira@globo.com
    agradecido
  5. cintiasottelli

    cintiasottelli Membro Participativo

    Olá Pessoal! Vou postar o código aqui, acho que fica mais fácil né...

    /* *************************** Definitions ************************** */
    {cdp/cd0666.i}

    DEFINE VARIABLE i-seq-error AS INTEGER NO-UNDO.

    DEFINE TEMP-TABLE RowErrors NO-UNDO
    FIELD ErrorSequence AS INTEGER
    FIELD ErrorNumber AS INTEGER
    FIELD ErrorDescription AS CHARACTER
    FIELD ErrorParameters AS CHARACTER
    FIELD ErrorType AS CHARACTER
    FIELD ErrorHelp AS CHARACTER
    FIELD ErrorSubType AS CHARACTER
    INDEX seq ErrorSequence.

    DEF TEMP-TABLE tt-ordens LIKE es-ordem-transporte
    FIELD dt-geracao AS DATE FORMAT 99/99/9999
    FIELD envia AS CHAR
    FIELD c-status AS CHAR
    FIELD c-tipo-servico AS CHAR
    FIELD c-prioridade AS CHAR.

    DEF TEMP-TABLE tt-log
    FIELD mensagem AS CHAR.

    DEFINE VARIABLE h-boin295 AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin295desc AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin274sd AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin356ca AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin356 AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin274vl AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin356vl AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin082vl AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin082sd AS HANDLE NO-UNDO.
    DEFINE VARIABLE hboin082ca AS HANDLE NO-UNDO.
    DEFINE VARIABLE hDBOEmitente AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boin706 AS HANDLE NO-UNDO.
    DEFINE VARIABLE h-boad107na AS HANDLE NO-UNDO.

    DEFINE TEMP-TABLE tt-cond-especif NO-UNDO LIKE cond-especif
    FIELD r-rowid AS ROWID.

    DEFINE TEMP-TABLE tt-pedido-compr NO-UNDO LIKE pedido-compr
    FIELD r-rowid AS ROWID
    FIELD rownum AS INT.

    DEFINE TEMP-TABLE tt-cotacao-item NO-UNDO LIKE cotacao-item
    FIELD r-Rowid AS ROWID.
    DEFINE TEMP-TABLE tt-ordem-compra NO-UNDO LIKE ordem-compra
    FIELD r-Rowid AS ROWID.

    DEFINE TEMP-TABLE tt-prazo-compra LIKE prazo-compra
    FIELD r-Rowid AS ROWID.

    DEFINE TEMP-TABLE tt-prazo-compra-aux NO-UNDO LIKE prazo-compra
    FIELD r-rowid AS ROWID.

    DEFINE NEW GLOBAL SHARED VARIABLE c-seg-usuario AS CHAR FORMAT "x(12)" NO-UNDO.

    DEFINE VARIABLE h-acomp AS HANDLE NO-UNDO.
    DEFINE VARIABLE iNumNewPedido AS INTEGER NO-UNDO.
    DEFINE VARIABLE i-num-pedido AS INTEGER NO-UNDO.
    DEFINE VARIABLE c-formato-cgc AS CHARACTER NO-UNDO.
    DEFINE VARIABLE l-modulo-ge AS LOGICAL NO-UNDO.
    DEFINE VARIABLE i-cond-pagto AS INTEGER NO-UNDO.
    DEFINE VARIABLE i-num-ordem AS INTEGER NO-UNDO.
    DEFINE VARIABLE l-manut-item-fornec AS LOGICAL NO-UNDO.
    DEFINE VARIABLE i-parcela AS INTEGER NO-UNDO.
    DEFINE VARIABLE c-un AS CHARACTER NO-UNDO.
    DEFINE VARIABLE da-dt-entrega AS DATE NO-UNDO.
    DEFINE VARIABLE de-quantidade AS DECIMAL NO-UNDO.
    DEFINE VARIABLE i-nro-rows AS INTEGER NO-UNDO.

    DEFINE VARIABLE l-existe-despesa AS LOGICAL NO-UNDO.
    DEFINE VARIABLE c-pais-emit AS CHARACTER NO-UNDO.
    DEFINE VARIABLE c-pais-estab AS CHARACTER NO-UNDO.
    DEFINE VARIABLE rw-cotacao AS ROWID NO-UNDO.
    DEFINE VARIABLE i-natureza AS INTEGER NO-UNDO.
    DEFINE VARIABLE l-despesa AS LOG INIT YES NO-UNDO.
    DEFINE VARIABLE lLoop AS LOG INIT YES NO-UNDO.

    DEFINE VARIABLE l-codigo-icm-sensitive AS LOGICAL NO-UNDO.
    DEFINE VARIABLE l-aliquota-icm-sensitive AS LOGICAL NO-UNDO.
    DEFINE VARIABLE l-aliquota-iss-sensitive AS LOGICAL NO-UNDO.
    DEFINE VARIABLE l-valor-taxa-sensitive AS LOGICAL NO-UNDO.
    DEFINE VARIABLE l-taxa-financ-sensitive AS LOGICAL NO-UNDO.
    DEFINE VARIABLE l-possui-reaj-sensitive AS LOGICAL NO-UNDO.

    DEFINE VARIABLE i-cont AS INT INIT 1 NO-UNDO.


    DEFINE VARIABLE c-end-cobranca-aux LIKE pedido-compr.end-cobranca NO-UNDO.
    DEFINE VARIABLE c-end-entrega-aux LIKE pedido-compr.end-entrega NO-UNDO.
    DEFINE VARIABLE i-cod-mensagem LIKE pedido-compr.cod-mensagem NO-UNDO.


    DEF BUFFER es-ordem FOR es-ordem-transporte.
    EMPTY TEMP-TABLE tt-ordens.

    FOR EACH es-ordem NO-LOCK
    WHERE es-ordem.nro_sequencia = 1:

    FIND FIRST pedido-compr NO-LOCK
    WHERE pedido-compr.num-pedido = INT(es-ordem.nro_pedido) NO-ERROR.

    CREATE tt-ordens.
    BUFFER-COPY es-ordem TO tt-ordens.

    ASSIGN tt-ordens.dt-geracao = IF AVAIL pedido-compr THEN pedido-compr.data-pedido ELSE DATE('').

    IF tt-ordens.tipo_servico = 1 THEN ASSIGN tt-ordens.c-tipo-servico = 'Coleta'.
    ELSE IF tt-ordens.tipo_servico = 2 THEN ASSIGN tt-ordens.c-tipo-servico = 'Entrega'.
    ELSE IF tt-ordens.tipo_servico = 3 THEN ASSIGN tt-ordens.c-tipo-servico = 'Administrativo'.

    IF tt-ordens.ind_prioridade = 1 THEN ASSIGN tt-ordens.c-prioridade = 'Exclusivo'.
    ELSE IF tt-ordens.ind_prioridade = 2 THEN ASSIGN tt-ordens.c-prioridade = 'Normal'.

    IF tt-ordens.i-status = 1 THEN ASSIGN tt-ordens.c-status = 'Pendente'.
    ELSE ASSIGN tt-ordens.c-status = 'Atendido'.
    END.

    RUN CreateRecord (INPUT-OUTPUT TABLE tt-ordens).

    PROCEDURE CreateRecord :
    /*------------------------------------------------------------------------------
    Purpose:
    Notes:
    ------------------------------------------------------------------------------*/
    DEFINE INPUT-OUTPUT PARAM TABLE FOR tt-ordens.

    EMPTY TEMP-TABLE tt-log.

    FIND FIRST es-param-ordem NO-LOCK NO-ERROR.
    IF NOT AVAIL es-param-ordem THEN
    RUN utp/ut-msgs.p (INPUT "show":U,
    INPUT 17006,
    INPUT 'Não foi poss¡vel gerar os pedidos de compra. Consulte o cadastro ESCD0022. ~~' +
    'Não foi poss¡vel gerar os pedidos de compra pois os parâmetros necess rios não estão cadastros no ESCD0022. Favor verificar').
    ELSE DO:

    RUN initializeBOS.

    FOR EACH tt-ordens WHERE tt-ordens.envia = "*":

    MESSAGE 'O.t: ' tt-ordens.nro_sequencia VIEW-AS ALERT-BOX INFO BUTTONS OK.


    EMPTY TEMP-TABLE tt-pedido-compr.
    EMPTY TEMP-TABLE tt-cond-especif.
    EMPTY TEMP-TABLE tt-prazo-compra-aux.
    EMPTY TEMP-TABLE tt-prazo-compra.
    EMPTY TEMP-TABLE tt-cotacao-item.
    EMPTY TEMP-TABLE tt-ordem-compra.

    EMPTY TEMP-TABLE tt-erro.

    DO TRANSACTION ON ERROR UNDO, RETURN ON STOP UNDO, RETURN:

    IF tt-ordens.nro_pedido <> '' THEN DO:
    CREATE tt-log.
    ASSIGN tt-log.mensagem = 'Já foi gerado um pedido de compra ' + tt-ordens.nro_pedido + ' para a ordem de transporte ' + STRING(tt-ordens.nro_sequencia) + '.'.
    NEXT.
    END.

    RUN geraPedidoCompra.

    RUN geraOrdemCompra.

    RUN geraPrazoCompra.

    RUN geraCotacaoItem.

    IF CAN-FIND(FIRST tt-erro) THEN DO:
    ASSIGN tt-ordens.nro_pedido = ''.
    RUN cdp/cd0666.p(INPUT TABLE tt-erro).
    RUN deleteBOS.
    UNDO, RETURN.
    END.

    ASSIGN tt-ordens.i-status = 2.

    /* Acerto na tabela de ordem de transporte */
    FIND FIRST es-ordem-transporte OF tt-ordens EXCLUSIVE-LOCK NO-ERROR.
    IF AVAIL es-ordem-transporte THEN
    ASSIGN es-ordem-transporte.nro_pedido = tt-ordens.nro_pedido
    es-ordem-transporte.i-status = tt-ordens.i-status .

    END. /* Transaction */

    END. /* For each ordens */

    RUN deleteBOS.

    END. /* Parâmetro de Geração do PDC */.

    IF CAN-FIND(FIRST tt-log) THEN DO:

    FOR EACH tt-log:

    CREATE tt-erro.
    ASSIGN tt-erro.i-sequen = i-seq-error + 1
    tt-erro.cd-erro = 17006
    tt-erro.mensagem = tt-log.mensagem.

    END.

    RUN cdp/cd0666.p(INPUT TABLE tt-erro).
    RUN deleteBOS.
    END.

    END PROCEDURE.

    PROCEDURE deleteBOS :
    /*------------------------------------------------------------------------------
    Purpose:
    Notes:
    ------------------------------------------------------------------------------*/

    IF VALID-HANDLE(h-boin295) THEN DO:
    DELETE PROCEDURE h-boin295.
    ASSIGN h-boin295 = ?.
    END.

    IF VALID-HANDLE(h-boin295desc) THEN DO:
    DELETE PROCEDURE h-boin295desc .
    ASSIGN h-boin295desc = ?.
    END.

    IF VALID-HANDLE(h-boin274sd) THEN DO:
    DELETE PROCEDURE h-boin274sd.
    ASSIGN h-boin274sd = ?.
    END.

    IF VALID-HANDLE(h-boin356ca) THEN DO:
    DELETE PROCEDURE h-boin356ca.
    ASSIGN h-boin356ca = ?.
    END.

    IF VALID-HANDLE(h-boin356) THEN DO:
    DELETE PROCEDURE h-boin356.
    ASSIGN h-boin356 = ?.
    END.

    IF VALID-HANDLE(h-boin274vl) THEN DO:
    DELETE PROCEDURE h-boin274vl.
    ASSIGN h-boin274vl = ?.
    END.

    IF VALID-HANDLE(h-boin356vl) THEN DO:
    DELETE PROCEDURE h-boin356vl .
    ASSIGN h-boin356vl = ?.
    END.

    IF VALID-HANDLE(hDBOEmitente) THEN DO:
    DELETE PROCEDURE hDBOEmitente.
    ASSIGN hDBOEmitente = ?.
    END.

    IF VALID-HANDLE(h-boin706) THEN DO:
    DELETE PROCEDURE h-boin706 .
    ASSIGN h-boin706 = ?.
    END.

    IF VALID-HANDLE(hboin082ca) THEN DO:
    DELETE PROCEDURE hboin082ca.
    ASSIGN hboin082ca = ?.
    END.

    IF VALID-HANDLE(h-boin082vl) THEN DO:
    DELETE PROCEDURE h-boin082vl.
    ASSIGN h-boin082vl = ?.
    END.

    IF VALID-HANDLE(h-boin082sd) THEN DO:
    DELETE PROCEDURE h-boin082sd.
    ASSIGN h-boin082sd = ?.
    END.

    IF VALID-HANDLE(h-acomp) THEN RUN pi-finalizar IN h-acomp.

    END PROCEDURE.

    PROCEDURE geraCotacaoItem :
    /*------------------------------------------------------------------------------
    Purpose: EfetivaPedidos
    Notes:
    ------------------------------------------------------------------------------*/

    /* Cotacao Item ------------------------------------------------------------- */
    RUN pi-acompanhar IN h-acomp (INPUT 'Gerando Cotacao de Item... ' + STRING(tt-pedido-compr.num-pedido) + "/" + STRING(tt-ordem-compra.numero-ordem)).

    RUN preparaCotacaoOrdemCompraPedEmerg IN h-boin082sd (INPUT tt-ordem-compra.numero-ordem ,
    INPUT tt-ordem-compra.num-pedido,
    INPUT tt-ordem-compra.cod-emitente ,
    INPUT tt-ordem-compra.it-codigo,
    INPUT tt-ordem-compra.cod-estabel,
    INPUT tt-ordem-compra.qt-solic,
    INPUT tt-prazo-compra.data-entrega,
    INPUT-OUTPUT tt-ordem-compra.cod-comprado,
    OUTPUT l-codigo-icm-sensitive,
    OUTPUT l-aliquota-icm-sensitive,
    OUTPUT l-aliquota-iss-sensitive,
    OUTPUT l-valor-taxa-sensitive,
    OUTPUT l-taxa-financ-sensitive,
    OUTPUT l-possui-reaj-sensitive,
    OUTPUT TABLE tt-cotacao-item).
    FIND FIRST tt-cotacao-item NO-ERROR.

    ASSIGN tt-cotacao-item.numero-ordem = tt-ordem-compra.numero-ordem
    tt-cotacao-item.cod-emitente = tt-ordem-compra.cod-emitente
    tt-cotacao-item.it-codigo = tt-ordem-compra.it-codigo
    tt-cotacao-item.cod-trans = tt-ordem-compra.cod-trans
    tt-cotacao-item.preco-fornec = tt-ordens.val_servico
    tt-cotacao-item.contato = tt-ordens.solicitante
    tt-cotacao-item.mo-codigo = 0 /* Real */ .

    /*--- Calcula o pre-unit-for ---*/
    IF NOT VALID-HANDLE(hboin082ca) THEN
    RUN inbo/boin082ca.p PERSISTENT SET hboin082ca.

    RUN calculaPrecoUnitFornecedorCotacao IN hBoin082ca (INPUT NO,
    INPUT tt-cotacao-item.numero-ordem,
    INPUT-OUTPUT TABLE tt-cotacao-item).
    IF VALID-HANDLE(hBoin082ca) THEN DO:
    DELETE PROCEDURE hBoin082ca.
    hBoin082ca = ?.
    END.

    RUN emptyRowErrors IN h-boin082vl.

    RUN validateCreatePedEmerg IN h-boin082vl (INPUT TABLE tt-cotacao-item,
    OUTPUT TABLE RowErrors).

    RUN showErrorsDBO(INPUT h-boin082vl, INPUT tt-ordens.nro_sequencia).

    RUN executeCreatePedEmerg IN h-boin082vl (OUTPUT rw-cotacao).

    RUN showErrorsDBO(INPUT h-boin082vl, INPUT tt-ordens.nro_sequencia).

    RUN returnExisteDesp IN h-boin706(INPUT rw-cotacao,
    OUTPUT l-existe-despesa).

    FIND FIRST tt-cotacao-item NO-LOCK.

    RUN gotoKey IN hDBOEmitente (INPUT tt-cotacao-item.cod-emitente).
    RUN getIntfield IN hDBOEmitente (INPUT "natureza":U, OUTPUT i-natureza).
    RUN getCharfield IN hDBOEmitente (INPUT "pais":U, OUTPUT c-pais-emit).

    IF i-natureza = 3 OR i-natureza = 4 THEN DO:

    RUN adbo/boad107na.p PERSISTENT SET h-boad107na.

    RUN openquerystatic IN h-boad107na (INPUT "main":U).

    RUN gotokey IN h-boad107na(INPUT tt-ordem-compra.cod-estabel).

    IF RETURN-VALUE = "OK":U THEN DO:
    RUN getCharField IN h-boad107na (INPUT "pais":U, OUTPUT c-pais-estab).
    IF c-pais-emit <> c-pais-estab THEN ASSIGN l-despesa = NO.
    END.
    END.

    /* Cria as despesas para a cotacao */
    IF NOT l-existe-despesa AND l-despesa THEN
    RUN sugereDespesas IN h-boin706(INPUT rw-cotacao).

    END PROCEDURE.

    PROCEDURE geraOrdemCompra :
    /*------------------------------------------------------------------------------
    Purpose: geraOrdemCompra
    Notes:
    ------------------------------------------------------------------------------*/

    DEF BUFFER b-tt-ordem-compra FOR tt-ordem-compra.

    ASSIGN lLoop = TRUE.

    IF VALID-HANDLE(h-boin274vl) THEN RUN emptyRowErrors IN h-boin274vl.

    FIND FIRST ITEM NO-LOCK /* Parâmetro énico */
    WHERE ITEM.it-codigo = es-param-ordem.it-codigo NO-ERROR.

    CREATE tt-ordem-compra.
    ASSIGN tt-ordem-compra.cod-estabel = tt-pedido-compr.cod-estabel
    tt-ordem-compra.num-pedido = tt-pedido-compr.num-pedido
    tt-ordem-compra.cod-emitente = tt-pedido-compr.cod-emitente
    tt-ordem-compra.it-codigo = ITEM.it-codigo
    tt-ordem-compra.cod-comprado = tt-ordens.nome_solicitado
    tt-ordem-compra.requisitante = tt-ordens.solicitante
    tt-ordem-compra.dep-almoxar = ITEM.deposito-pad
    tt-ordem-compra.situacao = 2 /* Confirmada */
    tt-ordem-compra.preco-fornec = tt-ordens.val_servico
    tt-ordem-compra.qt-solic = es-param-ordem.qt-solic
    tt-ordem-compra.ct-codigo = ITEM.ct-codigo
    tt-ordem-compra.sc-codigo = ITEM.sc-codigo
    tt-ordem-compra.cod-unid-negoc = ITEM.cod-unid-negoc
    tt-ordem-compra.tp-despesa = emitente.tp-desp-padrao
    tt-ordem-compra.r-rowid = ROWID(tt-ordem-compra).

    RUN geraNumeroOrdemPedEmerg in h-boin274sd (OUTPUT i-num-ordem,
    OUTPUT TABLE RowErrors).

    RUN pi-acompanhar IN h-acomp (INPUT 'Gerando Ordem de Compra... ' + STRING(i-num-ordem)).

    DO WHILE lLoop:
    FIND FIRST b-tt-ordem-compra
    WHERE b-tt-ordem-compra.numero-ordem = i-num-ordem NO-ERROR.
    IF NOT AVAIL b-tt-ordem-compra THEN ASSIGN lLoop = FALSE.
    ELSE ASSIGN i-num-ordem = i-num-ordem + 1.
    END.
    ASSIGN tt-ordem-compra.numero-ordem = i-num-ordem.

    RUN pi-acompanhar IN h-acomp (INPUT 'Validando Ordem de Compra... ' + STRING(i-num-ordem)).

    RUN validateCreatePedEmerg IN h-boin274vl (INPUT TABLE tt-ordem-compra,
    INPUT NO,
    OUTPUT l-manut-item-fornec, /* retorna se irÿ chamar tela de manut */
    OUTPUT TABLE RowErrors,
    OUTPUT i-num-ordem).

    RUN showErrorsDBO(INPUT h-boin274vl, tt-ordens.nro_sequencia).
    IF RETURN-VALUE = "NOK" THEN DO:
    ASSIGN tt-ordens.nro_pedido = ''.
    RUN emptyRowErrors IN h-boin274vl.
    END.

    /* Ordem de Compra ---------------------------------------------------------- */
    RUN pi-acompanhar IN h-acomp (INPUT 'Efetivando Ordem de Compra... ' + STRING(tt-pedido-compr.num-pedido) + "/" + STRING(tt-ordem-compra.numero-ordem)).
    RUN setRecord IN h-boin274vl(INPUT TABLE tt-ordem-compra).
    RUN executeCreatePedEmerg IN h-boin274vl(OUTPUT tt-ordem-compra.r-rowid) NO-ERROR.

    RUN showErrorsDBO(INPUT h-boin274vl, INPUT tt-ordens.nro_sequencia).


    END PROCEDURE.

    PROCEDURE geraPedidoCompra :
    /*------------------------------------------------------------------------------
    Purpose:
    Notes:
    ------------------------------------------------------------------------------*/

    DEF BUFFER b-tt-pedido-compr FOR tt-pedido-compr.

    ASSIGN lLoop = TRUE.

    FIND FIRST emitente NO-LOCK
    WHERE emitente.nome-abrev = tt-ordens.nome_abrev NO-ERROR.

    RUN geraNumeroPedidoCompra IN h-boin295 (OUTPUT i-num-pedido).
    RUN pi-acompanhar IN h-acomp (INPUT 'Gerando Pedido de Compra... ' + STRING(i-num-pedido)).

    DO WHILE lLoop:
    FIND FIRST b-tt-pedido-compr WHERE b-tt-pedido-compr.num-pedido = i-num-pedido NO-ERROR.
    IF NOT AVAIL b-tt-pedido-compr THEN lLoop = FALSE.
    ELSE ASSIGN i-num-pedido = i-num-pedido + 1.
    END.

    RUN preparaPedidoCompra IN h-boin295 (OUTPUT c-formato-cgc,
    OUTPUT l-modulo-ge,
    OUTPUT c-end-cobranca-aux,
    OUTPUT c-end-entrega-aux,
    OUTPUT i-cod-mensagem,
    OUTPUT c-seg-usuario,
    OUTPUT i-cond-pagto).

    MESSAGE 'Transp: ' tt-ordens.nome-transpVIEW-AS ALERT-BOX INFO BUTTONS OK.

    FIND FIRST transporte NO-LOCK
    WHERE transporte.nome-abrev = tt-ordens.nome-transp NO-ERROR.

    IF AVAIL transporte THEN
    MESSAGE 'Existe Transportadora' VIEW-AS ALERT-BOX INFO BUTTONS OK.

    CREATE tt-pedido-compr.
    ASSIGN tt-pedido-compr.cod-estabel = tt-ordens.cod-estabel
    tt-pedido-compr.num-pedido = i-num-pedido
    tt-pedido-compr.data-pedido = TODAY
    tt-pedido-compr.end-cobranca = c-end-cobranca-aux
    tt-pedido-compr.end-entrega = c-end-entrega-aux
    tt-pedido-compr.cod-mensagem = i-cod-mensagem
    tt-pedido-compr.responsavel = c-seg-usuario
    tt-pedido-compr.situacao = 2 /* Não Impresso */
    tt-pedido-compr.natureza = es-param-ordem.natureza
    tt-pedido-compr.cod-emitente = emitente.cod-emitente
    tt-pedido-compr.cod-cond-pag = emitente.cod-cond-pag
    tt-pedido-compr.cod-transp = IF AVAIL transporte THEN transporte.cod-transp ELSE 0
    tt-pedido-compr.frete = es-param-ordem.frete /* Pago */
    tt-pedido-compr.via-transp = transporte.via-transp
    tt-pedido-compr.emergencial = TRUE.

    IF es-param-ordem.comentarios THEN
    ASSIGN tt-pedido-compr.comentarios = "Local de Entrega: " + STRING(emitente.endereco ) + CHR(13) +
    "Material: " + STRING(tt-ordens.des_material ) + CHR(13) +
    "Vl. Material: " + STRING(tt-ordens.val_bruto_cobrado ) + CHR(13) +
    "Volume: " + STRING(tt-ordens.qtde_volume ) + CHR(13) +
    "Altura: " + STRING(tt-ordens.altura ) + CHR(13) +
    "Largura: " + STRING(tt-ordens.largura ) + CHR(13) +
    "Profundidade: " + STRING(tt-ordens.profundidade ) + CHR(13) +
    "Dimensäes: " + STRING(tt-ordens.dimensoes ) + CHR(13) +
    "Peso: " + STRING(tt-ordens.peso ) + CHR(13) .

    RUN emptyRowErrors IN h-boin295.

    RUN pi-acompanhar IN h-acomp (INPUT 'Validando Pedido de Compra... ' + STRING(i-num-pedido)).

    RUN validateCreatePedEmerg IN h-boin295 (INPUT TABLE tt-pedido-compr,
    OUTPUT iNumNewPedido).


    RUN showErrorsDBO(INPUT h-boin295, INPUT tt-ordens.nro_sequencia).
    IF RETURN-VALUE = "NOK" THEN DO:
    MESSAGE 1 VIEW-AS ALERT-BOX INFO BUTTONS OK.
    ASSIGN tt-ordens.nro_pedido = ''.
    RUN emptyRowErrors IN h-boin295.
    END.

    RUN pi-acompanhar IN h-acomp (INPUT 'Efetivando Pedido de Compra...' + STRING(tt-pedido-compr.num-pedido)).

    /* Pedido de Compra---------------------------------------------------------- */
    RUN emptyRowErrors IN h-boin295.
    RUN openQueryStatic IN h-boin295 ("Main").

    RUN setRecord IN h-boin295 (INPUT TABLE tt-pedido-compr).

    RUN createRecord IN h-boin295.

    RUN showErrorsDBO(INPUT h-boin295, INPUT tt-ordens.nro_sequencia).
    IF RETURN-VALUE = 'NOK' THEN DO:
    MESSAGE 2 VIEW-AS ALERT-BOX INFO BUTTONS OK.
    ASSIGN tt-ordens.nro_pedido = ''.
    RUN emptyRowErrors IN h-boin295.
    END.

    ASSIGN tt-ordens.nro_pedido = STRING(i-num-pedido).

    END PROCEDURE.

    PROCEDURE geraPrazoCompra :
    /*------------------------------------------------------------------------------
    Purpose: geraPrazoCompra
    Notes:
    ------------------------------------------------------------------------------*/

    RUN pi-acompanhar IN h-acomp (INPUT 'Gerando Prazo de Compra... ' + STRING(tt-ordem-compra.num-pedido) + "/" + STRING(tt-ordem-compra.numero-ordem)).

    RUN setConstraintNumOrdem IN h-boin356 (INPUT tt-ordem-compra.numero-ordem).
    RUN openQueryStatic IN h-boin356 (INPUT "byNumOrdembyParcela").
    RUN getFirst IN h-boin356.
    RUN getBatchRecords IN h-boin356 (?, NO, ?, OUTPUT i-nro-rows, OUTPUT TABLE tt-prazo-compra-aux).

    RUN setRecord IN h-boin356ca (INPUT TABLE tt-prazo-compra-aux).

    RUN calculaProximaParcelaPrazoCompra IN h-boin356ca (INPUT tt-ordem-compra.numero-ordem,
    INPUT tt-ordem-compra.it-codigo,
    INPUT tt-ordem-compra.cod-estabel,
    OUTPUT i-parcela, /* s½ esse ² usado */
    OUTPUT c-un,
    OUTPUT da-dt-entrega).

    RUN calculaQuantParcelaPrazoCompra IN h-boin356ca (INPUT ?,
    INPUT tt-ordem-compra.numero-ordem,
    INPUT tt-ordem-compra.qt-solic,
    OUTPUT de-quantidade).
    CREATE tt-prazo-compra.
    ASSIGN tt-prazo-compra.numero-ordem = tt-ordem-compra.numero-ordem
    tt-prazo-compra.data-entrega = TODAY
    tt-prazo-compra.natureza = tt-ordem-compra.natureza
    tt-prazo-compra.parcela = i-parcela
    tt-prazo-compra.un = c-un
    tt-prazo-compra.situacao = 2
    tt-prazo-compra.quantidade = de-quantidade
    tt-prazo-compra.qtd-sal-forn = de-quantidade
    tt-prazo-compra.data-entrega = da-dt-entrega
    tt-prazo-compra.r-rowid = ROWID(tt-prazo-compra).


    /* Prazo Comrpa ------------------------------------------------------------- */
    RUN pi-acompanhar IN h-acomp (INPUT 'Efetivando Prazo de Compra... ' + STRING(tt-pedido-compr.num-pedido) + "/" + STRING(tt-ordem-compra.numero-ordem)).

    RUN emptyRowObject IN h-boin356.
    RUN gotoKey IN h-boin356 (INPUT tt-prazo-compra.numero-ordem,
    INPUT tt-prazo-compra.parcela).
    /*--- Se retornar "NOK" ² por que o registro ainda n’o existe ---*/
    IF RETURN-VALUE <> "OK":U THEN DO:

    RUN setRecord IN h-boin356vl (INPUT TABLE tt-prazo-compra).
    RUN inputTableOrdemCompra IN h-boin356vl (INPUT TABLE tt-ordem-compra).
    RUN executeCreateManutOrdCompra IN h-boin356vl (INPUT "":U, /* usuario do sistema */
    OUTPUT tt-prazo-compra.r-rowid).
    END.
    ELSE DO:
    DEF VAR r-aux AS ROWID NO-UNDO.
    RUN getRowid IN h-boin356 (OUTPUT r-aux).
    RUN setRecord IN h-boin356vl (INPUT TABLE tt-prazo-compra).
    RUN inputTableOrdemCompra in h-boin356vl (INPUT TABLE tt-ordem-compra).
    RUN executeUpdateManutOrdCompra IN h-boin356vl(INPUT r-aux). /* tt-prazo-compra.r-rowid era desconhecido */

    RUN showErrorsDBO(INPUT h-boin356vl, INPUT tt-ordens.nro_sequencia).
    END.

    END PROCEDURE.

    PROCEDURE initializeBOS :
    /*------------------------------------------------------------------------------
    Purpose:
    Notes:
    ------------------------------------------------------------------------------*/
    IF NOT VALID-HANDLE(h-boin295) THEN
    RUN inbo/boin295.p PERSISTENT SET h-boin295.

    IF NOT VALID-HANDLE(h-boin295desc) THEN DO:
    RUN inbo/boin295desc.p PERSISTENT SET h-boin295desc.
    RUN openQueryStatic IN h-boin295desc ( INPUT "Main":U ).
    END.

    IF NOT VALID-HANDLE(h-boin274sd) THEN
    RUN inbo/boin274sd.p PERSISTENT SET h-boin274sd.

    IF NOT VALID-HANDLE(h-boin356ca) THEN
    RUN inbo/boin356ca.p PERSISTENT SET h-boin356ca.

    IF NOT VALID-HANDLE(h-boin356) THEN DO:
    RUN inbo/boin356.p PERSISTENT SET h-boin356.
    RUN openQueryStatic IN h-boin356 (INPUT "Main":U).
    END.

    IF NOT VALID-HANDLE(h-boin274vl) THEN
    RUN inbo/boin274vl.p PERSISTENT SET h-boin274vl.

    IF NOT VALID-HANDLE(h-boin356vl) THEN
    RUN inbo/boin356vl.p PERSISTENT SET h-boin356vl.

    IF NOT VALID-HANDLE(h-boin082vl) THEN
    RUN inbo/boin082vl.p PERSISTEN SET h-boin082vl.

    IF NOT VALID-HANDLE(h-boin082sd) THEN
    RUN inbo/boin082sd.p PERSISTEN SET h-boin082sd.

    IF NOT VALID-HANDLE(h-boin706) THEN
    RUN inbo/boin706.p PERSISTENT SET h-boin706.

    IF NOT VALID-HANDLE(hDBOEmitente) THEN DO:
    RUN adbo/boad098na.p PERSISTENT SET hdboemitente.
    RUN openQueryStatic IN hDBOEmitente (INPUT "Main":U) NO-ERROR.
    END.

    RUN utp/ut-acomp.p PERSISTENT SET h-acomp.
    RUN pi-inicializar IN h-acomp (INPUT "Emissão de Pedidos de Compra").

    END PROCEDURE.

    PROCEDURE showErrorsDBO :
    /*------------------------------------------------------------------------------
    Purpose:
    Notes:
    ------------------------------------------------------------------------------*/
    DEF INPUT PARAM p-handle AS HANDLE NO-UNDO.
    DEF INPUT PARAM i-n-ped AS INT NO-UNDO.

    RUN getRowErrors IN p-handle (OUTPUT TABLE RowErrors ).

    SESSION:SET-WAIT-STATE("":U).

    IF CAN-FIND(FIRST RowErrors) THEN DO:
    FOR EACH RowErrors:
    ASSIGN i-seq-error = i-seq-error + 1.
    CREATE tt-erro.
    ASSIGN tt-erro.i-sequen = i-seq-error
    tt-erro.cd-erro = ErrorNumber
    tt-erro.mensagem = ErrorDescription + CHR(13)
    + CHR(13)
    + "Sequência Ordem de Transporte: " + STRING(i-n-ped) .
    END.
    RETURN 'NOK'.
    END.

    RETURN 'OK'.
    END PROCEDURE.
    Cleiton e rlfritz curtiram isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página