sunset Posted April 12, 2021 Report Share Posted April 12, 2021 Bom Dia Existe alguma forma de limitar a quantidade de registros a serem exibidos quando iniciar o XBROWSE, estou com uma base com 41.523.181 registros, quando inicio a tela com o xbrowse, praticamente fica 2h travada, com toda certeza é a quantidade de registros, então gostaria de saber se tenho como limitar esse carregamento com algum argumento no xbrowse para ele tipo carregar uns 5.000 e depois ir paginando e carregando a medida que for navegando na base, uso mysql. grato. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 12, 2021 Report Share Posted April 12, 2021 Tente com Indice MEMORY/TEMPORARY ou ORDSCOPE() . Abs. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted April 12, 2021 Report Share Posted April 12, 2021 Boa tarde, Uso o Postgresql mas acho que é quase a mesma coisa, então: SELECT select_list FROM table_expression [ LIMIT { número | TODOS} ] [ número OFFSET ] Procure na web as variações para a cláusula LIMIT e OFFSET, que você conseguirá fazer o que esta necessitando. Abraço. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted April 12, 2021 Report Share Posted April 12, 2021 Olá, Se você está utilizando banco de dados MySQL, o comando apresentado pelo Wellington, no post acima, atende. SELECT ( campos ) FROM ( tabela ) LIMIT ( número de registros ) Se estiver utilizando DBF, faça um set filter para apresentar um número reduzido de registros, como por exemplo de data x até data y. Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 12, 2021 Report Share Posted April 12, 2021 Oliveiros Junior, SET FILTER, vai deixar 3 x mais lento. abs. Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted April 12, 2021 Report Share Posted April 12, 2021 Qual banco de dados você está usando? Quote Link to comment Share on other sites More sharing options...
sunset Posted April 12, 2021 Author Report Share Posted April 12, 2021 MYSQL 5.7 Na verdade eu estou abrindo a tabela como se fosse um DBF ainda use estadual alias estad new shared if neterr() msginfo("Arquivo está em uso em modo exclusivo","Informação") close data retu endif set index to estadual e usando o ALIS no xbrwse @ 0,0 XBROWSE oLbxEstadual ; Fields Iif(len(alltrim(estad->numecgc)) = 11,TRANSFORM(estad->numecgc,"@R 999.999.999-99"),TRANSFORM(estad->numecgc,"@R 99.999.999/9999-99")),; estad->nomecli ,; estad->inscest ,; estad->siticms ,; estad->cida_de ,; estad->esta_do ,; estad->correio ,; estad->telefon ; Headers "Cnpj" ,; "Nome" ,; "Inscrição" ,; "Situação" ,; "Cidade" ,; "UF" ,; "Correio" ,; "Telefone" ; Fieldsizes 170,400,90,100,200,25,400,150; Alias "estad" ; Mas acredito que desta forma não vou ter resultado, vou executar um SELECT conforme indicado teria que colocar o resultado num array ? Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted April 12, 2021 Report Share Posted April 12, 2021 Por acaso vc usa para o acesso SQLRDD ? Quote Link to comment Share on other sites More sharing options...
sunset Posted April 12, 2021 Author Report Share Posted April 12, 2021 8 minutos atrás, Jmsilva disse: Por acaso vc usa para o acesso SQLRDD ? SIM - RDDSETDEFAULT("SQLRDD") Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted April 12, 2021 Report Share Posted April 12, 2021 Um exemplo de SELECT com paginação para SQLRDD, especificamente na função GetVndList(...) /****************************************************************************** * Nome do PRG: cadvendas (Criada em 11/05/2020) - ARSOFT INFROMÁTICA * * Função.....: Módulo para consulta de vendas no BD remoto (online) * * Autor......: Ariston Santos * * Site.......: http://www.arsoft-ap.com.br * * Contato....: ariston.ap@hotmail.com; suporte@arsoft-ap.com.br * ******************************************************************************/ #include "FiveWin.ch" #include "xbrowse.ch" #include "vlib.ch" *--- (SqlRDD includes ) ---* #include "sqlrdd.ch" #include "firebird.ch" STATIC aVndInf, aOcpItn, aVndNul, aVndColWd, aVndSavWd, aNfColWd2, aNfSavW2, cQPesq, cCPesq STATIC cVndQry, cVndQpg, cVndQrc, cVndSkp, cVndLsk STATIC xVa01, xItn02, xItn03, xItn04, xItn05, xItn06, xItn07, xItn08, xItn09, xItn10, xItn11, xItn12, xItn13, xItn14, xItn15, xItn16, xItn17, xItn18, xItn19, xItn20,; xItn21, xItn22, xItn23, xItn24, xItn25, xItn26, xItn27, xItn28, xItn29, xItn30, xItn31, xItn32, xItn33, xItn34, xItn35, xItn36, xItn37, xItn38, xItn39, xItn40,; xItn41, xItn42, xItn43, xItn44, xItn45, xItn46, xItn47, xItn48, xItn49, xItn50, xItn51, xItn52, xItn53, xItn54, xItn55, xItn56, xItn57, xItn58, xItn59, xItn60, xItn61 FUNCTION CtrlVendas() n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; RETURN NIL ; ENDIF aVndNul := {} aVndInf := {} aLetra := {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"} cCPesq := SPACE(50) cQPesq := "Nome cliente" aQPesq := {"Nome cliente", "Fantasia", "CPF/CNPJ", "Nome vendedor", "Data venda", "Data entrega", "Código venda", "Cód. cliente", "Cód. vendedor"} cVndQrc := 0 cVndQpg := 0 cVndLsk := 0 cVndSkp := 0 GetVndList(0,"*","",NIL,NIL,.f.,"New") IF LenArray(aVndInf,30) > 0 aOcpItn := OrdGetItms(aVndInf[1,1], aVndInf[1,2]) ELSE aOcpItn := OrdGetItms(0, "") ENDIF DEFINE FONT oDFont NAME "TAHOMA" SIZE 0, -13 DEFINE FONT oFBold NAME "Verdana" SIZE 0, -14 BOLD DEFINE FONT oXBfon NAME "Arial Narrow" SIZE 0,-15 XBrNumFormat( 'E', .t. ) SysRefresh() DEFINE DIALOG oCadDlg FROM 0, 0 TO 35, 100 TITLE "Consulta de venda online" oCadDlg:lHelpIcon := .f. @02,005 SAY oSayPsq PROMPT "Procurar por:" OF oCadDlg SIZE 70,10 PIXEL @12,005 COMBOBOX oCBox VAR cQPesq ITEMS aQPesq SIZE 70, 50 PIXEL OF oCadDlg @02,080 SAY "Procurar (Asterisco '*' para mostrar todos os registros)" OF oCadDlg SIZE 310,10 PIXEL @12,080 GET oGetPsq VAR cCPesq OF oCadDlg SIZE 310,12 PIXEL UPDATE VALID GetVndList(1,@cCPesq,"",oXbVnd,oCadDlg,.t.,"New") @25,05 TABS oPTabs PROMPTS "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" OF oCadDlg ; PIXEL SIZE 385.00, 20.00 ACTION (cCPesq := aLetra[oPTabs:nOption], GetVndList(2,@cCPesq,"",oXbVnd,oCadDlg,.f.,"New"), EVAL({||oXbItn:bChange}), IIF(LEN(aVndInf)=0,(aOcpItn := OrdGetItms(0, ""),oXbItn:SetArray(aOcpItn), oXbItn:MakeTotals(), oXbItn:Refresh()),NIL)) // TABS provide nOption automatically oPTabs:cToolTip := "Filtar apelido ou nome que inicie por esta letra" aVndColWd := array(61) // Qtd de colunas * 7, 8, 25, 16, 17, 24, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52; aVndColWd := {60, 30, 70, 250, 150, 80, 120, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 150, 25, 150} @33,05 GROUP oGrp PROMPT "" OF oCadDlg SIZE 385, 125 @33,05 XBROWSE oXbVnd OF oCadDlg SIZE 284, 125 PIXEL ARRAY aVndInf ; COLUMNS "", 8, 25, 16, 17, 25, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52; HEADERS "Data", "Hora", "Doc. cliente", "Nome/Razão social do cliente", "Fantasia/Local de trabalho do cliente", "CPF/CNPJ", "Operação", "Vlr. Itens", "Desconto itens", "Desconto final", "Acréscimo %", "Mão de obra R$", "Couvert R$", "Meio Pg 01", "Meio Pg 02", "Meio Pg 03", "Meio Pg 04", "Meio Pg 05", "Meio Pg 06", "Meio Pg 07", "Meio Pg 08", "Meio Pg 09", "Meio Pg 10", "Meio Pg 11", "Operador", "Cód. vendedor", "Nome vendedor"; COLSIZES aVndColWd ; ON CHANGE (aOcpItn := OrdGetItms(aVndInf[oXbVnd:nArrayAt,1], aVndInf[oXbVnd:nArrayAt,2]), oXbItn:SetArray(aOcpItn), oXbItn:MakeTotals(), oXbItn:Refresh()) ; ON DBLCLICK EditVnd(.f., oXbVnd) ; COLORS CLR_BLACK, nRGB(240,248,255) ; LINES CELL UPDATE AEval( oXbVnd:aCols, { |o| o:nHeadStrAlign := AL_LEFT } ) oXbVnd:lRecordSelector := .F. oXbVnd:lColDividerComplete := .T. oXbVnd:lKineticBrw := .f. oXbVnd:SetFont(oXBfon) oXbVnd:bClrSelFocus := {|| { CLR_WHITE, CLR_HBLUE }} // Seleção com foco oXbVnd:bClrSel := {|| { CLR_BLACK, CLR_GRAY }} // Seleção sem foco oXbVnd:bClrStd := {|| If( LenArray(aVndInf,1) > 0 .AND. MOD(oXbVnd:nArrayAt, 2) = 0, ; // Cores diferentes em itens bloqueados { CLR_BLACK, CLR_HCYAN },; { CLR_BLACK, nRGB(240,248,255) } ) } IF LEN(aVndInf) > 0 WITH OBJECT oXbVnd :aCols[1]:bStrData := {||DTOC(aVndInf[oXbVnd:nArrayAt,7])} END ENDIF oXbVnd:CreateFromCode() aVndSavWd := oXbVnd:nWidth * XBROWSE dos itens aNfColWd2 := {110, 320, 75, 75, 75, 75, 75, 75, 75} @163,05 GROUP oGrp02 PROMPT "" OF oCadDlg SIZE 385, 70 @163,05 XBROWSE oXbItn ARRAY aOcpItn OF oCadDlg ; HEADERS "Código", "Descrição", "Quantidade", "Pr. s/desc", "Pr c/desc.", "Vlr. Total", "Nr. lote", "Fabricação", "Validade"; COLUMNS {1,2,3,4,5,6,7,8,9} ; COLSIZES aNfColWd2 ; COLORS CLR_BLACK, nRGB(240,248,255) ; SIZE 385, 70 PIXEL LINES CELL UPDATE oXbItn:bClrSelFocus := {|| { CLR_WHITE, CLR_HBLUE }} // Seleção com foco oXbItn:bClrSel := {|| { CLR_BLACK, CLR_HGRAY }} // Seleção sem foco oXbItn:bClrStd := {|| If( MOD(oXbItn:nArrayAt, 2) = 0, {CLR_BLACK, CLR_HCYAN}, {CLR_BLACK, nRGB(240,248,255)} ) } oXbItn:lRecordSelector := .F. oXbItn:lColDividerComplete := .T. oXbItn:lKineticBrw := .f. AEval( oXbItn:aCols, { |o| o:nHeadStrAlign := AL_LEFT } ) oXbItn:SetFont(oXBfon) oXbItn:CreateFromCode() aNfSavW2 := oXbItn:nWidth oXbItn:lFooter := .t. oXbItn:aCols[5]:cFooter := "TOTAL >>" oXbItn:aCols[6]:nFooterType := AGGR_TOTAL oXbItn:nStretchCol := STRETCHCOL_WIDEST oXbItn:ColStretch() nCol := 55 @242, (8+(nCol*1)-55) SBUTTON oSbt1 PROMPT "" OF oCadDlg SIZE 50, 18 PIXEL NOBORDER XP ACTION NIL WHEN .F. // EditVnd(.t., oXbVnd) @242, (8+(nCol*2)-55) SBUTTON oSbt2 PROMPT "" OF oCadDlg SIZE 50, 18 PIXEL NOBORDER XP ACTION NIL WHEN .F. // EditVnd(.f., oXbVnd) @242, (8+(nCol*3)-55) SBUTTON oSbt4 PROMPT "" OF oCadDlg SIZE 50, 18 PIXEL NOBORDER XP ACTION NIL WHEN .F. // DeleVnd(oXbVnd) @242, (8+(nCol*4)-55) SBUTTON oSbt3 PROMPT "Relatório" OF oCadDlg FILENAME ".\FIGURAS\print.BMP" SIZE 50, 18 PIXEL NOBORDER XP ACTION ImprVnd(oXbVnd) @242, 230 SBUTTON oSbPg1 PROMPT " " OF oCadDlg ACTION GetVndList(4,"<","",oXbVnd,oCadDlg,.f.,"New") FILENAME ".\figuras\pgup.bmp" SIZE 18, 18 PIXEL NOBORDER XP TOOLTIP "Mostrar registros da primeira página" @242, 250 SBUTTON oSbPg2 PROMPT " " OF oCadDlg ACTION GetVndList(4,"-","",oXbVnd,oCadDlg,.f.,"New") FILENAME ".\figuras\skip-1.bmp" SIZE 18, 18 PIXEL NOBORDER XP TOOLTIP "Mostrar registros da página anterior" @242, 290 SBUTTON oSbPg3 PROMPT " " OF oCadDlg ACTION GetVndList(4,"+","",oXbVnd,oCadDlg,.f.,"New") FILENAME ".\figuras\skip.bmp" SIZE 18, 18 PIXEL NOBORDER XP TOOLTIP "Mostrar registros da página seguinte" @242, 310 SBUTTON oSbPg4 PROMPT " " OF oCadDlg ACTION GetVndList(4,">","",oXbVnd,oCadDlg,.f.,"New") FILENAME ".\figuras\pgdn.bmp" SIZE 18, 18 PIXEL NOBORDER XP TOOLTIP "Mostrar registros da última página" @248, 270 SAY oXbPag PROMPT ALLTRIM(STR(cVndQpg))+"/"+ALLTRIM(STR( INT(cVndQrc/50)+IIF(MOD(cVndQrc,50) > 0,1,0) )) OF oCadDlg SIZE 18,10 PIXEL UPDATE CENTER @242, (8+(nCol*7)-55) SBUTTON oSbt5 PROMPT "Retornar" OF oCadDlg ACTION oCadDlg:End() FILENAME ".\FIGURAS\btnsair.BMP" SIZE 50, 18 PIXEL NOBORDER XP TOOLTIP "Retornar para a tela principal" oCadDlg:SetFont(oDFont) ACTIVATE DIALOG oCadDlg ; ON INIT (oGrp:Hide(), oCadDlg:MISetSize(.F.), oCadDlg:Move(0, 0), VndLbxRsiz(oXbVnd, oXbItn, oGrp, oGrp02),; cCPesq:= "*", GetVndList(1,@cCPesq,"",oXbVnd,oCadDlg,.f.,"New"), oXbVnd:Refresh(), xFocus(oGetPsq)) RELEASE FONT oDFont, oFBold, oXBfon RETURN NIL STATIC FUNCTION VndLbxRsiz(oXbVnd, oXbItn, oGrp, oGrp02) oGrp:Show() ; WndSetSize(oXbVnd:hWnd, oGrp:nWidth, oGrp:nHeight, .t.) ; oGrp:Hide() nFactor := (oXbVnd:nWidth - aVndSavWd) nPorcen := 100 - ((100 / nFactor) * (aVndSavWd + (if( oXbVnd:lRecordSelector,80,0) + if( oXbVnd:lVScroll,50,0)))) AEVAL( oXbVnd:aCols, {|o, nI| o:nWidth := aVndColWd[ nI ] + ((aVndColWd[ nI ] / 100) * nPorcen)} ) oXbVnd:Refresh() oGrp02:Show() ; WndSetSize(oXbItn:hWnd, oGrp02:nWidth, oGrp02:nHeight, .t.) ; oGrp02:Hide() nFactor := (oXbItn:nWidth - aNfSavW2) nPorcen := 100 - ((100 / nFactor) * (aNfSavW2 + (if( oXbItn:lRecordSelector,80,0) + if( oXbItn:lVScroll,50,0)))) AEVAL( oXbItn:aCols, {|o, nI| o:nWidth := aNfColWd2[ nI ] + ((aNfColWd2[ nI ] / 100) * nPorcen)} ) oXbItn:Refresh() RETURN NIL STATIC FUNCTION EditVnd(lIsNew, oXbVnd) LOCAL lVndOk := .F., nAt := oXbVnd:nArrayAt if ! lIsNew IF LEN(aVndInf) = 0 SysRefresh() ; MsgAlert("Favor selecionar um registro válido","Aviso") RETURN NIL ENDIF IF aVndInf[nAt,1] = 0 SysRefresh() ; MsgAlert("Favor selecionar um registro válido","Aviso") RETURN NIL endif ENDIF xItn01 := 0 // Código xItn02 := SPACE(15) // ID Unico xItn03 := SPACE(10) // Ref. Orçamento xItn04 := 0 // Ref. NF-e xItn05 := 0 // Ref. NFC-e xItn06 := SPACE(6) // Ref. SAT xItn07 := CTOD(" ") // Data venda xItn08 := SPACE(5) // Hora venda xItn09 := CTOD(" ") // Data entrega xItn10 := SPACE(5) // Hora entrega xItn11 := .F. // Cencelada? xItn12 := SPACE(10) // Dt. cancelamento xItn13 := SPACE(95) // Motivo cancelamento xItn14 := 0.00 // CFOP 1º item xItn15 := 0 // Cód. cliente xItn16 := SPACE(50) // Nome cliente xItn17 := SPACE(50) // Fantasia xItn18 := SPACE(10) // End. CEP xItn19 := SPACE(50) // End. Rua xItn20 := SPACE(15) // End. número xItn21 := SPACE(30) // End. bairro xItn22 := SPACE(30) // End. cidade xItn23 := SPACE(255) // Perímetro xItn24 := SPACE(50) // Telefone xItn25 := SPACE(20) // CPF/CNPJ xItn26 := SPACE(20) // RG/IE xItn27 := CTOD(" ") // Dt.Nascimento xItn28 := SPACE(50) // Autorizado xItn29 := SPACE(15) // Operação xItn30 := 0.000 // Vlr. Itens xItn31 := 0.00 // Desconto itens xItn32 := 0.000 // Desconto final xItn33 := 0.00 // Acréscimo % xItn34 := 0.00 // Mão de obra R$ xItn35 := 0.00 // Couvert R$ xItn36 := 0 // Qt. pessoas xItn37 := SPACE(11) // Valor pago xItn38 := 0.000 // Meio Pg 01 xItn39 := 0.000 // Meio Pg 02 xItn40 := 0.000 // Meio Pg 03 xItn41 := 0.000 // Meio Pg 04 xItn42 := 0.000 // Meio Pg 05 xItn43 := 0.000 // Meio Pg 06 xItn44 := 0.000 // Meio Pg 07 xItn45 := 0.000 // Meio Pg 08 xItn46 := 0.000 // Meio Pg 09 xItn47 := 0.000 // Meio Pg 10 xItn48 := 0.00 // Meio Pg 11 xItn49 := SPACE(80) // Inf. Pg. Cartão xItn50 := SPACE(43) // Operador xItn51 := 0 // Cód. vendedor xItn52 := SPACE(30) // Nome vendedor xItn53 := 0 // Cód. Vd. Rateio xItn54 := SPACE(40) // Nome Vd. Rateio xItn55 := 0.00 // Valor Rateio xItn56 := SPACE(255) // Veículo - Inf. xItn57 := SPACE(30) // Veículo - KM xItn58 := SPACE(20) // Veículo - Modelo xItn59 := SPACE(8) // Veículo - Placa xItn60 := .F. // Venda futura? xItn61 := SPACE(30) // Observações n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; RETURN NIL ; ENDIF IF ! lIsNew xItn01 := aVndInf[nAt,01] // Código xItn02 := aVndInf[nAt,02] // ID Unico xItn03 := aVndInf[nAt,03] // Ref. Orçamento xItn04 := aVndInf[nAt,04] // Ref. NF-e xItn05 := aVndInf[nAt,05] // Ref. NFC-e xItn06 := aVndInf[nAt,06] // Ref. SAT xItn07 := FBToDate(aVndInf[nAt,07]) // Data venda xItn08 := aVndInf[nAt,08] // Hora venda xItn09 := FBToDate(aVndInf[nAt,09]) // Data entrega xItn10 := aVndInf[nAt,10] // Hora entrega xItn11 := aVndInf[nAt,11] // Cencelada? xItn12 := aVndInf[nAt,12] // Dt. cancelamento xItn13 := aVndInf[nAt,13] // Motivo cancelamento xItn14 := aVndInf[nAt,14] // CFOP 1º item xItn15 := aVndInf[nAt,15] // Cód. cliente xItn16 := aVndInf[nAt,16] // Nome cliente xItn17 := aVndInf[nAt,17] // Fantasia xItn18 := aVndInf[nAt,18] // End. CEP xItn19 := aVndInf[nAt,19] // End. Rua xItn20 := aVndInf[nAt,20] // End. número xItn21 := aVndInf[nAt,21] // End. bairro xItn22 := aVndInf[nAt,22] // End. cidade xItn23 := aVndInf[nAt,23] // Perímetro xItn24 := aVndInf[nAt,24] // Telefone xItn25 := aVndInf[nAt,25] // CPF/CNPJ xItn26 := aVndInf[nAt,26] // RG/IE xItn27 := FBToDate(aVndInf[nAt,27]) // Dt.Nascimento xItn28 := aVndInf[nAt,28] // Autorizado xItn29 := aVndInf[nAt,29] // Operação xItn30 := aVndInf[nAt,30] // Vlr. Itens xItn31 := aVndInf[nAt,31] // Desconto itens xItn32 := aVndInf[nAt,32] // Desconto final xItn33 := aVndInf[nAt,33] // Acréscimo % xItn34 := aVndInf[nAt,34] // Mão de obra R$ xItn35 := aVndInf[nAt,35] // Couvert R$ xItn36 := aVndInf[nAt,36] // Qt. pessoas xItn37 := aVndInf[nAt,37] // Valor pago xItn38 := aVndInf[nAt,38] // Meio Pg 01 xItn39 := aVndInf[nAt,39] // Meio Pg 02 xItn40 := aVndInf[nAt,40] // Meio Pg 03 xItn41 := aVndInf[nAt,41] // Meio Pg 04 xItn42 := aVndInf[nAt,42] // Meio Pg 05 xItn43 := aVndInf[nAt,43] // Meio Pg 06 xItn44 := aVndInf[nAt,44] // Meio Pg 07 xItn45 := aVndInf[nAt,45] // Meio Pg 08 xItn46 := aVndInf[nAt,46] // Meio Pg 09 xItn47 := aVndInf[nAt,47] // Meio Pg 10 xItn48 := aVndInf[nAt,48] // Meio Pg 11 xItn49 := aVndInf[nAt,49] // Inf. Pg. Cartão xItn50 := aVndInf[nAt,50] // Operador xItn51 := aVndInf[nAt,51] // Cód. vendedor xItn52 := aVndInf[nAt,52] // Nome vendedor xItn53 := aVndInf[nAt,53] // Cód. Vd. Rateio xItn54 := aVndInf[nAt,54] // Nome Vd. Rateio xItn55 := aVndInf[nAt,55] // Valor Rateio xItn56 := aVndInf[nAt,56] // Veículo - Inf. xItn57 := aVndInf[nAt,57] // Veículo - KM xItn58 := aVndInf[nAt,58] // Veículo - Modelo xItn59 := aVndInf[nAt,59] // Veículo - Placa xItn60 := aVndInf[nAt,60] // Venda futura? xItn61 := aVndInf[nAt,61] // Observações ENDIF n_Color := nRGB(192,217,217) DEFINE BRUSH oDlBru COLOR n_Color DEFINE FONT oDlFnt NAME "Arial Narrow" SIZE 0, -15 SysRefresh() DEFINE DIALOG oCadVnd RESOURCE "CAD_VENDA" TITLE "Consulta de venda online" TRANSPARENT BRUSH oDlBru oCadVnd:SetFont(oDlFnt) REDEFINE GET oCt03 VAR xItn03 ID 101 OF oCadVnd REDEFINE GET oCt04 VAR xItn04 PICTURE "9999999999" ID 102 OF oCadVnd REDEFINE GET oCt05 VAR xItn05 PICTURE "9999999999" ID 103 OF oCadVnd REDEFINE GET oCt06 VAR xItn06 ID 104 OF oCadVnd REDEFINE GET oCt07 VAR xItn07 ID 105 OF oCadVnd REDEFINE GET oCt08 VAR xItn08 ID 106 OF oCadVnd REDEFINE GET oCt09 VAR xItn09 ID 107 OF oCadVnd REDEFINE GET oCt10 VAR xItn10 ID 108 OF oCadVnd REDEFINE GET oCt11 VAR xItn11 ID 109 OF oCadVnd REDEFINE GET oCt12 VAR xItn12 ID 110 OF oCadVnd REDEFINE GET oCt13 VAR xItn13 ID 111 OF oCadVnd REDEFINE GET oCt14 VAR xItn14 PICTURE "@E 99999999.99" ID 112 OF oCadVnd REDEFINE GET oCt15 VAR xItn15 PICTURE "9999999999" ID 113 OF oCadVnd REDEFINE GET oCt16 VAR xItn16 ID 114 OF oCadVnd REDEFINE GET oCt17 VAR xItn17 ID 115 OF oCadVnd REDEFINE GET oCt18 VAR xItn18 ID 116 OF oCadVnd REDEFINE GET oCt19 VAR xItn19 ID 117 OF oCadVnd REDEFINE GET oCt20 VAR xItn20 ID 118 OF oCadVnd REDEFINE GET oCt21 VAR xItn21 ID 119 OF oCadVnd REDEFINE GET oCt22 VAR xItn22 ID 120 OF oCadVnd REDEFINE GET oCt23 VAR xItn23 ID 121 OF oCadVnd REDEFINE GET oCt24 VAR xItn24 ID 122 OF oCadVnd REDEFINE GET oCt25 VAR xItn25 ID 123 OF oCadVnd REDEFINE GET oCt26 VAR xItn26 ID 124 OF oCadVnd REDEFINE GET oCt27 VAR xItn27 ID 125 OF oCadVnd REDEFINE GET oCt28 VAR xItn28 ID 126 OF oCadVnd REDEFINE GET oCt29 VAR xItn29 ID 127 OF oCadVnd REDEFINE GET oCt30 VAR xItn30 PICTURE "@E 9999999999999.999" ID 128 OF oCadVnd REDEFINE GET oCt31 VAR xItn31 PICTURE "@E 99999999.99" ID 129 OF oCadVnd REDEFINE GET oCt32 VAR xItn32 PICTURE "@E 99999999.999" ID 130 OF oCadVnd REDEFINE GET oCt33 VAR xItn33 PICTURE "@E 9999.99" ID 131 OF oCadVnd REDEFINE GET oCt34 VAR xItn34 PICTURE "@E 99999999.99" ID 132 OF oCadVnd REDEFINE GET oCt35 VAR xItn35 PICTURE "@E 99999999.99" ID 133 OF oCadVnd REDEFINE GET oCt36 VAR xItn36 PICTURE "999" ID 134 OF oCadVnd REDEFINE GET oCt37 VAR xItn37 ID 135 OF oCadVnd REDEFINE GET oCt38 VAR xItn38 PICTURE "@E 99999999.999" ID 136 OF oCadVnd REDEFINE GET oCt39 VAR xItn39 PICTURE "@E 99999999.999" ID 137 OF oCadVnd REDEFINE GET oCt40 VAR xItn40 PICTURE "@E 99999999.999" ID 138 OF oCadVnd REDEFINE GET oCt41 VAR xItn41 PICTURE "@E 99999999.999" ID 139 OF oCadVnd REDEFINE GET oCt42 VAR xItn42 PICTURE "@E 99999999.999" ID 140 OF oCadVnd REDEFINE GET oCt43 VAR xItn43 PICTURE "@E 99999999.999" ID 141 OF oCadVnd REDEFINE GET oCt44 VAR xItn44 PICTURE "@E 99999999.999" ID 142 OF oCadVnd REDEFINE GET oCt45 VAR xItn45 PICTURE "@E 99999999.999" ID 143 OF oCadVnd REDEFINE GET oCt46 VAR xItn46 PICTURE "@E 99999999.999" ID 144 OF oCadVnd REDEFINE GET oCt47 VAR xItn47 PICTURE "@E 99999999.999" ID 145 OF oCadVnd REDEFINE GET oCt48 VAR xItn48 PICTURE "@E 99999999.99" ID 146 OF oCadVnd REDEFINE GET oCt49 VAR xItn49 ID 147 OF oCadVnd REDEFINE GET oCt50 VAR xItn50 ID 148 OF oCadVnd REDEFINE GET oCt51 VAR xItn51 PICTURE "999" ID 149 OF oCadVnd REDEFINE GET oCt52 VAR xItn52 ID 150 OF oCadVnd REDEFINE GET oCt53 VAR xItn53 PICTURE "999" ID 151 OF oCadVnd REDEFINE GET oCt54 VAR xItn54 ID 152 OF oCadVnd REDEFINE GET oCt55 VAR xItn55 PICTURE "@E 99999999.99" ID 153 OF oCadVnd REDEFINE GET oCt56 VAR xItn56 ID 154 OF oCadVnd REDEFINE GET oCt57 VAR xItn57 ID 155 OF oCadVnd REDEFINE GET oCt58 VAR xItn58 ID 156 OF oCadVnd REDEFINE GET oCt59 VAR xItn59 ID 157 OF oCadVnd REDEFINE GET oCt60 VAR xItn60 ID 158 OF oCadVnd REDEFINE GET oCt61 VAR xItn61 ID 159 OF oCadVnd REDEFINE SBUTTON oBt1 PROMPT "Salvar" ID 201 OF oCadVnd RESOURCE "BTYESOK" NOBORDER XP ACTION (lVndOk := .T., oCadVnd:End()) REDEFINE SBUTTON oBt2 PROMPT IIF(lIsNew,"Cancelar","Retornar") ID 202 OF oCadVnd RESOURCE IIF(lIsNew,"BTN_CAN","BTN_SAI") NOBORDER XP ACTION (lVndOk := .F., oCadVnd:End()) ACTIVATE DIALOG oCadVnd CENTERED DeleteObject(oDlFnt) DeleteObject(oDlBru) IF ! lVndOk ; RETURN NIL ; ENDIF IF lIsNew n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; RETURN NIL ; ENDIF xItn02 := GeraIdUnico() cQury := "INSERT INTO vendas_info "+; "(codigo, idunic, orcnum, nfenum, nfcnum, satnum, dtoper, horaop, dtentr, hoentr, opcanc, dtcanc, cancpq, cfoini, codcli, nomcli, fancli, ruacep, ruacli, ruanro, bairro, cidade, ruaper, fone01, doccpf, doc_rg, nascli, cliaut, operac, titens, descit, descfi, acresc, acres1, acres2, qtpess, vrpago, pgto01, pgto02, pgto03, pgto04, pgto05, pgto06, pgto07, pgto08, pgto09, pgto10, pgto11, cartao, operad, vddcod, vddnom, nvdrat, cvdrat, vlrrat, carinf, car_km, carmod, carpla, futura, observ)"+; " VALUES ("+; "(SELECT coalesce(MAX(codigo), 0)+1 AS ULTCOD FROM vendas_info), "+; "'"+xItn02+"', "+; "'"+ALLTRIM(xItn03)+"', "+; ALLTRIM(STR(xItn04))+", "+; ALLTRIM(STR(xItn05))+", "+; "'"+ALLTRIM(xItn06)+"', "+; "'"+SQLDTOC(xItn07)+"', "+; "'"+ALLTRIM(xItn08)+"', "+; "'"+SQLDTOC(xItn09)+"', "+; "'"+ALLTRIM(xItn10)+"', "+; IIF(!xItn11,"0","1")+", "+; "'"+ALLTRIM(xItn12)+"', "+; "'"+ALLTRIM(xItn13)+"', "+; ALLTRIM(STR(xItn14))+", "+; ALLTRIM(STR(xItn15))+", "+; "'"+ALLTRIM(xItn16)+"', "+; "'"+ALLTRIM(xItn17)+"', "+; "'"+ALLTRIM(xItn18)+"', "+; "'"+ALLTRIM(xItn19)+"', "+; "'"+ALLTRIM(xItn20)+"', "+; "'"+ALLTRIM(xItn21)+"', "+; "'"+ALLTRIM(xItn22)+"', "+; "'"+ALLTRIM(xItn23)+"', "+; "'"+ALLTRIM(xItn24)+"', "+; "'"+ALLTRIM(xItn25)+"', "+; "'"+ALLTRIM(xItn26)+"', "+; "'"+SQLDTOC(xItn27)+"', "+; "'"+ALLTRIM(xItn28)+"', "+; "'"+ALLTRIM(xItn29)+"', "+; ALLTRIM(STR(xItn30))+", "+; ALLTRIM(STR(xItn31))+", "+; ALLTRIM(STR(xItn32))+", "+; ALLTRIM(STR(xItn33))+", "+; ALLTRIM(STR(xItn34))+", "+; ALLTRIM(STR(xItn35))+", "+; ALLTRIM(STR(xItn36))+", "+; "'"+ALLTRIM(xItn37)+"', "+; ALLTRIM(STR(xItn38))+", "+; ALLTRIM(STR(xItn39))+", "+; ALLTRIM(STR(xItn40))+", "+; ALLTRIM(STR(xItn41))+", "+; ALLTRIM(STR(xItn42))+", "+; ALLTRIM(STR(xItn43))+", "+; ALLTRIM(STR(xItn44))+", "+; ALLTRIM(STR(xItn45))+", "+; ALLTRIM(STR(xItn46))+", "+; ALLTRIM(STR(xItn47))+", "+; ALLTRIM(STR(xItn48))+", "+; "'"+ALLTRIM(xItn49)+"', "+; "'"+ALLTRIM(xItn50)+"', "+; ALLTRIM(STR(xItn51))+", "+; "'"+ALLTRIM(xItn52)+"', "+; ALLTRIM(STR(xItn53))+", "+; "'"+ALLTRIM(xItn54)+"', "+; ALLTRIM(STR(xItn55))+", "+; "'"+ALLTRIM(xItn56)+"', "+; "'"+ALLTRIM(xItn57)+"', "+; "'"+ALLTRIM(xItn58)+"', "+; "'"+ALLTRIM(xItn59)+"', "+; IIF(!xItn60,"0","1")+", "+; "'"+ALLTRIM(xItn61)+"'"+")" TRY oSql := SR_GetConnection() nErr := oSql:Execute(cQury) oSql:Commit() cSeek := xItn02 // Usar ID Unico GetVndList(3,@cSeek,"",oXbVnd,oCadDlg,.F.,"Add") CATCH oErr SysRefresh(); MsgAlert("Erro ao tentar salvar os dados."+CRLF+CRLF+"Erro: "+oErr:Description,"Erro") END ELSE cQury := "UPDATE vendas_info SET"+; " idunic = '"+ALLTRIM(xItn02)+"',"+; " orcnum = '"+ALLTRIM(xItn03)+"',"+; " nfenum = "+ALLTRIM(STR(xItn04))+","+; " nfcnum = "+ALLTRIM(STR(xItn05))+","+; " satnum = '"+ALLTRIM(xItn06)+"',"+; " dtoper = '"+SQLDTOC(xItn07)+"',"+; " horaop = '"+ALLTRIM(xItn08)+"',"+; " dtentr = '"+SQLDTOC(xItn09)+"',"+; " hoentr = '"+ALLTRIM(xItn10)+"',"+; " opcanc = "+IIF(!xItn11,"0","1")+","+; " dtcanc = '"+ALLTRIM(xItn12)+"',"+; " cancpq = '"+ALLTRIM(xItn13)+"',"+; " cfoini = "+ALLTRIM(STR(xItn14))+","+; " codcli = "+ALLTRIM(STR(xItn15))+","+; " nomcli = '"+ALLTRIM(xItn16)+"',"+; " fancli = '"+ALLTRIM(xItn17)+"',"+; " ruacep = '"+ALLTRIM(xItn18)+"',"+; " ruacli = '"+ALLTRIM(xItn19)+"',"+; " ruanro = '"+ALLTRIM(xItn20)+"',"+; " bairro = '"+ALLTRIM(xItn21)+"',"+; " cidade = '"+ALLTRIM(xItn22)+"',"+; " ruaper = '"+ALLTRIM(xItn23)+"',"+; " fone01 = '"+ALLTRIM(xItn24)+"',"+; " doccpf = '"+ALLTRIM(xItn25)+"',"+; " doc_rg = '"+ALLTRIM(xItn26)+"',"+; " nascli = '"+SQLDTOC(xItn27)+"',"+; " cliaut = '"+ALLTRIM(xItn28)+"',"+; " operac = '"+ALLTRIM(xItn29)+"',"+; " titens = "+ALLTRIM(STR(xItn30))+","+; " descit = "+ALLTRIM(STR(xItn31))+","+; " descfi = "+ALLTRIM(STR(xItn32))+","+; " acresc = "+ALLTRIM(STR(xItn33))+","+; " acres1 = "+ALLTRIM(STR(xItn34))+","+; " acres2 = "+ALLTRIM(STR(xItn35))+","+; " qtpess = "+ALLTRIM(STR(xItn36))+","+; " vrpago = '"+ALLTRIM(xItn37)+"',"+; " pgto01 = "+ALLTRIM(STR(xItn38))+","+; " pgto02 = "+ALLTRIM(STR(xItn39))+","+; " pgto03 = "+ALLTRIM(STR(xItn40))+","+; " pgto04 = "+ALLTRIM(STR(xItn41))+","+; " pgto05 = "+ALLTRIM(STR(xItn42))+","+; " pgto06 = "+ALLTRIM(STR(xItn43))+","+; " pgto07 = "+ALLTRIM(STR(xItn44))+","+; " pgto08 = "+ALLTRIM(STR(xItn45))+","+; " pgto09 = "+ALLTRIM(STR(xItn46))+","+; " pgto10 = "+ALLTRIM(STR(xItn47))+","+; " pgto11 = "+ALLTRIM(STR(xItn48))+","+; " cartao = '"+ALLTRIM(xItn49)+"',"+; " operad = '"+ALLTRIM(xItn50)+"',"+; " vddcod = "+ALLTRIM(STR(xItn51))+","+; " vddnom = '"+ALLTRIM(xItn52)+"',"+; " nvdrat = "+ALLTRIM(STR(xItn53))+","+; " cvdrat = '"+ALLTRIM(xItn54)+"',"+; " vlrrat = "+ALLTRIM(STR(xItn55))+","+; " carinf = '"+ALLTRIM(xItn56)+"',"+; " car_km = '"+ALLTRIM(xItn57)+"',"+; " carmod = '"+ALLTRIM(xItn58)+"',"+; " carpla = '"+ALLTRIM(xItn59)+"',"+; " futura = "+IIF(!xItn60,"0","1")+","+; " observ = '"+ALLTRIM(xItn61)+"'"+; " WHERE codigo = "+ALLTRIM(STR(xItn01)) TRY n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; BREAK ; ENDIF oSql := SR_GetConnection() nErr := oSql:Execute(cQury) oSql:Commit() cSeek := xItn02 // Usar ID Unico GetVndList(3,@cSeek,"",oXbVnd,oCadDlg,.F.,"Upd") CATCH oErr SysRefresh() ; MsgAlert("Erro ao tentar salvar os dados."+CRLF+CRLF+"Erro: "+oErr:Description,"Erro") END ENDIF RETURN lVndOk STATIC FUNCTION DeleVnd(oXbVnd) LOCAL lSave := .F., nAt := oXbVnd:nArrayAt IF LEN(aVndInf) = 0 SysRefresh() ; MsgAlert("Favor selecionar um registro válido","Aviso") RETURN NIL ENDIF IF aVndInf[nAt,1] = 0 SysRefresh() ; MsgAlert("Favor selecionar um registro válido","Aviso") RETURN NIL ENDIF IF ! MsgNoYes("Confirma a exclusão do registro selecionado?", "Favor confirmar a exclusção!") RETURN NIL ENDIF TRY n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; BREAK ; ENDIF oSql := SR_GetConnection() nErr := oSql:Execute("DELETE FROM vendas_info WHERE codigo = "+ALLTRIM(STR(aVndInf[nAt,01]))) oSql:Commit() MyADel(aVndInf, nAt) oXbVnd:SetArray(aVndInf) oXbVnd:nArrayAt := nAt - 1 ; oXbVnd:Refresh() SysRefresh() ; MsgInfo("Registro excluído com êxito.", "Informação") CATCH oErr SysRefresh() ; MsgAlert("Erro ao tentar salvar os dados."+CRLF+CRLF+"Erro: "+oErr:Description,"Erro") END RETURN NIL STATIC FUNCTION GetVndList(nQue,cPesq,cUniq,oBrw,oCadDlg,lAvisa,cAcao) LOCAL aRcrds := {}, nRAt := 0 IF oBrw <> NIL ; nRAt := oBrw:nArrayAt ; ENDIF IF EMPTY(cPesq) ; RETURN .T. ; ENDIF n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; RETURN .F. ; ENDIF cQryTt := "" cWhere := "" cOrder := "" IF nQue < 4 cVndQry := "SELECT"+; " codigo,"+; // 01-Código " idunic,"+; // 02-ID Unico " orcnum,"+; // 03-Ref. Orçamento " nfenum,"+; // 04-Ref. NF-e " nfcnum,"+; // 05-Ref. NFC-e " satnum,"+; // 06-Ref. SAT " dtoper,"+; // 07-Data venda " horaop,"+; // 08-Hora venda " dtentr,"+; // 09-Data entrega " hoentr,"+; // 10-Hora entrega " opcanc,"+; // 11-Cencelada? " dtcanc,"+; // 12-Dt. cancelamento " cancpq,"+; // 13-Motivo cancelamento " cfoini,"+; // 14-CFOP 1º item " codcli,"+; // 15-Cód. cliente " nomcli,"+; // 16-Nome cliente " fancli,"+; // 17-Fantasia " ruacep,"+; // 18-End. CEP " ruacli,"+; // 19-End. Rua " ruanro,"+; // 20-End. número " bairro,"+; // 21-End. bairro " cidade,"+; // 22-End. cidade " ruaper,"+; // 23-Perímetro " fone01,"+; // 24-Telefone " doccpf,"+; // 25-CPF/CNPJ " doc_rg,"+; // 26-RG/IE " nascli,"+; // 27-Dt.Nascimento " cliaut,"+; // 28-Autorizado " operac,"+; // 29-Operação " titens,"+; // 30-Vlr. Itens " descit,"+; // 31-Desconto itens " descfi,"+; // 32-Desconto final " acresc,"+; // 33-Acréscimo % " acres1,"+; // 34-Mão de obra R$ " acres2,"+; // 35-Couvert R$ " qtpess,"+; // 36-Qt. pessoas " vrpago,"+; // 37-Valor pago " pgto01,"+; // 38-Meio Pg 01 " pgto02,"+; // 39-Meio Pg 02 " pgto03,"+; // 40-Meio Pg 03 " pgto04,"+; // 41-Meio Pg 04 " pgto05,"+; // 42-Meio Pg 05 " pgto06,"+; // 43-Meio Pg 06 " pgto07,"+; // 44-Meio Pg 07 " pgto08,"+; // 45-Meio Pg 08 " pgto09,"+; // 46-Meio Pg 09 " pgto10,"+; // 47-Meio Pg 10 " pgto11,"+; // 48-Meio Pg 11 " cartao,"+; // 49-Inf. Pg. Cartão " operad,"+; // 50-Operador " vddcod,"+; // 51-Cód. vendedor " vddnom,"+; // 52-Nome vendedor " nvdrat,"+; // 53-Cód. Vd. Rateio " cvdrat,"+; // 54-Nome Vd. Rateio " vlrrat,"+; // 55-Valor Rateio " carinf,"+; // 56-Veículo - Inf. " car_km,"+; // 57-Veículo - KM " carmod,"+; // 58-Veículo - Modelo " carpla,"+; // 59-Veículo - Placa " futura,"+; // 60-Venda futura? " observ"+; // 61-Observações " FROM vendas_info" cWhere := "" cOrder := "" IF nQue = 1 IF ALLTRIM(cPesq) == "*" cWhere := " WHERE codigo > 0" cOrder := " ORDER BY nomcli" ELSE IF ALLTRIM(cQPesq) = "Código venda" // "Nome cliente", "Fantasia", "CPF/CNPJ", "Nome vendedor", "Data venda", "Data entrega", "Código venda", "Cód. cliente", "Cód. vendedor" cWhere := " WHERE codigo = "+ALLTRIM(cPesq) cOrder := " ORDER BY codigo" ENDIF IF ALLTRIM(cQPesq) = "Data venda" cWhere := " WHERE dtoper = '"+SR_dtosdot(CTOD(cPesq))+"'" cOrder := " ORDER BY dtoper" ENDIF IF ALLTRIM(cQPesq) = "Data entrega" cWhere := " WHERE dtentr = '"+SR_dtosdot(CTOD(cPesq))+"'" cOrder := " ORDER BY dtentr" ENDIF IF ALLTRIM(cQPesq) = "Cód. cliente" cWhere := " WHERE codcli = "+ALLTRIM(cPesq) cOrder := " ORDER BY codcli" ENDIF IF ALLTRIM(cQPesq) = "Nome cliente" cWhere := " WHERE nomcli LIKE '%"+UPPER(ALLTRIM(cPesq))+"%'" cOrder := " ORDER BY nomcli" ENDIF IF ALLTRIM(cQPesq) = "Fantasia" cWhere := " WHERE fancli LIKE '%"+UPPER(ALLTRIM(cPesq))+"%'" cOrder := " ORDER BY fancli" ENDIF IF ALLTRIM(cQPesq) = "CPF/CNPJ" cWhere := " WHERE doccpf = '"+UPPER(ALLTRIM(cPesq))+"'" cOrder := " ORDER BY doccpf" ENDIF IF ALLTRIM(cQPesq) = "Cód. vendedor" cWhere := " WHERE vddcod = "+ALLTRIM(cPesq) cOrder := " ORDER BY vddcod" ENDIF IF ALLTRIM(cQPesq) = "Nome vendedor" cWhere := " WHERE vddnom LIKE '%"+UPPER(ALLTRIM(cPesq))+"%'" cOrder := " ORDER BY vddnom" ENDIF ENDIF ELSEIF nQue = 2 cWhere := " WHERE nomcli LIKE '"+ALLTRIM(cPesq)+"%'" cOrder := " ORDER BY nomcli" ELSEIF nQue = 3 cWhere := " WHERE idunic = '"+ALLTRIM(cPesq)+"'" cOrder := "" ELSE cWhere := " WHERE codigo > 0" cOrder := " ORDER BY nomcli" ENDIF IF nQue > 0 cLimit := " LIMIT "+ALLTRIM(STR(cVndSkp))+", 50" ELSE cLimit := " LIMIT 1" // Get only 1 record, to be cleaned. ENDIF cVndQry += cWhere + cOrder + cLimit cQryTt := "SELECT COUNT(*) FROM vendas_info" + cWhere ELSE IF cPesq = "+" IF (cVndSkp + 50) < cVndQrc cVndSkp += 50 ; cVndQpg ++ cVndQry := STRTRAN(cVndQry, "LIMIT "+ALLTRIM(STR(cVndLsk)), "LIMIT "+ALLTRIM(STR(cVndSkp))) cVndLsk := cVndSkp ELSE RETURN .T. ENDIF ENDIF IF cPesq = "-" IF (cVndSkp - 50) > -1 cVndSkp -= 50 ; cVndQpg -- cVndQry := STRTRAN(cVndQry, "LIMIT "+ALLTRIM(STR(cVndLsk)), "LIMIT "+ALLTRIM(STR(cVndSkp))) cVndLsk := cVndSkp ELSE RETURN .T. ENDIF ENDIF IF cPesq = ">" IF (cVndSkp + 50) < cVndQrc cVndSkp := (INT(cVndQrc/50)*50) ; cVndQpg := INT(cVndQrc/50)+IIF(MOD(cVndQrc,50) > 0, 1, 0) cVndQry := STRTRAN(cVndQry, "LIMIT "+ALLTRIM(STR(cVndLsk)), "LIMIT "+ALLTRIM(STR(cVndSkp))) cVndLsk := cVndSkp ELSE RETURN .T. ENDIF ENDIF IF cPesq = "<" IF (cVndSkp - 50) > -1 cVndSkp := 0 ; cVndQpg := 1 cVndQry := STRTRAN(cVndQry, "LIMIT "+ALLTRIM(STR(cVndLsk)), "LIMIT "+ALLTRIM(STR(cVndSkp))) cVndLsk := cVndSkp ELSE RETURN .T. ENDIF ENDIF ENDIF l_Err := .F. aVndInf := {} IF ! EMPTY(cQryTt) aTtRec := SQLArray(cQryTt, @l_Err) IF LEN(aTtRec) > 0 ; cVndQpg := 1; cVndQrc := aTtRec[1,1] ; ENDIF ENDIF l_Err := .F. aRcrds := SQLArray(cVndQry, @l_Err) IF LEN(aRcrds) = 0 IF oBrw <> NIL ; aVndInf := aVndNul ; oBrw:SetArray(aVndInf) ; oBrw:Refresh() ; ENDIF IF lAvisa ; SysRefresh() ; MsgAlert("Informação não encontrada", "Aviso") ; ENDIF ELSE if nQue = 0 // Pegar apenas registro em branco. aInfo := aRcrds[1] for nCl := 1 TO LEN(aInfo) xInv := aInfo[nCl] if ValType(xInv) = 'C' ; xInv := SPACE(LEN(xInv)) ; ENDIF if ValType(xInv) = 'M' ; xInv := SPACE(10) ; ENDIF if ValType(xInv) = 'N' ; xInv := 0 ; ENDIF if ValType(xInv) = 'D' ; xInv := CTOD(" ") ; ENDIF if ValType(xInv) = 'L' ; xInv := .F. ; ENDIF aRcrds[1,nCl] := xInv next aVndNul := aRcrds endif IF cAcao = "New" aVndInf := aRcrds ELSEIF cAcao = "Add" AADD(aVndInf, aRcrds[1]) ELSEIF cAcao = "Upd" aVndInf[nRAt] := aRcrds[1] ENDIF ENDIF cPesq := SPACE(50) cUniq := SPACE(15) IF oBrw <> NIL IF cAcao = "Add" .OR. cAcao = "New" oBrw:SetArray(aVndInf) oBrw:GoTop() ELSEIF cAcao = "Upd" oBrw:nArrayAt := nRAt ENDIF oBrw:Refresh() ENDIF if oCadDlg <> nil ; oCadDlg:Update() ; endif RETURN .F. FUNCTION OrdGetItms(nPedId, cUnqId) LOCAL a_Itens := {}, a_Array := {} IF nPedId = 0 AADD(a_Itens, {"", "", 0, 0.00, 0.00, 0.00, "", CTOD(" "), CTOD(" ")}) RETURN a_Itens ENDIF cItnsQry := "SELECT"+; " idumov,"+; // 01-ID unico mov " codmov,"+; // 02-Cód. movimento " idloja,"+; // 03-ID da loja " codprd,"+; // 04-Cód. produto " descri,"+; // 05-Descrição " medlin,"+; // 06-Med. linear " medidx,"+; // 07-Medida X " medidy,"+; // 08-Medida Y " quanti,"+; // 09-Quantidade " prcomp,"+; // 10-Preço compra " vrunit,"+; // 11-Pr. s/ desconto " prdesc,"+; // 12-Pr. c/ desconto " vrbrut,"+; // 13-Pr. Total " lotenr,"+; // 14-Nr. do lote " fabric,"+; // 15-Dt. fabricação " valida,"+; // 16-Dt. validade " tabpre"+; // 17-Tabela preço " FROM vendas_itens WHERE codmov = "+ALLTRIM(str(nPedId))+" AND idumov = '"+cUnqId+"'" l_Err := .F. a_Array := SQLArray(cItnsQry, @l_Err) IF LEN(a_Array) = 0 AADD(a_Itens, {"", "", 0, 0.00, 0.00, 0.00, "", CTOD(" "), CTOD(" ")}) ELSE FOR nItn := 1 TO LEN(a_Array) AADD(a_Itens, {a_Array[nItn,04],; // 01-Código do produto a_Array[nItn,05],; // 02-Descrição a_Array[nItn,09],; // 03-Quantidade a_Array[nItn,11],; // 04-Preço sem desconto a_Array[nItn,12],; // 05-Preço com desconto a_Array[nItn,13],; // 06-Valor total do item a_Array[nItn,14],; // 07-Nr. do lote a_Array[nItn,15],; // 08-Data de fabricação a_Array[nItn,16]}) // 09-Data de validade NEXT ENDIF RETURN a_Itens STATIC FUNCTION ImprVnd(oXbVnd) LOCAL lConf:=.F., l_Err := .F., aVdInfo := {} n_Conn := nConection(.F., .F.) IF n_Conn <= 0 ; RETURN .F. ; ENDIF aLojas := {} SqlArr := "SELECT "+; "NICK01, "+; // 01-Nome da Loja 1 "NICK02, "+; // 02-Nome da Loja 2 "NICK03, "+; // 03-Nome da Loja 3 "NICK04, "+; // 04-Nome da Loja 4 "NICK05, "+; // 05-Nome da Loja 5 "NICK06, "+; // 06-Nome da Loja 6 "NICK07, "+; // 07-Nome da Loja 7 "NICK08, "+; // 08-Nome da Loja 8 "NICK09, "+; // 09-Nome da Loja 9 "NICK10, "+; // 10-Nome da Loja 10 "USAR01, "+; // 11-Usar a Loja 1 no relatório "USAR02, "+; // 12-Usar a Loja 2 no relatório "USAR03, "+; // 13-Usar a Loja 3 no relatório "USAR04, "+; // 14-Usar a Loja 4 no relatório "USAR05, "+; // 15-Usar a Loja 5 no relatório "USAR06, "+; // 16-Usar a Loja 6 no relatório "USAR07, "+; // 17-Usar a Loja 7 no relatório "USAR08, "+; // 18-Usar a Loja 8 no relatório "USAR09, "+; // 19-Usar a Loja 9 no relatório "USAR10 "+; // 20-Usar a Loja 10 no relatório "FROM config_bd LIMIT 0, 1" aLojas := SQLArray(SqlArr) aTrnTo := {{0,""}} IF LEN(aLojas) > 0 IF aLojas[1,11] ; AADD(aTrnTo, {01, aLojas[1,01]}) ; ENDIF IF aLojas[1,12] ; AADD(aTrnTo, {02, aLojas[1,02]}) ; ENDIF IF aLojas[1,13] ; AADD(aTrnTo, {03, aLojas[1,03]}) ; ENDIF IF aLojas[1,14] ; AADD(aTrnTo, {04, aLojas[1,04]}) ; ENDIF IF aLojas[1,15] ; AADD(aTrnTo, {05, aLojas[1,05]}) ; ENDIF IF aLojas[1,16] ; AADD(aTrnTo, {06, aLojas[1,06]}) ; ENDIF IF aLojas[1,17] ; AADD(aTrnTo, {07, aLojas[1,07]}) ; ENDIF IF aLojas[1,18] ; AADD(aTrnTo, {08, aLojas[1,08]}) ; ENDIF IF aLojas[1,19] ; AADD(aTrnTo, {09, aLojas[1,09]}) ; ENDIF IF aLojas[1,20] ; AADD(aTrnTo, {10, aLojas[1,10]}) ; ENDIF ENDIF dIni := CTOD("01"+SUBSTR(DTOC(DATE()),3,8)) dFim := DATE() nCli := SPACE(14) cCli := "" nVdd := SPACE(3) cVdd := "" cLoja := "" DEFINE DIALOG oDRvd RESOURCE "REL_VENDAS" REDEFINE GET oCt41 VAR dIni ID 41 OF oDRvd BITMAP ".\figuras\editar.bmp" ACTION RMMDT(oCt41, @dIni) REDEFINE GET oCt42 VAR dFim ID 42 OF oDRvd BITMAP ".\figuras\editar.bmp" ACTION RMMDT(oCt41, @dFim) REDEFINE GET oCt43 VAR nCli PICTURE "99999999999999" ID 43 OF oDRvd UPDATE VALID ObterClie(@nCli, @cCli, oDRvd) REDEFINE GET oCt44 VAR cCli ID 44 OF oDRvd MEMO UPDATE REDEFINE GET oCt45 VAR nVdd PICTURE "999" ID 45 OF oDRvd UPDATE VALID SeekOper(@nVdd, @cVdd, oDRvd) REDEFINE GET oCt46 VAR cVdd ID 46 OF oDRvd MEMO READONLY UPDATE REDEFINE COMBOBOX oId47 VAR cLoja ITEMS ArrTranspose(aTrnTo)[2] ID 47 OF oDRvd REDEFINE SBUTTON oSb31 PROMPT "Confirmar" ID 31 OF oDRvd RESOURCE "btn_prt" NOBORDER XP ACTION (lConf := .T., oDRvd:End()) REDEFINE SBUTTON oSb32 PROMPT "Cancelar" ID 32 OF oDRvd RESOURCE "btn_ret" NOBORDER XP ACTION (lConf := .F., oDRvd:End()) ACTIVATE DIALOG oDRvd CENTERED if ! lConf ; RETURN NIL ; ENDIF IF (EMPTY(dIni) .OR. EMPTY(dFim)) .OR. (dIni > dFim) SysRefresh() ; MsgAlert("Período incorreto", "Aviso") RETURN NIL ENDIF cTitlo := "PERÍODO: "+DTOC(dIni)+" A "+DTOC(dFim) cWhere := "vendas_info.DTOPER >= '"+SR_dtosdot(dIni)+"' AND vendas_info.DTOPER <= '"+SR_dtosdot(dFim)+"'" IF VAL(nCli) > 0 IF ! EMPTY(cWhere) ; cWhere += " AND " ; ENDIF cWhere += "vendas_info.DOCCPF = '"+ALLTRIM(nCli)+"'" IF ! EMPTY(cTitlo) ; cTitlo += "; " ; ENDIF cTitlo += "CLIENTE: "+ALLTRIM(cCli) ELSE IF !EMPTY(cCli) IF ! EMPTY(cWhere) ; cWhere += " AND " ; ENDIF cWhere += "vendas_info.NOMCLI LIKE '%"+ALLTRIM(cCli)+"%'" IF ! EMPTY(cTitlo) ; cTitlo += "; " ; ENDIF cTitlo += "CLIENTE: "+ALLTRIM(cCli) ENDIF ENDIF IF VAL(nVdd) > 0 IF ! EMPTY(cWhere) ; cWhere += " AND " ; ENDIF cWhere += "vendas_info.VDDCOD = "+ALLTRIM(nVdd) IF ! EMPTY(cTitlo) ; cTitlo += "; " ; ENDIF cTitlo += "VENDEDOR: "+ALLTRIM(cVdd) ENDIF IF !EMPTY(cLoja) nScn := ASCAN(aTrnTo, {|CEL|CEL[2]=cLoja}) nLoj := IIF(nScn > 0, aTrnTo[nScn,1], 0) IF nLoj > 0 IF ! EMPTY(cWhere) ; cWhere += " AND " ; ENDIF cWhere += "vendas_info.IDLOJA = "+ALLTRIM(STR(nLoj)) IF ! EMPTY(cTitlo) ; cTitlo += "; " ; ENDIF cTitlo += "LJ: "+ALLTRIM(cLoja) ENDIF ENDIF SqlArr := "SELECT vendas_info.CODIGO, "+; // 01 - VND-Código do Movimento / Comanda / Mesa "vendas_info.IDUNIC, "+; // 02 - VND-ID único (Salvo em vendas, itens e contas relacionadas) "vendas_info.IDLOJA, "+; // 03 - VND-ID da loja "vendas_info.ORCNUM, "+; // 04 - VND-Número Orçamento / Comanda / Espera - Convertida para venda "vendas_info.NFENUM, "+; // 05 - VND-Nº da NF ou NF-e (NFC-e fica no ITEM99) "vendas_info.NFCNUM, "+; // 06 - VND-Número da NFC-e (NF-e no ITEM55, CF/CFE no ITEM19) "vendas_info.SATNUM, "+; // 07 - VND-Número do CFE/MFE/COO (SAT@MFE / ECF) "vendas_info.OPERAC, "+; // 08 - VND-Tipo de movimento (VENDA A VISTA / VENDA A PRAZO) "vendas_info.CODCLI, "+; // 09 - VND-Código do cliente "vendas_info.NOMCLI, "+; // 10 - VND-Nome do cliente / Razão social "vendas_info.FANCLI, "+; // 11 - VND-Nome de Fantasia "vendas_info.RUACEP, "+; // 12 - VND-CEP do cliente "vendas_info.RUACLI, "+; // 13 - VND-Endereço "vendas_info.RUANRO, "+; // 14 - VND-Nº de endereço do cliente "vendas_info.BAIRRO, "+; // 15 - VND-Bairro "vendas_info.CIDADE, "+; // 16 - VND-Cidade-UF "vendas_info.RUAPER, "+; // 17 - VND-Perímetro do endereço do cliente "vendas_info.FONE01, "+; // 18 - VND-Telefone "vendas_info.DOCCPF, "+; // 19 - VND-CPF/CNPJ "vendas_info.DOC_RG, "+; // 20 - VND-RG/IE "vendas_info.DTOPER, "+; // 21 - VND-Data da venda "vendas_info.HORAOP, "+; // 22 - VND-Hora da venda "vendas_info.TITENS, "+; // 23 - VND-Valor total dos itens. O tamanho na NF-e é 15,2 "vendas_info.DESCIT, "+; // 24 - VND-Total descontos só nos itens - P/Controle de pontuação. "vendas_info.DESCFI, "+; // 25 - VND-Descontos (apenas os concedidos no fechamento) "vendas_info.ACRESC, "+; // 26 - VND-Acréscimo % "vendas_info.ACRES1, "+; // 27 - VND-Valor Mão-de-obra / Serviço / Couvert artístico "vendas_info.ACRES2, "+; // 28 - VND-Valor do Couvert por pessoa (Restaurante) (ITEN - com N mesmo - evitar conflito com DBF antigo). "vendas_info.QTPESS, "+; // 29 - VND-Quantidade de pessoas (Couvert é cobrado individualmente - multiplicar) "vendas_info.VRPAGO, "+; // 30 - VND-Valor pago Em dinheiro, sem tirar o troco, c/ 3 decimais "vendas_info.PGTO01, "+; // 31 - VND-Forma de pgto 1 - Dinheiro "vendas_info.PGTO02, "+; // 32 - VND-Forma de pgto 2 - Cheque 1 "vendas_info.PGTO03, "+; // 33 - VND-Forma de pgto 3 - Cheque 2 "vendas_info.PGTO04, "+; // 34 - VND-Forma de pgto 4 - Cartão 1 "vendas_info.PGTO05, "+; // 35 - VND-Forma de pgto 5 - Cartão 2 "vendas_info.PGTO06, "+; // 36 - VND-Forma de pgto 6 - Cartão 3 "vendas_info.PGTO07, "+; // 37 - VND-Forma de pgto 7 - Cartão 4 "vendas_info.PGTO08, "+; // 38 - VND-Forma de pgto 8 - Outros 1 "vendas_info.PGTO09, "+; // 39 - VND-Forma de pgto 9 - Outros 2 "vendas_info.PGTO10, "+; // 40 - VND-Forma de pgto 10- Outros 3 "vendas_info.PGTO11, "+; // 41 - VND-Forma de pgto 11- Carta de crédito "vendas_info.CARTAO, "+; // 42 - VND-Parcelas/Bandeiras dos cartões crédito: Ex: 111222333444|B1|B2|B3|B4 (onde 111=Cartão 1 em NNN vezes|B1=Bandeira do cartão 1) "vendas_info.OPERAD, "+; // 43 - VND-Operador/Caixa/Lubrificador/Montador [000CCCCCCCCCCC...] "vendas_info.VDDCOD, "+; // 44 - VND-Código do vendedor "vendas_info.VDDNOM, "+; // 45 - VND-Nome do vendedor "vendas_info.CARINF, "+; // 46 - VND-Anotações sobre o carro "vendas_info.CAR_KM, "+; // 47 - VND-A=Km atual, R=A rodar, T=Km p/ troca. [AAAAAAAAAARRRRRRRRRRTTTTTTTTTT] "vendas_info.CARMOD, "+; // 48 - VND-Veículo do cliente "vendas_info.CARPLA, "+; // 49 - VND-Placa do veículo do cliente "vendas_info.OBSERV, "+; // 50 - VND-Observação. Ex: RECEBER NA ENTREGA "vendas_itens.IDUMOV, "+; // 51 - ITN-ID único do movimento "vendas_itens.CODMOV, "+; // 52 - ITN-Código do movimento "vendas_itens.CODPRD, "+; // 53 - ITN-Código do produto "vendas_itens.DESCRI, "+; // 54 - ITN-Descrição do produto "vendas_itens.MEDLIN, "+; // 55 - ITN-Medida por metragem linear? >> ((Metros * Pr.Metro)*Qtd) = Total "vendas_itens.MEDIDX, "+; // 56 - ITN-Medida X / Metros "vendas_itens.MEDIDY, "+; // 57 - ITN-Medida Y / Pr.Metro "vendas_itens.QUANTI, "+; // 58 - ITN-Quantidade "vendas_itens.PRCOMP, "+; // 59 - ITN-Preço de compra "vendas_itens.VRUNIT, "+; // 60 - ITN-Preço sem desconto - Compatível com NF-e 2.0 "vendas_itens.PRDESC, "+; // 61 - ITN-Preço com desconto - Compatível com NF-e 2.0 "vendas_itens.VRBRUT, "+; // 62 - ITN-Total com desconto. O tamanho na NF-e é 15,2 "vendas_itens.LOTENR, "+; // 63 - ITN-Número do lote "vendas_itens.FABRIC, "+; // 64 - ITN-Fabricação "vendas_itens.VALIDA, "+; // 65 - ITN-Validade "vendas_itens.TABPRE" +; // 66 - ITN-Tabela utilizada " FROM vendas_itens"+; " LEFT JOIN vendas_info ON vendas_itens.IDUMOV=vendas_info.IDUNIC"+; // Undestanding JOINs: http://www.sitepoint.com/understanding-sql-joins-mysql-database/ " WHERE ("+cWhere+")"+; // WHERE clause mas be placed ahead of JOIN. " ORDER BY vendas_info.IDUNIC" aVdInfo := SQLArray(SqlArr, @l_Err) * XBrowse(aVdInfo, "Movimentos obtidos") IF LEN(aVdInfo) = 0 SysRefresh() ; MsgAlert("Sem movimentação no período requisitado.", "Aviso") RETURN NIL ENDIF PRINTER oPrn TO SelectedPrn() NAME "Movimentos" PREVIEW oPrn:SetPortrait() DEFINE FONT oFont NAME "Courier New" SIZE 0, -8 OF oPrn DEFINE FONT oFon1 NAME "Arial Narrow" SIZE 0, -10 OF oPrn DEFINE FONT oFon2 NAME "Arial" SIZE 0, -14 OF oPrn BOLD DEFINE FONT oFon3 NAME "Arial" SIZE 0, -12 OF oPrn DEFINE FONT oFon4 NAME "Arial Narrow" SIZE 0, -8 OF oPrn BOLD DEFINE PEN oPen COLOR CLR_BLACK WIDTH (oFont:nHeight/10) nRow := 03 nPag := 01 mLarg := oFont:nHeight nTab := oPrn:nHorzRes() / 20 nSpc := (oPrn:nHorzRes()-(2*nTab)) / 90 nCls := {nTab+(nSpc*00),; // 1Cód Movimento nTab+(nSpc*10),; // 2-Cliente nTab+(nSpc*48),; // 3-Valor nTab+(nSpc*56),; // 4-Desconto nTab+(nSpc*64),; // 5-Liquido nTab+(nSpc*66),; // 6-Vendedor/Operador nTab+(nSpc*80),; // 7-F.Pg nTab+(nSpc*90) } // 8-Data oPrn:StartPage() oPrn:Box(03*mLarg, nTab, 11*mLarg, oPrn:nHorzRes()-nTab, oPen ) oPrn:SayBitmap((4 * mLarg ), nTab+nSpc, ".\figuras\logomarc.bmp", 28*nSpc, 6*mLarg) nRow := 4 oPrn:Say(nRow*mLarg, nTab+(nSpc*30), "RAZÃO SOCIAL DA EMPRESA", oFon2 ) nRow+=2 oPrn:Say(nRow*mLarg, nTab+(nSpc*30), "ENDEREÇO DO ESTABELECIMENTO, N. 0 - BAIRRO", oFont ) nRow++ oPrn:Say(nRow*mLarg, nTab+(nSpc*30), "CIDADE - UF", oFont ) oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-(1.2*nTab), DTOC(DATE()), oFont,,,,1) nRow++ oPrn:Say(nRow*mLarg, nTab+(nSpc*30), "TELEFONE", oFont ) oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-(1.2*nTab), LEFT(TIME(),5)+"h", oFont,,,,1) nRow += 4 oPrn:Say(nRow*mLarg, nTab+(nSpc*45), "RELATÓRIO DE VENDAS - "+cTitlo, oFon4,,,,2) nRow++ cIdUnq := aVdInfo[1,2] nItnVd := 1 nTotVd := 0 FOR nVn := 1 TO LEN(aVdInfo) IF cIdUnq <> aVdInfo[nVn,2] // Já é outra venda cIdUnq := aVdInfo[nVn,2] nItnVd := 1 ENDIF IF nItnVd = 1 // Primeiro item da venda. Informações gerais. // Definir a principal forma de pagamento cFpg := "" IF aVdInfo[nVn,31] > 0 ; cFpg := "DIN" ; ENDIF // 1-Dinheiro IF aVdInfo[nVn,32] > 0 ; cFpg := "CHE" ; ENDIF // 2-Cheque IF aVdInfo[nVn,33] > 0 ; cFpg := "PRE" ; ENDIF // 3-Cheque pre IF aVdInfo[nVn,34] > 0 ; cFpg := "CRD" ; ENDIF // 4-Crd 1 IF aVdInfo[nVn,35] > 0 ; cFpg := "CRD" ; ENDIF // 5-Crd 2 IF aVdInfo[nVn,36] > 0 ; cFpg := "CRD" ; ENDIF // 6-Crd 3 IF aVdInfo[nVn,37] > 0 ; cFpg := "CRD" ; ENDIF // 7-Crd 4 IF aVdInfo[nVn,38] > 0 ; cFpg := "DEP" ; ENDIF // 8-Outros IF aVdInfo[nVn,39] > 0 ; cFpg := "CON" ; ENDIF // 9-Outros IF aVdInfo[nVn,40] > 0 ; cFpg := "OUT" ; ENDIF // 10-Outros // Imprimir informações gerais da venda FOR Y := 0 TO 89 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow++ oPrn:Say(nRow*mLarg, nCls[1], "COD.MOV.", oFon4 ) oPrn:Say(nRow*mLarg, nCls[2], "CLIENTE", oFon4 ) oPrn:Say(nRow*mLarg, nCls[3], "VALOR", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[4], "DESC.", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[5], "LIQUIDO", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[6], "VENDEDOR", oFon4) oPrn:Say(nRow*mLarg, nCls[7], "F.PG", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[8], "DATA", oFon4,,,,1) nRow++ oPrn:Say(nRow*mLarg, nCls[1], ALLTRIM(STR(aVdInfo[nVn,1])), oFon4 ) oPrn:Say(nRow*mLarg, nCls[2], ALLTRIM(STR(aVdInfo[nVn,9]))+"-"+ALLTRIM(aVdInfo[nVn,10]), oFon4 ) oPrn:Say(nRow*mLarg, nCls[3], ALLTRIM(TRANS(aVdInfo[nVn,23], "@E 999,999,999.9999")), oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[4], ALLTRIM(TRANS(aVdInfo[nVn,25], "@E 999,999,999.99")), oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[5], ALLTRIM(TRANS(aVdInfo[nVn,23]-aVdInfo[nVn,25], "@E 999,999,999,999.99")), oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[6], ALLTRIM(STR(aVdInfo[nVn,44]))+"-"+ALLTRIM(aVdInfo[nVn,45]), oFon4 ) oPrn:Say(nRow*mLarg, nCls[7], cFpg, oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[8], DTOC(aVdInfo[nVn,21])+" "+aVdInfo[nVn,22] , oFon4,,,,1) nTotVd += (aVdInfo[nVn,23]-aVdInfo[nVn,25]) nRow += 1.5 oPrn:Say(nRow*mLarg, nCls[1], "PRODUTO", oFon4 ) oPrn:Say(nRow*mLarg, nCls[2], "DESCRIÇÃO", oFon4 ) oPrn:Say(nRow*mLarg, nCls[3], "QTD", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[4], "P.UNIT", oFon4,,,,1) oPrn:Say(nRow*mLarg, nCls[5], "TOTAL", oFon4,,,,1) nScn := ASCAN(aTrnTo, {|CEL|CEL[1]=aVdInfo[nVn,3]}) IF nScn > 0 oPrn:Say(nRow*mLarg, nCls[8], "LJ: "+ALLTRIM(aTrnTo[nScn,2]), oFon4,,,,1) ENDIF nRow++ ENDIF // Imprimir itens da venda oPrn:Say(nRow*mLarg, nCls[1], ALLTRIM(STR(VAL(aVdInfo[nVn,53]))), oFon1 ) oPrn:Say(nRow*mLarg, nCls[2], aVdInfo[nVn,54], oFon1 ) oPrn:Say(nRow*mLarg, nCls[3], ALLTRIM(TRANS(aVdInfo[nVn,58], IIF(INT(aVdInfo[nVn,58]) <> aVdInfo[nVn,58], "@E 999,999,999.999", "999999999"))), oFon1,,,,1) oPrn:Say(nRow*mLarg, nCls[4], ALLTRIM(TRANS(aVdInfo[nVn,61], "@E 999,999,999.9999")), oFon1,,,,1) oPrn:Say(nRow*mLarg, nCls[5], ALLTRIM(TRANS(aVdInfo[nVn,62], "@E 999,999,999,999.99")), oFon1,,,,1) nRow++ IF (nRow*mLarg) >= ( oPrn:nVertRes()-(10*mLarg) ) oPrn:Say(oPrn:nVertRes()-(4*mLarg), nTab+(nSpc*45), "PAGINA: "+ALLTRIM(STR(nPag)), oFont,,,,2) oPrn:EndPage() oPrn:StartPage() nPag ++ nRow := 3 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oPen ) oPrn:Say(nRow*mLarg, nTab+(nSpc*45), "RELATÓRIO DE VENDAS", oFon3,,,,2) nRow += 2 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oPen ) nRow++ ENDIF nItnVd ++ NEXT nRow += 1.25 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oPen ) nRow += 0.25 oPrn:Say(nRow*mLarg, nCls[3], "VALOR TOTAL DAS VENDAS:", oFon2,,,,1) oPrn:Say(nRow*mLarg, nCls[5], ALLTRIM(TRANS(nTotVd, "@E 999,999,999,999.99")), oFon2,,,,1) oPrn:EndPage() oPrn:Preview() RELEASE FONT oFont, oFon1, oFon2, oFon3, oFon4 RETURN NIL Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted April 12, 2021 Report Share Posted April 12, 2021 2 horas atrás, sunset disse: MYSQL 5.7 Na verdade eu estou abrindo a tabela como se fosse um DBF ainda use estadual alias estad new shared if neterr() msginfo("Arquivo está em uso em modo exclusivo","Informação") close data retu endif set index to estadual e usando o ALIS no xbrwse @ 0,0 XBROWSE oLbxEstadual ; Fields Iif(len(alltrim(estad->numecgc)) = 11,TRANSFORM(estad->numecgc,"@R 999.999.999-99"),TRANSFORM(estad->numecgc,"@R 99.999.999/9999-99")),; estad->nomecli ,; estad->inscest ,; estad->siticms ,; estad->cida_de ,; estad->esta_do ,; estad->correio ,; estad->telefon ; Headers "Cnpj" ,; "Nome" ,; "Inscrição" ,; "Situação" ,; "Cidade" ,; "UF" ,; "Correio" ,; "Telefone" ; Fieldsizes 170,400,90,100,200,25,400,150; Alias "estad" ; Mas acredito que desta forma não vou ter resultado, vou executar um SELECT conforme indicado teria que colocar o resultado num array ? Você pode usar as funções, Sr_SetFilter(cSql) Sr_DbRefresh() DbGoto() O comando cSql equivale cláusula Where do comando nativo SQL, dbsetorder(n) vai ser usado na na cláusula ORDER BY (só por curiosidade). Você acrescentando estas linhas antes do xbrowse, não haverá a necessidade de carregar um array. Se na sua tela tiver a opção GET, vc vai executando as funções que farão o filtro deixando cada vez mais rápido a exibição do dados... Quote Link to comment Share on other sites More sharing options...
oliveiros Posted April 14, 2021 Report Share Posted April 14, 2021 Olá Kapiaba, Com o SetFilter o objetivo é reduzir o número de registros apresentados. Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
sunset Posted April 17, 2021 Author Report Share Posted April 17, 2021 Bom dia e bom sábado a todos. Usei a sugestão do FILTER mesmo, usei o sr_recno filtrando ate 2 milhões de registro que ficou um tempo "usável" de carregamento da tela e da manipulação no xBrowse, quando o usuário precisar pesquisar algum registro, nome, cnpj e etc... então antes do Seek, estou FILTRANDO o banco "todo" com os 46 milhões de registro, exibo o conteúdo e após volto a filtro para 2 milhões de registros, se não fizer isso o xbrowse tenta carregar toda tabela novamente e só vai liberar 20 minutos depois a tela. Agora usando o banco de dados aberto normal "sem exibição", funciona sem problemas, esta base estou usando para cadastrar clientes e fornecedores com CNPJ, na ficha do cliente quando digitar o CNPJ ele ja captura todos os dados, funciona sem problemas, rapido e etc... posteriormente vou montar um pequeno WS ou deixar numa base online para consultas via mySQL tambem, porem como o banco tem 29 GB não consigo colocar em nenhum site que não va ter um custo alto. Grato a todos pelas dicas. 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.