UPC - PD4000

Discussão em 'Progress 4GL' iniciado por kikofr, Outubro 19, 2009.

  1. kikofr

    kikofr Membro Participativo

    Bom dia,

    Estou desenvolvendo uma UPC para o PD4000 e até certo ponto esta funcionando, acontece que coloquei um botão de salvar que faz algumas validações na hora de salvar o pedido, mas o mesmo não acontece quando o usuário salva o item do pedido dando um enter no item, sem clicar no botão (utlizando o metodo choose do botão salvar).

    Gostaria de ver o seguinte, tenho como colocar uma validação na upc que ocorra antes do metodo choose ser acionado no botão? ou se tenho como desativar a posibilidade do usuário dar enter nesse campo?

    Obrigado desde já.
  2. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Bom dia,

    O que deve estar acontecendo é que ao pressionar o Enter esta executando o botão default.

    Já tive situações parecidas, o que fiz foi último evento eu pego a handle do botão original e atribuo a uma variável shared global, coloco um tab-order = no e hidden = true, crio um novo botão com as mesmas características (posição, tamanho, label, tab-order...) e ainda atribuo o default a este novo botão.

    No evento on choose do novo botão, executo minhas funções específicas e depois aplico um choose do botão original.

    []'s.
  3. kikofr

    kikofr Membro Participativo

    Olá, consegui resolver criando a validação em upc no bodi154 que é a bo de manutenção de itens do pedido. Para o evento "AfterValidateRecord". Funcionou, realiza a validação antes de salvar o item no pedido.

    Se alguem precisar do código que foi uitlizado me avise que posto aí.
  4. alexandretm

    alexandretm Membro Participativo

    Ola , Pode me colocar o codigo do PD4000 que criou, pois, tentei varias vezes usar conceito das Bos, mas nao consigo, podem me orientar como usa-las, que devo fazer para incluir/alterar pedidos usando Bo´s
  5. kikofr

    kikofr Membro Participativo

    Opa, criei uma UPC padrão para o programa bodi154.

    Ficou mais ou menos assim.

    Código:
    {include/i-epc200.i1}
    
    def input param pIndEvent as char no-undo.
    def input-output param table for tt-epc.
    
    DEFINE TEMP-TABLE tt-ped-item NO-UNDO LIKE ped-item
           FIELD r-Rowid AS ROWID.
    
    DEFINE  VARIABLE bo-ped-item         AS HANDLE     NO-UNDO.
    DEFINE  VARIABLE bo-ped-venda-cal    AS HANDLE     NO-UNDO.
    DEFINE  VARIABLE bo-ped-item-cal     AS HANDLE     NO-UNDO.
    DEF     NEW GLOBAL SHARED VAR whVlPreFim             AS WIDGET-HANDLE NO-UNDO.
    DEF     VAR vValorFinal     AS DEC  FORMAT "->>>>>9.999999999" NO-UNDO.
    DEF     VAR vValorInicial   AS DEC  FORMAT "->>>>>9.999999999" NO-UNDO.
    DEF     VAR pErro           AS CHAR NO-UNDO.
    
    DEF TEMP-TABLE rowerrors   NO-UNDO    /* Temp-table dos erros */
        FIELD errorsequence    AS INT
        FIELD errornumber      AS INT
        FIELD errordescription AS CHAR FORMAT "x(150)"
        FIELD errorparameters  AS CHAR
        FIELD errortype        AS CHAR
        FIELD errorhelp        AS CHAR FORMAT "x(150)"
        FIELD errorsubtype     AS CHAR.
    
    def shared var c-seg-usuario  as  char                     no-undo.
    def var h-bodi154             as  handle                   no-undo.
    
    /*** Variaveis Locais ***/
    def var i-nivel               as   integer initial 1       no-undo.
    def var i-programa            as   integer initial 0       no-undo.
    def var l-legal               as   log                     no-undo.
    
    DEF TEMP-TABLE tt-raw-digita
        FIELD raw-digita    AS  RAW.
    
    
    repeat while program-name(i-nivel) <> ?.
        if  (trim( program-name(i-nivel) ) = "USER-INTERFACE-TRIGGER pdp/pd4000.w" or 
             trim( program-name(i-nivel) ) = "USER-INTERFACE-TRIGGER pdp\pd4000.w") then 
            assign i-programa = 4000.
        assign i-nivel = i-nivel + 1.
    end.
    
    if   pIndEvent =  "AfterValidateRecord" and
        i-programa = 4000 then do:
        
       IF  pindevent =  "AfterValidateRecord" THEN DO:
               FIND FIRST tt-epc WHERE  
                   tt-epc.cod-event = "AfterValidateRecord"    AND
                   tt-epc.cod-param = "Object-Handle"          NO-LOCK.
               
          
          IF AVAIL tt-epc THEN DO:
                   ASSIGN h-bodi154    =   widget-handle(tt-epc.val-parameter).
    
                   FIND FIRST tt-epc WHERE  
                       tt-epc.cod-event = "AfterValidateRecord"    AND
                       tt-epc.cod-param = "Table-Rowid"            NO-LOCK.
                       
                         
             if  valid-handle( h-bodi154 ) THEN DO:
    
                       RUN GetRecord IN h-bodi154 (OUTPUT TABLE tt-ped-item).
                       FIND FIRST tt-ped-item.
    
                       FIND FIRST ped-venda WHERE
                           ped-venda.nome-abrev    =   tt-ped-item.nome-abrev  AND
                           ped-venda.nr-pedcli     =   tt-ped-item.nr-pedcli   NO-LOCK NO-ERROR.
    
                if  avail ped-venda then do:
                               find first esp-usuar-natoper
                                    where   esp-usuar-natoper.cod-usuar    = c-seg-usuario 
                                    AND     esp-usuar-natoper.cod-estabel  = ped-venda.cod-estabel
                                    AND     esp-usuar-natoper.nat-operacao = tt-ped-item.nat-oper
                                    no-lock no-error.
                                    
                    if not avail esp-usuar-natoper then do:
                                    run _InsertErrorManual in h-bodi154 (input 0,
                                                                         input "EMS":U,
                                                                         input "ERROR":U,
                                                                         input "Natureza de opera‡Æo para O ITEM nÆo pode ser usada por este usu rio, neste estabelecimento...",
                                                                         input "Utilize o programa ESCD0017 para criar este relacionamento.",
                                                                         input "":U).
                    END.
                END.
                IF AVAIL ped-venda THEN DO:
                    FIND FIRST ITEM WHERE ITEM.it-codigo = tt-ped-item.it-codigo NO-LOCK NO-ERROR.
                    IF AVAIL ITEM THEN DO:                
                        FIND FIRST esp-usuar-natoper
                            WHERE esp-usuar-natoper.cod-usuar    = c-seg-usuario
                              AND esp-usuar-natoper.cod-estabel  = ped-venda.cod-estabel
                              AND esp-usuar-natoper.nat-operacao = tt-ped-item.nat-oper
                              AND esp-usuar-natoper.fm-codigo    = ITEM.fm-codigo NO-LOCK NO-ERROR.
                        IF NOT AVAIL esp-usuar-natoper THEN DO:
                                    run _InsertErrorManual in h-bodi154 (input 0,
                                                                         input "EMS":U,
                                                                         input "ERROR":U,
                                                                         input "Nat Operacao X Fam¡lia Faturamento.",
                                                                         input "Contactar o setor fiscal / faturamento informando " +
                                                                                "Nome de Usu rio (" + c-seg-usuario + ")" + 
                                                                                ", Item (" + ITEM.it-codigo + ")," + 
                                                                                "Natureza de Opera‡Æo (" + tt-ped-item.nat-oper + "),"+
                                                                                "Estabelecimento (" + ped-venda.cod-estabel + ") e " + 
                                                                                "Fam¡lia (" + ITEM.fm-codigo + ") para maiores informa‡äes!",
                                                                         input "":U).
                        END.
                    END.
                END.
             END.
          END.
       END.
    END.
    

Compartilhe esta Página