Jump to content
Fivewin Brasil

Erro no xbrowse


mkyx

Recommended Posts

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.

 

 

Link to comment
Share on other sites

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.
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...