Uma das alterações deste final de semana:
antes:
METHOD MostraReserva() CLASS JPITEMClass
LOCAL nSelect := Select()
LOCAL nOrdSetFocus, nKey := 0, aaPedidoList := {}, acList, oElement
Mensagem( "Pesquisando nos pedidos, ESC cancela" )
SELECT jpitped
nOrdSetFocus := OrdSetFocus()
OrdSetFocus( "jpitped2" )
SEEK jpitem->idItem
DO WHILE nKey != K_ESC .AND. jpitped->ipItem == jpitem->idItem .AND. ! Eof()
nKey := Inkey()
Encontra( jpitped->ipPedido, "jppedido", "pedido" )
IF jppedido->pdConf != "S"
SKIP
LOOP
ENDIF
IF Left( jpitped->ipCfOp, 1 ) < "5"
SKIP
LOOP
ENDIF
IF Encontra( jppedido->idPedido, "jpnotfis", "pedido" )
SKIP
LOOP
ENDIF
IF ! "+R" $ ReacaoJPTRANSA( jppedido->pdTransa )
SKIP
LOOP
ENDIF
AAdd( aaPedidoList, { jppedido->idPedido, jppedido->pdDatEmi, jpitped->ipQtde } )
SKIP
ENDDO
OrdSetFocus( nOrdSetFocus )
SELECT( nSelect )
Mensagem()
IF Len( aaPedidoList ) == 0
MsgExclamation( "Não há reserva deste produto" )
ELSE
acList := {}
FOR EACH oElement IN aaPedidoList
AAdd( acList, oElement[ 1 ] + " " + Dtoc( oElement[ 2 ] ) + " " + Str( oElement[ 3 ], 10, 2 ) )
NEXT
Atail( AppForms() ):GUIHide()
wAChoice( 10, 2, acList, 1, "RESERVA " + jpitem->idItem + " " + Trim( jpitem->ieDescri ) )
Atail( AppForms() ):GUIShow()
ENDIF
RETURN NIL
depois:
METHOD MostraReserva() CLASS JPITEMClass
LOCAL oTBrowse, mIdProduto
LOCAL cnMySql := ADOClass():New( AppConexao() )
mIdProduto := Val( jpitem->idProduto )
WITH OBJECT cnMySql
:cSql := "SELECT JPPEDIDO.IDPEDIDO, JPPEDIDO.PDDATEMI, IPQTDE" + ;
" FROM JPITPED" + ;
" LEFT JOIN JPPEDIDO ON JPPEDIDO.IDPEDIDO = JPITPED.IPPEDIDO" + ;
" LEFT JOIN JPNOTFIS ON JPNOTFIS.NFPEDIDO = JPPEDIDO.IDPEDIDO" + ;
" LEFT JOIN JPTRANSA ON JPPEDIDO.PDTRANSA = JPTRANSA.IDTRANSA" + ;
" WHERE JPPEDIDO.PDCONF = 'S'" + ;
" AND LEFT( JPITPED.IPCFOP, 1 ) >= '5'" + ;
" AND JPNOTFIS.IDNOTFIS IS NULL" + ;
" AND JPTRANSA.TRREACAO LIKE '%+R%'" + ;
" AND JPITPED.IPPRODUTO = " + NumberSql( mIdProduto )
:Execute()
OTBrowse := { ;
{ "PEDIDO", { || StrZero( :Number( "IDPEDIDO" ), 6 ) } }, ;
{ "EMISSAO", { || :Date( "PDDATEMI" ) } }, ;
{ "QTDE", { || Str( :Number( "IPQTDE" ), 16, 5 ) } } }
BrowseADO( cnMySql, oTBrowse )
:CloseRecordset()
ENDWITH
RETURN NIL
Por enquanto ficou preso a JPITEM estar aberto pra pegar o código do produto.
Depois altero pra receber o código por parâmetro e altero a(s) rotina(s) que faz(em) chamada pra ela.
E assim vai indo, eliminando o uso de DBFs em uma rotina por vez.
Detalhe que pode ter passado desapercebido:
mIdProduto := Val( jpitem->idProduto )
Pois é... nem terminei a conversão, e já alterei de novo.
O nome do campo era IEITEM, depois idItem, e agora idProduto
E pra complicar... decidi alterar o aplicativo pra trabalhar com numérico, antes de terminar a conversão.
No DBF ainda é caractere....
Instalei hoje, com certeza vários bugs pra resolver.
E com certeza isso fica facilitado por estar usando compilação -w3 -es2, e por ter o recurso de find-in-files, procurar em todos os fontes, o nome do campo.
Tá valendo a pena o trabalho.
Não tem mais arquivo aberto, não tem mais arquivo temporário/array temporário, é só pedir pro servidor e mostrar.
SELECT, nAnterior := Select(), SEEK, etc. isso não existe mais.