|
Выбрать все документы запросом | ☑ | ||
---|---|---|---|---|
0
Reclaim
27.02.16
✎
14:11
|
Здравствуйте! Есть запрос, в котором я перебираю все документы. Столкнулся с такой проблемой: в документах необходимо выбрать "Ответственного", причем в некоторых документах такого реквизита может не быть. Как можно задать в запросе проверку, что если реквизита нет, то вывести пустую строку, а если реквизит есть, то вывести данные.
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустаяСтрока", ""); Текст = ""; Для Каждого Документ Из Метаданные.Документы Цикл Текст = Текст + "ВЫБРАТЬ | " + Документ.Имя + ".Ссылка КАК Документ, | " + Документ.Имя + ".Номер КАК Номер, | " + Документ.Имя + ".Дата КАК Дата//, //| ВЫБОР //| КОГДА " + Документ.Имя + ".Ответственный //| ТОГДА " + Документ.Имя + ".Ответственный //| ИНАЧЕ //| КОНЕЦ |ИЗ | Документ." + Документ.Имя + " КАК " + Документ.Имя + " ОБЪЕДИНИТЬ "; КонецЦикла; Запрос.Текст = Лев(Текст, СтрДлина(Текст) - СтрДлина(" ОБЪЕДИНИТЬ ")); Выборка = Запрос.Выполнить().Выбрать(); |
|||
1
olegves
27.02.16
✎
14:39
|
Выбор Когда ТипЗначения(Документ) = Тип("Документ без реквизита") Тогда "Пусто"
как-то так |
|||
2
alle68
27.02.16
✎
14:43
|
(0) Это следует делать при конструировании текста запроса.
|
|||
3
Radkt
27.02.16
✎
15:42
|
(0)в запросе через точку ссылка.реквизит , если будет рекв то заполнено, если нет то NULL. Но судя по коду если уже начали собирать запрос циклом, то можно как в (1)
|
|||
4
kosts
27.02.16
✎
15:44
|
Выбор когда Док.Ссылка Ссылка Документ.Накладная Тогда Документ.Ответственный Иначе "" конец Как Ответственный
вроде так можно |
|||
5
kosts
27.02.16
✎
15:58
|
(0) Если проблема именно в автоматическом определении документов то смотри "Метаданные".
Дословно не помню, что-то вроде такой конструкции
Мог в каждой строке ошибиться, это для представления, как делать... |
|||
6
Reclaim
27.02.16
✎
16:07
|
(5) Да, все верно, такое есть и можно сделать так:
Для Каждого Документ Из Метаданные.Документы Цикл Если Документ.Реквизиты.Найти("Ответственный") = Неопределено Тогда Текст = Текст + "ВЫБРАТЬ | " + Документ.Имя + ".Ссылка КАК Документ, | " + Документ.Имя + ".Номер КАК Номер, | " + Документ.Имя + ".Дата КАК Дата, | &ПустаяСтрока КАК Ответственный |ИЗ | Документ." + Документ.Имя + " КАК " + Документ.Имя + " |ГДЕ | " + Документ.Имя + ".Дата МЕЖДУ &НачалоПериода И &КонецПериода ОБЪЕДИНИТЬ "; Иначе Текст = Текст + "ВЫБРАТЬ | " + Документ.Имя + ".Ссылка КАК Документ, | " + Документ.Имя + ".Номер КАК Номер, | " + Документ.Имя + ".Дата КАК Дата, | " + Документ.Имя + ".Ответственный КАК Ответственный |ИЗ | Документ." + Документ.Имя + " КАК " + Документ.Имя + " |ГДЕ | " + Документ.Имя + ".Дата МЕЖДУ &НачалоПериода И &КонецПериода ОБЪЕДИНИТЬ "; КонецЕсли; КонецЦикла; Но надо "Ответственного" выбрать одним запросом... |
|||
7
kosts
27.02.16
✎
16:10
|
(6) Можно не конструировать запрос в строковой переменной.
Напиши запрос для одного документа, а потом в цикле аккуратно делай Текст = Заменить(Текст, "Документ.Накладная", "Документ." + Документ.Имя); |
|||
8
Reclaim
27.02.16
✎
16:22
|
(7) Идея отличная, но воспользоваться не могу. Нужно собирать запрос именно по метаданным, чтобы к разным конфигурациям подходил
|
|||
9
alle68
27.02.16
✎
16:39
|
(6) Задача решена. Что не так?
|
|||
10
kosts
27.02.16
✎
17:05
|
(8) Вот что я имел ввиду в (7). Как вариант, просто нагляднее. Для простого запроса может лишнее, для сложных запросов полезнее.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |