Вопрос - вторую неделю ломаю голову как правильно упорядочить данные на дереве

если в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму
---
```1c
    ВЫБРАТЬ
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ тСпецификация
    ИЗ
    РегистрНакопления.Спецификация КАК Спецификация

    СГРУППИРОВАТЬ ПО
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    тСпецПлюсКол.Регистратор КАК Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.Проект КАК Группировка,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
    СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
    СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
    ИЗ
    тСпецификация КАК тСпецПлюсКол
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки КАК СпецификацияОстатки
    ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
    И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
    И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура

    СГРУППИРОВАТЬ ПО
    тСпецПлюсКол.Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки,
    тСпецПлюсКол.Проект

    УПОРЯДОЧИТЬ ПО
    Регистратор,
    НомерСтроки
    ИТОГИ ПО
    Группировка ИЕРАРХИЯ
```
---
в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму
что -то понять не могу вопроса. Сортировка должна отрабатывать пусть тис дублей
---
Теперь я не понимаю "Сортировка должна отрабатывать пусть тис дублей "
Мне дубли как раз таки убрать надо - свернуть по номенклатуре
что-бы количество сложилось
а в этом случае порядок строк меняется - вот и раздумываю что делать

```1c
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    | Спецификация.Регистратор,
    | Спецификация.Номенклатура КАК Номенклатура,
    | Спецификация.Проект КАК Проект,
    | Спецификация.Проект КАК Группировка,
    | Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
    | ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв
    |ИЗ
    | РегистрНакопления.Спецификация КАК Спецификация
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
    | ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
    | ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
    | И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    | ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
    | И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка";
```

вот так худо бедно работает
но стоит добавить

```1c
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    | Спецификация.Регистратор,
    | Спецификация.Номенклатура КАК Номенклатура,
    | Спецификация.Проект КАК Проект,
    | Спецификация.Проект КАК Группировка,
    | Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
    | ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв,
    | Спецификация.НомерСтроки КАК НомерСтроки ( вот эту строку - начинаются дубли)
    |ИЗ
    | РегистрНакопления.Спецификация КАК Спецификация
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
    | ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
    | ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
    | И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    | ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
    | И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка ";
```
---
Насколько я понял, вам необходимо сгруппировать данные по номенклатуре.

```1c
    "ВЫБРАТЬ
    | СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
    | Спецификация.Регистратор,
    | Спецификация.Номенклатура КАК Номенклатура,
    | Спецификация.Проект КАК Проект,
    | Спецификация.Проект КАК Группировка,
    | Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    | СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
    | СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
    | СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
    | СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
    |ИЗ
    | РегистрНакопления.Спецификация КАК Спецификация
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
    | ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
    | ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
    | И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    | ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
    | И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка
    | Сгруппировать по
    | Спецификация.Регистратор,
    | Спецификация.Номенклатура КАК Номенклатура,
    | Спецификация.Проект КАК Проект,
    | Спецификация.Проект КАК Группировка,
    | Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки

    ";
```

Без "РАЗЛИЧНЫЕ"
---
ладно привожу почти полный текст

```1c
    Функция ПолучитьТекстЗапроса_()
    ТекстЗапроса = ";

    ТекстЗапроса =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    | Спецификация.Регистратор,
    | Спецификация.Номенклатура КАК Номенклатура,
    | Спецификация.Проект КАК Проект,
    | Спецификация.Проект КАК Группировка,
    | Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
    | ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
    | ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
    | ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв
    |ИЗ
    | РегистрНакопления.Спецификация КАК Спецификация
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
    | ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
    | ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
    | И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    | ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
    | И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка";

    флаг=0;
    Если ОтбиратьПоПроекту ИЛИ ОтбиратьПоЗаявке ИЛИ ОтбиратьПоНоменклатуре или ОтбиратьПоЗаказам Тогда
    ПервоеУсловие = Истина;

    Если ОтбиратьПоПроекту
    Тогда
    Если ПервоеУсловие Тогда
    ТекстЗапроса = ТекстЗапроса + " ГДЕ";
    ПервоеУсловие = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + " И";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + " Спецификация.Проект = &Проект";
    КонецЕсли;

    Если ОтбиратьПоНоменклатуре И Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
    Если ПервоеУсловие Тогда
    ТекстЗапроса = ТекстЗапроса + " ГДЕ";
    ПервоеУсловие = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + " И";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + " Спецификация.Номенклатура = &Номенклатура И Спецификация.Регистратор.ссылка = Спецификация.ЗаявкаНаКомплектацию.ссылка";
    КонецЕсли;

    Если ОтбиратьПоЗаказам И Заказы <> Документы.ЗаказПоставщику.ПустаяСсылка() Тогда
    Если ПервоеУсловие Тогда
    ТекстЗапроса = ТекстЗапроса + " ГДЕ";
    ПервоеУсловие = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + " И";
    КонецЕсли;

    Если ОтбиратьПоЗаявке И ЗаявкаНаКомплектацию <> Документы.ЗаявкаНаКомплектацию.ПустаяСсылка() Тогда
    ТекстЗапроса = ТекстЗапроса + " Спецификация.ЗаявкаНаКомплектацию в (&ЗаявкаНаКомплектацию) И Спецификация.регистратор в (&Заказы)";
    флаг=1;
    иначе
    ТекстЗапроса = ТекстЗапроса + " Спецификация.регистратор в (&Заказы) ";
    Конецесли;
    КонецЕсли;
    Если ОтбиратьПоЗаявке И ЗаявкаНаКомплектацию <> Документы.ЗаявкаНаКомплектацию.ПустаяСсылка() И флаг=0 Тогда
    Если ПервоеУсловие Тогда
    ТекстЗапроса = ТекстЗапроса + " ГДЕ";
    ПервоеУсловие = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + " И";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + " Спецификация.ЗаявкаНаКомплектацию в (&ЗаявкаНаКомплектацию) И Спецификация.Регистратор в (&ЗаявкаНаКомплектацию) ";
    КонецЕсли;

    Иначе

    ТекстЗапроса = ТекстЗапроса + " ГДЕ Спецификация.Регистратор.ссылка = Спецификация.ЗаявкаНаКомплектацию.ссылка" ;

    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса + "
    , | ИТОГИ ПО
    | Группировка ИЕРАРХИЯ ";

    Возврат ТекстЗапроса;
    КонецФункции

    Функция ПолучитьТекстЗапроса_2()
    ТекстЗапроса =
    "ВЫБРАТЬ
    | СпецификацияОбороты.Регистратор,
    | СпецификацияОбороты.КоличествоПриход,
    | СпецификацияОбороты.КоличествоРасход,
    | СпецификацияОбороты.СуммаКОплатеПриход,
    | СпецификацияОбороты.СуммаКОплатеРасход,
    | СпецификацияОбороты.КоличествоКПолучениюПриход,
    | СпецификацияОбороты.КоличествоКПолучениюРасход
    |ИЗ
    | РегистрНакопления.Спецификация.Обороты(
    | &НачДата,
    | &КонДата,
    | Регистратор,
    | ЗаявкаНаКомплектацию = &ВыбЗаявка
    | И Номенклатура = &ВыбНоменклатура
    | И Проект = &ВыбПроект) КАК СпецификацияОбороты"
    ;
    /// И вот здесь у меня какраз таки и начинается задвоение если не поставить Различные
    Возврат ТекстЗапроса;
    КонецФункции

    Процедура ЗаполнитьСтроку(ТЗ, Стр2)
    номерПлатежки=0;
    номерПоступ=0;

    Для Каждого Стр из ТЗ Цикл
    ТипРегистратора = ТипЗнч(Стр.Регистратор);
    Если ТипРегистратора = Тип("ДокументСсылка.ЗаявкаНаКомплектацию") Тогда
    // Стр2.Заявлено = Стр.КоличествоПриход;
    Стр2.Заявлено = Стр2.Заявлено + Стр.КоличествоПриход;
    ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.РезервированиеТоваров") Тогда
    // сообщить("Стр2.Резерв " + Стр.КоличествоРасход);
    Стр2.Резерв = Стр2.Резерв + Стр.КоличествоРасход;
    Стр2.ДокументРезерва = Стр.Регистратор;
    ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    Стр2.Заказано = Стр.КоличествоРасход;
    Стр2.ДокументЗаказа = Стр.Регистратор;
    ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.ПлатежноеПоручениеИсходящее") Тогда
    номерплатежки = номерплатежки + 1;
    если (номерПлатежки = 0 и номерПоступ=0)или (номерплатежки > номерпоступ) тогда
    нСтр2 = Стр2.Строки.Добавить();
    нСтр2.Оплачено = Стр.СуммаКОплатеПриход;

    нСтр2.Оплата = Стр.СуммаКОплатеПриход;
    нСтр2.Пометка = Ложь;
    нСтр2.ДокументОплаты = Стр.Регистратор;
    иначе

    // нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    // нСтр2.ДокументОплаты = Стр.Регистратор;
    КонецЕсли;
    нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    нСтр2.ДокументОплаты = Стр.Регистратор;
    нСтр2.Оплата = Стр.СуммаКОплатеПриход;

    // сообщить("Стр2.ДокументОплаты" + Стр2.Оплачено);
    ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.АвансовыйОтчет") Тогда
    номерплатежки = номерплатежки + 1;
    если (номерПлатежки = 0 и номерПоступ=0)или (номерплатежки > номерпоступ) тогда
    нСтр2 = Стр2.Строки.Добавить();
    нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    нСтр2.ДокументОплаты = Стр.Регистратор;
    нСтр2.Оплата = Стр.СуммаКОплатеПриход;
    нСтр2.Пометка = Ложь;
    иначе
    // нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    // нСтр2.ДокументОплаты = Стр.Регистратор;
    КонецЕсли;
    нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    нСтр2.ДокументОплаты = Стр.Регистратор;
    нСтр2.Оплата = Стр.СуммаКОплатеПриход;
    ИначеЕсли
    //ТипРегистратора = Тип("ДокументСсылка.ПоступлениеТоваровУслуг")
    ТипРегистратора = Тип("ДокументСсылка.ПриходныйОрдерНаТовары") Тогда
    номерПоступ = номерПоступ + 1;
    если (номерПлатежки = 0 и номерПоступ=0)или (номерплатежки < номерпоступ) тогда
    нСтр2 = Стр2.Строки.Добавить();
    нСтр2.Получено = Стр.КоличествоКПолучениюПриход;
    нСтр2.ДокументПоступления = Стр.Регистратор;
    нСтр2.поступление = Стр.КоличествоКПолучениюПриход;
    нСтр2.Пометка = Ложь;
    иначе
    // нСтр2.Оплачено = Стр.СуммаКОплатеПриход;
    // нСтр2.ДокументОплаты = Стр.Регистратор;
    КонецЕсли;

    нСтр2.Получено = Стр.КоличествоКПолучениюПриход;
    нСтр2.ДокументПоступления = Стр.Регистратор;
    нСтр2.поступление = Стр.КоличествоКПолучениюПриход;
    КонецЕсли;
    КонецЦикла;
    стр2.остатокзаявки = стр2.заявлено - Стр2.Заказано-СТР2.РЕЗЕРВ;
    //сообщить("ТипЗнч(Стр.Регистратор)" + ТипЗнч(Стр.Регистратор));

    КонецПроцедуры

    Процедура ЗаполнитьТаблицу()
    ТФ = ПолучитьШаблонТаблицы();

    Запрос = Новый Запрос;
    Запрос.Текст = ПолучитьТекстЗапроса_();

    Запрос.УстановитьПараметр("ДатаОтчета", РабочаяДата);
    Запрос.УстановитьПараметр("Проект", Проект);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ЗаявкаНаКомплектацию", ЗаявкаНаКомплектацию);
    Запрос.УстановитьПараметр("Заказы", заказы);

    // ТФ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    ТФ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

    ДобавитьНедостающиеКолонки();

    ПерестроитьТаблицуВФорме();

    Запрос = Новый Запрос;
    Запрос.Текст = ПолучитьТекстЗапроса_2();
    Запрос.УстановитьПараметр("КонДата", КонецДня(РабочаяДата));

    НачДата = ";
    Для Каждого Стр из ТФ.Строки Цикл
    Если Стр.Родитель = Неопределено Тогда
    Для Каждого Стр2 из Стр.Строки Цикл

    Запрос.УстановитьПараметр("НачДата",НачалоДня(Стр2.ДокументЗаявки.Дата));

    Запрос.УстановитьПараметр("ВыбЗаявка", Стр2.ДокументЗаявки);
    Запрос.УстановитьПараметр("ВыбНоменклатура", Стр2.Номенклатура);
    Запрос.УстановитьПараметр("ВыбПроект", Стр2.Проект);

    , ТЗ = Запрос.Выполнить().Выгрузить();
    ЗаполнитьСтроку(ТЗ, Стр2);
    КонецЦикла;
    Иначе
    сообщить("Стр.Родитель " + Стр.Родитель);
    Запрос.УстановитьПараметр("НачДата", НачалоДня(Стр2.ДокументЗаявки.Дата));
    Запрос.УстановитьПараметр("ВыбЗаявка", Стр2.ДокументЗаявки);
    Запрос.УстановитьПараметр("ВыбНоменклатура", Стр2.Номенклатура);
    Запрос.УстановитьПараметр("ВыбПроект", Стр2.Проект);
    , ТЗ = Запрос.Выполнить().Выгрузить();
    , ЗаполнитьСтроку(ТЗ, Стр2);
    КонецЕсли;
    КонецЦикла;
    СчитатьСуммыДЗ(ТФ.Строки);

    КонецПроцедуры
```
---
Вас не смущает запрос в цикле?
---
А как выглядит признак дубля? Одинаковое наименование? Или имеются в виду дубли в заявках на комплектацию?
---
Мне кажется, что запрос проще переписать под использование временных таблиц, в них собрать всё без дублей, а затем соединить.
---
Непонятно что должно быть упорядочено. В коде нет намеков на сортировку.

PS. Код плох. Пробуйте приводить получение данных к единому запросу, ну или конечной последовательности запросов.
Вам может пригодится конструкция вида:

```1c
    ГДЕ
    &НеОтбиратьПоПроекту
    ИЛИ Спецификация.Проект = &Проект

    Запрос.УстановитьПараметр("НеОтбиратьПоПроекту", Не ОтбиратьПоПроекту);
```
---
Проблема возникает в следующем появляются дубли это как бы бог с ними они и должны появлятся - другой вопрос что количество расползается
те
лампа - 2
лампа -2

в заявке

на форме
лампа 4
лампа 4
 вот и ломаю голову
с условиями то как нибудь добью
меня сейчас больше всего тревожат данные
---
Так "РАЗЛИЧНЫЕ" не решило проблему?
---
Различные проблему решило но при этом нумерация вся "перекорежилась" вот и думаю как ее выправить
либо дополнительное поле вводить чтобы хранить номер строки заявки - дурдом а что делать иначе выборку правильно не сделать
---
Одной проблемой меньше. Объясни по каким полям нужна сортировка.
---
Сам подход к запросу ужасен. Сделайте необходимые манипуляции пакетами, затем обработайте пакеты.
---
В данном случае код писал не я - я только дописывал - и тестировал
наткнулся на данную проблему - думаю как правильнее решить
или по каждой строке отслеживать или же все таки группировать
---
Сам отчет лучше всего сделать на СКД, вместо кучи проверок заключите свои проверки в {} чтобы отсутствующие проверки не вызывали ошибку и не обрабатывались
---
Ладно попытаюсь - мне нужно сохранить порядок записей как в заявке, заказе
чтобы была читаемость
а то в документе одно а на форме черте что
сортировка нужна по номеру строки
но если я добавляю номер строки в запросе
появляются дубли
---
Нумерация строк что в 1С, что в SQL - слишком изощренное действие, замедляющее скорость запроса. Считаю, что если результат запроса выводится в печатную форму, то проще добавить в цикл банальный
```1c
    Ном = 1;
    //Цикл
    // ...
    ТабДок.Номер = Ном; Ном=Ном+1;
    //КонецЦикла
```
 А если результат уходит в таблицу значений, то добавить в нее колонки и аналогичным циклом пронумеровать колонку.
