Вход | Регистрация


1С:Предприятие ::

Метки: 

Как правильней сч=сч+1 или тз.Индекс(текСтрока)?

Я
   Crush
 
28.12.12 - 12:42
Как методологически правильнее получать номер строки при переборе Для Каждого?

варианты:

1) сч=сч+1
2) тз.Индекс(текСтрока)

 

При подсчете процента выполнения. От куда лучше брать общее количество строк?

1) из переменной КолСтрок = тз.Количество(), определенной перед циклом

2) из тз.Количество()

 

Переменные сч и КолСтрок более нигде не используются
 
 
   Reset
 
1 - 28.12.12 - 12:44
Я бы делал так
--
сч=сч+1
--
из переменной КолСтрок = тз.Количество()
--
   Kreont
 
2 - 28.12.12 - 12:44
сч=сч+1
универсальнее, и для массивов подойдет
   palpetrovich
 
3 - 28.12.12 - 12:44
1 - 1
2 - пофиг
   vicof
 
4 - 28.12.12 - 12:44
Не проще 
Для к = 1 По КолчиествоСтрок Цикл?
   acsent
 
5 - 28.12.12 - 12:45
выгода несущественная
   Reset
 
6 - 28.12.12 - 12:46
(4) +1
   zak555
 
7 - 28.12.12 - 12:46
(4) +1
чем сч++
   fisher
 
8 - 28.12.12 - 12:47
(4) +1
Если нужны номера, то по ним и обхожу.
   hhhh
 
9 - 28.12.12 - 12:48
(6) да это два разных варианта:

для (4) правильнее через "к", а если Для Каждого ТекСтрока Из ТЗ, то вариант тз.Индекс(текСтрока) рулит.
   Reset
 
10 - 28.12.12 - 12:49
(9) Почему рулит? Имхо он чуть медленней чем специальный счетчик, хотя (5).
 
 Рекламное место пустует
   hhhh
 
11 - 28.12.12 - 12:52
(10) товарищ из (0) спрашивает "Как методологически правильнее". Понятно, что чуть помедленнее. Да там со счетчиками вероятность ошибиться больше. А тут есть строка, тупо берем ее индекс.
   Mnemonic1C
 
12 - 28.12.12 - 12:57
(0) Смотря что делать с этой таблицей. Если например удалять строки по условию(ям), то не подойдет ни один из описаных алгоритмов.
   Kreont
 
13 - 28.12.12 - 12:58
Для масивов обращение через "Индекс" не пойдет, вариант с "сч" будет универсальней
   Crush
 
14 - 28.12.12 - 13:12
На консультации к экзамену на спеца говорилось, что не нужно лишний раз инициализировать переменные.
Сам склоняюсь к тз.Индекс(текСтрока), но сколько операций выполняется процессором для получения индекса? Когда достаточно обратиться к области памяти, прочитать, добавить, записать - в случае с сч++.
Так же и с количеством строк. Если через метод таблицы, то явно больше(имхо) операций, чем через переменную.

Собственно вопрос касается случая, когда в процессе перебора строк нужно ориентироваться в каком месте находишься: будь то процент выполнения или решаешь ставить запятую после последнего значения или нет.
   Reset
 
15 - 28.12.12 - 13:17
"что не нужно лишний раз инициализировать переменные"
Это правильно. Вопрос в том, какой случай считать лишним.
Имхо, когда заведение переменной приводит к увеличению быстродействия, переменная не лишняя.
   Reset
 
16 - 28.12.12 - 13:18
(15)<--- еще укажу мем "Имхо". Мнение может несовпадать с мнением экзаменаторов на спеца:) Да даже тут в ветке есть другое (11)
   Reset
 
17 - 28.12.12 - 13:21
(14) в частном случае с запятой имхо проще ставить всегда(избавившись от проверок в цикле), а потом лишнюю один раз отрезать :)
   Crush
 
18 - 28.12.12 - 13:29
(17) Хе, согласен! А если перед предпоследним значением союз "и" надо влепить?:)
Собственно это и подтолкнуло к вопросу.
   Reset
 
19 - 28.12.12 - 13:32
(18)
К примеру :)
Для i=1 по Количество-1 цикл// для всех кроме последней
 
// Лепим основную часть
КонецЦикла;
 //Лепим "И "+ПоследняяЧасть
   Classic
 
20 - 28.12.12 - 13:32
(18)
То же самое.
ТекстУсловия = "";
Для Каждого .... Цикл
   ТекстУсловия = ТекстУсловия + "И " + НовоеУсловие + " ";
КонецЦикла;
ТекстУсловия = Сред(ТекстУсловия,3);
   Classic
 
21 - 28.12.12 - 13:33
+(20)
Обычно надо "И" лепить везде, кроме первого.
   Axel2009
 
22 - 28.12.12 - 13:34
(6)(7) вроде как получитьстроку отработывает медленнее чем для каждого
   Reset
 
23 - 28.12.12 - 13:35
(21)  А может там не запрос, а "Уважаемый Петр, Марья, Сергей И Паша" :)
   Classic
 
24 - 28.12.12 - 13:35
(23)
Возможно :)
   Reset
 
25 - 28.12.12 - 13:37
(22) Вполне возможно, не задавался. Можно проверить.
Для каждого то же наверянка по индексу перебирает, но "внутри", соотв. может быстрее
   NcSteel
 
26 - 28.12.12 - 13:38
Методически верно так:

Запрос = Новый Запрос;
Запрос.ТекстЗапроса = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();

КоличествоИтераций = Выборка.Количество();
Если КоличествоИтераций > 0 Тогда
    Индикатор = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
    Индикатор.НаименованиеОбработкиДанных = "Обработка справочника спецификации";
    Индикатор.КомментарийОбработкиДанных  = "";
    Индикатор.КомментарийЗначения         = "Обработано";
    Индикатор.МаксимальноеЗначение        = КоличествоИтераций;
    Индикатор.Значение = 0;
    Индикатор.Открыть();
КонецЕсли;
Пока Выборка.Следующий() Цикл
    ОбработкаПрерыванияПользователя();
        
    Индикатор.КомментарийОбработкиДанных = "Обработка элемента: " + Выборка.Ссылка;
    
 //Обработка
 

    Индикатор.Значение = Индикатор.Значение + 1;    
КонецЦикла;
   GANR
 
27 - 28.12.12 - 13:46
(0) тз.Индекс(текСтрока) - чтоб не думать!
   GANR
 
28 - 28.12.12 - 13:47
+(27) Мало-ли какие строки добавятся/удалятся
   Reset
 
29 - 28.12.12 - 13:50
(28) Если строки могут удалиться, "Для каждого" вообще противопоказан :) А в "Для" счетчик уже есть
   hhhh
 
30 - 28.12.12 - 13:54
(29) так он собъется, если строки удалять. Проверено, ТЗ.Количество() вычисляется ровно один раз, в начале.
   Reset
 
31 - 28.12.12 - 13:56
(30) По крайней мере иногда можно построить так, чтобы не сбился. "Для каждого" вообще "не управляемый".
   NcSteel
 
32 - 28.12.12 - 13:57
(31) Не надо ля ля ля . 1С часто его используют для таких целей и нормально.
   Axel2009
 
33 - 28.12.12 - 14:01
(30) если строки удалять то смысла в увеличении счетчика нет никакого. выйдет за рамки массива
 
 
   Reset
 
34 - 28.12.12 - 14:04
(32) Поясни про "ля ля"



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует