|
Помогите разобраться с Запросом... | ☑ | ||
---|---|---|---|---|
0
Darhon
26.07.13
✎
09:40
|
Доброе время суток. Такая ситуация есть запрос который формирует список сотрудников работающих в организации в течении заданного интервала времени. 1С 8.2 ЗУП Почему-то не осуществляется отбор по организации, хотя параметр задается на форме полевыбора организация заполняется. В выборку все равно попадают все сотрудники. Вот текст запроса:
Запрос=Новый запрос; Запрос.Текст="ВЫБРАТЬ | РаботникиОрганизацийСрезПоследних.Сотрудник.Ссылка КАК Сотрудник, | РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование, | РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.Ссылка КАК ФизЛицо, | РаботникиОрганизацийСрезПоследних.Организация.Ссылка КАК Организация, | РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния.Ссылка, | РаботникиОрганизацийСрезПоследних.Сотрудник.Должность.Наименование КАК Должность |ИЗ | РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачПериода, ) КАК РаботникиОрганизацийСрезПоследних |ГДЕ | РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &Увольнение | ОБЪЕДИНИТЬ | ВЫБРАТЬ | РаботникиОрганизаций.Сотрудник.Ссылка КАК Сотрудник, | РаботникиОрганизаций.Сотрудник.Наименование, | РаботникиОрганизаций.Сотрудник.Физлицо.Ссылка КАК ФизЛицо, | РаботникиОрганизаций.Организация.Ссылка КАК Организация, | РаботникиОрганизаций.ПричинаИзмененияСостояния.Ссылка, | РаботникиОрганизаций.Сотрудник.Должность.Наименование КАК Должность | ИЗ |РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций |ГДЕ |РаботникиОрганизаций.ПричинаИзмененияСостояния = &Прием |И РаботникиОрганизаций.Период > &НачПериода |И РаботникиОрганизаций.Период <= &КонПериода |И РаботникиОрганизаций.Организация = &Организация |"; Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("НачПериода",НачПериода); Запрос.УстановитьПараметр("КонПериода",КонПериода); Запрос.УстановитьПараметр("Увольнение", Перечисления.ПричиныИзмененияСостояния.Увольнение); Запрос.УстановитьПараметр("Прием", Перечисления.ПричиныИзмененияСостояния.ПриемНаРаботу); Выборка=Запрос.Выполнить().Выбрать(); Заранее спасибо. P.S. И еще подскажите как вытащить из ЗУП основную организация (ну иили аналог)... |
|||
1
Ненавижу 1С
гуру
26.07.13
✎
09:42
|
потому что в первой части нет условия на организацию
|
|||
2
rikodroo
26.07.13
✎
09:44
|
Что-то типа этого надо в первом наверное:
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачПериода, Организация = &Организация ) |
|||
3
Darhon
26.07.13
✎
09:44
|
Блин, я почему-то думал раз запрос с объединением достаточно одного условия :( Значит он как-то по другому работает чем я себе представлял :)
|
|||
4
ДенисЧ
26.07.13
✎
09:45
|
(3) Надо не представлять, а думать :-)
|
|||
5
Ненавижу 1С
гуру
26.07.13
✎
09:47
|
(4) надо ЗНАТЬ, в данном случае
|
|||
6
ДенисЧ
26.07.13
✎
09:51
|
(5) Достаточно подумать. А знание придёт в процессе
|
|||
7
cw014
26.07.13
✎
09:52
|
(6) Надо сначала представить, потом подумать, потом почитать все таки умные книжки, а потом уже ЗНАТЬ )))
|
|||
8
Капитан О
26.07.13
✎
09:56
|
(5) (6) (7) умные какие. надо создать ветку на мисте. всё!
|
|||
9
Darhon
26.07.13
✎
12:14
|
:)) Спасибо всем за предыдущие разъяснения...но проблема еще и в следующем. Запрос выбирает не последнюю должность сотрудника, то есть если в интервале временном было кадровое перемещение, он его игнорирует и выбирает по должности на которую человека принимали на работу, и еще много сотрудников у которых запрос выдает пустую должность, хотя в справочнике сотрудников должность указана. Пустая должность выдается только после повторного вызова процедуры с запросом, когда процедура вызывается из ПриОткрытии пустых должностей нет...
|
|||
10
Darhon
26.07.13
✎
12:36
|
Подниму тему, за назойливость прошу прощения, но разобраться край как нужно :)
|
|||
11
Бертыш
26.07.13
✎
13:15
|
А ты какую должность хочешь вывести? В справочнике должность это тьфу, она там справочно, когда хочу тогда меняю. Что бы выбрать должность на какой-то момент надо знать момент на который ты хочешь её получить. Что ты хочешь короче.
|
|||
12
Darhon
26.07.13
✎
13:17
|
Последнюю должность на которой человек работает. Но это должно быть в рамках периода НачДата и КонДата. То есть приняли его менеджером, потом перевели старшим менеджером, запрос должен выдать старшего менеджера...а у меня выдает менеджера... Да и еще эти пустые значения в должностях непонятно почему вылазят :((
|
|||
13
Darhon
26.07.13
✎
13:21
|
Про пустые значения: Открываем справочник сотрудников организации находим человека, у него должность директор. Открываем форму отчета, приоткрытии вызывается этот же запрос, директор попадает в список нужных сотрудников, нажимаем кнопку перезаполнить, вызывается этот запрос еще раз, директор не попадает, смотрим отладчиком, а должность null....
|
|||
14
Бертыш
26.07.13
✎
13:36
|
(12) Пустые значения это могут быть увольнения
У тебя есть сотрудники по которым: А) были кадровые перемещения. Б) не было кадровых перемещений С сотрудниками Б промашка состоит в том что при срезе ты получаешь всех сотрудников, в том числе и из группы А Соответственно тебе сначала надо определится кто у тебя входит в группу А и исключить их из среза Условие Сотрудник не в А Следовательно А должно быть временной таблицей для пущей скорости выполнения ввиду того что А нам нужны наложить фильтр на срез и А нам нужны вывести Рассмотрим А А меняет должность в периоде. Нужно выбрать движения. При этом А может менять должность в периоде более одного раза. Нужно собрать таблицу всех изменений должностей кроме случаев с увольнением. Таблица вида Дата,Должность,Сотрудник Она нам так же понадобится более чем один раз, то есть временная таблица Выбираем максимальную дату изменения должности, игнорируя расхождения в должностях, то есть Максимум(Дата),Сотрудник Далее соединяя полученный максимум даты по равенству с исходной таблицей получаем из исходной таблицы должность на дату максимума Итак мы получили перечень А кто менял должность в интервале и какая самая последняя должность. Сохраняем во временную таблицу Далее берем срез должностей всех сотрудников данной организации на конец периода (не обязательно на начало брать всё равно мы отсекаем тех у кого менялась должность) Ставим условие что в срезе не входящие в А Итак мы получили список Б Итак есть список А и список Б Осталось их объединить Главное при этом не забывать учитывать что запись может соответствовать как основной должности так и внутреннему совместителю, а для внешнего совместителя правила те же что и для основного сотрудника |
|||
15
Бертыш
26.07.13
✎
13:37
|
Надеюсь я понятно всё объяснил?
|
|||
16
Бертыш
26.07.13
✎
13:40
|
Кстати вместо задания перечисления в качестве параметра можно использовать конструкцию языка запросов ЗНАЧЕНИЕ()
|
|||
17
Бертыш
26.07.13
✎
13:46
|
Срез на начало предпочтительнее среза на конец ввиду наличия должностей уволенных в периоде сотрудников Если они конечно тебе нужны и дороги
|
|||
18
Darhon
26.07.13
✎
13:56
|
Да...понятно :) Спасибо...буду реализовывать :)
|
|||
19
Darhon
26.07.13
✎
15:05
|
Блин, а для помещения во временную таблицу в каком из 2 ИЗ нужно писать ПОМЕСТИТЬ ))
|
|||
20
Галахад
гуру
26.07.13
✎
15:06
|
(19) Пользуйся построителем.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |