Topic: Помогите с отчетом пожалуйста
На форме frmMain имеется button5 которая выдает отчет за период от DTP1 до DTP2. Надо еще в этом отчете внедрить name из таблицы oper. Отчет должен выглядеть как на рисунке 2. Помогите с реализацией пожалуйста.
My Visual Database → Reports → Помогите с отчетом пожалуйста
На форме frmMain имеется button5 которая выдает отчет за период от DTP1 до DTP2. Надо еще в этом отчете внедрить name из таблицы oper. Отчет должен выглядеть как на рисунке 2. Помогите с реализацией пожалуйста.
Решил задачу сам. Как мне поставить порядковый номер в отчете?. Проект прилагается.
Номер напротив фамилии? к сожалению я не смог найти способ, как это сделать.
1. Да с номером напротив каждой фамилии.
2. При выводе отчета идет наслоение данных. Как сделать отчет показанный на рисунке. Проект с рисунком прилагается.
Спасибо заранее.
1. Да с номером напротив каждой фамилии.
2. При выводе отчета идет наслоение данных. Как сделать отчет показанный на рисунке. Проект с рисунком прилагается.Спасибо заранее.
2. Необходимо добавить на страницу PageHeader, также gif рисунки не поддерживаются, сделал png. Исправленный проект:
Спасибо большое. Как же быть с порядковым номером напротив фамилий? Можно ли реализовать это как то по другому?
Нашел способ, с помощью такого SQL запроса
select
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.fio <= patient.fio) || '. ' || patient.fio as "FIO",
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
from patient,
main,
oper,
tovar
where oper.id = patient.id_oper
and tovar.id = main.id_tovar
and patient.id = main.id_patient
and
(CASE WHEN {DTP1} IS NOT NULL THEN date(patient.date) >= date({DTP1}) ELSE 1=1 END)
and
(CASE WHEN {DTP2} IS NOT NULL THEN date(patient.date) <= date({DTP2}) ELSE 1=1 END)
;
Доработанный проект:
Огромное спасибо! Есть одна загвоздка. В отчете порядковый номер идет вместе с фамилией в одной ячейке. Я немного хотел изменить ваш скрипт и сделал типа так:
select
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.fio <= patient.fio) || '. ' || as "Number",
patient.fio,
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
но при нажатии на отчет выдает ошибку Error Message: near "as": syntax error.
Далее я изменил скрипт на это и она заработала, но порядковый номер идет без точки после номера. То есть я хотел чтобы номер был в одной колонке с точкой, а фамилия в другой колонке :
select
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.fio <= patient.fio) as "Number",
patient.fio,
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
Можно ли сделать чтобы и точка была после номера?
Попробуйте так
SELECT
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.fio <= patient.fio) || '.' as "Number",
patient.fio,
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
from patient,
main,
oper,
tovar
where oper.id = patient.id_oper
and tovar.id = main.id_tovar
and patient.id = main.id_patient
and
(CASE WHEN {DTP1} IS NOT NULL THEN date(patient.date) >= date({DTP1}) ELSE 1=1 END)
and
(CASE WHEN {DTP2} IS NOT NULL THEN date(patient.date) <= date({DTP2}) ELSE 1=1 END);
Огромное спасибо! Помогло. Кстати если в базе имеется два одинаковых фамилий то номер сразу удваивается. Например должно быть так:
1. Иванов А.
2. Федоров У.
3. Петров И.
4. Петров И.
а выглядит так:
1. Иванов А.
3. Петров И.
4. Федоров У.
Как быть?
Попробуйте так
select
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.id <= patient.id) || '.' as "Number",
patient.fio,
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
from patient,
main,
oper,
tovar
where oper.id = patient.id_oper
and tovar.id = main.id_tovar
and patient.id = main.id_patient
and
(CASE WHEN {DTP1} IS NOT NULL THEN date(patient.date) >= date({DTP1}) ELSE 1=1 END)
and
(CASE WHEN {DTP2} IS NOT NULL THEN date(patient.date) <= date({DTP2}) ELSE 1=1 END);
Спасибо работает.
Если не выбрать даты DTP1 и DTP2 то номера идут по порядку, так как идет счет всей базы. Но если выбрать даты то счет не изменяется. На примере покажу.
Если не выбрать даты:
1. Иванов А. 20.03.19
2. Федоров У. 22.03.19
3. Петров И. 25.03.19
4. Петров И. 30.03.19
5. Куганов П. 30.03.19
это нормально, но если выбрать DTP1 = 23.03.19 и DTP2 = 31.03.19 выглядит так:
3. Петров И. 25.03.19
4. Петров И. 30.03.19
5. Куганов П. 30.03.19
а должно быть:
1. Петров И. 25.03.19
2. Петров И. 30.03.19
3. Куганов П. 30.03.19
Как исправить скрипт? Помогите пожалуйста.
Попробуйте такой SQL запрос
select
(SELECT COUNT(*)
FROM patient AS t2
WHERE t2.id <= patient.id AND
(CASE WHEN {DTP1} IS NOT NULL THEN date(t2.date) >= date({DTP1}) ELSE 1=1 END)
and
(CASE WHEN {DTP2} IS NOT NULL THEN date(t2.date) <= date({DTP2}) ELSE 1=1 END)
) || '.' as "Number",
patient.fio,
patient.date,
main.kol,
oper.name as opername,
tovar.name as tovarname,
strftime('%d.%m.%Y', {DTP1}) as DTP1,
strftime('%d.%m.%Y', {DTP2}) as DTP2
from patient,
main,
oper,
tovar
where oper.id = patient.id_oper
and tovar.id = main.id_tovar
and patient.id = main.id_patient
and
(CASE WHEN {DTP1} IS NOT NULL THEN date(patient.date) >= date({DTP1}) ELSE 1=1 END)
and
(CASE WHEN {DTP2} IS NOT NULL THEN date(patient.date) <= date({DTP2}) ELSE 1=1 END);
Спасибо большое, теперь работает.
My Visual Database → Reports → Помогите с отчетом пожалуйста
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi