Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 апр 2025, 00:45

Обход Дерева Значений по подуровням

Автор Funt432286, 14 ноя 2024, 15:19

0 Пользователей и 1 гость просматривают эту тему.

Максим75

Funt432286, так ТЗ_ПантоныНомераТЗ и то что у Вас в коде - разное.
у Вас УрНомерТЗ = ТЗ_Материал.ПолучитьЭлементы();
т.е. ТЗ_Материал

Funt432286

Максим75, там не правильно был прописан объект,
               
 УрНомерТЗ = ТЗ_ПантоныНомераТЗ.ПолучитьЭлементы();
 Для Каждого СтрТЗ Из УрНомерТЗ Цикл
     УрПантон = СтрТЗ.ПолучитьЭлементы();
     СтрТЗ.СтатусКраски = "1111";                   
     Для Каждого СтрПантон Из УрПантон Цикл
         Если СтрПантон.СсылкаРЗ = ВыбраннаяСтрока.СсылкаРЗ Тогда
                 СтрПантон.СтатусКраски = "1111";
         КонецЕсли;
     КонецЦикла;
  КонецЦикла;

Метод объекта не обнаружен (ПолучитьЭлементы)
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(1035)}: УрНомерТЗ = ТЗ_ПантоныНомераТЗ.ПолучитьЭлементы();

Правильно - ТЗ_ПантоныНомераТЗ, но ошибка такая же

fruitella

Вместо ПолучитьЭлементы() тогда Строки
Для Каждого СтрТЗ Из ТЗ_ПантоныНомераТЗ.Строки Цикл
               
     Для Каждого СтрПантон Из СтрТЗ.Строки Цикл
 
     КонецЦикла;

  КонецЦикла;

Funt432286

fruitella, Спасибо большое, все получилось

Funt432286

Эпопея с ДЗ продолжается!

На форме есть два объекта ДЗ: один заполняется по запросу из базы, а второй должен заполняться из первого, группируя выгрузку по подуровням!

Я закидываю данные из ДЗ в ТабЗначений и потом запросом заполняю вторую ДЗ

// ******* выгрузка дз Пантоны в ТЗ ************
ТабПантоны = Новый ТаблицаЗначений;
ТабПантоны.Колонки.Добавить("НомерТЗ");
ТабПантоны.Колонки.Добавить("КолвоПоПлану");
ТабПантоны.Колонки.Добавить("СтатусЗаказа");

Для Каждого СтрТЗ Из ТЗ_ПантоныНомераТЗ.Строки Цикл
//Если НЕ Прав(СтрТЗ.НомерТЗ, 3) = "-24" Тогда
Для Каждого СтрПантон Из СтрТЗ.Строки Цикл
ТабПантоны.Добавить();
    НомерТЗ = СтрПантон.НомерТЗ;
//КолвоПоПлану =
Сообщить("! СтрТЗ.Строки - " + СтрТЗ.НомерТЗ + " : СтрПантон " + СтрПантон.НомерТЗ);
КонецЦикла;
//КонецЕсли;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст=
"ВЫБРАТЬ
|    *
|ПОМЕСТИТЬ Пантоны
|ИЗ
|    &ТаблицаПантоны КАК Пантоны";
Запрос.УстановитьПараметр("ТаблицаПантоны", ТабПантоны);
Запрос.Выполнить();

ТЗ_Пантоны.Строки.Очистить();

Запрос.Текст=
"ВЫБРАТЬ
|    Пантоны.НомерТЗ КАК НомерТЗ
|ИЗ
|    Пантоны КАК Пантоны
|СГРУППИРОВАТЬ ПО
| Пантоны.НомерТЗ";

ВыборкаКраска = Запрос.Выполнить().Выбрать();

Пока ВыборкаКраска.Следующий() Цикл
стрПантоны = ТЗ_Пантоны.Строки.Добавить();    //строка с названием верхий уровень
стрПантоны.НомерТЗ = ВыборкаКраска.Номенклатура;
//стрПантоны.КолвоПоПлану = ВыборкаКраска.КоличествоПоПлану;
КонецЦикла;

при отладке возникает ошибка
Ошибка при вызове метода контекста (Выполнить)
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(399)}: Запрос.Выполнить();
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(1192)}: ЗагрузкаПоПантонуОфсет();
по причине:
{(5, 5)}: Тип не может быть выбран в запросе
<<?>>&ТаблицаПантоны КАК Пантоны

LexaK

Funt432286, колонкам таблицы
    ТабПантоны = Новый ТаблицаЗначений;
    ТабПантоны.Колонки.Добавить("НомерТЗ");
    ТабПантоны.Колонки.Добавить("КолвоПоПлану");
    ТабПантоны.Колонки.Добавить("СтатусЗаказа");   

необходимо явно задать Тип!

(называется Типизация ТЗ)
если помогло нажмите: Спасибо!

antoneus

А зачем такой изврат с запросом, если тз можно просто свернуть?

Funt432286

выгрузить данные во Временную таблицу получилось,

При формировании верхнего уровня с данными из временной таблицы - все ОК,
но когда беру из этой же таблицы данные для формирования подуровня, выдает ошибку!

// ******* выгрузка дз Пантоны в ТЗ ************
ТабПантоны = Новый ТаблицаЗначений;
КвалификаторСтроки = Новый КвалификаторыСтроки(20,ДопустимаяДлина.Фиксированная);
ТабПантоны.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",КвалификаторСтроки));
ТабПантоны.Колонки.Добавить("НомерТЗ", Новый ОписаниеТипов("Строка",КвалификаторСтроки));
ТабПантоны.Колонки.Добавить("КолвоПоПлану", Новый ОписаниеТипов("Число"));
//ТабПантоны.Колонки.Добавить("СтатусЗаказа", Новый ОписаниеТипов("СправочникСсылка.П_СтатусыЗаказов"));

Для Каждого СтрТЗ Из ТЗ_ПантоныНомераТЗ.Строки Цикл
//Если НЕ Прав(СтрТЗ.НомерТЗ, 3) = "-24" Тогда
Для Каждого СтрПантон Из СтрТЗ.Строки Цикл
Таб = ТабПантоны.Добавить();
    Таб.Наименование = СтрПантон.НомерТЗ;
таб.НомерТЗ = СтрТЗ.НомерТЗ;
Таб.КолвоПоПлану = СтрПантон.КолвоПоПлану;
//Сообщить("! СтрТЗ.Строки - " + СтрТЗ.НомерТЗ + " : СтрПантон " + СтрПантон.НомерТЗ);
КонецЦикла;
//КонецЕсли;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст=
"ВЫБРАТЬ
|    Пантоны.Наименование,
|    Пантоны.КолвоПоПлану,
|    Пантоны.НомерТЗ
|ПОМЕСТИТЬ Пантоны
|ИЗ
|    &ТаблицаПантоны КАК Пантоны";
Запрос.УстановитьПараметр("ТаблицаПантоны", ТабПантоны);
Запрос.Выполнить();

ТЗ_Пантоны.Строки.Очистить();

Запрос.Текст=
"ВЫБРАТЬ
| СУММА(Пантоны.КолвоПоПлану) КАК КолвоПоПлану,
|    Пантоны.Наименование
|ИЗ
|    Пантоны КАК Пантоны
|
|СГРУППИРОВАТЬ ПО
|    Пантоны.Наименование";

ВыборкаКраска = Запрос.Выполнить().Выбрать();

Пока ВыборкаКраска.Следующий() Цикл
стрПантоны = ТЗ_Пантоны.Строки.Добавить();    //строка с названием верхий уровень
стрПантоны.НомерТЗ = ВыборкаКраска.Наименование;
стрПантоны.КолвоПоПлану = ВыборкаКраска.КолвоПоПлану;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст=
"ВЫБРАТЬ
|    Пантоны.Наименование,
|    Пантоны.КолвоПоПлану,
|    Пантоны.НомерТЗ
|ПОМЕСТИТЬ Пантоны
|ИЗ
|    &ТаблицаПантоны КАК Пантоны";
Запрос.УстановитьПараметр("ТаблицаПантоны", ТабПантоны);
Запрос.Выполнить();

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Пантоны.Наименование,
|    Пантоны.КолвоПоПлану,
|    Пантоны.НомерТЗ
|ИЗ
|    Пантоны КАК Пантоны
|ГДЕ
|    Пантоны.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", ВыборкаКраска.Наименование);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаКраскаТЗ = РезультатЗапроса.Выбрать();

ВыборкаКраскаТЗ.Количество();

Пока ВыборкаКраскаТЗ.Следующий() Цикл

стрПантоныТЗ = стрПантоны.Строки.Добавить();    //строка с названием верхий уровень
стрПантоныТЗ.НомерТЗ = ВыборкаКраскаТЗ.НомерТЗ;
стрПантоныТЗ.КолвоПоПлану = ВыборкаКраскаТЗ.КолвоПоПлану;
//стрПантоныТЗ.СтатусЗаказа = ВыборкаКраскаТЗ.ЗаказКлиента;

КонецЦикла;

КонецЦикла;


Ошибка при вызове метода контекста (Выполнить)
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(451)}: РезультатЗапроса = Запрос.Выполнить();
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(1163)}: ЗагрузкаПоПантонуОфсет();
по причине:
{(6, 5)}: Таблица не найдена "Пантоны"
<<?>>Пантоны КАК Пантоны

antoneus

Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос.Текст=
            "ВЫБРАТЬ
            |    Пантоны.Наименование,
            |    Пантоны.КолвоПоПлану,       
            |    Пантоны.НомерТЗ       
            |ПОМЕСТИТЬ Пантоны
            |ИЗ
            |    &ТаблицаПантоны КАК Пантоны";
        Запрос.УстановитьПараметр("ТаблицаПантоны", ТабПантоны);
        Запрос.Выполнить();
       
        Запрос = Новый Запрос;//вот поэтому

Вообще, каких-то проблем себе придумываете на ровном месте. Все же гораздо проще можно сделать.

Funt432286

antoneus, да, я понимаю, что возможно можно было как-то проще сделать!
Но к сожалению у меня идея только такая была на тот момент, вот ее и допиливаю!!!

Спасибо большое!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск