|
Помогите разобраться с циклом | ☑ | ||
---|---|---|---|---|
0
maptbln
15.05.18
✎
11:17
|
Добрый день , вроде простая задача , но чего-то пробуквосываю
есть следующий цикл Для к = 0 по КоличествоСтрок-1 Цикл Для н = 1 по КоличествоСтрок-1 Цикл Если тпБюджетныеОперации[к][1] = тпБюджетныеОперации[н][1] и тпБюджетныеОперации[к][2] = тпБюджетныеОперации[н][2] тогда Для е = 7 по 19 цикл тпБюджетныеОперации[к][е]= тпБюджетныеОперации[к][е] + тпБюджетныеОперации[н][е]; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; в нём по логике должно искаться соответствие на одновременное равенство значений в 2ух столбцах , и если они равны то к значениям в первой строке (9-20 стоблец) должны прибавляться значения другой строки но на деле данные ниже 2 строки просто задвояются, не могу понять,где я тут накосячил |
|||
1
Волшебник
15.05.18
✎
11:21
|
Сотри всё и напиши с нуля. Используй таблицы значений и соответствия.
|
|||
2
фросия
15.05.18
✎
11:24
|
(0) правильно писать "задваиваются"
|
|||
3
фросия
15.05.18
✎
11:25
|
вложенные циклы по к и н дважды к одной строке обращаются.
|
|||
4
dezss
15.05.18
✎
11:27
|
если я правильно протелепатировал, то тебе нужно
Для н = 1 по КоличествоСтрок-1 Цикл заменить на Для н = к по КоличествоСтрок-1 Цикл |
|||
5
dezss
15.05.18
✎
11:27
|
(4) поправка
Для н = к+1 по КоличествоСтрок-1 Цикл |
|||
6
maptbln
15.05.18
✎
11:37
|
(2) виноват
(1) тпБюджетныеОперации и есть ТЗ , с соответствиями пока не работал ( (5) ты верно протелепатировал,спасибо |
|||
7
maptbln
15.05.18
✎
11:55
|
а как реализовать удаление строки ,после того как добавили её к изначальной
пробовал Для к = 0 по КоличествоСтрок-1 Цикл Для н = к+1 по КоличествоСтрок-1 Цикл Если тпБюджетныеОперации[к][1] = тпБюджетныеОперации[н][1] и тпБюджетныеОперации[к][2] = тпБюджетныеОперации[н][2] тогда Для е = 7 по 19 цикл тпБюджетныеОперации[к][е]= тпБюджетныеОперации[к][е] + тпБюджетныеОперации[н][е]; КонецЦикла; тпБюджетныеОперации.Удалить(н); КоличествоСтрок=КоличествоСтрок-1; КонецЕсли; КонецЦикла; КонецЦикла; но ругается на индексы |
|||
8
фросия
15.05.18
✎
11:58
|
тпБюджетныеОперации.Удалить(н);
вот это что такое? |
|||
9
DmitriyDI
15.05.18
✎
12:01
|
(7) добавляй в массив,а затем удаляй в цикле:
МасиивУдаления = Новый Массив; МассивУдаления.Добавить(тпБюджетныеОперации[н]); А после цикла твоего: Для Каждого Знч Из МасиивУдаления Цикл тпБюджетныеОперации.Удалить(Знч ); КонецЦикла; |
|||
10
DmitriyDI
15.05.18
✎
12:01
|
(9) МасиивУдаления = Новый Массив; естественно надо перед циклом тоже добавить
|
|||
11
maptbln
15.05.18
✎
12:22
|
(10) спасибо большое , всё отрабатывает
правда в конце ругается {Документ.ИС_ПакетБюджетныхОпераций.Форма.ФормаДокумента.Форма(2024)}: Ошибка при вызове метода контекста (Удалить) тпБюджетныеОперации.Удалить(Знч); по причине: Значение индекса выходит за границы диапазона |
|||
12
catena
15.05.18
✎
12:30
|
(11)Уникальный персонаж, умудрился при обходе элементов массива вылететь из массива. Я даже представить не могу как.
|
|||
13
DmitriyDI
15.05.18
✎
13:13
|
(11) убери из основного цикла тпБюджетныеОперации.Удалить(н);
|
|||
14
maptbln
15.05.18
✎
17:18
|
(13)
убрал предварительно не в этом дело , а в 1с возможно обойти цикл с последнего к первому элементу? |
|||
15
dezss
15.05.18
✎
17:33
|
(14) можно
просто сделай обычный цикл с условием и уменьшай индекс в цикле... |
|||
16
dezss
15.05.18
✎
17:34
|
(15) предвосхищая вопрос "как")
н = Массив.Количество()-1; Пока н > 0 Цикл ..... н = н - 1; КонецЦикла |
|||
17
dezss
15.05.18
✎
17:35
|
(16) ах да...внутри цикла можешь использовать
Массив[н] |
|||
18
maptbln
15.05.18
✎
17:48
|
(17) благодарю!)
|
|||
19
maptbln
16.05.18
✎
11:12
|
(16)
и всё таки не могу понять, как в данном случае заставить цикл удалять значения из ТЗ не просто по индексу , а по значениям строк из МассиваУдаления ,как в (9) |
|||
20
ПегийЛунь
16.05.18
✎
11:31
|
Вариант А.
1. Предварительно выбрать в отдельный массив элементы удовлетворяющий условиям. 2. В цикле для каждого элемента из выбранного массива удалять соответствующие строчки. НаУдаление = Новый Массив(); Для Каждого Элем из тпБюджетныеОперации Цикл Если ТутУсловиеОтбора Тогда НаУдаление.Добавить(Элем); КонецЕсли; КонецЦикла; Для Каждого ЭлемМассива из НаУдаление Цикл тпБюджетныеОперации.Удалить(ЭлемМассива); КонецЦикла; Вариант Б. ("перевертыш") Рекомендовано в ЖКК Удаление при обратном проходе самой ТЗ. КолвоЭлементов = тпБюджетныеОперации.Количество(); Для ОбратныйИндекс = 1 По КолвоЭлементов Цикл ЭлементКоллекции = Коллекция[КолвоЭлементов - ОбратныйИндекс]; Если ТутУсловиеОтбора Тогда тпБюджетныеОперации.Удалить(ЭлементКоллекции); КонецЕсли; КонецЦикла; |
|||
21
maptbln
16.05.18
✎
11:45
|
(20)
записал в блокнот , буду хранить) |
|||
22
ПегийЛунь
16.05.18
✎
11:46
|
Дело в том, что при непосредственно удалении в прямом цикле в ТЗ строки как бы сдвигаются занимая место удаленной (аналогично поведение массива в Java через remove и в php такое можно организовать через array_splice)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |