Имя: Пароль:
1C
1С v8
Поиск в многомерном массиве
0 ildary
 
10.11.16
15:02
Уважаемые специалисты, подскажите пожалуйста новичку - я правильно понимаю, что в двумерном массиве оператор Найти() - не работает? Если да, по получается проще всего выгрузить массив в ТЗ и там уже искать?
1 Lexey_
 
10.11.16
15:45
(0) Неправильно понимаешь, Найти() работает, только ищет по первому уровню.
А зачем эти извращения с двумерными массивами?
2 Жан Пердежон
 
10.11.16
15:49
в 1 с нет многомерных массивов, в СП об этом прямо написано
3 ildary
 
10.11.16
15:51
(1) На сервере выполнил запрос, назад на клиент возвращаю результат через массив, в котором потом надо искать значения по ключевому полю.

(2) А что тогда получится в результате этой строки?

ОбщегоНазначения.ТаблицаЗначенийВМассив( лЗапрос.Выполнить().Выгрузить() );
4 Basilio
 
10.11.16
15:53
(3) получится массив структур.
5 Basilio
 
10.11.16
15:54
Преобразует таблицу значений в массив.
//    Может использоваться для передачи на клиента данных, полученных
//    на сервере в виде таблицы значений в том случае, если таблица
//    значений содержит только такие значения, которые могут
//  быть переданы на клиента.
//
//    Полученный массив содержит структуры, каждая из которых повторяет
//    структуру колонок таблицы значений.
//
//    Не рекомендуется использовать для преобразования таблиц значений
//    с большим количеством строк.
//
//    Параметры:
//    ТаблицаЗначений - ТаблицаЗначений.
//
//    Возвращаемое значение:
//    Массив
//
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
    
    Массив = Новый Массив();
    СтруктураСтрокой = "";
    НужнаЗапятая = Ложь;
    Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
        Если НужнаЗапятая Тогда
            СтруктураСтрокой = СтруктураСтрокой + ",";
        КонецЕсли;
        СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
        НужнаЗапятая = Истина;
    КонецЦикла;
    Для Каждого Строка Из ТаблицаЗначений Цикл
        НоваяСтрока = Новый Структура(СтруктураСтрокой);
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
        Массив.Добавить(НоваяСтрока);
    КонецЦикла;
    Возврат Массив;

КонецФункции
6 butterbean
 
10.11.16
15:55
(4) в СП написано про массив массивов
7 Basilio
 
10.11.16
15:56
(6) в СП есть описание для "ОбщегоНазначения.ТаблицаЗначенийВМассив"??
8 ildary
 
10.11.16
15:58
(5) извините, а не могли бы Вы подсказать, а как потом правильно в массиве структур искать?
9 Basilio
 
10.11.16
15:59
а что искать то? значение конкретного поля или что? Циклом обходи массив и смотри в каждую структуру.
10 Ёпрст
 
гуру
10.11.16
16:00
(8) только перебором, в лучшем случае, или, если тз  небольшая, то выгрузить её в строку и искать в ней, но это - для редкостных извращенцев
11 ildary
 
10.11.16
16:02
(9) Допустим у меня была ТЗ Номенклатура и Остаток. Я ее выгрузил в массив структур, как потом в этом массиве искать по номенклатуре?

(10) Я потому извращаюсь с поиском, что не хочу перебором искать. Начинаю склоняться к тому, что на сервере выгрузил ТЗ в массив, а на клиенте массив опять в ТЗ, где снова можно выполнять Найти().
12 Жан Пердежон
 
10.11.16
16:17
(11) на случай 2х колонок есть соответствие
13 Basilio
 
10.11.16
16:20
(11) ищи в цикле и не парься. ТЗ не доступна на ТонкомКлиенте.
14 ildary
 
10.11.16
16:27
(13) а через поле формы?
15 Basilio
 
10.11.16
16:28
(14) а смысл? Чем перебор не нравится?
16 FIXXXL
 
10.11.16
16:31
(11) а сразу на сервере найти и вернуть на клиента?
поискНаКлиенте можно же переписать?
17 ildary
 
10.11.16
16:33
(15) прошу не смеяться, но перебор у меня ассоциируется с копанием лопатой, в то время как Найти() - применение комбайна (при этом я понимаю расход памяти).

(16) думал уже об этом, но для этого пока ума не хватает, делаю по старинке.
18 FIXXXL
 
10.11.16
16:33
(16) + ну или отправляй на сервер сразу всю ТЧ и там ищи-присваивай
19 FIXXXL
 
10.11.16
16:34
(17) опиши задачку
20 ildary
 
10.11.16
16:41
(19) попросили сделать ацкую простыню по продажам (для анализа сторонней фирмой в ОЛАП-ах), в которой чего только нет, я как новичок побаиваюсь запросов-простынь, поэтому некоторые данные (типа остатков и резервов) получаю на сервере отдельно и потом отдельно выгружаю в Access. По уму надо все сделать одним запросом, вернуть его на клиент, не ломая голову с ТЗ, но я еще не дорос.
21 Filin
 
10.11.16
16:57
(20) Выгружай в Access на сервере.
22 ildary
 
10.11.16
17:07
(21) эта простая мысль не пришла мне в голову, надо будет попробовать.
23 FIXXXL
 
10.11.16
17:14
(22) ну если не получится Access на сервере, приделай ТЧ - копию данных, ее гоняй с клиента, заполняй на сервере
обратно она приедет заполненная
24 ildary
 
10.11.16
17:16
(23) тоже вариант, спасибо!
AdBlock убивает бесплатный контент. 1Сергей