[RESOLVIDO] Duvida PD4000

Discussão em 'EMS , HCM e Totvs 11' iniciado por kakaos, Julho 3, 2012.

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

    kakaos Membro Participativo

    Boa tarde pessoal,
    estou precisando fazer uma validacao na inclusao de itens na tela pd4000,
    estou tentando gerar a mesma, porem nao tenho muito conhecimento e estou
    com um pouco de dificuldade, alguem pode me auxiliar com isto. segue o codigo para que vejam e me corrijam..
    muito obrigado..

    Código:
    /******************
    * Verifica se o cliente possui credito de pacote
    *******************/
    PROCEDURE pi-possuiPacote:
    
    	def output param l-possui-pacote    as log  no-undo init no.
    	def output param c-nr-pedido         as int  no-undo.
        def var c-fm-codigo         as char no-undo.
        DEF VAR c-it-codigo  		AS CHAR   NO-UNDO  INIT "".
        DEF VAR c-nome-abrev    AS CHAR    NO-UNDO INIT "".
        DEF VAR msgErroItem     AS CHAR    NO-UNDO INIT "".
    
    	if not avail item then
    		find first item no-lock
    			where  item.it-codigo = c-it-codigo no-error.
    			
    	if avail item then do:
    
    	    c-fm-codigo = item.fm-codigo.
    	    
    	    for each ped-venda no-lock where
    	               ped-venda.nome-abrev  = c-nome-abrev             and
    	               ped-venda.tp-pedido   = "XT"                     and
    	               ped-venda.completo    = yes                      and
    	               ped-venda.cod-sit-ped = 3    /* Atendido Total */  :    
    			   
    			   message "Nr-pedido..:" string(nr-pedido).
    			   
    			   for first MP-Saldo-Pedido-Pacote no-lock
    				  where MP-Saldo-Pedido-Pacote.nr-pedido   = ped-venda.nr-pedido
    					and MP-Saldo-Pedido-Pacote.fm-codigo   = c-fm-codigo 
    					and MP-Saldo-Pedido-Pacote.Qtd-Saldo   > 0 :
    					
    					assign 
    						c-nr-pedido         = MP-Saldo-Pedido-Pacote.nr-pedido
    						l-possui-pacote     = yes.		
    					/* message "MP-Saldo-Pedido-Pacote.Qtd-Saldo.:" string(MP-Saldo-Pedido-Pacote.Qtd-Saldo). */
    			   end.                
    	    end.            
    	end.
    
    
    /*
    	 * Verifica se o cliente já possui pacota para esta familia de itens
    	 */
    	if ped-venda.tp-pedido = "PC" then 
    		run pi-possuiPacote(OUTPUT l-possui-pacote, OUTPUT c-nr-pedido).
    	
    	if l-possui-pacote then do:
    		
            MESSAGE "Cliente possui pacote no pedido" c-nr-pedido "para a familia  deste item.".
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
            RETURN.
        
    	end.
    END PROCEDURE.
    
  2. TrombiniSP

    TrombiniSP Membro Participativo

    Olá Kakaos,

    Há um tópico onde o pessoal aqui já tratou de como fazer uma customização no PD4000 + BODI154 (customização no item do pedido).

    Aqui há um código com uma customização simples. Você pode partir deste exemplo para inserir seu código de customização. Qualquer dúvida faça uma Pesquisa por "bodi159" e visite o tópico original.

    Abraços.

    Trombini

    Segue o fonte:

    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.
    
  3. kakaos

    kakaos Membro Participativo

    ola trombini,
    o problema que nao tenho muito conhecimento em progress, tenho muitas dificuldades por nao saber a linguagem, venho tentando sozinho fazer as coisas, porem muitas delas requer um conhecimento avancado, coisa que nao tenho, outras coisas ja consigo fazer entende, este codigo por exemplo fiz olhando alguns codigos que tenho aqui como exemplo, por isto pedi auxilio pra voces, pois sabem muito e talvez pudessem me ajudar, pois nao faco a minima ideia de como fazer isto.
    Mais obrigao de qq forma..
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página