|
Как правильней сч=сч+1 или тз.Индекс(текСтрока)? | ☑ | ||
---|---|---|---|---|
0
Crush
28.12.12
✎
12:42
|
Как методологически правильнее получать номер строки при переборе Для Каждого?
варианты: 1) сч=сч+1 2) тз.Индекс(текСтрока) При подсчете процента выполнения. От куда лучше брать общее количество строк? 1) из переменной КолСтрок = тз.Количество(), определенной перед циклом 2) из тз.Количество() Переменные сч и КолСтрок более нигде не используются |
|||
1
Reset
28.12.12
✎
12:44
|
Я бы делал так
-- сч=сч+1 -- из переменной КолСтрок = тз.Количество() -- |
|||
2
Kreont
28.12.12
✎
12:44
|
сч=сч+1
универсальнее, и для массивов подойдет |
|||
3
palpetrovich
28.12.12
✎
12:44
|
1 - 1
2 - пофиг |
|||
4
vicof
28.12.12
✎
12:44
|
Не проще
Для к = 1 По КолчиествоСтрок Цикл? |
|||
5
acsent
28.12.12
✎
12:45
|
выгода несущественная
|
|||
6
Reset
28.12.12
✎
12:46
|
(4) +1
|
|||
7
zak555
28.12.12
✎
12:46
|
(4) +1
чем сч++ |
|||
8
fisher
28.12.12
✎
12:47
|
(4) +1
Если нужны номера, то по ним и обхожу. |
|||
9
hhhh
28.12.12
✎
12:48
|
(6) да это два разных варианта:
для (4) правильнее через "к", а если Для Каждого ТекСтрока Из ТЗ, то вариант тз.Индекс(текСтрока) рулит. |
|||
10
Reset
28.12.12
✎
12:49
|
(9) Почему рулит? Имхо он чуть медленней чем специальный счетчик, хотя (5).
|
|||
11
hhhh
28.12.12
✎
12:52
|
(10) товарищ из (0) спрашивает "Как методологически правильнее". Понятно, что чуть помедленнее. Да там со счетчиками вероятность ошибиться больше. А тут есть строка, тупо берем ее индекс.
|
|||
12
Mnemonic1C
28.12.12
✎
12:57
|
(0) Смотря что делать с этой таблицей. Если например удалять строки по условию(ям), то не подойдет ни один из описаных алгоритмов.
|
|||
13
Kreont
28.12.12
✎
12:58
|
Для масивов обращение через "Индекс" не пойдет, вариант с "сч" будет универсальней
|
|||
14
Crush
28.12.12
✎
13:12
|
На консультации к экзамену на спеца говорилось, что не нужно лишний раз инициализировать переменные.
Сам склоняюсь к тз.Индекс(текСтрока), но сколько операций выполняется процессором для получения индекса? Когда достаточно обратиться к области памяти, прочитать, добавить, записать - в случае с сч++. Так же и с количеством строк. Если через метод таблицы, то явно больше(имхо) операций, чем через переменную. Собственно вопрос касается случая, когда в процессе перебора строк нужно ориентироваться в каком месте находишься: будь то процент выполнения или решаешь ставить запятую после последнего значения или нет. |
|||
15
Reset
28.12.12
✎
13:17
|
"что не нужно лишний раз инициализировать переменные"
Это правильно. Вопрос в том, какой случай считать лишним. Имхо, когда заведение переменной приводит к увеличению быстродействия, переменная не лишняя. |
|||
16
Reset
28.12.12
✎
13:18
|
(15)<--- еще укажу мем "Имхо". Мнение может несовпадать с мнением экзаменаторов на спеца:) Да даже тут в ветке есть другое (11)
|
|||
17
Reset
28.12.12
✎
13:21
|
(14) в частном случае с запятой имхо проще ставить всегда(избавившись от проверок в цикле), а потом лишнюю один раз отрезать :)
|
|||
18
Crush
28.12.12
✎
13:29
|
(17) Хе, согласен! А если перед предпоследним значением союз "и" надо влепить?:)
Собственно это и подтолкнуло к вопросу. |
|||
19
Reset
28.12.12
✎
13:32
|
(18)
К примеру :) Для i=1 по Количество-1 цикл // для всех кроме последней // Лепим основную часть КонецЦикла; //Лепим "И "+ПоследняяЧасть |
|||
20
Classic
28.12.12
✎
13:32
|
(18)
То же самое. ТекстУсловия = ""; Для Каждого .... Цикл ТекстУсловия = ТекстУсловия + "И " + НовоеУсловие + " "; КонецЦикла; ТекстУсловия = Сред(ТекстУсловия,3); |
|||
21
Classic
28.12.12
✎
13:33
|
+(20)
Обычно надо "И" лепить везде, кроме первого. |
|||
22
Axel2009
28.12.12
✎
13:34
|
(6)(7) вроде как получитьстроку отработывает медленнее чем для каждого
|
|||
23
Reset
28.12.12
✎
13:35
|
(21) А может там не запрос, а "Уважаемый Петр, Марья, Сергей И Паша" :)
|
|||
24
Classic
28.12.12
✎
13:35
|
(23)
Возможно :) |
|||
25
Reset
28.12.12
✎
13:37
|
(22) Вполне возможно, не задавался. Можно проверить.
Для каждого то же наверянка по индексу перебирает, но "внутри", соотв. может быстрее |
|||
26
NcSteel
28.12.12
✎
13:38
|
Методически верно так:
Запрос = Новый Запрос; Запрос.ТекстЗапроса = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); КоличествоИтераций = Выборка.Количество(); Если КоличествоИтераций > 0 Тогда Индикатор = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных"); Индикатор.НаименованиеОбработкиДанных = "Обработка справочника спецификации"; Индикатор.КомментарийОбработкиДанных = ""; Индикатор.КомментарийЗначения = "Обработано"; Индикатор.МаксимальноеЗначение = КоличествоИтераций; Индикатор.Значение = 0; Индикатор.Открыть(); КонецЕсли; Пока Выборка.Следующий() Цикл ОбработкаПрерыванияПользователя(); Индикатор.КомментарийОбработкиДанных = "Обработка элемента: " + Выборка.Ссылка; //Обработка Индикатор.Значение = Индикатор.Значение + 1; КонецЦикла; |
|||
27
GANR
28.12.12
✎
13:46
|
(0) тз.Индекс(текСтрока) - чтоб не думать!
|
|||
28
GANR
28.12.12
✎
13:47
|
+(27) Мало-ли какие строки добавятся/удалятся
|
|||
29
Reset
28.12.12
✎
13:50
|
(28) Если строки могут удалиться, "Для каждого" вообще противопоказан :) А в "Для" счетчик уже есть
|
|||
30
hhhh
28.12.12
✎
13:54
|
(29) так он собъется, если строки удалять. Проверено, ТЗ.Количество() вычисляется ровно один раз, в начале.
|
|||
31
Reset
28.12.12
✎
13:56
|
(30) По крайней мере иногда можно построить так, чтобы не сбился. "Для каждого" вообще "не управляемый".
|
|||
32
NcSteel
28.12.12
✎
13:57
|
(31) Не надо ля ля ля . 1С часто его используют для таких целей и нормально.
|
|||
33
Axel2009
28.12.12
✎
14:01
|
(30) если строки удалять то смысла в увеличении счетчика нет никакого. выйдет за рамки массива
|
|||
34
Reset
28.12.12
✎
14:04
|
(32) Поясни про "ля ля"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |