Имя: Пароль:
1C
1С v8
Запрос к регистру сведений РаботникиОрганизации
0 Алерон
 
18.11.15
09:57
В данном регистре содержаться записи "сотрудники". Проблема в том, что сотрудник в справочнике записан один, но в этом регистре он может быть записан несколько раз(так как поле подразделение организации может быть разным). В итоге это создает определенную проблему, если мы в запросе будем брать данные с использованием этого р.с. : Документ КАК Док ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекДата, ) ПО Док.Ответственный.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо

В итоге, в результатах будут повторяющиеся записи. Можно как-то в запросе сгруппировать сотрудников в р.с.? Или лучше вместо р.с. обращаться к справочнику "Сотрудники"?
1 olegves
 
18.11.15
10:01
(0) что тебе нужно из этого регистра?
2 Алерон
 
18.11.15
10:02
(1) в этом регистре для каждого сотрудника указаны должность и подразделение организации. Это и хочу вытащить.
3 Алерон
 
18.11.15
10:03
И вытаскивается, только дубликаты получаются.
4 ДенисЧ
 
18.11.15
10:04
Документ КАК Док ЛЕВОЕ СОЕДИНЕНИЕ ( выбрать различные Сотрудник изРегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекДата, )) как рс ПО Док.Ответственный.ФизЛицо = рс.Сотрудник.Физлицо
5 kumena
 
18.11.15
10:32
>> И вытаскивается, только дубликаты получаются.

это ты мощно задвинул. про срез последних слышал?
6 Алерон
 
18.11.15
10:32
(4) говорит поле (ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Наименование, 0) Как Подразделение) не найдено

    " Выбрать
    |    ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Наименование, 0) Как Подразделение,
    |    ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.Должность.Наименование, 0) Как Должность,
    |    РаботникиОрганизацийСрезПоследних.Сотрудник,
    |    ВнутреннийЗаказ.Ответственный,
    |   КОЛИЧЕСТВО(ВнутреннийЗаказ.Ссылка) КАК КоличествоЗаМесяц,
    |   КОЛИЧЕСТВО(ВЫБОР КОГДА ВнутреннийЗаказ.Дата МЕЖДУ &ДатаН И &ДатаК ТОГДА ВнутреннийЗаказ.Ссылка КОНЕЦ) КАК КоличествоЗаДень
    |ИЗ
    |    Документ.ВнутреннийЗаказ КАК ВнутреннийЗаказ
    |        ЛЕВОЕ СОЕДИНЕНИЕ
    | ( выбрать различные Сотрудник из РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекДата, )) как РаботникиОрганизацийСрезПоследних ПО
    | ВнутреннийЗаказ.Ответственный.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо
    |ГДЕ
    |    ВнутреннийЗаказ.Дата МЕЖДУ &ДатаНачалаМесяца И &ДатаК
    |СГРУППИРОВАТЬ ПО
    |    ВнутреннийЗаказ.Ответственный,
    |    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
    |    РаботникиОрганизацийСрезПоследних.Должность,
    |    РаботникиОрганизацийСрезПоследних.Сотрудник";
7 Алерон
 
18.11.15
10:33
(5) не понял? Я и так с ним делаю.
8 Мимохожий Однако
 
18.11.15
10:35
выбрать различные
9 kumena
 
18.11.15
10:39
(7) из первого поста вообще не понятно было чего ты делаешь

вместо этой фигни

ЛЕВОЕ СОЕДИНЕНИЕ
    | ( выбрать различные Сотрудник из РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекДата, )) как РаботникиОрганизацийСрезПоследних ПО
    | ВнутреннийЗаказ.Ответственный.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо

надо другой запрос написать, чтобы в результате было соответсвие физлиц их сотрудникам и должностям на дату документа. запрос будет сложнее


(8) смотри внимательней, у него и так различные
10 kumena
 
18.11.15
10:40
+9 и тогда уже соединять с физлицом
11 ibreiter
 
18.11.15
10:40
(6) В конструкторе открывается запрос?
12 Алерон
 
18.11.15
10:41
(9) а если не к р.с., а к справочнику не посредственно обращаться? Там ведь по идее актуальные данные.
13 ibreiter
 
18.11.15
10:46
(12) У сотрудника вроде реквизиты есть тек должность и подразделение
14 piter3
 
18.11.15
10:48
(13) нет.это неправильная подсказка
15 kumena
 
18.11.15
10:49
не знаю что у вас за конфа, но в зуп они для формы списка и если брать не из регистра то может быть криво
16 Алерон
 
18.11.15
10:49
(13) ответственный ссылка на справочник "пользователи". Поэтому нужно в через другой объект выцепить его должность и подразделение
17 Алерон
 
18.11.15
10:50
(15) УПП. А почему криво?
18 kumena
 
18.11.15
10:51
(17) потому что гладиолус.
не хочешь не пиши правильно, я тут никого не заставляю.
19 mehfk
 
18.11.15
10:51
(17) В Вашей УПП в шапке документа ВнутреннийЗаказ нет Организации?
20 Новиков
 
18.11.15
10:53
СрезПоследних возвращает выборку по уникальному набору измерений на дату. Поэтому у тебя и есть дубли в первоначальной выборке, которые джойнятся далее.

