Não gerar outra sequência do mesmo item do OP

Discussão em 'Progress 4GL' iniciado por thasia, Setembro 17, 2012.

  1. thasia

    thasia Sem Pontuação

    No programa que eu fiz gostaria que quando o mesmo item estivesse em mais de 1 lote que ficasse conforme exemplo abaixo:

    SEQ.| CODIGO | Quantidade - Lote
    | DESCRICAO |
    010 | 50-6540-1000 | 48,0000 - inicial
    | 6540 10 TEE UNIAO PARA TUBO 10MM | 270,0000 - teste lote

    e Esta saindo na OP conforme abaixo o mesmo item esta saindo conforme a quantidade de lotes que este item contempla onde se eu tiver 5 lotes para o item sairá o mesmo item 5 vezes:

    SEQ.| CODIGO | Quantidade - Lote
    | DESCRICAO |
    010 | 50-6540-1000 | 48,0000 - inicial
    | 6540 10 TEE UNIAO PARA TUBO 10MM
    020 | 50-6540-1000 | 270,0000 - teste lote
    | 6540 10 TEE UNIAO PARA TUBO 10MM |

    Alguém poderia me ajudar? Segue abaixo o código do meu programa

    /*include de controle de versÆo*/
    {include/i-prgvrs.i Camozzi-rp 1.00.00.000}

    /* pr‚processador para ativar ou nÆo a sa¡da para RTF
    &GLOBAL-DEFINE RTF YES*/

    /* pr‚processador para setar o tamanho da p gina */
    &SCOPED-DEFINE pagesize 999999999

    /* defini‡Æo das temp-tables para recebimento de parƒmetros */
    define temp-table tt-param no-undo
    field destino as integer
    field arquivo as char format "x(35)"
    field usuario as char format "x(12)"
    field data-exec as date
    field hora-exec as integer
    field modelo-rtf as char format "x(35)"
    field l-habilitaRtf as LOG
    FIELD planejador-ini AS CHAR
    FIELD planejador-fim AS CHAR
    FIELD nr-ord-ini AS INT
    FIELD nr-ord-fim AS INT
    FIELD nr-linha-ini AS INT
    FIELD nr-linha-fim AS INT.

    DEF TEMP-TABLE tt-digita LIKE ord-prod
    FIELD imprimir AS LOGICAL.

    DEFINE TEMP-TABLE tt-raw-digita NO-UNDO
    FIELD raw-digita AS RAW.

    /* recebimento de parƒmetros */

    DEFINE INPUT PARAMETER raw-param AS RAW NO-UNDO.
    DEFINE INPUT PARAMETER TABLE FOR tt-raw-digita.

    /* DEFINE INPUT PARAMETER TABLE FOR tt-digita. */

    CREATE tt-param.
    RAW-TRANSFER raw-param TO tt-param.

    FOR EACH tt-raw-digita:
    CREATE tt-digita.
    RAW-TRANSFER tt-raw-digita.raw-digita TO tt-digita.
    END.

    /* include padrÆo para vari veis de relat¢rio */
    {include/i-rpvar.i}

    /* defini‡Æo de vari veis */
    DEF VAR h-acomp AS HANDLE NO-UNDO.
    DEF VAR i-linha AS INT NO-UNDO.

    /*Vari veis do cabe‡alho*/
    DEF VAR c-ord-prod-estado AS CHAR FORMAT "x(12)" NO-UNDO.
    DEF VAR c-ord-prod-item AS CHAR NO-UNDO.
    DEF VAR i-cont-pag AS INT NO-UNDO.

    /*Vari veis da parte1*/
    DEF VAR i-linha-narrativa AS INT NO-UNDO.
    DEF VAR i-linha-processo AS INT NO-UNDO.
    DEF VAR d-tot-tempo-homem LIKE oper-ord.tempo-maquin NO-UNDO.
    DEF VAR d-tot-tempo-setup LIKE oper-ord.tempo-maquin NO-UNDO.
    DEF VAR d-tot-tempo-maq LIKE oper-ord.tempo-maquin NO-UNDO.


    /*Defini‡Æo de temp-table p g1*/
    DEF TEMP-TABLE tt-narrativa NO-UNDO
    FIELD narrativa AS CHAR FORMAT "x(140)".

    /*Vari veis da part2*/
    DEF VAR i-cont-componente AS INT FORMAT "999" NO-UNDO.
    DEF VAR l-parte2 AS LOGICAL INITIAL NO NO-UNDO.

    /*Vari veis do processo p g1*/
    DEF VAR c-tempo-med AS CHAR FORMAT "x(8)" NO-UNDO.

    /*Defini‡Æo de buffer's*/
    DEF BUFFER b-oper-ord FOR oper-ord.
    DEF BUFFER b-oper-ord2 FOR oper-ord.
    DEF BUFFER b-item FOR ITEM.
    DEF BUFFER b-item2 FOR ITEM.

    /* include padrÆo para output de relat¢rios */
    {include/i-rpout.i &STREAM="stream str-rp"}

    /* include com a defini‡Æo da frame de cabe‡alho e rodap‚ */
    {include/i-rpcab.i &STREAM="str-rp"}

    /*include para quebrar de linhas*/
    {include/tt-edit.i}
    {include/pi-edit.i}

    /* executando de forma persistente o utilit rio de acompanhamento */
    RUN utp/ut-acomp.p PERSISTENT SET h-acomp.
    {utp/ut-liter.i Imprimindo *}
    RUN pi-inicializar IN h-acomp (INPUT RETURN-VALUE).

    /* bloco principal do programa */
    /* ASSIGN c-programa = "" */
    /* c-versao = "" */
    /* c-revisao = "" */
    /* c-empresa = "CAMOZZI DO BRAZIL" */
    /* c-sistema = "" */
    /* c-titulo-relat = "". */
    /* VIEW STREAM str-rp FRAME f-cabec. */

    FOR EACH tt-digita WHERE tt-digita.imprimir = YES
    BREAK BY tt-digita.nr-ord-prod:

    RUN pi-acompanhar IN h-acomp(INPUT "Nr. Ordem " + STRING(tt-digita.nr-ord-prod)).

    /*Encontra a ordem de produ‡Æo e "desflega" a emissÆo requisitante e ordem*/
    FIND FIRST ord-prod EXCLUSIVE-LOCK
    WHERE ord-prod.nr-ord-prod = tt-digita.nr-ord-prod NO-ERROR.
    IF AVAIL ord-prod THEN DO:
    ASSIGN ord-prod.emite-requis = NO
    ord-prod.emite-ordem = NO.
    END.


    /*Zerando variav‚is*/
    ASSIGN c-ord-prod-estado = ""
    c-ord-prod-item = ""
    i-linha-narrativa = 0
    i-linha-processo = 0
    i-cont-componente = 0
    i-cont-pag = 0
    i-linha = 0
    d-tot-tempo-homem = 0
    d-tot-tempo-setup = 0
    d-tot-tempo-maq = 0.

    EMPTY TEMP-TABLE tt-editor.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.

    /*ImpressÆo da Narrativa*/
    RUN pi-print-editor(INPUT tt-digita.narrativa, INPUT 140).
    FOR EACH tt-editor:
    CREATE tt-narrativa.
    ASSIGN tt-narrativa.narrativa = tt-editor.conteudo.
    END.

    PUT STREAM str-rp "Narrativa ordem" AT 62 SKIP.
    FOR EACH tt-narrativa:
    PUT STREAM str-rp tt-narrativa.narrativa AT 3.
    ASSIGN i-linha-narrativa = i-linha-narrativa + 1.

    IF i-linha-narrativa = 3 THEN
    LEAVE.

    END.
    PUT STREAM str-rp SKIP(3 - i-linha-narrativa)
    FILL("-",150) AT 1 FORMAT "x(150)".
    ASSIGN i-linha = i-linha + 5.

    EMPTY TEMP-TABLE tt-narrativa.

    /*ImpressÆo do Processo, parte1*/
    RUN pi-cab-processo.

    FIND FIRST b-oper-ord NO-LOCK
    WHERE b-oper-ord.nr-ord-prod = tt-digita.nr-ord-prod NO-ERROR.
    IF AVAIL b-oper-ord THEN DO:

    /*Dados da Opera‡Æo*/
    FOR EACH b-oper-ord2 NO-LOCK
    WHERE b-oper-ord2.nr-ord-prod = b-oper-ord.nr-ord-prod
    BREAK BY(b-oper-ord2.nr-ord-prod)
    BY(b-oper-ord2.sequencia):

    FIND FIRST gm-estab no-lock
    WHERE gm-estab.gm-codigo = b-oper-ord2.gm-codigo NO-ERROR.

    /*Verica‡Æo de unidade de medida de tempo*/
    IF b-oper-ord2.un-med-tempo = 1 THEN
    ASSIGN c-tempo-med = "Horas".
    IF b-oper-ord2.un-med-tempo = 2 THEN
    ASSIGN c-tempo-med = "Minutos".
    IF b-oper-ord2.un-med-tempo = 3 THEN
    ASSIGN c-tempo-med = "Segundos".
    IF b-oper-ord2.un-med-tempo = 4 THEN
    ASSIGN c-tempo-med = "Dias".

    /*ImpressÆo dos processos*/

    /*Verifica se nÆo falta linha para impressÆo, se faltar sÆo puladas linhas
    para a pagina seguinte e impresso cabe‡alhos*/
    IF i-linha + 3 > 64 THEN DO:

    PUT STREAM str-rp SKIP(64 - i-linha).
    ASSIGN i-linha = 0.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.
    /*ImpressÆo do Processo*/
    RUN pi-cab-processo.

    END.

    /*Valor total do tempo utilizado*/
    ASSIGN d-tot-tempo-homem = d-tot-tempo-homem + b-oper-ord2.tempo-homem
    d-tot-tempo-setup = d-tot-tempo-setup + b-oper-ord2.tempo-prepar
    d-tot-tempo-maq = d-tot-tempo-maq + b-oper-ord2.tempo-maquin.

    PUT STREAM str-rp b-oper-ord2.op-codigo AT 1 "|"
    b-oper-ord2.gm-codigo AT 8 "|"
    gm-estab.cc-codigo AT 18 "|"
    b-oper-ord2.fi-codigo AT 29 "|"
    c-tempo-med AT 38
    "|" AT 46
    b-oper-ord2.tempo-homem AT 48
    "|" AT 59
    b-oper-ord2.tempo-prepar AT 60
    "|" AT 71
    b-oper-ord2.tempo-maquin AT 72
    "|" AT 83
    "|" AT 103
    "|" AT 125
    "|" AT 150 SKIP
    b-oper-ord2.descricao AT 1
    "|" AT 150 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)".

    ASSIGN i-linha = i-linha + 3.

    /*ImpressÆo de totais do Processo*/
    IF LAST-OF(b-oper-ord2.nr-ord-prod) THEN DO:

    PUT STREAM str-rp "Totais: " AT 38
    "|" AT 46
    d-tot-tempo-homem AT 48
    "|" AT 59
    d-tot-tempo-setup AT 60
    "|" AT 71
    d-tot-tempo-maq AT 72
    "|" AT 83
    "|" AT 103
    "|" AT 125
    "|" AT 150
    FILL("-",150) AT 1 FORMAT "x(150)".

    ASSIGN i-linha = i-linha + 2.

    END.


    END. /*ImpressÆo de Processo*/



    IF i-linha + 14 > 64 THEN DO:
    /*Pulo de linhas para ser impresso a segunda parte do relat¢rio*/
    PUT STREAM str-rp SKIP(64 - i-linha).
    ASSIGN i-linha = 0.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.

    /*Chamada de procedure para constru‡Æo de cabe‡ado dos componentes*/
    RUN pi-cabec-componentes.

    ASSIGN l-parte2 = YES.

    END.

    END.
    ELSE DO:
    /*O cliente pediu para que seja impresso direto os componetes
    sem pular linhas ou for‡ar quebras de p gina*/
    /* /*Caso nÆo exista opera‡äes para o item*/ */
    /* PUT STREAM str-rp SKIP(64 - INT(i-linha MODULO 64 ) ). */
    /* ASSIGN i-linha = i-linha + ((i-cont-pag * 64) - i-linha). */

    END.

    /*Caso o cabe‡alho de p gina parte 2 j  fora impressa esse nÆo permitir  que o
    processo se repita*/
    IF l-parte2 = NO THEN DO:
    /*Chamada de procedure para constru‡Æo de cabe‡ado dos componentes*/
    RUN pi-cabec-componentes.
    END.


    /*Carrega os componentes, parte2*/

    FOR EACH reservas
    WHERE reservas.nr-ord-prod = tt-digita.nr-ord-prod,
    each aloca-reserva
    where aloca-reserva.nr-ord-produ = reservas.nr-ord-produ and
    aloca-reserva.item-pai = reservas.item-pai and
    aloca-reserva.cod-roteiro = reservas.cod-roteiro and
    aloca-reserva.op-codigo = reservas.op-codigo and
    aloca-reserva.it-codigo = reservas.it-codigo and
    aloca-reserva.cod-refer = reservas.cod-refe:

    ASSIGN i-cont-componente = i-cont-componente + 10.

    FIND ITEM NO-LOCK
    WHERE ITEM.it-codigo = reservas.it-codigo.

    IF i-linha + 3 > 64 THEN DO:

    PUT STREAM str-rp SKIP(64 - i-linha).
    ASSIGN i-linha = 0.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.

    /*Chamada de procedure para constru‡Æo de cabe‡ado dos componentes*/
    RUN pi-cabec-componentes.

    END.

    PUT STREAM str-rp i-cont-componente AT 1
    "|" AT 5
    ITEM.it-codigo AT 7
    "|" AT 67
    reservas.cod-localiz AT 68 " - " reservas.cod-depos AT 81
    "|" AT 85
    reservas.un AT 86
    "|" AT 89
    reservas.quant-orig AT 90
    "|" AT 105
    reservas.quant-atend AT 106
    "|" AT 121
    "|" AT 150 SKIP
    "|" AT 5
    ITEM.desc-item AT 7
    "|" AT 67
    "|" AT 85
    "|" AT 89
    "|" AT 105
    "|" AT 121
    "|" AT 150
    FILL("-",150) AT 1 FORMAT "x(150)".



    ASSIGN i-linha = i-linha + 3.

    END.

    /*Verifica se o rodap‚ nÆo ser  cortado, se cortar sÆo "puladas" as linhas necess rias
    e imprime o cabe‡alho*/
    IF i-linha + 10 > 64 THEN DO:

    PUT STREAM str-rp SKIP(64 - i-linha).
    ASSIGN i-linha = 0.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.

    END.

    /*ImpressÆo do Rodap‚*/
    PUT STREAM str-rp "|" AT 150 SKIP
    "|" AT 150 SKIP
    "Materiais entreg. por: ____________________________________ " AT 1
    "Data _____/_____/_____" AT 63
    "Hora: ______ : ______" AT 90
    "|" AT 150 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)"
    "|" AT 150 SKIP
    "Observacao:" AT 1
    FILL("_",138) AT 12 FORMAT "x(138)"
    "|" AT 150 SKIP
    "|" AT 150 SKIP
    FILL("_",149) AT 1 FORMAT "x(149)"
    "|" AT 150 SKIP
    "|" AT 150 SKIP
    FILL("_",149) AT 1 FORMAT "x(149)"
    "|" AT 150 SKIP(1).
    ASSIGN i-linha = i-linha + 10.

    /*Verifica se a ImpressÆo de Controle de Qualidade nÆo ser  cortada*/
    IF i-linha + 12 > 64 THEN DO:

    PUT STREAM str-rp SKIP(64 - i-linha).
    ASSIGN i-linha = 0.

    /*Chamada de procedure para constru‡Æo do cabe‡alho*/
    RUN pi-cabec-pag.


    END.

    PUT STREAM str-rp FILL("-",150) AT 1 FORMAT "x(150)" SKIP
    "Controle de Qualidade" AT 58
    FILL("-",150) AT 1 FORMAT "x(150)" SKIP
    "Qtde aprovada: " AT 1
    "Qtde rejeitada: " AT 35
    "RNC: " AT 70
    "|" AT 150 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)" SKIP
    "Emissao" AT 28
    "|" AT 75
    "Reporte" AT 76
    "|" AT 150 SKIP
    "|" AT 75
    "|" AT 150 SKIP
    FILL("_",30) AT 1 FORMAT "x(30)"
    "_____/_____/_____" AT 34
    "|" AT 75
    FILL("_",30) AT 76 FORMAT "x(30)"
    "_____/_____/_____" AT 109
    "|" AT 150 SKIP
    "Responsavel" AT 1
    "Data" AT 34
    "|" AT 75
    "Responsavel" AT 76
    "Data" AT 109
    "|" AT 150 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)" .

    /*Realiza o Pulo da linhas necess rias para impressÆo de um novo relat¢rio*/
    ASSIGN i-linha = i-linha + 10.
    PUT STREAM str-rp SKIP(64 - i-linha).



    END.

    /*Procedure para cria‡Æo do cabe‡alho do relat¢rio*/
    PROCEDURE pi-cabec-pag:

    /*Defini‡Æo do cabe‡alho*/
    PUT STREAM str-rp "CAMOZZI DO BRAZIL" AT 65 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)".

    /*Busca do item para utilizar a descri‡Æo*/
    FIND FIRST b-item2 NO-LOCK
    WHERE b-item2.it-codigo = tt-digita.it-codigo NO-ERROR.
    ASSIGN c-ord-prod-item = b-item2.it-codigo + " - " + b-item2.desc-item.


    /*Carrega o estado da ordem*/
    IF tt-digita.estado = 1 THEN
    ASSIGN c-ord-prod-estado = "Nao iniciada".
    IF tt-digita.estado = 2 THEN
    ASSIGN c-ord-prod-estado = "Liberada".
    IF tt-digita.estado = 3 THEN
    ASSIGN c-ord-prod-estado = "Alocada".
    IF tt-digita.estado = 4 THEN
    ASSIGN c-ord-prod-estado = "Separada".
    IF tt-digita.estado = 5 THEN
    ASSIGN c-ord-prod-estado = "Requisitada".
    IF tt-digita.estado = 6 THEN
    ASSIGN c-ord-prod-estado = "Iniciada".
    IF tt-digita.estado = 7 THEN
    ASSIGN c-ord-prod-estado = "Finalizada".
    IF tt-digita.estado = 8 THEN
    ASSIGN c-ord-prod-estado = "Terminada".

    ASSIGN i-cont-pag = i-cont-pag + 1 /*Contador de p gina*/
    i-linha = i-linha + 7. /*Contador de linhas*/

    /*ImpressÆo do cabe‡alho - pag1*/
    PUT STREAM str-rp "ORDEM DE PRODUCAO" AT 1 "Pagina: " AT 120 STRING(i-cont-pag) AT 130 SKIP
    "Numero de OP:" AT 1 tt-digita.nr-ord-prod AT 14
    "Emissao: " AT 45 TODAY AT 54 STRING(TIME, "HH:MM") AT 64
    "Data Termino:" AT 80 STRING(tt-digita.dt-termino, "99/99/99") AT 94 SKIP
    "Situacao:" AT 1 c-ord-prod-estado AT 11 SKIP
    "Material:" AT 1 c-ord-prod-item AT 11 FORMAT "x(50)"
    "Linha de Producao:" AT 66 tt-digita.nr-linha AT 84
    "Quantidade :" AT 110 tt-digita.qt-ordem AT 125 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)".


    END.

    /*ImpressÆo do cabe‡alho de processo*/
    PROCEDURE pi-cab-processo:

    PUT STREAM str-rp "PROCESSO" AT 65 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)".
    PUT STREAM str-rp "Oper." AT 1 "|"
    "Grupo Maq." AT 7 "|"
    "C.Custo" AT 19 "|"
    "Fch mtd" AT 27 "|"
    "Un. Med." AT 37
    "|" AT 46
    "Tempo previsto" AT 57
    "|" AT 83
    "Tempo realizado" AT 97
    "|" AT 125
    "|" AT 150 SKIP
    "Descricao" AT 1
    "|" AT 46
    "Homem" AT 50
    "|" AT 59
    "Setup" AT 63
    "|" AT 71
    "Maquina" AT 74
    "|" AT 83
    "Inicio" AT 90
    "|" AT 103
    "Fim" AT 112
    "|" AT 125
    "Executor" AT 134
    "|" AT 150 .
    PUT STREAM str-rp FILL("-",150) AT 1 FORMAT "x(150)".

    ASSIGN i-linha = i-linha + 5. /*Contador de linhas*/

    END.


    /*ImpressÆo dos componentes p g2*/
    PROCEDURE pi-cabec-componentes:

    PUT STREAM str-rp "COMPONENTES / MATERIAS-PRIMAS" AT 52 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)" SKIP
    "SEQ." AT 1
    "|" AT 5
    "CODIGO" AT 7
    "|" AT 67
    "LOC.Fisica - Dep" AT 68
    "|" AT 85
    "Un" AT 86
    "|" AT 89
    "Qtde req." AT 93
    "|" AT 105
    "Qtde atend." AT 108
    "|" AT 121
    "Lote" AT 133
    "|" AT 150 SKIP
    "|" AT 5
    "DESCRICAO" AT 7
    "|" AT 67
    "|" AT 85
    "|" AT 89
    "|" AT 105
    "|" AT 121
    "|" AT 150 SKIP
    FILL("-",150) AT 1 FORMAT "x(150)".


    ASSIGN i-linha = i-linha + 5. /*Contador de linhas*/

    END.

    /*fechamento do output do relat«rio*/
    {include/i-rpclo.i &STREAM="stream str-rp"}
    RUN pi-finalizar IN h-acomp.
    RETURN "OK":U.

Compartilhe esta Página