1С 8 вид документа

Отбор по типу документа в запросе

Я
   Viktor Zull Уважаемые участники форума, подскажите как можно сделать в запросе (в построителе) отбор по типу документа, но так, чтобы пользователь мог сам выбирать тип.

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

ВЫБРАТЬ
   Хозрасчетный.Регистратор
ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный В качестве регистратора могут выступать документы нескольких типов.
Мне извесна конструкция, которая позволяет отобрать данные по типу документа:

ВЫБРАТЬ
 Хозрасчетный.Регистратор
ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный ГДЕ Хозрасчетный.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг Но это не динамический отбор. Я пробовал сделать поле с типом значения ОписаниеТипов и передавать выбранное значение как параметр, но так запрос не понимается:

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

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

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

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

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

Что Вы можете посоветовать?
 
     ТелепатБот

Книга знаний: Тип реквизита и тип значения
Книга знаний: Универсальные интерактивные команды для ссылочных объектов

   Neco

+(1) Книга знаний: v8: Хитрое написание текстов запросов с необязательными условиями;

   PR

ВЫБОР или спецреквизит в каждом документе

   Genius

(3) Спец реквизит это ты конечно загнул
(0) натравить СтрЗаменить на ТекстЗапроса

   PR

Если просто отбор по типу, тогда вообще ТаблицаИсточник.Ссылка ССЫЛКА Документ.ЧегоТоТам.
А вот если нужны группировки, множественные отборы, сортировки и пр., то (3)

   Кредит (5)ВЫБОР КОГДА Ренистратор ССЫЛКА Документ.РТУ ТОГДА РТУ ИНАЧЕ ПТУ КОНЕЦ КАК ТипДока По полю ТипДока можно группировать, мотреть итоги …    PR

(6) Да ты че, правда что ли? А (3) ты читал? :)))

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

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

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

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

ВЫБРАТЬ Таблица.Регистратор КАК СамДокумент, ТипЗначения(Таблица.Регистратор) КАК ТипДока …
Тогда ТипДока имел бы тип ОписаниеТипов и при отборе пользователю открывалось окно выбора типов (такое же какое открывается на этапе программирования в конфигураторе при назначении типа реквизитам).

Как можно это сделать? Если никак, то просто скажите мне об этом.    Scooter

(8)можно, информации достаточно
(4)п1 +1

   PR

(8) Тогда только допреквизит, думаю

 
 

   Scooter

(8) п1 — 1."Состав" поля Регистратор можно определить по метаданным
2.Если нужно выбирать один тип дока тогда на формы ложишь поле выбора, далее (4.2), если несколько то …

Отбор по типу документа в запросе

непроблема

   Viktor Zull

Нужно предусмотреть возможность возможность выбора нескольких документов. Scooter, как сделать? Подскажите как  поля Регистратор определить по метаданным. Не совсем ясно.

   Viktor Zull

Я предполагаю, что нужно положить на форму полеввода поле; установить Тип значения как СписокВыбора, а тип значений списка установить ОписаниеТипа.
Тогда как выбранные типы передать в запрос?

   Рэйв на форме список ИМЕНАМИ документов(через метаданные ), который заполняется при открытии.

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

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

Задача решена. Всем спасибо.

TurboConf 5 — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

  • Добавить свою публикацию
  • для этого требуется регистрация

Пишем шаблон для запроса.

ШаблонЗапроса ="|ВЫБРАТЬ| #Таблица.Ссылка КАК Ссылка|ИЗ| #Таблица|";

Затем перебираем все виды документов и составляем текст запроса.

ТекстЗапроса ="";Для каждого ТекДанные из Метаданные.Документы Цикл ТекстЗапроса = ТекстЗапроса +?(ПустаяСтрока(ТекстЗапроса),"","|ОБЪЕДИНИТЬ ВСЕ|")+ СтрЗаменить(ШаблонЗапроса,"#Таблица","Документ."+ ТекДанные.Имя);КонецЦикла;

В результате такой работы у нас будет текст запроса в виде:

ВЫБРАТЬ Документ.АвансовыйОтчет.Ссылка КАК Ссылка ИЗ Документ.АвансовыйОтчет ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документ.АктВыполненныхРабот.Ссылка КАК Ссылка ИЗ Документ.АктВыполненныхРабот

Дописываем код выполнения запроса.

Запрос =Новый Запрос; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий()Цикл Сообщить(Выборка.Ссылка);КонецЦикла;

Весь код быдет выглядеть так:

ШаблонЗапроса ="|ВЫБРАТЬ| #Таблица.Ссылка КАК Ссылка|ИЗ| #Таблица|"; ТекстЗапроса ="";Для каждого ТекДанные из Метаданные.Документы Цикл ТекстЗапроса = ТекстЗапроса +?(ПустаяСтрока(ТекстЗапроса),"","|ОБЪЕДИНИТЬ ВСЕ|")+ СтрЗаменить(ШаблонЗапроса,"#Таблица","Документ."+ ТекДанные.Имя);КонецЦикла; Запрос =Новый Запрос; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий()Цикл Сообщить(Выборка.Ссылка);КонецЦикла;

В данной выборке будут все документы базы.

По справочникам просто меняем тип метаданных в цикле.

Для каждого ТекДанные из Метаданные.Справочники Цикл

Весь код будет выглядеть так:

ШаблонЗапроса = " |ВЫБРАТЬ | #Таблица.Ссылка КАК Ссылка |ИЗ | #Таблица |"; ТекстЗапроса = ""; Для каждого ТекДанные из Метаданные.Справочники Цикл ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", " |ОБЪЕДИНИТЬ ВСЕ |") + СтрЗаменить(ШаблонЗапроса, "#Таблица", "Документ." + ТекДанные.Имя); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла;  

предыдущие ()все

≡ к списку статей

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *