8.х Подзапрос не возвращает значение

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем ASUAndy, 2 дек 2009.

  1. TopicStarter Overlay
    ASUAndy
    Offline

    ASUAndy

    Регистрация:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Пытаюсь получить стаж сотрудника в данной оргинизации:

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

    Пробовал вместо ЕСЛИNULL добавлять поле count в подзапрос и проверять на отличие от нуля, но тоже не работает.

    Нашёл такое решение (вместо ЕСЛИNULL), но и оно не помогло:

    Код:
    ВЫБОР
    КОГДА 1 В
    (ВЫБРАТЬ
    1
    ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
    ГДЕ
    РаботникиОрганизаций.Регистратор ССЫЛКА Документ.УвольнениеИзОрганизаций
    И РаботникиОрганизаций.Сотрудник = &Сотрудник)
    ТОГДА ВложенныйЗапрос1.ДатаУвольнения
    ИНАЧЕ &ТекущаяДата
    КОНЕЦ
    
    
    Какжно решить эту задачу?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Почему берете Просто регистр сведений а не виртуальную таблицу, срез первых или последних. Почему проверяете на Документ прием на работу? когда во всех запросах, если смотрели есть такая проверка как
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
    | КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) ну или равно ПриемНаРаботу.
    И определитесь для кого вы считаете стаж Для сотрудника или ФизЛица. т.к Сотрудника у вас может быть 2 (2 раза принимался на работу) а физ лицо одно.

    И вообще для чего вам это понадобилось? если не секрет
  3. TopicStarter Overlay
    ASUAndy
    Offline

    ASUAndy

    Регистрация:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Вот тут просто запутался с сотрудником и физ лицом. Пытался проверить если он принят несколько раз...
    А вот этого не знал. Как сам придумал проверять на увольнение так и делал всегда...
    Вот тут всё правильно, надо для сотрудника.
    Просто отдел кадров попросил обработку, которая, помимо прочего, выдаёт стаж сотрудника на данном месте работы.

    Сделал как Вы советовали, код получился компактнее, правильнее и красивее, НО разности дат я так и не смог получить в случае когда сотрудник ещё не уволен. У него запрос с причиной изменения статуса равного увольнению ничего не возвращает... Т.е. подзапросы изменились, а проблема с их связкой осталась прежней.

    А ПричиныИзмененияСостоянияЗавершения мне ничем не поможет?
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Я бы вообще порекомендовал не писать запросы и т.д. Есть отчет Список сотрудников организации- из него можно достать практически все по сотрудникам. Вот отам можно вытаскивать стаж, если он проставлен у Физ лиц, они наверняка проставляли для Оплаты БЛ. там же можно завести стаж на предприятии и вытаскивать его. и уже в стандартных отчетах и гораздо проще в запросах. а так же именно этот вид стажа можно использовать если есть надбавка за стаж. Не одни же программисты должны работать. Скажите им что вот если они занесут туда то все появиться во всех отчетах.
  5. TopicStarter Overlay
    ASUAndy
    Offline

    ASUAndy

    Регистрация:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Да там отчёт более сложный и там, кроме всего прочего, надо стаж на данном предприятии.
    Я туда и хотел добавить, НО стаж на данном предприятии должен пересчитываться каждый день (для работающего сотрудника). Как это можно сделать? Как его в карточке пересчитывать?
    С этим полностью согласен. :)

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Так для этого тот стаж и используется. Заводите новый вид стажа "На предприятии" в дату отчета ставите дату когда человека приняли.
    Потом формируете отчет Списки сотрудников на дату с отбором этого вида стажи все. Если вам интересно как программно работать с этими стажами . Откройте код Унифицированной форты Т-2 (лчная карточка) и гляньке как там это делается.
  7. TopicStarter Overlay
    ASUAndy
    Offline

    ASUAndy

    Регистрация:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Спасибо!!!
    Я уже эту форму посметрел.
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    И Вам Спасибо. Дерзайте

Поделиться этой страницей