Jump to content
Fivewin Brasil

Luiz Fernando

Membros
  • Posts

    3,368
  • Joined

  • Last visited

  • Days Won

    40

Everything posted by Luiz Fernando

  1. Opa legal Evandro não sabia disto, o codigo fica mais limpo, sera que ganha tb em desempenho. Obrigado
  2. Bom dia, colegas num cliente vou ter que gerar coisa de 12000 insert de uma unica vez, são 3 tabelas, então seria 36000, como terei que fazer isto uma vez por mês, queria otimizar a rotina da melhor forma possivel, veja abaixo como fiz, caso alguém tiver uma sugestão de melhorar este processo. 1) primeiro passo crio um array com todos os registro que deverão ser inserido na tabela for i=1 to len(aSql) for j=1 to 12 if !empty(cData[j]) pegar_numero_pedido(@cPedido) // inserir venda na array aadd(aVendas, { space(9),ctod(""),space(6),0,0,0,0,space(2),space(1),space(3),space(2),0,space(2)} ) a1++ aVendas[a1,1]:=cPedido // 01 pedido aVendas[a1,2]:=cEmissao[j] // 02 emissao aVendas[a1,3]:=aSql[i,1] // 03 cliente aVendas[a1,4]:=val(aSql[i,3]) // 04 subtotal aVendas[a1,5]:=0 // 05 descoonto aVendas[a1,6]:=val(aSql[i,3]) // 06 total aVendas[a1,7]:=0 // 07 encargo aVendas[a1,8]:=cTerminal // 08 terminal aVendas[a1,9]:='2' // 09 condicao aVendas[a1,10]:=aSql[i,7] // 10 vendedor aVendas[a1,11]:=cUsuario // 11 usuario if aSql[i,9]='0' aVendas[a1,12]:=1 // 12 operacao else aVendas[a1,12]:=3 // 12 operacao endif aVendas[a1,13]:=space(2) // 13 empresa // inseir parcela aadd(aParcela,space(9),space(4),space(11),ctod(""),0,space(6),ctod(""),space(1),space(2),space(2),0,space(2),space(2),space(3),space(2) ,space(6),,"","","","","","","","",space(40) } ) a2++ aParcela[a2,1]:=cPedido // 01 pedido aParcela[a2,2]:="0101" // 02 fatura aParcela[a2,3]:=cPedido+"A" // 03 duplicata aParcela[a2,4]:=cData[j] // 04 vencto aParcela[a2,5]:=val(aSql[i,3]) // 05 valor da parcela aParcela[a2,6]:=aSql[i,1] // 06 cliente aParcela[a2,7]:=cEmissao[j] // 07 data da emissão aParcela[a2,8]:='2' // 08 condicao aParcela[a2,9]:=aSql[i,5] // 09 forma de pagto aParcela[a2,10]:=aSql[i,6] // 10 tipo de documento if aSql[i,9]='0' aParcela[a2,11]:=1 // 11 operacao else aParcela[a2,11]:=3 // 11 operacao endif aParcela[a2,12]:=cTerminal // 12 terminal aParcela[a2,13]:=cUsuario // 13 usuario aParcela[a2,14]:=aSql[i,7] // 14 vendedor aParcela[a2,15]:=aSql[i,8] // 15 carteira aParcela[a2,16]:=space(6) // 16 numero do boleto aParcela[a1,17]:=aSql[i,11] // 17 endereco aParcela[a1,18]:=aSql[i,12] // 18 numero aParcela[a1,19]:=aSql[i,13] // 19 complemento aParcela[a1,20]:=aSql[i,14] // 20 bairro aParcela[a1,21]:=aSql[i,15] // 21 municipio aParcela[a1,22]:=aSql[i,16] // 22 estado aParcela[a1,23]:=aSql[i,17] // 23 cep aParcela[a1,24]:=aSql[i,18] // 24 cnpj_cnpf aParcela[a1,25]:=aSql[i,2] // 25 razao social // insetir pedido aadd(aPedido, { space(9),space(1),space(6),0,0,0,ctod(""),space(6),0,0 } ) a3++ aPedido[a3,1]:=cPedido // 01 numero do pedido aPedido[a3,2]:='1' // 02 tipo '1' venda aPedido[a3,3]:=aSql[i,10] // 03 codigo do produto aPedido[a3,4]:=1.00 // 04 qtde aPedido[a3,5]:=val(aSql[i,3]) // 05 valor da parcela aPedido[a3,6]:=0 // 06 desconto aPedido[a3,7]:=cEmissao[j] // 07 data da emissao aPedido[a3,8]:=aSql[i,1] // 08 cliente aPedido[a3,9]:=0.00 // 09 custo if aSql[i,9]='0' aPedido[a3,10]:=1 // 10 operacao else aPedido[a3,10]:=3 // 10 operacao endif endif next next 2) depois faço o INSERT em cada tabela, da forma abaixo // Gravar Vendas SQLBeginTrans() for i=1 to len(aVendas) * 1 2 3 4 5 6 7 8 9 cSql:="INSERT INTO vendas(pedido,data,cliente,subtotal,desconto,total,encargo,terminal,condicao" * 10 11 12 13 14 15 cSql+=",vendedor,usuario,data1,hora1,operacao,empresa"+")" cSql+="VALUES( "+any2sql(aVendas[i,1])+" ," // 01 cSql+=" "+any2sql(aVendas[i,2])+" ," // 02 cSql+=" "+any2sql(aVendas[i,3])+" ," // 03 cSql+=" "+any2sql(aVendas[i,4])+" ," // 04 cSql+=" "+any2sql(aVendas[i,5])+" ," // 05 cSql+=" "+any2sql(aVendas[i,6])+" ," // 06 cSql+=" "+any2sql(aVendas[i,7])+" ," // 07 cSql+=" "+any2sql(aVendas[i,8])+" ," // 08 cSql+=" "+any2sql(aVendas[i,9])+" ," // 09 cSql+=" "+any2sql(aVendas[i,10])+" ," // 10 cSql+=" "+any2sql(aVendas[i,11])+" ," // 11 cSql+=" SUBSTRING(now(),1,10) ," // 12 cSql+=" SUBSTRING(now(),12,5) ," // 13 cSql+=" "+any2sql(aVendas[i,12])+" ," // 14 cSql+=" "+any2sql(aVendas[i,13])+")" // 15 SqlExecute(cSql) if SQLErrorNO() > 0 fMensagem() return(.f.) endif next SqlExecute("commit") SQLRollBack() SQLEndTrans() SQLRefresh()
  3. oBoleto:DataDocumento := TRANSF( Date() - 1 ,'@E 99/99/9999' ) //"02/05/2012" oBoleto:DataProcessamento := TRANSF( Date() ,'@E 99/99/9999' ) //"03/05/2012" O problema estava aqui,pois nunca tinha declarado estas variaveis, e no caso do sicredi elas são usado no calculo da linha digitavel. Obrigado Fladimir pela ajuda. Luiz Fernando empresoft@globo.com
  4. Eu tb tenho interesse, ou qq outra solução de TEF Luiz Fernando empresoft@globo.com
  5. Aqui tb estou com problema no SAT da epson, comprei umas rotinas do Gilmer na época que iniciei o SAT no meu sistema, com estas rotinas só fui substituindo as DLL (bematech, elgin e sweda) e sempre deu certo, agora com a epson sem sucesso aqui. Abs Luiz Fernando
  6. Kapiaba veja o codigo da browse oBrw_atende2:=TXBrowse():New( oPe_atende ) oBrw_atende2:CreateFromResource( 160 ) oBrw_atende2:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } } oBrw_atende2:nMarqueeStyle := MARQSTYLE_HIGHLROW oBrw_atende2:nHeaderLines := 1.3 oBrw_atende2:nColDividerStyle := LINESTYLE_BLACK oBrw_atende2:nRowDividerStyle := LINESTYLE_BLACK oBrw_atende2:lAllowColSwapping := .T. oBrw_atende2:lAllowRowSizing := .t. oBrw_atende2:lHScroll := .f. oBrw_atende2:lColDividerComplete := .t. oBrw_atende2:nColSel := 2 oBrw_atende2:l2007 = .T. oBrw_atende2:lFooter := .T. oBrw_atende2:nStretchCol := STRETCHCOL_LAST oBrw_atende2:bSeek := {|c| PSeek( c, cGet[1], oGet[1], oBrw_atende2, aSql_atende, iif(ascan(cTabela,cTabe)=2,3,2) ) } oBrw_atende2:bKeyDown := { | nKey | IF( nKey == VK_RETURN,(selecionar1(oBrw_atende2:nArrayAT,@oCodigo,@oNome),; oDlg:Update(),oPe_atende:Cargo:=.t.,oPe_atende:end()),tarefa(nKey,@cTabe,oPe_atende,@cGet[1],oBrw_atende2,@cTabela,@aSql_atende) ) } oBrw_atende2:bLDblClick:={|| (selecionar1(oBrw_atende2:nArrayAT,@oCodigo,@oNome),oDlg:Update(),; oPe_atende:Cargo:=.t.,oPe_atende:end()) } oBrw_atende2:SetArray( aSql_atende, .t., 3, {2, 3} ) oBrw_atende2:aCols[1]:cHeader := "Código" oBrw_atende2:aCols[1]:nWidth := 60 oBrw_atende2:aCols[1]:cToolTip := {"Codigo do atende","Ajuda","",nRGB(255,255,255),nRGB(58,116,241) } oBrw_atende2:aCols[1]:nHeadStrAlign := AL_LEFT oBrw_atende2:aCols[1]:oHeaderFont := Arial12B oBrw_atende2:aCols[1]:oDataFont := Couriern8 oBrw_atende2:aCols[2]:cHeader := "Nome do Atendente" oBrw_atende2:aCols[2]:nWidth := 150 oBrw_atende2:aCols[2]:cToolTip := {"Nome do Atendente","Ajuda","",nRGB(255,255,255),nRGB(58,116,241) } oBrw_atende2:aCols[2]:nHeadStrAlign := AL_LEFT oBrw_atende2:aCols[2]:oHeaderFont := Arial12B oBrw_atende2:aCols[2]:oDataFont := Couriern8 imagem da tela do código acima https://uploaddeimagens.com.br/imagens/five-png--6
  7. Ola Kapiaba, veja se é isto que vc precisa redefine get oGet[1] var cGet[1] pict"@!" id 101 UPDATE font Arial12B ; On Change IIF(cGet[1]=='9',(Nil),(FPesq3(aSQL,@oGet[1],oBrw,nKey,iif(ascan(cTabela,cTabe)=2,3,2)))) ; color COR_GET3 function fPesq3(aMat,oGetP,oBrw,nKey,nOrd) Local cChave:=Rtrim(oGetP:oGet:Buffer),nPosAnt:=oBrw:nAt,nRet,f If (nRet:=ASCAN(aMat, {|aVal| Left(aVal[nOrd],Len(AllTrim(cChave))) == AllTrim(cChave)}))>0 oBrw:nArrayAt:= nRet oBrw:vsetpos( nRet ) oBrw:refresh() oBrw:paint() Else alerta1(,"Letra não encontrada...") return(.t.) End return(nil)
  8. Fladimir vc usa esta DLL para baixar XML individual, ou com ela posso baixar em bloco todos NFE disparada para um CNPJ. Obrigado Luiz Fernando empresoft@globo.com
  9. Ola provavelmente o arquivo FrSystH.dll que esta nesta maquina não corresponde com a mesma versão do FastRepH.prg usado no seu EXE
  10. Pessoal depois de 10 dias consegui fazer o relatório , o segredo foi criar a 4 tabela(array) com os dados dos clientes que ira sair no extrato, desta forma o MASTERDATA sempre sera um único registro por cliente, agora é só acertar a estética do formulário. https://uploaddeimagens.com.br/imagens/fivewin3-png Obrigado a todos.
  11. Ola macs, tem como vc entrar em contato comigo pelo email empresoft@globo.com
  12. Ola Rone, já tentei sim, fazendo desta forma bagunça mais ainda, pq dai cada item do pedido exibe todas parcelas. Obg Luiz Fernando
  13. Depois de 687 relatorio feito com fastreport , é a primeira situação que não consigo achar solução TABELA 1) Masterdata ( aqui é só cabeçalho imprime uma unica vez a cada cliente ) funcionando ok TABELA 2) DetailData1 ( aqui roda todos itens comprado varios pedidos por cliente ) funcionando ok depois disto, antes de rodar o próximo cliente, precisava rodar uma terceira TABELA que seria a contas pagar do cliente
  14. Desta vez a microsoft não deve sucesso algum, de quando copio a interface da macintosh(criada por Steve Jobs), fazendo o windows, o mundo da voltas.
  15. Ola da certo sim, logo ao final de sua browse with OBJECT oBrw :SetGroupHeader( 'ENTRADAS', 1, 2, Arial13B ) :SetGroupHeader( 'SAIDAS', 3, 4, Arial13B ) end Abs
  16. Ola Jackson, engraçado que meu fastreport não aceita este comando IF (APURACAO.EOF = FALSE) Vou explicar o que preciso aqui talvez algum colega tenha outra solução, tenho três tabelas VENDAS, PEDIDOS e PARCELA, preciso imprimir um extrato de cobrança para varios clientes de uma unica vez.ele precisa rodar todos itens(tabela pedido) somente depois disto rodar todas parcelas(tabela parcela), mais a cada a pedido ele mostra todas tabelas, por isto queria fazer uma comparação somente se final que satisfaça o GROUPHEADER imprimir as parcelas, conforme a imagem do link abaixo. https://uploaddeimagens.com.br/imagens/fivewin-png[/IMG] https://uploaddeimagens.com.br/imagens/fivewin-png Na imagem abaixo esta como esta saindo, observe que para cada pedido sai a relação de titulos a pagar, precisava que isto saisse um unica vez para cada cliente no final do extrato. https://uploaddeimagens.com.br/imagens/imagem2-png--132 Obg
  17. Ola Evandro, ele passa por esta opção a cada registro, eu precisava de uma comparação somente no ulltimo registro. Obg
  18. Pessoal sera que tem como dentro do código do MASTERDATA saber se é o ultimo registro procedure DetailData2OnBeforePrint(Sender: TfrxComponent); begin if (é ultimo registro) then cControle:='2' end; Obg
  19. Ola Rone se vc querer apenas resolver problema de lentidão com filtro, com poucas linhas no inicio do sistema vc já estara usando a rddcdx, agora para ter acesso externo via IP na minha opinião não compensa o trabalho, dedica este tempo já para mudar para um banco de dados tipo mysql, mssql ou postgree. Abs Luiz Fernando
  20. a velocidade deste filtro é a mesma coisa que usar banco de dados relacional, nunca entendi o motivo do pessoal do forum não usar ADS, digo para aqueles que ainda estão no DBF. Abs Luiz Fernando FWH1104,xharbour1104,bcc55,mysql
  21. Muito triste, que Deus de conforto aos seus familiares.
  22. Oscar precisa sim ter uma licença, mais o ACBR tb tem esta funcionalidade, dai é livre, o Giovany Vechinni usa a do ACBR Colega não sei a solução da fsist citada pelo amigo acima como procede, mais da flexdocs qdo questionei eles, disseram que pega o XML direto do sefaz, tipo eles não monta o xml com as informações, vou pesquisar mais sobre isto, pq escritorios contabil baixa xml em bloco usando programas de terceiro.
  23. Pessoal observe que a rotina da flexdocs funciona correto, é que houve mudanças recente, como o Jackson dize acima, não ter uma opção desta no sistema hoje em dia é f... pq todos sistemas tem, o bom que usando da flexdocs não precisa nem ter a chave, aparece todas NFE disparada para aquele CNPJ, aonde alem de fazer o manifesto podemos baixar em bloco(varios xml de uma unica vez), e outro detalhe, hoje em dia tem muita empresa que faz uma NFE para o CNPJ de nossos clientes apenas para fazer boleto, e trocar no banco, pelo fato do juros ser baixo, sem o conhecimento do CNPJ do destinatario. Obs: sobre xml adulterados , não tem como usando a rotina da flexdocs, pq ele pega o XML direto no sefaz.
  24. Colega eu tb tinha um rotina desta usando a flexdocs, mais coisa de uns 2 meses parou de funcionar, sabe me dize se houve alguma mudança em servidores ou algo do tipo. Obrigado Luiz Fernando
  25. Rone, se as duas tela tem browse, e vc chama a segunda sem fechar a primeira, observe se vc esta declarando o olbx como local.
×
×
  • Create New...