8.х Выбор предпоследнего значения из запроса

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

  1. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Нужно из регистра сведений выбрать предпоследнее значение по каждому физ. лицу. Т.е. нужно вытащить предыдущую должность сотрудника. Как это лучше сделать? Или единственный выход перебирать значения в цикле? Или есть другой выход?
    Спасибо за советы.
  2. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вложенный запрос, в нем два вложенных запроса с сортировкой по периоду и объединением по максимальному периоду
    Ivan2014 нравится это.
  3. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Один вложенный запрос=срез последних, второй - не виртуальная таблица?
    --- Объединение сообщений, 25 апр 2014 ---
    Не понимаю как мы нужные данные этим способом получим.
  4. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Примерно понял, буду пробовать. Спасибо.
    --- Объединение сообщений, 25 апр 2014 ---
    Основной запрос у нас будет срез последних, а вложенный - полный? и галочка без дубликатов?
  5. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Код:
    "ВЫБРАТЬ
       |   РаботникиОрганизаций.Сотрудник,
       |   РаботникиОрганизаций.Период КАК Период
       |ИЗ
       |   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       |     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
       |       РаботникиОрганизацийСрезПоследних.Период КАК Период,
       |       РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник
       |     ИЗ
       |       РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних) КАК ВложенныйЗапрос
       |     ПО РаботникиОрганизаций.Период = ВложенныйЗапрос.Период
       |       И РаботникиОрганизаций.Сотрудник = ВложенныйЗапрос.Сотрудник
       |
       |УПОРЯДОЧИТЬ ПО
       |   Период";
    
    Как объединить по максимальному периоду? На какой закладке это находится в конструкторе запроса?
    Спасибо.
  6. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Кажется я наконец то понял!
    Код:
    Запрос=Новый Запрос;
       Запрос.Текст=
       "ВЫБРАТЬ ПЕРВЫЕ 2
       |   РаботникиОрганизаций.Сотрудник,
       |   РаботникиОрганизаций.Период КАК Период
       |ИЗ
       |   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       |ГДЕ
       |   РаботникиОрганизаций.Сотрудник= &Сотрудник
       |
       |УПОРЯДОЧИТЬ ПО
       |   Период УБЫВ";
       Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
    
  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если по одному сотруднику... а если по списку? в цикле запрос запускать будете?
    Ivan2014 нравится это.
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    примерно так
    Код:
    ВЫБРАТЬ
        ВложенныйЗапрос.Сотрудник,
        РаботникиОрганизаций.Должность
    ИЗ
        (ВЫБРАТЬ
            РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
            МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
        ИЗ
            РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
                ПО РаботникиОрганизацийСрезПоследних.Сотрудник = РаботникиОрганизаций.Сотрудник
                    И РаботникиОрганизацийСрезПоследних.Период > РаботникиОрганизаций.Период
                    И (РаботникиОрганизаций.Активность)
       
        СГРУППИРОВАТЬ ПО
            РаботникиОрганизацийСрезПоследних.Сотрудник) КАК ВложенныйЗапрос
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
            ПО ВложенныйЗапрос.Сотрудник = РаботникиОрганизаций.Сотрудник
                И ВложенныйЗапрос.Период = РаботникиОрганизаций.Период
    
    Ivan2014 нравится это.

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