Ir para conteúdo
Fórum Script Brasil

reunix

Membros
  • Total de itens

    26
  • Registro em

  • Última visita

Tudo que reunix postou

  1. Legal Markus, vou analisar melhor com relação a performance pois preciso saber a cada solicitação, ou seja, a cada 1min, quanto tempo ele ta parado e se está parado no lugar autorizado, então fiz uma rotina simples que me diz isso, porém seguindo essa sua linha resolver o problema de ter q guardar as informações de total Parado e total Andando para relatórios mensais !! Obg!!
  2. Bom dia pessoal AJUDA por favor , há dois dias estou tentando acumular o tempo parado do veículo, através das informações que recebo do rastreador, é o seguinte... a cada 1min recebo as informações, uma delas é se o veiculo está parado 0 = parado , 1 = em movimento, entre as outras colunas tem uma data_hora (dd/mm/yy hh:mm), a cada recebimento e SE parado , preciso ficar acumulando o tempo parado do mesmo!! Certamente já pensei dessas maneiras, ao receber uma nova informação e SE parado, vou procurar na tabela de todas as informações, a último momento parado do mesmo veículo , daí subtraio a hora atual com a hora do momento anterior, exemplo , peguei a informação atual PARADO agora as 08:00, fui buscar na tabela a ultima informação PARADO, registrado anteriormente, que foi as 07:30, então entre eles tem um tempo de 30min, daí teoricamente ele ficou parado 30min. O problema é que essas informações vou solicitar a cada 1min e registrar tudo no banco, esse banco logo logo, vai crescer muito, um exemplo aqui é uma tabala do sistema antigo, tem mais de 16 milhões, imagina a cada 1min eu ter que fazer essa consulta, pegar o ultimo registro do determinado veiculo PARADO nessa tabela. Fora que ao atualiza a janela do sistema (WEB, Java , Spring), preciso fazer além desse filtro os outros.. Outra Maneira seria criar uma tabela separada, (Tempo_Parado), e registrar o momento (data_hora) , veiculo_id, daí a tabela fica um pouco menor que a do rastreio propriamente dito, então a cada 1min se o veiculo tiver parado, vou nessa tabela e procuro o momento da ultima parada dele, e vou acumulando. Mas tem um problema nessas teoria.. imagina só... o cara parou as 8:00 daí fui acumulando ate as 8:30, já tenho aí 30min parado, agora o cara começou a se movimentar... rodou uns 30min e o cara para novamente...... ou seja PAROU as 9:00, quando eu for pegar a última hora que ele parou o sistema vai trazer 08:30, e se eu for usar a técnica acima citado por mim, o sistema vai calcular assim , ultima parada as 8:30, pardou agora as 9:00, tempo parado MAIS 30min... espero que vocês tenham entendido...... Pensando um pouco agora, eu poderia quando filtrar as ultimas paradas, sempre pegar as duas 2 ultimas informações, e se a penúltima informação era EM MOVIMENTO, já sei que essa parada agora é uma parada START e não um continuação de PARADO, tipo... 07:30 Parado 08:00 Parado --------30min 08:10 Movimento 08:30 Parado se for pelo sistema, ele vai calcular 8:30 - 8:00 vai trazer 30min PARADO, que não é (nessa última situação ele não ficou parado 30min), na verdade ele parou agora o que pensei nesse caso foi, pegar esses 2 últimos, e caso o penúltimo seja EM MOVIMENTO, desconsiderar o calculo e somente gravar que parou, daí na próxima consulta PARADO as 8:50, o sistema vai me trazer 8:50 - 8:30 = 20min parado. Assim acredito que funcione, porém vai da trabalho e pesando no banco terá muitas consultas em tabelas grandes de volume!!! Qualquer dica de vocês pode ajudar a melhorar, deve ter algo mais simples!!! Agradeço desde já!!!! Bom dia!!!
  3. Olá pessoal procure algum lugar para hospedar meu sistema (site) com base de dados Postgre mas não encontro alguém conhece algum? Agradeço desde já!
  4. Olá pessoal procure algum lugar para hospedar meu sistema (site) com base de dados Postgre mas não encontro alguém conhece algum? Agradeço desde já!
  5. Bom dia pessoal, vejam bem que bruxaria... Gerei um TXT no padrão DANFE, para importar para dentro do Emissor Gratuito do Governo, o arquivo é gerado perfeitamente no servidor, mas quando forço o download do mesmo o o sistema por vontade própria adiciona um (.) ponto no fim do arquivo, e isso está dando uma dor de cabeça tremenda pois o Sistema Emissor logo acusa esse caracter como inválido. já tentei tudo, inclusive a rotina do download mas nada, continua vindo com o ponto. Quando gero o arquivo eu envio ele para um pasta específica do servidor antes de realizar o download, esse arquivo que fica na pasta do servidor não contem o caracter (.), ele é adicionado somente no arquivo que foi baixado no download. Abaixo segue o codigo que fiz para gerar o TXT pra importar DANFE e no fim do código tem o trecho do download. Espero ajudar também a quem procurava os detalhes do arquivo DANFE para importação!! Segue o código: <?php $controle = (int) $this->idPedido; $cnumnfe = $this->numdanfe; if ($this->TipoDanfe == 'venda'){ $cTipoDanfe = 'V'; }else{ $cTipoDanfe = 'S'; } $numped = str_pad($controle, 6, "0", STR_PAD_LEFT); $ccodempresa = $cddtemissao = date('Y-m-d'); $cddtsaida = date('Y-m-d'); $chorasaida = date('H:i').":00"; // caso seja uma impressao nova de nfe, capturo o proximo numero do danfe!!! if ($cnumnfe == '') { $cnumnfe = $this->DadosEmpresa['proximonfe']; } $cnomeempresa = $this->DadosEmpresa['nomefantasia']; $crazaosocial = $this->DadosEmpresa['razaosocial']; $cendereco = $this->DadosEmpresa['endereco']; $ctel1 = substr($this->DadosEmpresa['telefone1'],1,2).''.substr($this->DadosEmpresa['telefone1'],5,4).''.substr($this->DadosEmpresa['telefone1'],10,4); $ccep = substr($this->DadosEmpresa['cep'],0,5).''.substr($this->DadosEmpresa['cep'],6,3); $cuf = $this->DadosEmpresa['uf']; $ccidade = $this->DadosEmpresa['cidade']; $cbairro = $this->DadosEmpresa['bairro']; $cnumero = $this->DadosEmpresa['numero']; $ccnpjEmpresa = substr($this->DadosEmpresa['cnpj'],0,2).''.substr($this->DadosEmpresa['cnpj'],3,3).substr($this->DadosEmpresa['cnpj'],7,3).substr($this->DadosEmpresa['cnpj'],11,4).substr($this->DadosEmpresa['cnpj'],16,2); $codpais = $this->DadosEmpresa['codpais']; $nomepais = $this->DadosEmpresa['nomepais']; $cnae = $this->DadosEmpresa['cnae']; $cie = $this->DadosEmpresa['ie']; $cim = $this->DadosEmpresa['im']; $ccodmunicipio = $this->DadosEmpresa['codmunicipio']; $ccodpais = $this->DadosEmpresa['codpais']; $cnomepais = $this->DadosEmpresa['nomepais']; // dados do cliente e da venda!!! $clienteemail = $this->DadosVenda[0]['email']; $clientecpf = $this->DadosVenda[0]['cpf']; $clientecnpj = $this->DadosVenda[0]['cnpj']; $clientenome = $this->DadosVenda[0]['nomecliente']; $clienteendereco = $this->DadosVenda[0]['endereco']; $clientebairro = $this->DadosVenda[0]['bairro']; $clientecidade = $this->DadosVenda[0]['cidade']; $clienteuf = $this->DadosVenda[0]['uf']; $clientecep = substr($this->DadosVenda[0]['cep'],0,5).''.substr($this->DadosVenda[0]['cep'],6,3); $clienteinscest = ''; //; $this->DadosVenda[0]['ie']; $clientenum = $this->DadosVenda[0]['numero']; $clientetelefone = substr($this->DadosVenda[0]['telefone1'],1,2).''.substr($this->DadosVenda[0]['telefone1'],5,4).''.substr($this->DadosVenda[0]['telefone1'],10,4); $clientecomplemento = ''; $ccomplemento = ''; $clientecodmunicipio = '2611606'; // OLINDA!!! $csituacao = '1'; // 1=producao / 2=homologacao $ctipooperacao = '1'; // 1 = saida 0 = entrada $ccodmunicipio = '2611606'; $finalidadeEmissao = '1'; // 1=Nfe Normal; 2=Nfe Complementar; 3=Nfe de Ajuste $processoEmissao = '3'; // 1=emissao avulsa pelo fisco; 2=emissao avulsa pelo contribuinte com seu certificado difital atraves do site do fisco; 3= emissao pelo contriuinte com aplicativo fornecido pelo fisco; $tipoPagto = '0'; // 0= avista / 1=A prazo $versao = '2.2.2'; $fp = fopen("../public_html/nfe/DF".$cTipoDanfe.'_'.$numped.".txt", "w"); fwrite($fp,"NOTAFISCAL|1\r\n"); fwrite($fp,"A|2.00|NFe\r\n" ); fwrite($fp,'B|26||VENDA DE MERCADORIA|'.$tipoPagto.'|55|1|'.$cnumnfe.'|'.$cddtemissao.'|'.$cddtsaida."|".$chorasaida."|".$ctipooperacao."|".$ccodmunicipio."|1|1||".$csituacao."|".$finalidadeEmissao."|".$processoEmissao."|".$versao."|||\r\n" ); fwrite($fp,'C|'.$crazaosocial.'|'.$cnomeempresa.'|'.$cie.'||'.$cim.'|'.$cnae. "|1|\r\n" ); fwrite($fp,'C02|'.$ccnpjEmpresa. "|\r\n" ); fwrite($fp,'C05|'.$cendereco.'|'.$cnumero.'|'.$ccomplemento.'|'.$cbairro.'|'.$ccodmunicipio.'|'.$ccidade.'|'.$cuf.'|'.$ccep.'|'.$ccodpais.'|'.$cnomepais.'|'.$ctel1. "|\r\n" ); //------------CLIENTE!!! fwrite($fp,'E|'.$clientenome.'|'.$clienteinscest. "||".$clienteemail."|\r\n" ); // 049.750.544-42 // 01234567890123 if ( $clientecpf != '' ) { // cpf agora com os digitos $clientecpf = substr($clientecpf,0,3).''.substr($clientecpf,4,3).substr($clientecpf,8,3).substr($clientecpf,12,2); fwrite($fp,'E03|'.$clientecpf. "|\r\n" ); }else{ $clientecnpj = substr($clientecnpj,0,2).''.substr($clientecnpj,3,3).substr($clientecnpj,7,3).substr($clientecnpj,11,4).substr($clientecnpj,16,2); fwrite($fp,'E02|'.$clientecnpj. "|\r\n" ); // cnpj } fwrite($fp,'E05|'.$clienteendereco.'|'.$clientenum.'|'.$clientecomplemento.'|'.$clientebairro.'|'.$clientecodmunicipio.'|'.$clientecidade.'|'.$clienteuf.'|'.$clientecep.'|'.$ccodpais.'|'.$cnomepais.'|'.$clientetelefone."|"."\r\n" ); //------- IMPRESSÃO DOS ITENS!!! $cvalunitario = '0'; $csubtotal = '0'; $csubtotalcomdesconto = '0'; $nitem = 1; $nTotalG = 0; $nTotalIcms = 0; $nTotalPis = 0; $nTotalCofis = 0; $cTotalTotal = 0; $nTotalDesconto = 0; // itens do pedido! foreach ($this->DadosVendaPed as $DadosVendaPed): $cvalunit = $DadosVendaPed['valor']; $cvalunit = $cvalunit.'00'; $csubtotal = $DadosVendaPed['subtotal']; $cdesconto = ''; $ndesconto = 0; $csubtotalcomdesconto = $csubtotal; //FloatToStrF(dados.PedDiaSubTotal.value - dados.PedDiadesconto.value,ffNUMBER,15,2); $nTotalG = $nTotalG + $csubtotalcomdesconto; $cquantidade = $DadosVendaPed['quantidade']; $cnomepeca = $DadosVendaPed['nomeproduto']; $cAliquotaIcms = 0; //17; $cAliquotaPis = 0; //0.65; $cAliquotaCofis = 0; //3; /* CFOP = 5405 (Venda de mercadoria adquirida ou recebida de terceiros em operação com mercadoria sujeita ao regime de substituição tributária, na condição de contribuinte substituído Classificam-se neste código as vendas de mercadorias adquiridas ou recebidas de terceiros em operação com mercadorias sujeitas ao regime de substituição tributária, na condição de contribuinte substituído.) 5102 (Venda de mercadoria adquirida ou recebida de terceiros) ) */ $cvalicms = (($cvalunit - $ndesconto) * $cAliquotaIcms) /100; $nTotalIcms = $nTotalIcms + $cvalicms; $cvalicms = number_format($cvalicms, 2, '.', ','); $nTotalIcms = number_format($nTotalIcms, 2, '.', ','); $cvalpis = (($cvalunit - $ndesconto) * $cAliquotaPis) /100; $nTotalPis = $nTotalPis + $cvalpis; $cvalpis = number_format($cvalpis, 2, '.', ','); $nTotalPis = number_format($nTotalPis, 2, '.', ','); $cvalcofis = (($cvalunit - $ndesconto) * $cAliquotaCofis) /100; $nTotalCofis = $nTotalCofis + $cvalcofis; $cvalcofis = number_format($cvalcofis, 2, '.', ','); $nTotalCofis = number_format($nTotalCofis, 2, '.', ','); $nTotalDesconto = 0; $cTotalTotal = $cTotalTotal + $csubtotal; $ccoditemfornecedor = $DadosVendaPed['referencia']; $ccodbarrasfornecedor = $DadosVendaPed['ncm']; fwrite($fp,'H|'.$nitem."||"."\r\n" ); fwrite($fp,'I|'.$ccoditemfornecedor.'||'.$cnomepeca.'|'.$ccodbarrasfornecedor.'||5405|UN|'.$cquantidade.'.0000|'.$cvalunit.'000000|'.$csubtotal.'||UN|'.$cquantidade.'.0000|'.$cvalunit.'000000|||'.$cdesconto. "||1|||"."\r\n" ); //-----------aqui!! fwrite($fp,"M|"."\r\n" ); fwrite($fp,"N|"."\r\n" ); //fwrite($fp,"N10d|0|400|"."\r\n" ); fwrite($fp,"N10d|0|300|"."\r\n" ); fwrite($fp,"Q|"."\r\n" ); //fwrite($fp,'Q02|01|'.$csubtotalcomdesconto.'|'.$cAliquotaPis.'|'.$cvalpis. "|"."\r\n" ); fwrite($fp,'Q04|07|'."\r\n" ); fwrite($fp,"S|"."\r\n" ); //fwrite($fp,'S02|01|'.$csubtotalcomdesconto.'|'.$cAliquotaCofis.'.00|'.$cvalcofis. "|"."\r\n" ); fwrite($fp,'S04|07|'."\r\n" ); $nitem=$nitem+1; endforeach; fwrite($fp,"W\r\n" ); $nTotalG = number_format($nTotalG, 2, '.', ''); $cTotalTotal = number_format($cTotalTotal, 2, '.', ''); fwrite($fp,'W02|'.$nTotalG.'|'.$nTotalIcms.'|0.00|0.00|'.$cTotalTotal.'|0.00|0.00|'.$nTotalDesconto.'|'.'|0.00|0.00|'.$nTotalPis.'|'.$nTotalCofis.'|0.00|'.$nTotalG. "|"."\r\n" ); ///////////////// AQUI EU TERMINO DE CRIAR O ARQUIVO, ATÉ AQUI ESTÁ TUDO OK, QUANDO VERIFICO O ARQUIVO CRIADO NO SERVIDOR ESTÁ OK fwrite($fp,"X|0|"); fclose($fp); $file = "DF".$cTipoDanfe.'_'.$numped.".txt"; define('DIR_DOWNLOAD','../public_html/nfe/'); $arquivo = DIR_DOWNLOAD.$file; $arquivo = $file; $arquivo = DIR_DOWNLOAD.$arquivo; /// ESSA FOI OUTRA MANEIRA QUE TENTEI PRA VER SE RESOLVERIA MAS não FUNCIONA também, CONTINUA TRAZENDO O PONTO (.) NO FIM DO ARQUIVO!!! /* //$file = $_REQUEST['file']; header("Content-type: application/save"); //header("Content-Length:".filesize($arquivo)); header('Content-Disposition: attachment; filename='.basename($arquivo)); header('Expires: 0'); header('Pragma: no-cache'); */ // // ESSE É O TRECHO QUE FORÇA O DOWNLOAD DO ARQUIVO!!!! PROVAVELMENTE É POR AQUI QUE OCORRE O PROBLEMA!!! // header('Content-disposition: attachment; filename="'.basename($arquivo).'"'); header('Content-Length: '.filesize($arquivo)); readfile($arquivo); ?> Esqueci de mencionar , quando dou um type arquivo.txt no DOS, invés dele mostrar um ponto ele mostra um conjunto de caracteres ASCII 'ì♂ú Quem por favor tiver um ideia do que pode ser, informa por aqui, você está ajudando um cara desesperado ! e agradeço desde já!!! Renato Muniz!!!
  6. reunix

    Importação TXT (erro)

    OK, vou tentar willian obrigado, funcionou com o str_replace q o Mji comentou apesar q pode ficar mais pesado dependendo do aquivo, mas, por hora resolveu, obg at+
  7. reunix

    Importação TXT (erro)

    Olá Mji, pensei nisso mas acredito que ficará lento, pois terei que substirir varios campos: nome, endereco, cidade, bairro e a leitura é feita letra-a-letra mas obrrigado, se tiver outra sugestão!! at+ post o modelo do arquivo. como está escrito e o que você quer pegar. RICK, segue o modelo do arquivo: CIC COD_CORR TIP_PESSOA SITUACAO NOME IDENTIDADE ORGAO ENDERECO BAIRRO CIDADE CEP FONE1 FONE2 EMAIL DAT_NASC DAT_CONCES UF SEXO VENCIMENTO ULTIMA_ALTERACAO CAP_SOCIAL 00000023959479 058916.150002569 F N MARIA2 OK DE POMPEIA CAVALCANTI SILVA CO.342620 SSP/PE END. AV. CARLOS DE LIMA CAVALCANTI, 214 BAIRRO OK NOVO CIDADEA 53030260 8134 86124309 GUTES@NASSAU.COM.BR 18/05/1929 01/10/1989 PE F 29/08/2005 600.00 00000001422772 10.0000445 F ELIANE VERCOSA DE MELLO 380.946 SSP/PE AV. BOA VIAGEM, 4000 1902 BOA VIAGEM RECIFE 51021-000 81 34653316 LOURD4@HOTMAIL.COM 12/11/1935 01/10/1989 PE F 16/12/2013 04/09/2008 ele está delimitado por tabulação, não estou tento problemas em ler os dados, somente na hora de gravar, que provavelmente é na instrução do (UPDATE SET), quando ele ler do arqivo contento a aspa simples, meu script se quebar: $query = " UPDATE TABL SET NOME = '$nome' WHERE ID = '$id' "; provavelmente por isso o erro: Warning: pg_query() [function.pg-query]: Query failed: ERRO: erro de sintaxe em ou próximo a "ARCE" LINE 3: nome ='BERTINE ROSE D'ARCE CANDIDO', agradeço sua atenção ; se puder ajudar. at+
  8. Olá pessoal andei procurando uma solução por um tempo e não consegui resolver meu probleminha, no caso é somente importar um arqujvo txt pro banco de dados q no meu caso é Postgres, o script ta funcionando 99%, 1% é justamente o erro q ocorre, quando um registro do TXT contém uma aspas simples o sistema da erro: tipo: LOJÃO D' VIDROS MARIA D' CARMO Script de importação: // muito simples $filename = "../../arquivos/".$arquivo; $handle = fopen($filename, 'r'); $data = fread($handle, filesize($filename)); $rowsArr = explodeRows($data); $lineDetails = explodeTabs($rowsArr[0]); dai eu acesso os campos da seguinte forma: $nome = trim($lineDetails[4]); $endereco = trim($lineDetails[7]); Agora para gravar no banco $query = "UPDATE corretores SET nome ='$nome', end_fenacor ='$endereco' WHERE cic = '$cic' "; já tentei de várias formas para extrarir a informacao: 1. $nome = trim($lineDetails[4]); 2. $nome = addslashes(trim($lineDetails[4])); 3. $nome = htmlentities(addslashes(trim($lineDetails[4]))); e para gravar tentei de outras formas também!!! UPDATE corretores SET nome=".addslashes($nome).", endereco ='$endereco' ... ERRO "UPDATE corretores SET nome =".$nome.", endereco =".$endereco." ... ERRO "UPDATE corretores SET nome =".$nome.", endereco =\"'$endereco'\" ... ERRO Mensagem do erro: no caso de tentar gravar dessa forma: update set nome = '$nome'.... Warning: pg_query() [function.pg-query]: Query failed: ERRO: erro de sintaxe em ou próximo a "ARCE" LINE 3: nome ='BERTINE ROSE D'ARCE CANDIDO', Quem já passou por isso por favor me digam onde estou errando!! Agradeço desde já at+
  9. Acho q entendi, então o trunc day concidera a data inteira e não somente o dia!!!:? valeu!!
  10. OK Kakao obrigado, mas você já pensou q no caso do (trunc day) para pedir um intervalo de até um mês funciona numa boa ainda não testei mas se por acaso o cliente pedir um intervalo de 1 mes e 15dias por exemplo alguns dias vão se repedir, o date_trunc('day'... percebe que os dias iguais são de outro mês e ano? ainda não testei essa possibilidade, até porque para mim não ocorreria porque eu forço somente 15 dias. at+
  11. Eis o resultado kakao, $data2 = substr($cDataFIM,6,4).substr($cDataFIM,3,2).substr($cDataFIM,0,2); $data1 = substr($cDataINI,6,4).substr($cDataINI,3,2).substr($cDataINI,0,2); $sql = "SELECT b.nome, "; $datafiltro = substr($cDataINI,6,4).'-'.substr($cDataINI,3,2).'-'.substr($cDataINI,0,2); while ($data1 < $data2) { $data1 = substr($cDataINI,6,4).substr($cDataINI,3,2).substr($cDataINI,0,2); $sql .= "SUM(CASE WHEN date_trunc('day', a.vencto) = '$datafiltro' THEN valor END) as \"".substr($cDataINI,0,2)."-".substr($cDataINI,3,2)."\","; $cDataINI = date('d/m/Y',mktime(24*1, 0, 0, substr($cDataINI,3,2), substr($cDataINI,0,2), substr($cDataINI,6,4))); $datafiltro = substr($cDataINI,6,4).'-'.substr($cDataINI,3,2).'-'.substr($cDataINI,0,2); } // RETIRO A ULTIMA VIRGULA!!! $sql = substr($sql,0,strlen($sql)-1); $sql .= " FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY b.nome order by b.nome"; resultado: SELECT b.nome, SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-13' THEN valor END) as "13-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-14' THEN valor END) as "14-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-15' THEN valor END) as "15-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-16' THEN valor END) as "16-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-17' THEN valor END) as "17-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-18' THEN valor END) as "18-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-19' THEN valor END) as "19-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-20' THEN valor END) as "20-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-21' THEN valor END) as "21-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-22' THEN valor END) as "22-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-23' THEN valor END) as "23-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-24' THEN valor END) as "24-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-25' THEN valor END) as "25-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-26' THEN valor END) as "26-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-27' THEN valor END) as "27-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-30' THEN valor END) as "30-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-31' THEN valor END) as "31-08",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-01' THEN valor END) as "01-09",SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-02' THEN valor END) as "02-09" FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY b.nome order by b.nome está perfeita a consulta, mais uma vez obrigado!!!!! at+
  12. kakao você é o kara, v mesmo, mexendo aqui tive a idéia, no propriprio PHP posso montar a consulta com um simples while no intervalo das datas, exemplo, dataconsulta = dataINI; sql = "SELECT b.nome,"; faça enquanto dataINi <= DataFIM { sql = sql + "SUM(CASE WHEN date_trunc('day', a.vencto) = 'dataconsulta' THEN valor END) as 'dataconsulta'," dataconsulta = dataconsulta +1dia; } sql = sql + " FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY a.vencto,b.nome order by a.vencto,b.nome" no final do while ficaria +- assim... SELECT b.nome, SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-28' THEN valor END) as "28/08/2010", SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-29' THEN valor END) as "29/08/2010", SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-30' THEN valor END) as "30/08/2010", SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-08-31' THEN valor END) as "31/08/2010", SUM(CASE WHEN date_trunc('day', a.vencto) = '2010-09-04' THEN valor END) as "04/09/2010" FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY a.vencto,b.nome order by a.vencto,b.nome ainda não testei pelo PHP mas deve funcionaar, beleza é quase isso... testei direto no banco dessa forma que está ai em cima, e retornou 15 registro da mesma categoria "ATENDIMENTOS", NOME;28/08/2010;29/08/2010;30/08/2010;31/08..;04/09/2010 "ATENDIMENTOS";;;R$0,33;; "ATENDIMENTOS";;;;R$84,33; "ATENDIMENTOS";;;;;R$33,33 "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; "ATENDIMENTOS";;;;; tenho uma outra consulta aqui que retorna também os 15r registros só para comparar, Select A.nome, TabDiaUm.DiaUm as valor, to_char(TabDiaUm.vencto,'dd/mm/yyyy') FROM categfinanc a LEFT JOIN (SELECT SUM(valor) AS DiaUm,categoria,vencto FROM ctreceber WHERE (CAST(vencto as date) >= '01/01/2010' AND CAST(vencto as date) <= '31/12/2010') AND (dtrec is null) GROUP BY vencto,categoria) TabDiaUm ON A.id = TabDiaUm.categoria where TabDiaUm.DiaUm <> '0' order by a.nome,vencto e retornou isso: "ATENDIMENTOS";R$33,33;"02/08/2010" "ATENDIMENTOS";R$4,33;"22/08/2010" "ATENDIMENTOS";R$0,33;"30/08/2010" "ATENDIMENTOS";R$84,33;"31/08/2010" "ATENDIMENTOS";R$33,33;"04/09/2010" "ATENDIMENTOS";R$166,67;"17/09/2010" "ATENDIMENTOS";R$3,33;"18/09/2010" "ATENDIMENTOS";R$4,33;"21/09/2010" "ATENDIMENTOS";R$84,66;"30/09/2010" "ATENDIMENTOS";R$33,33;"01/10/2010" "ATENDIMENTOS";R$33,33;"04/10/2010" "ATENDIMENTOS";R$3,33;"18/10/2010" "ATENDIMENTOS";R$4,33;"21/10/2010" "ATENDIMENTOS";R$166,67;"16/11/2010" "ATENDIMENTOS";R$3,33;"17/11/2010" espero não está complicando ainda mais :D at+ vou fazer uns teste aqui, qualquer coisa volto aqui, se você tiver algo agradeço... at++ é isso.... , o problema agora é a repeticao da categoria em branco, agradeço muito ajudou d+ é PHP é isso.... , o problema agora é a repeticao da categoria em branco, agradeço muito ajudou d+ é PHP beleza RESOLVIDO!!!! :D com seu último POst o filtro funcionou uma beleza... OBRIGADO! kakao!! tu é fera!!!! at+ como faço para finalizar o tópico?? valeu at9 Massa mesmo, vou mexendo e vai clareando valeu mesmo!!!!
  13. Olá Kakao primeiramente obrigado, acredito que foi por pouco veio a categoria e 2 campos já como data dia 28 e 29 so que vazio, assim: NOME 28/08/2010 29/08/2010 CARCT (MONEY) (MONEY) ------------------ ---------- -------- "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; "ATENDIMENTOS"; ; esse intervalo será informado pelo sistema em php, o cliente informará a data inicial e eu vou calcular a data final com 15 dias ou seja se o cliente informar '28/08/2010' a data final será '11/09/2010' então como poderia renomear o nome do campo automaticamente com o AS? ainda não entendi muito bem o seu script mas acredito que seja por ai, estou te passando o resulta, mas vou dá uma estudada aqui, se puder rever pra também já agradeço seria o ideal se o nome dos campos fosse já com a data como você fez com o AS para renomear, porém o cliente pode escolher qualquer intervalo até mesmo uma virada de mês como no exemplo que mencionei a pouco, no caso do seu resultado não deveria retornar vários "ATENDIMENTOS" seria 1 "ATENDIMENTOS" e vários campos do SUM() caso tivesse valor na data do período, vou estudar teu código aqui, mas se puder ainda me ajudar, agradeço d+ at+ então. kakao, voltei... fiz esta modificação SELECT b.nome, SUM(CASE WHEN date_trunc('day', a.vencto) >= '2010-08-28' THEN valor END) as "28/08/2010", SUM(CASE WHEN date_trunc('day', a.vencto) <= '2010-09-11' THEN valor END) as "29/08/2010" FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (a.dtrec is null) GROUP BY a.vencto,b.nome order by a.vencto,b.nome coloquei >= e <= para um período e como disse ele não gerou os campo do SUM() para todas as datas do período ou seja 28/08/2010 - 29/08/2010 - 30/08/2010 ... 10/09/2010 - 11/09/2010 deveria ser assim CATEDOGIRA................ 28/08/2010 - 29/08/2010 - 30/08/2010 ... 10/09/2010 - 11/09/2010 ATENDIMENTOS ................. 9,99 ......... 3,70 ................ 0............... 5,70.......... 10,80 CONTAS DIVERSAS ........... 11,00 ........74,40 ..........100,00............... 75,00 .......... 10,00 TELEMAR ............ 150,00 .........74,00 ... at+
  14. Olá pessoal, estou com dificuldades para resolver este problema, já procurei pela net mas não encontrei nada que ajudasse, segue... tenho esta consulta: SELECT b.nome,SUM(valor) AS valor,to_char(a.vencto,'dd/mm/yyyy') FROM ctreceber a left join categfinanc b on a.categoria = b.id WHERE (cast(a.vencto as date) >= '28/08/2010' AND cast(a.vencto as date) <= '11/09/2010') AND (a.dtrec is null) GROUP BY a.vencto,b.nome order by a.vencto,b.nome que retornar: categoria valor data -------------------------------------------------- ATENDIMENTOS 0,33 30/08/2010 ATENDIMENTOS 84,33 31/08/2010 ATENDIMENTOS 33,33 04/09/2010 gostaria de agrupar por categoria + dia e mes no mesmo registro: vou dá um exemplo com o resultado da consulta acima: seria: categoria dia30AGO dia31AGO dia04SET ------------------------------------------------------------------------- ATENDIMENTOS 0,33 84,33 33,33 invés de retornar 3 registros 1 para cada DATA, seria 1 registro acumulando cada dia ou data. deu pra entender né?? já fiz uma pesquisa parecida com os meses do ano, que foi facil porque os meses são fixo daí fiz com o EXTRACT YAR e MONTH, segue um pedaço do código para os meses do ano categfinanc.Sql.Add('Select'); categfinanc.Sql.Add('A.id,'); categfinanc.Sql.Add('A.nome,'); categfinanc.Sql.Add('TabPagoJan.PagoJan ,'); categfinanc.Sql.Add('TabPagoFev.PagoFev ,'); categfinanc.Sql.Add('TabPagoMar.PagoMar ,'); categfinanc.Sql.Add('TabPagoAbr.PagoAbr ,'); categfinanc.Sql.Add('TabPagoMai.PagoMai ,'); categfinanc.Sql.Add('TabPagoJun.PagoJun ,'); categfinanc.Sql.Add('TabPagoJul.Pagojul ,'); categfinanc.Sql.Add('TabPagoAgo.PagoAgo ,'); categfinanc.Sql.Add('TabPagoSet.PagoSet ,'); categfinanc.Sql.Add('TabPagoOut.Pagoout ,'); categfinanc.Sql.Add('TabPagoNov.Pagonov ,'); categfinanc.Sql.Add('TabPagoDez.PagoDez ,'); categfinanc.Sql.Add('TabRecJan.RecJan ,'); categfinanc.Sql.Add('TabRecFev.RecFev ,'); categfinanc.Sql.Add('TabRecMar.RecMar ,'); categfinanc.Sql.Add('TabRecAbr.RecAbr ,'); categfinanc.Sql.Add('TabRecMai.RecMai ,'); categfinanc.Sql.Add('TabRecJun.Recjun ,'); categfinanc.Sql.Add('TabRecJul.Recjul ,'); categfinanc.Sql.Add('TabRecAgo.RecAgo ,'); categfinanc.Sql.Add('TabRecSet.Recset ,'); categfinanc.Sql.Add('TabRecOut.Recout ,'); categfinanc.Sql.Add('TabRecNov.Recnov ,'); categfinanc.Sql.Add('TabRecDez.RecDez '); categfinanc.Sql.Add('FROM categfinanc a'); // pagos Janeiro categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2) AS PagoJan ,categoria FROM contasPagar'); categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) '); categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)'); categfinanc.sql.add('AND (Extract(YEAR FROM datapagto) = :pAnoPg) '); categfinanc.sql.add('AND (Extract(MONTH FROM datapagto) = :pPgJan) '); categfinanc.sql.add('GROUP BY categoria) TabPagoJan ON A.id = TabPagoJan.categoria'); // pagos Fevereiro categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2) AS PagoFev ,categoria FROM contasPagar'); categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) '); categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0) '); categfinanc.sql.add('AND (Extract(YEAR from datapagto) = :pAnoPg) '); categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgFev) '); categfinanc.sql.add('GROUP BY categoria) TabPagoFev ON A.id = TabPagoFev.categoria'); // pagos Março categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2) AS PagoMar ,categoria FROM contasPagar'); categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) '); categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0) '); categfinanc.sql.add('AND (Extract(YEAR from datapagto) = :pAnoPg) '); categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgMar) '); categfinanc.sql.add('GROUP BY categoria) TabPagoMar ON A.id = TabPagoMar.categoria'); ... SEGUE PARA TODOS OS MESES.... funcinou que foi uma beleza, mas para o problema acima citado não consegui resover. alguém tem uma solução legal para resolver esse problema?? agradeço desde já
  15. reunix

    Problema com insert

    voce percebeu q o $estado_user é o único sem ' ' aspas, e d onde estao vindo essas variaveis : '$nome_user','$end_user',$bairro_user','$email_user','$tel_user','$cidade_user',$estado_user não dá pra enternder legal sei codigo n v ai direito, se é sintax então é sintax at+
  16. Olá pessoal, ocorre um "erro estranho" seguinte vou tentar abreviar.. Em um cliente as 11:00h faço um backup do bando de dados de um servidor (win2003 server ingles) com o D:/PostgreSQL/8.4/bin\pg_dump.exe --host localhost --port 5432 --username postgres --format custom --blobs --verbose --file "C:\Users\athus\Desktop\admingraTESTE.backup" admingraf (utilizei o próprio PGadmin3), ate ai beleza Quando chequei no outro servidor o definitivo agora (win2003 pt), instalei o postgre tudo beleza, quando rodei o restore: D:/PostgreSQL/8.4/bin\pg_restore.exe --host localhost --port 5432 --username postgres --dbname admingraf --verbose "C:\Users\athus\Desktop\admingraTESTE.backup" aparentemente tudo OK, de repente o funcionário da loja, logo do CAIXA me informou que os dados estariam da errados apareceu vendas de funcionário que nem na loja estava, como era as 11:00, só tinha registrado realmente 11 atendimentos na data 27/05/2010 apos o RESTORE apareceram varias vendas no dia 27/05/2010 inclusive no turno 2, onde ainda estávamos no 1, analisando o fato, percebi que as datas foram alteradas as vendas do dia 26/05 foram alteradas para 27/05, (timestamp with time zone) e foi no banco de dados todo acredito que ele tenha feito o seguinte, alterou desde o inicio da tabela até seu final ATENÇÃO: tentei copiar a pasta DATA do D:\PostgreSQL\8.4\DATA para o servidor novo e deu a MESMA falha. Alguém já passou por isso!!! Ajudem por favor!! Até breve!!! Renato Muniz
  17. ESerra, já tentei e procurei solucao por ai mas não encontrei maneira!!! vou tentar explicar mehor Na mesma janela (browse) tenho uma pagina que contém 2 frames (TOPO) E (CENTRO). No TOPO eu envio por formulario e no CENTRO eu recebo por ($_GET) tranquilo... recebendo o _GET eu filtro minha tabela e monto a PAGINACAO no CENTRO. Com a paginação montada eu clico por exemplo na pagina (5) a rotina faz: chama o CENTRO novamente passando o nº da pagina. Nessa chamada ao CENTRO pela paginacao eu preciso re-enviar o formulario do TOPO para poder FILTRAR novamente a TABELA. quando eu clico na paginacao ele reabre no CENTRO mas da erro de variavel que no caso é a (cCodigo) que deveria vir do ($_GET) do (TOPO) segue o link q uso para reabrir no centro <a href='mostragenericos.php?pagina=".$i."' target='_self'>|".$i."| // mostragenericos = FRAME CENTRO!! no caso seria +- assim no meu entender :D tem como fazer uma funcao em scrip apra ler o conteudo do frame TOPO? function pegacodigo() { // tem como eu capturar o conteudo de outro frame da mesma pagina? // tipo: cCod = FrameTOPO.document.cCodigo.value; // seria o maximo!!!! } <a href='mostragenericos.php?cCodigo=PEGACODIGO() &pagina=".$i."' target='_self'>|".$i."| estou saindo do DELHI e desenvolvendo este projeto e so tenho 20 dias para entrega-lo, preciso de ajuda!! :D valeu, espero não ter dificultado mais!!! obg at+
  18. Olá ESerra já pensei nisso , mas como seria?? porque... so passo o numero da pagina e os controles de formulario quando clico no submit do frameTOPO, ai vai.... depois q aparece os dados e os controle de paginacao no centro já não envia, so consigo envar O (Nº PAGINA), mas os controle "inputs" do frameTOPO não vai (cCodigo e cNome ) mas quando estou já no FrameCENTRO onde está os dados e os controle de paginacao, não da pra enviar. o link de controle (primeiro... 1 2 3 4 5 6 .. . ultima pagina) quando clicado "reabre" o mesmo frameCENTRO da seguinte forma: echo "<a href='mostragenericos.php?p=".$i."' target='_self'>".$i."</a> "; esse mostragenericos é o (FRAME_CENTRO) no href='mostragenericos? ...' gostaria de enviar os controle do (FRAME_TOPO) , resolveria se eu conseguisse ler do FRAME_CENTRO os controle do formulado do frameTOPO!!???? grato, Renato Muniz.
  19. Oá pessoal, estou com com este probleminha e gostaria da ajuda de vocês. Tenho uma pagina q contém frame no TOPO assim ficaram salvos os arquivos: topoframe, centroframe e o principal (consultas) topoframa = campos (cCodigo) e (cNome). com formulario e botao submit, até aqui beleza!! envia numa boa!!! centroframe = RECEBE O FORMULARIO E PROCESSA A CONSULTA!!! beleza, também ta funcionando numa boa!!! agora... gostaria de, estando no centroframe, ler o conteúdo do formulario TOPO, ou seja (cCodigo) e (cNome). esse problema surgiu para mim, porque precisei colocar uma rotina de PAGINAÇÃO na consulta, porém a rotina fica no CENTROFRAME, e quanto clico no número da paginação ele atualiza a tela do (centro) mas não recebe mais o formulario do (TOPO =cCodigo e cNome ), só recebe legal quando clico no botão submit do topo, se não fui muito claro favor perguntar!!! preciso ler esses controle do TOPO , para poder filtrar a consulta quando clicar no numero da paginação??? quem porfavor poder me ajudar, sou desde já muito grato, at+ Renato Muniz.
  20. Olá pessoal estou com este código dando erro: dados.heados.SQL.add('case when descontopercent <> 0 then'); dados.heados.SQL.add(' (E.subtotal - (e.subtotal * a.descontopercent) /100)'); dados.heados.SQL.add('when descontopercent <> 0 then '); dados.heados.SQL.add(' (e.subtotal - a.descontoreal) '); dados.heados.SQL.add('end as totalgeral, '); Dá erro quando tento utilizar o campo TotalGeral /// erro!! dados.heados.Sql.Add(' (totalgeral - d.pago) as restapasgar,'); campo totalgeral não encontrado. se eu utilizar o campo totalgeral em outra instrucao, por exemplo um while na tabela eu consigo utiliza-lo. ou seja na instrução SQL o campo fica invisivel e pelo DELPHI acessando a tabela tipo: nTotal := dados.heados.fieldbyname('totalgeral').ascurrency; assim funciona. Mas preciso do campo na instrução SQL para um filtro. quem por favor tiver uma solucao eu agradeço muito. estou usando delphi 7 + zeos6.6.4-stable + postgresql-8.4.0-1 qualquer ajuda é válida e agradeço desde já. at+
  21. reunix, O Paradox não fornece muitos recurso em termos de SQL, logo não tem funções de tratamento de datas como, por exemplo,DateDiff. Como você precisa utilizar o campo meses que está cadastrado no registros, acredito que o meio mais simples seria estimar o período baseado na média de 30 por mês. Assim, a consulta para as datas inferiores a data atual menos a quantidade de meses cadastrada ficaria: Operações.Sql.Add('Select * from operacoes') Operacoes.Sql.Add('where data < (Date -(30*meses))');Veja se isto lhe atende. Uma alternativa a ser avaliada, criar um campo para data de término do emprestimo em sua tabela - caso em que você conseguiria maior precisão na sua consulta, já que esta data de término seria inicializada via programação ao gravar o registro. Abraços É Micheus, realmente complicado, mas já estou me livrando do Paradox, já tinha pensado no lance de (meses * 30) mas achei que iria ficar inconsistente, porém você me deu uma idéia quando mencionou calcular a data de vencimento assim vou mudar a rotina, transformando em (Operações a vencer no mês selecionado). Obrigado pela atenção. A propósito não sei usar muito bem ainda o fórum, como faço pra colocar este post como "resolvido". :)
  22. oi pessoal ainda não consegui resolver o problema, valeu!!! uso paradox vs Sql (delphi)
  23. Os dados estão sendo transferidos para MySQL? não, o banco é paradox. estou usando delphi5 e seus componentes (query) e as instruções SQL: exemplo: Operações.Sql.Add('Select * from operacoes') Operacoes.Sql.Add('where data < 6 meses');
×
×
  • Criar Novo...