Курилка Интересное задание которое мне дали на собеседовании

Тема в разделе "Курилка", создана пользователем Bobre, 14 авг 2012.

  1. TopicStarter Overlay
    Bobre
    Offline

    Bobre Опытный в 1С

    Регистрация:
    15 апр 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Задача написать запрос.
    1. Есть табличка (справочник) в котором есть 2 колонки. 1-я колонка месяцы, 2-я колонка флаг оплаты (True/False).
    Одним запросом необходимо отобрать те месяцы, в которых оплата есть 3 месяца подряд. Например:
    1 True
    2 False
    3 True
    4 True
    5 False
    6 True
    7 True
    8 True
    9 False
    10 True
    11 True
    12 True

    И запрос должен вернуть 6,7,8,10,11,12
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Ну и как решили ?
  3. TopicStarter Overlay
    Bobre
    Offline

    Bobre Опытный в 1С

    Регистрация:
    15 апр 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Собеседование было давно, а тут я недавно вспомнил его и решил. Могу потом запрос написать, но позже, а то может не интересно будет
  4. Yuriy_Alexandrovich
    Offline

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

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    СГРУППИРОВАТЬ ПО 2-я колонка и ИМЕЮЩИЕ КОЛИЧЕСТВО(1-я колонка) = 3
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Решение (универсальный вариант, в запрос передается один параметр - &КоличествоМесяцевНепрерывнойОплаты).
    (поместил под спойлер, чтобы не отбивать интерес у желающих решить самостоятельно).

  6. TopicStarter Overlay
    Bobre
    Offline

    Bobre Опытный в 1С

    Регистрация:
    15 апр 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Я делал следующим образом, правда запрос работает только для 3 месяцев непрерывной оплаты.
    Выбрать
    1 Как Месяц, Истина Как Флаг
    Поместить ТаблицаОплат
    Объединить все
    Выбрать
    2 Как Месяц, Ложь Как Флаг
    Объединить все
    Выбрать
    3 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    4 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    5 Как Месяц, Ложь Как Флаг
    Объединить все
    Выбрать
    6 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    7 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    8 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    9 Как Месяц, Ложь Как Флаг
    Объединить все
    Выбрать
    10 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    11 Как Месяц, Истина Как Флаг
    Объединить все
    Выбрать
    12 Как Месяц, Истина Как Флаг ;
    /////////////////////////////////////////////////
    Выбрать Различные Месяц //Переводим в колонки
    ИЗ (Выбрать //Получаем строчкой
    ТО1.Месяц КАК Месяц1, ТО1.Флаг,
    ТО2.Месяц КАК Месяц2, ТО2.Флаг,
    ТО3.Месяц КАК Месяц3, ТО3.Флаг
    Из ТаблицаОплат Как ТО1,
    ТаблицаОплат Как ТО2,
    ТаблицаОплат Как ТО3
    Где ТО1.Месяц = ТО2.Месяц + 1 И ТО2.Месяц = ТО3.Месяц + 1
    И ТО1.Флаг = Истина И ТО2.Флаг = Истина И ТО3.Флаг = Истина) Как ПодЗапрос,
    ТаблицаОплат КАК ТО
    Где Месяц = Месяц1 ИЛИ Месяц = Месяц2 ИЛИ Месяц = Месяц3

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