Пакетный запрос, на выборку главную группировку номенклатуры
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Добрый день помогите разобраться с проблемой, из регистра бухгалтерии получаю остатки товара, но есть сложность надо выводить первую группировку товара, то есть без подгрупп. Написал пакетный запрос, в временной таблице получаю родителя, но не знаю как связать полученный родитель номенклатуры с остатками номенклатуры чтобы выводило нужное поле.
ВЫБРАТЬ
Номенклатура.Наименование КАК Родитель
ПОМЕСТИТЬ Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = &Родитель
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Наименование КАК Наименование,
ХозрасчетныйОстатки.Субконто1.Артикул КАК Артикул,
ХозрасчетныйОстатки.КоличествоОстаток,
Номенклатура.Родитель
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки,
Номенклатура КАК Номенклатура
Связи не указывал пока вывод бред, меня интересует вопрос, могу ли я выяснить главную группу, если не известен уровень вложенности?
ВЫБРАТЬ
Номенклатура.Наименование КАК Родитель
ПОМЕСТИТЬ Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = &Родитель
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Наименование КАК Наименование,
ХозрасчетныйОстатки.Субконто1.Артикул КАК Артикул,
ХозрасчетныйОстатки.КоличествоОстаток,
Номенклатура.Родитель
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки,
Номенклатура КАК Номенклатура
Связи не указывал пока вывод бред, меня интересует вопрос, могу ли я выяснить главную группу, если не известен уровень вложенности?
По теме из базы знаний
Найденные решения
(50) nogik, еще один рабочий вариант:
Запрос1=Новый Запрос;
Запрос1.Текст="ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Ссылка,
| СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК Остаток,
| ХозрасчетныйОстатки.Субконто1.Родитель КАК Родитель
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Субконто1";
Запрос1.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);
ЗАпрос1.УстановитьПараметр("Дата",ТекущаяДата());
Табл=Запрос1.Выполнить().Выгрузить();
Для Каждого СтрОстаток из Табл Цикл
Родитель=СТрОстаток.Ссылка.Родитель;
Пока Родитель.Уровень()>0 Цикл
Родитель=Родитель.Родитель;
КонецЦикла;
СтрОстаток.Родитель=Родитель;
КонецЦикла;
Табл.ВыбратьСтроку();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7) tolyan_ekb, мне нужны остатки по номенклатуре но если есть Группа главная например Группа 1, затем идёт подгруппа Группа 2, и в этой группе есть номенклатура соответственно у это номенклатуры будет родитель Группа 2, а мне нужна эта номенклатура только чтобы у неё родитель был главный то есть Группа 1.
Как то сложно, почему не выбрать сразу:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Родитель КАК Группа,
Сумма(ХозрасчетныйОстатки.КоличествоОстаток) Как Остаток,
Номенклатура.Родитель
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки,
Номенклатура КАК Номенклатура Группировать ХозрасчетныйОстатки.Субконто1.Родитель
ВЫБРАТЬ
Номенклатура.Наименование КАК Родитель
ПОМЕСТИТЬ Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = &Родитель
И НЕ Номенклатура.ЭтоГруппа
Вот, так получите только элементы из папки Родитель, потом привязывайте не по родителю, а именно по элементам из родителя (элементы без групп)
Номенклатура.Наименование КАК Родитель
ПОМЕСТИТЬ Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = &Родитель
И НЕ Номенклатура.ЭтоГруппа
Вот, так получите только элементы из папки Родитель, потом привязывайте не по родителю, а именно по элементам из родителя (элементы без групп)
А если по синтаксису, то:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Родитель,
СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В Иерархии (&Счет), , ) КАК ХозрасчетныйОстатки
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстатки.Субконто1.Родитель
ВЫБРАТЬ
Номенклатура.Ссылка
ПОМЕСТИТЬ Вт_Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = &Родитель
И НЕ Номенклатура.ЭтоГруппа
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Артикул КАК Артикул,
ХозрасчетныйОстатки.КоличествоОстаток,
Вт_Номенклатура.Ссылка,
ХозрасчетныйОстатки.Субконто1
ИЗ
Вт_Номенклатура КАК Вт_Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки
ПО Вт_Номенклатура.Ссылка = ХозрасчетныйОстатки.Субконто1
ПоказатьНе правда, только что проверил в консоле запросов, все так, Например, естбь папка, в ней номенклатура (элелементы и папки), у меня отбирает только элементы, вот этот запрос только что проверил
(17) deniseek77, простите что ввёл вас в заблуждение мне нужны остатки по всем группам товаров, то есть ориентироваться на регистр хозрасчетный.остатки, может быть просто сделать запрос по остаткам и в цикле перебора запроса определять группу главную, только пока не знаю как реализовывать это.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Родитель
ПОМЕСТИТЬ Вт_Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.КоличествоОстаток,
ХозрасчетныйОстатки.Субконто1
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки,
Вт_Номенклатура КАК Вт_Номенклатура
ГДЕ
ХозрасчетныйОстатки.Субконто1.Родитель В (Вт_Номенклатура.Ссылка)
Пойдет? Выбираем только верхние группы у которых нет родителя. Потом соединяем с условием, что родитель у субконто в ранее выбранной таблице.
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Родитель
ПОМЕСТИТЬ Вт_Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.КоличествоОстаток,
ХозрасчетныйОстатки.Субконто1
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки,
Вт_Номенклатура КАК Вт_Номенклатура
ГДЕ
ХозрасчетныйОстатки.Субконто1.Родитель В (Вт_Номенклатура.Ссылка)
Пойдет? Выбираем только верхние группы у которых нет родителя. Потом соединяем с условием, что родитель у субконто в ранее выбранной таблице.
(28) на том что в первой таблице у вас получится Таблица элементов первого уровня, а как вы проверите что Субконто1 принадлежит конкретному элементу этой таблицы ?
я отвечу - никак.
Для того что б проверить Вам необходимо пробежаться по таблице которую получили и проверить принадлежит или нет для каждого значения.
Ваш второй запрос проверяет что Субконто1 принадлежит Всей таблице первого уровня.
я отвечу - никак.
Для того что б проверить Вам необходимо пробежаться по таблице которую получили и проверить принадлежит или нет для каждого значения.
Ваш второй запрос проверяет что Субконто1 принадлежит Всей таблице первого уровня.
(36) laduk, я сдела дополнение в (21) теперь во временную таблицу выбираются группы. Во втором запросе проверятеся, что родитель нмоенклатуры входит в спсико групп из временной таблицы. В демо базе работает, в моей базе работает.
Вы утверждаете - никак. Странно
Вы утверждаете - никак. Странно
Можно выбрать две таблицы в первую родителей 0 уровня:
Во вторую остатки:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Группа
ПОМЕСТИТЬ Родители
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И Номенклатура.ЭтоГруппа=Истина
ПоказатьВо вторую остатки:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Родитель,
СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В Иерархии (&Счет), , ) КАК ХозрасчетныйОстатки
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстатки.Субконто1.Родитель
Показать
Синтаксис не проверял, но алгоритм рабочий
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
Номенклатура.Ссылка КАК Группа,
0 как Остаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И Номенклатура.ЭтоГруппа=Истина ;
Запрос1=Новый Запрос;
ЗАпрос1.Текст="ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1.Родитель Как Ссылка,
СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК Остаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В Иерархии (&Счет), , ) КАК ХозрасчетныйОстатки
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстатки.Субконто1.Родитель;
Запрос1.УстановитьПараметр("Счет",Счет);
ЗАпрос1.УстановитьПараметр("Дата",Дата);
ТаблРодителей=Запрос.Выполнить.Выгрузить();
Выборка=Запрос1.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
Для каждого Стр из ТаблРодителей Цикл
Если Выборка2.Ссылка.ПринадлежитЭлементу(Стр.Группа) Тогда
Стр.Остаток=Стр.Остаток+Выборка.Остаток;
КонецЦикла;
КонецЦикла;
Показать
Если же вам нужно прост вывести по Выбранной группе остаток, то тут вообще все просто:
ВЫБРАТЬ
СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток,
&Родитель
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет, , ) КАК ХозрасчетныйОстатки
ГДЕ
ХозрасчетныйОстатки.Субконто1 В ИЕРАРХИИ(&Родитель)
(50) nogik, Консоли запросов нет под рукой сейчас, идея такая: 1) Номенклатура- получаем запросом- принцип такой " Где Номенклатура.Родитель.Родитель=Значение(Справочник.Номенклатура.пустаяСсылка)" 2) Группа, которой принадлежит номенклатура "Номенклатура.Родитель.Наименование" 3) Запрос- я писал как получить, ссылку получаете параллельно 1 пункту
(50) Это можно решить несколькими способами:
1) Немного переформатировав мой алгоритм:
1) Немного переформатировав мой алгоритм:
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| Номенклатура.Ссылка КАК Группа
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И Номенклатура.ЭтоГруппа = ИСТИНА";
Запрос1=Новый Запрос;
Запрос1.Текст="ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Ссылка,
| СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК Остаток,
| ХозрасчетныйОстатки.Субконто1.Родитель КАК Родитель
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Субконто1";
Запрос1.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);
ЗАпрос1.УстановитьПараметр("Дата",ТекущаяДата());
ТаблРодителей=Запрос.Выполнить().Выгрузить();
Табл=Запрос1.Выполнить().Выгрузить();
Для Каждого СтрОстаток из Табл Цикл
Для каждого Стр из ТаблРодителей Цикл
Если СтрОстаток.Ссылка.ПринадлежитЭлементу(Стр.Группа) Тогда
СтрОстаток.Родитель=Стр.Группа;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Табл.ВыбратьСтроку();
Показать
(52) Справочник Номенклатура в конфигурациях 1С8 не имеет ограничения по уровням иерархии.
если их допустим не 2 как Вы предполагаете, тогда как : Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель=Значение(Справочник.Номенклатура.пустаяСсылка) ???
если их допустим не 2 как Вы предполагаете, тогда как : Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель=Значение(Справочник.Номенклатура.пустаяСсылка) ???
(50) nogik, еще один рабочий вариант:
Запрос1=Новый Запрос;
Запрос1.Текст="ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Ссылка,
| СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК Остаток,
| ХозрасчетныйОстатки.Субконто1.Родитель КАК Родитель
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Субконто1";
Запрос1.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);
ЗАпрос1.УстановитьПараметр("Дата",ТекущаяДата());
Табл=Запрос1.Выполнить().Выгрузить();
Для Каждого СтрОстаток из Табл Цикл
Родитель=СТрОстаток.Ссылка.Родитель;
Пока Родитель.Уровень()>0 Цикл
Родитель=Родитель.Родитель;
КонецЦикла;
СтрОстаток.Родитель=Родитель;
КонецЦикла;
Табл.ВыбратьСтроку();
Показать
(60) laduk, вот этот вариант больше всего подходит завтра выйду на работу протестирую, у меня более сложная задача стоит, мне надо это всё в Дерево значений запихнуть, а потом по COM подключится ещё к 2 базам получить оттуда остатки и их добавить в Дерево значений чтобы вывести общий отчёт по базам, для чего именно нужна была первый уровень группировки, после вывода отчёта будет формироваться списание остатков по формуле и надо будет по брендам списывать, а бренды это уровень группировки 1 как-то так.
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование,
Номенклатура.Родитель.Родитель,
Номенклатура.Родитель КАК Группа,
Номенклатура.Артикул
ПОМЕСТИТЬ Вт_Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И НЕ Номенклатура.Ссылка.ЭтоГруппа
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.КоличествоОстаток,
Вт_Номенклатура.Ссылка,
ХозрасчетныйОстатки.Субконто1,
Вт_Номенклатура.Группа,
Вт_Номенклатура.Артикул
ИЗ
Вт_Номенклатура КАК Вт_Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , &Субконто, ) КАК ХозрасчетныйОстатки
ПО Вт_Номенклатура.Ссылка = ХозрасчетныйОстатки.Субконто1
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот