Запрос к табличной части документа поступления
По теме из базы знаний
- Еще один взгляд на проблему «жизнь без последовательностей». Часть вторая (практическая)
- Заполнение табличных частей результатом произвольного запроса (для управляемых форм)
- Расширенная установка цен номенклатуры по документу Поступление товаров и услуг и подбору
- Склады в табличной части. Расширение для 1С:Бухгалтерия Предприятия 3.0
- Работа с запросами. Получение последней цены товара из табличной части документа. Несколько вариантов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ВЫБРАТЬ Ссылка
ИЗ Документ.ПоступлениеТоваровУслуг шапка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК Строки
ПО шапка.Ссылка = Строки.Ссылка
ГДЕ НЕ Строки.Номенклатура ЕСТЬ NULL
Где-то так.
Ну и условия на документы - по дате и проведённости, если нужно
ИЗ Документ.ПоступлениеТоваровУслуг шапка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК Строки
ПО шапка.Ссылка = Строки.Ссылка
ГДЕ НЕ Строки.Номенклатура ЕСТЬ NULL
Где-то так.
Ну и условия на документы - по дате и проведённости, если нужно
(2)?? Зачем соединять?. Сразу бери табличную часть
Типа такого:
Типа такого:
ВЫБРАТЬ
ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугОборудование.Ссылка
сделала вот так в итоге:
спасибо всем за варианты)
Запрос.Текст ="ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.ВидОперации как ВидОперации
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
| ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугОборудование.Ссылка
|И ПоступлениеТоваровУслугОборудование.НомерСтроки = 1
|ГДЕ
|
| ПоступлениеТоваровУслуг.Организация = &Организация
| И ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации
| И ПоступлениеТоваровУслугОборудование.Ссылка ЕСТЬ НЕ NULL"
Показать| ПоступлениеТоваровУслуг.Ссылка,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.ВидОперации как ВидОперации
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
| ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугОборудование.Ссылка
|И ПоступлениеТоваровУслугОборудование.НомерСтроки = 1
|ГДЕ
|
| ПоступлениеТоваровУслуг.Организация = &Организация
| И ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации
| И ПоступлениеТоваровУслугОборудование.Ссылка ЕСТЬ НЕ NULL"
спасибо всем за варианты)
+(9)
ВЫБРАТЬ
ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
ГДЕ
ПоступлениеТоваровУслугОборудование.Ссылка.Организация = &Организация
И ПоступлениеТоваровУслугОборудование.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугОборудование.Ссылка
Показать
(5) bluntschi,
Так намного более по фэн шую.
Запрос.Текст ="ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.ВидОперации как ВидОперации
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
| ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугОборудование.Ссылка
|И ПоступлениеТоваровУслугОборудование.НомерСтроки = 1
|ГДЕ
|
| ПоступлениеТоваровУслуг.Организация = &Организация
| И ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации"
ПоказатьТак намного более по фэн шую.
Можно по виду операции
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
ПоступлениеТоваровУслуг.ВидОперации = &ВидОперации
Запрос.УстановитьПараметр("ВидЛперации",Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Оборудование);
Показать ПоступлениеТоваровУслугОборудование.Ссылка.Организация
в запросе уже делает джойн с таблицей, путём обращения через точку. Реквизит типа "ссылка" содержит только GUID, у него нет никаких реквизитов типа "Организация" итд. Чтобы получить объект, имеющий эти реквизиты, нужно найти в таблице шапки документа запись с этим GUID и уже оттуда можно подтянуть ссылку на организацию. И так везде, не злоупотребляйте обращениями через точку в запросе ;)
(18) bluntschi,
Не то, что опасный, просто однофигственно делается джойн, ток он завуалирован под виртуальными таблицами запросов 1С. ИМХО лучше понимать КАК оно работает, чем бездумно пользоваться корявками предоставленными для удобства. В этом случае - ничего страшного не будет, а так из-за неудачного запроса может сильно просесть производительность.
Не то, что опасный, просто однофигственно делается джойн, ток он завуалирован под виртуальными таблицами запросов 1С. ИМХО лучше понимать КАК оно работает, чем бездумно пользоваться корявками предоставленными для удобства. В этом случае - ничего страшного не будет, а так из-за неудачного запроса может сильно просесть производительность.
Вот это трансформируется
вот в это
ВЫБРАТЬ
ПоступлениеТоваровУслугОборудование.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
ГДЕ
ПоступлениеТоваровУслугОборудование.Ссылка.Организация = &Организация
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугОборудование.Ссылка
Показатьвот в это
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
А вот запрос с джойном.
Как видим разница косметическая, потому что в отличие от парсера запроса 1С я могу предполагать, что у табличной части должна быть шапка и ставлю INNER JOIN.
ВЫБРАТЬ ПЕРВЫЕ 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.
(30) IT_PROGRAMMIST, Интересно, даже планы совпадают в этом случае для левого и внутреннего соединения, время исполнения тоже одно. С другой стороны, думаю все эти данные и их индексы оказались в кэше и выборка нерепрезентативная. Если был резок, прошу прощения. Хватит стартмани набивать :)
Ссылка - это значение, однозначно характеризующее объекты базы данных. По поводу производительности : не думаю,что соединением работать будет быстрее(а даже если и будет, то автору просто нужно вывести доки с заполненной таб частью). Здесь никто не говорит про сложный расчет себестоимости, при котором нужно взвешивать все возможные варианты при которых мы проиграем хоть доли секунды.
(24) IT_PROGRAMMIST,
Ссылка - это GUID, 0x81E6000C29845BA011E12618A9208703 вот такого вида выражение. Никаких других данных он больше не содержит, все представления в виде кода, наименования, в виде "Поступление товаров и услуг № ХХХ от УУ.УУ.УУУУ УУ:УУ:УУ" это результат чтения дополнительных данных из соответствующих таблиц. Прошу прощения за банальности и ликбез.
Ссылка - это значение, однозначно характеризующее объекты базы данных.
Ссылка - это GUID, 0x81E6000C29845BA011E12618A9208703 вот такого вида выражение. Никаких других данных он больше не содержит, все представления в виде кода, наименования, в виде "Поступление товаров и услуг № ХХХ от УУ.УУ.УУУУ УУ:УУ:УУ" это результат чтения дополнительных данных из соответствующих таблиц. Прошу прощения за банальности и ликбез.
Следующий запрос
Не хочет давать табличную часть ЗаписиОСтаже. Выходит пустой результат. Ссылка на документ в ДокСЗВСТАЖ правильная, потому как прекрасно выбирается из табличной части РаботникиОрганизации того же документа. Пробовала через универсальный отчет - та же картина, табличную часть ЗаписиОСтаже не отображает. В чем может быть проблема?
"ВЫБРАТЬ
| СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже .ФизЛицо КАК ФизЛицо
|ИЗ
| Документ.СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ.ЗаписиОСтаже КАК СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже
|ГДЕ
| СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖЗаписиОСтаже .Ссылка = &ДокСЗВСТАЖ
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо
|АВТОУПОРЯДОЧИВАНИЕ";
ПоказатьНе хочет давать табличную часть ЗаписиОСтаже. Выходит пустой результат. Ссылка на документ в ДокСЗВСТАЖ правильная, потому как прекрасно выбирается из табличной части РаботникиОрганизации того же документа. Пробовала через универсальный отчет - та же картина, табличную часть ЗаписиОСтаже не отображает. В чем может быть проблема?
(38)Вам сложно помочь. Вы говорите какие-то фантастические вещи, а информации предоставляете очень мало.
Где и как проверяете? "Данных нет" - в таблице, строках таблицы? Сколько строк в получившейся таблице? Как устанавливаете параметр? Как проверяли остальные документы? Тут как у врача, нужны все симптомы и анамнез.
Где и как проверяете? "Данных нет" - в таблице, строках таблицы? Сколько строк в получившейся таблице? Как устанавливаете параметр? Как проверяли остальные документы? Тут как у врача, нужны все симптомы и анамнез.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот