![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток! Помогите, пожалуйста, написать функцию для расчета заработной платы.
Имеем две таблицы в бд: продавцов и список товаров. Каждая продажа записывается на конкретного продавца. При расчете з/п используется ставка 1500грн + премия. Премия считается по кол-ву продаж и не может быть больше 50% от ставки. Например, 1000 продаж - 50%, 500 - 25%, 100 - 5% и т.д. Плюс удержания из з/п: ЕСВ=ЗП*3,6% и НДФЛ=ЗП*15% Помогите, пожалуйста. Абсолютно не понимаю как это можно реализовать. ![]() |
|
#2
|
||||
|
||||
|
зависит от используемой СУБД. вообще можно одним запросом решить задачу через select case, к примеру.
и вообще это ущемление прав какое-то Цитата:
![]() Последний раз редактировалось NumLock, 02.06.2014 в 17:55. |
|
#3
|
|||
|
|||
|
Цитата:
Цитата:
![]() |
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#5
|
|||
|
|||
|
Цитата:
1. Продавцы. Поля: id_продавца, ФИО 2. Товары. Поля: id_товара, наименование, кол-во, цена 3. Продажи. Поля: id_продажи, id_товара, кол-во, цена, сумма, id_продавца Ну и соответственно поставить связи id_продавца и id_товара из первых двух таблиц к третьей. |
|
#6
|
||||
|
||||
|
В Продажи надо бы еще добавить дату, без которой не выбрать данные за месяц. И при такой формуле расчета, вам не нужна таблица Товары.
Для Акцеса вот такой заросец выходит: Код:
SELECT Продавцы.ФИО, Count(Продажи.[Дата]) AS Продаж,
1500+1500*Switch(Продаж>=1000,0.5,
Продаж Between 999 And 500, 0.25,
Продаж Between 499 And 100, 0.05,
Продаж Between 99 And 0, 0) AS ЗП,
[ЗП]-[ЗП]/100*3.6-[ЗП]/100*15 AS Итого
FROM (Продавцы INNER JOIN Продажи ON Продавцы.Код = Продажи.КодПродавца) INNER JOIN Товары ON Продажи.КодТовара = Товары.Код
WHERE (((Month([Дата]))=6))
GROUP BY Продавцы.ФИО; |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
poison-bla (08.06.2014)
| ||
|
#7
|
|||
|
|||
|
Цитата:
![]() |
|
#8
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
poison-bla (08.06.2014)
| ||
|
#9
|
|||
|
|||
|
Спасибо за помощь, запрос работает. Только вот не совсем так как мне нужно. За продажу он считает 1 запись в таблице.
Например: Петров за один раз продал 5 холодильников, и ему зачлось это за одну продажу, а должно было за 5. Как это исправить? И еще, вот эта строка указывает месяц? WHERE (((Month([date]))=6)) А возможно ли сделать так, чтобы пользователь сам выбирал за какой месяц ему нужны сведения? |
|
#10
|
||||
|
||||
|
Цитата:
Или же используя параметры - в тексте запроса пишешь так: Код:
WHERE (((Month([date]))=:param1)) Код:
ADOQuery1.Parameters.ParamByName('param1').Value := XXX; // XXX здесь номер месяца который выбрал пользователь |
|
#11
|
|||
|
|||
|
Пишу вот так на кнопке:
Код:
begin
Form1.ADOQuery1.Parameters.ParamByName('param1').Value:=Edit1.Text;
end; |
|
#12
|
||||
|
||||
|
Цитата:
Т.е. нужно делать как-то так: Код:
begin
Form1.ADOQuery1.Close; // Закрываем выборку если она уже была открыта
Form1.ADOQuery1.Parameters.ParamByName('param1').Value := Edit1.Text; // Устанавливаем новый параметр
Form1.ADOQuery1.Open; // Выполняем запрос с новым параметром
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
poison-bla (10.06.2014)
| ||
|
#13
|
|||
|
|||
|
А подскажите, пожалуйста, как переписать этот запрос на кнопку?
Код:
SELECT Продавцы.ФИО, Count(Продажи.[Дата]) AS Продаж,
1500+1500*Switch(Продаж>=1000,0.5,
Продаж Between 999 And 500, 0.25,
Продаж Between 499 And 100, 0.05,
Продаж Between 99 And 0, 0) AS ЗП,
[ЗП]-[ЗП]/100*3.6-[ЗП]/100*15 AS Итого
FROM (Продавцы INNER JOIN Продажи ON Продавцы.Код = Продажи.КодПродавца) INNER JOIN Товары ON Продажи.КодТовара = Товары.Код
WHERE (((Month([Дата]))=6))
GROUP BY Продавцы.ФИО; |
|
#14
|
||||
|
||||
|
Цитата:
Сначала нужно текст этого запроса поместить в какой-нибудь ADOQuery (через свойство SQL) и потом его открыть (методом Open). |
|
#15
|
|||
|
|||
|
Цитата:
|