Вопрос по оптимизации запроса

1. kar911 03.01.18 14:53 Сейчас в теме
Подскажите в запросе не желательно вообще обращаться через две точки, а то в примерах по оптимизации везде обращение идёт через две точки только в составных типах. А у меня выходит что я хочу сделать например так
Выбрать 
Документ.Контрагент.ИНН
из Документы.Документ как Документ
можно ли так делать или нужно как то по другому?
+
По теме из базы знаний
Найденные решения
4. spacecraft 03.01.18 15:47 Сейчас в теме
(1) обращение через 2 точки и более нежелательно в объектной модели. Там будут полностью считываться все поля объекта.
Как уже выше было сказано, в запросе важно только обращение к составному типу.
В данном случае план выполнения запроса будет составлен с левым соединением таблицы справочника. В принципе то же самое, что и если делать самому.
Другое дело, если это будет сложный запрос со вложенными подзапросами. Есть шанс, что план выполнения запроса будет составлен не оптимально. Разбираться стоит только если выполнение запроса будет довольно долгим.
Idris1204; buganov; sommid; +3
16. herfis 498 04.01.18 16:03 Сейчас в теме
(1) Можно. Будет просто неявное левое соединение с таблицей контрагентов.
А вот если обращаться к составному типу через точку без явного приведения типа, то будет неявное соединение со всеми возможными таблицами составного типа, что как раз неоптимально. Что-то запутался ты в оптимизациях :)
Idris1204; buganov; kar911; +3
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Armando 1399 03.01.18 15:20 Сейчас в теме
(1)
в примерах по оптимизации везде обращение идёт через две точки только в составных типах

Странные примеры по оптимизации

Обращаться можно хоть через 5 точек, если это не поля составного типа.
Можно и вручную наколбасить соединений. На СУБД запросы одинаковые будут.
Для полей составного типа надо использовать Выразить.
+
3. Xershi 1484 03.01.18 15:20 Сейчас в теме
(1) если очень хочется, то можно! Когда запрос начнет слишком долго работать, тогда и будете думать над оптимизацией. Когда нет составного типа, то большой беды тут нету!
nvv1970; +1
4. spacecraft 03.01.18 15:47 Сейчас в теме
(1) обращение через 2 точки и более нежелательно в объектной модели. Там будут полностью считываться все поля объекта.
Как уже выше было сказано, в запросе важно только обращение к составному типу.
В данном случае план выполнения запроса будет составлен с левым соединением таблицы справочника. В принципе то же самое, что и если делать самому.
Другое дело, если это будет сложный запрос со вложенными подзапросами. Есть шанс, что план выполнения запроса будет составлен не оптимально. Разбираться стоит только если выполнение запроса будет довольно долгим.
Idris1204; buganov; sommid; +3
6. jan-pechka 408 03.01.18 16:04 Сейчас в теме
(4)
В данном случае план выполнения запроса будет составлен с левым соединением таблицы справочника.


зачем так усложнять? Вот что даст левое соединение со справочником:

ВЫБРАТЬ
	МоиКлиенты.ИНН,
	МойЗаказКлиентаСостав.Товар.Родитель,
	МойЗаказКлиентаСостав.Товар,
	МойЗаказКлиентаСостав.Сумма
ИЗ
	Справочник.МоиКлиенты КАК МоиКлиенты
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.МойЗаказКлиента.Состав КАК МойЗаказКлиентаСостав
		ПО МоиКлиенты.Ссылка = МойЗаказКлиентаСостав.Ссылка.Клиент.Ссылка
Показать


Здесь визуально видно,что проще всего прямо по ссылке из документа вытянуть все что нужно:

ВЫБРАТЬ
	МойЗаказКлиентаСостав.Ссылка.Клиент.ИНН,
	МойЗаказКлиентаСостав.Товар.Родитель,
	МойЗаказКлиентаСостав.Товар,
	МойЗаказКлиентаСостав.Сумма
ИЗ
	Документ.МойЗаказКлиента.Состав КАК МойЗаказКлиентаСостав
ger_kar; kar911; +2
7. spacecraft 03.01.18 16:41 Сейчас в теме
(6) Не то левое соединение.
Возьмем модифицированный пример из (1):
ВЫБРАТЬ
	РеализацияТоваровУслуг.Контрагент.ИНН КАК КонтрагентИНН
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.Ссылка = &Ссылка

Вот что получится на уровне sql:
SEL ECT
T2.ИНН
FR OM Документ.РеализацияТоваровУслуг T1
LEFT OUTER JOIN Справочник.Контрагенты T2
ON T1.Контрагент = T2.Ссылка
WHERE (T1.Ссылка = 0xBFBECFADC0E8B42A11E4F2F476A97D5D

А вот план выполнения запроса:
Fields:(
    T2.ИНН
)
Документ.РеализацияТоваровУслуг (T1) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)

NESTED OUTER LOOP
Справочник.Контрагенты (T2) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T1.Контрагент = T2.Ссылка)
Показать

Надеюсь понятно?
ger_kar; +1
8. spacecraft 03.01.18 16:54 Сейчас в теме
(6) а теперь посмотрим составной тип, который скорее всего применен в (6).
Вот пример:
ВЫБРАТЬ
	ТоварыНаСкладахОбороты.Регистратор.Контрагент.ИНН
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(&НачДата, &КонДата, Регистратор, ) КАК ТоварыНаСкладахОбороты

Вот запрос на уровне sql:
SEL ECT
T1.Период,
T1._UseTotals,
T1._ActualPeriod,
T1._UseSplitter,
T1._MinPeriod,
T1._MinCalculatedPeriod
FR OM  T1
WHERE T1._RegID = 0x46F28B3B10DECA44AF459308A7457E7

SEL ECT
CASE WHEN T1.RecorderTRef = 0x0000009D THEN T4.ИНН WHEN T1.RecorderTRef = 0x0000002D THEN T6.ИНН WHEN T1.RecorderTRef = 0x00000057 THEN T8.ИНН ELSE CAST(NULL AS NVARCHAR(12)) END
FR OM (SELECT
T2.Период AS Period_,
T2.Регистратор AS RecorderTRef,
T2.Регистратор AS RecorderRRef,
ISNULL(CAST(SUM(CASE WHEN T2.ВидДвижения = 0 THEN T2.Количество ELSE 0 END) AS NUMERIC(21, 2)),0) AS Fld141Receipt_,
ISNULL(CAST(SUM(CASE WHEN T2.ВидДвижения = 0 THEN 0 ELSE T2.Количество END) AS NUMERIC(21, 2)),0) AS Fld141Expense_
FR OM РегистрНакопления.ТоварыНаСкладах T2
WHERE T2.Активность = TRUE
GROUP BY T2.Период,
T2.Регистратор,
T2.Регистратор
HAVING (ISNULL(CAST(SUM(CASE WHEN T2.ВидДвижения = 0 THEN T2.Количество ELSE 0 END) AS NUMERIC(21, 2)),0)) <> 0 OR (ISNULL(CAST(SUM(CASE WHEN T2.ВидДвижения = 0 THEN 0 ELSE T2.Количество END) AS NUMERIC(21, 2)),0)) <> 0) T1
LEFT OUTER JOIN Документ.СчетНаОплатуПокупателю T3
ON T1.RecorderTRef = 0x0000009D AND T1.RecorderRRef = T3.Ссылка
LEFT OUTER JOIN Справочник.Контрагенты T4
ON T3.Контрагент = T4.Ссылка
LEFT OUTER JOIN Документ.ПоступлениеТоваровУслуг T5
ON T1.RecorderTRef = 0x0000002D AND T1.RecorderRRef = T5.Ссылка
LEFT OUTER JOIN Справочник.Контрагенты T6
ON T5.Контрагент = T6.Ссылка
LEFT OUTER JOIN Документ.РеализацияТоваровУслуг T7
ON T1.RecorderTRef = 0x00000057 AND T1.RecorderRRef = T7.Ссылка
LEFT OUTER JOIN Справочник.Контрагенты T8
ON T7.Контрагент = T8._IDRRe
Показать

А это план выполнения запроса:
Fields:(
    T1.Период,
    T1._UseTotals,
    T1._ActualPeriod,
    T1._UseSplitter,
    T1._MinPeriod,
    T1._MinCalculatedPeriod
)
 (T1) RANGE SCAN USING INDEX (_ACCUMRG143_BYREGID_B) (1 fields)


Statistics: RecordsScanned = 1, ParseTime = 1, ExecuteTime = 0, BuffersMemory = 25847, ResultRecords = 1, RecordSize = 51

Fields:(
    CASE  WHEN (T1.RecorderTRef = 0000009D) THEN T4.ИНН WHEN (T1.RecorderTRef = 0000002D) THEN T6.ИНН WHEN (T1.RecorderTRef = 00000057) THEN T8.ИНН ELSE NULLEND
)
NESTED SELECT FULL SCAN
(
    Fields:(
        T2.Период,
        T2.Регистратор,
        T2.Регистратор,
        ISNULL(cast(SUM(CASE  WHEN (T2.ВидДвижения = 0) THEN T2.Количество ELSE 0END) as NUMERIC(21, 2)),0),
        ISNULL(cast(SUM(CASE  WHEN (T2.ВидДвижения = 0) THEN 0 ELSE T2.КоличествоEND) as NUMERIC(21, 2)),0)
    )
    РегистрНакопления.ТоварыНаСкладах (T2) FULL SCAN
    WHERE
            (T2.Активность = TRUE)

    GROUPING
)

NESTED OUTER LOOP
Документ.СчетНаОплатуПокупателю (T3) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T1.RecorderTRef = 0000009D)
        AND
        (T1.RecorderRRef = T3.Ссылка)
NESTED OUTER LOOP
Справочник.Контрагенты (T4)(TWICE) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T3.Контрагент = T4.Ссылка)
NESTED OUTER LOOP
Документ.ПоступлениеТоваровУслуг (T5) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T1.RecorderTRef = 0000002D)
        AND
        (T1.RecorderRRef = T5.Ссылка)
NESTED OUTER LOOP
Справочник.Контрагенты (T6)(TWICE) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T5.Контрагент = T6.Ссылка)
NESTED OUTER LOOP
Документ.РеализацияТоваровУслуг (T7) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
        (T1.RecorderTRef = 00000057)
        AND
        (T1.RecorderRRef = T7.Ссылка)
NESTED OUTER LOOP
Справочник.Контрагенты (T8)(TWICE) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WH ERE
        (T7.Контрагент = T8.Ссылка)

Statistics: RecordsScanned = 44, ParseTime = 1, ExecuteTime = 0, BuffersMemory = 27092, ResultRecords = 9, RecordSize = 26
Показать

Тихий ужас короче. А в 1С такой простой кажется.
ger_kar; +1
5. jan-pechka 408 03.01.18 15:57 Сейчас в теме
(1)
А у меня выходит что я хочу сделать например так


ВЫБРАТЬ
	МойЗаказКлиентаСостав.Ссылка.Клиент.ИНН,
	МойЗаказКлиентаСостав.Товар.Родитель,
	МойЗаказКлиентаСостав.Товар,
	МойЗаказКлиентаСостав.Сумма
ИЗ
	Документ.МойЗаказКлиента.Состав КАК МойЗаказКлиентаСостав


