К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Как правильно реализовать выборку из документа

Гость
0 - 07.02.2019 - 09:45
Подскажите пожалуйста алгоритм или идею в решении такого вопроса.
Есть документ с табличной частью(ТЧ) , допустим товары типа справочник Номенклатура. В ТЧ может быть и элементы и группы. Нужно эффективно получить таблицу значений имеющую поля "Номер документа/ссылка" и "Товары". При чем, если это группа, то должны быть выбраны элементы группа, а просты элементы из ТЧ добавлены.
Как пример.
Т.е. имеем документ №111 В ТЧ его группа "Чайники" и элемент "Лампочка 100ВТ". В группе "Чайники" находятся товары как Чайник1, Чайник2, Чайник 3.
Я хочу получить следующую таблицу :
111 Чайник1
111 Чайник2
111 Чайник3
111 Лампочка 100ВТ
Делал так, но считаю это извратом. Может есть эффективный и красивый алгоритм.

ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ ТЗ_Бонусы
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
И НЕ Номенклатура.ПометкаУдаления
И Номенклатура.Ссылка В ИЕРАРХИИ
(ВЫБРАТЬ
СоглашенияСКонтрагентамиГруппыБонуса.Номенклатура
ИЗ
Документ.СоглашенияСКонтрагентами.ГруппыБонуса КАК СоглашенияСКонтрагентамиГруппыБонуса
);

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СоглашенияСКонтрагентамиГруппыБонуса.Номенклатура,
СоглашенияСКонтрагентамиГруппыБонуса.Ссылка
ПОМЕСТИТЬ ТЗ
ИЗ
Документ.СоглашенияСКонтрагентами.ГруппыБонуса КАК СоглашенияСКонтрагентамиГруппыБонуса
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Товары.Ссылка КАК Ссылка,
ТЗ.Ссылка КАК Ссылка1
ПОМЕСТИТЬ ТЗ_Согл
ИЗ
ТЗ КАК ТЗ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
ПО (Товары.Ссылка В ИЕРАРХИИ
(ВЫБРАТЬ
СоглашенияСКонтрагентамиГруппыБонуса.Номенклатура
ИЗ
Документ.СоглашенияСКонтрагентами.ГруппыБонуса КАК СоглашенияСКонтрагентамиГруппыБонуса))
ГДЕ
НЕ Товары.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ТЗ_Бонусы.Ссылка КАК Товар,
ТЗ_Согл.Ссылка1 КАК Соглашение,
ТЗ_Согл.Ссылка1.КонтрагентБонуса КАК КонтрагентБонуса,
ТЗ_Согл.Ссылка1.ДоговорБонуса КАК ДоговорБонуса
ИЗ
ТЗ_Бонусы КАК ТЗ_Бонусы
ЛЕВОЕ СОЕДИНЕНИЕ ТЗ_Согл КАК ТЗ_Согл
ПО ТЗ_Бонусы.Ссылка = ТЗ_Согл.Ссылка

УПОРЯДОЧИТЬ ПО
Товар
АВТОУПОРЯДОЧИВАНИЕ

1.запросом вытащил чисто Товары для ТЧ , но без привязки к документу.
2.запрос- вытащил ТЧ из докумнета как она есть с привязкой к документу.
3. запрос-соединил ТЧ документа со справочником Номенклатура как в 1-ом запросе, только там было через условие, а это как условие связи.
4.запросом соединяем 1-запрос, элементы номенклатуры документа с документом, чтобы вытащить контрагента и договор документа.
Результат правильный, но что-то мне говорит, что это кривой путь.Но ничего красивого в голову не приходит...



Гость
1 - 07.02.2019 - 14:25
Будь проще

ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
&ДокСсылка
ИЗ
Справочник.Номенклатура КАК Товары
ГДЕ
Товары.Ссылка В ИЕРАРХИИ
(ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Номенклатура
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка = &ДокСсылка)
И НЕ Товары.ЭтоГруппа
Гость
2 - 07.02.2019 - 14:28
Фишка в том что условие "в иерархии" истинно не только для выражения"Элемент в иерархии ВышестоящаяГруппа" но и для "Элемент в иерархии Элемент"
Гость
3 - 07.02.2019 - 15:52
Огромное спасибо! Очень лихо! :)
Гость
4 - 13.02.2019 - 09:32
Еще подвопрос возник.
Ответ выше был по одному документу. А как вытащить номенклатуру для нескольких документов.
Понятно что есть вариант загнать в цикл этот код и передавать через параметры ссылку, доставая данные по каждому документу.
А нет варианта как то сразу запросами получить по нескольким документам информацию.
Чтобы на выходе получилось
Документ 1 Товар1
Документ 1 Товар2
..................
Документ 1 ТоварN
Документ 2 Товар1
Документ 2 Товар2
..................
Документ 2 ТоварN

Спасибо!
Гость
5 - 13.02.2019 - 13:54
(4) изврат. Можно покрутить СКД на эту тему. Но лучше перепроектировать структуры данных
Гость
6 - 13.02.2019 - 14:17
а что за группы товаров в табличной части документа ? что. зачем и почему такое ?
Гость
7 - 13.02.2019 - 18:08
6-USSR > Есть документы "Расходная накладная" с табличной частью "Бонусы" с реквизитом Номенклатура типа "Справочник. Номенклатура"(могут быть и элементы и группы). Нужно выбрать такие документы "Соглашения" у которых есть такая номенклатура и по номенклатуре привязать товар-соглашение
Товар1 Соглашение1
товар2 Соглашение1
.................
товар3 Соглашение2
товар4 Соглашение2

При чем товары в соглашениях будут разные и не совпадать, поэтому привязка будет уникальная.
Тут ситуация осложняется тем, что как в Расходной таки в Соглашениях могут быть и группы и элементы Номенклатуры. Поэтому чтобы привязать в Расходной группу с Соглашениями достаточно чтобы хоть один элемент из группы(для Расходной) был в этой группы(у Соглашения).(т.е. привязять по родителю группы) . ну а элементы уже по элементам. Вот такое вот извращение. Связать разными подзапросами можно то разными способами. А вот можно ли одними запросами, без всяких циклов и т.п. ?
Гость
8 - 13.02.2019 - 18:20
(7) перепроектируй!
При чем товары в соглашениях будут разные и не совпадать, поэтому привязка будет уникальная. Это чем-то кроме честного слова пользователей обеспечивается? При изменении иерархии справочника что происходит? Когда группу "Ботинки" перенесут в группу "Холодильники"?


К списку вопросов






Copyright ©, Все права защищены