Вход | Регистрация

1С:Предприятие ::

Метки: 

Поиск строк в массиве.

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

            СообщенияТЗ = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыСеанса.ПараметрСеансаДляПечати.СообщенияТЗ);
            ПараметрыСеанса.ПараметрСеансаДляПечати = Новый ФиксированнаяСтруктура;

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

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

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


Список тем форума
Рекламное место пустует   Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует