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) перепроектируй! При чем товары в соглашениях будут разные и не совпадать, поэтому привязка будет уникальная. Это чем-то кроме честного слова пользователей обеспечивается? При изменении иерархии справочника что происходит? Когда группу "Ботинки" перенесут в группу "Холодильники"? | |
| Интернет-форум Краснодарского края и Краснодара |