Имя: Пароль:
1C
 
Поиск строк в массиве.
0 Svetlana_Kazan
 
10.10.17
10:42
Поиск строк в массиве.
Подскажите, пожалуйста, как правильно организавать поиск в массиве? Мне необходимо из массива получить строки по номенклатуре. Я использую метод Найти(). Массив СообщенияМассив получаем &НаСервере и передаем &НаКлиент.
&НаСервере
Функция ПроверитьПараметрСеансаНаСервере()
    Попытка
        Если ЗначениеЗаполнено(ПараметрыСеанса.ПараметрСеансаДляПечати) Тогда
            //СообщенияТЗ - таблица значений с колонками Номенклатура, ТекстыСообщений.
            СообщенияТЗ = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыСеанса.ПараметрСеансаДляПечати.СообщенияТЗ);
            ПараметрыСеанса.ПараметрСеансаДляПечати = Новый ФиксированнаяСтруктура;

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

&НаКлиента
Процедура Дерево(ЭлементыДерева)
...
Для каждого ЭлементДерева Из ЭлементыДерева Цикл
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", ТЗ.Номенклатура);
    НайденныеЗначения = СообщенияМассив.Найти(ПараметрыОтбора);
    ...
    НаименованиеПроцедуры(ЭлементДерева.ПолучитьЭлементы());
КонецЦикла;
...
КонецПроцедуры

Найденные строки при этом Неопределено всегда.
1 Svetlana_Kazan
 
10.10.17
10:46
Массив СообщенияМассив:
http://pastenow.ru/f9f5c921304cf48932bd5523641e8c08
2 igork1966
 
10.10.17
10:46
(0) метод найти у массива ожидает параметр = значению в массиве которое надо найти
3 igork1966
 
10.10.17
10:47
(1) СП украли?
4 Svetlana_Kazan
 
10.10.17
10:50
(3) , но ТЗ.Номенклатура ведь значение, которое есть в массиве или надо чтобы полное было совпадение и по Номенклатуре и по ТекстыСообщений?
5 igork1966
 
10.10.17
10:51
Как вариант делай ТЗ а не массив
Или реализую свою процедуру поиска перебором значений массива
6 Svetlana_Kazan
 
10.10.17
10:51
ТЗ НаКлиенте я могу использовать?
7 igork1966
 
10.10.17
10:52
(4) И че? Метод найти у массива ищет по значению, он и не обязан искать по твоим фантазиям.
8 igork1966
 
10.10.17
10:53
(6) Нет
9 Svetlana_Kazan
 
10.10.17
10:54
Я, используя метод Найти(), хотела сначала уменьшить количество строк в массиве. Так как и так обхожу дерево значений и там еще делать обход массива каждый раз? А дерево большое.
10 Филиал-msk
 
10.10.17
10:58
(9) Используй вместо массива другую структуру данных, которая подходит под твоё использование
11 igork1966
 
10.10.17
11:01
(10) + например соответствие
12 Svetlana_Kazan
 
10.10.17
11:12
(11) , я об этом думала, но соответствие мне не подходит, так как у меня номенклатура может повторяться и однозначного ключа не будет.
Может есть какой-то еще вариант?
13 Филиал-msk
 
10.10.17
11:14
(12) Да. Используй соответствие. Ищи по частям.
14 h-sp
 
10.10.17
11:17
(12) сделай два массива: номенклатуры и сообщения. Согласованных по индексу.