Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчет количества выходных 
:(
    Опции темы
aleks88
Дата 2.2.2012, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.8.2011

Репутация: нет
Всего: нет



Немного подумав пришел к выводу:
Возможно ли использовать триггер и вызывать из него ХП.
Тригер запускается на добавление строки, в процедуру передаются 2 параметра и возвращается 1, который записывается с толбец ?
Кокой синтаксис для присвоения значения, возвращаемого ХП переменно ?
PM   Вверх
Deniz
Дата 2.2.2012, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(aleks88 @  1.2.2012,  20:09 Найти цитируемый пост)
Вот, плод моих скудных размышлений, все верно ? На мой взгляд да
На мой взгляд не совсем.
Для примера передай в процедуру:
1. 03.02.2012, 2
2. 04.02.2012, 2
Сравни результаты, это правильные результаты?
Цитата(aleks88 @  2.2.2012,  06:02 Найти цитируемый пост)
Возможно ли использовать триггер и вызывать из него ХП.
возможно.

Цитата(aleks88 @  2.2.2012,  06:02 Найти цитируемый пост)
Кокой синтаксис для присвоения значения, возвращаемого ХП переменно ? 
примерно так
Код
select date_to from DATE_COLCULATION (new.DATE_FROM, new.DAYS ) into new.date_to;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
aleks88
Дата 2.2.2012, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.8.2011

Репутация: нет
Всего: нет



Да, результаты верны, но это все равно мелочи smile

Нужно реализовать следующую логику:

Есть поля:
   Date1, Date2, Date3
   Int1

Поля Date3 заполняется следующим образом:
  Если Date2 не пусто, то Date3=Date2
  Если Date2 пусто, то Date3="результат, возвращенный процедурой, которая получает на вход Date1 и Int1"

Т.е. нужно получить автозаполняемое поле, которое изменяется при создании строки или изменении.
ЗЫ. Извиняюсь за язык описания smile

Я предполагаю решение: создать тригер на действия INSERT и UPDATE  и вызывать ХП в нем. Но конкретно написать не получается.
Можно пример как можно более приближенный к данной задачи ? smile  
PM   Вверх
aleks88
Дата 2.2.2012, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.8.2011

Репутация: нет
Всего: нет



Разобрался с горем пополам. Позже выложу, на проверку качества smile
PM   Вверх
Deniz
Дата 2.2.2012, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(aleks88 @  2.2.2012,  08:16 Найти цитируемый пост)
Да, результаты верны, но это все равно мелочи smile
Видать в MS так же думали.
Вот как Excel считает:
Код
Дата начала  Дни   Дата расчета
01.02.2012    2    03.02.2012
02.02.2012    2    06.02.2012
03.02.2012    2    07.02.2012
04.02.2012    2    07.02.2012
05.02.2012    2    07.02.2012
06.02.2012    2    08.02.2012
Считаем по календарю:
Для 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


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
tishaishii
Дата 3.3.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



С установкой Firebird прилагаются UDF.
Для регистрации функции выполни код:
Код
DECLARE EXTERNAL FUNCTION ADDDAY2
    TIMESTAMP,
    INTEGER,
    TIMESTAMP
RETURNS PARAMETER 3
ENTRY_POINT 'addDay2' MODULE_NAME 'fbudf';


Вариант применения:
Код
select addday2('2012-02-28', -2) from rdb$database

PM MAIL ICQ Skype   Вверх
tishaishii
Дата 3.3.2012, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Код
select
     ws1."DATE"
from
     work_shedule as ws1
where
     (ws1."DATE" between ?in_date_from and ?in_date_to) and
     (ws1.dayoff<>0)


Это сообщение отредактировал(а) tishaishii - 3.3.2012, 22:14
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.