Имя: Пароль:
1C
1С v8
конструктор запросов модифицирует мой запрос
,
0 Адимр
 
06.02.14
21:50
Кто нибудь сталкивался?

Правое соединение перекидывает на левое а из двух правых вообще все ломает и делает одно левое.
1 Torquader
 
06.02.14
21:51
Покажи запрос.
2 Адимр
 
06.02.14
21:53
ВЫБРАТЬ
    Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка,
    Очередь.Файл КАК ФайлСсылка,
    Очередь.ХэшСертификата КАК Хэш
ИЗ
    Справочник.ОчередьФайловНаПодписание КАК Очередь
        ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеЗарегистрирован
        ПО (Очередь.Файл.ВладелецФайла = СостояниеЗарегистрирован.Документ)
            И (СостояниеЗарегистрирован.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован))
            И (ДОБАВИТЬКДАТЕ(СостояниеЗарегистрирован.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата)
        
        ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеУтвержден
        ПО (Очередь.Файл.ВладелецФайла = СостояниеУтвержден.Документ)
            И (СостояниеУтвержден.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден))
            И (ДОБАВИТЬКДАТЕ(СостояниеУтвержден.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата)
            
ГДЕ
    Очередь.ДатаВыгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    И НЕ Очередь.Файл.ПометкаУдаления
    И НЕ Очередь.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
    Очередь.ДатаСоздания
3 Адимр
 
06.02.14
21:55
и брюки превращаются в элегантные шорты (с)

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

УПОРЯДОЧИТЬ ПО
    Очередь.ДатаСоздания
4 Ярус
 
06.02.14
21:55
(2) а чем правое от левого отличается?
5 Ranger_83
 
06.02.14
21:59
(0)Если нет в разнице результата запроса,то в чем дело?
Коммерческий код пишешь-результат от кол-ва строк кода?
6 Адимр
 
06.02.14
22:01
разница есть
7 Ярус
 
06.02.14
22:01
ппц у тебя запрос в (2) , там надо заменить

И (СостояниеЗарегистрирован.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован))
на

И (СостояниеЗарегистрирован.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден))

ну и одно левое это будет правильно
8 Адимр
 
06.02.14
22:03
(7) Думаешь прокатит? Чо то я очкую Славик (с)
9 Ярус
 
06.02.14
22:04
ВЫБРАТЬ
    Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка,
    Очередь.Файл КАК ФайлСсылка,
    Очередь.ХэшСертификата КАК Хэш
ИЗ
    Справочник.ОчередьФайловНаПодписание КАК Очередь
        ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеЗарегистрирован
        ПО (Очередь.Файл.ВладелецФайла = СостояниеЗарегистрирован.Документ)
            И (СостояниеЗарегистрирован.Состояние  В (ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден))
И (ДОБАВИТЬКДАТЕ(СостояниеЗарегистрирован.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата)
вот так в примерно,правое на левое он тут сам заменит
10 Ярус
 
06.02.14
22:05
хотя я пьян и все накуй могу перепутать
11 Ярус
 
06.02.14
22:06
состояние вообще для наглядности бы вынес из соединения в
ГДЕ
12 Адимр
 
06.02.14
22:07
и в результате запрос возвращает лажу отличную от того что в (2)
13 Ярус
 
06.02.14
22:09
хотя с ГДЕ я погорячился
14 Ярус
 
06.02.14
22:10
у тебя клиент сервер? если да то глянь в скуле во что он твой запрос из (2)  в итоге превращает
15 Адимр
 
06.02.14
22:12
объясню суть
Есть элемент справочника
Есть регистр состояний

у элемента например могут быть два состояния это две записи в регистре (записей может и не быть)

Нужно отобрать такие элементы справочника у которых в регистре есть 2 определенных состояний и установлены они были некотрое время назад.

Запрос в (2) делает то что нужно, но почему конструктор курочит запрос не пойму.

Это бага или фича? ))
16 GROOVY
 
06.02.14
22:12
Запросы надо нормально писать.
17 Адимр
 
06.02.14
22:14
(14) возвращает две записи

     34    Наимен1 000
     35    наимен2 001
18 jsmith82
 
06.02.14
22:16
ВЫБРАТЬ
        ТекущиеСостоянияДокументов.Документ
ПОМЕСТИТЬ ТекущиеСостоянияДокументов
ИЗ
    РегистрСведений.ТекущиеСостоянияДокументов КАК ТекущиеСостоянияДокументов
ГДЕ
    ТекущиеСостоянияДокументов.Состояние В ((ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден))
    И (ДОБАВИТЬКДАТЕ(ТекущиеСостоянияДокументов.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата);
///////////////////////////////////////
ВЫБРАТЬ
        Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка,
        Очередь.Файл КАК ФайлСсылка,
       Очередь.ХэшСертификата КАК Хэш
ИЗ
    ТекущиеСостоянияДокументов
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОчередьФайловНаПодписание КАК Очередь
ПО Очередь.Файл.ВладелецФайла = ТекущиеСостоянияДокументов.Документ
19 Адимр
 
06.02.14
22:17
(16) То есть ты считаешь если я написал запрос а конструктор его переколбасил так что получившийся после него запрос возвращает совсем другие данные  - это нормально? Типа оптимизировал?
20 jsmith82
 
06.02.14
22:19
(19) конструктор всегда правое на левое кидает
21 jsmith82
 
06.02.14
22:19
и, может быть, он просто офигел от твоего запроса
22 Torquader
 
06.02.14
22:21
А ПРАВОЕ Б = Б ЛЕВОЕ А.
Просто, Очередь.Файл.ВладелецФайла=СостояниеЗарегистрирован.Документ это соединение через получение дочернего объекта, Файл-то у тебя справочник. Так что неявно используется ещё одна таблица.
23 Torquader
 
06.02.14
22:22
И потом, зачем два соединения, когда они по сути тоже самое.
24 Адимр
 
06.02.14
22:25
(22) Ты прав насчет владельца, учту.
25 GROOVY
 
06.02.14
22:25
(19) Без обид, просто мои запросы конструктор никогда не превращает в неожиданный вариант.
26 User_Agronom
 
06.02.14
22:26
Это всегда так было. Ничего удивительного.
27 jsmith82
 
06.02.14
22:27
(25) +1
первый раз слышу, что КЗ модифицирует текст запроса
судя по запросу, не удивительно
28 jsmith82
 
06.02.14
22:29
простые правила
1. никогда не использовать правое соединение
2. никогда не использовать несколько соединений, если есть а)возможность объединения через условие
б)использование группового условия
3. стараться не использовать точку
профит
29 jsmith82
 
06.02.14
22:30
пиши запрос так, будто пишешь его для профайлера
один фиг ему потом чёрную работу делать
30 Ярус
 
06.02.14
22:30
(29) вот теперь будешь объяснять человеку что такое профайлер
31 GROOVY
 
06.02.14
22:40
(30) Отличная штука,чтобы думать при написании запросов :)
32 Адимр
 
06.02.14
22:41
Никто мастер класс не покажет, как должен выглядеть расово правильный запрос, что бы не медленнее чем запрос в (2) и конструктор что бы не глючил?
33 jsmith82
 
06.02.14
22:41
(32) все вопросы к GROOVY
34 jsmith82
 
06.02.14
22:42
или просто прочитать книгу по T-SQL
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший