Имя: Пароль:
1C
1С v8
Поиск по массиву структур
0 AnisaL
 
10.06.13
10:50
Добрый день! Скажите пожалуйста, как правильно искать значение по массиву структур? Простым Найти ничего не находит. Вот структура:
   СтруктураЗаписейРазговоров.Вставить("Channel", КлючСтруктуры);
   СтруктураЗаписейРазговоров.Вставить("Value", ЗаписьРазговора);
МассивЗаписейРазговоров.Добавить(СтруктураЗаписейРазговоров);
Как в ней найти значение Value по ключу Channel ?
1 Ненавижу 1С
 
гуру
10.06.13
10:51
только циклом, а почему вам не использовать соответствие?
2 AnisaL
 
10.06.13
10:52
(1) а как использовать соотвествие?
3 Wobland
 
10.06.13
10:54
&НаСервере
Функция ПолучитьПодразделение_(КодСклада)
   соо=Новый Соответствие;
   соо.Вставить("Б0137", "00-000020");
   соо.Вставить("Б0132", "00-000019");
   соо.Вставить("Б0050", "00-000017");
   
   Возврат Справочники.ПодразделенияОрганизаций.НайтиПоКоду(соо[КодСклада]);
КонецФункции
4 AnisaL
 
10.06.13
10:58
(3) что-то я не пойму, т.е. я должна знать значение Value?
5 Ненавижу 1С
 
гуру
10.06.13
11:00
(4) ты должна знать ключ (который называла Channel)
6 Wobland
 
10.06.13
11:01
Функция ПолучитьПодразделение_(Channel)
   соо=Новый Соответствие;
   соо.Вставить("Б0137", "00-000020");
   соо.Вставить("Б0132", "00-000019");
   соо.Вставить("Б0050", "00-000017");
   
   Возврат соо[Channel];
КонецФункции
7 Defender aka LINN
 
10.06.13
11:01
(0) Использование таблиц значений в вашей религии запрещено?
8 Wobland
 
10.06.13
11:01
+(6) Функция ПолучитьValue(Channel)
9 Defender aka LINN
 
10.06.13
11:02
+(7) Зато поощряется использование идентификаторов на латинице
10 Defender aka LINN
 
10.06.13
11:02
ПолучитьValue... Это надо запомнить
11 AnisaL
 
10.06.13
11:02
(8) подожди, а откуда я возьму все эти значения, которые ты указал в своем соотвествии ?
12 Ненавижу 1С
 
гуру
10.06.13
11:05
(11) подожди, в чем задача вообще? ))
13 Serginio1
 
10.06.13
11:13
14 Serginio1
 
10.06.13
11:14
15 AnisaL
 
10.06.13
12:37
(13) а откуда эта функция берется
Если Вычислить(Условие) Тогда
16 AnisaL
 
10.06.13
12:43
(15)+ Вообще можешь
Например
Процедура СкопироватьПоУсловию(Тз,Условие)
резулт=Тз.СкопироватьКолонки();
Для каждого Стр из Тз Цикл
Если Вычислить(Условие) Тогда
РезСтр=Резулт.Добавить();
ЗаполнитьЗначенияСвойств(РезСтр,стр);
КонецЕсли;
КонецЦЦикла
возврат резулт
КонецФункции
17 Serginio1
 
10.06.13
13:30
(16) К сожалению в 1С нет ни лямбд ни делегатов
но есть функция вычислить, которая выполняет текст

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

Рез=НайтиПоУсловию(тз,"стр.ФизЛицо=""Иванов""
   или стр.ФизЛицо=""Сидоров""
   или стр.ФизЛицо=""Петров""");

или
Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров");

Рез=НайтиПоУсловию(тз,"Список.Найти(стр.ФизЛицо)<>Неопределено");

Или

Рез=НайтиПоУсловию(тз,"Найти(Врег(стр.Значение),Врег(""акф""))>0");

Рез=НайтиПоУсловию(тз,"Модуль.ФункцияСравнения(Стр,Список)",ЭтотОбъект);

То есть в модуле обработки должна быть функция
Функция ФункцияСравнения(стр,МассивСтруктур) Экспорт
18 Serginio1
 
10.06.13
13:32
17 В данном примере Вычислить обрабатывает строку с условием Условие учитывая переменные Стр,тз,Список,Модуль
19 zladenuw
 
10.06.13
13:34
(0)Структура (Structure)
Свойство (Property)
Возвращаемое значение:

Тип: Булево.
Истина - ключ найден; Ложь - в противном случае.

не оно ?
20 Serginio1
 
10.06.13
13:34
Прошу прощения не в тему. Что то перегрелся.
21 AnisaL
 
10.06.13
14:10
(3) а если я буду использовать соответствие, то смогу найти значение Value?
22 Рыжий Лис
 
10.06.13
14:50
(21) ЗаписьРазговора = Соответствие.Получить(КлючСтруктуры);
23 AnisaL
 
10.06.13
14:53
(22) а массив тогда вообще не нужен что ли?
24 Рыжий Лис
 
10.06.13
14:59
(23) Соответствие - это замена массиву структур. И правильнее, и проще, и быстрее работает.
25 AnisaL
 
10.06.13
15:00
(24) Спасибо большое! Я уже сама это начала понимать
26 AnisaL
 
10.06.13
15:15
Спасибо всем), разобралась с этими соответствиями и структурами
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.