Kapet писал(а) 19. Января 2007 :: 16:06:Отвечаю. Данные запроса будут использоваться в журнале документа для колонок с пиктограммами и, заодно, для вывода строки состояния документа. Типизацию хочу для ускорения получения данных запроса, т.к. вроде, как везде написано, типизированный запрос компилируется один раз, а далее только успевай подставлять данные в переменные запроса.
Поправьте, если не прав. Если не прав, поправьте ФАК...
Поправляю. Только не ФАК, а тебя.
Один раз компилируется параметризированный запрос. Типизирован он или нет - рояли не играет.
А типизация - это приведение выдаваемых результатов к внутренним типам 1С, и во вложенных запросах она действительно нафиг не нужна.
Ну, а чтобы не накосячить с параметризацией сложных запросов, рекомендую делать примерно так;
|set nocount on
|
|DECLARE @ТоварФильтр char(9)
|
|SET @ТоварФильтр = ?
|
|
|DECLARE @ТекДата datetime
|
|SET @ТекДата = cast(? as datetime)
|
|
|BEGIN TRANSACTION
|
|
|
|UPDATE $Справочник.Номенклатура with (updlock)
|SET
|$Справочник.Номенклатура.БазоваяЕдиницаИзмерения = seed.БазоваяЕдиницаИзмерения,
|$Справочник.Номенклатура.ВалютаПродажи = seed.ВалютаПродажи,
|$Справочник.Номенклатура.ВалютаУчета = seed.ВалютаУчета,
|$Справочник.Номенклатура.ВидТовара = seed.ВидТовара,
|$Справочник.Номенклатура.ГруппаБест = seed.ГруппаБест,
|$Справочник.Номенклатура.Категория = seed.Категория,
|$Справочник.Номенклатура.Плотность = seed.Плотность,
|$Справочник.Номенклатура.ТипТовара = seed.ТипТовара,
|$Справочник.Номенклатура.Субкатегория = seed.Субкатегория,
|$Справочник.Номенклатура.ГТД = seed.ГТД,
|$Справочник.Номенклатура.Аналог = seed.Аналог,
|$Справочник.Номенклатура.РазныеУпаковки = seed.РазныеУпаковки,
|$Справочник.Номенклатура.НормаУпаковки = seed.НормаУпаковки,
|$Справочник.Номенклатура.КолЕдВкор = seed.КолЕдВкор,
|$Справочник.Номенклатура.КоличествоВупаковке = seed.КоличествоВупаковке
|FROM
|(
|select
|elements.ID as ИД,
|m_list.$Справочник.Номенклатура.БазоваяЕдиницаИзмерения as БазоваяЕдиницаИзмерения,
|m_list.$Справочник.Номенклатура.ВалютаПродажи as ВалютаПродажи,
|m_list.$Справочник.Номенклатура.ВалютаУчета as ВалютаУчета,
|m_list.$Справочник.Номенклатура.ВидТовара as ВидТовара,
|m_list.$Справочник.Номенклатура.ГруппаБест as ГруппаБест,
|m_list.$Справочник.Номенклатура.Категория as Категория,
|m_list.$Справочник.Номенклатура.Плотность as Плотность,
|m_list.$Справочник.Номенклатура.ТипТовара as ТипТовара,
|m_list.$Справочник.Номенклатура.Субкатегория as Субкатегория,
|m_list.$Справочник.Номенклатура.ГТД as ГТД,
|m_list.$Справочник.Номенклатура.Аналог as Аналог,
|m_list.$Справочник.Номенклатура.РазныеУпаковки as РазныеУпаковки,
|m_list.$Справочник.Номенклатура.НормаУпаковки as НормаУпаковки,
|
|CASE
|WHEN colorz.$Справочник.Цвета.КолЕдВКор is NULL THEN m_list.$Справочник.Номенклатура.КолЕдВкор
|WHEN colorz.$Справочник.Цвета.КолЕдВКор = 0 THEN m_list.$Справочник.Номенклатура.КолЕдВкор
|ELSE colorz.$Справочник.Цвета.КолЕдВКор END
|as КолЕдВкор,
|
|CASE
|WHEN m_list.$Справочник.Номенклатура.РазныеУпаковки=0 THEN m_list.$Справочник.Номенклатура.КоличествоВупаковке
|ELSE elements.$Справочник.Номенклатура.КоличествоВупаковке
|END
|as КоличествоВупаковке
|
|FROM
|(($Справочник.Номенклатура elements (NOLOCK)
|left join $Справочник.Номенклатура m_list (NOLOCK) on m_list.id=elements.$Справочник.Номенклатура.ГлавныйЛист)
|left join $Справочник.Цвета colorz (NOLOCK) on colorz.id=elements.$Справочник.Номенклатура.Цвет)
|where elements.$Справочник.Номенклатура.ГлавныйЛист = @ТоварФильтр
|AND
|elements.ID <> @ТоварФильтр
|AND
|elements.isfolder<>1
|
|) seed
|
|WHERE ID = SEED.ИД
|
|
|
|
|DECLARE @vu TABLE ( objid CHAR(9), PRIMARY KEY CLUSTERED (objid) )
|
|INSERT INTO @vu
|SELECT ID FROM
|$Справочник.Номенклатура (NOLOCK)
|WHERE
|$Справочник.Номенклатура.ГлавныйЛист = @ТоварФильтр
|AND
|ID <> @ТоварФильтр
|AND
|isfolder<>1
|
|
|
|
|exec _1sp__1SCONST_TLockX
|
|
|
|
|delete from _1sconst
|where
|id in (select id from "+ИмяВрТаб+")
|and
|objid in (select * from @vu)
|and docid = ' 0 '
|and date = @ТекДата
|
|
|
|
|insert into _1sconst
|(id, objid, date, value, docid, time, actno,lineno_,tvalue)
|select seed.id as id, tlist.objid as objid, seed.date as date, seed.value as value, seed.docid as docid, seed.time as time, seed.actno as actno, seed.lineno_ as lineno_, seed.tvalue as tvalue
|from
|(select * from _1sconst
|where
|id in (select id from "+ИмяВрТаб+")
|and
|objid = @ТоварФильтр
|and docid = ' 0 '
|and date = @ТекДата
|) seed
|cross join
|@vu
|tlist
|
|COMMIT TRANSACTION