Как перекинуть значение с одной строки ТЗ в другую строку, а эту удалить?
Здравствуйте. Подскажите пожалуйста, как мне лучше написать код, чтобы при условии, если Число в определенной колонке меньше нужной, тогда это значение перенести на следующую строку, а эту строку удалить!
Пример: имеем 3 строки, в ней разные значения но в колонке число, следующие числа 2, 1, 5
При обходе строк,
Пример: имеем 3 строки, в ней разные значения но в колонке число, следующие числа 2, 1, 5
При обходе строк,
Если Стр.Число <5 Тогда
Переносим значение 2, в следующую строку или любую строку, кроме этой
ТЗ.Удалить(Стр)
Иначе
Продолжить;
КонецЕсли;
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) А это следующий вопрос, в любом случае он будет прибавлять к следующей строке, а вот если в последней строке будет меньше, тут даже не знаю как сделать! Можно как-то прописать Если Строка последняя Тогда Сумма остается какой стала при сложении!
Если ТЗ.Количество() > 1 Тогда
ДляСохраненияЧасовОтУдаленнойСтроки = 0;
Для Каждого СтрокиТЗ ИЗ ТЗ Цикл
СтрокиТЗ.ЧасовНаПроект = СтрокиТЗ.ЧасовНаПроект + ДляСохраненияЧасовОтУдаленнойСтроки;
ДляСохраненияЧасовОтУдаленнойСтроки = 0;
Если СтрокиТЗ.ЧасовНаПроект < 8 Тогда
ДляСохраненияЧасовОтУдаленнойСтроки = СтрокиТЗ.ЧасовНаПроект;
ТЗ.Удалить(СтрокиТЗ);
Продолжить;
Иначе
СтрокаТаблицыДоляЧасов = ТЗ_ДоляЧасовВПроекте.Добавить();
СтрокаТаблицыДоляЧасов.Сотрудник = НеРукиНК.Сотрудник;
СтрокаТаблицыДоляЧасов.Проект = СтрокиТЗ.Проект;
СтрокаТаблицыДоляЧасов.Часы = СтрокиТЗ.ЧасовНаПроект;
СтрокаТаблицыДоляЧасов.Сумма = НеРукиНК.Сумма;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
(3)можно какую то рекурсию наваять, сначала выбрать все строки где значение меньше определенного значения, с помощью метода НайТИСтроки(). Полчим массив строк, уже потом его обходить и делать то что нужно, например добавлять строку в копию и заполнять ее значеними по индексу из массива.
(1) Я бы сделал так:
СтрокиКУдалению = Новый Массив;
Для Н = 0 По ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
Показать
СтрокиКУдалению = Новый Массив;
Для Н = 0 По ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
(4)
ОШИБКА:
Индекс находится за границами массива
Стр = ТЗ[Н];
СтрокиКУдалению = Новый Массив;
Для Н = 0 По Из ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
ПоказатьДля Н = 0 По Из ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
СтрокиКУдалению = Новый Массив;
Для Н = 0 По Из ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
ПоказатьОШИБКА:
Индекс находится за границами массива
Стр = ТЗ[Н];
У меня есть такой пример кода для удаления строк ТЗ, в таблице значений есть колонка "отметка" и вот если она установлена, то эти строки удаляються:
&НаКлиенте
Процедура УдалитьОтмеченныеСтроки(Команда)
СтруктураДляПоиска = Новый Структура("Отметка", Истина);
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивОтмеченныхСтрок = Объект.ТЗ.НайтиСтроки(СтруктураДляПоиска);
Для каждого Строка Из МассивОтмеченныхСтрок Цикл
Объект.ТЗ.Удалить(Строка);
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот