1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
|
--НОВЫЕ РЕЗУЛЬТАТЫ СТРЕЛКИ
объявите
@w_RetCode int,
@w_RetStatus int,
@w_RetMsg varchar (255),
@r_PrevWorkDay datetime,
@r_NextWorkDay datetime,
чарс @w_EmployeeID (6),
@w_EmployeeCode int,
@w_NPDDay datetime,
datetime @p_BeginDate,
datetime @p_EndDate
выберите @w_RetCode = 0
выберите @p_BeginDate = «08/01/10»
выберите @p_EndDate = «08/10/10»
ОБЪЯВИТЕ
datetime @TMP_BeginDate,
datetime @TMP_EndDate
УСТАНОВИТЕ @TMP_BeginDate = DATEADD (wk, -3, @p_BeginDate)
УСТАНОВИТЕ @TMP_EndDate = DATEADD (wk, +3, @p_EndDate)
ОБЪЯВИТЕ ТАБЛИЦУ @TSD (CNT [int] НУЛЕВОЕ,
[EMPLOYEECODE] [int] НЕ АННУЛИРУЙТЕ,
[ADMINISTRATIONDATE] [datetime] NULL,
[DAILYPATTERNCODE] [int] NULL,
[STANDARDMINSINDAILYPATTERN] [smallint] NULL,
[STANDARDMINUTESACHIEVED] [smallint] НЕ NULL)
ВВЕДИТЕ В @TSD
ВЫБЕРИТЕ CNT
, EMPLOYEECODE
, ADMINISTRATIONDATE
, DAILYPATTERNCODE
, STANDARDMINSINDAILYPATTERN
, STANDARDMINUTESACHIEVED
ОТ dbo.TIMESUMMARYDAY
ГДЕ DAILYPATTERNCODE = 68206 И
ADMINISTRATIONDATE МЕЖДУ @TMP_BEGINDATE И @TMP_ENDDATE
DELETE ОТ @TSD
ГДЕ (STANDARDMINSINDAILYPATTERN = 0 И STANDARDMINUTESACHIEVED <> 0)
ОБЪЯВИТЕ ТАБЛИЦУ @EMP (
[EmployeeId] [varchar] (15) НЕ NULL,
[EmployeeCode] [int] NULL,
[Фамилия] [varchar] (40) АННУЛИРУЙТЕ,
[Forenames] [varchar] (40) АННУЛИРУЙТЕ,
[Команда] [varchar] (16) NULL,
[Центр] [varchar] (5) NULL)
ВСТАВКА В @EMP
ВЫБЕРИТЕ EmployeeId
, EmployeeCode
, Фамилия
, Forenames
, Центр
, Команда
ОТ dbo.xPLT_EmpInfo
ГДЕ active > 0
ОБЪЯВИТЕ СТРЕЛКУ emp_cur для
ВЫБЕРИТЕ
eiv.EmployeeID,
tsd.EMPLOYEECODE,
tsd.ADMINISTRATIONDATE
ОТ eiv @EMP
внутренне соедините @TSD tsd
на eiv.EmployeeCode = tsd.EmployeeCode
ГДЕ
tsd.ADMINISTRATIONDATE между @p_BeginDate и @p_EndDate и
tsd.STANDARDMINSINDAILYPATTERN = 0
СОЗДАЙТЕ ТАБЛИЦУ #TMP9001
(
Чарс EmployeeID (6),
Datetime NPDDay,
Datetime PrevWorkDayAbs,
Datetime NextWorkDayAbs
)
раскройте emp_cur
fetch затем от emp_cur в @w_EmployeeID, @w_EmployeeCode, @w_NPDDay
если @@fetch_status <> 0
переход end_ret -- отсутствие квалифицируя данных к процессу
пока @@fetch_status = 0
начните -- петля стрелки
-- обусловьте ранее & следующие дни работы
@w_RetStatus exec = @w_EmployeeId dbo.xPLT_PrevNextWorkDay, @w_NPDDay, 0, @r_PrevWorkDay выход, @r_NextWorkDay выход
если @w_RetStatus <> 0
начните
выберите @w_RetMsg = «xPLT_WTAAbsenceSpanNPD: вызовите к xPLT_PrevNextWorkDay неудачный с возвратным кодом: » + новообращенный (чарс (1), @w_RetStatus)
raiserror ("%s», 18.1, @w_RetMsg)
выберите @w_RetCode = 1
переход end_ret
конец
-- испытайте для отсутствия целых дней на ранее & следующие дни работы
если
(
отборно
отсчет (*)
от
@TSD tsd
где
tsd.EMPLOYEECODE = @w_EmployeeCode и
(tsd.ADMINISTRATIONDATE = @r_PrevWorkDay или tsd.ADMINISTRATIONDATE = @r_NextWorkDay) и
tsd.STANDARDMINSINDAILYPATTERN > 0 и
tsd.STANDARDMINUTESACHIEVED = 0
) = 2
начните
введите в #tmp9001 (EmployeeID, NPDDay, PrevWorkDayAbs, NextWorkDayAbs)
значения (@w_EmployeeID, @w_NPDDay, @r_PrevWorkDay, @r_NextWorkDay)
конец
fetch затем от emp_cur в @w_EmployeeID, @w_EmployeeCode, @w_NPDDay
конец -- петля стрелки
-- возвращенное resultset
отборно
t1.*,
eiv. Фамилия,
eiv. Forenames,
eiv. Центр,
eiv. Команда
от
t1 #tmp9001
внутренне соедините eiv dbo.xPLT_EmpInfo_Vw
на t1.EmployeeID = eiv.EmployeeID COLLATE Latin1_General_CI_AS
заказ мимо
t1.EmployeeID,
t1.NPDDay
--выберите * от t1 #tmp9001
end_ret:
близкое emp_cur
deallocate emp_cur
упадите таблица #tmp9001
--возвратите @w_RetCode
выберите @w_RetCode
ИДИТЕ
|