Есть один теоретический вопрос по СКД / оптимизации.
Предположим, что есть простой отчет на СКД с набором данных типа "Запрос". В этом отчете есть доступное поле "Документ". Оно составного типа - например, может принимать тип одного из 15 документов. Нужно сделать новый вариант отчета в пользовательском режиме (т. е. не меняя запроса в схеме компоновки данных при этом) . В новом варианте среди прочего должно быть выбранное поле Документ.Номер. При этом новый вариант отчета нужен не по всем 15 документам, а только по одному из них (это получается логически за счет других отборов, не связанных с обращением через точку к реквизитам Документ).
Как мы знаем, 1С в таких случаях (при обращении через точку к полям составного типа) построит запрос для СУБД, где через левое соединение добавит все таблицы, которые входят в состав составного типа. Т. е. для примера выше будет 15 левых соединений. В запросе мы можем использовать ВЫРАЗИТЬ и ограничить число таких левых соединений.
А можно ли как-то достигнуть такого же эффекта только с помощью настроек варианта отчета СКД? Как-то указать СКД через ее настройки варианта отчета, что Документ.Номер нужно искать только в 1ой таблице, а не 15?.
Пробовал сделать это с помощью пользовательских полей и функции языка компоновки ВЫРАЗИТЬ, но она, увы, не дает писать выражения вида ВЫРАЗИТЬ(Документ, "Документ.МойДокумент).Номер.
Да можно. Цепляем одну эту конкретную таблицу (вида документа) к полю Документ и берем номер не через точку (фу бе), а через прицепленную таблицу. Причем цепляем таблицу эту на закладке компоновки данных - при этом она в запросе появится в фигурных скобках ({}). Ну и ... если твое поле номер будет выбрано в запросе (или еще какие из прицепленной таблицы), то эта таблица окажется в запросе и ясень пень запрос будет сформирован только по этому виду документа (если конечно соединение будет внутреннее). А вот если никакие поля из этой таблицы не будут использоваться, то таблица эта выкидывается из запроса.