Имя: Пароль:
1C
1С v8
запрос к значениям доп. реквизитов в отчете
0 alexey980
 
13.06.17
15:00
К документу РеализацияТоваровУслуг в режиме Предприятия добавлены два доп. реквизита: "Вознаграждение 1" и "Вознаграждение 2".

Нужен внешний отчет, который в простейшем случае будет выводить таблицу с полями: Накладная, Сумма документа, Вознаграждение 1, Вознаграждение 1.

Поскольку доп. реквизиты хранятся вместе с документом в специальной табличной части, добраться к ним оказалось целой историей.

В настоящий момент пробую реализовать такой запрос:

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

Где подправить?
1 mehfk
 
13.06.17
15:01
2 dezss
 
13.06.17
15:45
(0) Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты
пихай во временную таблицу, а потом соединяй...
из-за условий в "Где" твое левое стало внутренним.
3 alexey980
 
13.06.17
15:48
вот так работает

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Накладная,
    ДопРеквизиты1.Значение КАК Рекв1,
    ДопРеквизиты2.Значение КАК Рекв2
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты1
        ПО РеализацияТоваровУслуг.Ссылка = ДопРеквизиты1.Ссылка
                И ДопРеквизиты1.Свойство.Наименование = "Рекв. 1"
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты2
        ПО РеализацияТоваровУслуг.Ссылка = ДопРеквизиты2.Ссылка
                И ДопРеквизиты2.Свойство.Наименование = "Рекв. 2"
ГДЕ
    РеализацияТоваровУслуг.Дата > &Дата
4 Timon1405
 
13.06.17
15:48
(0) Используйте СКД, там эти поля доступны в компоновке через точку
5 dezss
 
13.06.17
15:50
(3) работает, конечно...
но про индексы забудь...
6 alexey980
 
13.06.17
15:56
(2) а через временную таблицу запрос быстрее будет работать?
7 dezss
 
13.06.17
15:57
(6) при соединении будут использоваться индексы, так что да, быстрее...но лучше убедись на практике, так быстрее дойдет...
8 alexey980
 
13.06.17
16:43
(7) я правильно понял?

сначала выполняем запрос:

ВЫБРАТЬ * ПОМЕСТИТЬ ДопРеквизиты ИЗ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты ИНДЕКСИРОВАТЬ ПО Ссылка;

а потом уже выполняем запрос (3), только вместо Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты указываем временную таблицу ДопРеквизиты

если честно, не заметил разницы
(в выборке около 12 тыс. документов).
9 dezss
 
13.06.17
16:48
(8) где во временную запихни, а то смысла нет никакого!!!
10 dezss
 
13.06.17
16:48
(9) +
И ДопРеквизитыВознаграждение1.Свойство.Наименование = "Вознаграждение 1 (Реализации товаров и услуг)"
    И ДопРеквизитыВознаграждение2.Свойство.Наименование = "Вознаграждение 2 (Реализации товаров и услуг)"
11 dezss
 
13.06.17
16:49
(9) + а вот подобное из (3) убери
И ДопРеквизиты1.Свойство.Наименование = "Рекв. 1"
12 alexey980
 
13.06.17
17:15
не понял, две временные таблицы нужно делать? отдельно для Рекв. 1 и Рекв. 2?
13 СамыйУмный
 
13.06.17
17:21
ВЫБРАТЬ
    ВнутренниеДокументы.Ссылка КАК Ссылка,
    ВнутренниеДокументы.ПометкаУдаления,
    ВнутренниеДокументы.РегистрационныйНомер,
    ВнутренниеДокументы.ДатаРегистрации,
    ВнутренниеДокументы.ВидДокумента,
    ВнутренниеДокументы.Наименование,
    ВнутренниеДокументы.Папка,
    ВнутренниеДокументы.Подготовил,
    ВнутренниеДокументы.Подразделение,
    ВнутренниеДокументы.Утвердил,
    ВнутренниеДокументы.Дело,
    ВнутренниеДокументы.СрокИсполнения,
    ВнутренниеДокументы.Зарегистрировал,
    ВнутренниеДокументы.ЧисловойНомер,
    ВнутренниеДокументы.Заголовок,
    ВнутренниеДокументы.Код КАК ВнутреннийНомер,
    ВнутренниеДокументы.ДатаСоздания,
    ВнутренниеДокументы.Корреспондент,
    ВнутренниеДокументы.КонтактноеЛицо,
    ВнутренниеДокументы.Организация,
    ВнутренниеДокументы.Отменен,
    ВнутренниеДокументы.НоменклатураДел,
    СостоянияДокументовСрезПоследних.Состояние,
    ВЫБОР
        КОГДА ИСТИНА В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ИСТИНА
                ИЗ
                    Справочник.Файлы
                ГДЕ
                    Справочник.Файлы.ВладелецФайла = ВнутренниеДокументы.Ссылка)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Файлы,
    ВЫБОР
        КОГДА ИСТИНА В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ИСТИНА
                ИЗ
                    Задача.ЗадачаИсполнителя
                ГДЕ
                    Задача.ЗадачаИсполнителя.Предмет = ВнутренниеДокументы.Ссылка
                    И НЕ Задача.ЗадачаИсполнителя.Выполнена)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Задачи,
    ВнутренниеДокументы.Подписан,
    ДопР2.Значение КАК СвКонтрагент,
    ДопР3.Значение КАК СвСумма
ИЗ
    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументов.СрезПоследних КАК СостоянияДокументовСрезПоследних
        ПО ВнутренниеДокументы.Ссылка = СостоянияДокументовСрезПоследних.Документ
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК ДопР2
        ПО (ДопР2.Ссылка = ВнутренниеДокументы.Ссылка)
            И (ДопР2.Свойство.Наименование ПОДОБНО "Контрагент")
            И (ДопР2.Значение ССЫЛКА Справочник.Корреспонденты)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК ДопР3
        ПО (ДопР3.Ссылка = ВнутренниеДокументы.Ссылка)
            И (ДопР3.Свойство.Наименование ПОДОБНО "Сумма")
ГДЕ
    (ВнутренниеДокументы.Папка = &Группа
            ИЛИ НЕ &ИспользоватьИерархию)
14 dezss
 
13.06.17
17:26
(12) ВЫБРАТЬ
    ДопРеквизитыВознаграждение1.Ссылка,
    ДопРеквизитыВознаграждение1.Значение КАК Вознаграждение
ПОМЕСТИТЬ Врем
ИЗ
    Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизитыВознаграждение1
ГДЕ
    ДопРеквизитыВознаграждение1.Свойство.Наименование = "Вознаграждение 1 (Реализации товаров и услуг)"
    ИЛИ ДопРеквизитыВознаграждение1.Свойство.Наименование = "Вознаграждение 2 (Реализации товаров и услуг)"
    

;
//////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Накладная,
    РеализацияТоваровУслуг.СуммаДокумента,
    Врем1.Вознаграждение КАК Вознаграждение1,
    Врем2.Вознаграждение КАК Вознаграждение2
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Врем КАК Врем1
        ПО Врем1.Ссылка = РеализацияТоваровУслуг.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Врем КАК Врем2
        ПО Врем2.Ссылка = ДопРеквизитыВознаграждение2.Ссылка
ГДЕ
    РеализацияТоваровУслуг.Дата > &Дата
15 dezss
 
13.06.17
17:28
тьфу, второе левое:
ЛЕВОЕ СОЕДИНЕНИЕ Врем КАК Врем2
        ПО Врем2.Ссылка = РеализацияТоваровУслуг.Ссылка
16 СамыйУмный
 
13.06.17
17:29
(12) Нет конечно, посмотри в 13, я тебе пример скинул там как раз 2 реквизита, без всяких ВТ
17 Вафель
 
13.06.17
17:29
(14) Здесь конечно индексы в хвост и гриву. Ну-ну
18 1sanekmaloi1
 
13.06.17
17:31
(14) Задублит к ебеням все.
19 dezss
 
13.06.17
17:31
(17) ну неидеально, но все таки используются...
от ИЛИ лучше, опять таки, избавится....я на вскидку набросал...
20 alexey980
 
13.06.17
17:38
(14) я попробовал, конечно, ваш вариант, но разницы никакой
21 alexey980
 
13.06.17
17:40
(16) чем этот вариант отличается от (3)?
22 Вафель
 
13.06.17
17:41
(19) вариант из (3) гораздо лучше чем твой
23 СамыйУмный
 
13.06.17
17:46
(21) Я особо не вчитывался, прочитал сабж и кинул сюда запрос, а что именно не устраивает в варианте (3)?
24 Вафель
 
13.06.17
17:54
Якобы не используются индексы.
25 alexey980
 
13.06.17
17:55
(23) меня устраивает))
думаю, тема себя исчерпала