---
Для нумерации строк таблицы можно также в её запросе использовать встроенную функцию АВТОНОМЕРЗАПИСИ(), которая доступна с версии платформы 8.3.13.

Пример её использования можно посмотреть здесь: https://infostart.ru/1c/articles/1171188/
---
Еще раз мне нужно сохранить порядок как в документе но без дублей
может кто-то подскажет как правильно использовать метод СВЕРНУТЬ
---
Ваше задвоение данных - это неустранимая особенность левого соединения в запросах: когда в соединяемой таблице есть дубли ключевых полей, то задваиваются и строки основной таблицы. По хорошему Вам надо переделывать запрос, а глядя на качество кода, делать это с нуля - заново заказать его у нормальных спецов.
---
нету у меня задвоения нету мне нужно упорядочить строки в таблице значений
---
упорядочить строки в таблице значений как в документе заявки от которой все и пляшется
---
Для вашего случая подойдет вот такой костыль:

```1c
    ВЫБРАТЬ
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    Спецификация.Регистратор,
    Спецификация.Номенклатура КАК Номенклатура,
    Спецификация.Проект КАК Проект,
    Спецификация.Проект КАК Группировка,
    Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
    ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
    ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
    ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв,
    МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
    ИЗ
    РегистрНакопления.Спецификация КАК Спецификация
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
    ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
    ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
    И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
    И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка
    Сгруппировать по
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию,
    ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0),
    ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0),
    ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0),
    ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)
```

