Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Условия распределения "Премии по итогам работы месяца&a

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур)
Предыдущая тема :: Следующая тема  
Автор Сообщение
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Ср Окт 24, 2012 15:34    Заголовок сообщения: Условия распределения "Премии по итогам работы месяца&a Ответить с цитатой

Всем, здравствуйте!
Имеется процедура по условиям распределения "Премии по итогам работы месяца"- вид оплаты 115. Вот текст программы:
--------------------------------------------------------------------------------------------------------------------------------------------------let mm_ = @@tMonth;
let yy_ = @@tYear;
let qq_ = 4002000.00;
let ss_ = 0.00;
if not exists (select top 1 * from lic where cmonth = yy_ * 12 + mm_ and p = '+')
then {
if @@{msg[\3Результаты предыдущего начисления будут удалены!\10\3Вы уверенны? Продолжить?] 2, 0x06}==12
then {
EXEC dbo.user_raschetIndexacii yy_, mm_, qq_;
return[ Индексация начислена!];
};
} else {
return[ Начисление индексации невозможено! Месяц закрыт!];
};

select sum(summa) into ss_ from tabel where cmonth = yy_ * 12 + mm_ and code_pay = 115;
return[Сумма начисленной индексации (ВО 115): ss_ !];


помогите мне сделать так, чтобы если по видам оплат: 10; 143; 144 -сумма начислений равна 0, либо остутствует совсем, то данный работник не должен участвовать в распределении этой премии.
Я в SQL новичек, поэтому не судите строго. пробовал написать так:

if (code_pay = 10 and code_pay = 143 and code_pay = 144) is Null
then {
sum(summa)=0};

не помогло.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Окт 24, 2012 16:01    Заголовок сообщения: Ответить с цитатой

Не совсем понятно условие
Цитата:
чтобы если по видам оплат: 10; 143; 144 -сумма начислений равна 0, либо остутствует совсем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Ср Окт 24, 2012 16:14    Заголовок сообщения: Ответить с цитатой

Извиняюсь, ну если у работника по 10, 143 и 144 виду оплаты начислений не было или они были равны нулю, то работник не должен получать премию по 115 виду оплаты. А из текста процедуры следует, что сотрудник получает премию по 115 ВО в любом случае.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Окт 24, 2012 16:45    Заголовок сообщения: Ответить с цитатой

А с таблицей входимости не пробовали ? проще в неё включить, с каких ВО должна начисляться премия...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Ср Окт 24, 2012 17:30    Заголовок сообщения: Ответить с цитатой

с таблицей входимости не получится сделать, так как у человека за месяц начисляется несколько ВО. в них могут одновременно входить и 115 ВО, и 10 ВО. так вот мне надо сделать так, чтобы если 10 ВО равен нулю или не начислен, то и 115 не будет начисляться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 580
Откуда: Москва

СообщениеДобавлено: Ср Окт 24, 2012 18:26    Заголовок сообщения: Ответить с цитатой

У вас вся логика зашита в хранимой процедуре, текст которой я не могу посмотреть.
Чтобы удалить из прямых начислений 115 ВО тем у кого нет 10,143,144 или они равны нулю нужно запустить:

delete from tabel where cmonth=2012*12+10 and code_pay=115
and
(
not exists (select * from tabel t where t.cmonth=2012*12+10 and t.code_pay in (10,143,144) and t.pid=tabel.pid)
OR
(
(code_pay=10 or code_pay=143 or code_pay=144) and summa=0
)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Чт Окт 25, 2012 10:26    Заголовок сообщения: Ответить с цитатой

Этот код нужно запускать из RPDesigner просто запросом или вставить в какое-то место текста моей процедуры? Пробовал и так и так запускать, код вроде бы выполняется, но индексация остается прежнейSad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Чт Окт 25, 2012 11:51    Заголовок сообщения: Ответить с цитатой

Извиняюсь, все впорядке, запустил все считает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Evgeniy



Зарегистрирован: 24.10.2012
Сообщения: 7

СообщениеДобавлено: Вт Окт 30, 2012 09:35    Заголовок сообщения: Ответить с цитатой

С удалением 115 ВО не прокатило. Сказали, что если удалять 115 ВО, у тех кому не начислены 10, 143, 144 ВО, то нужно удаленные средства распределять между оставшимися людьми. Ниже выложу код процедуры по расчету 115 ВО, в нем нужно поправить условие: если 10, 143, 144 ВО не начислены или равны 0, тогда им не начислять 115 ВО. Поправить нужно именно в этой процедуре. Помогите пожалуйста, заранее благодерен.

USE [tmpbkrf]
GO
/****** Object: StoredProcedure [dbo].[user_RaschetIndexacii] Script Date: 10/30/2012 09:18:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Viktor Kryukov
-- Create date: 02.11.2011
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[user_RaschetIndexacii]
@y int, @m int, @q numeric(19, 4)
AS
BEGIN

declare @dd datetime;
select @dd = dateadd(day, -1, str((case when @m = 12 then @y + 1 else @y end), 4, 0) + '-'
+ str((case when @m = 12 then 1 else @m + 1 end), 2, 0) + '-'
+ '01');
--debug
--print @dd;
--end debug

delete
from tabel
where cmonth = @y * 12 + @m
and Code_Pay = 115
and uname = 'avtoInd';

declare @s numeric(19, 15), @ss numeric(19, 4), @sq numeric(19, 4);

select
@ss = SUM(q.summa)
from (
select
l.pId,
SUM(l.summa) as summa
from lic l
where l.id_Firm = 1
and l.tyear = @y
and l.tMonth = @m
and l.cmonth = @y * 12 + @m
and l.Code_Pay in(1, 3, 9, 111)
group by l.pId

union all

select
u.pid5 as pid,
-SUM(r.summa) as summa
from srvBkrf.BKRF.dbo.rf_empRas r,
srvBkrf.BKRF.dbo.rf_naremp e,
srvBkrf.BKRF.dbo.rf_nar n,
uvk_exportFrom5_To4 u
where r.tyear = @y
and r.tmonth = @m
and r.code_pay in(142)
and r.id_naremp = e.id
and e.pid <> 9630 --табельный номер 00002
and n.id = r.id_nar
and n.code_pay = 9
and u.pid4 = e.pid
--!!!and n.typenar <> 3
group by u.pid5

union all

select
u.pid5 as pid,
-sum(r.summa - r.k1 * r.[hours]) as summa
from srvBkrf.BKRF.dbo.rf_empRas r,
srvBkrf.BKRF.dbo.rf_naremp e,
srvBkrf.BKRF.dbo.rf_nar n,
uvk_exportFrom5_To4 u
where r.tyear = @y
and r.tmonth = @m
and r.code_pay in(9)
and r.summa <> 0
and r.id_naremp = e.id
and e.pid <> 9630 --табельный номер 00002
and n.id = r.id_nar
and n.typenar = 3
and u.pid4 = e.pid
group by u.pid5

union all

select
u.pid5 as pid,
sum(er.summa) as summa
from srvbkrf.bkrf.dbo.rf_EmpRas er
, srvbkrf.bkrf.dbo.rf_nar nr
, srvbkrf.bkrf.dbo.rf_NarEmp ne
, uvk_exportFrom5_To4 u
where er.id_nar = nr.id
and er.tyear = @y
and er.tmonth = @m
and er.code_pay = 123
and ne.id = er.id_naremp
and ne.pid = u.pid4
and ne.pid <> 9630 --табельный номер 00002 ... так, на всякий случай!
group by u.pid5
-- , nr.struct_code, nr.acc
) q
, people p
, pr_current pr
where p.pId = q.pid
and p.out_date > @dd
and pr.pId = p.pId
and @dd between pr.Date_trans and pr.Date_depart
and pr.work_code in(1, 9, 11, 14, 15, 16, 1Cool
;

select @s = @q / @ss;

--debug
--print @ss;
--print @s;
--end debug

insert into tabel (
[pId]
, [Code_Pay]
, [tYear]
, [tMonth]
, [Days]
, [Hours]
, [Percent]
, [Summa]
, [Acc]
, [Sub]
, [k1]
, [k2]
, [idMain]
, [N_dirM]
, [N_tab]
, [cmonth]
, [shop]
, [theme]
, [mdate]
, [uname]
, [CUST_ID]
, [D_FROM]
, [D_TO]
, [t]
, [REP_BRANCH_NUM]
, [REP_BRANCH_ID]
, [Code_Regim]
, [tarif_id]
, [Code_syspay]
, [str_add]
, [int_add]
, [float_add]
, [not_approved]
, [comment]
, [SFINANC_ID]
)
select
qqq.pId
, 115
, @y
, @m
, 0.0000
, 0.0000
, 0.0000
, qqq.Summa
, qqq.Acc
, ''
, 0.0000
, 0.0000
, 0
, 0
, 0
, @y * 12 + @m
, qqq.shop
, 0
, GETDATE()
, 'avtoInd'
, 0
, null
, null
, null
, null
, null
, 0
, 0
, 0
, null
, null
, null
, null
, null
, 0

from (select
q.pId,
q.code_pay,
q.shop,
q.acc,
round(SUM(q.summa) * @s, 2) as summa
from (
select
l.pId,
l.code_pay,
l.shop,
l.acc,
SUM(l.summa) as summa
from lic l
where l.id_Firm = 1
and l.tyear = @y
and l.tMonth = @m
and l.cmonth = @y * 12 + @m
and l.Code_Pay in(1, 3, 9, 111)
group by
l.pId, l.code_pay, l.shop, l.acc

union all

select
u.pid5 as pid,
9 as code_pay,
n.struct_code as shop,
n.acc,
-SUM(r.summa) as summa
from srvBkrf.BKRF.dbo.rf_empRas r,
srvBkrf.BKRF.dbo.rf_naremp e,
srvBkrf.BKRF.dbo.rf_nar n,
uvk_exportFrom5_To4 u
where
r.tyear = @y
and r.tmonth = @m
and r.code_pay in(142)
and r.id_naremp = e.id
and e.pid <> 9630 --табельный номер 00002
and n.id = r.id_nar
and n.code_pay = 9
--!!!and n.typenar <> 3
and u.pid4 = e.pid
group by u.pid5, n.struct_code, n.acc

union all

select
u.pid5 as pid,
9 as code_pay,
n.struct_code as shop,
n.acc,
- sum(r.summa - r.k1 * r.[hours]) as summa
from srvBkrf.BKRF.dbo.rf_empRas r,
srvBkrf.BKRF.dbo.rf_naremp e,
srvBkrf.BKRF.dbo.rf_nar n,
uvk_exportFrom5_To4 u
where
r.tyear = @y
and r.tmonth = @m
and r.code_pay in(9)
and r.summa <> 0
and r.id_naremp = e.id
and e.pid <> 9630 --табельный номер 00002
and n.id = r.id_nar
and n.typenar = 3
and u.pid4 = e.pid
group by u.pid5, n.struct_code, n.acc

union all

select
u.pid5 as pid
, 123 as code_pay
, nr.struct_code as shop
, nr.acc
, sum(er.summa) as summa
from srvbkrf.bkrf.dbo.rf_EmpRas er
, srvbkrf.bkrf.dbo.rf_nar nr
, srvbkrf.bkrf.dbo.rf_NarEmp ne
, uvk_exportFrom5_To4 u
where er.id_nar = nr.id
and er.tyear = @y
and er.tmonth = @m
and er.code_pay = 123
and ne.id = er.id_naremp
and ne.pid = u.pid4
and ne.pid <> 9630 --табельный номер 00002 ... так, на всякий случай!
group by u.pid5, nr.struct_code, nr.acc
) q
, people p
, pr_current pr
where p.pId = q.pid
and p.out_date > @dd
and pr.pId = p.pId
and @dd between pr.Date_trans and pr.Date_depart
and pr.work_code in(1, 9, 11, 14, 15, 16, 1Cool
group by
q.pId,
q.code_pay
,
q.shop,
q.acc
) qqq

order by pid, shop, acc
;

delete
from tabel
where cmonth = @y * 12 + @m
and Code_Pay = 115
and Summa = 0.0000

END
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур) Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU