Добрый день!
Может кто-то посоветует, как сделать?
Ситуация: водители ежедневно сдают показания одометра (запись в соответствующей записи).
Как рассчитать ежедневный пробег (разница между последними и предпоследними показаниями одометра)?
Расчет разницы между записями
-
- Сообщения: 118
- Зарегистрирован: 06 авг 2019, 17:19
- Имя: Константин
- Откуда: РФ
- alcompstudio
- Спонсор
- Сообщения: 1740
- Зарегистрирован: 03 янв 2016, 20:42
- Имя: Александр
- Откуда: Мир
Re: Расчет разницы между записями
Есть теоретическое предположение.
Смею предположить, что у вас примерно такая структура (очень приблизительно):
Показания
- Регистрация текущего значения одометра
В сущности "Регистрация текущего значения одометра" заносятся промежутки (отдельные записи) с текущим показанием одометра.
В сущность Показание (или другую родительскую) будут передаваться, собственно результаты вычисления (разница между предыдущим и последним значением одометра из вложенной сущности).
Для этого в сущности Регистрация текущего значения одометра нужно создать какое-то "статусное" поле, чтобы присваивать значения для последней записи, например "текущее", а остальным записям - значение "прошлое". Это можно сделать через автоматизацию - т.е. при добавлении (через кнопку автоматизации!!) нового значения регистрации - в текущей записи будет присваиваться значение "Текущее", а остальным (по фильтру) - соответственно "Прошлое". И так при добавлении каждой новой записи со значением Текущее должна получаться только одна запись, а остальные - все "прошлые".
Далее в Дополнении - Функции - создаем 2 функции.
1 - будет подсчитывать сумму значений "одометра" ВСЕХ записей из сущности Регистрация текущего значения одометра
2 - будет подсчитывать сумму значений "одометра" записей, у которых статус "прошлое" из сущности Регистрация текущего значения одометра (настраиваем фильтр для функции по полю Статус на значение= "прошлое"). Тут по идее должны подсчитаться все записи кроме "текущей"
а в сущность Показания - в поле MySQL формула вы сделаете вычисление разницы между ф1 и ф2
({1}-{2})
Вот тут и будет разница между последним и предпоследним значением.
Предполагаю, что теоретически должно сработать )) Если я, конечно, правильно понял суть вашего вопроса.
Смею предположить, что у вас примерно такая структура (очень приблизительно):
Показания
- Регистрация текущего значения одометра
В сущности "Регистрация текущего значения одометра" заносятся промежутки (отдельные записи) с текущим показанием одометра.
В сущность Показание (или другую родительскую) будут передаваться, собственно результаты вычисления (разница между предыдущим и последним значением одометра из вложенной сущности).
Для этого в сущности Регистрация текущего значения одометра нужно создать какое-то "статусное" поле, чтобы присваивать значения для последней записи, например "текущее", а остальным записям - значение "прошлое". Это можно сделать через автоматизацию - т.е. при добавлении (через кнопку автоматизации!!) нового значения регистрации - в текущей записи будет присваиваться значение "Текущее", а остальным (по фильтру) - соответственно "Прошлое". И так при добавлении каждой новой записи со значением Текущее должна получаться только одна запись, а остальные - все "прошлые".
Далее в Дополнении - Функции - создаем 2 функции.
1 - будет подсчитывать сумму значений "одометра" ВСЕХ записей из сущности Регистрация текущего значения одометра
2 - будет подсчитывать сумму значений "одометра" записей, у которых статус "прошлое" из сущности Регистрация текущего значения одометра (настраиваем фильтр для функции по полю Статус на значение= "прошлое"). Тут по идее должны подсчитаться все записи кроме "текущей"
а в сущность Показания - в поле MySQL формула вы сделаете вычисление разницы между ф1 и ф2
({1}-{2})
Вот тут и будет разница между последним и предпоследним значением.
Предполагаю, что теоретически должно сработать )) Если я, конечно, правильно понял суть вашего вопроса.
-
- Сообщения: 118
- Зарегистрирован: 06 авг 2019, 17:19
- Имя: Константин
- Откуда: РФ
Re: Расчет разницы между записями
Ух, как все сложно.
Хотелось бы по проще: у нас всего 1 сущность расчет бензина (без подчиненных), вот как хотелось бы это видеть:
1) Водитель заносит одометр
2) Запросом в соседнее поле проставляется его предыдущее значение.
3) В следующем поле по формуле считается пробег (разница)
4) Далее считаем расход топлива (подставляя значения расхода на 100км из справочника) и т.п.
Хотелось бы по проще: у нас всего 1 сущность расчет бензина (без подчиненных), вот как хотелось бы это видеть:
1) Водитель заносит одометр
2) Запросом в соседнее поле проставляется его предыдущее значение.
3) В следующем поле по формуле считается пробег (разница)
4) Далее считаем расход топлива (подставляя значения расхода на 100км из справочника) и т.п.
- support
- Техническая поддержка
- Сообщения: 9211
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Расчет разницы между записями
Вам нужно создать поле MySQL запрос https://docs.rukovoditel.net/ru/index.php?p=24
Который будет выбирать предыдущие значение из этой же сущности. Условие:
И далее это поле уже использовать в формулах.
Который будет выбирать предыдущие значение из этой же сущности. Условие:
Код: Выделить всё
id=(e.id-1)
-
- Сообщения: 118
- Зарегистрирован: 06 авг 2019, 17:19
- Имя: Константин
- Откуда: РФ
Re: Расчет разницы между записями
Спасибо! Будем пробовать!support писал(а): ↑30 янв 2020, 10:50 Вам нужно создать поле MySQL запрос https://docs.rukovoditel.net/ru/index.php?p=24
Который будет выбирать предыдущие значение из этой же сущности. Условие:И далее это поле уже использовать в формулах.Код: Выделить всё
id=(e.id-1)
-
- Сообщения: 118
- Зарегистрирован: 06 авг 2019, 17:19
- Имя: Константин
- Откуда: РФ
Re: Расчет разницы между записями
Не работает, т.к. предыдущий id - это запись другого водителя, т.е. нужно условие, по которому мы найдем предыдущую запись именно этого водителя (по таб.номеру, по гос.номеру авто и т.п.). Как это сделать?support писал(а): ↑30 янв 2020, 10:50 Вам нужно создать поле MySQL запрос https://docs.rukovoditel.net/ru/index.php?p=24
Который будет выбирать предыдущие значение из этой же сущности. Условие:И далее это поле уже использовать в формулах.Код: Выделить всё
id=(e.id-1)
- support
- Техническая поддержка
- Сообщения: 9211
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Расчет разницы между записями
Добавить соответствующее условие, примерно так:
13 - id поля "гос.номер"
Код: Выделить всё
id<e.id and field_13=e.field_13 order by id desc limit 1