Агрегатную функцию МАКСИМУМ или МИНИМУМ выбери по своему усмотрению.
Не знаю специфики ваших метаданных, поэтому за верность итоговых чисел в отчете не могу ручиться.
---
к сожалению "костыль" не подошел у меня дерево и когда я прописываю
МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
начинает ругаться
ТФ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
---
скорее всего не хватает

```1c
    УПОРЯДОЧИТЬ ПО
    Регистратор,
    НомерСтроки
    ИТОГИ ПО
    Группировка ИЕРАРХИЯ
```

НО! я смотрю на запрос, и меня терзают смутные сомнения, что метаданные вами понимаются правильно. Что накапливает регистр Спецификация ? Почему же запрос пробегает весь регистр? Может нужно отбирать некую табличную часть документов ЗаявкаНаКомплектацию? Или все же требуется выводить только не "закрытые" спецификации?
---
```1c
    ВЫБРАТЬ
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ тСпецификация
    ИЗ
    РегистрНакопления.Спецификация КАК Спецификация

    СГРУППИРОВАТЬ ПО
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    тСпецПлюсКол.Регистратор КАК Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.Проект КАК Группировка,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
    СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
    СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
    ИЗ
    тСпецификация КАК тСпецПлюсКол
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки КАК СпецификацияОстатки
    ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
    И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
    И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура

    СГРУППИРОВАТЬ ПО
    тСпецПлюсКол.Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки,
    тСпецПлюсКол.Проект

    УПОРЯДОЧИТЬ ПО
    Регистратор,
    НомерСтроки
    ИТОГИ ПО
    Группировка ИЕРАРХИЯ
```
---
Или даже так, заменив ваш самосборный текст запроса с условиями на построитель:

```1c
    ВЫБРАТЬ
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
    МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ тСпецификация
    ИЗ
    РегистрНакопления.Спецификация КАК Спецификация
    {ГДЕ
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.Регистратор КАК Спецификация,
    Спецификация.ЗаявкаНаКомплектацию,
    Спецификация.Регистратор КАК Заказы}

    СГРУППИРОВАТЬ ПО
    Спецификация.Регистратор,
    Спецификация.Номенклатура,
    Спецификация.Проект,
    Спецификация.ЗаявкаНаКомплектацию
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    тСпецПлюсКол.Регистратор КАК Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.Проект КАК Группировка,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
    СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
    СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
    СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
    ИЗ
    тСпецификация КАК тСпецПлюсКол
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, {(Номенклатура) КАК Номенклатура}) КАК СпецификацияОстатки
    ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
    И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура) КАК Номенклатура}) КАК ТоварыНаСкладахОстатки
    ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
    ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
    И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура

    СГРУППИРОВАТЬ ПО
    тСпецПлюсКол.Регистратор,
    тСпецПлюсКол.Номенклатура,
    тСпецПлюсКол.Проект,
    тСпецПлюсКол.ДокументЗаявки,
    тСпецПлюсКол.НомерСтроки,
    тСпецПлюсКол.Проект

    УПОРЯДОЧИТЬ ПО
    Регистратор,
    НомерСтроки
    ИТОГИ ПО
    Группировка ИЕРАРХИЯ
```
---
Не совсем понял - но догадываюсь что вроде как таким образом загоняются переменые
надо попробывать
(25) Буду тестировать - на первый взгляд вроде работает
думаю к понедельнику вторнику дать заключение
---
будете тестировать - во втором запросе в условие вирт таблицы стоит добавить

```1c
    номенклатура в (выбрать т.Номенклатура из тСпецификация т)
```

чтобы ограничить выборку. сразу хотел написать, но что т поленился.
---
от условий то мне в любом случае некуда деваться
---
от условий то мне в любом случае некуда деваться
см.
заменив ваш самосборный текст запроса с условиями на построитель
-- это удобней, чем по частям запрос собирать.
---
Я понимаю что лучше - но мне нужно было решить конкретную задачу - вроде как работает погонял итак и этак
---
A X (ditp) Поясните пожалуйста

будете тестировать - во втором запросе в условие вирт таблицы стоит добавить

номенклатура в (выбрать т.Номенклатура из тСпецификация т)

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

```1c
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(
    | ,
    | Номенклатура В
    | (ВЫБРАТЬ
    | тСпецификация.Номенклатура
    | ИЗ
    | тСпецификация КАК тСпецификация) {(Номенклатура) КАК Номенклатура}) КАК СпецификацияОстатки
```
---
Мда тогда по-моему еще 8.3.10 была. Но спецификация работала - пришли эффективные менеджеры и никому ничего не стало нужно.....
Пару крупных договоров на ней сделали и все.