Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Период в базе учета эл.энергии / 25 сообщений из 57, страница 1 из 3
26.09.2006, 04:49
    #34011411
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Проблема состоит в следующем:
Есть таблица Место_Установки.
Поля: КодМУ, НазваниеМУ
Есть таблица Показания
Поля: КодМУ, Дата_Показания, Показание

Таблицы связаны Один к многим от Места Установки к Показаниям по КодМУ
(у каждого места установки есть много показаний, например 12, или 24,вобщем показания электросчетчика на каждый месяц N-года)

Есть запрос: обе таблицы, связь один-к-многим
Поле КодМУ , поле НазваниеМУ , поле Дата_Показания , поле Показание .

На основание этого запроса сделана простая форма для ввода показаний каждый месяц.

ВОПРОС: Не могу сделать запрос так, чтобы у него, кроме выше указанных полей, были поля Показания на начало и Показания на конец , или начало и конец . Так как показания электросчетчика текущего месяца в следующем месяце становяться начальными, а в этом месяце они конечные.
...
Рейтинг: 0 / 0
26.09.2006, 05:02
    #34011416
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
можете
в основном запросе добавить два поля, которые вычисляются "итоговым" подзапросом
(для опредения начальных/конечных значений на периоде, которому принадлежит "дата этой строки")
...
Рейтинг: 0 / 0
27.09.2006, 04:22
    #34014247
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
ILL HEADможете
в основном запросе добавить два поля, которые вычисляются "итоговым" подзапросом
(для опредения начальных/конечных значений на периоде, которому принадлежит "дата этой строки")

Спасибо большое, но у меня не получилось. Если не трудно, я прикрепил примерчик=15 кB, помогите, пожалуйста.
...
Рейтинг: 0 / 0
27.09.2006, 05:39
    #34014259
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
делаем модуль с таким содержимым:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Option Compare Database
Option Explicit

Public Function fStartValue(dateValue As Date, lngKodMU As Long) As Double
' функция возвращает показания на ПЕРВЫЙ день месяца, которому принадлежит dateValue
Dim dateStart
Dim rst As DAO.Recordset

    ' определяем первый день месяца
    dateStart = DateSerial(Year(dateValue), Month(dateValue),  1 )
    Set rst = CurrentDb.OpenRecordset("select sum(nz(показание,0)) as v from показания " & _
                                    "where ((дата_показ<=#" & Format(dateStart, "mm\/dd\/yyyy") & "#) " & _
                                    "and (код_му=" & CStr(Nz(lngKodMU,  0 )) & "))")
    fStartValue = Nz(rst!v,  0 )
    rst.Close    
End Function

Public Function fEndValue(dateValue As Date, lngKodMU As Long) As Double
' функция возвращает показания на ПОСЛЕДНИЙ день месяца, которому принадлежит dateValue
Dim dateEnd
Dim rst As DAO.Recordset

    ' определяем первый день СЛЕДУЮЩЕГО месяца
    dateEnd = DateAdd("m",  1 , DateSerial(Year(dateValue), Month(dateValue),  1 ))
    Set rst = CurrentDb.OpenRecordset("select sum(nz(показание,0)) as v from показания " & _
                                    "where ((дата_показ<#" & Format(dateEnd, "mm\/dd\/yyyy") & "#) " & _
                                    "and (код_му=" & CStr(Nz(lngKodMU,  0 )) & "))")
    fEndValue = Nz(rst!v,  0 )
    rst.Close    
End Function
делаем запрос с таким кодом:
Код: plaintext
1.
2.
3.
4.
SELECT Место_Установки.код_му AS Место_Установки_код_му, показания.код_му AS показания_код_му, 
     Место_Установки.му, показания.дата_показ, показания.показание, 
     fStartValue([дата_показ],[показания].[код_му]) AS показания_начало_месяца, 
     fEndValue([дата_показ],[показания].[код_му]) AS показания_конец_месяца
FROM Место_Установки INNER JOIN показания ON Место_Установки.код_му = показания.код_му;
получаем такой результат (два последних столбца - показания на начало и конец):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 1 	 1 	Счетчик  1 	 30 . 06 . 2006 	 5468 	 0 	 5468 
 1 	 1 	Счетчик  1 	 31 . 07 . 2006 	 5589 	 5468 	 11057 
 1 	 1 	Счетчик  1 	 31 . 08 . 2006 	 5671 	 11057 	 16728 
 2 	 2 	Счетчик  2 	 31 . 05 . 2006 	 456 	 0 	 456 
 2 	 2 	Счетчик  2 	 30 . 06 . 2006 	 745 	 456 	 1201 
 2 	 2 	Счетчик  2 	 31 . 07 . 2006 	 815 	 1201 	 2016 
 3 	 3 	Счетчик  3 	 31 . 10 . 2006 	 96287 	 0 	 96287 
 3 	 3 	Счетчик  3 	 30 . 11 . 2006 	 96400 	 96287 	 192687 
 3 	 3 	Счетчик  3 	 31 . 12 . 2006 	 96520 	 192687 	 289207 
 3 	 3 	Счетчик  3 	 31 . 01 . 2007 	 97000 	 289207 	 386207 
 3 	 3 	Счетчик  3 	 28 . 02 . 2007 	 97200 	 386207 	 483407 
