Ola,
eu destruo todos os objetos criados, inclusive com o comando RELEASE. Estou achando que é algum bug do FiveWin ou do xHarbour.
Existe alguma função que eu possa usar para monitorar os recursos de memoria, a fim de visualizar a area de memoria livre a cada chamada da 2a. função.
Abaixo coloco o código fonte da 2a. função. Apenas chamando a 2a. função e teclando ESC para sair, a cada (+-) 10 chamadas estoura a memória.
Function b0103FPagamentoPedido()
Private oWndPgt
Private OBrwItensPagt
Private OSayPgt02, OSayPgt03, OSayPgt04
Private OSayPgt06, OSayPgt07, OSayPgt09, OSayPgt10, OSayPgt11
Private oSayPgt12, oSayPgt13, oSayPgt14, oSayPgt15
Private oSayPgt16, oSayPgt17, oGetPgt17
Private lLeuSenha
Private oSayPgt18, oSayPgt19
Private vSayPgt18
Private OBrwPgt1, itemobrw1, wopcao, oFont
Private OGetpgt01, OGetpgt02, OGetPgt03
Private lRet, nValAPagar, wtxtopcao, aRet
Private cComanda, wcodtran, cNomtra, wdebito
Private vSayPgt02, vSayPgt03, vSayPgt04, vSayPgt06, vSayPgt12
Private vSayPgt13, OBtnGravar, OBtnRetornar
Private nTopDiag, nLeftDiag, nWidthDiag, nHeightDiag[2]
Private wtaxa, oRadMenu, nOption
b0001inidovenda()
nOption := 1
lLeuSenha := .f.
wtxtopcao := space(15)
wtaxa := 0
nValAPagar := 0
nValFaltaPagar := 0
wdebito := 0
wopcao := 0
nValJaPago := 0
vdescon_ := 0
vtotmed_ := 0
warea := select()
cComanda := if(empty(cNumeroMesa), Space(15), padr(cNumeroMesa, 15) )
wcodtran := space(2)
cNomtra := space(30)
Set Confirm on
vSayPgt02 := 'A PAGAR'
vSayPgt03 := 'FALTA'
vSayPgt04 := 'OPÇÃO PGTO'
vSayPgt06 := 'TOTAL PEDIDO'
vSayPgt13 := 'ENTREGADOR'
vSayPgt14 := 'TOTAL PAGO'
vSayPgt17 := 'DESCONTO'
vSayPgt18 := 'SUBTOTAL PEDIDO'
if cTipoPedido = 'TELEMARKETING'
vSayPgt15 := 'TAXA ENTREGA'
vSayPgt12 := 'NUM. COMANDA'
else
vSayPgt12 := 'NUM. MESA'
vSayPgt15 := 'TAXA SERVIÇO'
endif
itemobrw1 := {}
nTopDiag := 0
nLeftDiag := 100
nWidthDiag := 650
nHeightDiag[1] := 555
nHeightDiag[2] := 266
for nFor := 1 to len(wtippag)
if ! empty( wtippag[nfor] )
aadd(itemobrw1, { alltrim(str(nFor-1, 2)) , wtippag[nFor] } )
endif
next nFor
aArrayItemPagt := {}
for nFor := 1 to Len(ArrayProduto)
aadd(aArrayItemPagt, {0, 0, space(40), 0, space(6), 0, space(4), 0, space(2), space(1), space(8), space(2)})
next nFor
do while !open('transport', .f., wtenta, ' ', wlcarqret)
enddo
if len(itemobrw1) > 0 // foi informado pelo menos 1 forma de pagamento
DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -12 BOLD
Define Dialog oWndPgt Resource 'B0103RecebePedido'
oWndPgt:lHelpIcon := .F.
Redefine BtnBmp OBtnGravar Resource 'Gravar' Of oWndPgt Id 114 Action ;
( lRet := .t., if(inteirodeci(abs(nValJaPago)) >= inteirodeci(abs(wdebito)).and.wdebito#0, lRet:=.t., lRet:= .f.), if(lRet, oWndpgt:End(100), .f.) )
Redefine BtnBmp OBtnRetornar Resource 'Retornar' Of oWndPgt Id 115 Action oWndpgt:End(0)
Redefine Get OSayPgt12 Var vSayPgt12 Id 104 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt02 Var vSayPgt02 Id 101 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt03 Var vSayPgt03 Id 102 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt09 Var nValFaltaPagar Id 112 Of oWndPgt PICTURE "@E 9,999.99" Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt04 Var vSayPgt04 Id 106 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt06 Var vSayPgt06 Id 110 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt18 Var vSayPgt18 Id 116 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt07 Var wdebito Id 103 Of oWndPgt PICTURE "@E 9,999.99" Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt14 Var vSayPgt14 Id 96 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt15 Var vSayPgt15 Id 98 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt17 Var vSayPgt17 Id 100 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt15 Var nValJaPago Id 95 Of oWndPgt PICTURE "@E 9,999.99" Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt19 Var vtotmed_ Id 117 Of oWndPgt PICTURE "@E 9,999.99" Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt16 Var wtaxa Id 99 Of oWndPgt PICTURE "@E 9,999.99" Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OSayPgt13 Var vSayPgt13 Id 500 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Get OGetPgt17 Var vdescon_ Id 113 of oWndPgt PICTURE "@E 9,999.99" FONT oFont Valid( b0103desconto(vdescon_, vtotmed_) )
REDEFINE GET oGetPgt03 VAR cComanda ID 105 OF oWndPgt PICTURE '@!' FONT oFont ;
Valid ( b0103AcessaComanda(oGetPgt03:Value()) )
REDEFINE GET oGetPgt04 VAR wcodtran ID 501 OF oWndPgt PICTURE '99' FONT oFont ;
VALID ( if(!empty(oGetPgt04:Value()), wcodtran := strzero(val(oGetPgt04:Value()), 2), space(2)), oGetPgt04:Refresh(), if(empty(wcodtran), .t., DBAchou( 'transport', 'wcodtran', .f. , 'dnomtran', @oGetPgt05 )) )
Redefine BtnBmp oBtnPgt01 Resource 'Procura' Id 94 Of oWndPgt Action ( DBLista( [Pick_default('transport')], @oGetPgt04), '')
REDEFINE GET oGetPgt05 Var cNomTra ID 502 OF oWndPgt ReadOnly Color CLR_BLACK, RGB(217,227,246) FONT oFont
Redefine Get OSayPgt10 Var wtxtopcao Id 109 Of oWndPgt Color CLR_BLACK, RGB(217,227,246) FONT oFont ReadOnly
Redefine Radio oRadMenu VAR nOption ID 97, 118 OF oWndPgt ;
on Change ( b0103BotaoPagamento(.t.) )
Redefine Get OGetPgt02 Var nValAPagar Id 111 of oWndPgt PICTURE "@E 9,999.99" FONT oFont
oGetPgt02:bKeyDown = { |nKey| if(nKey==VK_RETURN,;
B0080OpcaoPagamentoValor(@wopcao, @OGetPgt01, @nValAPagar, @OGetPgt02, @nValFaltaPagar, @oSayPgt09, @nValJaPago, @oSayPgt15, wdebito, @oWndPgt, @OBtnGravar), NIL) }
Redefine Get OGetPgt01 Var wopcao Id 107 of oWndPgt PICTURE "99" FONT oFont ;
VALID ( b0080OpcaoPagamentoOpcao(@wopcao, @OGetPgt01, @wtippag, @itemobrw1, @wtxtopcao, OSayPgt10 ) )
// BROWSE da forma de pagamento
oBrwPgt1 := TXBrowse():New( oWndPgt )
oBrwPgt1:lHeader := .f.
oBrwPgt1:bClrStd := {|| {CLR_BLUE, CLR_WHITE} }
oBrwPgt1:bClrSel := {|| {CLR_BLUE, CLR_WHITE} }
oBrwPgt1:bClrSelFocus := {|| {CLR_BLUE, CLR_WHITE} }
oBrwPgt1:lRecordSelector := .f.
oBrwPgt1:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrwPgt1:SetArray( itemobrw1)
// 1a. coluna
oBrwPgt1:aCols[1]:oDataFont := oFont
// 2a. coluna
oBrwPgt1:aCols[2]:oDataFont := oFont
oBrwPgt1:aCols[2]:nDataStrAlign := AL_LEFT
obrwPgt1:acols[2]:nwidth := 150
oBrwPgt1:CreateFromResource( 108 )
oBrwPgt1:lHScroll := .f.
oBrwPgt1:lVScroll := .f.
// BROWSE dos itens da venda
OBrwItensPagt := TXBrowse():New( oWndPgt )
OBrwItensPagt:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLROW
OBrwItensPagt:nColDividerStyle := LINESTYLE_BLACK
OBrwItensPagt:nRowDividerStyle := LINESTYLE_BLACK
OBrwItensPagt:lColDividerComplete := .t.
OBrwItensPagt:lFastEdit := .T.
OBrwItensPagt:bClrStd := {|| {CLR_BLUE, CLR_WHITE} }
OBrwItensPagt:bClrSel := {|| {CLR_BLUE, CLR_WHITE} }
OBrwItensPagt:bClrSelFocus := {|| {CLR_BLUE, CLR_WHITE} }
OBrwItensPagt:SetArray(aArrayItemPagt)
// 1a. coluna
OBrwItensPagt:aCols[1]:cHeader := "Qte"
OBrwItensPagt:aCols[1]:nEditType := EDIT_NONE
OBrwItensPagt:aCols[1]:cEditPicture := "999"
OBrwItensPagt:aCols[1]:bStrData := {|| transform(aArrayItemPagt[ OBrwItensPagt:nArrayAt, 1 ], "@E 999") }
OBrwItensPagt:aCols[1]:nDataStrAlign := AL_RIGHT
OBrwItensPagt:aCols[1]:nHeadStrAlign := AL_RIGHT
OBrwItensPagt:aCols[1]:nWidth := 40
OBrwItensPagt:aCols[1]:oHeaderFont := oFont
OBrwItensPagt:aCols[1]:oDataFont := oFont
// 2a. coluna
OBrwItensPagt:aCols[2]:cHeader := "Pagt"
OBrwItensPagt:aCols[2]:nEditType := EDIT_GET
OBrwItensPagt:aCols[2]:cEditPicture := "999"
OBrwItensPagt:aCols[2]:bStrData := {|| transform(aArrayItemPagt[ OBrwItensPagt:nArrayAt, 2 ], "@E 999") }
OBrwItensPagt:aCols[2]:bOnPostEdit := { |o,x| b0103QteItemPagt(OBrwItensPagt:nArrayAt, x) }
OBrwItensPagt:aCols[2]:nDataStrAlign := AL_RIGHT
OBrwItensPagt:aCols[2]:nHeadStrAlign := AL_RIGHT
OBrwItensPagt:aCols[2]:nWidth := 40
OBrwItensPagt:aCols[2]:oHeaderFont := oFont
OBrwItensPagt:aCols[2]:oDataFont := oFont
// 3a. coluna
OBrwItensPagt:aCols[3]:cHeader := "Descrição "
OBrwItensPagt:aCols[3]:nEditType := EDIT_NONE
OBrwItensPagt:aCols[3]:bStrData := {|| b0103OBrwItensDescricaoProduto(OBrwItensPagt:nArrayAt, aArrayItemPagt, 3, 7) }
OBrwItensPagt:aCols[3]:nWidth := 320
OBrwItensPagt:aCols[3]:nDataStrAlign := AL_LEFT
OBrwItensPagt:aCols[3]:nHeadStrAlign := AL_LEFT
OBrwItensPagt:aCols[3]:oHeaderFont := oFont
OBrwItensPagt:aCols[3]:oDataFont := oFont
// 4a. coluna
OBrwItensPagt:aCols[4]:cHeader := "P. venda"
OBrwItensPagt:aCols[4]:nEditType := EDIT_NONE
OBrwItensPagt:aCols[4]:cEditPicture := "@E 999.99"
OBrwItensPagt:aCols[4]:bStrData := {|| transform(aArrayItemPagt[ OBrwItensPagt:nArrayAt, 4 ], "@E 999.99") }
OBrwItensPagt:aCols[4]:nDataStrAlign := AL_RIGHT
OBrwItensPagt:aCols[4]:nHeadStrAlign := AL_RIGHT
OBrwItensPagt:aCols[4]:nWidth := 70
OBrwItensPagt:aCols[4]:lHide := .f.
OBrwItensPagt:aCols[4]:oHeaderFont := oFont
OBrwItensPagt:aCols[4]:oDataFont := oFont
// 5a. coluna
OBrwItensPagt:aCols[5]:lHide := .t.
// 6a. coluna
OBrwItensPagt:aCols[6]:lHide := .t.
// 7a. coluna
OBrwItensPagt:aCols[7]:lHide := .t.
// 8a. coluna
OBrwItensPagt:aCols:cHeader := "Total"
OBrwItensPagt:aCols:nEditType := EDIT_NONE
OBrwItensPagt:aCols:cEditPicture := "@E 999.99"
OBrwItensPagt:aCols:bStrData := {|| transform(aArrayItemPagt[ OBrwItensPagt:nArrayAt, 8 ], "@E 999.99") }
OBrwItensPagt:aCols:nDataStrAlign := AL_RIGHT
OBrwItensPagt:aCols:nHeadStrAlign := AL_RIGHT
OBrwItensPagt:aCols:nWidth := 70
OBrwItensPagt:aCols:lHide := .f.
OBrwItensPagt:aCols:oHeaderFont := oFont
OBrwItensPagt:aCols:oDataFont := oFont
// 9a. coluna
OBrwItensPagt:aCols[9]:lHide := .t.
// 10a. coluna
OBrwItensPagt:aCols[10]:lHide := .t.
// 11a. coluna
OBrwItensPagt:aCols[11]:lHide := .t.
// 12a. coluna
OBrwItensPagt:aCols[12]:lHide := .t.
OBrwItensPagt:CreateFromResource( 124 )
OBrwItensPagt:lHScroll := .f.
OBrwItensPagt:lVScroll := .t.
ACTIVATE DIALOG oWndPgt ON INIT ;
( OBtnGravar:Move(800, 800),OBtnRetornar:Move(800, 800),;
oWndPgt:Move(nTopDiag, nLeftDiag, nWidthDiag, nHeightDiag[1], .t.),;
if(cTipoPedido='MESA', oGetPgt04:Hide(), Nil),;
if(cTipoPedido='MESA', oGetPgt05:Hide(), Nil),;
if(cTipoPedido='MESA', OSayPgt13:Hide(), Nil),;
if(cTipoPedido='MESA', oBtnPgt01:Hide(), Nil) )
oFont:End()
if oWndPgt:nResult = 100
// monta variaveis para finalizar a venda
b0103FinalizaFechamentoVenda()
else
aRet := {}
aadd( aRet, .f. )
aadd( aRet, 0 )
aadd( aRet, 0 )
aadd( aRet, 0 )
endif
else
msginfo("Atenção: nenhuma forma de pagamento foi informada na parametrização do sistema FRENTE.")
endif
Set Confirm off
closef('transport')
Release OBrwItensPagt, oBrwPgt1, itemobrw1
Release oWndPgt
select(warea)
return aRet