Всем привет.
Можно ли связать документы в запросе не используя критерий отбора?
Суть в следующем: все документы одного типа, документ может включать в себя ссылку на другой документ.
В результате запрос надо получить дерево вида:
Основной документ
|_Документы ссылающиеся на основной документ.
Можно ли связать документы в запросе не используя критерий отбора?
Суть в следующем: все документы одного типа, документ может включать в себя ссылку на другой документ.
В результате запрос надо получить дерево вида:
Основной документ
|_Документы ссылающиеся на основной документ.
Прикрепленные файлы:
По теме из базы знаний
- Временные таблицы, отбор по нескольким составным ключам в запросе.
- Работа со схемой запроса
- СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
- Три способа создания одного отчета на СКД
- История одного админа в мире 1С. Как поиски причины тормозов 1С привели к созданию нового продукта
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(13) Вот запрос - обходи его и создавай дерево - или допиши итоги и выгрузи результат запроса в дерево
ВЫБРАТЬ
Т1.Заявка КАК Родитель
, Т2.Заявка КАК Подчиненная
ИЗ
(
ВЫБРАТЬ
Т.Ссылка КАК Заявка
ИЗ
Документ.БЗ_ЗаявкаПокупателя КАК Т
ГДЕ
Т.ОсновнаяЗаявка = ЗНАЧЕНИЕ(Документ.БЗ_ЗаявкаПокупателя.ПустаяСсылка)
) КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ
(
ВЫБРАТЬ
Т.Ссылка КАК Заявка
, Т.ОсновнаяЗаявка КАК ОсновнаяЗаявка
ИЗ
Документ.БЗ_ЗаявкаПокупателя КАК Т
ГДЕ
Т.ОсновнаяЗаявка = ЗНАЧЕНИЕ(Документ.БЗ_ЗаявкаПокупателя.ПустаяСсылка)
) КАК Т2
ПО Т1.Ссылка = Т2.ОсновнаяЗаявка
Показать
Тогда проще всего:
1. Создаем временную таблицу из документов с незаполненным реквизитом "РодительскийДокумент" (или как он там называется?). Это будет верхний уровень
2. Во втором запросе пакета отбираем документы, не входящие в первую таблицу со внутренним соединением со временной таблицей из 1-го запроса пакета.
3. Итоги запроса - по реквизиту "РодительскийДокумент" - это если выводить вручную. Если в СКД - тогда помучиться придется
Понятно, или подробнее надо?
1. Создаем временную таблицу из документов с незаполненным реквизитом "РодительскийДокумент" (или как он там называется?). Это будет верхний уровень
2. Во втором запросе пакета отбираем документы, не входящие в первую таблицу со внутренним соединением со временной таблицей из 1-го запроса пакета.
3. Итоги запроса - по реквизиту "РодительскийДокумент" - это если выводить вручную. Если в СКД - тогда помучиться придется
Понятно, или подробнее надо?
(8) Я вот пытаюсь у себя в голове совместить эти утверждения:
и
и что-то у меня плохо получается их совместить.... Наверно чего-то не понимаю...
Давай еще раз уточним: надо выводить все документы, или документы только с подчиненными?
И как планируешь выводить: через обходы результата запроса или через СКД?
В таком случае будет выводится итог по документам у которых нет подчиненных связей, а этого не надо.
и
а если у документа нет подчиненных?
и что-то у меня плохо получается их совместить.... Наверно чего-то не понимаю...
Давай еще раз уточним: надо выводить все документы, или документы только с подчиненными?
И как планируешь выводить: через обходы результата запроса или через СКД?
(14) Тогда во 2-й запрос пакета добавить объединение со временной таблицей из 1-го запроса. Что-то типа такого:
Упорядочивать по дате.
При обходе детальных записей проверять заполненность ссылки документа. Если не заполнена - прерывать цикл по детальным записям
ВЫБРАТЬ
ВЫБРАТЬ
Док.РодительскийДокумент,
Док.Ссылка
ИЗ Документ.ЗаявкаПокупателя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РодДокументы
ПО ВТ_РодДокументы.Ссылка = Док.РодительскийДокумент
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_РодДокументы.Ссылка,
NULL
ИЗ ВТ_РодДокументы
УПОРЯДОЧИТЬ ПО
Док.РодительскийДокумент.Дата,
isnull(Док.Ссылка.Дата, ДАТАВРЕМЯ(1,1,1))
ПоказатьУпорядочивать по дате.
При обходе детальных записей проверять заполненность ссылки документа. Если не заполнена - прерывать цикл по детальным записям
(15) Сейчас я делаю так:
Получаю результат, как на рисунке.
Вопрос в том, можно ли получить такой же результат, только одним запросом.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БЗ_ЗаявкаПокупателя.Ссылка КАК Заявка,
| БЗ_ПодчиненныеЗаявки.Ссылка КАК ЗаявкаПодчиненная
|ИЗ
| Документ.БЗ_ЗаявкаПокупателя КАК БЗ_ЗаявкаПокупателя
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БЗ_ЗаявкаПокупателя КАК БЗ_ПодчиненныеЗаявки
| ПО БЗ_ЗаявкаПокупателя.Ссылка = БЗ_ПодчиненныеЗаявки.Ссылка.ОсновнаяЗаявка
| И (БЗ_ПодчиненныеЗаявки.ВключитьвЗаявку)
|ГДЕ
| НЕ БЗ_ЗаявкаПокупателя.ВключитьвЗаявку
|ИТОГИ ПО
| Заявка";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ДеревоЗначений = РеквизитФормыВЗначение("СписокДокументов");
ДеревоЗначений.Строки.Очистить();
Пока ВыборкаСсылка.Следующий() Цикл
Корень = ДеревоЗначений.Строки.Добавить();;
Корень.Заявка = ВыборкаСсылка.Заявка;
ВыборкаДетальныеЗаписи = ВыборкаСсылка.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.ЗаявкаПодчиненная <> NULL Тогда
ПодчиненаяСтрока = Корень.Строки.Добавить();
ПодчиненаяСтрока.Заявка = ВыборкаДетальныеЗаписи.ЗаявкаПодчиненная;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПоказатьПолучаю результат, как на рисунке.
Вопрос в том, можно ли получить такой же результат, только одним запросом.
Прикрепленные файлы:
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот