Имя: Пароль:
1C
1С v8
Подскажите с запросом
0 razbiralshik
 
16.09.13
13:42
ВЫБРАТЬ
    ТаблицаКварталов.Квартал,
    ТаблицаКварталов.Сотрудник,
    ТаблицаКварталов.ВариантSC,
    ТаблицаПериодов.Регион
ИЗ
    СотрудникИПоказатели КАК ТаблицаКварталов
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СотрудникИПоказатели.Сотрудник КАК Сотрудник,
            МАКСИМУМ(НастройкиПользователей.Период) КАК Период,
            НастройкиПользователей.Значение КАК Регион
        ИЗ
            СотрудникИПоказатели КАК СотрудникИПоказатели
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
                ПО СотрудникИПоказатели.Сотрудник = НастройкиПользователей.Пользователь
                    И (ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(СотрудникИПоказатели.Квартал, КВАРТАЛ, 1), СЕКУНДА, -1) >= НастройкиПользователей.Период)
        ГДЕ
            НастройкиПользователей.Настройка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НастройкиПользователей.Регион)
            И СотрудникИПоказатели.Сотрудник = &Сотрудник
        
        СГРУППИРОВАТЬ ПО
            СотрудникИПоказатели.Сотрудник,
            НастройкиПользователей.Значение) КАК ТаблицаПериодов
        ПО ТаблицаКварталов.Сотрудник = ТаблицаПериодов.Сотрудник
            И (ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ТаблицаКварталов.Квартал, КВАРТАЛ, 1), СЕКУНДА, -1) >= ТаблицаПериодов.Период)
ГДЕ
    ТаблицаКварталов.Сотрудник = &Сотрудник

Есть две таблицы, как связать правильно, не очень понимаю.

Таблица периодов.
01.04.13 - петров - R5 - Питер
01.08.13 - петров - R5 - Москва

Таблица кварталов.
01.04.13 - петров - R5
01.07.13 - петров - R5
01.10.13 - петров - R5
01.01.14 - петров - R5

Нужно чтобы выглядело следующим образом:
01.04.13 - петров - R5 - Питер
01.07.13 - петров - R5 - Питер
01.07.13 - петров - R5 - Москва
01.10.13 - петров - R5 - Москва
01.01.14 - петров - R5 - Москва

У меня получается так:
01.04.13 - петров - R5 - Питер
01.07.13 - петров - R5 - Питер
01.07.13 - петров - R5 - Москва
01.10.13 - петров - R5 - Питер
01.10.13 - петров - R5 - Москва
01.01.14 - петров - R5 - Москва
01.01.14 - петров - R5 - Москва



Подскажите пожалуйста, чета я уже замучился а то уже...
1 Ненавижу 1С
 
гуру
16.09.13
13:44
подсказка, сделай таблицу периодов с началом и окончанием периода
2 razbiralshik
 
16.09.13
13:50
(1) сейчас попробую
3 razbiralshik
 
16.09.13
14:12
Получилось, спасибо. если кому интересно.

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