Как правильно упорядочить дерево, чтобы было как в табличном документе

1. German_Tagil 42 18.03.17 22:36 Сейчас в теме
Вопрос - вторую неделю ломаю голову как правильно упорядочить данные на дереве

если в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
25. ditp 91 23.03.17 12:14 Сейчас в теме +2 $m
ВЫБРАТЬ
	Спецификация.Регистратор,
	Спецификация.Номенклатура,
	Спецификация.Проект,
	Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
	МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
	РегистрНакопления.Спецификация КАК Спецификация

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

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

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

УПОРЯДОЧИТЬ ПО
	Регистратор,
	НомерСтроки
ИТОГИ ПО
	Группировка ИЕРАРХИЯ
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. alyonchik 20.03.17 12:35 Сейчас в теме
(1)
в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму

что -то понять не могу вопроса. Сортировка должна отрабатывать пусть тис дублей
3. German_Tagil 42 20.03.17 14:29 Сейчас в теме
Теперь я не понимаю "Сортировка должна отрабатывать пусть тис дублей "
Мне дубли как раз таки убрать надо - свернуть по номенклатуре
что-бы количество сложилось
а в этом случае порядок строк меняется - вот и раздумываю что делать

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


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


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

";  
Показать

Без "РАЗЛИЧНЫЕ"
5. German_Tagil 42 20.03.17 19:47 Сейчас в теме
ладно привожу почти полный текст

Функция ПолучитьТекстЗапроса_()
	ТекстЗапроса = "";
	
	
		ТекстЗапроса =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ЕСТЬ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);
		КонецЕсли;
	КонецЦикла;
	СчитатьСуммыДЗ(ТФ.Строки);
	
КонецПроцедуры
Показать
6. ivan_mailrabochi 21.03.17 11:00 Сейчас в теме
Вас не смущает запрос в цикле?
7. v3rter 21.03.17 11:48 Сейчас в теме
А как выглядит признак дубля? Одинаковое наименование? Или имеются в виду дубли в заявках на комплектацию?
8. v3rter 21.03.17 12:52 Сейчас в теме
Мне кажется, что запрос проще переписать под использование временных таблиц, в них собрать всё без дублей, а затем соединить.
alex-l19041; +1 Ответить
9. li5enok 21.03.17 13:33 Сейчас в теме
Непонятно что должно быть упорядочено. В коде нет намеков на сортировку.

PS. Код плох. Пробуйте приводить получение данных к единому запросу, ну или конечной последовательности запросов.
Вам может пригодится конструкция вида:
ГДЕ
    &НеОтбиратьПоПроекту 
            ИЛИ Спецификация.Проект = &Проект

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

в заявке

на форме
лампа 4
лампа 4
вот и ломаю голову
с условиями то как нибудь добью
меня сейчас больше всего тревожат данные
11. li5enok 21.03.17 14:56 Сейчас в теме
(10) Так "РАЗЛИЧНЫЕ" не решило проблему?
14. German_Tagil 42 22.03.17 12:29 Сейчас в теме
(11) Различные проблему решило но при этом нумерация вся "перекорежилась" вот и думаю как ее выправить
либо дополнительное поле вводить чтобы хранить номер строки заявки - дурдом а что делать иначе выборку правильно не сделать
16. li5enok 22.03.17 13:59 Сейчас в теме
(14) Одной проблемой меньше. Объясни по каким полям нужна сортировка.
12. Jen1978 19 21.03.17 16:58 Сейчас в теме
Сам подход к запросу ужасен. Сделайте необходимые манипуляции пакетами, затем обработайте пакеты.
15. German_Tagil 42 22.03.17 12:34 Сейчас в теме
(12) В данном случае код писал не я - я только дописывал - и тестировал
наткнулся на данную проблему - думаю как правильнее решить
или по каждой строке отслеживать или же все таки группировать
13. Jen1978 19 21.03.17 17:01 Сейчас в теме
Сам отчет лучше всего сделать на СКД, вместо кучи проверок заключите свои проверки в {} чтобы отсутствующие проверки не вызывали ошибку и не обрабатывались
17. German_Tagil 42 22.03.17 14:44 Сейчас в теме
Ладно попытаюсь - мне нужно сохранить порядок записей как в заявке, заказе
чтобы была читаемость
а то в документе одно а на форме черте что
сортировка нужна по номеру строки
но если я добавляю номер строки в запросе
появляются дубли
18. v3rter 22.03.17 15:54 Сейчас в теме
(17) Нумерация строк что в 1С, что в SQL - слишком изощренное действие, замедляющее скорость запроса. Считаю, что если результат запроса выводится в печатную форму, то проще добавить в цикл банальный
Ном = 1; 
//Цикл
// ...
ТабДок.Номер = Ном; Ном=Ном+1;
//КонецЦикла
А если результат уходит в таблицу значений, то добавить в нее колонки и аналогичным циклом пронумеровать колонку.
37. Obertone 74 24.03.22 14:56 Сейчас в теме
(18) Для нумерации строк таблицы можно также в её запросе использовать встроенную функцию АВТОНОМЕРЗАПИСИ(), которая доступна с версии платформы 8.3.13.

Пример её использования можно посмотреть здесь: https://infostart.ru/1c/articles/1171188/
19. German_Tagil 42 22.03.17 15:59 Сейчас в теме
Еще раз мне нужно сохранить порядок как в документе но без дублей
может кто-то подскажет как правильно использовать метод СВЕРНУТЬ
20. v3rter 22.03.17 16:29 Сейчас в теме
(19) Ваше задвоение данных - это неустранимая особенность левого соединения в запросах: когда в соединяемой таблице есть дубли ключевых полей, то задваиваются и строки основной таблицы. По хорошему Вам надо переделывать запрос, а глядя на качество кода, делать это с нуля - заново заказать его у нормальных спецов.
21. German_Tagil 42 22.03.17 18:19 Сейчас в теме
нету у меня задвоения нету мне нужно упорядочить строки в таблице значений
22. German_Tagil 42 22.03.17 19:07 Сейчас в теме
упорядочить строки в таблице значений как в документе заявки от которой все и пляшется
23. li5enok 23.03.17 10:30 Сейчас в теме
Для вашего случая подойдет вот такой костыль:
ВЫБРАТЬ
	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
	Спецификация.Регистратор,
	Спецификация.Номенклатура КАК Номенклатура,
	Спецификация.Проект КАК Проект,
	Спецификация.Проект КАК Группировка,
	Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
	ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
	ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
	ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
	ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв,
	МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ИЗ
	РегистрНакопления.Спецификация КАК Спецификация
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
		ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
        ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
			И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
		ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
			И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка
Сгруппировать по
	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
	Спецификация.Регистратор,
	Спецификация.Номенклатура,
	Спецификация.Проект,
	Спецификация.Проект,
	Спецификация.ЗаявкаНаКомплектацию,
	ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0),
	ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0),
	ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0),
	ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)
Показать

Агрегатную функцию МАКСИМУМ или МИНИМУМ выбери по своему усмотрению.
Не знаю специфики ваших метаданных, поэтому за верность итоговых чисел в отчете не могу ручиться.
24. German_Tagil 42 23.03.17 11:30 Сейчас в теме
к сожалению "костыль" не подошел у меня дерево и когда я прописываю
МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
начинает ругаться
ТФ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
27. li5enok 23.03.17 12:44 Сейчас в теме
(24) скорее всего не хватает
УПОРЯДОЧИТЬ ПО
    Регистратор,
    НомерСтроки
ИТОГИ ПО
    Группировка ИЕРАРХИЯ


НО! я смотрю на запрос, и меня терзают смутные сомнения, что метаданные вами понимаются правильно. Что накапливает регистр Спецификация ? Почему же запрос пробегает весь регистр? Может нужно отбирать некую табличную часть документов ЗаявкаНаКомплектацию? Или все же требуется выводить только не "закрытые" спецификации?
25. ditp 91 23.03.17 12:14 Сейчас в теме +2 $m
ВЫБРАТЬ
	Спецификация.Регистратор,
	Спецификация.Номенклатура,
	Спецификация.Проект,
	Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
	МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
	РегистрНакопления.Спецификация КАК Спецификация

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

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

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

УПОРЯДОЧИТЬ ПО
	Регистратор,
	НомерСтроки
ИТОГИ ПО
	Группировка ИЕРАРХИЯ
Показать
26. ditp 91 23.03.17 12:22 Сейчас в теме
Или даже так, заменив ваш самосборный текст запроса с условиями на построитель:
ВЫБРАТЬ
	Спецификация.Регистратор,
	Спецификация.Номенклатура,
	Спецификация.Проект,
	Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
	МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
	РегистрНакопления.Спецификация КАК Спецификация
{ГДЕ
	Спецификация.Номенклатура,
	Спецификация.Проект,
	Спецификация.Регистратор КАК Спецификация,
	Спецификация.ЗаявкаНаКомплектацию,
	Спецификация.Регистратор КАК Заказы}

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

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

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

УПОРЯДОЧИТЬ ПО
	Регистратор,
	НомерСтроки
ИТОГИ ПО
	Группировка ИЕРАРХИЯ
Показать
29. German_Tagil 42 23.03.17 13:24 Сейчас в теме
(26) Не совсем понял - но догадываюсь что вроде как таким образом загоняются переменые
надо попробывать
(25) Буду тестировать - на первый взгляд вроде работает
думаю к понедельнику вторнику дать заключение
30. ditp 91 23.03.17 14:39 Сейчас в теме
(29) будете тестировать - во втором запросе в условие вирт таблицы стоит добавить
номенклатура в (выбрать т.Номенклатура из тСпецификация т)

чтобы ограничить выборку. сразу хотел написать, но что т поленился.
31. German_Tagil 42 29.03.17 10:38 Сейчас в теме
(30) от условий то мне в любом случае некуда деваться
32. ditp 91 29.03.17 11:10 Сейчас в теме
(31)
от условий то мне в любом случае некуда деваться

см.
заменив ваш самосборный текст запроса с условиями на построитель

-- это удобней, чем по частям запрос собирать.
34. German_Tagil 42 30.03.17 13:23 Сейчас в теме
(32) Я понимаю что лучше - но мне нужно было решить конкретную задачу - вроде как работает погонял итак и этак
35. German_Tagil 42 24.04.17 14:02 Сейчас в теме
(30) A X (ditp) Поясните пожалуйста


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

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

не могу сообразить куда это вставить
28. German_Tagil 42 23.03.17 13:19 Сейчас в теме
Попробую обьяснить - в данном случае это обработка для контроля заявок-спецификаций по договорам
те вводим заявку у нас на форме появляется проект номенклатура и заявка и количество
соответственно прописываем в регистр спецификация
на основании данных заявки формируем заказ поставщику
соответственно прописываем в регистр спецификация
прошел платеж
соответственно прописываем в регистр спецификация
приходуем
соответственно прописываем в регистр спецификация
авансовый отчет
соответственно прописываем в регистр спецификация
Получается картинка в режиме реального времени
33. SyachinS 29.03.17 11:18 Сейчас в теме
Вы можете привести пример дерева как оно должно выглядеть исходя из вашей задачи? Такое количество запросов, запрос в цикле - конечно сложно анализировать, попробуйте собрать таблицу значений сначала, отсортируйте её как вам требуется и потом по ней заполните дерево.
36. German_Tagil 42 24.04.17 14:11 Сейчас в теме
Написал примерно так


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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)