Имя: Пароль:
1C
 
Отбор по типу документа в запросе
0 Viktor Zull
 
20.12.06
21:21
Уважаемые участники форума, подскажите как можно сделать в запросе (в построителе) отбор по типу документа, но так, чтобы пользователь мог сам выбирать тип.

Например есть запрос:

ВЫБРАТЬ
   Хозрасчетный.Регистратор
ИЗ
   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный

В качестве регистратора могут выступать документы нескольких типов.

Мне извесна конструкция, которая позволяет отобрать данные по типу документа:

ВЫБРАТЬ
 Хозрасчетный.Регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
 Хозрасчетный.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

Но это не динамический отбор. Я пробовал сделать поле с типом значения ОписаниеТипов и передавать выбранное значение как параметр, но так запрос не понимается:

ВЫБРАТЬ
 Хозрасчетный.Регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
 Хозрасчетный.Регистратор ССЫЛКА &СсылкаНаОбъект

Сделать поле типа документа тоже не получается:

ВЫБРАТЬ
 Хозрасчетный.Регистратор,
 ССЫЛКА(Регистратор) //? может по другому надо как-то записывать
...

Можно конечно при в ВЫБРАТЬ подставлять конструкцию:

ВЫБОР
 КОГДА Хозрасчетный.Регистратор ССЫЛКА Документ.<...>
   ТОГДА ... //Строковое значение
 ИНАЧЕЕСЛИ ...
...
...
КОНЕЦ КАК ТипДокумента

Но это тоже не универсально, если при дальнейшей разработке расширить список документов для регистратора, придется дописывать новые условия, и отбирать по строковому значению неудобно.

Что Вы можете посоветовать?
1 ТелепатБот
 
гуру
20.12.06
21:21
2 Neco
 
20.12.06
21:41
3 PR
 
20.12.06
23:31
ВЫБОР или спецреквизит в каждом документе
4 Genius
 
20.12.06
23:55
(3) Спец реквизит это ты конечно загнул
(0) натравить СтрЗаменить на ТекстЗапроса
5 PR
 
21.12.06
00:19
Если просто отбор по типу, тогда вообще ТаблицаИсточник.Ссылка ССЫЛКА Документ.ЧегоТоТам.
А вот если нужны группировки, множественные отборы, сортировки и пр., то (3)
6 Кредит
 
21.12.06
00:26
(5)ВЫБОР КОГДА Ренистратор ССЫЛКА Документ.РТУ ТОГДА РТУ ИНАЧЕ ПТУ КОНЕЦ КАК ТипДока

По полю ТипДока можно группировать, мотреть итоги ...
7 PR
 
21.12.06
00:33
(6) Да ты че, правда что ли? А (3) ты читал? :)))
8 Viktor Zull
 
21.12.06
11:21
(6) Выбором не совсем то что нужно, я же говорил в сообщении (1). При добавлении новых типов документов в составной тип регистратора, в запросе каждый раз придется дописывать новые условия в выборе. К тому же на выходе получается текстовое значение, которое пользователю вводить будет неудобно. Нужно, чтобы пользователь выбирал ТИП документа и поэтому типу документа шла выборка, ВЫБИРАЛ, а не вводил.

В уловии ГДЕ Регистратор.Ссылка ССЫЛКА Документ.ЧеготоТам, также придется добавлять условия при изменении составного типа регистратора.

(3) Мысль о добавлении в документ специального реквизита ТипДокумента была, но это уже изменение конфигурации. Интересно, можноли во внешнем отчете, в запросе это продумать.

Вопрос тогда такой, можно ли получить поле тип которого ОписаниеТиов в запросе в разделе ВЫБРАТЬ. Нет никакого хитрого способа написать что-то вроде:

ВЫБРАТЬ
 Таблица.Регистратор КАК СамДокумент,
 ТипЗначения(Таблица.Регистратор) КАК ТипДока
 ...

Тогда ТипДока имел бы тип ОписаниеТипов и при отборе пользователю открывалось окно выбора типов (такое же какое открывается на этапе программирования в конфигураторе при назначении типа реквизитам).

Как можно это сделать? Если никак, то просто скажите мне об этом.
9 Scooter
 
21.12.06
12:58
(8)можно, информации достаточно
(4)п1 +1
10 PR
 
21.12.06
13:03
(8) Тогда только допреквизит, думаю
11 Scooter
 
21.12.06
13:08
(8) п1 - 1."Состав" поля Регистратор можно определить по метаданным
2.Если нужно выбирать один тип дока тогда на формы ложишь поле выбора, далее (4.2), если несколько то ... непроблема
12 Viktor Zull
 
21.12.06
14:20
Нужно предусмотреть возможность возможность выбора нескольких документов. Scooter, как сделать? Подскажите как  поля Регистратор определить по метаданным. Не совсем ясно.
13 Viktor Zull
 
21.12.06
14:28
Я предполагаю, что нужно положить на форму полеввода поле; установить Тип значения как СписокВыбора, а тип значений списка установить ОписаниеТипа.
Тогда как выбранные типы передать в запрос?
14 Рэйв
 
21.12.06
14:28
на форме список ИМЕНАМИ документов(через метаданные ), который заполняется при открытии.

Запрос.Текст="
ВЫБРАТЬ
 Хозрасчетный.Регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ

Хозрасчетный.Регистратор ССЫЛКА Документ."+ВыбранноеЗначениеВСписке.
15 Viktor Zull
 
21.12.06
14:43
А если положить на форму поле ввода; установить тип значения как СписокВыбора, а тип значений списка установить ОписаниеТипа, то конструкция из (14) сработает.
Или мне потом в цикле выбранные значения перебирать и добавлять к тексту запроса используя ИЛИ:

ТекстЗапроса =
"ВЫБРАТЬ
 Хозрасчетный.Регистратор
ИЗ
 РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ";

Для Инд = 0 По ЭлементыФормы.СписокВыбора.Количество()-1 Цикл
 ТекстЗапроса = ТекстЗапроса + "Хозрасчетный.Регистратор ССЫЛКА Документ."+ ЭлементыФормы.СписокВыбора.Получить[Инд] + "ИЛИ";
КонецЦикла

Что-то подобное должно быть?
16 Viktor Zull
 
22.12.06
16:43
Задача решена. Всем спасибо.