|
Циклы пребор значений | ☑ | ||
---|---|---|---|---|
0
karpos
14.11.13
✎
09:57
|
Всем привет помогите. Есть спецификаций их много по количеству а типов мало мне нужно в цикле перебрать все спецификаций и вывести только те которые не совпадают с предыдущими. То есть мне нужно сравнить текущий элемент с предыдущим и не вылезти за границы массива. Вот что делаю я
Для Индекс = 0 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл Если Индекс = 0 Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); Индекс = Индекс + 1; КонецЕсли; Если ВыборкаДетальныеЗаписи[Индекс].Спецификация <> ВыборкаДетальныеЗаписи[Индекс - 1].Спецификация Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; КонецЦикла; Вот но тут есть косяк я по всякому пробовал суть его такая если элемент 0 и 1 одинаковые все будет работать а если они разные он выведется с первым если и со вторым. Еще раз повторюсь мне нужно первый сравнить с предыдущим или со следующим и при этом не выйти за границы массива. |
|||
1
karpos
14.11.13
✎
09:59
|
Для Индекс = 0 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл
Если Индекс = 0 Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); Индекс = Индекс + 1; КонецЕсли; Если ВыборкаДетальныеЗаписи[Индекс].Спецификация <> ВыборкаДетальныеЗаписи[Индекс - 1].Спецификация Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; КонецЦикла; |
|||
2
Maxus43
14.11.13
✎
10:00
|
ТЗ обходи, зачем выборку? или это ТЗ у тебя?
|
|||
3
karpos
14.11.13
✎
10:02
|
ТЗ нужно так. я давно что то подобное делал измучил мозг не получает. Эх раньше со мной был Зеркин (мега мозг) а теперь сам. Знаю что так точно можно.
|
|||
4
Maxus43
14.11.13
✎
10:04
|
Для Индекс = 1 По ТЗ.Количество() Цикл //сравнение с предыдущим
Если ТЗ[Индекс].Поле = ТЗ[Индекс-1].Поле Тогда |
|||
5
karpos
14.11.13
✎
10:08
|
так то у меня тоже самое
|
|||
6
karpos
14.11.13
✎
10:08
|
это не верный вариант 0 - 1 = - 1 массив вышел за границы
|
|||
7
karpos
14.11.13
✎
10:09
|
проверять еще условием на 0 тоже не вариант
|
|||
8
Maxus43
14.11.13
✎
10:10
|
какой 0-1? читай вниметельней, не с 0, а с 1 цикл начинается
|
|||
9
Maxus43
14.11.13
✎
10:11
|
Для Индекс = 1 По ТЗ.Количество()+1 Цикл
так правильней |
|||
10
perec1982
14.11.13
✎
10:12
|
Для чего все это делается?
|
|||
11
George Wheels
14.11.13
✎
10:26
|
(9) Для Индекс = 1 По ТЗ.Количество()-1
|
|||
12
George Wheels
14.11.13
✎
10:28
|
(0) А если десятая и сотая записи совпадают?
|
|||
13
Maxus43
14.11.13
✎
10:28
|
(11) +1 именно, посчитай
|
|||
14
karpos
14.11.13
✎
10:30
|
Maxus43 спасибо что так быстро откликнулся, но не то это
Для Индекс = 1 По ТЗ.Количество()+1 Цикл ты увеличил границы массива а в массиве значений меньше, вообщем ошибка вышел за границы массива. |
|||
15
George Wheels
14.11.13
✎
10:30
|
(13) В ТЗ 10 записей
Последний индекс = 9. По твоему получится так Для Индекс = 1 По 11 Цикл |
|||
16
Maxus43
14.11.13
✎
10:34
|
(14)(15) упс, согласен) ТЗ.Количество()-1, всё прально
|
|||
17
karpos
14.11.13
✎
10:35
|
Эта запись сделана не просто так Для Индекс = 0 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл тут минус один знаешь что делает в моем массиве 25 значений но от 0 - 24
а функция количество говорит что массив должен идти 25 раз, поэтому стоит мунус 1. 25 - 1 = 24 от 0 да 24 тогда все нормик. А ты предлагаешь + 1 сделать в массиве не будет такого значения он выдаст ошибку это тогда надо в массив записать пустое значение. |
|||
18
karpos
14.11.13
✎
10:36
|
блин я тут писал столько а ты уже написал что согласен. )))
|
|||
19
karpos
14.11.13
✎
10:37
|
я просто второй день эту хрень делаю чувствую себя лошарой.
|
|||
20
Maxus43
14.11.13
✎
10:41
|
ну не с 0 иди, а с 1, тогда с предыдущим сравнивать будешь номрально, это ж просто логика
|
|||
21
karpos
14.11.13
✎
10:52
|
я если в нулевом лежит не такой как в первом тоесть 0 и 1 разные
|
|||
22
Maxus43
14.11.13
✎
10:55
|
дак юзая
Если ТЗ[Индекс].Поле = ТЗ[Индекс-1].Поле Тогда это и будет первая проверка 0 и 1 строки |
|||
23
George Wheels
14.11.13
✎
11:07
|
(21) Вроде сегодня ещё не пятница:)
|
|||
24
karpos
14.11.13
✎
11:29
|
ну ну блин кривой вариант все равно
|
|||
25
karpos
14.11.13
✎
11:31
|
0 с 1 сравнит если они одинаковые он не выводит значение, нулевое ввести ранее. а если разные то выводит, а 0 вывелся ранее в условие выше
|
|||
26
karpos
14.11.13
✎
11:31
|
в принципе да годится
|
|||
27
Ненавижу 1С
гуру
14.11.13
✎
11:31
|
(0) может это все в запросе сделать?
|
|||
28
karpos
14.11.13
✎
11:32
|
просто тут другой вариант посоветовали он мне больше понравился сейчас попробую напишу
|
|||
29
karpos
14.11.13
✎
12:26
|
Короче вот так я решил Maxus43
Спецификация = Новый Массив; Для Индекс = 0 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл Если Индекс = 0 Тогда Спецификация.Добавить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; Если ВыборкаДетальныеЗаписи[Индекс].Спецификация <> Спецификация[Спецификация.Количество()-1] Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); Спецификация.Добавить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; КонецЦикла; вот я заел еще один массив при 0 кладу туда запись вывожу текущую а потом сравниваю текущий элемент массива с с тем который я положил в другой если они одинаковы ничего происходит а если они разные выводится текущий(новый) и в созданный мною массив заносится новое значение. |
|||
30
karpos
14.11.13
✎
12:28
|
Использовать мне еще один массив подсказала девушка секретарь на обеде. от этого кошки скребут на душе.
|
|||
31
karpos
14.11.13
✎
12:29
|
если кто то знает вариант по проще скажите напишите я за вас за здравие свечку поставлю.
|
|||
32
M_Flint
14.11.13
✎
12:37
|
Для Индекс = 1 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл
Если ВыборкаДетальныеЗаписи[Индекс].Спецификация <> ВыборкаДетальныеЗаписи[Индекс-1].Спецификация Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; КонецЦикла; |
|||
33
Ненавижу 1С
гуру
14.11.13
✎
12:38
|
(30) срочно переводите девочку в отдел ИТ!
|
|||
34
Ненавижу 1С
гуру
14.11.13
✎
12:38
|
(31) спасибо, не надо
|
|||
35
karpos
14.11.13
✎
12:45
|
M_Flint не будет так работать твой массив выйдет за границы массива он начинается с 0. индекс 0 - 1 = -1 такого индекса нет в массиве.
|
|||
36
karpos
14.11.13
✎
12:45
|
да девочку давно надо переводить в наш отдел а меня нах отсюда )))
|
|||
37
karpos
14.11.13
✎
12:46
|
ну как минимум я не один такой наш уже трое.
|
|||
38
sirsp
14.11.13
✎
12:54
|
(29) Массив лишний:
Спецификация = неопределено; Для Индекс = 0 По ВыборкаДетальныеЗаписи.Количество() - 1 Цикл Если Спецификация <> ВыборкаДетальныеЗаписи[Индекс].Спецификация Тогда Сообщить(ВыборкаДетальныеЗаписи[Индекс].Спецификация); КонецЕсли; Спецификация = ВыборкаДетальныеЗаписи[Индекс].Спецификация; КонецЦикла; |
|||
39
M_Flint
14.11.13
✎
12:58
|
(35) я сделала цикл со второго элемента в массиве(индекс у него =1), поэтому за границы не выйдет. при первом прохождении цикла будут сравниваться элементы №1 и №2, индексы у них соответственно 0 и 1.
|
|||
41
karpos
14.11.13
✎
13:03
|
со всеми не надо они в запросе уже группируется если одинаковые
|
|||
42
Ненавижу 1С
гуру
14.11.13
✎
13:04
|
(41) то есть они все разные точно, тогда зачем?
|
|||
43
karpos
14.11.13
✎
13:07
|
они не разные они что то типа 11111111234455555666666779 и надо вывести без повторения такого не бывает 111122222333311144445567
|
|||
44
Ненавижу 1С
гуру
14.11.13
✎
13:13
|
(43) может реально сгруппировать в запросе?
|
|||
45
karpos
14.11.13
✎
13:15
|
не надо.
|
|||
46
karpos
14.11.13
✎
13:17
|
мне я просто там выбираю какие материалы относят к этой спецификаций чтоб не делать запрос по каждой я перебираю их в цикле.
|
|||
47
karpos
14.11.13
✎
13:43
|
sirsp блин спасибо тебе огромное ваще ваще крутяк и просто.
|
|||
48
karpos
14.11.13
✎
13:43
|
тут ваще можно плюсануть????
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |