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

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 была. Но спецификация работала - пришли эффективные менеджеры и никому ничего не стало нужно.....
Пару крупных договоров на ней сделали и все.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот