Как перекинуть значение с одной строки ТЗ в другую строку, а эту удалить?

1. VID1234 147 14.12.21 18:23 Сейчас в теме
Здравствуйте. Подскажите пожалуйста, как мне лучше написать код, чтобы при условии, если Число в определенной колонке меньше нужной, тогда это значение перенести на следующую строку, а эту строку удалить!
Пример: имеем 3 строки, в ней разные значения но в колонке число, следующие числа 2, 1, 5
При обходе строк,
Если Стр.Число <5 Тогда 
Переносим значение 2, в следующую строку или любую строку, кроме этой
ТЗ.Удалить(Стр)
Иначе
Продолжить;
КонецЕсли;
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Prikum 3 14.12.21 18:37 Сейчас в теме
(1)а что делать, если в строках будет несколько подряд значений меньше определенного уровня?
3. VID1234 147 14.12.21 18:39 Сейчас в теме
(2) А это следующий вопрос, в любом случае он будет прибавлять к следующей строке, а вот если в последней строке будет меньше, тут даже не знаю как сделать! Можно как-то прописать Если Строка последняя Тогда Сумма остается какой стала при сложении!
 Если ТЗ.Количество() > 1 Тогда
           ДляСохраненияЧасовОтУдаленнойСтроки = 0;
           Для Каждого СтрокиТЗ ИЗ ТЗ Цикл
             СтрокиТЗ.ЧасовНаПроект = СтрокиТЗ.ЧасовНаПроект + ДляСохраненияЧасовОтУдаленнойСтроки;
               ДляСохраненияЧасовОтУдаленнойСтроки = 0;
               Если СтрокиТЗ.ЧасовНаПроект < 8 Тогда
                   ДляСохраненияЧасовОтУдаленнойСтроки = СтрокиТЗ.ЧасовНаПроект;
                   ТЗ.Удалить(СтрокиТЗ);
                   Продолжить;
               Иначе
                   СтрокаТаблицыДоляЧасов = ТЗ_ДоляЧасовВПроекте.Добавить();
                   СтрокаТаблицыДоляЧасов.Сотрудник = НеРукиНК.Сотрудник;
                   СтрокаТаблицыДоляЧасов.Проект = СтрокиТЗ.Проект;
                    СтрокаТаблицыДоляЧасов.Часы = СтрокиТЗ.ЧасовНаПроект;
                   СтрокаТаблицыДоляЧасов.Сумма = НеРукиНК.Сумма;
                   
               КонецЕсли;
               
            КонецЦикла;
       КонецЕсли;

Показать
7. Prikum 3 14.12.21 18:44 Сейчас в теме
(3)можно какую то рекурсию наваять, сначала выбрать все строки где значение меньше определенного значения, с помощью метода НайТИСтроки(). Полчим массив строк, уже потом его обходить и делать то что нужно, например добавлять строку в копию и заполнять ее значеними по индексу из массива.
9. dmbarchenkov 14.12.21 18:45 Сейчас в теме
(2) нужно просто значение перенести в следующую
10. VID1234 147 14.12.21 18:45 Сейчас в теме
4. dmbarchenkov 14.12.21 18:40 Сейчас в теме
(1) Я бы сделал так:

СтрокиКУдалению = Новый Массив;
Для Н = 0 По ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;

Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
Показать
5. Prikum 3 14.12.21 18:42 Сейчас в теме
(4)если 2 подряд строки с меньшим значением, то это не вариант решения.
6. dmbarchenkov 14.12.21 18:44 Сейчас в теме
(5) поясните?
Дано:
стр 1: 2
стр 2: 2
стр 3: 8.
Тогда в ТЗ останется тольк 3-я строка со значением 12.
8. VID1234 147 14.12.21 18:45 Сейчас в теме
(6) а мне нужно 12, если смотреть Ваш пример 2+2+8
12. dmbarchenkov 14.12.21 18:47 Сейчас в теме
(8) это я опечатался, будет 12.
14. VID1234 147 14.12.21 18:48 Сейчас в теме
11. Prikum 3 14.12.21 18:46 Сейчас в теме
(6)а если стр1: 4, стр2 : 4, стр3 : 8 ?
13. dmbarchenkov 14.12.21 18:47 Сейчас в теме
(11) то останется стр 3 со значением 16.
15. Prikum 3 14.12.21 18:48 Сейчас в теме
(13)не останется, потому что во второй с троке будет 8 на момент проверки условия
16. dmbarchenkov 14.12.21 18:52 Сейчас в теме
(15) да, верно будет стр 2 = 8 и стр 3 = 8, к чему вы это пишете, если и так видно по алгоритму?
17. VID1234 147 14.12.21 18:54 Сейчас в теме
(4)
СтрокиКУдалению = Новый Массив;
Для Н = 0 По Из ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;

Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;
Показать

СтрокиКУдалению = Новый Массив;
Для Н = 0 По Из ТЗ.Количество() Цикл
Стр = ТЗ[Н];
Если Стр.Число <5 Тогда
ТЗ[Н+1].Число = ТЗ[Н+1].Число + Стр.Число;
СтрокиКУдалению.Добавить(Стр);
КонецЕсли;
КонецЦикла;

Для каждого Стр Из СтрокиКУдалению Цикл
ТЗ.Удалить(Стр);
КонецЦикла;

Показать

ОШИБКА:
Индекс находится за границами массива
Стр = ТЗ[Н];
18. dmbarchenkov 14.12.21 18:56 Сейчас в теме
(17)
Для Н = 0 По ТЗ.Количество()-2 Цикл
19. VID1234 147 14.12.21 18:58 Сейчас в теме
(18) А Из точно нужно? я убрал, оставил только ПО
20. dmbarchenkov 14.12.21 18:59 Сейчас в теме
(19) нет, совсем "Из" не нужно) это осталось, сначала я цикл для каждого делал и не удалил.
Для Н = 0 По ТЗ.Количество()-2 Цикл
21. DenisVol 2 15.12.21 11:40 Сейчас в теме
У меня есть такой пример кода для удаления строк ТЗ, в таблице значений есть колонка "отметка" и вот если она установлена, то эти строки удаляються:
&НаКлиенте
Процедура УдалитьОтмеченныеСтроки(Команда)
    СтруктураДляПоиска = Новый Структура("Отметка", Истина);
    //Получаем список строк соответсвтвующих отбору, и перебором удаляем.
    МассивОтмеченныхСтрок = Объект.ТЗ.НайтиСтроки(СтруктураДляПоиска);
    Для каждого Строка Из МассивОтмеченныхСтрок Цикл
        Объект.ТЗ.Удалить(Строка);
    КонецЦикла; 
КонецПроцедуры

Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот