|
Как перекинуть значение с одной строки ТЗ в другую строку, а эту удалить? | ☑ | ||
---|---|---|---|---|
0
VID1234
14.12.21
✎
18:25
|
Здравствуйте. Подскажите пожалуйста, как мне лучше написать код, чтобы при условии, если Число в определенной колонке меньше нужной, тогда это значение перенести на следующую строку, а эту строку удалить!
Пример: имеем 3 строки, в ней разные значения но в колонке число, следующие числа 2, 1, 5 При обходе строк, КодВыделить Если Стр.Число <5 Тогда Переносим значение 2, в следующую строку или любую строку, кроме этой ТЗ.Удалить(Стр) Иначе Продолжить; КонецЕсли; |
|||
1
ГдеСобака Зарыта
14.12.21
✎
18:31
|
Постановку задачи озвучь полностью. То что хочешь сделать ты попахивает ересью, и можно на костер отправится за такое
|
|||
2
2S
14.12.21
✎
18:31
|
Т.е. это не сортировка о_О?
|
|||
3
VID1234
14.12.21
✎
18:33
|
(1) мне нужно чтобы в таблице значений все данные были больше или равно 5, но общее число (итог) должен быть одинаков.
|
|||
4
acanta
14.12.21
✎
18:34
|
Переменная не нужна?
|
|||
5
VID1234
14.12.21
✎
18:35
|
(4) Да пробую только иногда пропускает строки!
Если ТЗ.Количество() > 1 Тогда ДляСохраненияЧасовОтУдаленнойСтроки = 0; Для Каждого СтрокиТЗ ИЗ ТЗ Цикл СтрокиТЗ.ЧасовНаПроект = СтрокиТЗ.ЧасовНаПроект + ДляСохраненияЧасовОтУдаленнойСтроки; ДляСохраненияЧасовОтУдаленнойСтроки = 0; Если СтрокиТЗ.ЧасовНаПроект < 8 Тогда ДляСохраненияЧасовОтУдаленнойСтроки = СтрокиТЗ.ЧасовНаПроект; ТЗ.Удалить(СтрокиТЗ); Продолжить; Иначе СтрокаТаблицыДоляЧасов = ТЗ_ДоляЧасовВПроекте.Добавить(); СтрокаТаблицыДоляЧасов.Сотрудник = НеРукиНК.Сотрудник; СтрокаТаблицыДоляЧасов.Проект = СтрокиТЗ.Проект; СтрокаТаблицыДоляЧасов.Часы = СтрокиТЗ.ЧасовНаПроект; СтрокаТаблицыДоляЧасов.Сумма = НеРукиНК.Сумма; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
6
2S
14.12.21
✎
18:36
|
Нихера не понял
Отсортируй и проверяй сумму на цел/5 >1 |
|||
7
VID1234
14.12.21
✎
18:37
|
(6) Как?
|
|||
8
lEvGl
гуру
14.12.21
✎
18:38
|
при удалении строк всегда надо цикл крутить через счетчик, если удалил, то счетчик не менять, и наоборот
|
|||
9
lEvGl
гуру
14.12.21
✎
18:38
|
для каждого цикл будет работать некорректно
|
|||
10
lEvGl
гуру
14.12.21
✎
18:39
|
(3) не понял, правда
|
|||
11
lEvGl
гуру
14.12.21
✎
18:40
|
что значит "общее число одинаков", сумма по всей таблице что ли
|
|||
12
lEvGl
гуру
14.12.21
✎
18:40
|
тогда это не перенос значения будет, а суммирование того что в строке уже есть + то что меньше 5 на текущей итерации
|
|||
13
VID1234
14.12.21
✎
18:42
|
(10) у нас в ТЗ в колонке Число куча цифр их итог 100, когда я уберу 1,2,3,4 из этой ТЗ сумма должна остаться 100, т.е. я допустим в переменную записал 1, в следующем цикле прибавил эту единицу к строке, ее обработал, если она меньше 5, то дальше и так далее!
|
|||
14
VID1234
14.12.21
✎
18:43
|
(12) если бы можно было так сделать, то было бы круто
Типа: если число меньше 5, то суммировать! |
|||
15
lEvGl
гуру
14.12.21
✎
18:50
|
вцелом задача - чешуя какая то
как то так, приблизительно Индекс = ТаблицаЗначений.Количество() - 1; Пока Индекс >= 0 Цикл Если ТаблицаЗначений[Индекс].Число < 5 Тогда ТаблицаЗначений[Индекс - 1].Число = ТаблицаЗначений[Индекс + 1].Число + ТаблицаЗначений[Индекс].Число; ТаблицаЗначений.Удалить(Индекс); Иначе Индекс = Индекс - 1; КонецЕсли; КонецЦикла; |
|||
16
VID1234
14.12.21
✎
18:52
|
(15) Хорошо, спасибо. попробую!
|
|||
17
lEvGl
гуру
14.12.21
✎
18:52
|
и предусмотреть ситуацию, когда индекс будет указывать на первую строку (тут идем с конца таблицы)
ТаблицаЗначений[Индекс - 1] вызовет ошибку получения строки |
|||
18
VID1234
14.12.21
✎
18:57
|
(17) Это как так? Я так то не силен в индексах, а тут еще и предусмотреть что-то))))
|
|||
19
acht
14.12.21
✎
19:02
|
(18) Зачем тогда за заджчи берешся?
|
|||
20
_Дайвер_
14.12.21
✎
21:08
|
Я бы сделал по другому, через отборы.
Т.е. делаю 2 копии основной ТЗ Далее в них делаю отбор по условию Далее основную таблицу очищаю Далее загружаю в нее ту таблицу по условию которой в ней должны остаться строки Далее во второй копии ТЗ через получаю Итог("ИмяКолонки") Далее суммирую этот итог с твоим конечным итогом(!!!не подвалом ТЧ!!!) За решение и пример 5000 рублей |
|||
21
Ёпрст
14.12.21
✎
23:34
|
(6) твоятаблтчка.сортировать("количество");
Массив = новый массив; Количество =0; Для каждоґо строкатаблички из табличка цикл Едели строкатаблички.количестпо<условиеНаМинимальноеКоличество тогда Количество = Количество+строкатаблички.количество; Массив.добавить(строкатабличкт); Конецежели; Для каждого элементмассива из массив Табличка.удалить(элементмассива) Конеццикла Табличка[0].количество =количкство +Табличка[0].количество Условие на пустую табличку сам добавишь |
|||
22
Dmitry77
15.12.21
✎
00:13
|
если постановка в (3) то тз.свернуть() - самое короткое решение
|
|||
23
acht
15.12.21
✎
00:14
|
(22) Вот только хотел написать =)
|
|||
24
Pohoo
16.12.21
✎
09:27
|
//Определим переменную, где будем хранить часы из строк, которые надо удалить
ОсталосьЧасовНаПроект = 0; //Определим массив для хранения строк, которые нужно удалить МассивСтрокДляУдаления = Новый Массив; //Обходим исходную таблицу в цикле Для Каждого Стр Из ТЗ Цикл Если Стр.ЧасовНаПроект < 8 Тогда //Если строка не проходит по условию, то запомним её значение ОсталосьЧасовНаПроект = ОсталосьЧасовНаПроект + Стр.ЧасовНаПроект; //И добавим строку в массив для дальнейшего удаления МассивСтрокДляУдаления.Добавить(Стр); ИначеЕсли ОсталосьЧасовНаПроект > 0 Тогда //Если текущая строка проходит по условию, то добавим к ней значения из строк, которые были до неё. но по условию не прошли Стр.ЧасовНаПроект = Стр.ЧасовНаПроект + ОсталосьЧасовНаПроект; ОсталосьЧасовНаПроект = 0; КонецЕсли; КонецЦикла; //Удалим строки, которые не прошли по условию из исходной таблицы Для Каждого СтрУдалить Из МассивСтрокДляУдаления Цикл ТЗ.Удалить(СтрУдалить); КонецЦикла; //У нас может быть ситуация, что последняя строка исходной таблицы не прошла по условию //Надо значение из нее распределить на первую строку Если ОсталосьЧасовНаПроект > 0 Тогда ТЗ[0].ЧасовНаПроект = ТЗ[0].ЧасовНаПроект + ОсталосьЧасовНаПроект; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |