Имя: Пароль:
1C
1С v8
"Для каждого" обход не сначала
0 Anttonnio
 
22.03.16
09:43
Добрый день!

А подскажите, пожалуйста, можно ли начать обход Для каждого не сначала а с середины?

Поясню:
У меня есть обработка, которая по моим подсчетам будет проводить вычисления несколько дней. Я его решил запускать на ночь, пока компьютер свободен, а промежуточный результат сохранять, чтобы потом продолжать с места где остановился

Суть Следующая:
Обход Матрицы больших размеров M*N
Получается
Для Каждого mi Из M Цикл
       для Каждого ni из N  Цикл
            Если ОбходНеСначала тогда
                 ni = ПоследняСохраненнаяСтрока;
                 ОбходНеСначала = Ложь;
                 Продолжить;
            КонецЕсли;
         .............
       КонецЦикла;
КонецЦикла;

такой способ не дал результатов
Или единственный способ это обходит второй цикл пока не подойдем к тому значению, которое было вчера?

       Для Каждого ni из N  Цикл
            Если ОбходНеСначала и ni <> ПоследняСохраненнаяСтрока тогда
                 Продолжить;
            Иначе
                
                 ОбходНеСначала = Ложь;
                 Продолжить;
            КонецЕсли;
1 Molinor
 
22.03.16
09:44
Использовать другой цикл.
Пока ... Цикл
2 mehfk
 
22.03.16
09:44
Используй цикл со счетчиком
3 zak555
 
22.03.16
09:45
что за обработка, работающая несколько дней ?
4 Anttonnio
 
22.03.16
09:59
(3) Чисто математическая Обход матрицы примерно 7000*7000

(1) (2) "Для каждого" как-то удобнее использовать в дальнейшем, тогда буду использовать второй вариант который я предложил
5 ObjectRelation Model
 
22.03.16
10:01
(4) второй вариант тоже бред
6 mehfk
 
22.03.16
10:01
>> "Для каждого" как-то удобнее использовать в дальнейшем
3,14здец логика.
7 Anttonnio
 
22.03.16
10:01
(5) Почему?
8 ObjectRelation Model
 
22.03.16
10:02
(7) потому что пустая трата времени на цикл
9 Anttonnio
 
22.03.16
10:03
(6) не вижу разницы между счетчиком и моим способом? да в первый проход надо будет пробежаться по второму циклу, но в рамках задачи это время будет не значительным, следовательно им можно пренебречь
10 ObjectRelation Model
 
22.03.16
10:03
заинтриговал, что за задача
11 Карупян
 
22.03.16
10:03
Для счетчик = 10 По 100 Цикл
12 Timon1405
 
22.03.16
10:04
так что мешает запоминать в константе последнюю обработанную за день строчку?
13 Anttonnio
 
22.03.16
10:10
(12) А что с этой строкой дальше делать? ведь второй обход цикла должен начаться с первого значения
14 aleks_default
 
22.03.16
10:11
(9) суп тоже вилкой хлебаешь?
15 Anttonnio
 
22.03.16
10:16
(14) И все таки обойти цикл с 7000 тыс записями с функцией "продолжить" не так затратно, А писать в каждом вызове n[i-1].Поле1 куда менее интересно, чем просто ni.Поле1


не вижу в этом особо чего не целесообразного
16 Карупян
 
22.03.16
10:17
(15) Делай вначале ni = n[i-1]
17 DDwe
 
22.03.16
10:23
(15) "А писать в каждом вызове n[i-1].Поле1 куда менее интересно, чем просто ni.Поле1 "  - Капец, куда катится мир....
18 hhhh
 
22.03.16
10:28
(16) это не по-пацански как-то
19 sash-ml
 
22.03.16
10:34
(15) в конструкции Для каждого, под капотом используется итератор. А он не доступен в контексте разработчика. Так что только через индекс.
20 Mikeware
 
22.03.16
10:34
М-дя...
Говорили мне, что "1986-х ты еще добрым словом вспоминать будешь", а я не верил...
наверное, дело все-таки в константе?
21 Drac0
 
22.03.16
10:44
Чо вы пристали? Человек - художник. Он так видит!
22 Kiks
 
22.03.16
10:57
Я, конечно, извиняюсь, но что это за задача такая в 1С, где надо матрицу 7000*7000 обходить?
23 senior
 
22.03.16
11:06
а потом говорят в 1с г**нокод
24 АдинС
 
22.03.16
11:36
(20) Так ТС же 89-й, по карточке...) Но по  логике я с тобой согласен..)
25 VladZ
 
22.03.16
11:45
(0)  "У меня есть обработка, которая по моим подсчетам будет проводить вычисления несколько дней." - что ты там делаешь?  Пытаешь писать программу для игры в Го?
26 Mikeware
 
22.03.16
11:47
(24) дык я и говорю, по сравнению с ТС - 1986 были довольно умными ребятками...
"количество разума на земле - константа. а население растет..."©
27 Mikeware
 
22.03.16
11:48
(25) пытается писать программу-г...о
28 Tateossian
 
22.03.16
12:05
(0) Разбей на несколько потоков.
29 АдинС
 
22.03.16
12:51
(28) В таком случае цикл для каждого придется не только начинать с определенного места, но еще и останавливать тоже в определенном.... Задача усложниться в два раза...))
30 lodger
 
22.03.16
13:54
рановато для пятничной ветки
31 Лефмихалыч
 
22.03.16
14:04
(0) цикл со счетчиком используй, Люк
32 Kiks
 
22.03.16
14:24
Можно еще на этапе заполнения матрицы влепить колонку с типом УИД, а потом при обходе проверять. Только зачем? Чем счетчик не по нраву?
33 АНДР
 
22.03.16
14:50
Предложу не прерывать цикл, а делать в нем паузу посредством Вопрос(,,Таймаут), который будет вызываться по проверке ТекущаяДата.
34 Anttonnio
 
22.03.16
15:53
Вообщем я так понял, что нельзя сразу сделать.

Сделал тогда как писал, первый обход в холостую до последнего места останова.

Задача моя, какая разница какая у неё цель?
поливать людей грязью каждый горазд)

Вы ни разу не обосновали нецелесообразность моего метода - я и сам знал, что холостой обход потребует времени, но ничтожность этого времени можно пренебречь, чем мучаться с квадратными скобками по ходу всей обработки
35 Fish
 
22.03.16
15:54
(34) Можно. Но для этого надо использовать правильный цикл, и не заниматься идиотизмом.
36 Drac0
 
22.03.16
15:55
(34) Т.е. (16) ты осознать не смог?
37 lera01
 
22.03.16
15:58
(33) А в компьютере сидит какой-то человечек, который страдает от необходимости рисовать квадратные скобки при каждом выполнении цикла? Напиши ты нормальный цикл с итераторами по каждому измерению.
38 DDwe
 
22.03.16
16:29
(34) Вот что значит, полное отсутствие образования. Что ЕГ с людьми делает, ужас.
39 Anttonnio
 
22.03.16
17:22
(38) Какие вы все тут злые))))
40 mehfk
 
22.03.16
20:34
(39) А ты, стало быть Д'Артаньян?
41 Garykom
 
гуру
22.03.16
20:42
ТС прикинь если сразу в процессе цикла "Для Каждого" по коллекции "обработанные значения" удалять из коллекции...

То прерывание и последующий запуск снова цикла "Для Каждого" на этой порезанной коллекции даст требуемый сабж.
42 Garykom
 
гуру
22.03.16
20:43
(41)+ только удаляй в конце "обработки" перед "КонецЦикла;"
43 Scandsv
 
22.03.16
21:09
Вот я тоже не гений.
Но понимаю, что без постановки задачи, трудно решение предложить.
Но.
1. Тупой перебор 49 млн. элементов по нескольку раз  - 100% неэффективен. И люди тебе и говорят, что интересна задача, которая решается только перебором значений.

2. Кто мешает использовать цикл "Для.... По..." и начинай его с прерванного места?
44 Scandsv
 
22.03.16
21:10
(34) так задачу у тебя никто и не отбирает.
Просто интересно, что за задача?
45 Drac0
 
22.03.16
22:10
(43) 2. скваребракетфобия.
46 Scandsv
 
22.03.16
22:24
(45) Вот прям скопировал и себе сохраню....:)
47 Anttonnio
 
23.03.16
10:10
(44) (43) Почему не эффективен?) очень даже эффективен.

Скажем так получение статистических данных.
и того что накапливается за ночь, мне достаточно, чтобы сделать некоторые выводы и переформировать обработку, чтобы запустить её с нуля.

А когда процесс будет отлажен, то я буду готов подождать достаточного кол-ва времени для получения полноценного результата)

З.Ы. это я сейчас ограничился 7к*7к а можно взять данных и на 15*15)

по  циклу  "Для.... По..." уже предлагали, но я отказался, хотя идея ni = n[i-1] была стоящей

Всё это не важно как я решаю задачу, цель поста была выяснить варианты продолжения перебора коллекции с конкретного места.

Ответы я получил. Всем Спасибо за участие!)

Дальше можете продолжить уже обсуждение на свободные темы
48 f_vadim
 
23.03.16
10:29
(47) перевожу "я ни слова не понял что вы тут наговорили, разбираться не хочу, поэтому сливаюсь"
49 Mikeware
 
23.03.16
10:31
а все-таки интересно, что он считал? поля методом сеток?
50 dmpl
 
23.03.16
10:40
(0) Для Каждого означает, что цикл выполняется для каждого элемента коллекции. Более того, не факт что порядок следования элементов в этом цикле будет каждый раз один и тот же ;) Так что частичный "Для каждого" мало того что противоречит логике, но даже если удастся это реализовать - не факт что даст правильный результат.
51 Garykom
 
гуру
23.03.16
11:20
(49) больше похоже на битмайнинг в фоне пока компы простаивают...
52 Drac0
 
23.03.16
11:23
(51) битмайнинг на 1с? Гы
53 Mikeware
 
23.03.16
11:28
(51) я тут намедни сыну показывал разложение по фурье. Пытался показать расчет тепловых полей. сходу не осилил. грустно осознавать себя поглупевшим до состояния первокурсника.
54 1Cancer
 
23.03.16
11:30
(0) для каждого ...
внутренний итератор + + +
волшебное слово continue.
и того имеем цикл для каждого который пропускает ряд итераций :D по условию например.
55 1Cancer
 
23.03.16
11:31
(54) а матрица у тебя где хранится эта?
56 Garykom
 
гуру
23.03.16
11:34
(53) смешнее ситуация была, я тогда только на заочке восстановился и попросил друзей недавно закончивших очку универа помочь решить интегралы... так после 1,5 года после универа они уже не помнили совсем как их решать :)
57 Mikeware
 
23.03.16
11:39
(56) ну дык я кагбэ программированием все-таки занимаюсь...
а задания по вышке в прошлом году делал (для одной сотрудницы) чисто ради прикола - 2/3 решил не заглядывая в справочники, для остатков хватило википедии. Хотя в профессиональной деятельности мало что использовал.
58 PR третий
 
23.03.16
11:42
Простой вопрос.
Абсолютно исчерпывающий ответ в (1).
И полсотни постов еще о чем-то.

Рукалицо
59 DDwe
 
23.03.16
11:46
(58) Он не хочет, скобочки не любит.
60 PR третий
 
23.03.16
11:48
(59) Раз дурак, пусть использует, че.
Для каждого не гарантирует даже последовательность выборки, так что пусть набивает шишки лбом, раз слушать не хочет.
Ветка в любом случае исчерпала себя после первого поста.
61 Живой Ископаемый
 
23.03.16
11:58
2(47) Нужно из коллекции просто удалить те элементы, которые уже отработаны. Сделать это не трудно
62 DDwe
 
23.03.16
12:01
(61) Нужно делать все по уму , а не через анальное отверстие.
63 Живой Ископаемый
 
23.03.16
12:03
2(62) А Волга в какое море впадает?
Закон Брукера: Даже маленькая практика стоит большой теории.