Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 10:38

Как найти реквизит в массиве для проверки

Автор Vasylii, 13 окт 2023, 15:23

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

Vasylii

Не много не понимаю как найти в массиве нужный мне реквизит среди всех, можно вытянуть через цикл ну это может затянутся т.к. бывает больше 10 тыс строк
пока поставил проверку по первым 3 но это не оптимальное решение, можно ли как то по другому сделать?

Если МассивСкладов[0].Условие = перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара
Или МассивСкладов[1].Условие = перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара
или МассивСкладов[2].Условие = перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара
или МассивСкладов[3].Условие = перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара  тогда

Максим75

Vasylii,
ну как то так
ИндексСклада = МассивСкладов.Найти(перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара);

т.е. находите индекс в массиве

Vasylii


Vasylii

Vasylii, хотя в массиве есть поле которое выполняет это условие

Afinogen

 B) Сделйте таблицу значений с типом колонки =  тип значения массива, загрузите в нее данные массива,  передайте эту таблицу как параметр в запрос и дергайте потмо результат запроса

тип так

ТЗ  = Новый ТаблицаЗначений;
Массив = Новый Массив(Тип("ВашТипЗначения"));
ОписаниеТипа = Новый ОписаниеТипов(Массив);
НоваяКолонка = ТЗ.Колонки.Добавить("ИмяКолонки",ОписаниеТипов);

ТЗ.ЗагрузитьКолонку("ИмяКолонки",ВашМассив);

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

///вы получите виртуальную таблицу со всеми вашими данными массива, дальше можете ее дергать как угодно, например

Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ.ИмяКолонки ИЗ ВТ ГДЕ ВТ.ИмяКолонки = &Условие";
Запрос.УстановитьПараметр("Условие", перечисления.УсловияСкидкиНаценки.ПоКоличествуТовара);


Если у вас массив который нужно пробегать 10000  и как я понимаю в нем есть данные для параметра  -  условие, то я бы вообще сделал 2 вирт таблицы:
1.  как написал выше
2.  по аналогии с первой

и далее если напрмиер вам надо найти все значения из  первой таблицы которые есть во второй тогда б делал такой запрос

Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|*
|ИЗ ВТ
| ГДЕ (ВТ.ИмяКолонки,ИСТИНА) В (ВЫБРАТЬ РАЗЛИЧНЫЕ
|                                 ВТ2.ИмяКолонки,
|                                 ИСТИНА
|                                 ИЗ ВТ2)";

В этом запросе вы выберите сразу все значения из таб1 которые естьв таб2, по аналогии можно и обратный ваариант проверить и наоборот выбрать все не входящие

Afinogen


LexaK

МассивСкладов вы изначально получаете запросом, вот в этот запрос и передайте отбор по условию! И не надо потом 10к элементов в цикле перебирать, или обратно в запрос сосать.
если помогло нажмите: Спасибо!

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

Рейтинг@Mail.ru

Поиск