powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Need help. Опять объединение таблиц. :-)
9 сообщений из 9, страница 1 из 1
Need help. Опять объединение таблиц. :-)
    #32433950
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное, в прошлый раз я не очень хорошо сформулировал вопрос... Проблема решена не была. А надо срочно. :-) Заранее спасибо за ответы.

Итак. Есть две таблицы.

[Приход]:
Нефтебаза / Дата / Поставщик / Вид топлива / Плотность / Приход (л) / Приход (кг)

[Расход]:
Нефтебаза / Дата / Поставщик / Вид топлива / Плотность / Расход (л) / Расход (кг) / Сальдо (кг)

Почти каждый день обе таблицы заполняются, но может случиться и так, что на определенную дату заполняется только одна таблица (например, если от конкретного поставщика был только приход на определенную нефтебазу определенного вида топлива, а расхода по этим параметрам не было).

Мне требуется составить отчет <b>на любую указанную на форме дату</b> примерно следующего вида:

Отчет за <дата>
----------------
Нефтебаза 1 ->
Поставщик 1 ->
Вид топлива 1 / Приход (кг) / Расход (кг) / Сальдо (кг)
Вид топлива 2 / Приход (кг) / Расход (кг) / Сальдо (кг)
Поставщик 2 ->
Вид топлива 1 / Приход (кг) / Расход (кг) / Сальдо (кг)
Вид топлива 2 / Приход (кг) / Расход (кг) / Сальдо (кг)

...

Нефтебаза 2 - аналогично
...
Нефтебаза N - аналогично

Естественно, отчет составляется по двум таблицам, описанным выше. Данные попадают в отчет только тогда, когда они там за указанную дату есть.

По сути нужно взять четыре поля (Нефтебаза / Дата / Поставщик / Вид топлива ) из одной таблицы, к ним добавить поле (Приход (кг)) из этой же таблицы и два поля (Расход (кг) / Сальдо (кг)) из второй таблицы (у нее есть эти же четыре поля). Если данные по этим четырем полям для какого-то конкретного случая совпадают, необходимо, чтобы значения остальных трех добавленных полей записывались со значениями этих четырех одной строкой.

Если есть расход, но нет прихода в каком-то конкретном случаем, то значения всех полей в этом случае просто берутся из таблицы [Расход] (они там есть), а значение поля "Приход (кг)" берется равным "0".

Если есть приход, но нет расхода в каком-то конкретном случае, то значения основных четырех полей и дополнительного (Приход (кг)) в этом случае берутся из таблицы [Приход], а значения (Расход (кг) и Сальдо (кг)) берутся по этим четырем основным параметрам из таблицы [Расход] (естественно, значение поля "Расход (кг)" там будет равным "0", т.к. расхода не было, а значение поля "Сальдо (кг) будет явно прописано (это делается заранее программно)).

Словом, требуется за конкретную дату, указываемую на форме, объединить две таблицы, виртуально вырезав часть их полей и сохранив все строки за эту дату. Причем некоторые строки при совпадении четырех первых основных полей "накладываются" друг на друга.
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32433953
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дата расхода может и не равняться дате прихода...так ? (Значит совпадения по трем полям)...И как понять: есть расход, а прихода на этот продукт нет...? Я понял, что продали то, что не имели ? И как ты хочешь реализовать, на SQL or VBA ?
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32433957
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>> Дата расхода может и не равняться дате прихода...так ? (Значит совпадения по трем полям)...

Если дата расхода не равняется дате прихода, то нас интересует только тот вид движения товара, который относится к дате построения отчета. И все равно 4 поля: если дата совпадает => одной строкой, в которой есть и приход и расход, если нет => одной строкой, но либо приход, либо расход имеет значение "0". Сальдо есть в обоих случаях.

>>> И как понять: есть расход, а прихода на этот продукт нет...? Я понял, что продали то, что не имели ?

Нет. Это значит, что когда-то ранее привезли этот товар, а только сегодня продали. Значит, приход попал в отчет за ту раннюю дату и нас не интересует, а расход надо в сегодняшнем отчете отразить (приход в сегодняшнем отчете будет "0").

>>> И как ты хочешь реализовать, на SQL or VBA ?

Реализовать надо SQL-запросом, чтобы потом на его основе строить отчет.
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32433983
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч? :-)
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32433998
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная ,однако структура. Почему не хранить все данные в одной таблице?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select t.[Нефтебаза],
         t.[Поставщик],
         t.[Вид топлива],
         t.[Дата],
         t.[Приход] ,
         nz(t1.[Расход], 0 )  [Расход]
         nz(t1.[Сальдо], 0 )  [Сальдо]
from [Приход] t left join [Расход] t1 on t.[Нефтебаза]=t1.[Нефтебаза]
        and t.[Поставщик]=t1.[Поставщик]
        and t.[Вид топлива]=t1.[Вид топлива]
        and t.[Дата] =t1.[Дата]
union
select tt1.[Нефтебаза],
         tt1.[Поставщик],
         tt1.[Вид топлива],
         tt1.[Дата],
         nz(tt.[Приход], 0 ) ,
         tt1.[Расход],
         tt1.[Сальдо]
from [Приход] tt  right join [Расход] tt1 on tt.[Нефтебаза]=tt1.[Нефтебаза]
                   and tt.[Поставщик]=tt1.[Поставщик]
                   and tt.[Вид топлива]=tt1.[Вид топлива]
                   and tt.[Дата] =tt1.[Дата]


Запоминаешь запрос например под именем q.

Далее пишешь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select [Нефтебаза],
         [Поставщик],
         [Вид топлива],
         [Дата],
         sum( [Приход] )  [Приход] ,
         sum([Расход]) [Расход],
         sum([Сальдо]) [Сальдо]
from q
group by [Нефтебаза],[Поставщик],[Вид топлива],[Дата]
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32434016
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторВладимир Саныч? :-)
Дадамс?
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32434239
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(c)VIG, спасибо тебе огромное, по-настоящему выручил! Организация такая потому, что в свое время я над ней не задумался. А надо было.

Отчет я построил, но возникла следующая вещь: в отчете производятся вычисления. Т.е. в свойствах поля отчета я вызвал конструктор и составил след. выражение:
=[Сальдо (кг)]+[Расход (кг)]-[Приход (кг)]
По какой-то вполне объяснимой причине он понимает это действие как работа со стрингами и вместо того, чтоб, скажем поставить 0 (приход = 950, расход = -950), он ставит "-950950". В некоторых строках его "вычисления" даже логике не поддаются. Наверное, или в запросе, который ты рассказал, как строить, или в свойствах самого поля, или в выражении надо прописать тип данных. Где? :-)
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32439096
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Up.
...
Рейтинг: 0 / 0
Need help. Опять объединение таблиц. :-)
    #32439256
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если

=CDbl[Сальдо (кг)]+CDbl[Расход (кг)]-CDbl[Приход (кг)] ?

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


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