![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Здравствуйте! Подскажите как расчитать либо количество рабочих дней, либо количеств выходных между двумя датами?
В итоге должен быть вычисляемый стобец, использующий в котором прибавляется к дате количество дней. |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
aleks88, а причем тут FireBird?
Если в хранимой процедуре, то нужно указать версию сервера, от этого многое зависит. Можно использовать extract. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Версия сервера 2.1.4
Подскажите, как сделать следующее: Есть поле с датой (Date), есть поле с количеством дней(Integer), есть некое бинарное поле [0,1] и есть расчитываемое поле. Если банарное поле равно 0, то расчитываемое поле = поле с датой + количество дней. Если бин. поле = 1, то расчитываемое поле = поле с датой + количество дней + количество выходных, выпадаемых за эти дни. Совсем не представляю как это сделат. Есть идея создавать файл Exel, там есть функция расчета числа рабочих дней между датами. Ииходя из этого, расчитывать все в Exe и читать программно в базу данных. Но веть это извращенство ![]() |
|||
|
||||
AndreyIQ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Первое, что приходит в голову (без дополнительных модулей) добавить таблицу с выходными.
|
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Мне тоже это приходило, но корректно ли будет вычисляться дата, если скажем, найдет количеств выходных, прибавим к начальной дате и где то опять попадет на выходные ?
На сколько рационално испльзовать Exel ? Там есть встроенная функция, сдвигающая дату на определенное количество рабочих дней. Т.е. выгрузили в файл Ексела дату и число дней, считали результат и записали в таблицу. |
|||
|
||||
AndreyIQ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Тогда лучше написать хранимую процедуру.
ЗЫ Про Excel забудьте ЗЗЫ Возможно есть UDF'ки для вашей задачи |
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Сложность в том, что с хранимыми процедурами не работал. :(
UDF это что ? Почему про эксел забыть? В чем проблемы ? |
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Подумал тут над хранимой процедурой. Неформальным языком должнобыть так:
1. Передать начальную дату и количество рабочих дней 2. Увеличиваем в цикле дату на 1 день и проверяем, выходной это или нет 3. если нет, то уменьшем количество рабочих дней на 1 4. как только количество рабочих дней станет равное нулю, выходим из цикла и возвращаем дату. Я на верном пути ? |
|||
|
||||
AndreyIQ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Через Excel делать это извращение, дикие тормоза и т.д.
Насчет, хранимой процедуры, Вы на верном пути. |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Да.
Осталось только определить что есть выходной день? Суббота и воскресенье? Или добавить праздники? Для праздников нужна отдельная таблица. PS: UDF и Excel использовать не надо, достаточно хранимой процедуры. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 1 Всего: 54 |
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Эх, тяжко с налету что то делать ...
Благодарю всех за содействие! Буду разбираться в процедуре! ![]() |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Frees, там задача немного поменялась.
Очень похожа на задачу определения дня выхода на работу из отпуска. PS: процедуру писать не буду, пусть автор сам немного поразмыслит, тем более пример уже дан. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
||||
|
||||
aleks88 |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Виноват, казус ![]()
Да, заметил что задача немногим отличается, но не существенно... Вот, плод моих скудных размышлений, все верно ? На мой взгляд да, дата сдвигается на число рабочих дней (под рабочими понимаем все кроме СБ и ВС). Одно пока не ясно, как завязать на процедуру вычисляемый столбец , т.е. как при добавлении строки, передать в процедуру параметры из этой строки и занести возвращаемое значение в столбец :(
Это сообщение отредактировал(а) aleks88 - 1.2.2012, 18:17 |
||||||||
|
|||||||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Немного подумав пришел к выводу:
Возможно ли использовать триггер и вызывать из него ХП. Тригер запускается на добавление строки, в процедуру передаются 2 параметра и возвращается 1, который записывается с толбец ? Кокой синтаксис для присвоения значения, возвращаемого ХП переменно ? |
|||
|
||||
Deniz |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
На мой взгляд не совсем.
Для примера передай в процедуру: 1. 03.02.2012, 2 2. 04.02.2012, 2 Сравни результаты, это правильные результаты? возможно.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Да, результаты верны, но это все равно мелочи
![]() Нужно реализовать следующую логику: Есть поля: Date1, Date2, Date3 Int1 Поля Date3 заполняется следующим образом: Если Date2 не пусто, то Date3=Date2 Если Date2 пусто, то Date3="результат, возвращенный процедурой, которая получает на вход Date1 и Int1" Т.е. нужно получить автозаполняемое поле, которое изменяется при создании строки или изменении. ЗЫ. Извиняюсь за язык описания ![]() Я предполагаю решение: создать тригер на действия INSERT и UPDATE и вызывать ХП в нем. Но конкретно написать не получается. Можно пример как можно более приближенный к данной задачи ? ![]() |
|||
|
||||
aleks88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.8.2011 Репутация: нет Всего: нет |
Разобрался с горем пополам. Позже выложу, на проверку качества
![]() |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Видать в MS так же думали.
Вот как Excel считает:
Для 01.02.2012 считаем раб дни (2 шт.): это 01 и 02 след раб день это 03 Для 02.02.2012 считаем раб дни (2 шт.): это 02 и 03 след раб день это 06 Для 03.02.2012 считаем раб дни (2 шт.): это 03 и 06 след раб день это 07 Для 04.02.2012 считаем раб дни (2 шт.): это 06 и 07 след раб день это 08 Для 05.02.2012 считаем раб дни (2 шт.): это 06 и 07 след раб день это 08 Для 06.02.2012 считаем раб дни (2 шт.): это 06 и 07 след раб день это 08 ИМХО, неправильный расчет, т.е. в диапазоне дат учитывается только конечная дата, начальная не учитывается. PS: хотя для каких целей использовать. Это сообщение отредактировал(а) Deniz - 2.2.2012, 08:34 -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
tishaishii |
|
||||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
С установкой Firebird прилагаются UDF.
Для регистрации функции выполни код:
Вариант применения:
|
||||
|
|||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Это сообщение отредактировал(а) tishaishii - 3.3.2012, 22:14 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |