Você está na página 1de 1

/*********************************************************************** ** progevent.

p - Programacao por evento ** 07/04/00 - Menna - criado este programa ***********************************************************************/ /* definicao dos botoes */ def button bt-ok label def button bt-cancela label def button bt-order label def button bt-ant label def button bt-pro label def button bt-consulta label "&OK" "&Cancela" "OrderSel" "&<" "&>" "Consulta" size-char 10 by 1 auto-go. size-char 10 by 1 auto-endkey. size-char 10 by 1. /* image file "im-ante" */. /* image file "im-prox" */. size-char 10 by 1.

on

choose of bt-consulta do: /* se nao estiver disponivel nenhuma ordem, retorna sem fazer nada*/ if not avail order then return no-apply. /* se foi selecionado mais de um item, apresenta mensagem de erro e retorna sem fazer nada */ if br-order:num-selected-rows > 1 then do: message "Voce so pode escolher 1 item para consultar !" view-as alert-box warning. return no-apply. end. /* se nao foi selecionado nenhum item, apresenta mensagem de erro e retorna sem fazer nada */ if br-order:num-selected-rows = 0 then do: message "Voce deve escolher no minimo 1 item para mostrar !" view-as alert-box warning. return no-apply. end. /* define a frame da consulta */ def frame f-cons skip(1) Order.Cust-Num Order.Order-num Order.Order-Date Order.Promise-Date Order.Ship-Date Order.Carrier Order.Instructions Order.PO Order.Sales-Rep Order.Terms skip(1) bt-ok colon 10 with side-labels 1 column title "Consulta Ordens" view-as dialog-box. /* mostra as informacoes da ordem */ disp order with frame f-cons. /* fica esperando que seja teclado o botao ok */ update bt-ok with frame f-cons.

/* definicao do retangulo */ def rectangle rt-botoes size-char 30 by 1.5 bgcolor 3 fgcolor 4 edge-pixels 2. def rectangle rt-dados size-char 30 by 1.5 edge-pixels 2. /* definicao da query */ def query qr-order for order scrolling. /* definicao do browse */ def browse br-order query qr-order display Order.Order-num Order.Order-Date Order.Promise-Date Order.Ship-Date with separators 5 down multiple width 55. /* definicao da frame */ def frame f-abre skip(1) customer.cust-num at 3 space(0) bt-ant space(0) bt-pro space(0) customer.name no-label br-order at 3 skip(.5) rt-dados at 3 Order.Sales-Rep at row-of rt-dados + 0.30 col 5 Order.Carrier skip(1) bt-order at 3 space(0) bt-consulta skip(1) bt-ok at 3 bt-cancela skip(0.5) rt-botoes at row-of bt-ok - 0.25 column-of bt-ok - 1 with side-label three-d keep-tab-order view-as dialog-box title "Pesquisa Cliente". /* altera o tamanho do retangulo p/ ficar igual ao tamanho do browse */ assign rt-botoes:width = br-order:width rt-dados:width = rt-botoes:width. /* fecha a janela caso seja clicado no "x" da mesma */ on window-close of frame f-abre apply "end-error" to self. /* toda vez que for alt. o item, ser mostrado informacoes da ordem */ on value-changed of br-order do: if not avail order then return no-apply. disp Order.Sales-Rep Order.Carrier with frame f-abre. end. on choose of bt-pro in frame f-abre do: /* posiciona sobre o proximo customer */ find next customer no-lock no-error. /* se ele nao estiver disponivel, apresenta mensagem de erro e posiciona sobre o ultimo customer */ if not avail customer then do: message "Voce esta sobre o ultimo cliente !" view-as alert-box information. find last customer no-lock no-error. end. /* se ele estiver disponivel, mostra as informacoes do customer e abre a query */ if avail customer then do: disp customer.cust-num customer.name with frame f-abre. run pi-abre-query. end. end. on choose of bt-ant in frame f-abre do: /* posiciona sobre o customer anterior */ find prev customer no-lock no-error. /* se ele nao estiver disponivel, apresenta mensagem de erro e posiciona sobre o primeiro customer */ if not avail customer then do: message "Voce esta sobre o primeiro cliente !" view-as alert-box information. find first customer no-lock no-error. end. /* se ele estiver disponivel, mostra as informacoes do customer e abre a query */ if avail customer then do: disp customer.cust-num customer.name with frame f-abre. run pi-abre-query. end. end.

end. on choose of bt-order do: /* define variaveis que serao utilizadas */ def var i-cont as integer no-undo. def var c-lista as char no-undo. def var l-status as logical no-undo. /* se nao foi selecionado nenhum item, apresenta mensagem de erro e retorna sem fazer nada */ if br-order:num-selected-rows = 0 then do: message "Voce deve escolher no minimo 1 item para mostrar !" view-as alert-box warning. return no-apply. end. /* faz um contador para ver quantos itens estao selecionados */ do i-cont = 1 to br-order:num-selected-rows: /* posiciona a query sobre o item selecionado */ assign l-status = br-order:fetch-selected-row(i-cont). /* adiciona o item selecionado na lista de selecionados */ assign c-lista = c-lista + string(order.order-num) + " - " + string(order-date) + chr(10). end. /* mostra uma mensagem com os items que foram selecionados */ message c-lista view-as alert-box information title "Ordens Selecionadas". end. /* se for feito um duplo-click sobre o browse, chama a consulta */ on mouse-select-dblclick of br-order in frame f-abre apply "choose" to bt-consulta in frame f-abre. /* posiciona sobre o 1o. customer disponivel */ find first customer no-lock no-error. /* mostra as informacoes do customer */ disp customer.cust-num customer.name with frame f-abre. /* abre a query */ run pi-abre-query. do on endkey undo, leave with frame f-abre: /* habilita os objetos principais da frame e fica aguardando que os eventos sejam efetuados */ enable all with frame f-abre. wait-for choose of bt-ok.

end. procedure pi-abre-query: /* abre a query do browse */ open query qr-order for each order where order.cust-num = customer.cust-num. end procedure. /* fim */

Você também pode gostar