Имя: Пароль:
1C
 
Как найти элемент в сложном массиве?
,
0 pro3ri
 
21.01.16
14:42
Добрый день!
Есть массив https://s.mail.ru/2zNS7Bbx6uWw/img-2016-01-21-16-36-12.png как из него вытащить значение с определенным Идентификатором сообщения (оно уникально)?
1 pro3ri
 
21.01.16
14:42
Массив.Найти() неопределено дает
2 Nuobu
 
21.01.16
14:44
(1) Потому что в твоём массиве хранятся структуры.
Только перебором.
Можно метнуться кабанчиком по массиву, вытянуть уникальные идентификаторы, загнать их в другой массив и там искать.
Но "на один раз" можно перебором.
3 pro3ri
 
21.01.16
14:47
(2) благодарю
4 Волшебник
 
модератор
21.01.16
14:51
Выгрузи в таблицу значений, там проиндексируй колонку и ищи
5 pro3ri
 
22.01.16
07:22
(4) https://s.mail.ru/2QDy9Fdayd7E/img-2016-01-22-09-12-20.png передаю с Клиента на сервер,

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

&НаСервере
функция СерверТЗ(Массив, ИД)

    Тз = Новый ТаблицаЗначений;
    Тз.Колонки.Добавить("ИД");

КонецФункции

Выводит ошибку
{Форма.Форма.Форма(136)}: Ошибка при вызове метода контекста (СерверТЗ)
    ИндексМассива = СерверТЗ(Массив, ИД);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'Value':
    форма: Элемент
    имя: {http://v8.1c.ru/8.1/data/core}Value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ИнтернетПочтовоеСообщение'
Что поправить?
6 НЕА123
 
22.01.16
07:47
видимо веб-клиент. убирай ИнтернетПочтовоеСообщение.
7 Mort
 
22.01.16
07:50
Что-то мне подсказывает, тут надо всю схему решения менять на корню. Только меня вот этот вопрос "что поправить?" смущает.
8 pro3ri
 
22.01.16
07:59
(6) да нет, приложение Тонкий клиент
9 Trotter
 
22.01.16
08:17
Может так ?
РеквизитФормыВЗначение()
10 pro3ri
 
22.01.16
09:01
(9) я так понимаю что проблема в том, что переменнная СообщенияФорма клиентская.


собственно весь код:

&НаКлиенте
Перем СообщенияФорма;

&НаКлиенте
Процедура Получение(Команда)
    
    Почта = Новый ИнтернетПочта;
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    
    
    Профиль.АдресСервераIMAP = "imap.yandex.ru";
    Профиль.ПользовательIMAP = Кому;
    Профиль.ПарольIMAP = Пароль;
    Профиль.ПортIMAP = 993;
    Профиль.ИспользоватьSSLIMAP = Истина;
    
    Попытка
        Почта.Подключиться(Профиль,ПротоколИнтернетПочты.IMAP);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    СтруктураОтбора = Новый Структура("Отправитель", "ХХХХ");
    Заголовки = Почта.ПолучитьЗаголовки(СтруктураОтбора);
    
    Сообщения = Почта.Выбрать(Ложь,Заголовки,Ложь);
    СообщенияФорма = Сообщения;
    Для каждого Мессадж Из Сообщения Цикл
    
        Строка = Письма.Добавить();
        Строка.Тема = Мессадж.Тема;
        Строка.ИД = Мессадж.ИдентификаторСообщения;
        
        
    КонецЦикла;
    Почта.Отключиться();
    
КонецПроцедуры

&НаСервере
Процедура СерверныйВызов(ХТМЛ, Картинки)

    Текст.УстановитьHTML(ХТМЛ,Картинки);

КонецПроцедуры // СерверныйВызов()


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


КонецПроцедуры

&НаСервере
функция СерверТЗ(Массив, ИД)

    Тз = Новый ТаблицаЗначений;
    Тз.Колонки.Добавить("ИД");
    
КонецФункции // ()