Приветствую.

Столкнулся с задачей, разделить строки ТЧ по заданной сумме.

Есть Н-количество строк, суммы у всех разные. Бывает больше нужной суммы, а бывает и меньше.

№ Количество Всего
1 120,000 7 142,40
2 300,000 9 198,00
3 360,000 8 769,60
4 36,000 6 799,68
5 36,000 6 443,28
6 50,000 38 961,00
7 86,000 15 392,28
8 550,000 16 863,00

Необходимо все строки которые превышают указанную сумму разбить на равные, а остаток внести в отдельную строку.
Может кто сталкивался уже с подобным родом задачи, помогите
---
Поправил запрос чтобы показывал количество для наглядности

```1c
    ВЫБРАТЬ
    0 КАК Числа
    ПОМЕСТИТЬ РядЧисел

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    5

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    6

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    7

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    8

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    9
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 КАК Количество
    ПОМЕСТИТЬ Числа
    ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Количество как Количество,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Оставлям
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма < &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Разделяем
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма > &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Разделяем.Номенклатура КАК Номенклатура,
    Разделяем.Цена КАК Цена,
    Разделяем.Сумма КАК Сумма,
    ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеДеление,
    ВЫРАЗИТЬ(Разделяем.Сумма / (Разделяем.Цена * (ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)))) - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеКол,
    (ВЫРАЗИТЬ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена * ((ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) КАК ЧИСЛО(15, 8))) - (ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) - 0.5 КАК ЧИСЛО(15, 0)))) КАК ЧИСЛО(15, 0))) / Разделяем.Цена КАК ДопСтрока
    ПОМЕСТИТЬ Заготовка
    ИЗ
    Разделяем КАК Разделяем
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Заготовка.Номенклатура КАК Номенклатура,
    Заготовка.Цена КАК Цена,
    Заготовка.ОсновноеДеление как Количество,
    Заготовка.Цена * Заготовка.ОсновноеДеление КАК Сумма
    ИЗ
    Числа КАК Числа
    ЛЕВОЕ СОЕДИНЕНИЕ Заготовка КАК Заготовка
    ПО (ИСТИНА)
    ГДЕ
    Числа.Количество <= Заготовка.ОсновноеКол

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Заготовка.Номенклатура,
    Заготовка.Цена,
    Заготовка.ДопСтрока как Количество,
    Заготовка.Цена * Заготовка.ДопСтрока
    ИЗ
    Заготовка КАК Заготовка
    ГДЕ
    Заготовка.ДопСтрока > 0

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Оставлям.Номенклатура,
    Оставлям.Цена,
    Оставлям.Количество,
    Оставлям.Сумма
    ИЗ
    Оставлям КАК Оставлям

    УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Сумма УБЫВ
```
---
Сформулируйте подробнее требования и их реализацию на примере из двух строк.

второе замечание - вы пишите что надо обработать строки таблицы по заданному значению ОДНОЙ колонки. А в примере у вас две колонки, это запутывает...

понятно что при обработке строк значение в контрольной колонке которых превышает заданное разбивать придется все числовые колонки строки. Но какова формула допустим мы делим строку 1 в которой значение 21 и можем получить две или три строки,
тогда 1(1) = 21 div 2, 1(2) = 21 div 2, и если 21 mod 2 > 0 тогда 1(3) = 21 mod 2. Я правильно понял желаемое?

Могу накидать запросом к ТЧ любого документа
---
Есть ТЧ документа РН, со всеми вытекающими из него колонками. Стоит задача разбить все строки, где сумма > заданной пользователем.
Естественно при такой разбивки нужно пересчитать и количество, согласно сумме. Сумма может быть меньшой, но не больше заданной.

Если для примера, разбить на строки, где сумма превышает 4800.

Есть строка начальная
№ Количество Цена Сумма Сумма НДС Всего
1 50,000 649,35 32 467,50 6 493,50 38 961,00

А нужно

№ Количество Цена Сумма Сумма НДС Всего
1 6,000 649,35 3 896,10 779,22 4 675,32
2 6,000 649,35 3 896,10 779,22 4 675,32
3 6,000 649,35 3 896,10 779,22 4 675,32
4 6,000 649,35 3 896,10 779,22 4 675,32
5 6,000 649,35 3 896,10 779,22 4 675,32
6 6,000 649,35 3 896,10 779,22 4 675,32
7 6,000 649,35 3 896,10 779,22 4 675,32
8 6,000 649,35 3 896,10 779,22 4 675,32
9 2,000 649,35 1 298,70 259,74 1 558,44

Не могу понять как сделать оптимально. Если делать подбор методом количество * цену, то выходит очень много итераций. А это сказывается на скорости(
---
Судя по наличию колонки Всего - у вас УНФ
Попробую сегодня накидать запросом для документа расходная накладная
---
Накидал запросом хотя и не тривиально

Картинка "Исходная таблица" (первая картинка) иллюстрирует что есть исходно в документе. Источником данных я взял документ счет на оплату но можно переделать под любой другой или просто под таблицу - параметр запроса

Пределом разбиения строк установим 100 000 р.

Запрос из консоли:

```1c
    ВЫБРАТЬ
    0 КАК Числа
    ПОМЕСТИТЬ РядЧисел

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    5

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    6

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    7

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    8

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    9
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 КАК Количество
    ПОМЕСТИТЬ Числа
    ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Оставлям
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма < &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Разделяем
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма > &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Разделяем.Номенклатура КАК Номенклатура,
    Разделяем.Цена КАК Цена,
    Разделяем.Сумма КАК Сумма,
    ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеДеление,
    ВЫРАЗИТЬ(Разделяем.Сумма / (Разделяем.Цена * (ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)))) - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеКол,
    (ВЫРАЗИТЬ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена * ((ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) КАК ЧИСЛО(15, 8))) - (ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) - 0.5 КАК ЧИСЛО(15, 0)))) КАК ЧИСЛО(15, 0))) / Разделяем.Цена КАК ДопСтрока
    ПОМЕСТИТЬ Заготовка
    ИЗ
    Разделяем КАК Разделяем
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Заготовка.Номенклатура КАК Номенклатура,
    Заготовка.Цена КАК Цена,
    Заготовка.Цена * Заготовка.ОсновноеДеление КАК Сумма
    ИЗ
    Числа КАК Числа
    ЛЕВОЕ СОЕДИНЕНИЕ Заготовка КАК Заготовка
    ПО (ИСТИНА)
    ГДЕ
    Числа.Количество <= Заготовка.ОсновноеКол

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Заготовка.Номенклатура,
    Заготовка.Цена,
    Заготовка.Цена * Заготовка.ДопСтрока
    ИЗ
    Заготовка КАК Заготовка
    ГДЕ
    Заготовка.ДопСтрока > 0

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Оставлям.Номенклатура,
    Оставлям.Цена,
    Оставлям.Сумма
    ИЗ
    Оставлям КАК Оставлям

    УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Сумма УБЫВ
```

Статическое ограничение запроса - не может разбивать более чем на 1000 строк для каждой номенклатуры но это регулируется мощностью ВТ числа. Я просто взял готовый пример на 1000 строк.

Картинка результат (вторая картинка) разбиения иллюстрирует итоговую таблицу полученную в консоли запроса. В логике кода если бы мы обрабатывали документ то ее следует просто загрузить в соответствующую ТЧ.

Макетный запрос отлаживался в УНФ но сохраняя его логику его легко переделать для любого источника.

Ключевая ВТ в запросе:

```1c
    ) КАК ЧИСЛО(15, 8))) - (ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) - 0.5 КАК ЧИСЛО(15, 0)))) КАК ЧИСЛО(15, 0))) / Разделяем.Цена КАК ДопСтрока
    ПОМЕСТИТЬ ЗаготВЫБРАТЬ
    Разделяем.Номенклатура КАК Номенклатура,
    Разделяем.Цена КАК Цена,
    Разделяем.Сумма КАК Сумма,
    ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеДеление,
    ВЫРАЗИТЬ(Разделяем.Сумма / (Разделяем.Цена * (ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)))) - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеКол,
    (ВЫРАЗИТЬ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена * ((ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Ценаовка
    ИЗ
    Разделяем КАК Разделяем
```

Поле ОсновноеКол - вычисляет число основных строк на которые делится исходная, к ним еще добавляется строка остатка.
Поле ОсновноеДеление - вычисляет количество товара в основных строках деления
Поле ДопСтрока - вычисляет количество товара в строках остатка деления. Строка остатка добавляется если значение поля ДопСтрока > 0
---
Поправил запрос чтобы показывал количество для наглядности

```1c
    ВЫБРАТЬ
    0 КАК Числа
    ПОМЕСТИТЬ РядЧисел

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    5

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    6

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    7

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    8

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    9
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 КАК Количество
    ПОМЕСТИТЬ Числа
    ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Количество как Количество,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Оставлям
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма < &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СчетНаОплатуЗапасы.НомерСтроки КАК НомерСтроки,
    СчетНаОплатуЗапасы.Номенклатура КАК Номенклатура,
    СчетНаОплатуЗапасы.Цена КАК Цена,
    СчетНаОплатуЗапасы.Сумма КАК Сумма
    ПОМЕСТИТЬ Разделяем
    ИЗ
    Документ.СчетНаОплату.Запасы КАК СчетНаОплатуЗапасы
    ГДЕ
    СчетНаОплатуЗапасы.Ссылка = &Ссылка
    И СчетНаОплатуЗапасы.Сумма > &Предел
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Разделяем.Номенклатура КАК Номенклатура,
    Разделяем.Цена КАК Цена,
    Разделяем.Сумма КАК Сумма,
    ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеДеление,
    ВЫРАЗИТЬ(Разделяем.Сумма / (Разделяем.Цена * (ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0)))) - 0.5 КАК ЧИСЛО(15, 0)) КАК ОсновноеКол,
    (ВЫРАЗИТЬ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена * ((ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) КАК ЧИСЛО(15, 8))) - (ВЫРАЗИТЬ(Разделяем.Сумма / ((ВЫРАЗИТЬ(&Предел / Разделяем.Цена - 0.5 КАК ЧИСЛО(15, 0))) * Разделяем.Цена) - 0.5 КАК ЧИСЛО(15, 0)))) КАК ЧИСЛО(15, 0))) / Разделяем.Цена КАК ДопСтрока
    ПОМЕСТИТЬ Заготовка
    ИЗ
    Разделяем КАК Разделяем
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Заготовка.Номенклатура КАК Номенклатура,
    Заготовка.Цена КАК Цена,
    Заготовка.ОсновноеДеление как Количество,
    Заготовка.Цена * Заготовка.ОсновноеДеление КАК Сумма
    ИЗ
    Числа КАК Числа
    ЛЕВОЕ СОЕДИНЕНИЕ Заготовка КАК Заготовка
    ПО (ИСТИНА)
    ГДЕ
    Числа.Количество <= Заготовка.ОсновноеКол

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Заготовка.Номенклатура,
    Заготовка.Цена,
    Заготовка.ДопСтрока как Количество,
    Заготовка.Цена * Заготовка.ДопСтрока
    ИЗ
    Заготовка КАК Заготовка
    ГДЕ
    Заготовка.ДопСтрока > 0

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    Оставлям.Номенклатура,
    Оставлям.Цена,
    Оставлям.Количество,
    Оставлям.Сумма
    ИЗ
    Оставлям КАК Оставлям

    УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Сумма УБЫВ
```
---
атура,
Сумма УБЫВ

Спасибо за помощь
---
Использовать Цел();
---
```1c
    Для каждого Ст ИЗ Таблица Цикл
    Если Ст.Сумма > НужнаяСумма Тогда
    Доб.Добавить(Новый Структура("Строка, Сумма",Ст, Ст.Сумма - НужнаяСумма);
    Ст.Сумма = НужнаяСумма;
    КонецЕсли;
    КонецЦикла;

    Для каждого Ст ИЗ Доб Цикл
    НС = Таблица.Добавить();
    ЗаполнитьЗначенияСвойств(НС, Доб.Строка);
    НС.Сумма = Доб.Сумма;
    КонецЦикла;
```