|
|
|
запрос к табличной части документа | ☑ | ||
|---|---|---|---|---|
|
0
salikoff
27.12.10
✎
01:07
|
здравствуйте. Подскажите, пожалуйста, почему я при запросе к табличной части документа получаю таблицу значений, а не обычный результат запроса (например, когда делаю запрос к справочнику)?
Как мне с этой таблицей значений работать в самом запросе (при составлении сложного запроса)? Например хочу делать JOIN к результату запроса из табличной части документа, но ничего не выходит, 1С "вылетает" с сообщением «Ошибка СУБД ....» |
|||
|
1
Garkin
27.12.10
✎
01:13
|
(0) Это все потому что запрос ты делаешь не к табличной части документа.
|
|||
|
2
Либерал
27.12.10
✎
01:18
|
странный ты какой-то... и темный не начитаный, даж в типовые лень посмотреть...
ВЫБРАТЬ ДокТабЧасть.Ссылка.Номер, ДокТабЧасть.СсылкаДата, ДокТабЧасть.НомерСтроки ИЗ Документ.МойЛокумент.ИмяТабЧасти КАК ДокТабЧасть и ничего никуда не вылетает |
|||
|
3
shurik_klgd
27.12.10
✎
01:27
|
(2) цитата из типовой?:)
|
|||
|
4
salikoff
27.12.10
✎
02:17
|
Я вижу, мой вопрос остался непонятым. Поясню на примере:
ВЫБРАТЬ Номенклатура.Артикул ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель.Наименование = "ЗАПЧАСТИ Volvo" И Номенклатура.Артикул НЕ В (ВЫБРАТЬ Инвентаризация.Товары.Номенклатура.Артикул ИЗ Документ.Инвентаризация КАК Инвентаризация ГДЕ Инвентаризация.Номер = "N000000012") Я хочу в этом запросе получить список номенклатурных позиций в определенной группе справочника (запчасти VOLVO) при этом исключить из списка те позиции, которые имеются в табличной части определенного документа (инвентаризация). В подзапросе результатом является таблица значений. В общем-то хрен с ней, с возвращаемым типом (пусть хоть это будет таблицей значений), мне хотелось бы чтобы запрос работал и задача была решена |
|||
|
5
Один С
27.12.10
✎
02:24
|
Номенклатура НЕ В (ВЫБРАТЬ
ИнвентаризацияТовары.Номенклатура ИЗ Документ.Инвентаризация.Товары КАК ИнвентаризацияТовары ГДЕ Инвентаризация.Номер = "N000000012" |
|||
|
6
shurik_klgd
27.12.10
✎
02:35
|
ИЗ Справочник.Номенклатура как Номенлатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.Инвентаризация Как Инвентаризация ПО (Номенклатура = Инвентаризация.Номенклатура) ГДЕ Инвентаризация.Номенклатура ЕСТЬ NULL) ... както так |
|||
|
7
fadeik86
27.12.10
✎
03:27
|
Не проще так сделать. Только здесь документ не Инвентаризация, а поступление (но переделать труда не составит). Всю номенклатуру в виртуальную таблицу, потом в запросе фильтруешь по конкретному документу.Проверил работает. И еще в первом запросе надо поставить родителя из какого ты хочешь выбирать, чтобы было только по конкретной папке.
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; МенеджерВТ = Запрос.МенеджерВременныхТаблиц; Запрос.Текст = " |ВЫБРАТЬ | Номенклатура.Ссылка КАК Товар |ПОМЕСТИТЬ ТабТовар |ИЗ | Справочник.Номенклатура КАК Номенклатура |СГРУППИРОВАТЬ ПО | Номенклатура.Ссылка"; Запрос.Выполнить(); Список1 = Новый СписокЗначений; Для Каждого Элем Из Поступление.Товары цикл Список1.Добавить(Элем.Номенклатура.Ссылка); КонецЦикла; Запрос1 = Новый Запрос; Запрос1.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос1.Текст = " |ВЫБРАТЬ | ТабТовар.Товар |ИЗ | ТабТовар КАК ТабТовар |ГДЕ | (ТабТовар.Товар.ЭтоГруппа = Ложь) И (ТабТовар.Товар НЕ В (&СписокТоваров)) |СГРУППИРОВАТЬ ПО | ТабТовар.Товар"; Запрос1.МенеджерВременныхТаблиц = МенеджерВТ; Запрос1.УстановитьПараметр("СписокТоваров",Список1); Выборка = Запрос1.Выполнить().Выбрать(); Пока Выборка.Следующий() цикл Сообщить(Выборка.Товар); КонецЦикла; |
|||
|
8
salikoff
27.12.10
✎
03:57
|
(6) В том и дело, что я не могу воспользоваться соединением,
так как после предиката ПО я не могу ставить знак равенства. Попробуйте сами в консоли запросов сделать запрос к табличной части любого документа. Результатом будет ТАБЛИЦА ЗНАЧЕНИЙ! То есть я не могу задать условие соединения, так как не могу сравнивать таблицу значений с конкретным значением. (7) Как-то это чересчур громоздко получается! Некрасиво, что приходится в цикле формировать список значений, по которому потом нужно фильтровать в запросе. Хочется все сделать внутри запроса и выполнить в консоли запросов. |
|||
|
9
fadeik86
27.12.10
✎
04:41
|
В одном запросе
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Номенклатура.Ссылка КАК Товар |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | (Номенклатура.Ссылка.ЭтоГруппа = Ложь) И | (Номенклатура.Ссылка НЕ В ( | ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка КАК Товар1 | ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ГДЕ ПоступлениеТоваровУслугТовары.Ссылка = &ВыбДок | СГРУППИРОВАТЬ ПО | ПоступлениеТоваровУслугТовары.Номенклатура)) | И (Номенклатура.Ссылка = &ВыбТовар) |СГРУППИРОВАТЬ ПО | Номенклатура.Ссылка"; Запрос.УстановитьПараметр("ВыбДок",Поступление); Запрос.УстановитьПараметр("ВыбТовар",ВыбНомен); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() цикл Сообщить(Выборка.Товар); КонецЦикла; |
|||
|
10
fadeik86
27.12.10
✎
06:03
|
Хотел спросить, это так действительно сделано или это просто для примера?
ВЫБРАТЬ Номенклатура.Артикул ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель.Наименование = "ЗАПЧАСТИ Volvo" |
|||
|
11
BadTouch
27.12.10
✎
06:49
|
Странно вроде не пятница...
(8) Используй таблицу не "Документ.Инвентаризация", а "Документ.Инвентаризация.ТЧ" и будет тебе счастье... |
|||
|
12
salikoff
27.12.10
✎
15:17
|
(11) Да, вроде заработало. Счастье обретено!
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |