|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Цитата:
|