Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Номенклатура и её родители          
Bon Jovi Подменю пользователя
сообщение 04.08.20, 12:37
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Нужно запросом получить номенклатуру, родитель которой (или родитель родителя, или родитель родителя родителя и т.д.) имеет установленную галка (некий признак). В инете много тем есть о получении всех родителей номенклатуры (через Итоги по только иерархия), но как наложить условие (отбор)?

denis84 Подменю пользователя
сообщение 04.08.20, 13:31
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

Bon Jovi @ Сегодня, 13:37 * ,
[необходимо зарегистрироваться для просмотра ссылки]

[необходимо зарегистрироваться для просмотра ссылки]

Добавить в условии что - то типа того
                   
                |ГДЕ
                | Номенклатура.Признак = &ТекущийЭлементНоменклатуры";

                  Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", Признак);

Bon Jovi Подменю пользователя
сообщение 04.08.20, 14:50
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

denis84 @ Сегодня, 14:31 * ,
Мне признак нужен не как параметр, а как Истина (всегда). А если его задать в условии как вы написали, то он будет фильтровать только по прямому родителю номенклатуры и поэтому не покажет номенклатуру, у которой (грубо говоря) родитель.родитель.родитель имеет признак истина.

Плюс мне также не подходит вариант, где количество уровней иерархии ограничено (не подходит вариант: номенклатура.родитель.родитель.родитель и т.д.)

Вариант с "Итоги по только иерархия" показывает очень подробно что я хочу:

1 - Л
1.1 - И
1.1.1
1.1.2
1.2 - Л
1.2.1
2 - И
2.1 - Л
2.1.1

И если правильно наложить условие (отбор), то должны остаться:

1.1.1
1.1.2
2.1.1

Vofka Подменю пользователя
сообщение 04.08.20, 15:10
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Обычно уровень вложенности номенклатуры заранее известный, поэтому можно в запросе сразу выбрать всех родителей и сделать соответствующее условие.

|ВЫБРАТЬ
|   Номенклатура.Ссылка
|   Номенклатура.Родитель,
|   Номенклатура.Родитель.Родитель,
|   Номенклатура.Родитель.Родитель.Родитель
|ГДЕ
|   Номенклатура.Родитель.МойПризнак = 1
|   ИЛИ Номенклатура.Родитель.Родитель.МойПризнак = 1
|   ИЛИ Номенклатура.Родитель.Родитель.Родитель.МойПризнак = 1


Если хочется универсально, можно программно узнать сколько уровней вложенности может быть в справочнике и сгенерировать текст запроса программно.

Bon Jovi Подменю пользователя
сообщение 04.08.20, 15:59
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

Vofka @ Сегодня, 16:10 * ,
Согласен. Уровень заранее известен, но нужно сделать универсально и не программно, а сразу запросом. На сколько я знаю, это возможно и довольно просто. Вот только прийти к этому не получается.

Получилось решить следующим образом:
1) отбираю все существующие родители с признаком Истина и помещаю их в ВТ
2) во втором пакете задаю условие : КакойТоОбъект.Родитель В ИЕРАРХИИ (Выбрать ВТ.Родитель Из ВТ)

volodya1122 Подменю пользователя
сообщение 05.08.20, 11:06
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

Цитата(Bon Jovi @ 04.08.20, 16:59) *
Согласен. Уровень заранее известен, но нужно сделать универсально и не программно, а сразу запросом


Так это все и будет запросом (програмно)
Вот как-то так можно сформировать запрос (добавить до того что предложил Vofka

ВсегоУровней=99999;
Если Метаданные.Справочники.МойСправочник.ОграничиватьКоличествоУровней  тогда
ВсегоУровней= Метаданные.Справочники.МойСправочник.КоличествоУровней;
КонецЕсли;
// запрос
|ГДЕ
|   Номенклатура.Родитель.МойПризнак = 1";

ДобавкаЗапроса="|   ИЛИ Номенклатура.";
Суфикс="";
Если ВсегоУровней>1 тогда
    Для уровней=2 по ВсегоУровней цикл
        Суфикс=Суфикс+"Родитель.";
        Запрос.Текст = Запрос.Текст + Символы.ПС+"
        ДобавкаЗапроса+Суфикс+"МойПризнак = 1 ";
    КонецЦикла;
КонецЕсли;


Сообщение отредактировал volodya1122 - 05.08.20, 11:09

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 20:08
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!