powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / К сумме за текущий месяц прибавить сумму за предыдущий
25 сообщений из 29, страница 1 из 2
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009271
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите разработать алгоритм в Access 2012:
Есть таблица итоговая таблица с разбивкой по году и месяцу:
id monthP yearP sumR
1 12 2011 9000.00
1 1 2012 60006.00
1 2 2012 22323.00
1 3 2012 80010.00
1 4 2012 10560.00

мне необходимо получить: Сумму по столбцу sumR (текущий месяц) + sumR (предыдущий месяц), если текущий месяц январь, то надо прибавить декабрь предыдущего года.

На выходе хотелось бы увидеть:
id monthP yearP sumR sumRP
1 12 2011 9000.00 0
1 1 2012 60006.00 69006.00
1 2 2012 22323.00 82329.00
1 3 2012 80010.00 102333.00
1 4 2012 10560.00 90570.00


sumRP - сумма сумм за период.

!При этом один нюанс - бывает что данных за прошлый период нет. И если данных нет- то вычислять не нужно. Оставлять пустое поле:

id monthP yearP sumR sumRP
1 12 2011 9000.00 0
1 1 2012 60006.00 69006.00

1 3 2012 80010.00 0
1 4 2012 10560.00 90570.00

Заранее благодарю за ответы и советы!
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009285
alвк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey3000,

