CALCULO DE PERCENTUAL E FAZER UPDATE EM OUTRA COM RESULTADO
16/04/2015
0
sou novo no fórum e estou engatinhando na programação não fiz curso algum tudo que sei é frutos de pesquisas e
na pratica do dia a dia então me desculpem se eu soltar algumas grandes besteiras.
Trabalho em uma empresa que representa sistemas fiscais, e como sabemos estes sistemas a maioria é limitado por questões de legislação federal, estadual e alguns ate municipal, a as vezes precisamos criar um relatórios a parte como este que estou tentando fazer.
preciso pegar do banco de dados as vendas feitas com cupom fiscal e somar todos e agrupar por formas de pagamento, até ai ta tranquilo usei
a sql
SELECT VENDAS_FORMASPAG.DESCRICAO,SUM(CAST(VALOR AS DECIMAL(15,2))) AS VALOR FROM VENDAS_FORMASPAG WHERE VENDAS_FORMASPAG.DATA = '2015-04-14' and CANCELADO = '0' GROUP BY VENDAS_FORMASPAG.DESCRICAO ";
Aqui esta uma imagem deste resultado estou fazendo ele com php
resultado
o codigo do php esta assim
<?php //$servidor = "127.0.0.1:c:\bases\BASE_AA.GDB"; $servidor = "192.168.0.104:C:\sistema\DADOS\DADOS.FDB"; //conexão com o banco, se der erro mostrara uma mensagem. if (!($dbh=ibase_connect($servidor, 'SYSDBA', 'masterkey'))) die('Erro ao conectar: ' . ibase_errmsg()); //Fazer uma consulta no banco: $dia = $_POST['fdata']; $sql = "SELECT VENDAS_FORMASPAG.DESCRICAO,SUM(CAST(VALOR AS DECIMAL(15,2))) AS VALOR FROM VENDAS_FORMASPAG WHERE VENDAS_FORMASPAG.DATA = '$dia' and CANCELADO = '0' GROUP BY VENDAS_FORMASPAG.DESCRICAO "; $sqlcontar = ibase_query("SELECT COUNT(CANCELADO) FROM VENDAS_FORMASPAG WHERE DATA = '$dia' and CANCELADO = '0'"); $contar = ibase_fetch_row($sqlcontar); $num = $contar['0']; $consulta = ibase_query($sql); ?> <html> <head> <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div id="teste"> <center><img src="img/logo-RC-100-67.png"></center> </div> <link href="css.css" rel="stylesheet"> <br /> <div id="contar" align="center"> <?php echo "Quantidade de Registros Contabilizados = ".$num; ?> </div> <div id "tabela" align="center"> <table border="0" align="center" class="tabela"> <tr> <td width="300"><div align="center" class="letra_cabeçalho">DESCRICAO</div></td> <td><div align="center" class="letra_cabeçalho">VALOR</div></td> </tr> <?php $i = 0; while ($imprime = ibase_fetch_assoc($consulta)){ $descricao = $imprime['DESCRICAO']; $valor = $imprime['VALOR']; $i++; $style = ($i % 2 == 0) ? 'style="background:#B4CDCD"' : 'style="background:#7A8B8B;"'; ?> <tr <?php echo $style; ?>> <td class="bordinha"><pre class="txtabela"><?php echo $descricao; ?></pre></a></td> <td class="bordinha"><pre class="txtabela"><?php echo $valor; ?></pre></td> </tr> <?php } ibase_close(); ?> <br/> <br/> <form action="cpos.php" method="post" align="center" > Data: <input type=date name=fdata><br> <input type=submit value="OK"> </form> <link href="css.css" rel="stylesheet"> <div align="center" class="titulo"><h1></h1></div> <br /> <div id="contar" align="center"> <?PHP echo "________________________"; echo "<br>"; echo "Data Processada: " .$_POST['fdata']; echo "<br>"; echo "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯"; ?> <br /> <br /> </div> </div> </table>
Porem preciso depois de saber o total do dia quanto cada forma de pagamento teve e descontar um porcentagem que vai ser paga a operadoras de cartões, dai começou
a me dificultar pois tentei alguns sql mas não resolveu resumido cada forma de pagamento teria um percentual.
Bom resumidão preciso pegar a tabela de vendas agrupar por formas de pagamento (pois cada venda gera um registro na tabela) depois descontar o percentual de cada forma de pagamento e me mostrar quanto sobraria para o cliente realmente sem o percentual. e esse resultado fazer um update em uma tabela para que depois eu consiga printar ela com php.
ex: forma de pgto = percentual a ser pago
boleto = 0
cielo_elo_cred = 3,2
cielo_elo_deb =2
dinheiro =0
get_master_1x =3,5
get_master_2x =4,2
get_master_3x =4,2
get_master_4x =4,3
get_master_deb =2
get_visa_1x =3,5
get_visa_2x =4,2
get_visa_3x =4,2
get_visa_4x =4,3
get_visa_deb =2
hiper_1x =3,95
hiper_2x =4,65
redecard_1x =3,65
redecard_2x =4,35
redecard_3x =4,35
redecard_4x =4,35
redecard_deb =2
para facilitar a quem me ajudar a estrutura da tabela é essa
CREATE TABLE VENDAS_FORMASPAG ( NOTA VARCHAR(6) CHARACTER SET NONE COLLATE NONE, MODELO CHAR(2) CHARACTER SET NONE COLLATE NONE, SERIE CHAR(3) CHARACTER SET NONE COLLATE NONE, SUBSERIE CHAR(2) CHARACTER SET NONE COLLATE NONE, ORIGEM CHAR(2) CHARACTER SET NONE COLLATE NONE, DATA DATE, DESCRICAO VARCHAR(20) CHARACTER SET NONE COLLATE NONE, VALOR NUMERIC(15, 4), CANCELADO SMALLINT); CREATE INDEX IDX_VENDAS_FORMASPAG ON VENDAS_FORMASPAG(NOTA,MODELO,SERIE,SUBSERIE,ORIGEM,DATA);
se puderem me ajudar agradeço.
Marcos Aurelio
Post mais votado
16/04/2015
A integração entre bancos no Firebird ( via Execute Statment on Data Source ) só funciona a partir da versão 2.5, que é superior a versão do teu ambiente.
Sendo assim, minha sugestão é rodar a query com o group by de vendas do lado do Firebird, recuperarando todas as linhas geradas do lado do PHP e descarregando essas linhas em outro banco de apoio ( eventualmente até no MySql ) em uma temporária.
Ou seja, você usaria a aplicação para intercambiar os dados entre os bancos.
Depois da temporária gerada, fica simples gerar a query completa, conforme conversamos hoje a tarde.
Acaba sendo o método mais rápido para atender sua necessidade.
Ok ?!?
Marcos P
Mais Posts
16/04/2015
Marcos P
Vai no Fiddle, crie a tabela e insira alguns registros de teste.
Depois volte aqui, que eu te ajudo com a query...
16/04/2015
Marcos Aurelio
16/04/2015
Marcos P
16/04/2015
Marcos Aurelio
lembrando consegui colocar como mysql mas a biblioteca de comandos firebird e diferente do mysql.
16/04/2015
Marcos P
1. preciso pegar a tabela de vendas agrupar por formas de pagamento
2. depois descontar o percentual de cada forma de pagamento
3. resultado fazer um update em uma tabela para que depois eu consiga printar ela com php
perguntas...
1. O group by que você já fez ( GROUP BY VENDAS_FORMASPAG.DESCRICAO ), resolve essa questão... certo ?
2. Qual a coluna que representa o percentual a ser descontado ?
3. Essa parte ficou confusa... update em qual tabela ?
Se fizermos uma query que retorne o total e o desconto, você não consegue tratar direto do lado da aplicação ?
16/04/2015
Marcos Aurelio
estava tentando fazer uma query por cada forma de pagamento assim ja colocando na própria query o percentual se a necessidade de criar uma nova tabela.
tentei usar assim mas não deu certo:
select (valor * (15 / 100)) as valor_receber from VENDAS_FORMASPAG;
dai eu criaria uma query por forma de pagamento n sei se seria viavel não tenho muita experiencia pois depois teria que tratar no php.
16/04/2015
Marcos Aurelio
estava tentando fazer uma query por cada forma de pagamento assim ja colocando na própria query o percentual sem a necessidade de criar uma nova tabela.
tentei usar assim mas não deu certo:
select (valor * (15 / 100)) as valor_receber from VENDAS_FORMASPAG;
dai eu criaria uma query por forma de pagamento n sei se seria viavel não tenho muita experiencia pois depois teria que tratar no php.
respondendo com mais clareza não tenho esta informação de percentual no banco e não posso colocar pois se trata de um programa fiscal não posso alterá-lo o que posso fazer e criar outro banco de dados e fazer um update ou insert, não posso manipular o banco original a fiscalização não permite e iria dar uma multa gigantesca para o cliente e para minha empresa. mas posso extrair informações sem problemas.
16/04/2015
Marcos P
Caso não seja, são muitas opções de percentual e qual a regra que define qual percentual se aplica a qual item ?
16/04/2015
Marcos Aurelio
boleto = 0
cielo_elo_cred = 3,2
cielo_elo_deb =2
dinheiro =0
get_master_1x =3,5
get_master_2x =4,2
get_master_3x =4,2
get_master_4x =4,3
get_master_deb =2
get_visa_1x =3,5
get_visa_2x =4,2
get_visa_3x =4,2
get_visa_4x =4,3
get_visa_deb =2
hiper_1x =3,95
hiper_2x =4,65
redecard_1x =3,65
redecard_2x =4,35
redecard_3x =4,35
redecard_4x =4,35
redecard_deb =2
16/04/2015
Marcos P
Nesse novo, crie uma tabela com esses percentuais para cada uma das formas de pagamento...
Aí fazemos o select usando a tabela de vendas do banco de produção ( somente select ) e todas as demais tabelas de apoio no banco de consulta.
Para adiantar, crie também no Fiddler essa tabela com os percentuais.
Me avise que eu preparo a query e depois você adapta ela para referência ao outro banco.
Entendeu a ideia ?
Outra coisa essa tabela q você criou não suporta o GROUP ( GROUP BY VENDAS_FORMASPAG.DESCRICAO ), pois não existe essa coluna nela. Acho bom você revisar isso, também !
Se complicar a comunicação, tenho GTalk e Skype. Me passe teus contatos que falamos por lá...
16/04/2015
Marcos Aurelio
só peço que se identifique no pedido pois este skype e direcionado somente para trabalho então não aceito pedidos que não saiba de quem é.
17/04/2015
Marcos Aurelio
11/06/2015
Marcos Aurelio
SELECT VENDAS_FORMASPAG.DATA, VENDAS_FORMASPAG.DESCRICAO, FORM_PGTO.PERCENTUAL, CAST(SUM(VENDAS_FORMASPAG.VALOR) AS DECIMAL(15,2)) AS TOTALBRUTO, CAST((SUM(VENDAS_FORMASPAG.VALOR)* (FORM_PGTO.PERCENTUAL/100)) AS DECIMAL(15,2)) AS TOTALPERCENTUAL, CAST((SUM(VENDAS_FORMASPAG.VALOR)-(SUM(VENDAS_FORMASPAG.VALOR)* (FORM_PGTO.PERCENTUAL/100))) AS DECIMAL(15,2)) AS TOTALLIQUIDO FROM VENDAS_FORMASPAG INNER JOIN FORM_PGTO ON (VENDAS_FORMASPAG.DESCRICAO = FORM_PGTO.FORMAS) WHERE VENDAS_FORMASPAG.CANCELADO = '0' AND VENDAS_FORMASPAG.DATA = '$dia' GROUP BY VENDAS_FORMASPAG.DATA, VENDAS_FORMASPAG.DESCRICAO, FORM_PGTO.PERCENTUAL ORDER BY VENDAS_FORMASPAG.DATA, VENDAS_FORMASPAG.DESCRICAO;
[img:descricao=Resultado do relatório]http://arquivo.devmedia.com.br/forum/imagem/424944-20150611-140221.jpg[/img]
Clique aqui para fazer login e interagir na Comunidade :)