|
noname
|
|
Подсчет времени03.05.2011, 11:19. Показов 7053. Ответов 31
Метки нет (Все метки)
Добрый день.
Помоги с такой задачкой. Есть 2 таблицы:Квант времени, Работа. Поля в таблице Работа: JOB_ID, begin, duration, status_id Поля в таблице Квант времени: JOB_ID, duration. Суть проблемы: нужно сложить поле Квант времени.duration для которых поле Квант времени.JOB_ID=Работа.JOB_ID при этом если эта сумма равна 0 то нужно найти разницу между Работа.begin и сейчас. Желательно это все реализовать в виде запроса по таблице Работа. Помогите пожалуйста. Заранее спасибо. |
|
| 03.05.2011, 11:19 | |
|
Ответы с готовыми решениями:
31
Подсчет времени Подсчет времени
|
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||
| 07.05.2011, 17:40 | |||||
,
Если же вы хочете определить предполагаемый момент времени окончания работы, то, как мне кажется, end=Работа.begin+averagetime
0
|
|||||
|
noname
|
||||
| 08.05.2011, 02:08 | ||||
|
как вариант(вот только я не знаю как его реализовать): можно сделать текстовое поле и в него по очередно записывать часы, минуты, секунды, причем часы должны записываться в числовым типом чтобы количество часов переходило за 24 или время которое больше 24 часов access не примет и выдаст ошибку несовместимости типов? |
||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||||
| 08.05.2011, 08:58 | ||||||||
Так как поле - текстовое, то в него можно вводить какой угодно набор символов. Главное, чтобы затем, когда понадобиться значение averagetime, можно было однозначно извлечь из этого поля количество часов, минут, секунд, т.е. информация должна вводиться в заранее оговоренном формате. На вас, как программисте, лежит задача обеспечить ввод именно в таком формате, потому что если это отдать на откуп пользователям, то там будет сплошная каша. Как я уже ранее упоминал, для этого есть свойство поля Маска ввода (InputMask), см.Help. Продумайте четко формат представления вашей хотелки, это нужно будет при реализации запроса.
Пример: begin=03.05.2011 11:00:00 averagetime=22:00:00 was_time=18:00:00 Считаем ручками end=(Работа.begin+averagetime)-was_time=(03.05.2011 11:00:00 + 22:00:00) - 18:00:00 = = 04.05.2011 09:00:00 - 18:00:00 = 03.05.2011 15:00:00 Считаем в Access-е
Теперь то, что вам нужно. Если на выполнение некоторой работы планировалось затратить 22 часа, а на какой-то текущий момент T стало известно, что по ней уже отработали 18 часов, то для окончания работы предположительно понадобиться 22-18=4 часа. Т.е. end=averagetime-was_time.
0
|
||||||||
|
noname
|
|||
| 08.05.2011, 10:43 | |||
|
На счет непонятной кучи моих слов про текстовое поле: Суть задумки была в том чтобы в текстовое поле вводить часы:минуты:секунды, причем часы-могут быть больше 24 Сомнения заключаются в том что при извлечении этих данных, например averagetime=43:30:00, и последующем использовании будет ли Access корректно понимать число 43 или выдаст ошибку, что значение поля averagetime ошибочно. Тогда ваш способ подсчета нужно применять. |
|||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||
| 08.05.2011, 12:45 | ||
Значит договорились, что averagetime - текстовое поле и значения в нем представлены в формате чч:мм:сс, при этом часть чч может содержать несколько (>=1) цифр, части мм и сс - по две цифры, причем первая цифра меньше 6, части разделены символом двоеточия. Результаты расчетов, превышающие 24 часа, тоже выводить в таком формате? Теперь осталось решить вопрос с free. Если обозначить через t - текущее время (без даты) - время, когда пользователь инициировал выполнение запроса, то по-моему в случае end>=0 и t<17:00:00 схематично формула должна выглядеть так free = IIf(t + end >= 17:00:00, 00:00:00, 17:00:00 - (t + end)) Обдумайте формулу и как поступать, когда end<0 или t>17:00:00.
0
|
||
|
noname
|
||||
| 08.05.2011, 13:23 | ||||
|
Если end<0, то в идеале нужно писать "работа затянулась" или что-то типа такого, в поле free. Если t>17:00:00: обычно этот отчет должен запускаться в рабочее время, т.е. до 17:00, после 17:00 данные о работе туда не должны попадать, так как будут иметь статус отличный от 2 или 4. Если все таки будет он запушен после 17:00 и какие либо данные попадут туда, то поле free должно быть пустым. |
||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
| 08.05.2011, 13:50 | |
|
На какой версии(иях) Access будет крутиться задача?
Вопроса бы не возникло, если бы не злополучные пробелы в наименованиях таблиц.
0
|
|
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||||||||
| 08.05.2011, 18:18 | |||||||||||
|
Пробуйте тестировать запрос
0
|
|||||||||||
|
noname
|
||||
| 09.05.2011, 18:48 | ||||
|
просто нереально сильно выручили, тока сейчас увидел ваш пост Сильно загружен в связи с тем что готовлю отчет для преддипломной защиты. Вроде все правильно работает(глянул так не особо сильно проверяя точность, из за загруженности) но вызвало пару вопросов: что происходит тут: |
||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||||||||
| 10.05.2011, 09:07 | |||||||||||
|
Сначала немного теории.
Значения типа Date/Time сохраняются как 64-разрядные (8-байтовые) числа с плавающей точкой стандарта IEEE. При преобразовании других числовых типов данных к типу Date целая часть числа представляет значение даты (количество дней прошедших с 30.12.1899), а дробная - значение времени (части суток), т.е. полночь представляется значением 0, а полдень значением .5. Отрицательные целые числа представляют даты до 30.12.1899. В запросе операции с интервалами выполняются над поставленными им в соответствие значениями даты+времени или, что то же самое, числами. Ниже, в интересующем вас фрагменте запроса, идет преобразование текста, содержащегося в поле averagetime, в числовой вид, описанный выше
Во второй строке определяется количество полных дней, содержащихся в h часах (h\24, знак \ - целочисленное деление), количество часов, представляющих остаток (h Mod 24) от целочисленного деления, и выделяется значения минут и секунд ( RIGHT(M.averagetime,6) ) из строки averagetime. Выражение CDate((h Mod 24) & RIGHT(M.averagetime,6)) дает чистое время, сложив которое с количеством дней (h\2), получаемм некую дату, соответсвующую рассматриваемому интервалу. Пример. averagetime="43:12:56" h=CInt(LEFT(M.averagetime,Len(M.averaget ime)-6))=43 h\24=1 h Mod 24=19 RIGHT(M.averagetime,6)=":12:56" CDate((h Mod 24) & RIGHT(M.averagetime,6))=19:12:56 h\24 + CDate((h Mod 24) & RIGHT(M.averagetime,6))=31.12.1899 19:12:56 ~ 1,80064814814815 Функция FPerToStr предназначена для преобразования интервала из датного (числового) вида в строку "чч:мм:сс", аналогичную averagetime. Свежий взгляд на выражение в функции показал, что его можно немного упростить
0
|
|||||||||||
| 10.05.2011, 09:07 | |
|
Подсчет прошедшего календарного времени и выведение нескольких таблиц в одну форму
Подсчет времени подсчет времени Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|