powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / График суммы по дням
5 сообщений из 5, страница 1 из 1
График суммы по дням
    #39405948
On Point
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

Есть задача. Необходимо построить в отчете график сумм ЗП по дням.
(дни = рабочая неделя с пн-сб, либо весь месяц, либо по указанному периоду)

Картинка графика во вложении.

Судя по всему необходим перекрестный запрос и даже не один.

Как я вижу примерный источник данных:
ФИО13.02.201714.02.201715.02.201716.02.201717.02.201718.02.2017Петров244.21677.230.00324.840.000.00Сидоров123.50.003468.150.000.000.00Иванов0.00135211.150.000.000.00

Сейчас возникла сложность в построении перекрестного запроса, все дело в том что получается белиберда :(
Даты отображаются только по факту расчета.

Перекрестный запрос по сумме затраченных запчастей по каждому человеку.
Код: sql
1.
2.
3.
4.
5.
6.
TRANSFORM Sum([Qty]*[price_Det]) AS SumDet
SELECT tbl_Current_Tehniks.ID_Sotrudnik
FROM (tbl_Tehniks INNER JOIN tbl_Current_Tehniks ON tbl_Tehniks.ID_Tehniks = tbl_Current_Tehniks.ID_Tehniks) INNER JOIN tbl_Okazanie_Uslug ON tbl_Tehniks.ID_Tehniks = tbl_Okazanie_Uslug.ID_Tehniks
WHERE (((tbl_Tehniks.Date_Dawn) Between dIn() And dOut()))
GROUP BY tbl_Current_Tehniks.ID_Sotrudnik
PIVOT tbl_Tehniks.Date_Dawn;



Перекрестный запрос по сумме работ.
Код: sql
1.
2.
3.
4.
5.
6.
TRANSFORM Sum(tbl_Tehniks.Sum_Remonta) AS [Sum-Sum_Remonta]
SELECT tbl_Current_Tehniks.ID_Sotrudnik
FROM tbl_Tehniks INNER JOIN tbl_Current_Tehniks ON tbl_Tehniks.ID_Tehniks = tbl_Current_Tehniks.ID_Tehniks
WHERE (((tbl_Tehniks.Date_Dawn) Between dIn() And dOut()))
GROUP BY tbl_Current_Tehniks.ID_Sotrudnik
PIVOT tbl_Tehniks.Date_Dawn;



Сумма ЗП рассчитывается: сумма работ - сумма запчастей
Я так полагаю нужно создать "правильный" источник данных для отчета, в котором смогу отобразить сводную диаграмму? Если так, то теперь необходим запрос на объединение двух перекрестных таблиц с выражениями по дням?
Как это сделать не представляю возможным
...
Рейтинг: 0 / 0
График суммы по дням
    #39406022
Интересно, как вы увязываете два перекрестных запроса?

Вероятно надо сделать следующее:
1. Создать обычный запрос с группировкой по дате и сотруднику, возвращающий стоимость запчастей в поле SumDet.
2. В ваш "запрос по сумме работ" добавить запрос из п.1 (как сохраненный или как SQL выражение) связанный по дате и сотруднику, а в TRANSFORM указать Sum(tbl_Tehniks.Sum_Remonta) - SumDet

Если услуги могут быть без запчастей, то запрос надо связывать не по INNER JOIN, а по LEFT (или RIGHT) JOIN, а в выражении вместо - SumDet указать - NZ(SumDet,0)

3. Но так получается "Даты отображаются только по факту расчета". Если нужны все даты в периоде, то и запрос2 нужно сделать обычным, а перекрестный строить на запросе Digits (ищите примеры на этом сайте) и запросе2 со связью LEFT (или RIGHT) JOIN.
...
Рейтинг: 0 / 0
График суммы по дням
    #39406072
On Point
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

Спасибо за подсказку.

Сделал по рекомендации, но вероятно я что-то упустил из виду...

1. Этим запросом (qry_SumDetIng_Having) получаю израсходованные материалы по дням:
Код: sql
1.
2.
3.
4.
SELECT Nz(Sum([Qty]*[price_Det]),0) AS SumDet, tbl_Current_Tehniks.ID_Sotrudnik, tbl_Tehniks.Date_Dawn
FROM (tbl_Tehniks LEFT JOIN tbl_Current_Tehniks ON tbl_Tehniks.ID_Tehniks = tbl_Current_Tehniks.ID_Tehniks) RIGHT JOIN tbl_Okazanie_Uslug ON tbl_Tehniks.ID_Tehniks = tbl_Okazanie_Uslug.ID_Tehniks
GROUP BY tbl_Current_Tehniks.ID_Sotrudnik, tbl_Tehniks.Date_Dawn
HAVING (((tbl_Tehniks.Date_Dawn) Between dIn() And dout()));



2. Тут смастерил запрос
Код: sql
1.
2.
3.
4.
5.
6.
TRANSFORM Sum([tbl_Tehniks].[Sum_Remonta])-[qry_SumDetIng_Having].[SumDet] AS Zarplata
SELECT qry_SumDetIng_Having.ID_Sotrudnik
FROM (qry_SumDetIng_Having INNER JOIN tbl_Tehniks ON qry_SumDetIng_Having.Date_Dawn = tbl_Tehniks.Date_Dawn) INNER JOIN tbl_Current_Tehniks ON (qry_SumDetIng_Having.ID_Sotrudnik = tbl_Current_Tehniks.ID_Sotrudnik) AND (tbl_Tehniks.ID_Tehniks = tbl_Current_Tehniks.ID_Tehniks)
WHERE (((tbl_Tehniks.Date_Dawn) Between dIn() And dOut()))
GROUP BY qry_SumDetIng_Having.ID_Sotrudnik
PIVOT tbl_Tehniks.Date_Dawn;



Запускаю, вылетает ошибка: попытка выполнить запрос, который не включает указанное выражение "Sum([tbl_Tehniks].[Sum_Remonta])-[qry_SumDetIng_Having].[SumDet]" как часть агрегатной функции

С соединениями таблиц игрался и вправо так влево, без результата.
По увязке двух перекрестных запроса по ID_Sotrudnik, чувствую, что не правильно...
...
Рейтинг: 0 / 0
График суммы по дням
    #39406074
On Point
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
График суммы по дням
    #39406150
On Point
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока получилось так что переделал запрос на основании которого построил перекрестный.

Код: sql
1.
2.
3.
4.
SELECT Nz(Sum([Qty]*[price_Det]),0) AS SumDet, tbl_Tehniks.Sum_Remonta, tbl_Current_Tehniks.ID_Sotrudnik, tbl_Tehniks.Date_Dawn
FROM (tbl_Tehniks LEFT JOIN tbl_Current_Tehniks ON tbl_Tehniks.ID_Tehniks = tbl_Current_Tehniks.ID_Tehniks) RIGHT JOIN tbl_Okazanie_Uslug ON tbl_Tehniks.ID_Tehniks = tbl_Okazanie_Uslug.ID_Tehniks
GROUP BY tbl_Tehniks.Sum_Remonta, tbl_Current_Tehniks.ID_Sotrudnik, tbl_Tehniks.Date_Dawn
HAVING (((tbl_Tehniks.Sum_Remonta)>0) AND ((tbl_Tehniks.Date_Dawn) Between dIn() And dout()));



Код: sql
1.
2.
3.
4.
5.
6.
TRANSFORM Sum([Sum_Remonta]-[sumdet]) AS Zarplata
SELECT qry_SumDetIng_Having.ID_Sotrudnik
FROM qry_SumDetIng_Having
WHERE (((qry_SumDetIng_Having.Date_Dawn) Between dIn() And dOut()))
GROUP BY qry_SumDetIng_Having.ID_Sotrudnik
PIVOT Format([qry_SumdetIng_having].[Date_Dawn],"dd");



Расчет правильный, а вот как быть с пустыми полями?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / График суммы по дням
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]