Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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:56 Найти цитируемый пост)
Да БД формируется на VB6 

Бред. Вы что, не знаете с чем работаете? Какой формат базы данных?

Автор: 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
Код

Format(TimeSerial(0, 130, 0), "h,mm")
Но вообще это изврат.

PS. И почитайте наконец Правила Форума. Особенно пункт 10.

Автор: oganes 15.1.2009, 15:43
Во-первых, данные вопросы были взаимосвязаны...
Во - вторых, все равно спасибо Вам!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)