в запросе можно использовать DSum вместо вызова самодельных функций fStartValue и fEndValue
...
Рейтинг: 0 / 0
27.09.2006, 07:39
    #34014317
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
передавайте привет Чубайсу !
...
Рейтинг: 0 / 0
27.09.2006, 18:13
    #34016815
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Спасибо, большое, привет передам, тока я работаю в Газпроме, и не могут мне дать нормального программера для написания проги по учету электроэнергии - вот сам взялся, тока VBA - пока темный лес.
...
Рейтинг: 0 / 0
27.09.2006, 21:42
    #34017242
Да-уж
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
rus_75Спасибо, большое, привет передам, тока я работаю в Газпроме, и не могут мне дать нормального программера для написания проги по учету электроэнергии - вот сам взялся, тока VBA - пока темный лес.
Да-уж

В Газпроме нет программки по учёту электроэнергии? Хотя чего её учитывать?
...
Рейтинг: 0 / 0
28.09.2006, 05:00
    #34017466
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Возникла проблема:

Я ввел поле расхода и увидел несостыковку -

Запуская Запрос с условием отбора по Счетчику 2 видим, что 3-е по счету показание на 31.07.2006=815 , поле "Показание_начало_месяца" показывает 1201 - что физически не может быть, оно должно показывать введенное показание=745 на 30.06.2006

Счетчик 2 31.07.2006 815- введ. на эту дату 1201 -пок_нач-мес( 745 ) 2016 ( !!! ) -пок_конец_мес

В поле "Пок_конец_мес" он суммурет показания, а должен показывать.

Думаю это прописано в коде :(
...
Рейтинг: 0 / 0
28.09.2006, 05:19
    #34017470
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
дайте (НЕсловестный) пример результата для всей таблицы
что должно быть для каждой строки в колонках показания на начало и конец
...
Рейтинг: 0 / 0
28.09.2006, 06:00
    #34017478
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
в каком городе стоят ваши счетчики ?
похоже что гдето недалеко от меня %) ... если так - то газпрому может крупно повезти
...
Рейтинг: 0 / 0
28.09.2006, 07:13
    #34017499
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
rus_75Проблема состоит в следующем:
Есть таблица Место_Установки.
Поля: КодМУ, НазваниеМУ
Есть таблица Показания
Поля: КодМУ, Дата_Показания, Показание

Таблицы связаны Один к многим от Места Установки к Показаниям по КодМУ
(у каждого места установки есть много показаний, например 12, или 24,вобщем показания электросчетчика на каждый месяц N-года)

Есть запрос: обе таблицы, связь один-к-многим
Поле КодМУ , поле НазваниеМУ , поле Дата_Показания , поле Показание .

На основание этого запроса сделана простая форма для ввода показаний каждый месяц.

ВОПРОС: Не могу сделать запрос так, чтобы у него, кроме выше указанных полей, были поля Показания на начало и Показания на конец , или начало и конец . Так как показания электросчетчика текущего месяца в следующем месяце становяться начальными, а в этом месяце они конечные.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select X.КодМУ, X.Дата_Показания_КонцаМесяца, P.Показание as Показание_КонцаМесяца, Месяц
FROM
(select КодМУ, MAX(Дата_Показания) Дата_Показания_КонцаМесяца, DateSerial(YEAR(Дата_Показания), MONTH(Дата_Показания),  1 ) Месяц
FROM Показания 
GROUP BY КодМУ, YEAR(Дата_Показания), MONTH(Дата_Показания)) X
INNER JOIN
Показания P
ON
X.КодМУ=P.КодМУ AND X.Дата_Показания_КонцаМесяца=P.Дата_Показания

Ну а присобачить это к своему запросу - ты уж сам. Ключевое слово: UNION.
...
Рейтинг: 0 / 0
28.09.2006, 17:05
    #34019829
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Вот что надо (Excel), спасибо за помощь, счас попробую прикрутить это к запросу. Посмотрите вложение.
...
Рейтинг: 0 / 0
28.09.2006, 17:06
    #34019835
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Счетчики стоят в г. Екатеринбург :)
...
Рейтинг: 0 / 0
29.09.2006, 06:31
    #34020679
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
rus_75Счетчики стоят в г. Екатеринбург :)

То-то мне всегда кажется - обсчитывают, скотины...
...
Рейтинг: 0 / 0
30.09.2006, 05:37
    #34023757
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
ILL HEADв каком городе стоят ваши счетчики ?
похоже что гдето недалеко от меня %) ... если так - то газпрому может крупно повезти

Посмотрите, пожалуйста, вложение Excel
...
Рейтинг: 0 / 0
30.09.2006, 07:26
    #34023770
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
все делаем с нуля (предыдущие запрос и функции удалите)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function fStartValue(dateValue As Date, lngKodMU As Long) As Double
' функция возвращает показания на ПЕРВЫЙ день месяца, которому принадлежит dateValue
Dim dateStart
Dim rst As DAO.Recordset
    ' определяем первый день месяца
    dateStart = DateSerial(Year(dateValue), Month(dateValue),  1 )
    Set rst = CurrentDb.OpenRecordset("select max(nz(показание,0)) as v from показания " & _
                                    "where ((дата_показ<#" & Format(dateStart, "mm\/dd\/yyyy") & "#) " & _
                                    "and (код_му=" & CStr(Nz(lngKodMU,  0 )) & "))")
    fStartValue = Nz(rst!v,  0 )
    rst.Close
End Function
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT Место_Установки.код_му AS Место_Установки_код_му, показания.код_му AS показания_код_му, Место_Установки.му, 
   показания.дата_показ, показания.показание, 
   fStartValue([дата_показ],показания.код_му) AS показания_начало_месяца,
   показания.показание AS показания_конец_месяца, 
   [показания_конец_месяца]-[показания_начало_месяца] AS Расход
FROM Место_Установки INNER JOIN показания ON Место_Установки.код_му = показания.код_му

Место_Установки_код_му показания_код_му му дата_показ показание показания_начало_месяца показания_конец_месяца Расход1 1 Счетчик 1 30.06.2006 5468 0 5468 54681 1 Счетчик 1 31.07.2006 5589 5468 5589 1211 1 Счетчик 1 31.08.2006 5671 5589 5671 821 1 Счетчик 1 30.09.2006 5771 5671 5771 1002 2 Счетчик 2 31.05.2006 456 0 456 4562 2 Счетчик 2 30.06.2006 745 456 745 2892 2 Счетчик 2 31.07.2006 815 745 815 703 3 Счетчик 3 31.10.2006 96287 0 96287 962873 3 Счетчик 3 30.11.2006 96400 96287 96400 1133 3 Счетчик 3 31.12.2006 96520 96400 96520 1203 3 Счетчик 3 31.01.2007 97000 96520 97000 4803 3 Счетчик 3 28.02.2007 97200 97000 97200 200запрос конечно не оптимальный, но я не стал все менять чтобы была видна логическая связь с предыдущим
ИМХО все работает как надо
...
Рейтинг: 0 / 0
01.10.2006, 04:42
    #34024358
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Большое спасибо!!!
COOL!!!
C меня пиво :))

P.S. Можно Вам еще будет задать вопрос, если возникнет?
...
Рейтинг: 0 / 0
01.10.2006, 04:49
    #34024359
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
велкам
...
Рейтинг: 0 / 0
01.10.2006, 04:51
    #34024360
ILL HEAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
только я не понял ... в ебурге ... это в каком штате ? (сколько минус от гринвича ? ... а то пишите в какоето непонятное время )
...
Рейтинг: 0 / 0
01.10.2006, 10:08
    #34024381
ИгорьКл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
Посмотри файл Electro2k.zip
http://msa.polarcom.ru/downloads.htm
Там всё открыто может что-нибудь подойдёт тебе.
...
Рейтинг: 0 / 0
01.10.2006, 18:37
    #34024673
SNiL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
to rus_75, ILL HEAD:

Мне кажется, что основываться на максимальных показаниях (max(nz(показание,0))) не совсем правильно. Дело в том что существует такой момент в жизни счётчика, когда текущие показания становяться меньше предыдущих - т.н. "переход через 0", некоторые типы счётчиков обнуляют при поверке (возможно к электрическим последнее не относится - я работаю с узлами учёта газа). Тогда предложенная функция будет давать не правильные результаты. Эти вещи конечно можно игнорировать и вместо 100 вносить 100100 и т.д. до бесконечности. Можно изначально учесть в структуре БД и соответственно обрабатывать. Но наиболее простой вариант - от последнего значения счётчика, в заданном интервале, отнимать предыдущее, обрабатывая показания в зависимости от разрядности счётного механизма.
Хотя, подозреваю, что это лишние усложнения для данной задачи.
...
Рейтинг: 0 / 0
01.10.2006, 19:04
    #34024694
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
2rus_75
мыло/аська в профиле , обращайся.
...
Рейтинг: 0 / 0
01.10.2006, 21:13
    #34024768
oryon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
SNiL
...(возможно к электрическим последнее не относится - я работаю с узлами учёта газа). ...
Подозреваю: SNiL работает в РАО ЕЭС...
...
Рейтинг: 0 / 0
03.10.2006, 04:36
    #34027419
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
SNiLto rus_75, ILL HEAD:

Но наиболее простой вариант - от последнего значения счётчика, в заданном интервале, отнимать предыдущее, обрабатывая показания в зависимости от разрядности счётного механизма.
Хотя, подозреваю, что это лишние усложнения для данной задачи.

Этот переход я сделал через IIf, с указанием разрядности счетчика - работает вообще нормально :)
...
Рейтинг: 0 / 0
03.10.2006, 04:38
    #34027420
rus_75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Период в базе учета эл.энергии
вадя2rus_75
мыло/аська в профиле , обращайся.

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


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