Было бы хорошо, если бы вы приложили пример БД.
Пока могу сказать только, что сумма за предыдущий месяц будет:
Код: vbnet
1.
:dsum("sumR";"таблица";"yearP&monthP = " & yearP&monthP & " - 1")
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009314
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Dsum("SumR,"таблица","month(дата)=" & month(date))-Dsum(SumR,"таблица","month(дата)=" & month(date)-1)

надо предусмотреть вариант когда текущий месяц меньше предыдущего (январь-декабрь)
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009345
alвк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

даже не знаю что тогда в нашем случае сделать, у ТС нет даты. Тогда так(поле в запросе):
Код: vbnet
1.
:dsum("sumR";"таблица";"dateserial(yearP,monthP,1) = " & dateserial(yearP,monthP,1) - 1 &"")



Надо проверять.
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009391
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно-а зачем 2 поля "месяц" и "год" если суть это одно поле "дата" в котором есть еще и день (который когда нибудь обязательно понадобится-может стоит подумать над структурой)
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009530
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!
Прилагаю для примера образец
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009535
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Мопед не совсем мой, а данных набрано много
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009570
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alвк,

Я конечно забыл указать, что id разные (необходимо для каждого свое) - в примере указал
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009571
alвк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey3000,

Код: sql
1.
2.
3.
4.
5.
SELECT Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
Sum(Таблица1.Значения) AS итого, DSum("значения","таблица1","month(dateserial(год,месяц,1)) = " & Month(DateSerial([год],[месяц],1)-1) & "") AS пред
FROM Таблица1
GROUP BY Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
DSum("значения","таблица1","month(dateserial(год,месяц,1)) = " & Month(DateSerial([год],[месяц],1)-1) & "");
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009612
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alвк,

Спасибо! но такой вопрос - у клиента 1 в 5 месяце считает в "пред", а не нужно

начинаю понимать понемногу, но конечно туговато ...
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009708
alвк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey3000Спасибо! но такой вопрос - у клиента 1 в 5 месяце считает в "пред", а не нужно

тогда воспользуйтесь первым моим вариантом в этой теме.
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009748
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alвк,
Неудобно даже просить, но не могли бы вы прислать код запроса, я сам наверное еще битый час буду "пробовать"?
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38009785
alвк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey3000,

вот, с учётом клиентов:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
Sum(Таблица1.Значения) AS итого, 
DSum("значения","таблица1","год&месяц = " & [год] & [месяц] & " - 1 and клиент = '" & [клиент] & "'") AS пред
FROM Таблица1
GROUP BY Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
DSum("значения","таблица1","год&месяц = " & [год] & [месяц] & " - 1 and клиент = '" & [клиент] & "'");


Если же вдруг надо пропускать пустые месяцы и брать реально предыдущий, то
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
Sum(Таблица1.Значения) AS итого, Dlookup("значения","таблица1","год = " & год & " and месяц < " &  [месяц] & "  and клиент = '" & [клиент] & "'") AS пред
FROM Таблица1
GROUP BY Таблица1.Код, Таблица1.Клиент, Таблица1.Год, Таблица1.Месяц, 
Dlookup("значения","таблица1","год = " & год & " and месяц < " &  [месяц] & "  and клиент = '" & [клиент] & "'")
order by год&месяц
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #38010349
Andrey3000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alвк,

Спасибо большое за помощь! Разобрался!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
К сумме за текущий месяц прибавить сумму за предыдущий
    #39822640
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alвк,

Первый запрос отлично работает, но, если оба поля с Мес и Годом - числовые, а как будет если вместо двух числовых полей одно поле Дата (dd.mm.yyyy)?
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39822750
knigaа как будет если вместо двух числовых полей одно поле Дата (dd.mm.yyyy)?
Покажите пример данных.
Поле "Дата" типа "Дата/Время" или "Текст"?
Сколько записей для каждого клиент/месяц/год? Если одна, то какое число дня используется?
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39822836
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Поле "Дата" имеет тип "Дата/Время". Для каждого "Сотрудника" (Клиента) используется в месяц одно число - первое (01.01.2019, след мес. 01.02.2019 и т.д.)

На форуме позаимствовал БД (i-bison) и на ее основе делаю свою только для начисления зарплат. Каждый месяц после выплаты остается хвостик и его надо переносить в следующий месяц, чтобы использовать в формуле .. Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823259
kniga, если правильно понял, то в свободном поле "Переход остатка" укажите формулу:
Код: plsql
1.
=DSum('NZ([зп])-NZ([выдано])';'[трансп_расх]';'[код_МН]=' & Nz([код_МН];0) & ' And [дата]<=' & Format(DateAdd('m';-1;[дата_к]);'\#mm/dd/yyyy\#')) 
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823497
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий, да, все именно как и задумывалось ))! Огромное спасибо!!!
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823525
knigaда, все именно как и задумывалось ))! Ну вот и ладненько.
Функцию DateAdd я применил, когда тащил остаток только из предыдущей записи. Можно без нее:
Код: plsql
1.
=DSum('NZ([зп])-NZ([выдано])';'[трансп_расх]';'[код_МН]=' & Nz([код_МН];0) & ' And [дата]<' & Format([дата_к];'\#mm/dd/yyyy\#')) 
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823931
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Спасибо за обновленную формулу! Она даже наверно правильней тем, что бывают месяцы. когда не выдается 'зп'!
Правда, вот, что интересно, в bison_4 она здорово работает, а в моей базе никак... Второй день "ломаю голову" не пойму, что я пропустил. Если не трудно, может подскажете?
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823962
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут какая-то 'засада' с версиями ) у меня версия access 2016 и так как я не смог сжать до требуемых мин 150кб, то перенес обьекты в версию 2003, там вроде формула заработала. правда с переходом по записям возникла проблемка.... Вот здесь версия access 2016: https://www.dropbox.com/s/2hs0uefeq3xnchv/hr_test_2016.rar?dl=0, посмотрите, пожалуйста.
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39823969
knigaПравда, вот, что интересно, в bison_4 она здорово работает, а в моей базе никак... Второй день "ломаю голову" не пойму, что я пропустил. В функции вы используете поле "Начислено". Это вычисляемое поле в форме. Его нет в таблице, к которой обращается функция, потому и не работает. Поэтому:
1. Запрос-источник формы сохраните как отдельный запрос. Добавьте в него вычисляемое поле "Начислено" с той же формулой, что и в форме, но с использованием NZ ко всем полям, которые могут быть с Null.
2. Этот запрос используйте как источник формы, а поле формы "Начислено" привяжите к новому полю запроса.
3. В функции обращайтесь не к таблице, а к этому запросу.

По хорошему в запросе должны быть итоговые поля "Начислено всего", "Удержано всего", "К выплате" (разница между ними), "Выплачено" (НаКарту+НаРуки) и "Остаток" (разница между "К выплате" и "Выплачено"). В этом случае функция будет суммировать только поле "Остаток".
К тому же все эти поля пригодятся при печати ведомости и в других местах, где может использоваться этот запрос. А при добавлении/удалении полей или изменении логики вычислений корректировка понадобится только в одном месте - в запросе.
Удачи!
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39824188
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Спасибо! )
...
Рейтинг: 0 / 0
К сумме за текущий месяц прибавить сумму за предыдущий
    #39824426
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заработало!!!

В формуле вместо таблицы написал имя запроса с вычисляемыми полями, как и сказали, правда в форме (она подчиненная) вычисления оставил, потому что выходят ошибки в вычисляемых полях если открывать основная+подчиненная формы (покой нам только снится, работаю над ошибками))

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


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