cruzi
-
Total de ítens
13 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por cruzi
-
-
Ok vou preparar.
-
OLá, Sim eu já estou processando tudo nas query do Lazarus. Até chegar a tabela ai apresentado.
Agora é só entender com faço o select que apresente o resultado como indiquei. Mesmo que nescessite de
uma criação de tabela temporária nova.
O entendimento é bem simples: Somar os registros marcados como C de um mesmo mês e mesmo nome identificador em seguida subtrair dos registros marcados como V tambem de um mesmo mês e mesmo nome identificador.
Em suma, uma subtração das (C ompras - V endas) de um mesmo Item ocorridas no mesmo mês e apresentados como
mostro na segunda tabela.
Não uso Excel, só uso SQLite3.31.1 e não posso utilizar procedures de banco.
-
Olá!
Tenho uma questão aqui de um select que não consigo desenvolver, no exemplo.
Preciso extrair desta mesma tabela gerando outra contendo uma coluna de meses como esta
e com os resultados mês a mês.
Obs.: Uso SQLite3.31.1 e não posso utilizar procedures.
Até os resultados atuais já foram criados
varias tabelas temporarias.
Alguém poderia me auxiliar por gentileza.id_result data compra_venda nome_item valor
1 10/06/2020 C F1 6779,60
2 13/06/2020 C X1 100,50
2 15/06/2020 C F1 18537,87
3 03/09/2020 V F1 525,30
4 05/09/2020 V F1 5251,37
5 05/09/2020 V X1 90,50
6 05/09/2020 V F1 21529,88
7 06/09/2020 V F1 2100,49
8 01/10/2020 C B2 200,00
9 02/11/2020 V B2 50,00
RESULTADO DE VENDAS DESEJADO:
mes_ano compra_venda nome_item saldo01
02
03
04
05
06 V F1 soma de todas as compras em qualquer mes
07 subtraido das vendas ocorridas no mesmo mes de venda
08
09
10
11 V B2 idem
12Coloquei coluna mês com os meses que nao ocorreram, mas no ex. sairia so os registros mes 6 e 11.
mas se ficasse asim com todos os meses do ano mesmo com zero operacoes ficaria melhor, mas
se não der eu ficaria satisfeito assim mesmo so com os registros que ouveram operacoes.
Obrigado.
-
Ok, valeu, realmente!. Consegui trocar para Lazarus 2.0.8 + Zeos 7.2.6 com êxito. Agora estou atualizado.
Vou testar o ENTER/TAB.
- 1
-
Utlizo com Zeos 7.2.4. Tentei por muito instalar e usar nos Lazarus mais novos, e não funcionava de jeito nenhum.
Acabei por me satisfazer com Laz1.6 mesmo.
Se tiver esta informação de que o Z-7.2.4 funcionasse com Laz 2.x, isso me ajudaria. Ou se existe Zeos para Laz mais novo.
Juliomar, Key Preview esta true sim. Mas o erro se da mais adiante pois o compilador nem sabe destas constantes.
-
O mesmo tópico anterior foi fechado. Eu ainda estou com problemas:
As constantes VK_ ... WM.. NEXTY ETC.. não são reconhecidas no Lazarus 1.6
No Delphi funcionava assim:
if key=#13 then begin
Key := #0;
Perform(WM_nextdlgctl,0,0)
end else if Key = #27 then
Perform(WM_nextdlgctl,1,0);Teria algo imcopatível?
-
Olá!
Estou tentando utilizar o TChart com DbChartSource, e até consegui mas não estou entendendo como resolver o problema
da largura das series Barras que hora apresenta em uma largura , hora apresenta em largura normal , enfim já parametrizei ate aqui para
puxar o eixo X com marcas e Y tambem e reproduziu direitinho a fonte que é uma ZQuery. Tá funcionando mas a apresentação não parece estável.
Algum expert nisso poderia me dar uma luz por gentileza?!!
-
CONCLUINDO EM RESUMO : Agora estou livre da relação Master / Detail pelo menos neste módulo de apresentação dos dados.
Obs : Com esta construção não foi mais nescessário a tabela tempor. que serve de repositório de variáveis.
Dentro de uma procedure com ZQuery acionar o laço seguinte operando 2 query Nota e Auxiliar com a mesma tabela no banco:
With Dtm dobegin
WHILE NOT ZQryNota.EOF do //dece selecionando cada NOTA
beginZQryResultAux.First;
with ZQryResultAux do
begin;
//Posta os valores direto na tab fisica de resultado utilizando sub selects
WHILE not EOF do
begin
//SOMA coluna de tot_item e posta em totcoluna_item
ZQryResult.sql.clear;
ZQryResult.sql.add('UPDATE tbresult SET totcoluna = (SELECT SUM(tot_item)
FROM tbresult WHERE idNC = :Param_numID) WHERE idNC= :Param_numID ; ');
ZQryResult.ParamByName('Param_numID').AsString := ZQryNota.FieldByName('id').asstring;
ZQryResult.ExecSQL ;//CALCULA, POSTA CUSTO PROPORCIONAL DE CADA ITEM
ZQryResult.sql.clear;
ZQryResult.sql.add('UPDATE tbresult SET custo_item = '+
'(SELECT ((((tot_custos) / tot_opers_liq * 100) * '+
'(tot_item / 100))) '+
'FROM tbresult WHERE id_result = :ParamIDresult) WHERE id_result = :ParamIDresult; ');
ZQryResult.ParamByName('ParamIDresult').AsString := ZQryResultAux.FieldByName('id_result').asstring;
ZQryResult.ExecSQL ;//Acima Usei o metodo Parametro das Querys para nao concatenar valores.
ZQryResultAux.Next ;
end; //EOF tabela auxiliar
end; //ZQryResultAuxVZQryNota.Next;
end; //EOF notas
end; //Dtm
Solução simples para uma situação supostamente complexa.
Fica aí para quem precisar. Obrigado
-
Continuado...
Após longa espera para o Help, e ao mesmo tempo por outras sugestões e orientações foi chegado a conclusão parcial que
o melhor seria abandonar os métodos anteriores tentados como por ex.STORED PROCEDURES (SQLite não provê) ou mesmo o GROUP BY
nos selects tentados (comandos SUM, GROUP BY e outros são de agrupamento) neste caso não apresentaria
um resultado desejado. Foi sugerido a construção de uma tabela temporaria (Create TEMP tbtempor ....) sem ligação , e trabalhar
postando em cada coluna de totais e cálculos diversos individualmente via uma procedure D.Pascal/L.pascal e fazer laços usando
componentes de classes TQuerys nativas:RECOMEÇO COM UM TESTE CURTO:
//Objetivo : fazer update de um resultado de uma soma anteriormente feita na mesma tabela.
//tbresult é uma tabela normal criada e populada a partir de outra tabela matriz ,em tempo de execução.
//Tem 3 registros com ocorrencias de idNC = 27 na tabela tbresult
//Criei uma tabela temporaria so para armazenamento de valor de variáveis como por ex. somas.procedure TformLISTA.calcula(Sender: TObject);
Var s: string;
vof : integer;
beginDtm.ZQryResult.sql.clear;
Dtm.ZQryResult.sql.add('CREATE TEMP TABLE IF NOT EXISTS tbtempor(totitem FLOAT); ');
Dtm.ZQryResult.ExecSQL;//Query ja foi assignada com SLECT * from tbresult , na propriedade SQL inicial do compon.
with Dtm.ZQryLista do
begin;Open ;
sql.clear;
sql.add('INSERT OR REPLACE INTO tbtempor (totitem) VALUES((SELECT SUM(tot_item) FROM tbresult WHERE idNC = :Param_numID));');
ParamByName('Param_numID').Value := 27;
ExecSQL;Dtm.ZQryResult.sql.clear;
Dtm.ZQryResult.sql.add('UPDATE tbresult SET total = (SELECT totitem FROM tbtempor) WHERE idNC = :Param_numID ;');
Dtm.ZQryResult.ParamByName('Param_numID').Value := 27;
Dtm.ZQryResult.ExecSQL;
end;
end;//Proced
Até aqui funciona mas sigo agora com a construção do laço seguinte que dará o mecanismo de loop onde apresenta um problemacrítico . Postarei em prox. análise.
Obs.Sr ou sra Monitora , favor nao fechar o post até eu demonstrar o ponto de erro. Obrigado
- 2
-
Continuando:
Segue as duas tabelas para melhor entendimento,
TBNOTA (master)
id num_nc data val1 val2 val3
1 0001 2020-05-17 10.0 1.0 3.0
2 9619 2020-04-01 0.09 0.57 0.0
3 0003 2020-03-15 7.36 1.13 0.0
AUTOTBOPERACAO (detalhes)
id nome_item_ qde preco_un idNC
1 ITEM-X1 1.0 525.3 2
2 ITEM-B2 15.0 103.87 2
3 ITEM-B2 10.0 104.0 2
4 ITEM-C3 41.0 452.0 1
5 ITEM-C3B 15.0 98.8 1
AutoO seguinte select já bem simplificado que o anterior, baseado nas tabelas acima produz o resultado abaixo:
SELECT A.id, idNC, B.DATA AS data_FK, B.num_nc AS nota_FK, nome_do_item, qde, preco_un,
(qde * preco_un) AS tot_item,
B.val1 + B.val2 + B.val3 AS tot_custos,
SUM(qde * preco_un ) AS tot_coluna_item,
-->CALCULO DO CUSTO DE CADA OPERACAO
(((B.val1 + B.val2 + B.val3) / IFNULL((SUM(qde * preco_un )),0) * 100
* ((qde * preco_un) / 100))) AS CUSTO_ITEM
FROM tboperacao AS A
LEFT OUTER JOIN tbnota AS B ON (B.id = A.idNC)
GROUP BY idNCid idNC data_FK nota_FK nome_do_item qde preco_un tot_item tot_custos tot_coluna_item CUSTO_ITEM
4 1 2020-05-17 0001 ITEM-C3 41.0 452.0 18532.0 14.0 20014.0 12.96
1 2 2020-04-01 9619 ITEM-X1 1.0 525.3 525.3 0.66 3123.35 0.11O objetivo desta é apurar o custo proporcional de cada ítem (CUSTO_ITEM) que traz corretamente mas,
observe que no resultado não aparece os outros ítens de detalhes de cada nota. Somente o primeiro de cada nota.Eu queria todos os outros registros de cada respectiva nota.
Quando eu monto tudo isso no programa eu consigo ver os outros registros de detalhes se eu selecionar manualmente um ítem da tabela master, então aparece todos os registros pertinentes a da nota escolhida e todos os cálculos corretos, lembrando que no programa eu utilizo uma parte do cálculo como por ex. -->CALCULO DO CUSTO DE CADA OPERACAO por método CalcField da query QRYOPERACAO. O que eu precisava é que isso funcionasse apenas em um select , sem nenhuma linha de metodo CalcField. Porque? Porque agora com cada operacao de todas as notas eu terei que ter uma base de dados única para fazer select por datas ou mês e o campo CUSTO_ITEM já calculado é mandatório. Acho que agora ficou mehor . Mais uma vez agradeço muito a quem se propuser me ajudar . Obrigado e aguardo.
Só para lembrar , eu utilizei GROUP BY neste selct somente para ilustrar e poder fazer os calculos, no programa eu não usei isto , usei método de propriedade master / detalhes que mostra somente uma nota por vêz quando seleciona ela.
-
Pode não ser útil neste post mas a Informação relevante para quem utiliza ou pretende :
A partir do SQLite 3.31.1 já esta vindo com gerador de campos em tempo de criação da tabela
VARX INT GENERATED ALWAYS AS (a*abs(b)) VIRTUAL,
nome_campo tipo_dados [GENERATED ALWAYS] AS expressao [VIRTUAL | STORED]
constraints
Onde: [GENERATED ALWAYS] = Sempre gerar
[VIRTUAL | STORED] = Virtual = Valor e coluna é armazenado toda vez que faz um selec.
Stored = Valor é gerado fisicamente no banco de dados. Mais rápido.
Expressao = Ex. AS (num1 * num2) -
Olá !
alguém por gentileza poderia me dar um help :
Estou num dilema a dias com o seguinte senário: Com Lazarus 1.6 com ZQuery e SQLite 3.31.1
Tenho uma tabela detalhes ,de poucos registros (100)
que com o seguinte select eu tento fazer um cálculo que é baseado em uma soma de uma coluna de um lote de registros (estou testando com GROUP BY).Uso uma Query master e uma Query detalhes que estao ligadas por Master / detalhes id X idNC. Puxei um total, campos de data e numero de
Nota da tabela master pelo metodo LEFT OUTER JOIN que me traz certinho e ainda traz valores que somo no SQL.
Antes tinha feito uma miscelânea que alguns calculos foi direto no SELECT outros usei por metodo CalcField na tabela detalhe.
Como modulo somente para digitação está perfeito , monta toda a massa de dados que preciso, mas agora nescessito de
trabalhar com datas nesta base e o agravante é que existe uma dependência nesta forma que me obriga a ter a tabela master
ligada, porque ela que dá alguns valores totalizados (tot_custos) e liga a chave primaria quando na seleção .
Estou tentando agora eliminar a relação da tabela master para que o SELECT na detalhes faça tudo com autonomia.
SELECT A.id,
A.idNC,
B.data, AS dataFK,
B.num_NC AS num_nota_FK,
nome_do_item,
qde,preco_un,
tot_item,
IFNULL(B.val1,0) + IFNULL(B.val2,0) + IFNULL(B.val3,0) AS tot_custos ,
IFNULL((qde * preco_un),0) AS tot_item,
IFNULL((SUM(tot_item)),0) AS tot_colunaItem,
(((IFNULL(tot_custos,0) / IFNULL(tot_colunaItem,0)) * 100) * (tot_item / 100)) AS custo_itemFROM tboperacoes AS A
LEFT OUTER JOIN tbnotacorret AS B ON (B.id = A.idNC)
GROUP BY A.idNC
Obs. Usei IFNULL para precaver erro de entrada ainda nula ou divisao por zero.
Onde id : Chave primaria Identificadora da tabela master que seve de cabeçalho e numeração e data da nota.
idNC : Referencial na tabela detalhes.
Alias A : Refere-se a tabela detalhes.
Alias B : Refere-se a tabela master.A expressão do calculo já esta ok tambem, mas não apresenta todos os registros, só o primeiro de cada nota. Eu queria de todos.
O PROBLEMA: quando retiro a ligação master/detale ela não varre todos os registros apresentando somente o primeiro de cada nota.
No grid da tabela master rodo este select que esta em procedure Calculquery para cada registro selecionado na query master via um grid de edição.para poder prosseguir em pesquisas nestes resultados já conseguidos.
já tentei com ROOLUP mas SQLite não tem isso só emulado assim mesmo não sei se é isso que faria efeito.
Preciso eliminar o método master/detalhes das querys que coloquei via propriedades master fild/master source etc.. e utilizar tudo via SQL.Agradeço muito a quem se envolver neste help, que poderia até servir de estudo de caso para os demais.
Hint nas colunas do DBGrid Lazarus
em Object Pascal - Delphi & Lazarus
Postado
OLá,
Estive tentando adaptar um procedimento de Delphi para que pudesse ativar o Hint nas colunas
do DBGrid do Lazarus 2.0.8 .
Já tentei até uma classe que encontrei na Web :
AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
mas nao obtive êxito.
Alguem poderia por favor me ajudar num dica mais certeira.