Имя: Пароль:
1C
1С v8
Эмуляция среза последних в РЛС
0 Lama12
 
27.02.15
15:16
Пишу РЛС.

Суть следующая. Есть справочник "РТС_СтруктурныеЕдиницы". Права на изменение элементов данного справочника регулируются данными из регистра сведений "РТС_МенеджерОбъекта". В регистре хранится информация по тому, кто ответственен за элемент справочника. ответственный может со временем меняться. отсюда возникает потребность в срезе последних в запросе. Но в РЛС, нельзя использовать срез последних в чистом виде, поэтому приходится выкручиваться.
Ниже пример запроса, который помещается в РЛС.


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


Вопрос.
Почему вложенный запрос "ВыбранныеЭлементы", не воспринимается РЛС, как обычная выборка?

Причем, если я в этот вложенный запрос помещу следующий код


ВЫБРАТЬ
    РТС_СтруктурныеЕдиницы.Ссылка
ИЗ
    Справочник.РТС_СтруктурныеЕдиницы КАК РТС_СтруктурныеЕдиницы
ГДЕ
    (РТС_СтруктурныеЕдиницы.Наименование = "а1"
            ИЛИ РТС_СтруктурныеЕдиницы.Наименование = "а2")


То, все работает.

Если в консоли запросов сравнивать результаты первого вариванта вложенного запроса и второго, то они идентичны. В то-же время в РЛС - не работает.
1 0wl
 
27.02.15
15:20
а если профайлером посмотреть, запросы совпадают?

Хотя вообще сложные запросы в рлс -- изначально плохая идея. Если очень хочется, я бы подумал об отдельной таблице, хранящей текущее состояние дел
2 Lama12
 
27.02.15
15:23
(1) Отдельную таблицу, пока держу как козырь :)
Сложно целостность данных отслеживать.

Профайлер должен показать разные запросы. Это нормально. Хотя, пожалуй посмотрю если совсем идей не будет.

Если есть желающие, то могу дать пустую базу (dt 8 Mb) с воспроизведением ситуации.
3 Lama12
 
27.02.15
15:25
Для любителей.
https://yadi.sk/d/DPniPf5TevVjU
4 mikecool
 
27.02.15
15:25
возможно оффтоп - зачем левое соединение, когда годно внутреннее?
5 Lama12
 
27.02.15
15:26
(4) Это уже издержки вариантов поиска решения... изначально было внутреннее
6 Lama12
 
02.03.15
15:57
Все работает.
Накосячил я.
Вот тут РТС_МенеджерОбъекта.Менеджер = &ТекущийПользователь
типы не совпадают.
7 Гёдза
 
02.03.15
16:05
срез последних в рлс? у тебя супер сервер что ли?
8 Lama12
 
02.03.15
16:35
(7) Это не на проведение. Справочники изменение.