Имя: Пароль:
1C
1С v8
256 таблиц, 2 примера с "выразить", какой правильнее?
0 Ns33
 
10.12.14
18:17
Набросал 2 примера использования ВЫРАЗИТЬ (по итогам поиска по форуму с проблемой 256 таблиц). Какой правильнее?
1)
ВЫБРАТЬ
    ПартииТоваровНаСкладахОбороты.Регистратор,
    ВЫБОР
        КОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг
            ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Контрагент
        КОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг
            ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент
        ИНАЧЕ НЕОПРЕДЕЛЕНО
    КОНЕЦ КАК Поле1,
    ПартииТоваровНаСкладахОбороты.КоличествоОборот
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, ) КАК ПартииТоваровНаСкладахОбороты

2)
ВЫБРАТЬ
    ПартииТоваровНаСкладахОбороты.Регистратор,
    ВЫБОР
        КОГДА ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
            ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Контрагент
        КОГДА ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
            ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент
        ИНАЧЕ НЕОПРЕДЕЛЕНО
    КОНЕЦ КАК Поле1,
    ПартииТоваровНаСкладахОбороты.КоличествоОборот
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, ) КАК ПартииТоваровНаСкладахОбороты
1 Господин ПЖ
 
10.12.14
18:19
эм... а скуль обновить - никак?
2 Господин ПЖ
 
10.12.14
18:20
зы в регистраторах ПартииТоваровНаСкладах 256 таблиц разве наберется?
3 DirecTwiX
 
10.12.14
18:20
Первый упадёт, второй взлетит
4 vicof
 
10.12.14
18:23
(0) И шо таки значит пгавильнее?
5 Ns33
 
10.12.14
18:25
(2) Это просто для примера, реальный запрос другой. В реальном запросе много мест, где надо оптимизировать, поэтому мне желательно знать какой вариант, чтобы не переделывать.
(3) Оба вышеуказанных запроса работают.
6 Господин ПЖ
 
10.12.14
18:28
(5) тут только вскрытие покажет - смотреть что на скуль приходит
7 Fragster
 
гуру
10.12.14
18:28
если они отличаются только Выразить в куске "когда" то вариант 2 правильнее. первый вариант возвращает лажу
8 DirecTwiX
 
10.12.14
18:32
(5) Уверен?
У меня на подобном запросе вылезает несоответствие типов

ВЫБРАТЬ ПЕРВЫЕ 1
    ВЫБОР КОГДА ВЫРАЗИТЬ (ОтпускаОрганизаций.Ссылка  КАК Документ.Встречи) ССЫЛКА Документ.Встречи ТОГДА 1
    ИНАЧЕ 2 КОНЕЦ КАК А
ИЗ
    Документ.ОтпускаОрганизаций  КАК ОтпускаОрганизаций
9 DirecTwiX
 
10.12.14
18:33
Точнее, "Несовместимые типы ВЫРАЗИТЬ ..."
А такой работает

ВЫБРАТЬ ПЕРВЫЕ 1
    ВЫБОР КОГДА ВЫРАЗИТЬ (Встречи.Ссылка  КАК Документ.Встречи) ССЫЛКА Документ.Встречи ТОГДА 1
    ИНАЧЕ 2 КОНЕЦ КАК А
ИЗ
    Документ.Встречи  КАК Встречи
10 Господин ПЖ
 
10.12.14
18:34
(8) работать не будет - это и так понятно
11 DirecTwiX
 
10.12.14
18:39
Вот ещё:

http://zapros-1c-8.ru/interest/11-express

>Регистратор у регистров часто имеет составной тип, чтобы преобразовать его к одиночному типу используйте конструкцию ВЫРАЗИТЬ правда если на этапе выборки вы попытаетесь преобразовать документ реализацию в документ поступление, то запрос обязательно вылетит с ошибкой, поэтому перед преобразованием следует проверить тип ссылки.
12 DirecTwiX
 
10.12.14
18:41
Да и выражать одно поле по несколько раз не очень оптимально.
13 Ns33
 
10.12.14
18:52
Поставил себе SQL EXPRESS, сделал в тестовой базе 300 видов документов, у одного вида реквизит контрагент. Сделал регистр сведений с измерением типа документ.ссылка. И запрос к этому измерению вида РегистрСведений.Документ.Контрагент нормально отрабатывает, вот печаль.
14 Йохохо
 
10.12.14
19:32
(13) здиш
15 vvp91
 
10.12.14
23:09
> (0) Какой правильнее?
Правильнее так:

ВЫБРАТЬ
    Партии.Регистратор,
    ЕСТЬNULL(Поступления.Контрагент, ЕСТЬNULL(Реализации.Контрагент, НЕОПРЕДЕЛЕНО)) КАК Контрагент,
    Партии.КоличествоОборот
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, ) КАК Партии
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК Поступления
        ПО Поступления.Ссылка = Партии.Регистратор
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализации
        ПО Реализации.Ссылка = Партии.Регистратор