Запрос к табличной части документа поступления

1. bluntschi 07.09.12 08:00 Сейчас в теме
Добрый день, подскажите, есть документ "поступление товаров и услуг", мне из него нужно отобрать в запросе только те документы, у которых заполнена табличная часть "Оборудование", как можно это реализовать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DenisCh 07.09.12 08:49 Сейчас в теме
ВЫБРАТЬ Ссылка
ИЗ Документ.ПоступлениеТоваровУслуг шапка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК Строки
ПО шапка.Ссылка = Строки.Ссылка
ГДЕ НЕ Строки.Номенклатура ЕСТЬ NULL

Где-то так.
Ну и условия на документы - по дате и проведённости, если нужно
4. IT_PROGRAMMIST 153 07.09.12 08:56 Сейчас в теме
(2)?? Зачем соединять?. Сразу бери табличную часть
Типа такого:

 ВЫБРАТЬ
	ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслугОборудование.Ссылка
ErrorEd88; bluntschi; +2 Ответить
3. mika_mika 1 07.09.12 08:53 Сейчас в теме
Например так:
ВЫБРАТЬ Различные
ПоступлениеТоваровУслуг.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслуг
ErrorEd88; bluntschi; +2 Ответить
5. bluntschi 07.09.12 08:56 Сейчас в теме
сделала вот так в итоге:

Запрос.Текст ="ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.ВидОперации как ВидОперации
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
| ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугОборудование.Ссылка
|И ПоступлениеТоваровУслугОборудование.НомерСтроки = 1
|ГДЕ
|
| ПоступлениеТоваровУслуг.Организация = &Организация
| И ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации
| И ПоступлениеТоваровУслугОборудование.Ссылка ЕСТЬ НЕ NULL"
Показать



спасибо всем за варианты)
6. IT_PROGRAMMIST 153 07.09.12 08:58 Сейчас в теме
7. bluntschi 07.09.12 09:00 Сейчас в теме
(6) IT_PROGRAMMIST, из 4 организация не вытаскивается ведь
9. IT_PROGRAMMIST 153 07.09.12 09:01 Сейчас в теме
(7) Ссылка.Организация
bluntschi; +1 Ответить
11. logos 211 07.09.12 09:03 Сейчас в теме
(9) IT_PROGRAMMIST,
Такая конструкция в неявном виде, на уровне запроса к БД всё равно заджойнит таблицу шапки.
12. IT_PROGRAMMIST 153 07.09.12 09:03 Сейчас в теме
+(9)
ВЫБРАТЬ
	ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
ГДЕ
	ПоступлениеТоваровУслугОборудование.Ссылка.Организация = &Организация
	И ПоступлениеТоваровУслугОборудование.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслугОборудование.Ссылка
Показать
14. bluntschi 07.09.12 09:07 Сейчас в теме
(9) IT_PROGRAMMIST, спасибо, получилось)
10. logos 211 07.09.12 09:02 Сейчас в теме
(5) bluntschi,
Запрос.Текст ="ВЫБРАТЬ 
| ПоступлениеТоваровУслуг.Ссылка, 
| ПоступлениеТоваровУслуг.Организация КАК Организация, 
| ПоступлениеТоваровУслуг.ВидОперации как ВидОперации 
|ИЗ 
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг 
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование 
| ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугОборудование.Ссылка 
|И ПоступлениеТоваровУслугОборудование.НомерСтроки = 1 
|ГДЕ 
| 
| ПоступлениеТоваровУслуг.Организация = &Организация 
| И ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации"
Показать


Так намного более по фэн шую.
one_strannik; bluntschi; +2 Ответить
8. logos 211 07.09.12 09:01 Сейчас в теме
И вообще что за извращение с левым джойном, хотя тут напрашивается внутренний? Или, если не нужны реквизиты шапки, то запрос к таблице конкретной табличной части
13. Ntari 07.09.12 09:06 Сейчас в теме
Можно по виду операции
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
	ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации
Запрос.УстановитьПараметр("ВидЛперации",Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Оборудование);
Показать
15. IT_PROGRAMMIST 153 07.09.12 09:08 Сейчас в теме
16. logos 211 07.09.12 09:10 Сейчас в теме
ПоступлениеТоваровУслугОборудование.Ссылка.Организация

в запросе уже делает джойн с таблицей, путём обращения через точку. Реквизит типа "ссылка" содержит только GUID, у него нет никаких реквизитов типа "Организация" итд. Чтобы получить объект, имеющий эти реквизиты, нужно найти в таблице шапки документа запись с этим GUID и уже оттуда можно подтянуть ссылку на организацию. И так везде, не злоупотребляйте обращениями через точку в запросе ;)
Still325; +1 Ответить
17. IT_PROGRAMMIST 153 07.09.12 09:11 Сейчас в теме
19. logos 211 07.09.12 09:13 Сейчас в теме
(17) IT_PROGRAMMIST, А чо мне заливать? Запусти SQL профайлер и сам посмотри. Или, на худой конец, открой в SSMS структуру БД и посмотри, где что лежит.
21. IT_PROGRAMMIST 153 07.09.12 09:17 Сейчас в теме
(19) ну вот скажи, что произойдет если условия будет через . (т.е ссылка.Организация).Здесь используется основной реквизит ссылки(т.е это не реквизит табличной части).
23. logos 211 07.09.12 09:22 Сейчас в теме
(21) IT_PROGRAMMIST,
Сейчас запросы приведу, надеюсь sql не напугает?
25. IT_PROGRAMMIST 153 07.09.12 09:23 Сейчас в теме
18. bluntschi 07.09.12 09:12 Сейчас в теме
(16) logos, то есть этот вариант "опасный" так сказать?
20. logos 211 07.09.12 09:15 Сейчас в теме
(18) bluntschi,
Не то, что опасный, просто однофигственно делается джойн, ток он завуалирован под виртуальными таблицами запросов 1С. ИМХО лучше понимать КАК оно работает, чем бездумно пользоваться корявками предоставленными для удобства. В этом случае - ничего страшного не будет, а так из-за неудачного запроса может сильно просесть производительность.
22. bluntschi 07.09.12 09:21 Сейчас в теме
(20) logos, спасибо за совет на будущее)

и за прояснение)
26. logos 211 07.09.12 09:25 Сейчас в теме
Вот это трансформируется
 ВЫБРАТЬ
	ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
ГДЕ
	ПоступлениеТоваровУслугОборудование.Ссылка.Организация = &Организация

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслугОборудование.Ссылка
Показать

вот в это
exec sp_executesql N'SELECT
T1._Document173_IDRRef
FROM _Document173_VT4267 T1 WITH(NOLOCK)
LEFT OUTER JOIN _Document173 T2 WITH(NOLOCK)
ON T1._Document173_IDRRef = T2._IDRRef
WHERE (T2._Fld4202RRef = @P1)
GROUP BY T1._Document173_IDRRef',N'@P1 varbinary(16)',0x00000000000000000000000000000000
user811769; bluntschi; +2 Ответить
28. logos 211 07.09.12 09:41 Сейчас в теме
А вот запрос с джойном.
ВЫБРАТЬ ПЕРВЫЕ 10
	ПоступлениеТоваровУслугТовары.Ссылка
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
ГДЕ
	ПоступлениеТоваровУслуг.Организация = &Организация

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслугТовары.Ссылка
Показать

exec sp_executesql N'SELECT TOP 10
T1._Document173_IDRRef
FROM _Document173_VT4221 T1 WITH(NOLOCK)
INNER JOIN _Document173 T2 WITH(NOLOCK)
ON (T1._Document173_IDRRef = T2._IDRRef)
WHERE (T2._Fld4202RRef = @P1)
GROUP BY T1._Document173_IDRRef',N'@P1 varbinary(16)',0x8793005056B35A1C11E1A4AD2A76CF71


Как видим разница косметическая, потому что в отличие от парсера запроса 1С я могу предполагать, что у табличной части должна быть шапка и ставлю INNER JOIN.
user811769; +1 Ответить
30. IT_PROGRAMMIST 153 07.09.12 09:53 Сейчас в теме
согласен. Проверил по структуре БД в поле Ссылка нет дополнительных реквизитов(был увы не прав), поэтому запрос переходит в (28). Но это повлияет только на скорость.
31. logos 211 07.09.12 09:57 Сейчас в теме
(30) IT_PROGRAMMIST, Если быть формалистом, то в данном случае повлияет только на форму записи. Хотя сейчас из вредности посмотрю ещё план запроса :)
32. IT_PROGRAMMIST 153 07.09.12 10:00 Сейчас в теме
(31) давай, как раз и меня просветишь)
33. logos 211 07.09.12 10:05 Сейчас в теме
(30) IT_PROGRAMMIST, Интересно, даже планы совпадают в этом случае для левого и внутреннего соединения, время исполнения тоже одно. С другой стороны, думаю все эти данные и их индексы оказались в кэше и выборка нерепрезентативная. Если был резок, прошу прощения. Хватит стартмани набивать :)
34. IT_PROGRAMMIST 153 07.09.12 10:09 Сейчас в теме
24. IT_PROGRAMMIST 153 07.09.12 09:22 Сейчас в теме
Ссылка - это значение, однозначно характеризующее объекты базы данных. По поводу производительности : не думаю,что соединением работать будет быстрее(а даже если и будет, то автору просто нужно вывести доки с заполненной таб частью). Здесь никто не говорит про сложный расчет себестоимости, при котором нужно взвешивать все возможные варианты при которых мы проиграем хоть доли секунды.
bluntschi; +1 Ответить
29. logos 211 07.09.12 09:45 Сейчас в теме
(24) IT_PROGRAMMIST,
Ссылка - это значение, однозначно характеризующее объекты базы данных.

Ссылка - это GUID, 0x81E6000C29845BA011E12618A9208703 вот такого вида выражение. Никаких других данных он больше не содержит, все представления в виде кода, наименования, в виде "Поступление товаров и услуг № ХХХ от УУ.УУ.УУУУ УУ:УУ:УУ" это результат чтения дополнительных данных из соответствующих таблиц. Прошу прощения за банальности и ликбез.
27. logos 211 07.09.12 09:27 Сейчас в теме
Как мы видим идёт левый джойн таблицы _Document173_VT4267 (это табличная часть) с таблицей _Document173 (это шапка документа) по реквизиту _IDRRef. А уже по реквизиту шапки идёт условие WHERE (T2._Fld4202RRef = @P1)
35. OksDallas 22 02.03.18 08:28 Сейчас в теме
Следующий запрос
	"ВЫБРАТЬ
	|	СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже­.ФизЛицо КАК ФизЛицо
	|ИЗ
	|	Документ.СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ.ЗаписиОСтаже КАК СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже­
	|ГДЕ
	|	СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже­.Ссылка = &ДокСЗВСТАЖ
	|
	|УПОРЯДОЧИТЬ ПО
	|	ФизЛицо
	|АВТОУПОРЯДОЧИВАНИЕ";
Показать

Не хочет давать табличную часть ЗаписиОСтаже. Выходит пустой результат. Ссылка на документ в ДокСЗВСТАЖ правильная, потому как прекрасно выбирается из табличной части РаботникиОрганизации того же документа. Пробовала через универсальный отчет - та же картина, табличную часть ЗаписиОСтаже не отображает. В чем может быть проблема?
36. catena 110 02.03.18 08:40 Сейчас в теме
Строго две причины: в табличной части нет данных или неправильная установка параметра.
37. OksDallas 22 02.03.18 08:58 Сейчас в теме
(36)Еще раз протестила - не работает именно на одном документе (он большой - больше 2000 записей в части РаботникиОрганизации, на каждого работника от 1 до 20 записей о стаже), на маленьких документах работает.
38. OksDallas 22 02.03.18 08:59 Сейчас в теме
ТаблицаЗначений (которая запрос.выполнить.выгрузить) формируется, колонки создаются, а данных нет.
39. catena 110 02.03.18 09:03 Сейчас в теме
(38)Вам сложно помочь. Вы говорите какие-то фантастические вещи, а информации предоставляете очень мало.
Где и как проверяете? "Данных нет" - в таблице, строках таблицы? Сколько строк в получившейся таблице? Как устанавливаете параметр? Как проверяли остальные документы? Тут как у врача, нужны все симптомы и анамнез.
40. OksDallas 22 02.03.18 09:08 Сейчас в теме
В таблице значений 0 строк, колонки имеются.
Запрашиваемый документ выбирается из списка. Документы с записью по 1 человеку срабатывают на "ура".
А если документ на двух работников, то уже не срабатывает.
41. OksDallas 22 02.03.18 09:37 Сейчас в теме
Более подробно в скринах на примере документа для двух сотрудников. Пока в этом же документе был только один сотрудник - табличная часть ЗаписиОСтаже запросом считывалась правильно.
Прикрепленные файлы:
42. OksDallas 22 02.03.18 09:58 Сейчас в теме
В общем, те документы, которые были проведены до обновления ЗУП до 2.5.129.2 - срабатывают нормально. А если провести заново - вот такая ерунда.
43. tinkerbell 02.03.18 11:00 Сейчас в теме
(42) Теперь сведения о стаже хранятся не в табличной части документа СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ, а в регистре сведений ЗаписиСтраховогоСтажа. При перепроведении, соответственно, данные из ТЧ записываются в регистр, а из ТЧ удаляются.
44. catena 110 02.03.18 11:02 Сейчас в теме
Ну, т.е. как я и говорила сразу, в таблице нет данных.
46. tinkerbell 02.03.18 11:16 Сейчас в теме
(44) Думаю, автора вопроса интересовало, в том числе, и куда делись данные и откуда их теперь добыть. А так ваш ответ - практически универсальный ответ на вопрос "Почему не работает запрос?"
47. catena 110 02.03.18 11:17 Сейчас в теме
(46)Автор спросил "в чем может быть проблема". Я сообщила два момента, которые и надо было проверить.
45. OksDallas 22 02.03.18 11:07 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот