UPC

292 views
Skip to first unread message

Thiago Freitas

unread,
Mar 18, 2011, 10:32:55 AM3/18/11
to progre...@googlegroups.com
Faço upc's de campo nas telas, e nelas o meu "campo novo" é sempre do tipo global.

Quero desenvolver sem usar variavel global.

na criação do meu campo:

DEF VAR wh-it-codigo-novo                   AS WIDGET-HANDLE.
...
...
...

        create fill-in wh-it-codigo-novo
                assign frame                        = p-wgh-frame
                       name                         = "upc-it-codigo"
                       data-type                    = "character"
                       row                          = 2.25
                       col                          = 6.50
                       format                       = "x(40)"
                       visible                      = true
                       sensitive                    = yes
                       width                        = 17.50
                       height                       = 0.88.

aqui funciona, cria o campo na tela certim.

No evento "ENABLE" eu faço:

IF p-ind-event  = 'ENABLE'  AND
   p-ind-object = 'viewer' then do:

    RUN pi-busca-widget(input  "upc-it-codigo",
                        input  p-wgh-frame,
                        output wh-it-codigo-novo).

    if valid-handle(wh-it-codigo-novo) then do:
        assign wh-it-codigo-novo:sensitive      = yes.
    end.


end.

não funciona.

Estou fazendo o que de errado?
--
<°)))><

"Ao que está assentado sobre o trono, e ao Cordeiro, sejam dadas ações de graças, e honra, e glória, e poder para todo o sempre." Ap 5:13
--------------
"Confia no SENHOR de todo o teu coração e não te estribes no teu próprio entendimento." Pv 3:5
"Reconhece-o em todos os teus caminhos, e ele endireitará as tuas veredas." Pv 3:6
-------------
"Respondeu-lhes Jesus: Em verdade, em verdade eu vos digo: antes que Abraão existisse, EU SOU." Jo 8:58

Mendes, Leonardo J. C.

unread,
Mar 18, 2011, 10:47:42 AM3/18/11
to progre...@googlegroups.com

Amigo,

 

Pelo que conheço de UPC somente irá funcionar se a variável for global...

Qual o problema de defini-la dessa forma?

 

 

Atenciosamente,

 

Leonardo J. C. Mendes

Kraft Consulting - "Agregando Conhecimento à Tecnologia"

Tel: 7863 7867

     3214 5151

www.kconsulting.com.br

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Progress - 4GL" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para progre...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para progress_4gl...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/progress_4gl?hl=pt-BR.

Thiago Freitas

unread,
Mar 18, 2011, 10:49:53 AM3/18/11
to progre...@googlegroups.com
Nenhum, somente gostaria de evitar usar variavel global.

Em 18 de março de 2011 11:47, Mendes, Leonardo J. C. <leonard...@kconsulting.com.br> escreveu:

Amigo,

 

Pelo que conheço de UPC somente irá funcionar se a variável for global...

Qual o problema de defini-la dessa forma?

 

 

Atenciosamente,

 

Leonardo J. C. Mendes

Kraft Consulting - "Agregando Conhecimento à Tecnologia"

Tel: 7863 7867

     3214 5151

www.kconsulting.com.br

 

De: progre...@googlegroups.com [mailto:progre...@googlegroups.com] Em nome de Thiago Freitas
Enviada em: sexta-feira, 18 de março de 2011 11:33
Para: progre...@googlegroups.com
Assunto: UPC

 

Faço upc's de campo nas telas, e nelas o meu "campo novo" é sempre do tipo global.

--

Você está recebendo esta mensagem porque se inscreveu no grupo "Progress - 4GL" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para progre...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para progress_4gl...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/progress_4gl?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Progress - 4GL" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para progre...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para progress_4gl...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/progress_4gl?hl=pt-BR.

Felipe Silvestre

unread,
Mar 18, 2011, 10:50:22 AM3/18/11
to progre...@googlegroups.com
Você poderia postar o código da pi-busca-widget? Assim vejo como você está recuperando a handle do objeto que você criou.
Pelo que estou vendo o programa não entra no if que testa o valid-handle, ou seja, o handle não está sendo capturado.

Também só conheço o uso de UPC com variável global ou gravar em uma tabela temporária específica

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Progress - 4GL" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para progre...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para progress_4gl...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/progress_4gl?hl=pt-BR.



--
about.me/felipesilvestre

Thiago Freitas

unread,
Mar 18, 2011, 12:07:16 PM3/18/11
to progre...@googlegroups.com
PROCEDURE pi-busca-widget:

     DEF INPUT  PARAM p-nome     AS CHAR.
     DEF INPUT  PARAM p-frame    AS WIDGET-HANDLE.
     DEF OUTPUT PARAM p-object   AS WIDGET-HANDLE.

     DEF VAR h-frame             AS WIDGET-HANDLE.
     DEF VAR wh-objeto           AS WIDGET-HANDLE.

     ASSIGN h-frame = p-frame:FIRST-CHILD.

     DO WHILE VALID-HANDLE(h-frame):

         IF h-frame:TYPE <> "field-group" THEN DO:
            
             IF h-frame:TYPE = "frame" THEN DO:

                 RUN pi-busca-widget(INPUT  p-nome,
                                     INPUT  h-frame,
                                     OUTPUT wh-objeto).
                
                 IF wh-objeto <> ? THEN DO:

                     ASSIGN p-object = wh-objeto.
                     LEAVE.

                 END.

            END.
            
            IF h-frame:NAME = p-nome THEN DO:

                ASSIGN p-object = h-frame.
                LEAVE.
           
            END.
            
            ASSIGN h-frame = h-frame:NEXT-SIBLING.

        END.
        ELSE
            ASSIGN h-frame = h-frame:FIRST-CHILD.

    END.

END PROCEDURE.

Miguel Brandelero

unread,
Mar 18, 2011, 12:27:45 PM3/18/11
to progre...@googlegroups.com
Posso dizer que quanto a UPC não precisa ser necessariamente váriavel global, pois temos várias upc's sem precisar de váriavel global.

Só que existe programas e programas, existe programas ao qual nem aceitam UPC, como foi o caso do programa que imprime NF, a partir de uma certa versão ele não estava aceitando upc, não me pergunte o quê que os cara fizeram.

Marcio Gomes

unread,
Mar 18, 2011, 12:30:54 PM3/18/11
to progre...@googlegroups.com
:(

Em 18 de março de 2011 13:27, Miguel Brandelero <mbrand...@gmail.com> escreveu:
Posso dizer que quanto a UPC não precisa ser necessariamente váriavel global, pois temos várias upc's sem precisar de váriavel global.

Só que existe programas e programas, existe programas ao qual nem aceitam UPC, como foi o caso do programa que imprime NF, a partir de uma certa versão ele não estava aceitando upc, não me pergunte o quê que os cara fizeram.

Eduardo Batista Leite

unread,
Mar 18, 2011, 12:54:19 PM3/18/11
to progre...@googlegroups.com

Thiago e pessoal:

 

Realmente a maioria das vezes se utiliza variáveis globais devido a facilidade de escrever o código, pois uma vez carregado na memória a variável com o handle, está pode ser usada em qualquer momento, porém podemos ter alguns problemas:

 

01)   Quando a rotina é chamada mais de uma vez, ao fechar a primeira rotina o valor da variável global é zerado, com isto se perde a referencia da variável para ser usada na rotina que ficou aberta, entre outros problemas;

 

Quando estava fazendo manutenção em rotinas já desenvolvidas deparei com várias situações em clientes que reclamavam disso, onde chamava a rotina e dava erros, chamava a rotina e não aparecia o campo criado (pois uma vez validado que a handle já foi criada a mesma não era criada na segunda vez que chamava a rotina).

 

Pensando em facilitar e dar uma segurança maior, a procedure pi-busca-widget que você está usando de exemplo foi criada por mim e repassada ao pessoal da Totvs em BH com um exemplo para criar Botões e Campos sem precisar usar variável global ou criar outros botões e campos.

 

No exemplo que estou enviando tem exemplo da criação de um novo campo no CD0204 sem precisa usar variável global, para testar chame o CD0204 mais de 1 vez e verá que não irá perder a referencia do campo criado.

 

 

Att.

 

 

Eduardo Leite

exemplo de upc - sem variavel global.zip

Matheus Antonelli

unread,
Mar 18, 2011, 2:02:05 PM3/18/11
to progre...@googlegroups.com
Tarde,

A procedure enviada pelo Thiago pode ser usada da mesma forma.
Sua técnica consiste em pesquisar o handle dos campos a cada chamada da UPC.

Isso funciona, mas pode ter a performance prejudicada em um programa que tenha muitos pontos de chamada à UPC.

Abraços.
--
Matheus Antonelli
☎ (55 11) 9991-1025

Eduardo Batista Leite

unread,
Mar 18, 2011, 2:08:25 PM3/18/11
to progre...@googlegroups.com

É uma sugestão, um ponto de partida, neste caso quando cair a perfomance será feito o estudo onde trabalhar o melhor, como disse, tem caso que não tem como escapar da Variável Global e teremos que usar ela mesma.

 

De: progre...@googlegroups.com [mailto:progre...@googlegroups.com] Em nome de Matheus Antonelli
Enviada em: sexta-feira, 18 de março de 2011 15:02
Para: progre...@googlegroups.com
Assunto: Re: UPC

 

Tarde,



A procedure enviada pelo Thiago pode ser usada da mesma forma.
Sua técnica consiste em pesquisar o handle dos campos a cada chamada da UPC.

Isso funciona, mas pode ter a performance prejudicada em um programa que tenha muitos pontos de chamada à UPC.

Abraços.


Em 18/03/2011 13:54, Eduardo Batista Leite escreveu:

Thiago e pessoal:

 

Realmente a maioria das vezes se utiliza variáveis globais devido a facilidade de escrever o código, pois uma vez carregado na memória a variável com o handle, está pode ser usada em qualquer momento, porém podemos ter alguns problemas:

 

Quando a rotina é chamada mais de uma vez, ao fechar a primeira rotina o valor da variável global é zerado, com isto se perde a referencia da variável para ser usada na rotina que ficou aberta, entre outros problemas;

Reply all
Reply to author
Forward
0 new messages