|   |   | 
| 
 | Как перекинуть значение с одной строки ТЗ в другую строку, а эту удалить? | ☑ | ||
|---|---|---|---|---|
| 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].ЧасовНаПроект + ОсталосьЧасовНаПроект; КонецЕсли; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |