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

Новая тема
Показывать по 10 20 40 сообщений
Текстовый. И в свойствах реквизита установлены Сортировка и Отбор по реквизиту.
"Да. Сначала я пробовала СпрМК.ВыбратьЭлементыПоРеквизиту("Ведомость", "вп", 1,0);  Элементы из группы выбирает, но только если они не в подгруппах этой группы. В подгруппах - никак. А если СпрМК.ВыбратьЭлементы(); а потом через Если СпрМК.Ведомость = "вп" Тогда  выдает пустые строки."
Может надо:
Если СокрЛП(СпрМК.Ведомость) = "вп" Тогда
у реквизита "ведомость" длина 2?
если нет, то для сравнения как минимум надо использовать СокрЛП(СпрМК.Ведомость).
а метод Использовать Родителя() срабатывает вроде только на первый уровень вложения, вам бы лучше тогда пользовать ПринадлежитГруппе
"У реквизита "Ведомость" длина 10. Я попробовала использовать СокрЛП(СпрМК.Ведомость), не получается. Если использовать ВыбратьЭлементы() и далее сравнение, то выводит пустые строки. Да, метод ИспользоватьРодителя() срабатывает только на первый уровень, но вся беда в том, что без этого метода вообще ничего не выходит, даже если использовать метод ПринадлежитГруппе(). Я их и "оптом" применяла, все равно никак. СпрМК.ВыбратьЭлементыПоРеквизиту("Ведомость", "вп", 1,0);  выводит нужные данные, но только с первого уровня. Может, до всех уровней "докопаться" невозможно?"
"
Процедура Сформировать()
  Если Выбор1.Выбран() = 0 Тогда
     Предупреждение("Выберите узел!");
     Возврат;
  КонецЕсли;

  Таб = СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("Ведомость");
  Таб.ПовторятьПриПечатиСтроки(3,4);
  Таб.ВывестиСекцию("Шапка");
  ТекстЗапроса="МашиноКомплект=Справочник.МашиноКомплекты.ТекущийЭлемент;
               |Ведомость=Справочник.МашиноКомплекты.Ведомость;
               |Условие((МашиноКомплект.ПринадлежитГруппе(Выбор1)=1) И (СокрЛП(МашиноКомплект.Ведомость)=""""вп""""));
               |Группировка МашиноКомплект упорядочить по МашиноКомплект.Наименование;";

  Запрос=СоздатьОбъект("Запрос");
  Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
     Сообщить("Ошибка выполнения запроса");
     Возврат;
  Иначе
     НомерСтроки = 0;
     Пока Запрос.Группировка(1)=1 Цикл
        НомерСтроки = НомерСтроки + 1;
        МашиноКомплект=Запрос.МашиноКомплект;
        Обозначение = МашиноКомплект.Номенклатура;
        Номенклатура = МашиноКомплект.Номенклатура.Обозначение;
        Входимость = МашиноКомплект.Родитель.ПолноеНаименование();
        НаИзделие = МашиноКомплект.Норма;
        Всего = МашиноКомплект.ВсегоНаМашину;

        Если МашиноКомплект.ЭтоГруппа() = 1 Тогда
           Таб.ВывестиСекцию("Группа");
        Иначе
           Таб.ВывестиСекцию("Строка");
        КонецЕсли;
     КонецЦикла;
  КонецЕсли;

  Таб.ВывестиСекцию("Подвал");
  Таб.ТолькоПросмотр(1);
  Таб.Опции(0,0,0,0);
  Таб.ПараметрыСтраницы(2,100,1,10,10,10,10,10,10,1,0);
  Таб.Показать("Ведомость покупных","""");
  Выбор1 = 0;
КонецПроцедуры
"
все-таки запрос. а так по всей иерархии будет выводить?
Да, по любым уровням вложенности, и кроме того будет так:
Если где то глубоко в структуре попадется элемент, для которого указано Ведомость="вп" (не приветствую строковые отборы, но что есть, то есть), то в результат запроса попадет вся структура родителей этого элемента. Если это не надо, надо поменять текст запроса добавив "без групп".

Единственный минус в алгоритме, видимо то, что если, скажем, Выбор1 - не является группой первого уровня, то в результат запроса попадет и сам Выбор1 (хотя он по любому попадет) и его родители. Но это уже можно на этапе перебора результата запроса отсеивать.
Thorvardr, огромнейшее Вам спасибо за запрос!
Всем-всем-всем спасибо за советы!
Читают тему
(гостей: 1)

Быстрый переход