Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2013, 14:39   #1
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию Процедура в Firebird.

Всем добрый день!
Хочу попросить у вас помощи в написании процедур. Если кому то это будет не сложно сделать, буду очень признателен. Даже буду рад если дадите ссылки на хорошие инструкции по написанию процедур. Я хорошо знаю SQL и некоторые языки программирования, так что разберусь.
Вот условия поставленной задачи:

Написать процедуру для расчёта отгружаемого кол-ва товара клиенту со склада «Витрина», в случае дефицита товара на складе «Главный» в соответствии с правилом кратности.
Можно написать на диалекте interbase (firebirtd)
Входные параметры:
1. Kol – кол-во товара заказанного клиентом
2. Kol_free – текущий остаток на складе «Главный»
3. Kol_V – текущий остаток на складе «Витрина»
4. Koeff – значение кратности

Выходной параметр – kol_V_otgr

Правило кратности:
Koeff – значение кратности - это минимальное кол-во товара, которое можно продавать со склада Витрина.
Пример: Koeff=15, значит можно продавать 15,30,45 и т.д.

Есть дополнительные условия:
1. Отгружается всегда ближайшее из двух возможных кратных значений кол-ва с Витрины, пример:
Kol-kol_free=18
Koeff=10
Можно отгрузить 10, а можно 20
Ближайшее – 20,
Делаем отгрузку =20


2. Если кол-во товара на складе Витрина < кратности (такое бывает, розничному покупателю разрешено брать поштучно), то можно продать требуемое кол-во.
VHomer вне форума Ответить с цитированием
Старый 13.12.2013, 15:53   #2
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Тут пользуясь инетом и книгой по Firebird вот что набросал:

CREATE PROCEDURE Otgruzka
(Kol integer, Kol_free integer, Kol_V integer, Koeff integer)
--ВХодные параметры--
RETURNS (kol_V_otgr integer)
--Выходные параметры--
AS
DECLARE VARIABLE X REAL
--Объявил переменную дробного числа. Тут не уверен что она должна звучать как REAL--
BEGIN
IF Kol_free > Kol_V then Kol_V_otgr:=0
--Если на Главном складе хватает товара, то с Витрины ничего не берём--
ELSE
BEGIN
x:=Kol_V-Kol_free
--находим разницу, которую надо взять с Витрины--
IF x<Koeff THEN Kol_V_otgr:=x
--Если разница меньше кратности, то выдаём поштучно сколько надо -
ELSE Kol_V_otgr:=ROUND(x/k,0)*koeff
--В этой строчке вообще не уверен в коде. Мысль в том что находим ближайшее кратное значения путём окргуления. --
END
END;

То есть тут сам алгоритм верный точно, а вот исполнение... Подскажите, код вообще правильно написан?
VHomer вне форума Ответить с цитированием
Старый 13.12.2013, 16:25   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

http://www.firebirdsql.org/manual/ru...syntax-ru.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимая процедура для Firebird Lait1989 БД в Delphi 1 15.05.2010 11:02
Хранимая процедура FireBird Gurt87 БД в Delphi 3 27.01.2010 13:31
хранимая процедура(firebird) alex_-87 БД в Delphi 8 03.01.2010 14:59
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17