yudin писал(а) 19. Июня 2007 :: 11:06:А откуда ты его берешь? Если я не ошибаюсь, строкове представление документа - это Док.ПредставлениеВида() + Док.НомерДок+Док.ДатаДок, при этом ПредставлениеВида() лежит только в MD, а следовательно в sql базе его нет... Или ты ее (ХП) генеришь из 1С и обновляешь при изменении конфы? Или я думаю не в том направлении?
Да, там просто тупая ХПшка с офигенным CASE'ом.
| CREATE FUNCTION ПредставлениеДокумента(@ИдДок9 Char(9), @ПоказыватьДату Bit, @ПоказыватьНомер Bit)
| RETURNS varChar(100)
| AS
| Begin
| --версия функции: "+Константа.РелизКонфигурации+"
| Declare @СтрокаРезультата varChar(100), @ВидДок Int, @идДокОсн char(9), @ВидДокОсн Int
|
//| Set @ВидДока = IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @ИдДок9),0)
| SELECT TOP 1 @ВидДок = IsNull(IDDOCDEF, 0), @идДокОсн = Right($ОбщийРеквизит.ДокументОснование, 9)
| FROM _1SJOURN (NoLock)
| WHERE IDDOC = @ИдДок9
| Set @ВидДокОсн = IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @идДокОсн),0)
|
| If @ВидДок = 0 Begin
| Set @СтрокаРезультата = ''
| End Else Begin
| Set @СтрокаРезультата = Case @ВидДок";
Для Н = 1 По Метаданные.Документ() Цикл
ВидДокумента = Метаданные.Документ(Н).Идентификатор;
ИмяДокумента = Метаданные.Документ(Н).Представление();
ИДДокумента = РадугаМД.ИДДокумента(ВидДокумента);
Если ВидДокумента = "ЗакрытиеОстатков" Тогда
ТекстЗапроса = ТекстЗапроса + "
| When "+ИДДокумента+" Then Case IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @идДокОсн),0)
| When $ВидДокумента.ЗаказТовараУПоставщика Then 'Закрытие заказа поставщику'
| When $ВидДокумента.ТранзитТовараОтПоставщика Then 'Закрытие транзита'
| When $ВидДокумента.ЗаявкаНаКомплектацию Then 'Закрытие заявки на комплектацию'
| When $ВидДокумента.Счет Then 'Закрытие счёта'
| When $ВидДокумента.ЗаявкаНаСклад Then 'Закрытие заявки на склад'
| Else '"+ИмяДокумента+"'
| End";
ИначеЕсли ВидДокумента = "ЗаявкаНаСклад" Тогда
ТекстЗапроса = ТекстЗапроса + "
| When "+ИДДокумента+" Then Case IsNull((SELECT $Заявка.фДляФилиала FROM $Документ.ЗаявкаНаСклад Заявка (NoLock) WHERE Заявка.IDDoc = @ИдДок9), 0)
| When 1 Then 'Заявка на склад (ф)'
| Else 'Заявка на склад'
| End";
ИначеЕсли ВидДокумента = "РасходнаяНакладная" Тогда
ТекстЗапроса = ТекстЗапроса + "
| When "+ИДДокумента+" Then Case IsNull((SELECT $РасхНакл.фДоставка FROM $Документ.РасходнаяНакладная РасхНакл (NoLock) WHERE РасхНакл.IDDoc = @ИдДок9), 0)
| When 1 Then 'Доставка'
| Else 'Расходная накладная'
| End";
ИначеЕсли ВидДокумента = "ПереоценкаТоваров" Тогда
ТекстЗапроса = ТекстЗапроса + "
| When "+ИДДокумента+" Then Case IsNull((SELECT $ПереоценкаТоваров.фПоВременномуХранению FROM $Документ.ПереоценкаТоваров ПереоценкаТоваров (NoLock) WHERE ПереоценкаТоваров.IDDoc = @ИдДок9), 0)
| When 1 Then 'Переоценка товаров (вр.хр)'
| Else 'Переоценка товаров'
| End";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| When "+ИДДокумента+" Then '"+ИмяДокумента+"'";
КонецЕсли;
КонецЦикла;
ТекстЗапроса = ТекстЗапроса + "
| Else ''
| End
|
| If @СтрокаРезультата <> '' Begin
| If @ПоказыватьНомер = 1
| Set @СтрокаРезультата = @СтрокаРезультата + ' № ' + (Select Top 1 LTrim(RTrim(DocNo)) From _1SJOURN (NoLock) Where IDDOC = @ИдДок9)
| If @ПоказыватьДату = 1
| Set @СтрокаРезультата = @СтрокаРезультата + ' от ' + (Select Top 1 Convert(Char(10),Cast(LEFT(DATE_TIME_IDDOC,8) As DateTime),104) From _1SJOURN (NoLock) Where IDDOC = @ИдДок9)
| End
| End
|
| Return @СтрокаРезультата
| End
| ";
ни в каких местах, где скорость критична её конечно использовать нельзя