Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 6 вперед Ctrl→ все |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
fantanol, DATEDIFF(day, start,end)<=21 но 21 день ограничивать странно и скорее всего не правильно |
18 май 17, 14:29 [20493062] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
А противозаконность такого ограничения согласно ТК РФ не беспокоит? |
||
18 май 17, 14:36 [20493073] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
утомляешь, одно другому не мешает, но 21 это не верно |
||||
18 май 17, 14:40 [20493083] Ответить | Цитировать Сообщить модератору |
iiyama Member Откуда: Сообщений: 642 |
2TC Я не против триггеров(где они нужны), но Вы не думаете, что бизнес слой лучше вынести из триггеров, хотя бы в процедуры. А то у вас сегодня добавляется 21 день, завтра отпуск по уходу за ребенком, послезавтра экспаты и тд ... |
18 май 17, 15:43 [20493286] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
Если будет предусмотрена возможность вручную принудительно проставить >21 дня, то всё законно. А может, тут вообще считаются отпуска симов из The Sims, к которым ТК РФ неприменим ) |
||||
18 май 17, 15:49 [20493311] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
У меня не получается разобраться,куда подставить эту строку DATEDIFF(day, start,end)<=21 p.s 21 день я для примера сказал)
Какие варианты есть варианты,чтобы это реализовать? |
||
18 май 17, 15:52 [20493325] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
«...о необходимости которой все время говорили большевики...» Такого рода ошибки — самые незаметные, а потому неприятные. Иногда ошибку в одном символе по часу ищешь (не там, разумеется). |
||
18 май 17, 15:54 [20493336] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
Какие варианты есть варианты,чтобы это реализовать?[/quot] Можно дизаблить триггер при принудительном апдейте. Но мудрый iiyama прав, триггеры отдельно, бизнес-логика отдельно. |
||
18 май 17, 15:58 [20493352] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
Можно дизаблить триггер при принудительном апдейте. Но мудрый iiyama прав, триггеры отдельно, бизнес-логика отдельно.[/quot] Сможете добавить отмену при апдейте в мой триггер? Чтобы не заморачиваться с созданием процедур |
||||
18 май 17, 16:07 [20493382] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
fantanol,IF OBJECT_ID(N'DBO.DATES',N'TR')IS NOT NULL DROP TRIGGER DBO.DATES; GO create TRIGGER dates ON Отпуск after insert AS ---join - inserted.[Сотрудник] = Сотрудник.[id_Сотрудник](ЭТО ВООБЩЕ ЧТО??) begin /* IF EXISTS (SELECT * FROM inserted WHERE Дата_начала <= Дата_приема ) BEGIN RAISERROR (N'Дата начала не может быть раньше даты приема',16,1); */ IF(EXISTS (SELECT 1 FROM INSERTED I JOIN [Сотрудник]S ON I.[Сотрудник]=S.[id_Сотрудник] WHERE I.[Дата_начала]<=S.[Дата_приема] OR DATEDIFF(DAY, I.start,I.end)<=21))) RAISERROR (N'Дата начала не может быть раньше даты приема',16,1); return; end; END GO |
18 май 17, 16:11 [20493393] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
Спасибо что помогли. Подставил я данные под себя и исправил на это >21)) Теперь исправно работает) Как можно прописать исключение для этого числа? |
||
18 май 17, 17:35 [20493743] Ответить | Цитировать Сообщить модератору |
iiyama Member Откуда: Сообщений: 642 |
fantanol, 1. RAISERROR (N'Дата начала не может быть раньше даты приема или продолжительность отпуска превышает лимит или еще что-то',16,1); 2. re> Как можно прописать исключение для этого числа? Если Вы имеете ввиду сделать произвольное число, то видимо завести таблицу параметров и вытаскивать оттуда в переменную |
18 май 17, 17:39 [20493762] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
fantanol,
можно написать хранимую процедуру на добавление отпуска, тем самым избавиться от триггера, а уж процедуре обработать как душа пожелает. |
||
18 май 17, 17:40 [20493771] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а в триггере душа не пожелает? |
||||
18 май 17, 17:42 [20493773] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
То етсь нужно обеспечить возможность принудительного выставления разницы > 21? Я бы сделал дополнительное битовое поле "Срок_принудительно", с доступом только у большого начальника, и переписал бы триггер: IF OBJECT_ID(N'DBO.DATES',N'TR')IS NOT NULL DROP TRIGGER DBO.DATES; GO create TRIGGER dates ON Отпуск after insert AS ---join - inserted.[Сотрудник] = Сотрудник.[id_Сотрудник](ЭТО ВООБЩЕ ЧТО??) begin /* IF EXISTS (SELECT * FROM inserted WHERE Дата_начала <= Дата_приема ) BEGIN RAISERROR (N'Дата начала не может быть раньше даты приема',16,1); */ IF EXISTS (SELECT 1 FROM INSERTED I JOIN [Сотрудник]S ON I.[Сотрудник]=S.[id_Сотрудник] WHERE I.[Дата_начала]<=S.[Дата_приема]) RAISERROR (N'Дата начала не может быть раньше даты приема',16,1); IF EXISTS (SELECT 1 FROM INSERTED I JOIN [Сотрудник]S ON I.[Сотрудник]=S.[id_Сотрудник] WHERE DATEDIFF(DAY, I.[start],I.[end])<=21 AND I.[Срок_принудительно]=0) RAISERROR (N'Утвердить отпуск сроком более 21 суток может только босс',16,1); return; end; GO |
||
18 май 17, 17:50 [20493802] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
Я говорил про первый вариант) Ваше решение меня вполне устроило. Спасибо С отпусками у меня все. Возвращаясь к началу темы. Как можно ограничить количество начальников и замов на отдел . Другие должности я не рассматриваю. Т.е при добавлении сотрудника,нельзя назначить еще одного человека на должность начальника если их лимит исчерпан. Предполагаю что это нужно работать со штатным расписанием,но может и ошибаюсь. |
||
18 май 17, 17:53 [20493808] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
Ну почему же: еще и как пожелает, но у него потом окажется, что Петровичу можно не более 10 дней отпуска, тете Тане - две недели, а фюрер "..в отпуск едет когда хочет" |
||
18 май 17, 17:59 [20493821] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
и? |
||||
18 май 17, 18:01 [20493830] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
Вот нужно сделать триггеры на таблицы Штатное_расписание и Сотрудник, и проверять там, что бы количество вакантных мест не было отрицательным |
||
18 май 17, 23:59 [20494488] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
|
||||
19 май 17, 00:58 [20494553] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
Количество начальников в отделе можно проверить в триггере на Сотрудник, по полям id_Отдел, id_Должность, и оно не должно быть больше 1 |
||||
19 май 17, 09:21 [20494878] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
Сможете помочь с этим? |
||||
19 май 17, 10:33 [20495229] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
Что предложите по этому? "Список сотрудников,которым необходимо повысить квалификацию"? Мне остались этот и тот вопрос выше и всё |
19 май 17, 16:51 [20497106] Ответить | Цитировать Сообщить модератору |
fantanol Member Откуда: Сообщений: 191 |
апп |
20 май 17, 14:31 [20498372] Ответить | Цитировать Сообщить модератору |
xenix
Guest |
а потом ты отсюда исчезнешь навсегда? |
||
20 май 17, 20:22 [20498685] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 6 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |