Página 2 de 2

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 13:28
por JoséQuintas
AUTOEDIT parece ser pra outra coisa.

Então a pergunta é:

Como fazer um browse sem edição, ou qual outro controle serve pra isso?

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 13:45
por JoséQuintas
Sinceramente....

Não sei se resolvi ou se estraguei, me sinto como se fosse o único usuário de hwgui, já que usar um browse parece algo muito comum.

Também não sei se é esse browse mesmo, já que tem outro browse na hwgui.

Só sei que alterei aqui e não dá mais erro.
hwgui.png
Ou talvez seja obrigatório definir um fonte, e não existe fonte default.
Ou talvez a falta de uma Main() hwgui deixe isso sem default.

Só sei que algum fonte default foi usado, senão não apareceria o browse.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 13:58
por Itamar M. Lins Jr.
Olá!
Pois é, como vc está usando/testando de uma formar diferente. O método PROPS2ARR não estava ativado, e eu mesmo não uso array, quando testei funcionou. Mas isso tem um tempo.
Por isso, acredito que essa IF !NIL ... resoveu o BO, para seu caso específico.

Saudações,
Itamar M. Lins Jr.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 14:08
por JoséQuintas
Eu não gosto de complicação, fazer o que....

Meu browse atual do aplicativo em GTWVG:

Código: Selecionar todos

METHOD GridSelection() CLASS JPTABCFOPClass

   LOCAL oTBrowse

   WITH OBJECT ::cnSQL
      :Execute( "SELECT * FROM JPTABCFOP ORDER BY CFOPNOME" )
      oTBrowse := { ;
         { "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
         { "NOME",   { || :String( "CFOPNOME", 60 ) } } }
      BrowseADO( ::cnSQL, oTBrowse, "CFOPNOME", { || :String( "IDCFOP" ) } )
      :CloseRecordset()
   ENDWITH

   RETURN NIL
o browse que montei em hwgui como teste:

Código: Selecionar todos

PROCEDURE PTESHWGUI( cModule, cTitle, ... )

   LOCAL cnSQL := ADOLocal(), oBrowseList

   WITH OBJECT cnSQL
      :Execute( "SELECT * FROM JPTABCFOP" )
      oBrowseList := { ;
         { "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
         { "NOME", { || :String( "CFOPNOME", 60 ) } } }
      hwguiBrowse( cTitle, cnSQL, oBrowseList )
      :CloseRecordset()
   ENDWITH

   ( cModule )

   RETURN

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 14:24
por Itamar M. Lins Jr.
Olá!
Erro velho detectado pelo Gilberto.
https://pctoledo.org/forum/viewto ... rr#p149137

E vc mesmo José Quintas tinha dado a resposta.

Saudações,
Itamar M. Lins Jr.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 14:40
por JoséQuintas
Pequena alteração pra confirmar resultado, deu certo:

Código: Selecionar todos

   WITH OBJECT cnSQL
      :Execute( "SELECT * FROM JPTABCFOP" )
      oBrowseList := { ;
         { "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
         { "NOME", { || :String( "CFOPNOME", 60 ) } } }
      hwguiBrowse( cTitle, cnSQL, oBrowseList )
      MsgExclamation( :String( "CFOPNOME" ) )
      :CloseRecordset()
   ENDWITH
Mostrou o nome correto de onde cliquei, o recordset está posicionado aonde era pra estar.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 18:14
por Itamar M. Lins Jr.
Olá!
Precisa debugar o retorno daqui. -> oDlg := Atail( HDialog():aModalDialogs
Se volta NIL ou EMPTY() -> " " ou etc.
Entre parenteses não força analisar o .OR. ?

Saudações,
Itamar M. Lins Jr.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 18:19
por Itamar M. Lins Jr.
Olá!
A linha toda:
IF ( ( oDlg := Atail( HDialog():aModalDialogs ) ) == Nil .OR. oDlg:handle != handle ) .AND. ( oDlg := HDialog():FindDialog( handle ) ) == Nil

Está dentro do parêntesis. Se Atail( HDialog():aModalDialogs ) ) voltar outra coisa que não seja NIL e não seja objeto ? E mesmo assim esse parêntesis acredito que força a avaliação do .OR.

Saudações,
Itamar M. Lins Jr.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 18:50
por JoséQuintas
Itamar M. Lins Jr. escreveu:E mesmo assim esse parêntesis acredito que força a avaliação do .OR.
isto AND aquilo => qualquer falso resolve, se o primeiro for falso, é perda de tempo analisar o segundo
isto OR aquilo => qualquer verdadeiro serve, se o primeiro for verdadeiro, é perda de tempo analisar o segundo

A otimização existe nos dois casos, mas depende do verdadeiro/falso de cada um

No caso da HWGUI, se retornar Nil, já resolveu a questão do "um ou outro", e não testa oDlg:Handle.

Acho que você se confundiu por causa do tipo de teste verdadeiro/falso que são diferentes no .AND. e .OR..

E por isso falei antes, que estava esquisito, porque eu também estava tentando entender isso dos parênteses que pareciam no lugar errado.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 18:58
por Itamar M. Lins Jr.
Olá!
Tá bom, vamos por sua analise.
Então quando é que ele entra aqui: .OR. oDlg:handle != handle ?

Pq se entrar oDlg precisa ser objeto precisa ser uma DIALOG. E o erro é ai.
Se for da forma que vc está falando essa opção não faz sentido pq nunca será avaliada.

Saudações,
Itamar M. Lins Jr.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 19:01
por JoséQuintas
Faltou dizer:

aDlg := Atail(...)
Isso é pra pegar o último elemento do array.
Ou retorna o elemento, ou Nil se não tem nada.

E o array é a lista de Dialogs modal da hwgui, então com certeza, ou é Nil, ou é uma Dialog modal.
Vai fazer o .OR. oDlg quando oDlg contiver uma dialog, e a dialog vai ter handle.

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 19:05
por JoséQuintas
Mais simples, apesar que o Harbour vai impedir o b := "minhoca" por ser inútil.

Código: Selecionar todos

b := "minhoca"
a := { 1, 2, 3 }

IF ( b := Atail( a ) ) == Nil .OR. b != 4
   ? "Não achou 4"
ENDIF

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 19:10
por JoséQuintas
Um exemplo mais adequado:

Código: Selecionar todos

a := { ;
   { 1, 1 }, ;
   { 2, 2 } }

IF ( b := Atail( a ) ) == Nil .OR. b[ 2 ] != 3
Só executar isso com esse conteúdo, e depois com a := {}

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 19:15
por JoséQuintas
teste.png
Não deu erro em nenhum dos dois, apesar de no segundo caso não existir b[2]

Error BASE/1004 No exported method: PROPS2ARR

Enviado: 27 Out 2021 19:22
por JoséQuintas
teste.png
Ampliado pra dois possíveis erros.
Mas a otimização não deixa dar erro.
Comparar array com letra não dá.

Agora ficou bem próximo do que hwgui faz naquele pedaço. (mas aqui tem erro proposital, lá não).