Вопрос вроде очень простой, но что-то я встал в тупик или сел в лужу.
Получаю запросом выборку из регистра накопления с группировкой по подотчетному лицу.
В группировке формирую ТЗ со строками движений.
В этой ТЗ мне надо выбрать все строки, в которых одинаковая СуммаОборот, но с разным знаком.
Например,

Номер Подразделение СуммаОборот ПодотчетноеЛицо
1 Департамент марк -2685,09 Попов
2 Отдел производств 3000 Попов
3 Отдел искусств 2685,09 Попов

Отсюда надо выбрать 1 и 3 строки.
Как это сделать?
---
Цикл по ТЗ, для текущей строки ищем в ТЗ строку с суммой с противоположным знаком, сохраняем обе строки в массив. Перед записью в массив проверяем, что таких строк там еще нет.
Или еще проще, сохраняем в массиве только текущую строку, если нашли, а когда дойдем до строки с противоположным знаком, то найдем для нее и запишем снова текущую.
---
"В лоб" - добавить новую колонку, загнать туда число по модулю и таким образом искать.
---
а если попадётся, что оба одинаковые положительные?
---
(2)а если попадётся, что оба одинаковые положительные?Тогда не по модулю, а с обратным знаком.
---
А что вы планируете делать с найденными строками?
---
циклом в цикле?
---
сильно зависит от того, что нужно в итоге делать с найденными строками.
Возможно, сильно быстрее будет, как советуют в (2)
---
как я тогда пойму, что они именно с разными знаками, а не два одинаковых положительных?
---
Это можно отметить как-либо - в этом проблемы не вижу.
---
корректировку движений.
То, что с минусом в плюс
То, что с плюсом в минус
---
эти движения надо "схлопнуть"
---
А если вот так?
1 Департамент марк -2685,09 Попов
2 Отдел производств 2685,09 Попов
3 Отдел искусств 2685,09 Попов
Что с чем схлопывать?
---
Смотреть будут итоговую сумму по подотчетному лицу, так что наверное, в этом случае схлопывать можно отрицательную сумму с любой из этих двух
---
```1c
    ВЫБРАТЬ
    "1" КАК Номер,
    "Попов" КАК ПодотчетноеЛицо,
    100 КАК Сумма
    ПОМЕСТИТЬ ВТ

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

    ВЫБРАТЬ
    "2",
    "Попов",
    200

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

    ВЫБРАТЬ
    "3",
    "Попов",
    -100
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.ПодотчетноеЛицо КАК ПодотчетноеЛицо,
    ВТ.Номер КАК Номер,
    ВТ1.Номер КАК Номер1,
    ВТ.Сумма КАК Сумма,
    ВТ1.Сумма КАК Сумма1
    ИЗ
    ВТ КАК ВТ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
    ПО (ВТ.Сумма = -ВТ1.Сумма)
```
---
Цикл по ТЗ, для текущей строки ищем в ТЗ строку с суммой с противоположным знаком, сохраняем обе строки в массив. Перед записью в массив проверяем, что таких строк там еще нет.
Или еще проще, сохраняем в массиве только текущую строку, если нашли, а когда дойдем до строки с противоположным знаком, то найдем для нее и запишем снова текущую.
---
Прогони через модуль потом сгруппируй.
---
Из простых вариантов - добавляем в таблицу колонку Обработано, булевую.
Добавляем индекс по полю Сумма и Обработано
В цикле обходим таблицу - для каждой строки, если Обработано Ложь, выполняем поиск строк по условнию Сумма = - Сумма и Обработано Ложь.
Если что-то нашлось, текущей строке ставим Обработано Истина, и Первой найденной строке ставим Обработано Истина.
Дальше все строки, где Обработано Истина - это нужные строки.