| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > интерал времени |
| Автор: oganes 14.1.2009, 18:05 |
| Добрый вечер! Буду благодарен, если поможете решить одну следующую задачу: Ее суть заключается в следующем - вычислить количество потраченных трудозатрат в ночное время водителей грузовых машин ("Почта России"). Сутки в рейсах возможны от нуля (т.е. в этот же день возвращается назад в АТП) до двух недель. Водитель может отправлятся в рейс в любое время, а также прибыть на предприятие тоже в любое время. И данное условие осложняет решение задачи. Т.е. водитель после вечерней погрузки может отправиться в рейс рано утром в 5:00 и прибыть в АТП, например в 4:47. Ночное время согласно законадательным-правовым нормам считает с 22 до 6 утра. На данный момент у меня имеются два предположения по перешию данного вопроса. Первое- в запросе с помощью многочисленного использования функции IIf, находим данное значение. Второе -переведя дату в числовое значение, мы получим, что ночное время - есть ничто иное как интервальная прогрессия. Далее по значениям дат отпраки и прибытия необходимо рассмотреть их расположение по отношению к интервалам ночного времени. В решение задачи с помощью первого метода более доступно, но точки зрения продуктивности она неэффективна, так как база данных огромна и потребуется огромное время для расчетов на имеющихся компьютерах. Во втором случает, оформив в модуле компактную функцию можно избежать в какой то степени данную проблему, но как ее реализовать, к сожалению, на данный момент имеются только мутные представления. Заранее спасибо! |
| Автор: Akina 14.1.2009, 18:12 |
| Использование хранимой процедуры скорее всего является оптимальным решением - если хочется остаться в рамках SQL и метод доступа ADO. Есть и другое решение - использование врЕменной статической таблицы (разовый пересчёт), - правда при этом сползает оперативность обновления данных. А вообще поподробнее - какая именно БД, в какой именно структуре лежат данные... на VB6, как я понимаю, пишется клиентская часть? |
| Автор: oganes 15.1.2009, 09:56 |
| Да БД формируется на VB6 в которой имеются данные (таблицы) о транспорте, направлениях, водителях и всех произведенных рейсах. В таблице рейсы имеются следующие поля: путевой лист, водитель, водитель2 (когда 2 водителей в рейсе), транспорт, время отправки, дата отправки, время прибытия, дата прибытия, и иная информация, которую можно опустить при решении данной задачи. Необходимо получить таблицу (запрос), в которой бы расчитывались трудозатраты всех водителей (общее и ночное время) для расчетов зарплаты: табельный номер (водитель), количество суток, транспорт, время основное, ночное время и т.д. На данный момент, воспользовавшись основными функциями времени и дат, все необходимые данные мною получены. Возникла проблема с ночным временем, которая оплачивается по другой ставке. Что касается использования временной статической таблицы (разовый пересчёт), то можно поподробнее. Заранее спасибо! |
| Автор: Akina 15.1.2009, 10:04 |
Бред. Вы что, не знаете с чем работаете? Какой формат базы данных? |
| Автор: oganes 15.1.2009, 10:32 |
| База данных пишется с пощью Access 2007: применяется язык SQL для построения запросов и скрипты на языке VBA. |
| Автор: Akina 15.1.2009, 13:27 |
| Ну это другой разговор. Делайте ADO вьюху, использующую хранимку, которая вычилит всё необходимое. Достаточно для первого и последнего дня посчитать часы-минуты ночного времени, а потом тупо приплюсовать по 8 часов за каждый день в серединке. |
| Автор: oganes 15.1.2009, 13:48 |
| спасибо. еще один вопрос: допустим получаем трудозатрат в количестве 130 мин., как выразить часы и минуты следующим образом: 2,10 т.е. 2 часа и 10 мин. если просто поделить на 60, то получим выражение в часах 2,1(6). Это можно получить с помощью мат. преобразований. : (130 mod 60)/100+130\60 Как Вы думаете имеется ли такая функция ( допустим при построении запросов)? |
| Автор: Akina 15.1.2009, 14:47 | ||
PS. И почитайте наконец Правила Форума. Особенно пункт 10. |
| Автор: oganes 15.1.2009, 15:43 |
| Во-первых, данные вопросы были взаимосвязаны... Во - вторых, все равно спасибо Вам! |