Тебе сначала нужно выбрать из РС, по твоим сотрудникам, записи по физ.лицу с максимальным периодом.  После этого, эту выборку уже джойнишь опять же к этому рс, по физ.лицу и макс.периоду, и получаешь должности и подразделения. Если нужно, можешь ограничить физ.лица каким-то фильтром.

А срез последних здесь использовать не нужно.
21 Алерон
 
18.11.15
10:54
(19) есть. И зачем оно здесь понадобиться?
(18)  да нет,  мне просто интересно :)
22 mehfk
 
18.11.15
10:54
+ Проверка в соединении на вид занятости основное место работы или внешнее совметительство
23 mehfk
 
18.11.15
10:54
(21) Чтобы не было (0)
24 Алерон
 
18.11.15
10:55
(20) а нет такой фичи, как выбрать сотрудников с максимальной датой(по идее я бы назвал это СрезПоследних).
25 sapphire
 
18.11.15
10:56
(0) Может всё-таки разберетесь, что именно хранит этот регистр и как с ним работать?
26 sapphire
 
18.11.15
10:56
(2) А Вы знаете как они правильно определяются?
27 Новиков
 
18.11.15
10:58
(24) только запросом как я описал выше, с выбором максимального периода и последующим джойном по нему.
28 Jonny_Khomich
 
18.11.15
10:58
А как человек может работать в двух подразделениях?
29 mehfk
 
18.11.15
11:00
(28) Внутреннее совместительство
30 Jonny_Khomich
 
18.11.15
11:02
(29) тогда нужен признак какое подразделение надо ставить. А то будет 3 подразделения, а что ставить не ясно.
31 Алерон
 
18.11.15
11:06
(26) В смысле откуда берутся? Приём/увольнение на работу., перемещение и т.п.
32 SeraFim
 
18.11.15
11:08
(0) сотрудник в регистре может быть записан несколько раз.
Но в СрезПоследних он будет один раз!
Несколько раз может быть одно физ лицо.
По основному месту/внешнему совместительству + внутреннее совместительство.
Вопрос - какое подразделение/должность тебе нужно???
По основной - сотрудник программист 1С, по совместительству - дворник. Что ставить?
Если всегда по основной - то отбирай по виду занятости. В Программе есть контроль, чтобы по основной он работал только в 1 месте.
33 sapphire
 
18.11.15
11:10
Мало того, подразделение еще лихо определяется
34 Алерон
 
18.11.15
11:12
(32) нужно то подразделение с которого он работал на момент создания документа.
35 sapphire
 
18.11.15
11:12
(32) там еще надо проверять, что ПричинаИмзененияСостояния!=Увольнение
36 sapphire
 
18.11.15
11:13
+ (35) проверять ПериодЗавершения, коли указан то ДолжностьЗавершения
37 Алерон
 
18.11.15
11:14
(32) по идее можно и последнее.
38 SeraFim
 
18.11.15
11:16
(37) что означает последнее?
Еще раз: Иванов с 01.11 по основной - программист 1С, по совместительству с 01.11 - дворник.
какую должность ему выводить?

Как говорится, "правильно поставленный вопрос содержит половину ответа"
39 Brogan
 
18.11.15
11:18
Как я понял, автору нужно выбрать кадровые данные сотрудника, которому соответствует исполнитель документа при условии, что этот исполнитель может занимать другие ставки по внутреннему совместительству. Автор правильно заметил, что физик в программе один, а сотрудников для этого физика может быть много.

В ЗБУ я бы решил вопрос таким запросом, откинув уволенных и внутренних совместителей и проверив данные на ПериодЗавершения. Т.е. нашел бы основного сотрудника, работающего на &Период. Для примера взял док. НачислениеЗарплатыРаботникамОрганизаций.

ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник,
    ВЫБОР
        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период
            ТОГДА РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения
        ИНАЧЕ РаботникиОрганизацийСрезПоследних.Должность
    КОНЕЦ КАК Должность,
    ВЫБОР
        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период
            ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
        ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
    КОНЕЦ КАК ПодразделениеОрганизации
ИЗ
    Документ.НачислениеЗарплатыРаботникамОрганизаций КАК НачислениеЗарплатыРаботникамОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних
        ПО НачислениеЗарплатыРаботникамОрганизаций.Ответственный.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо
            И НачислениеЗарплатыРаботникамОрганизаций.Организация = РаботникиОрганизацийСрезПоследних.Сотрудник.Организация
ГДЕ
    ВЫБОР
            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
                    И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период
                ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
        КОНЕЦ <> &Увольнение
    И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости <> &ВнутреннееСовместительство
40 mehfk
 
18.11.15
11:18
(38) "Дворник-программист" :) Или наоборот "Программист-дворник"
41 Алерон
 
18.11.15
11:19
(38) а как это храниться? В справочнике сотрудники, что будет указанно в должности?
42 mehfk
 
18.11.15
11:20
(41) Напрягись и промоделируй сам.
43 SeraFim
 
18.11.15
11:22
(41) в справочнике "Сотрудники" будет 2 сотрудника - по основной работе, и по совместительству.
44 Алерон
 
18.11.15
11:30
(39) спасибо за код, обязательно попробую, отпишусь как получиться.
(43) проверил справочник, совмещенки нет. Только увольнение/приём на работу. В этом случае можно узнать подразделение сверив даты. А если совмещает? Тут же не узнать, если это не будет записано вместе с документом.
Ошибка? Это не ошибка, это системная функция.