Имя: Пароль:
1C
1С v8
Как выглядит результат запроса
0 loader82
 
16.02.19
11:19
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Сотрудники.Фамилия,
    |    Сотрудники.Инициалы,
    |    Сотрудники.Оклад,
    |ИЗ
    |    Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    |    Сотрудники.Оклад >= 15000";
    
    РезультатЗапроса=Запрос.Выполнить();
    
    
    Выборка =  РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
                   Сообщить (Выборка.Фамилия+" "+Выборка.Инициалы+". Оклад: "+Выборка.Оклад+"р.");
        КонецЦикла;


Скажите, будет ли уместной такая аналогия из языка Си:

РезультатЗапроса=Запрос.Выполнить(); создает двумерный массив РезультатЗапроса с 3мя столбцами и n-строками (по количеству элементов отвечающих условию ГДЕ)


Выборка =  РезультатЗапроса.Выбрать();  -  что-то вроде задания переменной для счетчика строк i=0;

Выборка.Следующий() - все равно что i++, но еще и возвращает значение Ложь если строки закончились

И раз в цикле Пока Выборка.Следующий() мы можем обратиться к конкретному элементу по Выборка[j], то выходит Выборка[j] - аналог РезультатЗапроса[i][j] из Си?

Правильно ли так называть - мне пока не важно, пока просто хочется получить менее абстрактное представление того, что происходит при выполнении этих команд.
1 palsergeich
 
16.02.19
11:21
Выборка это курсор.
2 palsergeich
 
16.02.19
11:23
3 ДенисЧ
 
16.02.19
11:28
(0) нет, это неправильное представление
4 palsergeich
 
16.02.19
11:29
[i][j] колонки именованные.
Так не выйдет.
5 palsergeich
 
16.02.19
11:30
I ,j - это имена колонок, а не их порядок
6 loader82
 
16.02.19
11:33
Я имел в виду что если мне нужен элемент скажем 3й строки, 2го столбца, то в Си к нему можно было бы обратиться через РезультатЗапроса[2][1], а в 1с: дождаться пока Выборка.Следующий() опустится до 3й строки, затем обратиться через Выборка[1].
7 loader82
 
16.02.19
11:37
(6) Или обращение в Си шло через [i;j], а не [i][j] - тут уж, простите, не помню.
8 ДенисЧ
 
16.02.19
11:38
(6) ц выборкииззапроса нет столбйов и строк
9 ДенисЧ
 
16.02.19
11:39
Поднимись на уровень с++ и ты увидишь там IIterable - вот это оно и есть
10 loader82
 
16.02.19
11:43
(8) Чем тогда было заполнение массива нулями array[i][j]=0;
через цикл for (i=0; i<n; i++), и аналогичный вложенный для j?
11 ДенисЧ
 
16.02.19
11:50
(10) Исчо (с) раз.
Выборка - это не массив. Это итератор.
12 palsergeich
 
16.02.19
11:51
(7) сли тебе нужна 3 строка 2 колонка используй не выборку а таблицу значений, то есть вместо Выбрать - Выгрузить
13 palsergeich
 
16.02.19
11:52
В ТЗ ты можешь это делать
14 loader82
 
16.02.19
11:52
(11) Я и не говорю что Выборка - массив. А говорю что Выборка хранит значение строки на которой сейчас находимся, или что-то вроде этого. Все равно не верно?
15 palsergeich
 
16.02.19
11:53
(12) Хотя может я вру про колонки)
16 Franchiser
 
гуру
16.02.19
11:55
Выборка не хранит номер строки. Нет определенного порядка строк в выборке, каждый раз может быть разный порядок строк.
17 palsergeich
 
16.02.19
11:55
И выборка ничего не знает о предыдущей строке и о последующей
18 palsergeich
 
16.02.19
11:56
И колонки не нумерованы, а именованы
19 palsergeich
 
16.02.19
11:57
Для простоты выборка как структура.
Ты можешь эту коллекцию перебрать переборщиком, можешь обратиться к жлементу по идентификатору, но номера позиции нет
20 loader82
 
16.02.19
11:58
(12) С ТЗ и выгрузкой уже поигрался - да, там все в более привычном для меня виде представлено. Я просто не пойму в чем принципиально отличается проход результата запроса через Выборка.Следующий() [ставим "курсор" на следующую строку и можем обратиться к полю в этой строке] и проходом таблицы через цикл for. Я рассматриваю сценарий когда мне не нужен какой-то конкретный элемент, а я просто прохожу по всему результату запроса, выполняя попутно какие-то действия в цикле.
21 Franchiser
 
гуру
16.02.19
11:58
По номеру колонки можно тоже отбращаться
22 ДенисЧ
 
16.02.19
11:59
(16) Неправда. В выборке порядок строк зависит от запроса.
23 palsergeich
 
16.02.19
12:00
(21) Сорри, да можешь. Глянул справку.
ВыборкаИзРезультатаЗапроса (QueryResultSelection)
ВыборкаИзРезультатаЗапроса (QueryResultSelection)
Элементы коллекции:

Произвольный
Возможно обращение к полю выборки посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0) или имя поля выборки.
Приношу извинения
24 Franchiser
 
гуру
16.02.19
12:00
(22) если нет order by то нет. Порядок зависит от плана запроса, нельзя гарантировать что он будет постоянным.
25 ДенисЧ
 
16.02.19
12:00
(24) А причём тут выборка? Я ж говорю - от запроса зависит.
26 loader82
 
16.02.19
12:01
(16) Я понимаю что выборка - не числовое значение. Но если в тексте запроса я укажу "Выбрать поле1, поле2, поле3 Из", то Выборка[0] мне выдаст поле1 в этой строке, Выборка[1] - поле 2 и тд. А могу Обратиться через Выборка.поле1.
27 Franchiser
 
гуру
16.02.19
12:04
(25) в моем понимании порядок уже зафиксирован в результате запроса, а выборке нет понятия порядка. Ну, могу ошибаться.
28 ДенисЧ
 
16.02.19
12:55
(27) Выборка перебирается в том порядке, что отдаёт запрос. И никакого понимания тут не нужно.
29 Конструктор1С
 
16.02.19
15:15
Синтаксик-помощник не предлагать?
30 TormozIT
 
гуру
16.02.19
17:35
Результат запроса - данные полученные из СУБД в памяти процесса 1С, представленные в компактном (сыром) виде. ВыборкаИзРезультатаЗапроса - итератор, который для каждого элемента этих данных в памяти процесса 1С создает объектную обвязку. Результат запроса в памяти по моим представлениям занимает в несколько раз меньше места чем таблица значений, полученная из него методом Выгрузить().
31 hhhh
 
16.02.19
18:08
(28) нет, там куча выборок, обход прямой, обход кривой, найти следующий по значению поля, обход по группировкам в одну сторону, в другую сторону, в общем запрос один, а выборок из него целая куча.
32 vi0
 
16.02.19
20:12
(30) откуда такие выводы?
33 TormozIT
 
гуру
17.02.19
02:13
(30) Из ответов 1С
Программист всегда исправляет последнюю ошибку.