2-Z1 я вас умоляю, не стоит дуться, наверно я просто некорректно сформулировал вопрос.
а вот корректная вроде бы формулировка:
необходимо доработать скл запрос так, чтобы приделать к результату колонку с реквизитом (не общим) документа, заранее неизвестного вида. Возможно ли это средствами исключительно т-скл?
Ведь например сама 1С может корректно отработать строки типа:
Док = СоздатьОбъект( "Документ" );
...
ТКонтрагент = Документ.Контрагент;
(будем считать что у каждого вида документов есть реквизит Контрагент)
Пока же вижу выход только в динамической сборке запроса, используя подсказку Вадимко
http://infostart.ru/articles/201/решение получилось таким примерно:
РСет.УстановитьТекстовыйПараметр( "ДатаС", рДатаС );
РСет.УстановитьТекстовыйПараметр( "ДатаПо", рДатаПо );
РСет.УстановитьТекстовыйПараметр( "Фирма", рФирма );
тзВиды = СоздатьОбъект( "ТаблицаЗначений" );
Запрос = "
| SELECT DISTINCT rdPart.IDDOCDEF AS Вид
| FROM $Регистр.ПартииНаличие AS rdPart (nolock)
|WHERE ( rdPart.DATE_TIME_IDDOC BETWEEN :ДатаС AND :ДатаПо~ )
| AND ( $rdPart.КодОперации IN ( SELECT Val FROM #КО ) )
|";
РСет.ВыполнитьИнструкцию( Запрос, тзВиды, 1 );
тКейс = "CASE" + РазделительСтрок;
тДжоин = "";
тзВиды.ВыбратьСТроки();
Пока тзВиды.ПолучитьСтроку()=1 Цикл
Стр = "{" +"""O"""+","+"""0"""+","+"""0"""+","+"""" + Строка( тзВиды.Вид ) + """"+","+"""0"""+","+"""0"""+","+""" 0 """+"}";
Вид = ЗначениеИзСтрокиВнутр( Стр ).Вид();
тКейс = тКейс + "WHEN $doc" + тзВиды.Вид + ".Контрагент<>$ПустойИд THEN $doc" + тзВиды.Вид + ".Контрагент" + РазделительСтрок;
тДжоин = тДжоин + "LEFT JOIN $Документ." + Вид + " AS doc" + тзВиды.Вид + " ON doc" + тзВиды.Вид + ".IDDOC=rdPart.IDDOC" + РазделительСтрок;
КонецЦикла;
тКейс = тКейс + "ELSE $ПустойИд END";
РСет.УстановитьТекстовыйПараметр( "ДатаС", рДатаС );
РСет.УстановитьТекстовыйПараметр( "ДатаПо", рДатаПо );
РСет.УстановитьТекстовыйПараметр( "Фирма", рФирма );
Запрос = "
| SELECT
| $rdPart.Фирма AS Фирма,
| $rdPart.Номенклатура AS Номенклатура,
| $rdPart.ДопПризнак AS ДопПризнак,
| $rdPart.КодОперации AS КодОперации,
| $rdPart.Количество * ( 1 - rdPart.DEBKRED * 2 ) AS Количество,
| $rdPart.СуммаРуб * ( 1 - rdPart.DEBKRED * 2 ) AS Стоимость,
| $rdPart.ПродСтоимость * ( 1 - rdPart.DEBKRED * 2 ) AS Выручка,
| rdPart.IDDOC AS [Документ $Документ],
| rdPart.IDDOCDEF AS Документ_вид,
| " + тКейс + " AS [Контрагент $Справочник.Контрагенты]
|
| FROM $Регистр.ПартииНаличие AS rdPart (nolock)
| " + тДжоин + "
| WHERE ( rdPart.DATE_TIME_IDDOC BETWEEN :ДатаС AND :ДатаПо~ )
| AND ( $rdPart.КодОперации IN ( SELECT Val FROM #КО ) )
|" + ?( ЕстьФильтрФирма=0, "", "AND ( $rdPost.Фирма=:Фирма )" ) + "
|
|";