mkyx Posted September 6, 2021 Report Share Posted September 6, 2021 Boa noite pessoal, estou com o seguinte problema: Eu estou usando uma array: tab_item_1, para armazenar e exibir os itens digitados na tela de venda. Ao acessar a tela de venda, é exibido uma janela xbrowse sem colunas, totalmente em branco, que ficou show. a medida que vai lendo os código de barras, para exibir o array com os dados dos itens digitados, criei a função ATUALIZA_XBR(), que cria as 6 colunas no xbrowse e dá um refresh para atualizar a tela. Mas, para criar as colunas, dentro da função tive que analisar o tamanho do array, e quando o array tem apenas uma linha, que é o momento que se passa o primeiro item, o xbrowse é reiniciado e depois disso não mais é reiniciado, só atualizado as colunas. function atualiza_xbr() if LEN(tab_item_1)=1 // os 2 comandos abaixo é para recriar o xbrowse com colunas, porque antes disso, não tinha colunas oBrw0:DESTROY() oBrw0:END() endif if LEN(tab_item_1)=1 // recria o xbrowse, mas só quando é digitado o primeiro produto, depois disso, não recria mais oBrw0:=TXBrowse():New( oWnd ) endif oBrw0:nTop:=05 oBrw0:nLeft:=05 oBrw0:nBottom:=800 oBrw0:nRight:=1000 oBrw0:nMarqueeStyle := MARQSTYLE_HIGHLCELL oBrw0:setArray(tab_item_1) oBrw0:nColDividerStyle := 0 oBrw0:nRowDividerStyle := 0 oBrw0:nHeaderLines := 0 //--> Cabecalho em 2 Linhas. oBrw0:lAllowColSwapping :=.F. // Trocar Colunas oBrw0:lAllowRowSizing := .F. //--> Nao move as Linhas oBrw0:nRowHeight := 33 //--> Altura das Linhas do ListBox. oBrw0:lHScroll := .F. oBrw0:lVScroll := .F. oBrw0:lHeader := .F. oBrw0:lFooter := .F. oBrw0:lRecordSelector := .F. oBrw0:lFastEdit :=.t. oBrw0:nFreeze:=6 oBrw0:l2007:=.T. oBrw0:lFooter := .F. IF LEN(tab_item_1)>0 .AND. oBrw0:nArrayAT>0 oBrw0:nHeaderLines := 1 oBrw0:lHeader := .T. TRY oBrw0:bClrStd := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,1]="XX",{CLR_RED,rgb(208,254,197)},IF(TAB_ITEM_1[oBrw0:nArrayAT,1]="D",{CLR_RED,rgb(255,215,222)},IF(oBrw0:nArrayAT%2=0,{CLR_BLUE,RGB(200,253,232)},{CLR_BLUE,CLR_WHITE}))) } oBrw0:aCols[1]:cHeader := "?" oBrw0:aCols[1]:nWidth := LG_COL1 oBrw0:aCols[1]:nHeadStrAlign := AL_CENTER oBrw0:aCols[1]:nDataStrAlign := AL_CENTER CATCH END TRY oBrw0:aCols[2]:cHeader := "CÓDIGO" oBrw0:aCols[2]:nWidth := LG_COL2 oBrw0:aCols[2]:nHeadStrAlign := AL_LEFT oBrw0:aCols[2]:nDataStrAlign := AL_LEFT CATCH END TRY oBrw0:aCols[3]:cHeader := "DESCRIÇÃO" oBrw0:aCols[3]:nWidth := LG_COL3 oBrw0:aCols[3]:nHeadStrAlign := AL_LEFT oBrw0:aCols[3]:nDataStrAlign := AL_LEFT CATCH END TRY oBrw0:aCols[4]:cHeader := "QUANTde" oBrw0:aCols[4]:nWidth := LG_COL4 oBrw0:aCols[4]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[4]:nDataStrAlign := AL_RIGHT oBrw0:aCols[4]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,4]>0,IF(INT(TAB_ITEM_1[oBrw0:nArrayAT,4])=TAB_ITEM_1[oBrw0:nArrayAT,4],TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999'),TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999.999')),"") } oBrw0:aCols[4]:nEditType := EDIT_GET oBrw0:aCols[4]:BEDITVALUE := { ||TAB_ITEM_1[oBrw0:nArrayAT,4] } oBrw0:aCols[4]:CEDITPICTURE := "@E 999999.999" oBrw0:aCols[4]:bOnPostEdit := {|uOCOL,uVAL,uKEY| M1(@uOCOL,@uVAL,@uKEY) } CATCH ERROR END TRY IF TAB_ITEM_1[oBrw0:nArrayAT,5]>=0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[5]:cHeader := "UNITÁRIO" oBrw0:aCols[5]:nWidth := LG_COL5 oBrw0:aCols[5]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[5]:nDataStrAlign := AL_RIGHT IF TAB_ITEM_1[oBrw0:nArrayAT,5]>=0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[5]:bStrData := {|| IF(TAB_ITEM_1[oBrw0:nArrayAT,5]>0,TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,5] , '@E 999,999.99'),"") } oBrw0:aCols[5]:nEditType := EDIT_GET oBrw0:aCols[5]:BEDITVALUE := { ||TAB_ITEM_1[oBrw0:nArrayAT,5] } oBrw0:aCols[5]:CEDITPICTURE := "@E 999999.99" oBrw0:aCols[5]:bOnPostEdit := {|uOCOL5,uVAL5,uKEY5| M2(@uOCOL5,@uVAL5,@uKEY5) } ENDIF ENDIF CATCH ERROR END TRY IF TAB_ITEM_1[oBrw0:nArrayAT,6]>=0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[6]:cHeader := "TOTAL" oBrw0:aCols[6]:nWidth := LG_COL6 oBrw0:aCols[6]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[6]:nDataStrAlign := AL_RIGHT oBrw0:aCols[6]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,12]="XX" .AND. TAB_ITEM_1[oBrw0:nArrayAT,6]>0 .AND. BX_C_C="BX_CC","("+ALLTRIM(TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,6] , '@E 999,999.99'))+")", IF(TAB_ITEM_1[oBrw0:nArrayAT,6]>0, TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,6] , '@E 999,999.99'),"")) } ENDIF CATCH ERROR END ENDIF oBrw0:bClrSel := {|| {RGB(0,0,128),RGB(255,255,255)} } // COR SELECIONADA QUANDO SAI DE FOCO if LEN(tab_item_1)=1 // só executa o comando abaixo, quando o array tem apenas uma linha oBrw0:CreateFromCode() endif oBrw0:bKeydown:={|nkey|_obrw0(nkey,OBRW0:nArrayAt)} oBrw0:GOBOTTOM() oBrw0:REFRESH() RETURN .T. Durante a digitação dos itens, quando chega acima de 200 produtos digitados, o programa se fecha, e dentro do arquivo de erro ERROR.LOG, contém a mensagem abaixo: Application =========== Path and name: D:\wincom\wincom.exe (32 bits) Size: 7,054,848 bytes Time from start: 0 hours 3 mins 19 secs Error occurred at: 06/09/2021, 00:22:37 Error description: Error FiveWin/6 Cannot create window or control: Class: TBTNBMP Caption: System Error: O processo atual usou todos os identificadores de sistema permitidos para objetos do Gerenciador do Windows. Stack Calls =========== Called from: WINDOW.PRG => WNDCREATEERROR(0) Called from: WINDOW.PRG => TBTNBMP:CREATE(0) Called from: BTNBMP.PRG => TBTNBMP:NEW(0) Called from: XBROWSE.PRG => TXBRWCOLUMN:CREATEBUTTONS(4405) Called from: XBROWSE.PRG => TXBRWCOLUMN:ADJUST(3506) Called from: XBROWSE.PRG => TXBROWSE:SETARRAY(2597) Called from: WINCOM.PRG => ATUALIZA_XBR(7239) Called from: WINCOM.PRG => _LERCOD1(5715) Called from: WINCOM.PRG => (b)AD_CAIXA(1691) Called from: TGET.PRG => CORGET:LVALID(0) Called from: CONTROL.PRG => CORGET:FWLOSTFOCUS(0) Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0) Called from: TGET.PRG => CORGET:HANDLEEVENT(0) Called from: WINDOW.PRG => _FWH(0) Called from: => SYSREFRESH(0) Called from: CONTROL.PRG => TCONTROL:KEYCHAR(0) Called from: TGET.PRG => CORGET:KEYCHAR(0) Called from: => TWINDOW:HANDLEEVENT(0) Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0) Called from: TGET.PRG => CORGET:HANDLEEVENT(0) Called from: WINDOW.PRG => _FWH(0) Called from: => WINRUN(0) Called from: WINDOW.PRG => TWINDOW:ACTIVATE(0) Called from: WINCOM.PRG => MAIN(948) Esse erro: System Error: O processo atual usou todos os identificadores de sistema permitidos para objetos do Gerenciador do Windows. é causado por causa da classe TBTNBMP, que ultrapassou o limite de apresentação ou refresh(). Alguém sabe como resolver esse erro, para poder digitar 500 itens, se for preciso ? Obrigado a todos que puderem me ajudar. Quote Link to comment Share on other sites More sharing options...
mkyx Posted September 6, 2021 Author Report Share Posted September 6, 2021 Fiz umas alterações na função atualiza_xbr(), e permitiu digitar 600 itens, agora surgiu outro erro, mas esse vou analisar. function atualiza_xbr() oBrw0:refresh() if LEN(tab_item_1)=1 oBrw0:DESTROY() oBrw0:END() endif if LEN(tab_item_1)=1 oBrw0:=TXBrowse():New( oWnd ) oBrw0:nTop:=_l0*IF(IMP_CC="@",65,125)/768 oBrw0:nLeft:=15 oBrw0:nBottom:=_l0*IF(IMP_CC="@",500,555)/768 oBrw0:nRight:=if(_c0<1600,640,if(_c0=1600,750,950)) oBrw0:nMarqueeStyle := MARQSTYLE_HIGHLCELL oBrw0:setArray(tab_item_1) oBrw0:nColDividerStyle := 0 oBrw0:nRowDividerStyle := 0 oBrw0:nHeaderLines := 0 //--> Cabecalho em 2 Linhas. oBrw0:lAllowColSwapping :=.F. // Trocar Colunas oBrw0:lAllowRowSizing := .F. //--> Nao move as Linhas oBrw0:nRowHeight := 33 //--> Altura das Linhas do ListBox. oBrw0:lHScroll := .F. oBrw0:lVScroll := .F. oBrw0:lHeader := .F. oBrw0:lFooter := .F. oBrw0:lRecordSelector := .F. oBrw0:lFastEdit :=.t. oBrw0:nFreeze:=6 oBrw0:l2007:=.T. oBrw0:lFooter := .F. oBrw0:nHeaderLines := 1 oBrw0:lHeader := .T. oBrw0:oFont := OFNT441 endif IF LEN(tab_item_1)>0 .AND. oBrw0:nArrayAT>0 TRY oBrw0:bClrStd := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,1]="XX",{CLR_RED,rgb(208,254,197)},IF(TAB_ITEM_1[oBrw0:nArrayAT,1]="D",{CLR_RED,rgb(255,215,222)},IF(oBrw0:nArrayAT%2=0,{CLR_BLUE,RGB(200,253,232)},{CLR_BLUE,CLR_WHITE}))) } oBrw0:aCols[1]:cHeader := "?" oBrw0:aCols[1]:nWidth := LG_COL1 oBrw0:aCols[1]:nHeadStrAlign := AL_CENTER oBrw0:aCols[1]:nDataStrAlign := AL_CENTER CATCH END TRY IF BX_C_C="BX_CC" oBrw0:aCols[2]:cHeader := "DATA" ELSE oBrw0:aCols[2]:cHeader := "CÓDIGO" ENDIF oBrw0:aCols[2]:nWidth := LG_COL2 oBrw0:aCols[2]:nHeadStrAlign := AL_LEFT oBrw0:aCols[2]:nDataStrAlign := AL_LEFT CATCH END TRY oBrw0:aCols[3]:cHeader := "DESCRIÇÃO" oBrw0:aCols[3]:nWidth := LG_COL3 oBrw0:aCols[3]:nHeadStrAlign := AL_LEFT oBrw0:aCols[3]:nDataStrAlign := AL_LEFT CATCH END TRY oBrw0:aCols[4]:cHeader := "QUANTde" oBrw0:aCols[4]:nWidth := LG_COL4 oBrw0:aCols[4]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[4]:nDataStrAlign := AL_RIGHT oBrw0:aCols[4]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,4]>0,IF(INT(TAB_ITEM_1[oBrw0:nArrayAT,4])=TAB_ITEM_1[oBrw0:nArrayAT,4],TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999'),TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,4] , '@E 999,999.999')),"") } oBrw0:aCols[4]:nEditType := EDIT_GET oBrw0:aCols[4]:BEDITVALUE := { ||TAB_ITEM_1[oBrw0:nArrayAT,4] } oBrw0:aCols[4]:CEDITPICTURE := "@E 999999.999" oBrw0:aCols[4]:bOnPostEdit := {|uOCOL,uVAL,uKEY| M1(@uOCOL,@uVAL,@uKEY) } CATCH ERROR END TRY IF TAB_ITEM_1[oBrw0:nArrayAT,5]>=0 .AND. LEN(TAB_ITEM_1)>0 if tpcx_p=" " .OR. BX_C_C="BX_CC" oBrw0:aCols[5]:cHeader := "UNITÁRIO" ELSE oBrw0:aCols[5]:cHeader := "À VISTA" ENDIF oBrw0:aCols[5]:nWidth := LG_COL5 oBrw0:aCols[5]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[5]:nDataStrAlign := AL_RIGHT IF TAB_ITEM_1[oBrw0:nArrayAT,5]>=0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[5]:bStrData := {|| IF(TAB_ITEM_1[oBrw0:nArrayAT,5]>0,TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,5] , '@E 999,999.99'),"") } oBrw0:aCols[5]:nEditType := EDIT_GET oBrw0:aCols[5]:BEDITVALUE := { ||TAB_ITEM_1[oBrw0:nArrayAT,5] } oBrw0:aCols[5]:CEDITPICTURE := "@E 999999.99" oBrw0:aCols[5]:bOnPostEdit := {|uOCOL5,uVAL5,uKEY5| M2(@uOCOL5,@uVAL5,@uKEY5) } ENDIF ENDIF CATCH ERROR END TRY if tpcx_p=" " .OR. BX_C_C="BX_CC" IF TAB_ITEM_1[oBrw0:nArrayAT,6]>=0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[6]:cHeader := "TOTAL" oBrw0:aCols[6]:nWidth := LG_COL6 oBrw0:aCols[6]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[6]:nDataStrAlign := AL_RIGHT oBrw0:aCols[6]:bStrData := {||IF(TAB_ITEM_1[oBrw0:nArrayAT,12]="XX" .AND. TAB_ITEM_1[oBrw0:nArrayAT,6]>0 .AND. BX_C_C="BX_CC","("+ALLTRIM(TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,6] , '@E 999,999.99'))+")", IF(TAB_ITEM_1[oBrw0:nArrayAT,6]>0, TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,6] , '@E 999,999.99'),"")) } ENDIF ELSE IF TAB_ITEM_1[oBrw0:nArrayAT,8]>=0 .AND. LEN(TAB_ITEM_1)>0 //TAB_ITEM_1[oBrw0:nArrayAT,11] oBrw0:aCols[6]:cHeader := "A PRAZO" oBrw0:aCols[6]:nWidth := LG_COL5 oBrw0:aCols[6]:nHeadStrAlign := AL_RIGHT oBrw0:aCols[6]:nDataStrAlign := AL_RIGHT IF TAB_ITEM_1[oBrw0:nArrayAT,8]>0 .AND. LEN(TAB_ITEM_1)>0 oBrw0:aCols[6]:bStrData := {|| IF(TAB_ITEM_1[oBrw0:nArrayAT,8]>0,TRANSFORM( TAB_ITEM_1[oBrw0:nArrayAT,8] , '@E 999,999.99'),"") } oBrw0:aCols[6]:nEditType := EDIT_GET oBrw0:aCols[6]:BEDITVALUE := { ||TAB_ITEM_1[oBrw0:nArrayAT,8] } oBrw0:aCols[6]:CEDITPICTURE := "@E 999999.99" oBrw0:aCols[6]:bOnPostEdit := {|uOCOL6,uVAL6,uKEY6| M21(@uOCOL6,@uVAL6,@uKEY6) } ENDIF ENDIF ENDIF CATCH ERROR END ENDIF if LEN(tab_item_1)=1 oBrw0:bClrSel := {|| {RGB(0,0,128),RGB(255,255,255)} } // COR SELECIONADA QUANDO SAI DE FOCO oBrw0:CreateFromCode() oBrw0:bKeydown:={|nkey|_obrw0(nkey,OBRW0:nArrayAt)} endif oBrw0:GOBOTTOM() oBrw0:REFRESH() RETURN .T. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.