Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Суммирование в субформе, по условию 
V
    Опции темы
Woodlin
Дата 15.9.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



Доброго времени суток.

Подскажите как можно суммировать записи в субформе, в моём случае это будет поле [Сумма документа], по условию, [Дата документа] за январь.

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

Me.Поле2 = DSum("[Сумма документа]", "2009", "[Дата документа] between #1/1/2009# and #1/31/2009# and 
[Код бюджетной классификации] in (SELECT [Выбираемые КБК].КБК FROM [Выбираемые КБК] 
WHERE [Выбираемые КБК].Флажок = true) and [Код ОКАТО] in (select [Выбираемые ОКАТО].Окато 
FROM [Выбираемые ОКАТО] where  [Выбираемые ОКАТО].Флажок =true)")




В субформе же отображены записи какие нужно и их хотелось бы просто суммировать.

Это сообщение отредактировал(а) Woodlin - 24.7.2012, 12:41
PM MAIL ICQ   Вверх
bopoha
Дата 15.9.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Да, DSum не потдерживает группировок. На этот случай есть DAO:
Код

Dim rst as DAO.Recordset

Set rst = CurrentDb.OpenRecordset("SELECT sum(*) as sum FROM ...", dbOpenForfardOnly)

if Not rst.EOF Then
    Me.Поле2 = nz(rst("sum"), 0)
End if

rst.Close


P.S. Вроде можно было в примечании формы написать выражение в источнике данных "=Sum(поле)". Но я не помню этих обстоятельств.

Это сообщение отредактировал(а) bopoha - 15.9.2009, 16:56
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 17.9.2009, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha, 

Цитата

Dim rst as DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT sum(*) as sum FROM ...", dbOpenForfardOnly)
if Not rst.EOF Then
    Me.Поле2 = nz(rst("sum"), 0)
End if
rst.Close


для меня это пока что слишком круто, будем разбираться. Пока что сделал обращение DSum к запросу с группировкой записей.

Только суммирование полей [Сумма документа] по дате у меня как то интересно:
вот кусок кода: [Дата документа] Like ""*.01.2009"", чтоб суммировать записи за январь

а в таком виде код почему то не работает: [Дата документа] Like ""*.1.2009"" , а мне в дальнейшем хотелось бы запустить цикл чтоб все месяцы перебирались автоматически
PM MAIL ICQ   Вверх
bopoha
Дата 17.9.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Woodlin, для дат есть спец. функции Month() - месяц, Year() - год.

Добавлено через 1 минуту и 2 секунды
Цитата(Woodlin @  17.9.2009,  08:04 Найти цитируемый пост)
а в таком виде код почему то не работает: [Дата документа] Like ""*.1.2009"" 

Потому что движок преобразует дату в строковый формат в зависимтости от региональных настроек. А это будет ввиде 00.00.0000.
PM MAIL WWW ICQ Skype GTalk   Вверх
Woodlin
Дата 17.9.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha, 
Точно, получилось

Никогда бы не догадался написать Month([Дата документа])="номер месяца"
Спасибо!!!
PM MAIL ICQ   Вверх
Woodlin
Дата 18.9.2009, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



bopoha, 
Едрить... снова упёрся.
Я наверное Вас уже задолбал, но не пойму почему Month([Дата документа])= i в цикле работать не хочет, если вместо i вручную ставлю число месяца от 1 до 12 всё работает
Код

Dim KBK_cnt As Integer         'количество записей КБК с вкл. флажком
Dim OKATO_cnt As Integer       'количество записей Окато с вкл. флажком
Dim i As Byte                          'счетчик от 1 до 12

KBK_cnt = DCount("[Флажок]", "[Выбираемые КБК]", "[Флажок]=true")
OKATO_cnt = DCount("[Флажок]", "[Выбираемые ОКАТО]", "[Флажок]=true")

With Forms![Подчиненная Свод Сумма]
  If KBK_cnt > 0 And OKATO_cnt > 0 Then
    For i = 1 To 12
      .Controls((i - 1) * 2) = DSum("[Сумма документа]", "2009 по месяцам", " Month([Дата документа])= i ")
    Next i

  End If
End With

PM MAIL ICQ   Вверх
Akina
Дата 18.9.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Да потому что выполняется сравнение именно с i, а не с его значением в программе
Код

.Controls((i - 1) * 2) = DSum("[Сумма документа]", "2009 по месяцам", " Month([Дата документа])= " & CStr(i) )




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Woodlin
Дата 18.9.2009, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.7.2009
Где: Челябинская облас ть, г. Пласт

Репутация: 1
Всего: 1



Akina, 
Спасибо за помощь, буду знать
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.