Добрый день уважаемые.
Столкнулся с проблемой получения строкового представления вида документа из запроса.
Классический вариант запроса
ТекстЗапроса = "
|SELECT
| Жур.IDDoc as [Док $Документ],
| Жур.IDDocDef as Док_вид,
| CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
|FROM
| _1SJourn Жур
|WHERE
| Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
возвращает всего лишь числовое соответствие вида. Строковое представление можно получить из файла DDS.
Получить строковое представление вида документа можно в цикле обработки ТЗ - результата запроса стандартным методом 1С - Вид(). При этом наблюдается значительная потеря времени, т.к. происходит лишнее обращение к базе данных, при котором получается сначала весь документ - Жур.IDDoc, а потом уже из него конкретно Вид().
Каких либо других методов получения строкового представления вида документа не нашел. Просмотрев форум, увидил, что вопрос поднимался с переодичностью в месяц

. Более-менее ясного ответа не нашел. А главное быстрого по скорости.
Предлагаю свое решение задачи с помощью хранимой функции.
Создание самой функции -
МДВ = СоздатьОбъект("MetaDataWork");
ТекстЗапросаSQL = "
|create FUNCTION sp_viewdoc(@val int) RETURNS varchar(40)
|AS
|begin
|declare @v int;
|declare @tval varchar(40);
|set @v = @val;
|set @tval = '';
|set @tval =
|CASE @v
|";
Для ъ=1 По Метаданные.Документ() Цикл
Сообщить(""+МДВ.ИДДокумента(ъ) +" - "+ Метаданные.Документ(ъ).Идентификатор);
ТекстЗапросаSQL = ТекстЗапросаSQL + "
| WHEN '"+МДВ.ИДДокумента(ъ)+"' THEN '"+Метаданные.Документ(ъ).Идентификатор+"'";
КонецЦикла;
ТекстЗапросаSQL = ТекстЗапросаSQL +"
| ELSE 'Nodefine'
|END;
|RETURN(@tval);
|end
|";
ЗапросSQL.Открыть(ТекстЗапросаSQL);
Выполняется один раз и создает хранимую функцию на сервере с именем
sp_viewdoc.
Использование фукнции в запросе -
ТекстЗапроса = "
|SELECT
| Жур.IDDoc as [Док $Документ],
| Жур.IDDocDef as Док_вид,
| dbo.sp_viewdoc(Жур.IDDocDef) ДокВид,
| CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
|FROM
| _1SJourn Жур
|WHERE
| Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
при этом 3-я строка вернет текстовое представление вида документа.
Можно использовать совместно с хранимой процедурой
sp_tohex, описанной на форуме -
ТекстЗапросаSQL = "
|SELECT
| dbo.sp_tohex(Жур.IDDocDef, 4) + Жур.IDDoc [Док $Документ]
| , dbo.sp_viewdoc(Жур.IDDocDef) ДокВид
|FROM
| _1SJourn Жур
|WHERE
| Жур.date_time_iddoc between :НачДата and :КонДата~
| and Жур.closed & 1 = 1
|order by
| Жур.date_time_iddoc
|";
Подобную операцию можно так же было реализовать через временную таблицу, но при этом ее требуется создавать всякий раз перед запросом, а фукнция хранится на сервере постоянно.
Выигрышь скорости, по сравнению с использованием метода Вид() - в несколько десятков раз.