Если Вы выбираете данные по контрагенту из документа, то значит Вам нужны какие-то значения самого документа (из его табличной части), для этого проще всего в запрос вставлять не весь документ, а только его табличную часть. А все что нужно взять из шапки документа (клиента или др.данные) - так в таб.части есть ссылка,вот из нее можно подтянуть все что угодно.см.рис.
п.с.таким же образом из ссылки (только внутри таб.части),н-р,поТоварам можно вытянуть группу товаров.
Прикрепленные файлы:
+
16. herfis 498 04.01.18 16:03 Сейчас в теме
(1) Можно. Будет просто неявное левое соединение с таблицей контрагентов.
А вот если обращаться к составному типу через точку без явного приведения типа, то будет неявное соединение со всеми возможными таблицами составного типа, что как раз неоптимально. Что-то запутался ты в оптимизациях :)
Idris1204; buganov; kar911; +3
9. kar911 04.01.18 10:09 Сейчас в теме
вот мой запрос но тут выходит очень много точек
ВЫБРАТЬ
	Договор.Номер,
	Договор.Дата,
	Договор.МестоСоставления,
	Договор.Организация.НаименованиеПолное,
	Договор.ФизЛицо.Должность,
	Договор.ФизЛицо.ФизическоеЛицо.Наименование,
	Договор.ФизЛицо.ОснованиеПраваПодписи,
	Договор.Контрагент.НаименованиеПолное,
	Договор.ФизЛицоКонтрагента.Наименование,
	Договор.ФизЛицоКонтрагента.Пол,
	Договор.ФизЛицоКонтрагента.ДолжностьПоВизитке,
	Договор.ФизЛицоКонтрагента.ДействуетНаОсновании,
	Договор.Организация.ИНН,
	БанковскиеСчетаКонтрагентов.НомерСчета + " в " + БанковскиеСчетаКонтрагентов.Банк.Наименование КАК РасчетныйСчетКонтрагента,
	БанковскиеСчетаКонтрагентов.Банк.Адрес КАК АдресБанкаКонтрагента,
	БанковскиеСчетаОрганизаций.НомерСчета + " в " + БанковскиеСчетаОрганизаций.Банк.Наименование КАК РасчетныйСчет,
	БанковскиеСчетаОрганизаций.Банк.Адрес КАК АдресБанка
ИЗ
	Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
		ПО Договор.РасчетныйСчетКонтрагента = БанковскиеСчетаКонтрагентов.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчетаОрганизаций
		ПО Договор.РасчетныйСчет = БанковскиеСчетаОрганизаций.Ссылка
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПартнерыКонтактнаяИнформация.Представление,
	ПартнерыКонтактнаяИнформация.Вид.Наименование
ПОМЕСТИТЬ КонтактыКнтрагента
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО ПартнерыКонтактнаяИнформация.Ссылка = Договор.Партнер
ГДЕ
	Договор.Ссылка = &Ссылка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Представление,
	КонтрагентыКонтактнаяИнформация.Вид.Наименование
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО КонтрагентыКонтактнаяИнформация.Ссылка = Договор.Контрагент
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ОрганизацииКонтактнаяИнформация.Вид,
	ОрганизацииКонтактнаяИнформация.Представление
ИЗ
	Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО ОрганизацииКонтактнаяИнформация.Ссылка = Договор.Организация
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	КонтактыКнтрагента.Представление,
	КонтактыКнтрагента.ВидНаименование
ИЗ
	КонтактыКнтрагента КАК КонтактыКнтрагента
Показать
+
10. jan-pechka 408 04.01.18 13:51 Сейчас в теме
(9)
вот мой запрос


Вы могли бы подробно объяснить из чего (какие типы) состоит табличная часть справочника,н-р,контрагенты???...не могу разобраться см.рис.
Прикрепленные файлы:
+
11. kar911 04.01.18 14:18 Сейчас в теме
(10) вид это справочник виды контактной информации
jan-pechka; +1
12. jan-pechka 408 04.01.18 14:20 Сейчас в теме
(11)сейчас дорисую...

п.с.2 А "Представление" - это поле таб.части справочника с типом строка, или это само по себе представление таб.части спр?
kar911; +1
13. kar911 04.01.18 15:11 Сейчас в теме
15. jan-pechka 408 04.01.18 15:39 Сейчас в теме
(13)уже перерисовала с Вашего запроса частичную конфу))...очень хотелось увидить для чего было написано столько кода...Результат на рис.

Для начала подправила небольшие синтакс/орфограф ошибки в вашем запросе:

ВЫБРАТЬ
	Договор.Номер,
	Договор.Дата,
	Договор.МестоСоставления,
	Договор.Организация.НаименованиеПолное,
	Договор.ФизЛицо.Должность,
	Договор.ФизЛицо.ФизическоеЛицо.Наименование,
	Договор.ФизЛицо.ОснованиеПраваПодписи,
	Договор.Контрагент.НаименованиеПолное,
	Договор.ФизЛицоКонтрагента.Наименование,
	Договор.ФизЛицоКонтрагента.Пол,
	Договор.ФизЛицоКонтрагента.ДолжностьПоВизитке,
	Договор.ФизЛицоКонтрагента.ДействуетНаОсновании,
	Договор.Организация.ИНН,
	БанковскиеСчетаКонтрагентов.НомерСчета + " в " + 

БанковскиеСчетаКонтрагентов.Банк.Наименование КАК 

РасчетныйСчетКонтрагента,
	БанковскиеСчетаКонтрагентов.Банк.Адрес КАК 

АдресБанкаКонтрагента,
	БанковскиеСчетаОрганизаций.НомерСчета + " в " + 

БанковскиеСчетаОрганизаций.Банк.Наименование КАК РасчетныйСчет,
	БанковскиеСчетаОрганизаций.Банк.Адрес КАК АдресБанка
ИЗ
	Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ЛЕВОЕ СОЕДИНЕНИЕ 

Справочник.БанковскиеСчетаКонтрагентов КАК 

БанковскиеСчетаКонтрагентов
		ПО Договор.РасчетныйСчетКонтрагента = 

БанковскиеСчетаКонтрагентов.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ 

Справочник.БанковскиеСчетаОрганизаций КАК 

БанковскиеСчетаОрганизаций
		ПО Договор.РасчетныйСчет = 

БанковскиеСчетаОрганизаций.Ссылка
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­//////

//////////////
ВЫБРАТЬ
	ПартнерыКонтактнаяИнформация.Представление КАК 

Представление,
	ПартнерыКонтактнаяИнформация.Вид.Наименование КАК Вид
ПОМЕСТИТЬ КонтактыКонтрагента
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК 

ПартнерыКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ 

Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО ПартнерыКонтактнаяИнформация.Ссылка.Ссылка = 

Договор.Партнер.Ссылка
ГДЕ
	Договор.Ссылка = &Ссылка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	КонтрагентКонтактнаяИнформация.Представление,
	КонтрагентКонтактнаяИнформация.Вид.Наименование
ИЗ
	Справочник.Контрагент.КонтактнаяИнформация КАК 

КонтрагентКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ 

Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО (Договор.Контрагент.Ссылка = 

КонтрагентКонтактнаяИнформация.Ссылка.Ссылка)
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­//////

//////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ОрганизацииКонтактнаяИнформация.Представление,
	ОрганизацииКонтактнаяИнформация.Вид.Наименование
ИЗ
	Справочник.Организации.КонтактнаяИнформация КАК 

ОрганизацииКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ 

Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ПО ОрганизацииКонтактнаяИнформация.Ссылка = 

Договор.Организация
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­//////

//////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	КонтактыКонтрагента.Представление,
	КонтактыКонтрагента.Вид
ИЗ
	КонтактыКонтрагента КАК КонтактыКонтрагента
Показать


п.с.сейчас догрузится Ваша исходная конфа и сделаю уже скрин Вашего запроса с нее....но вопросы будут
Прикрепленные файлы:
+
14. kar911 04.01.18 15:13 Сейчас в теме
(12) Представление это строка там пишется сам номер телефона или адрес
+
17. jan-pechka 408 04.01.18 17:35 Сейчас в теме
Конфа запустилась, нужно пробные данные забить - это я уже чуть попозже сделаю, главное что конструктор запросов подхватил мой/ваш подредактированный запрос, там только чуть наименование в запросе еще спр.Контрагенты подправила.

ВЫБРАТЬ
	Договор.Номер,
	Договор.Дата,
	Договор.МестоСоставления,
	Договор.Организация.НаименованиеПолное,
	Договор.ФизЛицо.Должность,
	Договор.ФизЛицо.ФизическоеЛицо.Наименование,
	Договор.ФизЛицо.ОснованиеПраваПодписи,
	Договор.Контрагент.НаименованиеПолное,
	Договор.ФизЛицоКонтрагента.Наименование,
	Договор.ФизЛицоКонтрагента.Пол,
	Договор.ФизЛицоКонтрагента.ДолжностьПоВизитке,
	Договор.ФизЛицоКонтрагента.ДействуетНаОсновании,
	Договор.Организация.ИНН,
	БанковскиеСчетаКонтрагентов.НомерСчета + " в " + 

БанковскиеСчетаКонтрагентов.Банк.Наименование КАК РасчетныйСчетКонтрагента,
	БанковскиеСчетаКонтрагентов.Банк.Адрес КАК АдресБанкаКонтрагента,
	БанковскиеСчетаОрганизаций.НомерСчета + " в " + 

БанковскиеСчетаОрганизаций.Банк.Наименование КАК РасчетныйСчет,
	БанковскиеСчетаОрганизаций.Банк.Адрес КАК АдресБанка
ИЗ
	Документ.ДоговорСтроительноМонтажныхРабот КАК Договор
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК 

БанковскиеСчетаКонтрагентов
		ПО Договор.РасчетныйСчетКонтрагента = БанковскиеСчетаКонтрагентов.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаОрганизаций КАК 

БанковскиеСчетаОрганизаций
		ПО Договор.РасчетныйСчет = БанковскиеСчетаОрганизаций.Ссылка
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПартнерыКонтактнаяИнформация.Представление КАК Представление,
	ПартнерыКонтактнаяИнформация.Вид.Наименование КАК Вид
ПОМЕСТИТЬ КонтактыКонтрагента
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорСтроительноМонтажныхРабот КАК 

Договор
		ПО ПартнерыКонтактнаяИнформация.Ссылка.Ссылка = Договор.Партнер.Ссылка
ГДЕ
	Договор.Ссылка = &Ссылка

ОБЪЕДИНИТЬ ВСЕ


ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Представление,
	КонтрагентыКонтактнаяИнформация.Вид.Наименование
ИЗ
	Документ.ДоговорСтроительноМонтажныхРабот КАК ДоговорСтроительноМонтажныхРабот
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК 

КонтрагентыКонтактнаяИнформация
		ПО ДоговорСтроительноМонтажныхРабот.Контрагент.Ссылка = 

КонтрагентыКонтактнаяИнформация.Ссылка.Ссылка
ГДЕ
	ДоговорСтроительноМонтажныхРабот.Ссылка = &Ссылка


;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ОрганизацииКонтактнаяИнформация.Представление,
	ОрганизацииКонтактнаяИнформация.Вид.Наименование
ИЗ
	Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорСтроительноМонтажныхРабот КАК 

Договор
		ПО ОрганизацииКонтактнаяИнформация.Ссылка = Договор.Организация
ГДЕ
	Договор.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	КонтактыКонтрагента.Представление,
	КонтактыКонтрагента.Вид
ИЗ
	КонтактыКонтрагента КАК КонтактыКонтрагента
Показать


п.с. сам смысл идеи мне понятен,как особожусь - наберу свои варианты в Вашей конфе запросов, чтобы выдавались контакт.данные по клиентам и партнерам в одной табличке. Вы пока подумайте, может более еще конкретно озвучите тех.задание. А я уже только завтра дам свои варианты - спешу,извините.
Прикрепленные файлы:
+
18. jan-pechka 408 04.01.18 20:51 Сейчас в теме
Пока на своей конфе(она быстрей работает))) нарисовала свой вариант запроса как я его вижу,все получилось очень скромненько,практически весь код запроса умещается на маленьком экранчике(см.скрин),работает шустро:

ВЫБРАТЬ
	ВнешниеДанные.Контрагенты,
	ВнешниеДанные.Партнеры
ПОМЕСТИТЬ ВнешниеДанные
ИЗ
	&ВнешниеДанные КАК ВнешниеДанные
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Представление,
	КонтрагентыКонтактнаяИнформация.Вид.Наименование
ИЗ
	ВнешниеДанные КАК ВнешниеДанные
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК 

КонтрагентыКонтактнаяИнформация
		ПО ВнешниеДанные.Контрагенты = КонтрагентыКонтактнаяИнформация.Ссылка

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	ПартнерыКонтактнаяИнформация.Представление,
	ПартнерыКонтактнаяИнформация.Вид.Наименование
ИЗ
	ВнешниеДанные КАК ВнешниеДанные
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК 

ПартнерыКонтактнаяИнформация
		ПО ВнешниеДанные.Партнеры = ПартнерыКонтактнаяИнформация.Ссылка
Показать


