Вход | Регистрация

1С:Предприятие ::

Метки: 

ЗУП 2.5 Косячное Левое соединение РС

Я
   atlantika
 
11.01.18 - 23:37
с некоторого времени сотрудник работал внешним совместителем. Уволен 30.11.2017.
С 01.12.2017 принят как на основное место работы.

Есть вот такой кусочек запроса:

ВЫБРАТЬ
    ВложенныйЗапрос.Сотрудник,
    ВложенныйЗапрос.ПодразделениеОрганизации,
    ВложенныйЗапрос.Должность,
    ВложенныйЗапрос.ГрафикРаботы,
    ВложенныйЗапрос.ПричинаИзмененияСостояния,
    &Дата
ПОМЕСТИТЬ Работники
ИЗ
    (ВЫБРАТЬ
        РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
        ВЫБОР
            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
                    ИЛИ РаботникиОрганизацийСрезПоследних.ПериодЗавершения > &Дата
                ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
        КОНЕЦ КАК ПодразделениеОрганизации,
        ВЫБОР
            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
                    ИЛИ РаботникиОрганизацийСрезПоследних.ПериодЗавершения > &Дата
                ТОГДА РаботникиОрганизацийСрезПоследних.Должность
            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения
        КОНЕЦ КАК Должность,
        ВЫБОР
            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
                    ИЛИ РаботникиОрганизацийСрезПоследних.ПериодЗавершения > &Дата
                ТОГДА РаботникиОрганизацийСрезПоследних.ГрафикРаботы
            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ГрафикРаботыЗавершения
        КОНЕЦ КАК ГрафикРаботы,
        РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния,
        СостояниеРаботниковОрганизацийСрезПоследних.Состояние КАК Состояние
    ИЗ
        РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&Дата, ) КАК СостояниеРаботниковОрганизацийСрезПоследних
            ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    И ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)
    И ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком)
;

Опытным путем выявлено что проблема с условии ВложенныйЗапрос.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)

ВОПРОС: почему при запросе по сотруднику основного места работы в соединении из состояний подтягивает сотрудника по совместительству уволенного? и как следствие сотрудник не попадает в отбор??

Элементы сотрудников созданы корректно, документы перепроведены, визуально все красиво и правильно!!

Прошу не судить строго, если где то туплю - я в декрете ))
 
 
   vicof
 
1 - 11.01.18 - 23:47
В документах точно два сотрудника правильно выбраны?
   atlantika
 
2 - 11.01.18 - 23:52
перепроверяла пока только в режиме предприятия. Каждый документ, каждую строчку...
   atlantika
 
3 - 12.01.18 - 00:02
на всякий случай и в увольнении и в приеме перевыбрала сотрудников и перепровела - результат без изменений.
   Alexandr_U1982
 
4 - 12.01.18 - 00:50
1. Оставить в запросе только строчки, относящиеся к регистру "РаботникиОрганизаций". Добавить в выборку поля "Период" и "ПериодЗавершения" из регистра "РаботникиОрганизаций. Условие "ВложенныйЗапрос.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение" убрать. Выполнить запрос, результат запроса выгрузить в таблицу. Найти в таблице обоих сотрудников и посмотреть, что находится в полях "Период", "ПериодЗавершения" и "ПричинаИзмененияСостояния".

2. Вернуть в запрос условие "ВложенныйЗапрос.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение". Выполнить запрос, результат запроса выгрузить в таблицу. Найти в таблице обоих сотрудников и посмотреть, что находится в полях "Период", "ПериодЗавершения" и "ПричинаИзмененияСостояния".

3. Сравнить значения полей "Период", "ПериодЗавершения" и "ПричинаИзмененияСостояния" по требуемым сотрудникам из пунктов 1 и 2. Подумать над тем, есть ли отличия и почему они возникли.

4. Добавить соединение с регистром "СостояниеРаботниковОрганизаций" в запрос из пункта 1. В список выбираемых полей добавить поле "Состояние" из регистра "СостояниеРаботниковОрганизаций". Условия на это поле не добавлять. Выполнить запрос, выгрузить в таблицу посмотреть значения полей "Период", "ПериодЗавершения", "ПричинаИзмененияСостояния" и "Состояние" по требуемым сотрудникам.

5. В запрос из пункта 4 добавить условие "ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)". Выполнить запрос, выгрузить в таблицу посмотреть значения полей "Период", "ПериодЗавершения", "ПричинаИзмененияСостояния" и "Состояние" по требуемым сотрудникам.

6. В запрос из пункта 4 добавить условие "ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком)". Выполнить запрос, выгрузить в таблицу посмотреть значения полей "Период", "ПериодЗавершения", "ПричинаИзмененияСостояния" и "Состояние" по требуемым сотрудникам.

7. В запрос из пункта 4 добавить условия "ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам) И ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком)". Выполнить запрос, выгрузить в таблицу посмотреть значения полей "Период", "ПериодЗавершения", "ПричинаИзмененияСостояния" и "Состояние" по требуемым сотрудникам.

8. Сравнить результаты из пунктов 5, 6, 7. Подумать над различиями результатов.
   atlantika
 
5 - 12.01.18 - 04:27
спасибо. Все попробую. ))
   atlantika
 
6 - 12.01.18 - 09:29
если убрать все три условия отбора - показывает обоих сотрудников. Все как положено: у старого причина изменения - увольнение, у нового прием, последнее изменение состояния у старого сотр.  на октябрь - выход на работу... у нового сотр. нет записей. в части РС.Состояния - показывает девственно чистые поля.
Если поставить условие по уволенным - показывает только нового сотрудника. Если поставить второе или третье условие - показывает старого сотрудника. по новому сотруднику нет ни одного документа БЛ или отпуска по уходу за ребенком!
Картина меняется после даты отпуска 29.12 - там состояние на один деть ставится "в ежегодном отпуске", по завершению - "работает", и после этой даты показывает корректно данные на любую следующую дату даже со всеми тремя условиями.

Делаю вывод, что в РС.Состояний есть некорректная запись, не видимая пользователю... и простым запросом.
Как искать и исправлять?
   Alexandr_U1982
 
7 - 12.01.18 - 10:53
(6) Скорее всего в РС.СостоянияРаботникаОрганизации нет некорректной записи, не видимой пользователю.
Скорее всего, там вообще нет никаких записей по новому сотруднику до 29.12.

Предполагаю (проверить сейчас не могу), что соединение таблиц регистров для нового сотрудника в поле "ВложенныйЗапрос.Состояние" возвращает значение "NULL".
Соответственно, при добавление любых условий на поле "ВложенныйЗапрос.Состояние" из результата запроса выбрасываются строчки со знаением "NULL" в поле "ВложенныйЗапрос.Состояние".

Можно попробовать заменить условие:
"ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)
 И ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком)"
 
на условие:
"ВложенныйЗапрос.Состояние ЕСТЬ NULL
 ИЛИ (ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)
         И ВложенныйЗапрос.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком))"
   atlantika
 
8 - 12.01.18 - 11:23
Это помогло!! Спасибо вам огромное!!


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует