1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[RESOLVIDO] UPC CP0324 - Reporte por Item

Discussão em 'EMS , HCM e Totvs 11' iniciado por Douglas Henrique da Silva, Fevereiro 13, 2015.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. Douglas Henrique da Silva

    Douglas Henrique da Silva Sem Pontuação

    Bom Dia

    Estou Precisando efetuar uma UPC no Programa CP0324 no Momento da Gravação do reporte alguém

    tem algum exemplo para me auxiliar ?
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Meu caro, de aconselho a fazer a upc na API, cpapi001, ela é usada pelo modulo de produção e chão de fabrica, segue a que eu uso.
    Código:
    /**
    *
    * PROGRAMA:
    *   upc/upc-cpapi001.p
    *
    * FINALIDADE:
    
    */
    
    {grid2/error.i}
    
    using imesul.ems2.producao.Gerenciador.*.
    
    {include/i-epc200.i} /* Definicao tt-EPC */
    {cdp/cd0666.i}       /* Definicao tt-erro */
    {method/dbotterr.i}
    
    
    def input        param p-ind-event as char no-undo.
    def input-output param table for tt-epc.
    
    define variable tempTable    as widget-handle no-undo.
    define variable ttReservas   as widget-handle no-undo.
    define variable queryTemp    as widget-handle no-undo.
    
    define variable validarOrdem as ValidarOrdem     no-undo.
    define variable parametros   as Parametros       no-undo.
    define variable error        as ExceptionControl no-undo.
    
    define variable ordemValida  as logical          no-undo.
    
    for each tt-epc no-lock
        where tt-epc.cod-event     = 'altera-reservas'
          and tt-epc.cod-parameter = 'handle-tt-reservas':
    
        assign tempTable  = widget-handle(tt-epc.val-parameter).
        assign ttReservas = tempTable:default-buffer-handle.
    
        if valid-handle(ttReservas) then do:
            create query queryTemp.
            queryTemp:set-buffers(ttReservas).
            queryTemp:query-prepare('for each ' + ttReservas:name).
            queryTemp:query-open.
            queryTemp:get-first().
    
            assign validarOrdem = new ValidarOrdem()
                   parametros   = new Parametros()
                   error        = new ExceptionControl().
    
            error:clearExceptions().
    
            do while (not queryTemp:query-off-end):
                if ttReservas:buffer-field('dt-vali-lote'):buffer-value <> ? then do:
                    do {&try}:
                        assign ordemValida = false.
                        do {&try}:
                            parametros:find().
                            if parametros:getCod_depos_producao() = ttReservas:buffer-field('cod-depos'):buffer-value then do:
                                error:throwException('CPAPI001','Erro DEPOSITO',substitute('NÆo pode usar o deposito &1, reservado para planejamento', parametros:getCod_depos_producao())).
                            end.
    
                            validarOrdem:setOrdem(ttReservas:buffer-field('nr-ord-produ'):buffer-value).
                            validarOrdem:setItem(ttReservas:buffer-field('it-codigo'):buffer-value).
                            validarOrdem:processar().
                            assign ordemValida = true.
                        {&catch}
    
                        if ordemValida = false then do:
                            find first cst_ger_param no-lock no-error.
    
                            if avail cst_ger_param then do:
                                if cst_ger_param.cod_depos_sobra = ttReservas:buffer-field('cod-depos'):buffer-value then error:throwException('CPAPI001','Erro DEPOSITO',substitute('NÆo pode usar o deposito &1, reservado para planejamento', cst_ger_param.cod_depos_sobra)).
    
                                find first ord-prod no-lock
                                     where ord-prod.nr-ord-produ = ttReservas:buffer-field('nr-ord-produ'):buffer-value
                                           no-error.
    
                                assign ordemValida = false.
    
                                if cst_ger_param.nr_linha[1] <> 0 and cst_ger_param.nr_linha[1] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha[2] <> 0 and cst_ger_param.nr_linha[2] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha[3] <> 0 and cst_ger_param.nr_linha[3] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha[4] <> 0 and cst_ger_param.nr_linha[4] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha[5] <> 0 and cst_ger_param.nr_linha[5] = ord-prod.nr-linha then assign ordemValida = true.
    
                                if ordemValida then do:
                                   find first cst_ger_plano_ordens no-lock
                                        where cst_ger_plano_ordens.nr-ord-produ = ord-prod.nr-ord-produ
                                              no-error.
                                   if not avail cst_ger_plano_ordens then error:throwException('CPAPI001','Erro Planejamento','Est  ordem nÆo pertence a um plano').
    
                                   find first cst_ger_plano no-lock
                                        where cst_ger_plano.it-codigo = ttReservas:buffer-field('it-codigo'):buffer-value
                                          and cst_ger_plano.situacao  = 2
                                              no-error.
                                   if not avail cst_ger_plano then error:throwException('CPAPI001','Erro Planejamento','item da reserva nÆo pertence a um plano Iniciado').
                                end.
    
                                if cst_ger_param.nr_linha_fora[1] <> 0 and cst_ger_param.nr_linha_fora[1] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha_fora[2] <> 0 and cst_ger_param.nr_linha_fora[2] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha_fora[3] <> 0 and cst_ger_param.nr_linha_fora[3] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha_fora[4] <> 0 and cst_ger_param.nr_linha_fora[4] = ord-prod.nr-linha then assign ordemValida = true.
                                if cst_ger_param.nr_linha_fora[5] <> 0 and cst_ger_param.nr_linha_fora[5] = ord-prod.nr-linha then assign ordemValida = true.
    
                                if not ordemValida then error:throwException('CPAPI001','Erro linha de producao','Linha de produ‡Æo da ordem nÆo est  cadastrada para planos ou excessÆo de planos').
                            end.
                        end.
                        if ordemValida then error:clearExceptions().
                    {&catch}
                    if error:catchException() then assign ttReservas:buffer-field('dt-vali-lote'):buffer-value = ?.
                end.
                queryTemp:get-next.
            end.
            queryTemp:query-close().
    
            if error:catchException() then error:showExceptions().
        end.
    end.
    
    
    reissobr curtiu isso.
  3. Douglas Henrique da Silva

    Douglas Henrique da Silva Sem Pontuação

    boa Tarde ..


    estava pensando em fazer uma upc no botão confirma do CP0324.,
    mas vou analisar a sua sugestão também.


    Obrigado
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    a vantagem de fazer a upc na API é que todo o sistema vai passar pela sua regra, não vai precisar sair catando quais programas que fazem reporte no sistema pra por uma upc em cada um.
    reissobr curtiu isso.
  5. Cneves

    Cneves Membro Participativo

    Boa tarde,

    Será que poderia me ajudar?

    Código:
    {include/i-epc200.i} /* Definicao tt-EPC */
    
    def input        param p-ind-event as char no-undo.
    def input-output param table for tt-epc.
    
    define variable tempTable    as widget-handle no-undo.
    define variable ttReservas   as widget-handle no-undo.
    define variable queryTemp    as widget-handle no-undo.
    
    
    for each tt-epc no-lock
        where tt-epc.cod-event     = 'altera-reservas'
          and tt-epc.cod-parameter = 'handle-tt-reservas':
    
        assign tempTable  = widget-handle(tt-epc.val-parameter).
        assign ttReservas = tempTable:default-buffer-handle.
    
        if valid-handle(ttReservas) then do:
            create query queryTemp.
            queryTemp:set-buffers(ttReservas).
            queryTemp:query-prepare('for each ' + ttReservas:name).
            queryTemp:query-open.
            queryTemp:get-first().
    
            do while (not queryTemp:query-off-end):
                if ttReservas:buffer-field('dt-vali-lote'):buffer-value <> ? then do:
                end.
                queryTemp:get-next.
            end.
            queryTemp:query-close().       
        end.
    end.
    Esse é o meu código que estou fazendo .

    Porem esse codigo aqui quando coloco ele entra num looping infinito.
    Código:
            do while (not queryTemp:query-off-end):
                if ttReservas:buffer-field('dt-vali-lote'):buffer-value <> ? then do:
                end.
                queryTemp:get-next.
            end.
    Sabe o que pode ser?
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página