п.с.В Вашей конфе еще пробные данные не вводила, но так как со всеми справочниками согласованно из Вашей конфы,то проблем никаких не будет. Завтра уже загоню пробные данные в Вашу конфу и с нее сделаю скрин.
п.с.2.Вы же в док будете вставлять этот запрос? Разберетесь сами как из дока вгрузить данные во временную внешнюю таблицу "ВнешниеДанные"? Если что,то полную обработку,которую можно вставить в док тоже завтра сварганю,переживаю вот только - Вам ее можно потом в доке эксплуатировать или придется что-то придумывать с внешними обработками из-за поддержкиКонфы?(или всеок?)

п.с.3 Запрос получился очень маленьким по коду,работает быстро,результат тот же самый,к-й получился в Вашем запросе,что я редактировала(см.предыдущие посты со скринами)
Прикрепленные файлы:
+
19. kar911 04.01.18 21:42 Сейчас в теме
(18)спасибо, в док засуну этот запрос, тоже завтра попробую с вашим вариантом разбирусь что не так делал
jan-pechka; +1
20. jan-pechka 408 04.01.18 21:46 Сейчас в теме
(19)перед тем как его в док запихивать,нужно программно с дока в таблицу ВнешниеДанные выгрузить инфу с этого дока по Клиентам и Партнерам(дальше можно увеличивать эти параметры,на скорость они не повлияют). Потом добавлю этот код загрузки,там все просто.Спасибо Вам за хороший экспирентс запросов - пока вертела ваш непростой запрос на своем конструкторе запросов - пришлось еще усовершенствовать свою консоль-конструктор запросов.
+
21. jan-pechka 408 05.01.18 17:57 Сейчас в теме
Доброго вечера. В Вашу конфу не стала ни виртуал.данные заполнять, ни внедрять в нее доработки - вчера на ней завелся запрос, параметры по справочникам пробежала,проверила -все вроде бы соответствует. Поэтому на своей пробной базе быстренько создала все необходимое, просто перенесите это все в свою рабочую конфу с данными (сохраните только перед обновлениями свою раб.версию) и все должно заработать.

Итак,
1.В документе "ДоговорСтроительноМонтажныхРабот" добавте кнопочку на форму "КонтактыКлиента" (см.рис1), под ней перепишите отсюда маленький код:

&НаКлиенте
Процедура КонтактыКлиента(Команда)
	 УсловияОтбора=Новый Структура("Партнеры,Контрагенты,Договор,ДатаДоговора,СсылкаДоговора",	 								Объект.Партнер,Объект.Контрагент,Объект.Номер,Объект.Дата,Объект.Ссылка);	 
	 ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);	 
	 ОткрытьФорму("Отчет.КонтактыКлиентов.ФормаОбъекта", ПараметрыФормы); 	 
 КонецПроцедуры


Здесь внимание - открытие формы Отчета этим кодом будет только если используется модальный режим(см.рис2).Если Вы используете без модальных окон конфу,то там функция "ОткрытьФорму" немного по другому задается, если что пишите - набросаю вариант безмодальности.

2.Возьмите прикрепленный здесь мой Отчет,вставьте его в свою конфу. В модуле отчета как раз и есть тот запрос,который я вчера набросала, но там сразу уже есть механизм заполнения временной таблицы данными.

3.Все,переходите в пользовательский режим,открывайте документ "ДоговорСтроительноМонтажныхРабот",жмите на кнопочку "КонтактыКлиента" и у Вас получится вот такой симпатичный отчет (рис.3)

п.с. Конфа у Вас действительно очень тяжелая - это правда, поэтому очень важно, когда любой запрос к данным будет маленьким и быстрым.С ув.
Прикрепленные файлы:
КонтактыКлиентов.erf
+
22. kar911 09.01.18 14:51 Сейчас в теме
(21)Спасибо ещё раз с вашим принципом чуть быстрее работает
Idris1204; jan-pechka; +2
23. jan-pechka 408 09.01.18 20:24 Сейчас в теме
(22)
с вашим принципом


присоединяйтесь к теме https://forum.infostart.ru/forum9/topic184320/

...я тоже учусь...благодаря Вашей задачке выплыло несколько интересных вопросов: и по директориям и по таблица запроса, но самая актуальная на данный момент - это отчет СКД программно...пока что решений никто не нашел...может Вы подскажете, любая мысль может быть началом интересного механизма,поэтому Ваше мнение очень важно! Спасибо!
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот