Jump to content
Fivewin Brasil

Wellington Vieira

Membros
  • Posts

    424
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by Wellington Vieira

  1. A quem quiser... Abaixo postei um exemplo completo de uso da contrib pgsql, com o POSTGRESQL,, com exemplo.. prg,, *.bat,, e um arquivo de texto LEIA-ME.TXT ( com instruções detalhadas do processo) valeu.... http://www.fivewin.com.br/exibedicas.asp?id=916 '> http://www.fivewin.com.br/exibedicas.asp?id=916 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  2. Marcelo,, Pode ser assim também,, funciona comigo...aqui... if GetKeyState(VK_RETURN) && ultima tecla press. ENTER __Keyboard( Chr( VK_TAB ) ) && SIMULA UMA TECLA... endif id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  3. Na função pr_ficha(),, tem um comando produtos:end()antes do return nil,, este deve ser desconsiderado,, pois esta como teste e esqueci de tirar do codigo fonte.. ok... obrigado.... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  4. Boa tarde ... Na função e4010000(), há um botão que chama a impressão com preview,,(IMPRIMIR)-> que chama a função pr_ficha().O que acontece é que quando fecho o preview, a dialog que chamou o preview e fechada (e4010000()) e o sistema cai.. na windows ( principal),, ou seja todo o sistema cai, o que poderá estar ocorrendo... Será que é porque o preview trabalha com base DBF.. e estou trabalhando com POSTGRESQL... Alguem pode me ajudar... function e4010000(objet) wobjet = objet && qdo igual a 1 e da nectarina.. private SalvaVar := "A" private otim, oLbx private oimage, ocnco if wobjet = 1 if empty(mafdu) msgstop("Coloque o filtro de colecao no cadastro de empresa.","ATENCAO..") return .t. endif endif nn = 1 define brush obrush color rgb(255,239,214) define dialog produtos title "Produtos" from 010,010 to 500,795 pixel brush oBrush //transparent define font mtahoma name "Tahoma" size 5.5,13 define font mtahoma1 name "Tahoma" size 08,22 define font oFont name 'MS Sans Serif' size 6,15 define font ofontL name "Courier" size 11,11 if wobjet = 1 @ 0,0 FOLDER oFld OF produtos prompt "&1.Produto", "&2. Custos", "&3. Tributos","&4. Outros","&5. Ficha Tecnica","&6. Imagem do produto"; DIALOGS "Pageprod","Pagecustos","Pagetribuit","Pageoutros","PageFicha","PageImage"; TABCOLOR CLR_BlCK; FOCUSCOLOR CLR_BLUE; size 348, 245; COLORS mcolorAA, mcolorAB; ADJUST oFld:SetOption(1) oFld:aEnable := { .T., .T., .T.,.T.,.T.,.T.} //-> Inibe as Orelhas(Abas) oFld:Show() oFld:lWin95Look := .T. //-> Modifica o Estilo da Orelha. else @ 0,0 FOLDER oFld OF produtos prompt "&1.Produto", "&2. Custos", "&3. Tributos","&4. Outros"; DIALOGS "Pageprod","Pagecustos","Pagetribuit","Pageoutros"; TABCOLOR CLR_BlCK; FOCUSCOLOR CLR_BLUE; size 348, 245; COLORS mcolorAA, mcolorAB; ADJUST oFld:SetOption(1) oFld:aEnable := { .T., .T., .T.,.T.} //-> Inibe as Orelhas(Abas) oFld:Show() oFld:lWin95Look := .T. //-> Modifica o Estilo da Orelha. endif mbcdg = space(06) && c¢digo mbcap = 0 mbcdb = space(14) && c¢digo de barras mbmrc = space(20) && marca mbprd = space(50) && descri‡Æo do produto mbabv = space(25) && abreviatura mbdpt = 0 && departamento (smallint) nddpt = space(50) && descricao do departamento.. ( get na tela..) mbgrp = 0 && Grupo (smallint) ndgrp = space(50) && descricao do grupo.. ( get na tela..) mbsgp = 0 && Sub-Grupo (smallint) ndsgp = space(50) && descricao do sub-grupo... ( get na tela..) mccdc = 0 && codigo da cor. mcnco = space(30) && nome da cor. mtcdt = 0 && codigo do tamanho. mtdta = space(06) && descricao. ( G,GG,XG,P,M,) mtnta = space(03) && numeracao do tamanho.. 33,34,35,36. mcabc = "C" && classificacao ABC ( settext...) mbtpp = 1 && tipo de produto "1-Produto","2-Serviço","3-Consumo","4-Matéria Prima" nbtpp = "Produto" abtpp = {"Produto","Serviço","Consumo","Matéria Prima","Bens"} && somente array.. mbtbl = .f. && item de tabela.. mbdec = .f. && fracao.. mcmvt = .t. && movimentacao automatica.. mcctb = 0 && custo contabil.. ( settext..) mccmd = 0 && custo medio.. ( settext..) mcmgl = 0 && Margem de lucro real % mmgln = 0 && Margem normal ( get ) calculado na tela.. mcdmx = 0 && desconto maximo.. mcpv1 = 0 && preco de venda.. mcpv2 = 0 && outro preco de venda.. mcest = 0 && estoque ( settext )... mcqls = 0 && lote de saida.. ( settext ).. mcqlc = 0 && lote consignado ( settext ) .. msald = 0 && saldo disponivel ( settext ) calculado na tela.. mcemi = 0 && numeric 6, estoque minimo mbund = space(04) && unidade do produto.. //mcduc = ctod("") && ultima compra (settext).. //mcduv = ctod("") && ultima saida..(settext).. lttal := "" larray := {} mrec := {} asample := {""} asamplz := {""} mrez := {} mbasn := .t. mbfdu = mafdu mtmpm = space(20) && tempo manuf. (min) &&(get) mdsc1 = space(50) && descricao &&(get) mdsc2 = space(50) &&(get) mdsc3 = space(50) &&(get) mculf = 0 && ultimo fornecedor... mforn = space(50) && nome do fornecedor.. &&(get) mbmla = space(50) && molde &&(get) mbmlb = space(50) && molde &&(get) martg = space(50) && artigo...... &&(get) mcomp = space(50) && composicao.. &&(get) mbcdt = space(06) && codigo da materia prima mteci = space(50) && nome da materia prima &&(get) mcepf = space(50) && especificacao &&(get) mcqtd = 0 && quantidade &&(get) mcvlr = 0 && valor &&(get) asampla := {""} mrea := {} mtotqt := 0 @ 05.5,002 say "Código do produto" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 060 get obcdg var mbcdg picture "@!" valid (pega_altera("C") ) font mtahoma size 024,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 05.5,110 say "Código de barras" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 164 get obcdb var mbcdb picture "@!" valid (pega_altera("R") ) font mtahoma size 056,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when iif(wobjet = 1,.f.,.t.) @ 05.5,225 say "Marca" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 265 get obmrc var mbmrc picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 15.5,002 say "Descrição do produto" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 060 get obprd var mbprd picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 15.5,225 say "Abreviatura" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 265 get obabv var mbabv picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 35.5,002 say "Departamento" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 35.5,047 btnbmp obut01 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("1") ) @ 035, 060 get oddpt var nddpt picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. @ 45.5,002 say "Grupo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 45.5,047 btnbmp obut02 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("2") ) @ 045, 060 get odgrp var ndgrp picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. @ 55.5,002 say "Sub-Grupo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 55.5,047 btnbmp obut03 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("3") ) @ 055, 060 get odsgp var ndsgp picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. if wobjet = 1 @ 35.5,225 say "Tamanho" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 35.5,250 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[1] action ( proc_tam() ) @ 035, 265 get otdta var mtdta picture "@!" font mtahoma size 022,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 035, 290 get otnta var mtnta picture "9999" font mtahoma size 018,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 45.5,225 say "Cor" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 45.5,250 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[1] action ( proc_cor() ) @ 045, 265 get ocnco var mcnco picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 55.5,225 say "Colecao" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 055, 265 get obfdu var mbfdu picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. endif @ 065, 060 combobox obtpp var nbtpp items abtpp font mtahoma size 050,90 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 065, 115 checkbox obtbl var mbtbl prompt "Item de tabela"; font mtahoma colors mcolorAA,mcolorAB size 42, 11 of ofld:adialogs[1] pixel @ 065, 166 checkbox obdec var mbdec prompt "Fracionado"; font mtahoma colors mcolorAA,mcolorAB size 35, 11 of ofld:adialogs[1] pixel @ 065, 210 checkbox ocmvt var mcmvt prompt "Movimentacao automatica"; font mtahoma colors mcolorAA,mcolorAB size 72, 11 of ofld:adialogs[1] pixel @ 068, 290 say "Classif.ABC - " of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 065, 325 say ocabc var mcabc of ofld:adialogs[1] font mtahoma1 size 15,11 color clr_vermelho,mcolorAB pixel @ 085.5,002 say "Margem de lucro real%" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,060 get ocmgl var mcmgl picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 085.5,115 say "Margem normal" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,164 get omgln var mmgln picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 085.5,232 say "Desconto Maximo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,285 get ocdmx var mcdmx picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 095.5,002 say "Preço de venda à vista" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 095 ,060 get ocpv1 var mcpv1 picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 095.5,115 say "Outro preço" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 095 ,164 get ocpv2 var mcpv2 picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,002 say "Estoque" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,060 say ocest var mcest picture "@e 99,999.999" font mtahoma size 045,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,115 say "Lote de saida" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,164 say ocqls var mcqls picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,232 say "Lote consignado" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,285 say ocqlc var mcqlc picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 125.5,002 say "Saldo disponivel" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,060 say osald var msald picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 125.5,115 say "Estoque minimo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,164 get ocemi var mcemi picture "999999" font mtahoma size 048,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 125.5,232 say "Unidade" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,285 get obund var mbund picture "@!" font mtahoma size 020,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel if wobjet = 1 @ 145,002 listbox obry fields asamplz[obry],asamplz[obry],; asamplz[obry],asamplz[obry],asamplz[obry]; headers "Tamanho","Cor","Estoque","Consignado","Lot Saida"; FIELDSIZES 070,190,130,130,130; of ofld:adialogs[1] Size 343,60 On Change mostrabarras() On DblClick pr_ficha() ; pixel obry:lCellStyle = .t. obry:lAutoSkip = .t. obry:SetArray(asamplz) obry:bGoTop = { || obry:nat := 1 } obry:bGoBottom = { || obry:nat := Eval( obry:bLogicLen ) } obry:bSkip = { | nWant, nOld | nOld := obry:nat, obry:nat += nWant,; obry:nat := Max( 1, Min( obry:nat, Eval( obry:bLogicLen ) ) ),; obry:nat - nOld } obry:bLogicLen = { || Len( asamplz ) } obry:cAlias = "Array" // Just put something obry:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obry:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obry:nClrForeFocus := CLR_AM // cor da letra da barra ativa obry:nClrPane := CLR_LG // cor do fundo sem a barra ativa.. obry:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obry:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obry:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obry:lMChange := .F. // Desabilita Mousemove obry:SetFocus() // Refocus on The Browse obry:Refresh() // Estabiliza o Browse/Listbox @ 205.5,002 say "Click-Duplo sobre o item imprime a ficha tecnica" of ofld:adialogs[1] font mtahoma color clr_vermelho,mcolorAB pixel endif ***---------------------------( 2§ guia ) -----------------------------------*** @ 05.5,002 say "Custo Contabil" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel @ 005 ,060 say occtb var mcctb picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel @ 05.5,110 say "Custo Medio" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel @ 005 ,164 say occmd var mccmd picture "@e 999,999.99" font mtahoma size 068,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel //@ 015.5,002 say "Ultima compra" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel //@ 015 ,060 say ocduc var mcduc font mtahoma size 028,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel //@ 015.5,115 say "Ultima saida" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel //@ 015 ,164 say ocduv var mcduv font mtahoma size 028,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel if wobjet = 1 ***---------------------( 5§ guia ) ---------------------*** @ 05.5,002 say "Tempo Manuf.(min)" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 060 get otmpm var mtmpm picture "@!" font mtahoma size 080,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 15.5,002 say "Molde" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 060 get obmla var mbmla picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 025, 060 get obmlb var mbmlb picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 35.5,002 say "Descrição" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 035, 060 get odsc1 var mdsc1 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 045, 060 get odsc2 var mdsc2 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 055, 060 get odsc3 var mdsc3 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 65,002 say "Fornecedor" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 65,047 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[5] action ( proc_fornecedor("C") ) @ 65.5,060 get oforn var mforn picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel when .f. @ 75,002 say "Artigo" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 075, 060 get oartg var martg picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 85,002 say "Composição" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 085, 060 get ocomp var mcomp picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 105,002 say "Materia Prima" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 105,047 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[5] action ( proc_produtos("C") ) @ 105.5,060 get oteci var mteci picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel when .f. @ 115,002 say "Especificacao" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,060 get ocepf var mcepf picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 115,225 say "Qtde" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,240 get ocqtd var mcqtd picture "@e 99,999.999" font mtahoma size 040,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 115,290 say "Valor" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,305 get ocvlr var mcvlr picture "@e 999,999.99" valid ( grava_ficha() ) font mtahoma size 040,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 125,002 listbox obra fields asampla[obra],asampla[obra],; asampla[obra],asampla[obra],asampla[obra],asampla[obra],asampla[obra]; headers "Cd.","Materia Prima","Especificacao","Unid","Qtde","Preco","Total"; FIELDSIZES 050,180,170,45,75,75,75; of ofld:adialogs[5] Size 343,095 On DblClick( excluificha() ); pixel obra:lCellStyle = .t. obra:lAutoSkip = .t. obra:SetArray(asampla) obra:bGoTop = { || obra:nat := 1 } obra:bGoBottom = { || obra:nat := Eval( obra:bLogicLen ) } obra:bSkip = { | nWant, nOld | nOld := obra:nat, obra:nat += nWant,; obra:nat := Max( 1, Min( obra:nat, Eval( obra:bLogicLen ) ) ),; obra:nat - nOld } obra:bLogicLen = { || Len( asampla ) } obra:cAlias = "Array" // Just put something obra:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obra:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obra:nClrForeFocus := CLR_AM // cor da letra da barra ativa obra:nClrPane := CLR_LG // cor do fundo sem a barra ativa.. obra:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obra:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obra:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obra:lMChange := .F. // Desabilita Mousemove obra:SetFocus() // Refocus on The Browse obra:Refresh() // Estabiliza o Browse/Listbox @ 222.5,255 say "Total (R$)" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 222, 304 say ototqt var mtotqt picture "@e 999,999,999.99" font mtahoma size 048,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 000,030.9 image oimage size 085, 085 of ofld:adialogs[5] scroll adjust on click mostra_imagem() //update oimage:progress( .f. ) oimage:refresh() @ 085,250 BUTTON oimabut01 prompt "&Selecione o Croqui" size 080,12 font oFont OF ofld:adialogs[5] pixel action getimage( oimage) ***--------------------------( 6§ guia ) -----------------*** @ 001,07 image ofigur size 225, 215 of ofld:adialogs[6] scroll adjust ofigur:progress( .f. ) ofigur:refresh() @ 215,285 BUTTON oimabut02 prompt "&Selecione Imagem" size 060,12 font oFont OF ofld:adialogs[6] pixel action getfigur( ofigur) endif @ 005,350 BUTTON oprobut01 prompt "&Gravar" size 040,12 font oFont OF produtos pixel action ( grava_produtos("C") ) @ 020,350 BUTTON oprobut02 prompt "&Alterar" size 040,12 font oFont OF produtos pixel action ( grava_produtos("A") ) @ 035,350 BUTTON oprobut03 prompt "&Excluir" size 040,12 font oFont OF produtos pixel action ( grava_produtos("E") ) @ 050,350 BUTTON oprobut04 prompt "&Novo" size 040,12 font oFont OF produtos pixel action ( novo_prod()) @ 075,350 BUTTON oprobut05 prompt "&Grupos" size 040,12 font oFont OF produtos pixel action ( e4000000() ) @ 105,350 BUTTON oprobut06 prompt "&Sair" size 040,12 font oFont OF produtos pixel action ( produtos:end() ) if wobjet = 1 && qdo vem da nectarina... @ 135,350 BUTTON oprobut07 prompt "&Cor" size 040,12 font oFont OF produtos pixel action ( n6090000() ) @ 150,350 BUTTON oprobut08 prompt "&Tamanho" size 040,12 font oFont OF produtos pixel action ( n609a000() ) //@ 180,350 BUTTON oprobut09 prompt "&Ficha" size 040,12 font oFont OF produtos pixel action ( pr_ficha() ) endif if wobjet = 1 obry:bgotfocus = { || mostrabarras() } endif oprobut02:disable() oprobut03:disable() activate dialog produtos center on init ( consultaprodutos( "oLbx") ) //on Paint ( WndBoxIn(ofld:adialogs[1]:Hdc, 057, 001, 059, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 161, 001, 163, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 194, 001, 196, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 258, 001, 260, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 318, 001, 320, 696) ) otim:end() return nil ***--------------------( imprime a ficha tecnica do produto ) ---------------*** function pr_ficha() DEFINE PEN oPen1 WIDTH 1 DEFINE PEN oPen2 WIDTH 1 define font oton name "Courier New" size 0,-13 define font otona name "Courier New" size 0,-19 define font otonb name "Courier New" size 0,-10 Report oReport TiTle "CARACTERISTICAS DO PRODUTO" Center; Header "Ficha tecnica do produto nro.: " + strzero(val(mbcdg),6) Center; Footer "" Center; Font oton,otona,otonb; PEN oPen1, oPen2 ; Preview column title "" DATA space(02) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(15) End Report oReport:nTitleUpLine := RPT_SINGLELINE oReport:nTitleDnLine := RPT_NOLINE Activate Report oReport on init rficha(); ON STARTPAGE LinBox() produtos:end() return nil STATIC Function LinBox() LOCAL nInchWidth, nInchHeight nInchWidth := oReport:PhyWidth(RPT_INCHES) nInchHeight := oReport:PhyHeight(RPT_INCHES) oReport:Box(.1 ,; // nRow .3 ,; // nCol nInchHeight-.7 ,; // nBottom nInchWidth-.4 ,; // nRight 1 ,; // first pen created RPT_INCHES) //oReport:Line(0.9 ,; // nTop // 0.55 ,; // nLeft // 2 ,; // nBottom // 0.55 ,; // nRight // 2 ,; // second pen created // RPT_INCHES) RETURN nil function rficha() oREport:Newline() cQuery := "select * from e40100000 where "+; "bcdg = " + "'"+alltrim(mbcdg)+"'" + " order by bcdg asc;" oQuery := oServer:Query(cQuery) rbcap = oQuery:Fieldget(oQuery:Fieldpos('bcap')) && codig. interno. rbcdg = oQuery:Fieldget(oQuery:Fieldpos('bcdg')) && codig. usual. rbfdu = oQuery:Fieldget(oQuery:Fieldpos('bfdu')) && colecao.. rbprd = oQuery:Fieldget(oQuery:Fieldpos('bprd')) && descricao do produto.. rbtmp = oQuery:Fieldget(oQuery:Fieldpos('btmp')) && tempo manuf. (min). rbmla = oQuery:Fieldget(oQuery:Fieldpos('bmla')) && molde.. rbmlb = oQuery:Fieldget(oQuery:Fieldpos('bmlb')) && molde.. rbds1 = oQuery:Fieldget(oQuery:Fieldpos('bds1')) && descricao.. rbds2 = oQuery:Fieldget(oQuery:Fieldpos('bds2')) && descricao.. rbds3 = oQuery:Fieldget(oQuery:Fieldpos('bds3')) && descricao.. rbart = oQuery:Fieldget(oQuery:Fieldpos('bart')) && artigo.. rbcmp = oQuery:Fieldget(oQuery:Fieldpos('bcmp')) && composicao.. rbdtc = oQuery:Fieldget(oQuery:Fieldpos('bdtc')) && data de cadastro.. rbimg = oQuery:Fieldget(oQuery:Fieldpos('bimg')) && local da imagem.. rbfig = oQuery:Fieldget(oQuery:Fieldpos('bfig')) && impressao do croqui.. oQuery:destroy() cQuery := "select * from e40200000 where "+; "cemp = " + alltrim(str(memp)) +; " and ccap = " + alltrim(str(rbcap)) + " order by ccap asc;" oQuery := oServer:Query(cQuery) rculf = oQuery:Fieldget(oQuery:Fieldpos('culf')) && fornecedor.. rcpv1 = oQuery:Fieldget(oQuery:Fieldpos('cpv1')) && preco.. if empty(rcpv1) rcpv1 = 0 endif oQuery:destroy() rforn = "" if !empty(rculf) cQuery := "select * from r10000000 where"+; " acdg = " + alltrim(str(rculf)) + " order by acdg asc;" oQuery := oServer:Query(cQuery) rforn = oQuery:Fieldget(oQuery:Fieldpos('anrs')) oQuery:destroy() endif oReport:StartLine() oReport:Say(2,"Produto:",1) oReport:Say(3,alltrim(rbprd),1) oREport:Endline() oReport:StartLine() oReport:Say(2,"Tmp Manuf.(min):",1) oReport:Say(3,alltrim(rbtmp),1) oReport:Say(5,"Data: " + dtoc(rbdtc),1) oREport:Endline() oReport:StartLine() oReport:Say(2,"Molde:",1) if !empty(rbmla) oReport:Say(3,rbmla,1) endif oReport:Say(5,"Colecao: " +alltrim(rbfdu),1) oREport:Endline() oReport:StartLine() if !empty(rbmlb) oReport:Say(3,rbmlb,1) endif oREport:Endline() //oReport:StartLine() //oReport:Say(3,"Colecao:",1) //oReport:Say(5,alltrim(rbfdu),1) //oREport:Endline() oReport:StartLine() oReport:Say(2,"Descricao:",1) if !empty(rbds1) oReport:Say(3,alltrim(rbds1),1) endif oREport:Endline() if !empty(rbds2) oReport:StartLine() oReport:Say(3,alltrim(rbds2),1) oREport:Endline() endif if !empty(rbds3) oReport:StartLine() oReport:Say(3,alltrim(rbds3),1) oREport:Endline() endif oREport:Newline() oReport:StartLine() oReport:Say(2,"Cor:",1) oReport:Say(3,asamplz[obry]) oReport:Say(5,"Artigo: " + alltrim(rbart)) oREport:Endline() oReport:StartLine() oReport:Say(2,"Fornecedor:",1) oReport:Say(3,rforn) oReport:Say(5,"Preco.: " + alltrim(transform(rcpv1,"@e 999,999.99"))) oREport:Endline() oReport:StartLine() oReport:Say(2,"Composicao:",1) oReport:Say(3,alltrim(rbcmp)) oReport:Say(5,"Cod.Fabrica: " + strzero(memp,2)) oREport:Endline() oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(3," MATERIAS PRIMAS",2) oREport:Endline() oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(2,"Descricao",1) oReport:Say(3,"Especificacao",1) oReport:Say(4,"Unid",1) oReport:Say(5,"Qtde",1) oReport:Say(6,"Preco",1) oREport:Endline() cQuery := "select * from e402b0000 where"+; " cemp = " + alltrim(str(memp)) +; " and ccap = " + alltrim(str(rbcap))+; " order by ccap asc;" oQuery := oServer:Query(cQuery) mcnsq = oQuery:Fieldget(oQuery:Fieldpos('cnsq')) if !empty(mcnsq) mtotqr := 0 DO WHILE ! oQuery:Eof() mcnsq = oQuery:Fieldget(oQuery:Fieldpos('cnsq')) a = oQuery:Fieldget(oQuery:Fieldpos('ccdg')) d = oQuery:Fieldget(oQuery:Fieldpos('cepf')) e = oQuery:Fieldget(oQuery:Fieldpos('cqtd')) f = oQuery:Fieldget(oQuery:Fieldpos('cvlr')) mtotqr = mtotqr + (e*f) cwQuery := "select * from e40100000 where"+; " bcdg = " + "'"+alltrim(a)+"'"+; " order by bcdg asc;" owQuery := oServer:Query(cwQuery) b = owQuery:Fieldget(owQuery:Fieldpos('bprd')) c = owQuery:Fieldget(owQuery:Fieldpos('bund')) owQuery:destroy() oReport:StartLine() oReport:Say(2,alltrim(,1) oReport:Say(3,alltrim(d),3) oReport:Say(4,alltrim©,1) oReport:Say(5,transform(e,"@e 9,999.999"),1) oReport:Say(6,transform(f,"@e 99,999.99"),1) oREport:Endline() oQuery:Skip() END oQuery:destroy() oReport:StartLine() oReport:Say(6,transform(mtotqr,"@e 99,999.99"),1) oREport:Endline() ralte = mrez[obry] cQuery := "select * from e402a0000 where "+; "cemp = " + alltrim(str(memp)) +; " and cnsq = " + alltrim(str(ralte)) + " order by cnsq asc;" oQuery := oServer:Query(cQuery) rtcdt = oQuery:Fieldget(oQuery:Fieldpos('ctam')) && tamanho.. rccdc = oQuery:Fieldget(oQuery:Fieldpos('ccor')) && cor.. oQuery:destroy() if !empty(rtcdt) .and. !empty(rccdc) rbarr = "1"+strzero(val(mbcdg),6)+strzero(rtcdt,2)+ strzero(rccdc,3) rbarr = rbarr + digito_barras(mbcdb) oREport:Newline() oReport:StartLine() oReport:Say(2,"Codigo de barras",1) oReport:Say(3,rbarr,1) oREport:Endline() endif oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(3," CROQUI DO PRODUTO",2) oREport:Endline() oREport:Newline() oREport:Newline() //aa = "" //for x = 1 to len(rbfig) // if substr(rbfig,x,1) = "%" // aa = aa + "\" // else // aa = aa + substr(rbfig,x,1) // endif //next //gcFile = aa endif return nil id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Editado por - SYSTEMUP on 18/06/2008 08:25:49
  5. Boa tarde ... Na função e4010000(), há um botão que chama a impressão com preview,,(IMPRIMIR)-> que chama a função pr_ficha().O que acontece é que quando fecho o preview, a dialog que chamou o preview e fechada (e4010000()) e o sistema cai.. na windows ( principal),, ou seja todo o sistema cai, o que poderá estar ocorrendo... Será que é porque o preview trabalha com base DBF.. e estou trabalhando com POSTGRESQL... Alguem pode me ajudar... function e4010000(objet) wobjet = objet && qdo igual a 1 e da nectarina.. private SalvaVar := "A" private otim, oLbx private oimage, ocnco if wobjet = 1 if empty(mafdu) msgstop("Coloque o filtro de colecao no cadastro de empresa.","ATENCAO..") return .t. endif endif nn = 1 define brush obrush color rgb(255,239,214) define dialog produtos title "Produtos" from 010,010 to 500,795 pixel brush oBrush //transparent define font mtahoma name "Tahoma" size 5.5,13 define font mtahoma1 name "Tahoma" size 08,22 define font oFont name 'MS Sans Serif' size 6,15 define font ofontL name "Courier" size 11,11 if wobjet = 1 @ 0,0 FOLDER oFld OF produtos prompt "&1.Produto", "&2. Custos", "&3. Tributos","&4. Outros","&5. Ficha Tecnica","&6. Imagem do produto"; DIALOGS "Pageprod","Pagecustos","Pagetribuit","Pageoutros","PageFicha","PageImage"; TABCOLOR CLR_BlCK; FOCUSCOLOR CLR_BLUE; size 348, 245; COLORS mcolorAA, mcolorAB; ADJUST oFld:SetOption(1) oFld:aEnable := { .T., .T., .T.,.T.,.T.,.T.} //-> Inibe as Orelhas(Abas) oFld:Show() oFld:lWin95Look := .T. //-> Modifica o Estilo da Orelha. else @ 0,0 FOLDER oFld OF produtos prompt "&1.Produto", "&2. Custos", "&3. Tributos","&4. Outros"; DIALOGS "Pageprod","Pagecustos","Pagetribuit","Pageoutros"; TABCOLOR CLR_BlCK; FOCUSCOLOR CLR_BLUE; size 348, 245; COLORS mcolorAA, mcolorAB; ADJUST oFld:SetOption(1) oFld:aEnable := { .T., .T., .T.,.T.} //-> Inibe as Orelhas(Abas) oFld:Show() oFld:lWin95Look := .T. //-> Modifica o Estilo da Orelha. endif mbcdg = space(06) && c¢digo mbcap = 0 mbcdb = space(14) && c¢digo de barras mbmrc = space(20) && marca mbprd = space(50) && descri‡Æo do produto mbabv = space(25) && abreviatura mbdpt = 0 && departamento (smallint) nddpt = space(50) && descricao do departamento.. ( get na tela..) mbgrp = 0 && Grupo (smallint) ndgrp = space(50) && descricao do grupo.. ( get na tela..) mbsgp = 0 && Sub-Grupo (smallint) ndsgp = space(50) && descricao do sub-grupo... ( get na tela..) mccdc = 0 && codigo da cor. mcnco = space(30) && nome da cor. mtcdt = 0 && codigo do tamanho. mtdta = space(06) && descricao. ( G,GG,XG,P,M,) mtnta = space(03) && numeracao do tamanho.. 33,34,35,36. mcabc = "C" && classificacao ABC ( settext...) mbtpp = 1 && tipo de produto "1-Produto","2-Serviço","3-Consumo","4-Matéria Prima" nbtpp = "Produto" abtpp = {"Produto","Serviço","Consumo","Matéria Prima","Bens"} && somente array.. mbtbl = .f. && item de tabela.. mbdec = .f. && fracao.. mcmvt = .t. && movimentacao automatica.. mcctb = 0 && custo contabil.. ( settext..) mccmd = 0 && custo medio.. ( settext..) mcmgl = 0 && Margem de lucro real % mmgln = 0 && Margem normal ( get ) calculado na tela.. mcdmx = 0 && desconto maximo.. mcpv1 = 0 && preco de venda.. mcpv2 = 0 && outro preco de venda.. mcest = 0 && estoque ( settext )... mcqls = 0 && lote de saida.. ( settext ).. mcqlc = 0 && lote consignado ( settext ) .. msald = 0 && saldo disponivel ( settext ) calculado na tela.. mcemi = 0 && numeric 6, estoque minimo mbund = space(04) && unidade do produto.. //mcduc = ctod("") && ultima compra (settext).. //mcduv = ctod("") && ultima saida..(settext).. lttal := "" larray := {} mrec := {} asample := {""} asamplz := {""} mrez := {} mbasn := .t. mbfdu = mafdu mtmpm = space(20) && tempo manuf. (min) &&(get) mdsc1 = space(50) && descricao &&(get) mdsc2 = space(50) &&(get) mdsc3 = space(50) &&(get) mculf = 0 && ultimo fornecedor... mforn = space(50) && nome do fornecedor.. &&(get) mbmla = space(50) && molde &&(get) mbmlb = space(50) && molde &&(get) martg = space(50) && artigo...... &&(get) mcomp = space(50) && composicao.. &&(get) mbcdt = space(06) && codigo da materia prima mteci = space(50) && nome da materia prima &&(get) mcepf = space(50) && especificacao &&(get) mcqtd = 0 && quantidade &&(get) mcvlr = 0 && valor &&(get) asampla := {""} mrea := {} mtotqt := 0 @ 05.5,002 say "Código do produto" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 060 get obcdg var mbcdg picture "@!" valid (pega_altera("C") ) font mtahoma size 024,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 05.5,110 say "Código de barras" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 164 get obcdb var mbcdb picture "@!" valid (pega_altera("R") ) font mtahoma size 056,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when iif(wobjet = 1,.f.,.t.) @ 05.5,225 say "Marca" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 265 get obmrc var mbmrc picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 15.5,002 say "Descrição do produto" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 060 get obprd var mbprd picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 15.5,225 say "Abreviatura" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 265 get obabv var mbabv picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 35.5,002 say "Departamento" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 35.5,047 btnbmp obut01 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("1") ) @ 035, 060 get oddpt var nddpt picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. @ 45.5,002 say "Grupo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 45.5,047 btnbmp obut02 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("2") ) @ 045, 060 get odgrp var ndgrp picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. @ 55.5,002 say "Sub-Grupo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 55.5,047 btnbmp obut03 size btn_width, btn_height filename "search.bmp" of ofld:adialogs[1] action ( proc_depgrusub("3") ) @ 055, 060 get odsgp var ndsgp picture "@!" font mtahoma size 160,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. if wobjet = 1 @ 35.5,225 say "Tamanho" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 35.5,250 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[1] action ( proc_tam() ) @ 035, 265 get otdta var mtdta picture "@!" font mtahoma size 022,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 035, 290 get otnta var mtnta picture "9999" font mtahoma size 018,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 45.5,225 say "Cor" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 45.5,250 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[1] action ( proc_cor() ) @ 045, 265 get ocnco var mcnco picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 55.5,225 say "Colecao" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 055, 265 get obfdu var mbfdu picture "@!" font mtahoma size 080,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel when .f. endif @ 065, 060 combobox obtpp var nbtpp items abtpp font mtahoma size 050,90 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 065, 115 checkbox obtbl var mbtbl prompt "Item de tabela"; font mtahoma colors mcolorAA,mcolorAB size 42, 11 of ofld:adialogs[1] pixel @ 065, 166 checkbox obdec var mbdec prompt "Fracionado"; font mtahoma colors mcolorAA,mcolorAB size 35, 11 of ofld:adialogs[1] pixel @ 065, 210 checkbox ocmvt var mcmvt prompt "Movimentacao automatica"; font mtahoma colors mcolorAA,mcolorAB size 72, 11 of ofld:adialogs[1] pixel @ 068, 290 say "Classif.ABC - " of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 065, 325 say ocabc var mcabc of ofld:adialogs[1] font mtahoma1 size 15,11 color clr_vermelho,mcolorAB pixel @ 085.5,002 say "Margem de lucro real%" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,060 get ocmgl var mcmgl picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 085.5,115 say "Margem normal" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,164 get omgln var mmgln picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 085.5,232 say "Desconto Maximo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 085,285 get ocdmx var mcdmx picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 095.5,002 say "Preço de venda à vista" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 095 ,060 get ocpv1 var mcpv1 picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 095.5,115 say "Outro preço" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 095 ,164 get ocpv2 var mcpv2 picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,002 say "Estoque" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,060 say ocest var mcest picture "@e 99,999.999" font mtahoma size 045,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,115 say "Lote de saida" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,164 say ocqls var mcqls picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 115.5,232 say "Lote consignado" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 115 ,285 say ocqlc var mcqlc picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 125.5,002 say "Saldo disponivel" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,060 say osald var msald picture "@e 99,999.999" font mtahoma size 065,9 of ofld:adialogs[1] color clr_vermelho,mcolorCB pixel @ 125.5,115 say "Estoque minimo" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,164 get ocemi var mcemi picture "999999" font mtahoma size 048,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel @ 125.5,232 say "Unidade" of ofld:adialogs[1] font mtahoma color mcolorAA,mcolorAB pixel @ 125 ,285 get obund var mbund picture "@!" font mtahoma size 020,9 of ofld:adialogs[1] color mcolorCA,mcolorCB pixel if wobjet = 1 @ 145,002 listbox obry fields asamplz[obry],asamplz[obry],; asamplz[obry],asamplz[obry],asamplz[obry]; headers "Tamanho","Cor","Estoque","Consignado","Lot Saida"; FIELDSIZES 070,190,130,130,130; of ofld:adialogs[1] Size 343,60 On Change mostrabarras() On DblClick pr_ficha() ; pixel obry:lCellStyle = .t. obry:lAutoSkip = .t. obry:SetArray(asamplz) obry:bGoTop = { || obry:nat := 1 } obry:bGoBottom = { || obry:nat := Eval( obry:bLogicLen ) } obry:bSkip = { | nWant, nOld | nOld := obry:nat, obry:nat += nWant,; obry:nat := Max( 1, Min( obry:nat, Eval( obry:bLogicLen ) ) ),; obry:nat - nOld } obry:bLogicLen = { || Len( asamplz ) } obry:cAlias = "Array" // Just put something obry:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obry:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obry:nClrForeFocus := CLR_AM // cor da letra da barra ativa obry:nClrPane := CLR_LG // cor do fundo sem a barra ativa.. obry:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obry:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obry:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obry:lMChange := .F. // Desabilita Mousemove obry:SetFocus() // Refocus on The Browse obry:Refresh() // Estabiliza o Browse/Listbox @ 205.5,002 say "Click-Duplo sobre o item imprime a ficha tecnica" of ofld:adialogs[1] font mtahoma color clr_vermelho,mcolorAB pixel endif ***---------------------------( 2§ guia ) -----------------------------------*** @ 05.5,002 say "Custo Contabil" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel @ 005 ,060 say occtb var mcctb picture "@e 999,999.99" font mtahoma size 048,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel @ 05.5,110 say "Custo Medio" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel @ 005 ,164 say occmd var mccmd picture "@e 999,999.99" font mtahoma size 068,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel //@ 015.5,002 say "Ultima compra" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel //@ 015 ,060 say ocduc var mcduc font mtahoma size 028,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel //@ 015.5,115 say "Ultima saida" of ofld:adialogs[2] font mtahoma color mcolorAA,mcolorAB pixel //@ 015 ,164 say ocduv var mcduv font mtahoma size 028,9 of ofld:adialogs[2] color clr_vermelho,mcolorCB pixel if wobjet = 1 ***---------------------( 5§ guia ) ---------------------*** @ 05.5,002 say "Tempo Manuf.(min)" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 005, 060 get otmpm var mtmpm picture "@!" font mtahoma size 080,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 15.5,002 say "Molde" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 015, 060 get obmla var mbmla picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 025, 060 get obmlb var mbmlb picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 35.5,002 say "Descrição" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 035, 060 get odsc1 var mdsc1 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 045, 060 get odsc2 var mdsc2 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 055, 060 get odsc3 var mdsc3 picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 65,002 say "Fornecedor" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 65,047 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[5] action ( proc_fornecedor("C") ) @ 65.5,060 get oforn var mforn picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel when .f. @ 75,002 say "Artigo" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 075, 060 get oartg var martg picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 85,002 say "Composição" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 085, 060 get ocomp var mcomp picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color mcolorCA,mcolorCB pixel @ 105,002 say "Materia Prima" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 105,047 btnbmp size btn_width, btn_height filename "search.bmp" OF ofld:adialogs[5] action ( proc_produtos("C") ) @ 105.5,060 get oteci var mteci picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel when .f. @ 115,002 say "Especificacao" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,060 get ocepf var mcepf picture "@!" font mtahoma size 160,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 115,225 say "Qtde" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,240 get ocqtd var mcqtd picture "@e 99,999.999" font mtahoma size 040,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 115,290 say "Valor" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 115,305 get ocvlr var mcvlr picture "@e 999,999.99" valid ( grava_ficha() ) font mtahoma size 040,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 125,002 listbox obra fields asampla[obra],asampla[obra],; asampla[obra],asampla[obra],asampla[obra],asampla[obra],asampla[obra]; headers "Cd.","Materia Prima","Especificacao","Unid","Qtde","Preco","Total"; FIELDSIZES 050,180,170,45,75,75,75; of ofld:adialogs[5] Size 343,095 On DblClick( excluificha() ); pixel obra:lCellStyle = .t. obra:lAutoSkip = .t. obra:SetArray(asampla) obra:bGoTop = { || obra:nat := 1 } obra:bGoBottom = { || obra:nat := Eval( obra:bLogicLen ) } obra:bSkip = { | nWant, nOld | nOld := obra:nat, obra:nat += nWant,; obra:nat := Max( 1, Min( obra:nat, Eval( obra:bLogicLen ) ) ),; obra:nat - nOld } obra:bLogicLen = { || Len( asampla ) } obra:cAlias = "Array" // Just put something obra:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obra:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obra:nClrForeFocus := CLR_AM // cor da letra da barra ativa obra:nClrPane := CLR_LG // cor do fundo sem a barra ativa.. obra:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obra:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obra:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obra:lMChange := .F. // Desabilita Mousemove obra:SetFocus() // Refocus on The Browse obra:Refresh() // Estabiliza o Browse/Listbox @ 222.5,255 say "Total (R$)" of ofld:adialogs[5] font mtahoma color mcolorAA,mcolorAB pixel @ 222, 304 say ototqt var mtotqt picture "@e 999,999,999.99" font mtahoma size 048,9 of ofld:adialogs[5] color clr_vermelho,mcolorCB pixel @ 000,030.9 image oimage size 085, 085 of ofld:adialogs[5] scroll adjust on click mostra_imagem() //update oimage:progress( .f. ) oimage:refresh() @ 085,250 BUTTON oimabut01 prompt "&Selecione o Croqui" size 080,12 font oFont OF ofld:adialogs[5] pixel action getimage( oimage) ***--------------------------( 6§ guia ) -----------------*** @ 001,07 image ofigur size 225, 215 of ofld:adialogs[6] scroll adjust ofigur:progress( .f. ) ofigur:refresh() @ 215,285 BUTTON oimabut02 prompt "&Selecione Imagem" size 060,12 font oFont OF ofld:adialogs[6] pixel action getfigur( ofigur) endif @ 005,350 BUTTON oprobut01 prompt "&Gravar" size 040,12 font oFont OF produtos pixel action ( grava_produtos("C") ) @ 020,350 BUTTON oprobut02 prompt "&Alterar" size 040,12 font oFont OF produtos pixel action ( grava_produtos("A") ) @ 035,350 BUTTON oprobut03 prompt "&Excluir" size 040,12 font oFont OF produtos pixel action ( grava_produtos("E") ) @ 050,350 BUTTON oprobut04 prompt "&Novo" size 040,12 font oFont OF produtos pixel action ( novo_prod()) @ 075,350 BUTTON oprobut05 prompt "&Grupos" size 040,12 font oFont OF produtos pixel action ( e4000000() ) @ 105,350 BUTTON oprobut06 prompt "&Sair" size 040,12 font oFont OF produtos pixel action ( produtos:end() ) if wobjet = 1 && qdo vem da nectarina... @ 135,350 BUTTON oprobut07 prompt "&Cor" size 040,12 font oFont OF produtos pixel action ( n6090000() ) @ 150,350 BUTTON oprobut08 prompt "&Tamanho" size 040,12 font oFont OF produtos pixel action ( n609a000() ) //@ 180,350 BUTTON oprobut09 prompt "&Ficha" size 040,12 font oFont OF produtos pixel action ( pr_ficha() ) endif if wobjet = 1 obry:bgotfocus = { || mostrabarras() } endif oprobut02:disable() oprobut03:disable() activate dialog produtos center on init ( consultaprodutos( "oLbx") ) //on Paint ( WndBoxIn(ofld:adialogs[1]:Hdc, 057, 001, 059, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 161, 001, 163, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 194, 001, 196, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 258, 001, 260, 696),; // WndBoxIn(ofld:adialogs[1]:Hdc, 318, 001, 320, 696) ) otim:end() return nil ***--------------------( imprime a ficha tecnica do produto ) ---------------*** function pr_ficha() DEFINE PEN oPen1 WIDTH 1 DEFINE PEN oPen2 WIDTH 1 define font oton name "Courier New" size 0,-13 define font otona name "Courier New" size 0,-19 define font otonb name "Courier New" size 0,-10 Report oReport TiTle "CARACTERISTICAS DO PRODUTO" Center; Header "Ficha tecnica do produto nro.: " + strzero(val(mbcdg),6) Center; Footer "" Center; Font oton,otona,otonb; PEN oPen1, oPen2 ; Preview column title "" DATA space(02) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(18) column title "" DATA space(15) End Report oReport:nTitleUpLine := RPT_SINGLELINE oReport:nTitleDnLine := RPT_NOLINE Activate Report oReport on init rficha(); ON STARTPAGE LinBox() produtos:end() return nil STATIC Function LinBox() LOCAL nInchWidth, nInchHeight nInchWidth := oReport:PhyWidth(RPT_INCHES) nInchHeight := oReport:PhyHeight(RPT_INCHES) oReport:Box(.1 ,; // nRow .3 ,; // nCol nInchHeight-.7 ,; // nBottom nInchWidth-.4 ,; // nRight 1 ,; // first pen created RPT_INCHES) //oReport:Line(0.9 ,; // nTop // 0.55 ,; // nLeft // 2 ,; // nBottom // 0.55 ,; // nRight // 2 ,; // second pen created // RPT_INCHES) RETURN nil function rficha() oREport:Newline() cQuery := "select * from e40100000 where "+; "bcdg = " + "'"+alltrim(mbcdg)+"'" + " order by bcdg asc;" oQuery := oServer:Query(cQuery) rbcap = oQuery:Fieldget(oQuery:Fieldpos('bcap')) && codig. interno. rbcdg = oQuery:Fieldget(oQuery:Fieldpos('bcdg')) && codig. usual. rbfdu = oQuery:Fieldget(oQuery:Fieldpos('bfdu')) && colecao.. rbprd = oQuery:Fieldget(oQuery:Fieldpos('bprd')) && descricao do produto.. rbtmp = oQuery:Fieldget(oQuery:Fieldpos('btmp')) && tempo manuf. (min). rbmla = oQuery:Fieldget(oQuery:Fieldpos('bmla')) && molde.. rbmlb = oQuery:Fieldget(oQuery:Fieldpos('bmlb')) && molde.. rbds1 = oQuery:Fieldget(oQuery:Fieldpos('bds1')) && descricao.. rbds2 = oQuery:Fieldget(oQuery:Fieldpos('bds2')) && descricao.. rbds3 = oQuery:Fieldget(oQuery:Fieldpos('bds3')) && descricao.. rbart = oQuery:Fieldget(oQuery:Fieldpos('bart')) && artigo.. rbcmp = oQuery:Fieldget(oQuery:Fieldpos('bcmp')) && composicao.. rbdtc = oQuery:Fieldget(oQuery:Fieldpos('bdtc')) && data de cadastro.. rbimg = oQuery:Fieldget(oQuery:Fieldpos('bimg')) && local da imagem.. rbfig = oQuery:Fieldget(oQuery:Fieldpos('bfig')) && impressao do croqui.. oQuery:destroy() cQuery := "select * from e40200000 where "+; "cemp = " + alltrim(str(memp)) +; " and ccap = " + alltrim(str(rbcap)) + " order by ccap asc;" oQuery := oServer:Query(cQuery) rculf = oQuery:Fieldget(oQuery:Fieldpos('culf')) && fornecedor.. rcpv1 = oQuery:Fieldget(oQuery:Fieldpos('cpv1')) && preco.. if empty(rcpv1) rcpv1 = 0 endif oQuery:destroy() rforn = "" if !empty(rculf) cQuery := "select * from r10000000 where"+; " acdg = " + alltrim(str(rculf)) + " order by acdg asc;" oQuery := oServer:Query(cQuery) rforn = oQuery:Fieldget(oQuery:Fieldpos('anrs')) oQuery:destroy() endif oReport:StartLine() oReport:Say(2,"Produto:",1) oReport:Say(3,alltrim(rbprd),1) oREport:Endline() oReport:StartLine() oReport:Say(2,"Tmp Manuf.(min):",1) oReport:Say(3,alltrim(rbtmp),1) oReport:Say(5,"Data: " + dtoc(rbdtc),1) oREport:Endline() oReport:StartLine() oReport:Say(2,"Molde:",1) if !empty(rbmla) oReport:Say(3,rbmla,1) endif oReport:Say(5,"Colecao: " +alltrim(rbfdu),1) oREport:Endline() oReport:StartLine() if !empty(rbmlb) oReport:Say(3,rbmlb,1) endif oREport:Endline() //oReport:StartLine() //oReport:Say(3,"Colecao:",1) //oReport:Say(5,alltrim(rbfdu),1) //oREport:Endline() oReport:StartLine() oReport:Say(2,"Descricao:",1) if !empty(rbds1) oReport:Say(3,alltrim(rbds1),1) endif oREport:Endline() if !empty(rbds2) oReport:StartLine() oReport:Say(3,alltrim(rbds2),1) oREport:Endline() endif if !empty(rbds3) oReport:StartLine() oReport:Say(3,alltrim(rbds3),1) oREport:Endline() endif oREport:Newline() oReport:StartLine() oReport:Say(2,"Cor:",1) oReport:Say(3,asamplz[obry]) oReport:Say(5,"Artigo: " + alltrim(rbart)) oREport:Endline() oReport:StartLine() oReport:Say(2,"Fornecedor:",1) oReport:Say(3,rforn) oReport:Say(5,"Preco.: " + alltrim(transform(rcpv1,"@e 999,999.99"))) oREport:Endline() oReport:StartLine() oReport:Say(2,"Composicao:",1) oReport:Say(3,alltrim(rbcmp)) oReport:Say(5,"Cod.Fabrica: " + strzero(memp,2)) oREport:Endline() oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(3," MATERIAS PRIMAS",2) oREport:Endline() oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(2,"Descricao",1) oReport:Say(3,"Especificacao",1) oReport:Say(4,"Unid",1) oReport:Say(5,"Qtde",1) oReport:Say(6,"Preco",1) oREport:Endline() cQuery := "select * from e402b0000 where"+; " cemp = " + alltrim(str(memp)) +; " and ccap = " + alltrim(str(rbcap))+; " order by ccap asc;" oQuery := oServer:Query(cQuery) mcnsq = oQuery:Fieldget(oQuery:Fieldpos('cnsq')) if !empty(mcnsq) mtotqr := 0 DO WHILE ! oQuery:Eof() mcnsq = oQuery:Fieldget(oQuery:Fieldpos('cnsq')) a = oQuery:Fieldget(oQuery:Fieldpos('ccdg')) d = oQuery:Fieldget(oQuery:Fieldpos('cepf')) e = oQuery:Fieldget(oQuery:Fieldpos('cqtd')) f = oQuery:Fieldget(oQuery:Fieldpos('cvlr')) mtotqr = mtotqr + (e*f) cwQuery := "select * from e40100000 where"+; " bcdg = " + "'"+alltrim(a)+"'"+; " order by bcdg asc;" owQuery := oServer:Query(cwQuery) b = owQuery:Fieldget(owQuery:Fieldpos('bprd')) c = owQuery:Fieldget(owQuery:Fieldpos('bund')) owQuery:destroy() oReport:StartLine() oReport:Say(2,alltrim(,1) oReport:Say(3,alltrim(d),3) oReport:Say(4,alltrim©,1) oReport:Say(5,transform(e,"@e 9,999.999"),1) oReport:Say(6,transform(f,"@e 99,999.99"),1) oREport:Endline() oQuery:Skip() END oQuery:destroy() oReport:StartLine() oReport:Say(6,transform(mtotqr,"@e 99,999.99"),1) oREport:Endline() ralte = mrez[obry] cQuery := "select * from e402a0000 where "+; "cemp = " + alltrim(str(memp)) +; " and cnsq = " + alltrim(str(ralte)) + " order by cnsq asc;" oQuery := oServer:Query(cQuery) rtcdt = oQuery:Fieldget(oQuery:Fieldpos('ctam')) && tamanho.. rccdc = oQuery:Fieldget(oQuery:Fieldpos('ccor')) && cor.. oQuery:destroy() if !empty(rtcdt) .and. !empty(rccdc) rbarr = "1"+strzero(val(mbcdg),6)+strzero(rtcdt,2)+ strzero(rccdc,3) rbarr = rbarr + digito_barras(mbcdb) oREport:Newline() oReport:StartLine() oReport:Say(2,"Codigo de barras",1) oReport:Say(3,rbarr,1) oREport:Endline() endif oREport:Newline() oREport:Newline() oREport:Newline() oReport:StartLine() oReport:Say(3," CROQUI DO PRODUTO",2) oREport:Endline() oREport:Newline() oREport:Newline() //aa = "" //for x = 1 to len(rbfig) // if substr(rbfig,x,1) = "%" // aa = aa + "\" // else // aa = aa + substr(rbfig,x,1) // endif //next //gcFile = aa endif return nil id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Editado por - SYSTEMUP on 18/06/2008 08:25:49
  6. Evaldo, Dê uma olhada neste tópico,, talvez esclareça um pouco mais sobre a sua dúvida... http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=12824 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  7. Alguem sabe a possibilidade de se imprimer um arquivo no formato jpeg, no preview do REPORT, e depois imprimilo..... oreport: etc.. Como se faz com o bmps,.. ou se e parecido com o que se usa na classe TPRINTER.. Se alguem souber,, ou ainda que não seja possível,, pois terei que mudar todos os meus relatórios para a outra classe.. Obrigado... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  8. Alguem sabe a possibilidade de se imprimer um arquivo no formato jpeg, no preview do REPORT, e depois imprimilo..... oreport: etc.. Como se faz com o bmps,.. ou se e parecido com o que se usa na classe TPRINTER.. Se alguem souber,, ou ainda que não seja possível,, pois terei que mudar todos os meus relatórios para a outra classe.. Obrigado... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  9. Valeu, Ricardo.. Com a classe Tprinter, sim.. sei que dá,, não to conseguindo é com a classe REPORT.. , mas valeu... Um abraço,, para vc e toda a família,, precisamos marcar o churrasco e a cervejada... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  10. Utilizo a classe REPORT..,, como faço para inserir imagens no preview e consequentemente na impressão.. no formato da imagem (jpg ou jpeg..) oReport:saybitmap(l,c,imagem,l,c), serve para jpg.. valeu... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Editado por - SYSTEMUP on 23/05/2008 09:02:42
  11. Utilizo a classe REPORT..,, como faço para inserir imagens no preview e consequentemente na impressão.. no formato da imagem (jpg ou jpeg..) oReport:saybitmap(l,c,imagem,l,c), serve para jpg.. valeu... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Editado por - SYSTEMUP on 23/05/2008 09:02:42
  12. Márcio,, Aconselho a vc,, pegar junto a qualquer bco,, de seu cliente um manual técnico de lay-out do código de barras (como se cáulcula o código de barras), para vc,, ler a sequencia númerica qdo o leitor ler as barras do boleto, que geralmente são do padrão 2X5 intercalado. Um exemplo... Para o vencimento... Considere o código.. lido a partir da leitora de código de barras.. 3419?1667000001234511012345678800571423457000 341 = Código do Banco 9 = Código da Moeda ? = DAC do Código de Barras 1667 Fator de Vencimento (01/05/2002) 0000012345 = Valor do Título (123,45) 110123456788 = Carteira/Nosso Número/DAC (110/12345678-8) 0057123457 = Agência/Conta Corrente/DAC (0057/12345-7) 000 = Posições Livres (zeros) FATOR DE VENCIMENTO... Formas para obtenção do Fator de Vencimento: Forma 1 Calcula-se o número de dias corridos entre a data base (“Fixada†em 07.10.1997) e a do vencimento desejado: VENCIMENTO 04/07/2000 DATA BASE - 07/10/1997 FATOR DE VENCIMENTO 1001 Forma 2 Utilizar-se de uma tabela de correlação DATA x FATOR, iniciando-se pelo fator “1000†correspondente à data de vencimento 03.07.2000, adicionando-se “1†a cada dia subsequente a este fator. FATOR VENCIMENTO 1000 03/07/2000 1001 04/07/2000 1002 05/07/2000 1003 06/07/2000 1004 07/07/2000 : : : : 1667 01/05/2002 4789 17/11/2010 9999 21/02/2025 Importante: 1) Bloquetos com vencimento “contra-apresentação†ou “à vista†O “fator de vencimento†deve ser obtido considerando-se a data de processamento do bloqueto, acrescido de 15 dias corridos; 2) Valor superior a 10 posições Bloquetos com valores superiores a R$ 99.999.999,99 (dez posições) deverão avançar sobre o fator de vencimento eliminando-o do código de barras. Atenção: Caso ocorra divergência entre a data impressa no campo “data de vencimento†e a constante no código de barras, o recebimento se dará da seguinte forma: • quando pago por sistemas eletrônicos (Home-Banking, Auto-Atendimento, Internet, Sispag, telefone, etc.), prevalecerá a representada no “código de barrasâ€; • quando quitado na rede de agências, diretamente no caixa, será considerada a data impressa no campo “vencimento†do bloqueto. OBS... ISSO DEPENDE DO TIPO DE CARTEIRA,, DA COMPOSIÇÃO DE BARRAS.. POR ISSO ACONSELHO ADQUIRIR UM MANUAL TÉCNICO JUNTO A QUALQUER BANCO,, PARA QUE VC,, ENTENDA MELHOR A COMPOSIÇÃO DAS BARRAS E FAZER A DECOMPOSIÇÃO... wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  13. Isso acima ocorre, qdo limpo o listbox a partir da 1º vez.Qdo entro na dialog e ele monta o browse, isto não ocorre, mas é só ter a necessidade de limpar a 1º vez, que ocorre sempre qdo limpo o listbox.. wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  14. Yury e Vagner, obrigado pelas dicas, mais ainda não consegui resolver o problema. Notei o seguinte. Quando chego no browse passando pelos gets, acima dele com a tecla TAB ou com a tecla ENTER, assim que posiciona o cursor no browse ele não passa da 1º linha do mesmo, não conseguindo movimentar com as teclas de direção, mas qdo chego no browse a partir do mouse, consigo movimentar dentro do browse normalmente com as setas de direção. Não consigo entender.. Obs.. tenho essa chamada de função, para o browse.. obrz:bKeyDown := {|nKey| if(nKey = VK_RETURN,editabrowse(),0)} id=code>id=code>e trabalho com oBrz:GoRight(),oBrz:GoDown(),oBrz:GoLeft(), dentro da edição dos campos do browse, poderia ter alguma influência.. com os ponteiro de direção do teclado. wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  15. Tem um listbox, assim... asamplz := {} aadd(asamplz,{space(06),space(25),space(06),space(25),space(06),space(25),space(06),space(06),space(25),space(06),space(15)}) @ 77.5,002 listbox obrz fields asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz]; headers "Codigo","Produto acabado","Cd.Tam.","Tamanho","Cd.Cor","Cor","Qtd","Codigo","Materia Prima","Qtd","CORTE" FIELDSIZES 045,125,030,110,050,125,040,045,110,040,040; size 388,100; pixel of corte obrz:lCellStyle = .t. obrz:lAutoSkip = .t. obrz:SetArray(asamplz) obrz:bGoTop = { || obrz:nat := 1 } obrz:bGoBottom = { || obrz:nat := Eval( obrz:bLogicLen ) } obrz:bSkip = { | nWant, nOld | nOld := obrz:nat, obrz:nat += nWant,; obrz:nat := Max( 1, Min( obrz:nat, Eval( obrz:bLogicLen ) ) ),; obrz:nat - nOld } obrz:bLogicLen = { || Len( asamplz ) } obrz:cAlias = "Array" // Just put something obrz:bKeyDown := {|nKey| if(nKey = VK_RETURN,editabrowse(),0)} obrz:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obrz:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obrz:nClrForeFocus := CLR_AM // cor da letra da barra ativa obrz:nClrPane := CLR_LG obrz:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obrz:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obrz:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obrz:lMChange := .F. // Desabilita Mousemove obrz:SetFocus() // Refocus on The Browse obrz:Refresh() // Estabiliza o Browse/Listbox id=code>id=code>Quando tento limpar o listbox,, e preencher novamente com informações.. ele limpa e preenche.. mostra todas as informações no listbox,, mas o cursor fica preso na 1º linha,, isso acontece qdo limpo o listbox como abaixo e preenche novamente e se eu sair novamente, da dialog e entrar fica normal até eu limpar novamente.. Alguem tem alguma idéia do que possa ser... asamplz := {} aadd(asamplz,{space(06),space(25),space(06),space(25),space(06),space(25),space(06),space(06),space(25),space(06),space(15)}) obrz:SetArray(asamplz) obrz:Refresh() id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  16. Tem um listbox, assim... asamplz := {} aadd(asamplz,{space(06),space(25),space(06),space(25),space(06),space(25),space(06),space(06),space(25),space(06),space(15)}) @ 77.5,002 listbox obrz fields asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz],asamplz[obrz],; asamplz[obrz]; headers "Codigo","Produto acabado","Cd.Tam.","Tamanho","Cd.Cor","Cor","Qtd","Codigo","Materia Prima","Qtd","CORTE" FIELDSIZES 045,125,030,110,050,125,040,045,110,040,040; size 388,100; pixel of corte obrz:lCellStyle = .t. obrz:lAutoSkip = .t. obrz:SetArray(asamplz) obrz:bGoTop = { || obrz:nat := 1 } obrz:bGoBottom = { || obrz:nat := Eval( obrz:bLogicLen ) } obrz:bSkip = { | nWant, nOld | nOld := obrz:nat, obrz:nat += nWant,; obrz:nat := Max( 1, Min( obrz:nat, Eval( obrz:bLogicLen ) ) ),; obrz:nat - nOld } obrz:bLogicLen = { || Len( asamplz ) } obrz:cAlias = "Array" // Just put something obrz:bKeyDown := {|nKey| if(nKey = VK_RETURN,editabrowse(),0)} obrz:nClrBackHead := CLR_LG // Cor do Fundo do Cabe‡alho obrz:nClrBackFocus := CLR_HB // Cor do Cursor Em Cima do Ötem obrz:nClrForeFocus := CLR_AM // cor da letra da barra ativa obrz:nClrPane := CLR_LG obrz:nColAct := 1 // Onde o Cursor Vai Iniciar qual coluna? obrz:nLineStyle := 3 // Estilo das linhas nos dados da Browse //obrz:aJustify := { .F., .F., .F., .F. } // Justifica os Cabe‡alhos Esq. .T. =Centro obrz:lMChange := .F. // Desabilita Mousemove obrz:SetFocus() // Refocus on The Browse obrz:Refresh() // Estabiliza o Browse/Listbox id=code>id=code>Quando tento limpar o listbox,, e preencher novamente com informações.. ele limpa e preenche.. mostra todas as informações no listbox,, mas o cursor fica preso na 1º linha,, isso acontece qdo limpo o listbox como abaixo e preenche novamente e se eu sair novamente, da dialog e entrar fica normal até eu limpar novamente.. Alguem tem alguma idéia do que possa ser... asamplz := {} aadd(asamplz,{space(06),space(25),space(06),space(25),space(06),space(25),space(06),space(06),space(25),space(06),space(15)}) obrz:SetArray(asamplz) obrz:Refresh() id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  17. Em vias normais, são: AL ALAGOAS 7,00 AM AMAZONAS 7,00 AC ACRE 7,00 AP AMAPA 7,00 BA BAHIA 7,00 CE CEARA 7,00 DF DISTRITO FEDERAL 7,00 ES ESPIRITO SANTO 7,00 GO GOIAS 7,00 MA MARANHAO 7,00 MT MATO GROSSO 7,00 MS MATO GROSSO DO SUL 7,00 MG MINAS GERAIS 18,00 PA PARA 7,00 PB PARAIBA 7,00 PR PARANA 12,00 PE PERNAMBUCO 7,00 PI PIAUI 7,00 RJ RIO DE JANEIRO 12,00 RN RIO GRANDE DO NORTE 7,00 RS RIO GRANDE DO SUL 12,00 RD RONDONIA 7,00 RR RORAIMA 7,00 SC SANTA CATARINA 12,00 SP SAO PAULO 12,00 SE SERGIPE 7,00 TO TOCANTINS 7,00 observando. que tudo depende logicamente do C.S.T do produto, do tipo de operação CFOP,se a empresa em questão teve algum tipo de icentivo fiscal,, e tantas outras coisas que a legislação tributária tem de pior.. wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  18. Utilizo uma contrib do xharbour -> contrib -> mysql e pgsql pgsql(postgresql - logo já fiz alterações para uso próprio, junto com a lib do POSTGRESQL.) Com a lib do pgsql,, vc,, se conecta com qualquer versão do postgresql,, já com a do mysql ( acredito que é apenas uma versão não sei qual ).. utiliza-se em ambos os casos as Query´s.. POSTGRESQL... ***Conectando a base de dados.. cServer = alltrim(pServ) && servidor postgresql de dados cDatabase = alltrim(pdata) cUser = alltrim(pUser) && usuario cPass = alltrim(pPass) && senha da base oServer := TPQServer():New(cServer, cDatabase, cUser, cPass) if oServer:NetErr() msgstop("erro de conexão com a base de dados!","Atenção") return nil endif ***Criando base de dados... if oServer:TableExists("r50000000") else cQuery := 'CREATE TABLE r50000000(' cQuery += 'aesq serial primary key,' && codigo sequencia de empresa. cQuery += 'aden Varchar(40),' && razao social cQuery += 'aend Varchar(40),' && endereco cQuery += 'anro Numeric(5,0),' && numero cQuery += 'acpl Varchar(40),' && complemento cQuery += 'abai Varchar(30),' && bairro cQuery += 'acep Varchar(8),' && cep cQuery += 'acid Varchar(30),' && cidade cQuery += 'aest character(2),' && estado.. cQuery += 'andn character(14),' && numero do cnpj cQuery += 'aies character(18),' && inscricao estadual cQuery += 'atf1 character(10),' && telefone cQuery += 'atf2 character(10),' && telefone cQuery += 'afax character(10),' && fax cQuery += 'aeml Varchar(50),' && email cQuery += 'atxj double precision,' && taxa de juros ao dia.. cQuery += 'amul double precision,' && multa ao mes.. cQuery += 'adcv Numeric(5,0),' && qtd de dias de carencia.. cQuery += 'ancd integer,' && numero controle docum. cQuery += 'amoe character(02),' && moeda.. cQuery += 'aplc character(15),' && mascara do plano de contas.. cQuery += 'aexp Numeric(5,0),' && expurgo do contas a pagar cQuery += 'aexr Numeric(5,0),' && expurgo do contas a receber cQuery += 'apnr boolean,' && permitir nome ou razao social.. cQuery += 'aeno boolean,' && endereco obrigatorio.. cQuery += 'abro boolean,' && bairro obrigatorio.. cQuery += 'acpo boolean,' && cep obrigatorio.. cQuery += 'afjo boolean,' && cpf ou cnpj obrigatorio.. cQuery += 'aino boolean,' && inscricao ou documento obrigatorio.. cQuery += 'avdc boolean,' && deseja vendas em conceito.. cQuery += 'avrc Numeric(1,0),' && 1-valor 2-quantidade.. cQuery += 'adaa Numeric(3,0),' && dias.. cQuery += 'acoa character(20),' && conceito cQuery += 'adab Numeric(3,0),' && dias.. cQuery += 'acob character(20),' && conceito cQuery += 'adac Numeric(3,0),' && dias.. cQuery += 'acoc character(20),' && conceito cQuery += 'adad Numeric(3,0),' && dias.. cQuery += 'acod character(20),' && conceito cQuery += 'adae Numeric(3,0),' && dias.. cQuery += 'acoe character(20),' && conceito cQuery += 'adaf Numeric(3,0),' && dias.. cQuery += 'acof character(20),' && conceito. cQuery += 'apft Numeric(1,0),' && 1-fisica 2-juridica 3-todos.. cQuery += 'adcp Numeric(3,0),' && dias para carencia preferencial.. cQuery += 'acxq Numeric(3,0),' && 1-cair no caixa no dia corrente 2-cair no caixa no dia da baixa 3-Nunca cair no caixa.. cQuery += 'adtc Date)' && data do cadastro.. oQuery := oServer:Query(cQuery) if oQuery:neterr() msgstop("Não foi possível criar arquivo de empresas. O sistema sera finalizado.","ATENÇÃO") oServer:Destroy() return .t. endif oQuery:Destroy() endif id=code>id=code>wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  19. Lembrando que se não for passado nenhuma tabela como parâmetro, o VACUUM irá processar todas as tabelas do banco de dados corrente. O comando VACUUM simples (sem o FULL) apenas recupera o espaço tornando-o disponível para ser reutilizado. Esta forma do comando pode operar em paralelo com a leitura e escrita normal, porque não requer o bloqueio exclusivo da tabela. O VACUUM FULL executa um processamento mais extenso, incluindo a movimentação das tuplas entre blocos para tentar compactar a tabela no menor número de blocos de disco. Esta forma é muito mais lenta e requer o bloqueio exclusivo de cada tabela para processá-la. portanto, não é recomendada para uso rotineiro, mas pode ser útil em casos especiais. Por exemplo, após ter sido excluída a maioria das linhas da tabela e deseja-se que a tabela seja fisicamente encolhida para ocupar menos espaço em disco ou quando a tabela ficou muito tempo sem receber o comando VACUUM. O comando VACUUM FULL geralmente encolhe mais a tabela que o comando VACUUM simples. O FREEZE é uma opção com finalidade especial, que faz as tuplas serem marcadas como “congeladas†logo que possível, em vez de aguardar até estarem bastante velhas. Se for feito quando não existir nenhuma outra transação em aberto no mesmo banco de dados, então é garantido que todas as tuplas do banco de dados sejam "congeladas" e não estarão sujeitas aos problemas do recomeço do ID de transação, não importando quanto tempo o banco de dados for deixado sem executar o comando VACUUM. O FREEZE não é recomendado para uso rotineiro. Sua única utilização pretendida é em conjunto com a preparação de bancos de dados modelo definidos pelos usuários, ou outros bancos de dados somente de leitura, que não receberão operações da rotina de manutenção VACUUM. Ao contrário do comando VACUUM FULL, o comando ANALYZE requer somente um bloqueio de leitura na tabela podendo, portanto, ser executado em conjunto com outras atividades na tabela. Quando VERBOSE é especificado, o comando ANALYZE emite mensagens de progresso indicando qual tabela está sendo processada no momento. Diversas estatísticas sobre as tabelas também são mostradas. As estatísticas coletadas pelo comando ANALYZE geralmente incluem a lista dos valores mais comuns de cada coluna, e um histograma mostrando a distribuição aproximada dos dados em cada coluna. Estas informações podem ser omitidas se o comando ANALYZE considerá-las sem importância (por exemplo, em uma coluna de chave única não existem valores repetidos), ou se o tipo de dado da coluna não suportar os operadores apropriados. Para tabelas grandes, o comando ANALYZE pega amostras aleatórias do conteúdo da tabela, em vez de examinar todas as linhas. Esta estratégia permite que mesmo tabelas muito grandes sejam analisadas em curto espaço de tempo. Entretanto, deve ser observado que as estatísticas são apenas aproximadas, sendo um pouco diferentes cada vez que o comando ANALYZE é executado, mesmo que o conteúdo da tabela não se altere, podendo provocar pequenas mudanças no custo estimado pelo planejador mostrado pelo comando EXPLAIN. Em situações raras, este não determinismo faz o otimizador de consultas escolher um plano diferente entre execuções do comando ANALYZE. É recomendado o uso diário do VACUUM, normalmente durante a noite, quando os acessos ao banco não são tão intensos. Também é recomendado o uso do VACUUM ANALYZE logo após um grande número de atualizações e exclusões de dados numa tabela, para que os catálogos do sistema sejam atualizados, permitindo o planejador de comandos do PostgreSQL fazer melhores escolhas ao planejar os comandos wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  20. Configura a memória alocada para Vacuum. Deve acelerar permitindo que PostgreSQL copie grandes quantidades para a memória. ... Segue abaixo um bom artigo... == 15.5 – Dicas sobre Desempenho e Otimizações do PostgreSQL == Existem duas principais formas de melhorar o desempenho de SGBDs: uma é melhorando o hardware, com CPUs, RAM, Discos mais novos, rápidos e confiáveis. A outra é otimizando as consultas realizadas nos bancos (usando VACUUM, VACUUM ANALYZE, EXPLAIN, criando CLUSTERS, entre outros). Uma das medidas básicas adotada para melhorar o desempenho de tabelas com grandes quantidades de registros e especialmente com muitos acessos, é a inclusão de índices estratégicos. Além da chave primária é importante inserir índices em campos que compõem a cláusula WHERE, que fazem parte de cláusulas ORDER BY, GROUP BY entre outras. Em consultas com WHERE de vários campos usando OR, não adianta inserir índice, pois não será utilizado pelo PostgreSQL, somente usando AND. Na criação do banco de dados e especialmente na criação das consultas é muito importante atentar para um bom planejamento, normalização, consultas otimizadas tendo em vista o planejador de consultas do PostgreSQL através do uso dos comandos EXPLAIN e ANALYZE. A administração do PostgreSQL também é muito importante para tornar o SGBD mais eficiente e rápido. Desde a instalação e configuração temos cuidados que ajudam a otimizar o PostgreSQL. Adaptação do Artigo sobre otimização do PostgreSQL do Diogo Biazus e do original do Bruce Momjian (http://www.ca.postgresql.org/docs/momjian/hw_performance). '''Hardware''' No computador as informações são manipuladas pelos registradores da CPU, pelo cache da CPU, pela memória RAM e pelos discos rígidos. Na prática as informações utilizadas com mais freqüência são colocadas próximas à CPU. Quem determina que informações devem ficar nos registradores são os compiladores. Cache da CPU guarda ar informações utilizadas recentemente. O Sistema Operacional controla o que está armazenado na RAM e o que mandar para o disco rígido. Cache e Registradores da CPU não podem ser otimizados diretamente pelo administrador do SGBD. Efetivamente otimização em bancos de dados envolvem aumento da quantidade de informações úteis na RAM, prevenindo acesso a disco sempre que possível. Não é tarefa simples de ser colocada em prática, pois a memória RAM guarda muitas outras informações: programas em execução, pilhas e dados de programas, memória cache compartilhada do PostgreSQL, cache do buffer de disco do kernel e kernel. Otimização correta de bancos de dados procura manter a maior quantidade possível de informações do banco na memória RAM ao mesmo tempo que não afeta as demais áreas do sistema operacional. Existem dois tipos de configuração de memória no PostgreSQL, a compartilhada e a individual. A compartilhada tem um tamanho fixo, ela é alocada sempre que o PostgreSQL inicializa e então é compartilhada por todos os clientes. Já a memória individual é tem um tamanho variável e é alocada separadamente para cada conexão feita ao SGBD. '''Memória Cache Compartilhada do PostgreSQL''' O PostgreSQL não altera as informações diretamente no disco. Ao invés disso ele solicita que os dados sejam lidos da memória cache compartilhada do PostgreSQL. O cliente PostgreSQL então lê e escreve os blocos e finalmente escreve no disco. Clientes que precisam acessar tabelas primeiro procuram pelos blocos necessários no cache. Caso estejam aí então continuam processando normalmente. Caso contrário é feita uma solicitação ao sistema operacional para carregar os blocos. Os blocos são carregados do cache de buffer de disco do kernel ou diretamente do disco. Estas operações podem ser onerosas (lentas). Na configuração default do PostgreSQL 8.1.3 ele aloca 1000 shared buffers. Cada buffer usa 8KB, o que soma 8MB. Aumentando o número de buffers fará com que os clientes encontrem as informações que procuram em cache e evita requisições onerosas ao sistema operacional. Mas cuidado, pois se aumentar muito a memória compartilhada (shared buffers) pode acarretar uso da memória virtual (swap). As alterações podem ser feitas através do comando postmaster na linha de comando ou através da configuração do valor do shared_buffers no postgresql.conf. '''Que Porção da RAM Reservar para o PostgreSQL?''' A maior porção útil que não atrapalhe os outros programas. Nos sistemas UNIX as informações saem da RAM (quando insuficiente) para o swap. Ruim é quando as informações voltam do swap para a RAM, pois então os programas são suspensos até que as mesmas sejam carregadas. '''Tamanho da Cache''' Imaginemos que o PostgreSQL shared buffer cache seja suficiente para manipular uma tabela inteira. Repetidas buscas seqüenciais da tabela não devem necessitar de acesso ao disco já que todos os dados já estão em cache. Agora vamos imaginar que o cache é menor que a tabela, então neste caso as informações irão para o disco (swap) e terão um desempenho bem inferior. Tamanho Adequado da Shared Buffer Cache Idealmente a PostgreSQL shared buffer cache (Memória Cache Compartilhada do PostgreSQL) deve ser: Grande o suficiente para conseguir manipular as tabelas mais comumente acessadas. Pequena o bastante para evitar atividades de swap pagein. Exemplo: Por exemplo queremos x MB para memória compartilhada ( x / 8 ) * 1024 = Resultado a ser configurado em shared_buffer Se x = 768 MB (768 / 8) * 1024 Resultado a ser configurado em shared_buffer = 98304 Para informações sobre uma configuração do kernel para que vários sistemas operacionais trabalharem com o PostgreSQL: http://developer.postgresql.org/docs/postgres/kernel-resources.html '''Memória Individual (Sort Memory)''' Principalmente utilizada em ordenações de registros das tabelas, em operações de criação de índices, ordenação (order by), merge join, etc. Esta memória pode ser configurada através do parâmetro sort_mem do postgresql.conf. Para a configuração leve em conta sua memória disponível (incluindo a memória já alocada para o shared buffers), também o número médio de conexões e o uso da memória virtual (swap). Exemplo: Considerando um servidor dedicado (rodando somente o servidor PostgreSQL), com memória RAM de 1,5GB e com até 10 conexões simultâneas com o SGBD: shared_buffers = 80000 # 80.000 blocos de 8KB = 625 MB sort_mem = 64000 # tamanho em KB = 62,5 MB, para cada usuário com # 10 usuários = 526 MB vacuum_mem = 2000 Por exemplo: queremos x KB para memória individual sort_men ( x * 1024 ) = resultado para memória individual x = 16 (16 * 1024) = sort_mem = 16384 Seria bom mudar também memória para vaccum vacuum_mem = 131072 (mesmo cálculo do sort_mem) '''Uso de Vários Discos''' Em sistemas com mais de um disco podemos melhorar a performance do mesmo distribuindo algumas tarefas entre discos diferentes. Supondo que temos dois HDs, hda e hdb: Movendo os logs de transação para outro disco: - Parar o PostgreSQL - Montar hdb em /mnt/hdb - Mover a pasta /usr/local/pgsql/data/pg_xlog para o /mnt/hdb - Criar um link simbólico para o diretório original: ln -s /mnt/hdb/pg_xlog /usr/local/pgsql/data/pg_xlog - Banco - /usr/local/pgsql/data (no hda) - Logs - /usr/local/pgsql/data/pg_xlog (link simbólico para /mnt/hdb/pg_xlog). Os logs de transação são os únicos registros que não podem ter o seu salvamento em disco adiado sem comprometer a segurança do sistema. Mover os índices para um HD diferente de onde estão as tabelas: - Parar PostgreSQL - Mover os índices para o hdb - Criar link simbólico para o local original '''Para recriar os índices em outro Tablespace:''' ALTER TABLE nometabela DROP CONSTRAINT nomeconstraint; CREATE INDEX nome_idx ON nometabela (nomecampo) TABLESPACE nometablespace; ALTER TABLE nometabela ADD CONSTRAINT nome_pk PRIMARY KEY (nomecampo); ALTER INDEX nome_idx SET TABLESPACE nometablespace; Ainda podemos separar astabelas mais utilizadas para o hdb, utilizando o comando tablespace no PostgreSQL 8.1.3 podemos fazer isso: - Criar diretório /mnt/hdb/hotcluster e tornar postgres seu dono CREATE TABLESPACE hotcluster OWNER postgres LOCATION '/mnt/hdb/hotcluster'; '''Criando um banco no novo cluster:''' CREATE DATABASE hotbanco TABLESPACE = hotcluster; Exportar as tabelas para este banco. Uso de Mais de Um Processador Atualmente o PostgreSQL está otimizado para uso de vários processadores, reforçando que cada conexão é gerenciada por um processo diferente. '''Sistemas de Arquivos''' Para sistemas BSD usa-se o tradicional UFS, que é robusto, rápido e tem a vantagem em relação ao PostgreSQL, de possuir os blocos de disco com um tamanho padrão de 8KB. Para quem utiliza Linux as sugestões vão para EXT3 e ReiserFS. '''Checkpoints''' O wal_files é o parâmetro do postgresq.lconf que determina o número de arquivos usados pelo PostgreSQL para armazenar os logs de transação. Estes arquivos focam em pg_xlog, na pasta de dados. Para que apareçam as datas e horas nos arquivos de logs usa-se no postgresql.conf: log_timestamp = true Para reduzir a freqüência dos checkpoints devemos aumentar o parâmetro do postgresql.conf: checkpoint_segments = 3 (valor default) O PostgreSQL não precisa de muito ajuste. Boa parte dos parâmetros é automaticamente ajustada para uma performance ótima. O cache size e sort size são dois parâmetros que o administrador pode controlar para ter um melhor uso da memória. Tradução do Tutorial “Tuning PostgreSQL for Performance†De Shridhar Daithankar e John Berkus '''Shared Buffers''' Definem um bloco de memória que o PostgreSQL usará para lidar com requisições que estão aguardando atenção no buffer do kernel e na CPU. Deve ser manipulada com cuidado, pois simplesmente ampliada pode prejudicar a performance. Esta é a área que o PostgreSQL usa atualmente para trabalhar. Ela deve ser suficiente para controlar a carga do servidor do SGBD, do contrário o PostgreSQL irá iniciar empurrando dados para arquivos e isto irá prejudicar a performance geral. Esta é a principal configuração em termos de performance. Seu valor deve ser configurado tendo em vista o tamanho do conjunto de bancos que se supões que no máximo o servidor irá carregar e da memória RAM (ter em mente que a memória RAM utilizada pelos demais aplicativos do servidor não estarão disponíveis). '''Recomendações:''' - Iniciar com 4MB (512) Workstation - Médio tamanho do conjunto de bancos de dados e 256 a 512MB disponível de RAM: 16-32MB (2948 a 4096) - Grande conjunto de bancos de dados e muita memória RAM disponível (1 a 4GB): 64 -256MB (8192 a 32768) Obs.: Até para um conjunto de bancos de dados (dataset) que exceda 20GB, uma configuração de 128MB deve ser muito, caso você tenha apenas 1GB de RAM e um agressivo sistema de cache em Sistema Linux. '''Sort Memory (Memória para Ordenação)''' Limite máximo de memória que uma conexão pode usar para executar sort (ordenação). Caso suas consultas usem as cláusulas ORDER BY ou GROUP BY que ordenem grandes conjuntos de dados, incrementar este parâmetro deverá ajudar. '''Uma Recomendação:''' Ajustar o parâmetro por conexão como e quando precisar: pouca para consultas mais simples e muita para consultas complexas e para dumps de dados. Effective Cache Size (Tamanho do Cache Efetivo) Permite ao PostgreSQL fazer melhor uso da RAM disponível no servidor. Exemplo: Caso exista 1,5GB de RAM na máquina, shared buffers deve ser ajustado para 32MB e effective cache size para 800MB. '''Fsync and the WAL files (Fsync e arquivos de WAL)''' Caso não reste nenhuma opção, poderá usar a proteção do WAL e melhor performance. Simplesmente mova seus arquivos de WAL, montando outro dispositivo ou criando um link simbólico para o diretório pg_xlog, para um disco separado ou para o conjunto dos arquivos do seu cluster principal de arquivos de dados. '''random_page_cost (custo de página aleatória)''' Configura o custo para trazer um registro aleatório de um banco de dados, que influencia a escolha do planejador em usar index ou table scan. Caso tenha um disco razoavelmente rápido como SCSI ou RAID, pode baixar o custo para 2. '''Vacuum_mem''' Configura a memória alocada para Vacuum. Deve acelerar permitindo que PostgreSQL copie grandes quantidades para a memória. Entre 16-32MB é uma boa quantidade para muitos sistemas. '''max_fsm_pages''' PostgreSQL grava espaço livre em cada uma de suas páginas de dados. Caso tenha um banco que usa muitos updates e deletes, que irá gerar registros mortos, devido ao sistema MVCC do PostgreSQL, então expanda o FSM para cobrir todos estes registros deads (mortos) e nunca mais precisará rodar vacuum full a não ser em feriados. O mínimo FSM é max_fsm_relations * 16. max_fsm_relations Diz quantas tabelas devem ser localizadas no mapa de espaço livre. '''wal_buffers''' Esta configuração decide a quantidade de buffers WAL (Write Ahead Log) que pode ter. Para chegar a uma quantidade ótima experimente e decida. Um bom início está em torno de 32 a 64 correspondendo a 256-516 KB de memória. '''Ativar o subprocesso do auto Vacuum''' Vem desabilitado por defualt (autovacuum = off no 8.1.3). Para ativar edite o arquivo de configuração postgresq.conf e altere para autovacuum = on. Irá executar o vacuum quando necessário. Melhor é executar o comando vacuum juntamente com o comando analyze: vacuumdb -U postgres -a, caso seja executado na linha de comando. Para adquirir informações sobre os índices (tornando a performance ainda melhor): vacuumdb -U postgres -a -z '''EXPLAIN''' #!/usr/bin/perl $count = 1; $arquivosaida = "populate.sql"; @chars = ("A" .. "Z", "a" .. "z", 0 .. 9); @numbers = (1 .. 9); @single_chars = ("a" .. "e"); $totalrecords = 5000; # 5 milhões open(OUTPUT, "> $arquivosaida"); print OUTPUT "DROP TABLE index_teste;\n"; print OUTPUT "CREATE TABLE index_teste ("; print OUTPUT "codigo INT, nome VARCHAR(10), numero INT, letra CHAR(1)"; print OUTPUT ");\n"; print OUTPUT "COPY index_teste (codigo, nome, numero, letra) FROM stdin;\n"; while ($count <= $totalrecords){ $randstring = join("", @chars [map{rand @chars} ( 1 .. 8 ) ]); $randnum = join("", @numbers [map{rand @numbers} ( 1 .. 8 ) ]); $randletter = join("", @single_chars [map{rand @single_chars} (1)]); print OUTPUT #print OUTPUT "INSERT INTO index_teste VALUES($count,'$randstring',$randnum,'$randletter');\n"; $count."\t".$randstring."\t".$randnum."\t".$randletter."\n"; $count++; }; #print OUTPUT "\n"; #print OUTPUT "\nCREATE INDEX indexteste_codigo_index ON index_teste(codigo);\n"; #print OUTPUT "CREATE INDEX indexteste_numero_index ON index_teste(numero);\n"; #print OUTPUT "VACUUM ANALYZE index_teste;\n"; close OUTPUT; wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  21. A CodeGear irá promover 1 dia inteiro com 7 apresentações, todas on-line, oferecendo informação técnica, visão e conceitos práticos do novo JBuilder 2008 para os desenvolvedores. (25/04/2008) Os participantes terão a oportunidade de perguntar aos experts sobre: Arquitetura de software UML 2.0 Desenvolvimento Web EJB, JPA, Hibernate, Web Services Application Factories Desenvolvimento desktop em Java Gerenciamento de equipes de desenvolvimento Inscrições no site... http://dn.codegear.com/br/article/37824 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  22. A CodeGear irá promover 1 dia inteiro com 7 apresentações, todas on-line, oferecendo informação técnica, visão e conceitos práticos do novo JBuilder 2008 para os desenvolvedores. (25/04/2008) Os participantes terão a oportunidade de perguntar aos experts sobre: Arquitetura de software UML 2.0 Desenvolvimento Web EJB, JPA, Hibernate, Web Services Application Factories Desenvolvimento desktop em Java Gerenciamento de equipes de desenvolvimento Inscrições no site... http://dn.codegear.com/br/article/37824 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  23. Desculpem, a postagem não é sobre programação... e que acre dito ser de interesse mútuo para todos.. A CodeGear irá promover 1 dia inteiro com 7 apresentações, todas on-line, oferecendo informação técnica, visão e conceitos práticos do novo JBuilder 2008 para os desenvolvedores. (25/04/2008) Os participantes terão a oportunidade de perguntar aos experts sobre: Arquitetura de software UML 2.0 Desenvolvimento Web EJB, JPA, Hibernate, Web Services Application Factories Desenvolvimento desktop em Java Gerenciamento de equipes de desenvolvimento Inscrições no site... http://dn.codegear.com/br/article/37824 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  24. Desculpem, a postagem não é sobre programação... e que acre dito ser de interesse mútuo para todos.. A CodeGear irá promover 1 dia inteiro com 7 apresentações, todas on-line, oferecendo informação técnica, visão e conceitos práticos do novo JBuilder 2008 para os desenvolvedores. (25/04/2008) Os participantes terão a oportunidade de perguntar aos experts sobre: Arquitetura de software UML 2.0 Desenvolvimento Web EJB, JPA, Hibernate, Web Services Application Factories Desenvolvimento desktop em Java Gerenciamento de equipes de desenvolvimento Inscrições no site... http://dn.codegear.com/br/article/37824 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
  25. Minha sincera e humilde opinião sobre este assunto. 1º - No mercado competitivo e globalizado, como o nosso o maior diferencial esta sendo a qualidade do produto e e o referencial ao atendimento que é prestado. Cada vez mais as empresas mesmo que pertençam a um mesmo segmento, utilizam técnicas diferenciadas na administração de suas empresas, portanto o mesmo software, sem alterações, mensais e exclusivas para cada empresa não consiguirá atender um grande numero de empresas como no passado.. SENDO assim não saíremos nunca do mercado, pois nosso diferencial, esta no atendimento olho a olho e prestação de serviços personalizados e com muita qualidade. Memos os softwares, fiscais, mesmo que licenciados, junto aos orgãos competentes, não conseguem escapar dos erros humanos que acontecem todos os dias.. vejamos... Um sistema que faça o SINTEGRA, de documentos fiscais que entram e saem, mas se o documento fiscal, que veio já conter erro, ou ainda o SINTEGRA, desenvolvido pelas receitas não contemplam alguns situações da situação tributária do país, logo, necessário se faz a presença do programador para ajustar.. o software, de acordo com as resoluções que vão surgindo.. Mesmo que venham softwares gratuitos de grandes coorporações, ainda sim se faz necessário a presença do programador diretamente com o empresário.. pois neste país acho quase impossível que uma automação comercial, consiga englobar tudo sobre administração,comercio, financeiro e fis cal, devido as diferenças e divergência no tocante a administração de cada empresa.. Finalizando, podemos nos tranquilizar pois teremos sempre mercado para competirmos e incluirmos nosso softwares, lembrando sempre com qualidade e excelente atendimento.. obrigado,, wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br
×
×
  • Create New...