Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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};
не помогло. |
|
Вернуться к началу |
|
 |
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 ВО в любом случае. |
|
Вернуться к началу |
|
 |
Vitaly Большой шоколадный орден

Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Ср Окт 24, 2012 16:45 Заголовок сообщения: |
|
|
А с таблицей входимости не пробовали ? проще в неё включить, с каких ВО должна начисляться премия... |
|
Вернуться к началу |
|
 |
Evgeniy
Зарегистрирован: 24.10.2012 Сообщения: 7
|
Добавлено: Ср Окт 24, 2012 17:30 Заголовок сообщения: |
|
|
с таблицей входимости не получится сделать, так как у человека за месяц начисляется несколько ВО. в них могут одновременно входить и 115 ВО, и 10 ВО. так вот мне надо сделать так, чтобы если 10 ВО равен нулю или не начислен, то и 115 не будет начисляться. |
|
Вернуться к началу |
|
 |
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
) |
|
Вернуться к началу |
|
 |
Evgeniy
Зарегистрирован: 24.10.2012 Сообщения: 7
|
Добавлено: Чт Окт 25, 2012 10:26 Заголовок сообщения: |
|
|
Этот код нужно запускать из RPDesigner просто запросом или вставить в какое-то место текста моей процедуры? Пробовал и так и так запускать, код вроде бы выполняется, но индексация остается прежней |
|
Вернуться к началу |
|
 |
Evgeniy
Зарегистрирован: 24.10.2012 Сообщения: 7
|
Добавлено: Чт Окт 25, 2012 11:51 Заголовок сообщения: |
|
|
Извиняюсь, все впорядке, запустил все считает. |
|
Вернуться к началу |
|
 |
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, 1
;
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, 1
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 |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|