НоменклатурнаяГруппа.Родитель.Родитель

1. Intercititude 11.08.20 15:00 Сейчас в теме
Всем доброе время суток!
Есть самописный отчёт. Сейчас выводятся только Номенклатурная группа и делается группировка по ней.
Но необходимо к этому коду добавить вывод группировки сперва по НоменклатурнаяГруппа.Родитель.Родитель, а после НоменклатурнаяГруппа.Родитель и толькллишь потом НоменклатурнаяГруппа и под ней номенклатура. Собственно как это реализовать в этом куске кода? :

	ТаблицаСтроки              = ТаблицаСводная.Скопировать();	
	ТаблицаСтроки.Свернуть("НоменклатурнаяГруппа, Номенклатура");	
	ТаблицаСтроки.Сортировать("НоменклатурнаяГруппа, Номенклатура");  
	
	ТекущаяГруппа = Неопределено;
	
	Для Каждого Строка из ТаблицаСтроки Цикл
		//группировка по группам номенклатуры		
		Если ТекущаяГруппа <> Строка["НоменклатурнаяГруппа"] Тогда                                   			
			Если ТекущаяГруппа <> Неопределено Тогда				
				ТабДокумент.ЗакончитьГруппуСтрок();				
			КонецЕсли;
			
			ТекущаяГруппа = Строка["НоменклатурнаяГруппа"];		
			Область= Макет.ПолучитьОбласть("Группа|Номенклатура");			
			Область.Параметры.Группа    = СокрЛП(ТекущаяГруппа);			
			ТабДокумент.Вывести(Область);
			
			Для Каждого Колонка из ТаблицаКолонок Цикл				
				Область =  Макет.ПолучитьОбласть("Группа|Склад");                             				
				ПараметрыОтбора = Новый Структура;				
				ПараметрыОтбора.Вставить("НоменклатурнаяГруппа", Строка["НоменклатурнаяГруппа"]);				
				ПараметрыОтбора.Вставить("Склад",Колонка["Склад"]);  				
				НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);
				
				Если НайденныеСтроки.Количество() > 0 Тогда
					
					КоличествоСвободныйОстаток 		= 0;						
					КоличествоВРезерве              = 0;						
					КоличествоНоваяМарка            = 0;						
					КоличествоСтараяМарка           = 0;					
					КоличествоПартионно             = 0;
					
					Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
						
						КоличествоСвободныйОстаток = КоличествоСвободныйОстаток + НайденнаяСтрока["СвободныйОстаток"];
						КоличествоВРезерве                     = КоличествоВРезерве + НайденнаяСтрока["КоличествоВРезерве"];
						КоличествоНоваяМарка              = КоличествоНоваяМарка + НайденнаяСтрока["КоличествоПоштучно2"];
						КоличествоСтараяМарка             = КоличествоСтараяМарка + НайденнаяСтрока["КоличествоПоштучно"];
						КоличествоПартионно                  = КоличествоПартионно + НайденнаяСтрока["КоличествоПартионно"];                                                                                            
						
					КонецЦикла;
					
					Область.Параметры.ГруппаСвободныйОстаток          = КоличествоСвободныйОстаток;
					Область.Параметры.ГруппаРезервы					 = КоличествоВРезерве;
					Область.Параметры.ГруппаНоваяМарка				= КоличествоНоваяМарка;
					Область.Параметры.ГруппаСтараяМарка				  = КоличествоСтараяМарка;
					Область.Параметры.ГруппаПартионно				= КоличествоПартионно;            
					
				КонецЕсли;
				
			Иначе
				
				Область.Параметры.ГруппаСвободныйОстаток          = 0;
				Область.Параметры.ГруппаРезервы                   = 0;
				Область.Параметры.ГруппаНоваяМарка                = 0;
				Область.Параметры.ГруппаСтараяМарка                = 0;
				Область.Параметры.ГруппаПартионно                = 0;                                                                      
				
			КонецЕсли;
			
			ТабДокумент.Присоединить(Область);
			
		КонецЦикла;
		
		// группа итог
		
		Область              = Макет.ПолучитьОбласть("Группа|Итог");
		ПараметрыОтбора = Новый Структура;
		ПараметрыОтбора.Вставить("НоменклатурнаяГруппа",                        Строка["НоменклатурнаяГруппа"]);
		НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			КоличествоОстаток = 0;
			
			Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
				
				КоличествоОстаток = КоличествоОстаток + НайденнаяСтрока["КоличествоОстаток"];
				
			КонецЦикла;
			
			Область.Параметры.ГруппаИтогоОбщийОстаток       = КоличествоОстаток;
			
		Иначе
			
			Область.Параметры.ГруппаИтогоОбщийОстаток       = 0;
			
		КонецЕсли;
		
		ТабДокумент.Присоединить(Область);
		
		ТабДокумент.НачатьГруппуСтрок(СокрЛП(ТекущаяГруппа));
		
	КонецЕсли;                                     
	
	
Показать


Вроде задача простая, но уже перепробовал все варианты. Помогите!
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
38. ignorant 12.08.20 22:17 Сейчас в теме +0.3 $m
(37) Если у вас в конфигурации есть справочник Номенклатура - просто попробуйте выполнить отчет.
На форме 2 кнопки: _ваш_ вариант кода (с извращениями)
и ПРАВИЛЬНЫЙ, который _сразу_ предлагался в (7).

Выбирайте.
Прикрепленные файлы:
Infostart_Topic246007.epf
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ignorant 11.08.20 15:03 Сейчас в теме
0. Каким инструментом делаете отчет?
1. Почему не использовать обычные Группировка Иерархия?
3. Intercititude 11.08.20 15:04 Сейчас в теме
(2) Таблица значения просто заполняет макет.
Мне необходимо именно в этом коде добавить подгруппировки!
4. alex-l19041 8 11.08.20 15:25 Сейчас в теме
(3) в исходной таблице эти поля (НоменклатурнаяГруппа.Родитель.Родитель,НоменклатурнаяГруппа.Родитель ) есть ?
если нет, то надо добавить

ТаблицаСтроки.Свернуть("НоменклатурнаяГруппа, Номенклатура");    
    ТаблицаСтроки.Сортировать("НоменклатурнаяГруппа, Номенклатура");  
- заменить с учетом доп полей
5. Intercititude 11.08.20 15:28 Сейчас в теме
(4) Так тоже пытался. Имеете ввиду так ?:
ТаблицаСтроки.Свернуть("НоменклатурнаяГруппа,НоменклатурнаяГруппаРодитель,НоменклатурнаяГруппаРодительРодитель, Номенклатура");    
    ТаблицаСтроки.Сортировать("НоменклатурнаяГруппа, НоменклатурнаяГруппаРодитель,НоменклатурнаяГруппаРодительРодитель,Номенклатура");  


Я не понимаю как в циикле корректно это обходить потом... А именно открывать и закрывать группировку строк. Выходит полная ересь..
6. alex-l19041 8 11.08.20 15:33 Сейчас в теме
(5) в первом цикле перебираете НоменклатурнаяГруппаРодительРодитель, во втором НоменклатурнаяГруппаРодитель, а затем тот цикл что уже есть по НоменклатурнаяГруппа
8. Intercititude 11.08.20 15:42 Сейчас в теме
(6)Не совсем понимаю Вас. То есть надо сделать три сводные таблицы и каждую отсортировать?
А после поверх моего существующего цикла сделать обход по первой и второй ?

   Для Каждого Строка из ТаблицаСтроки Цикл
        //группировка по группам номенклатуры        
        Если ТекущаяГруппа <> Строка["НоменклатурнаяГруппа"] Тогда                                               
            Если ТекущаяГруппа <> Неопределено Тогда                
                ТабДокумент.ЗакончитьГруппуСтрок();                
            КонецЕсли;
            
            ТекущаяГруппа = Строка["НоменклатурнаяГруппа"];        
            Область= Макет.ПолучитьОбласть("Группа|Номенклатура");            
            Область.Параметры.Группа    = СокрЛП(ТекущаяГруппа);            
            ТабДокумент.Вывести(Область);

       ТабДокумент.НачатьГруппуСтрок(СокрЛП(ТекущаяГруппа));
        
    КонецЕсли;                                     
КонецЦикла;
Показать


Вот сократил группировку. Можно на конкретно этом куске ?
9. alex-l19041 8 11.08.20 15:51 Сейчас в теме
(8)
три сводные таблицы
- нет. таблица одна. А циклов столько сколько надо группировок
10. Intercititude 11.08.20 15:54 Сейчас в теме
(9)
Для каждого Строка Из ТаблицаСводная Цикл
Для каждого Строка Из ТаблицаСводная Цикл
Для каждого Строка из ТаблицаСводная Цикл
конеццикла;
конеццикла;
конеццикла;


Прям так ? И на основании моего кода в начале необходимо добавить Подгруппа = Неопределено и Подгруппа2 = Неопределенно и делать соответствующе такие же махинации ? И в какой момент делать начатьгруппировку строк..
11. ignorant 11.08.20 16:27 Сейчас в теме
(10) как-то так
	РодительРодитель = Неопределено;
	Для Каждого СтрокаТЗ из ТЗ
			
		Если РодительРодитель <> СтрокаТЗ.РодительРодитель Тогда
			
			Если РодительРодитель = Неопределено Тогда
				// 	Первый раз в РодительРодитель
				//	Начать группировку РодительРодитель
			Иначе
				// 	Закончить группировку РодительРодитель
			КонецЕсли
			
			РодительРодитель = СтрокаТЗ.РодительРодитель;

		КонецЕсли;
		
		Пока РодительРодитель = СтрокаТЗ.РодительРодитель Цикл
			
			Родитель = Неопределено;
			
			Если Родитель <> СтрокаТЗ.Родитель Тогда
				Если Родитель = Неопределено Тогда
					// 	Первый раз в Родитель
					//	Начать группировку Родитель
				Иначе
					// Закончить группировку Родитель
				КонецЕсли
			
				Родитель = СтрокаТЗ.Родитель;
				
			КонецЕсли;
			
			Пока (РодительРодитель = СтрокаТЗ.РодительРодитель) И (Родитель = СтрокаТЗ.Родитель) Цикл
				//	Вывод детальных записей	
			КонецЦикла
			
		КонецЦикла
	КонецЦикла
	
	// 	Закончить группировку Родитель
	// 	Закончить группировку РодительРодитель
	//	Общие итоги
Показать
12. Intercititude 11.08.20 16:44 Сейчас в теме
(11) Спасибо! Буду тестить сейчас.
В детальные записи мой кусок кода из шапки помещать выходит и где конкретно помещать вывод области родительродитель и родитель?
13. Intercititude 11.08.20 17:14 Сейчас в теме
(11) Добавил в детальные записи свой кусок кода.
Бессконечный цикл какой то получился. В условие "Пока (РодительРодитель = СтрокаТЗ.РодительРодитель) И (Родитель = СтрокаТЗ.Родитель) Цикл" попадает без останвки.

Полагаю так как у первых двуух строк в моей ТЗ отсуствует напрочь номенклатурная группа. Как быть ?
14. ignorant 11.08.20 17:42 Сейчас в теме
(13)
В нижнем цикле после вывода детальных записей
Продолжить:
стоит?

ПС. Я предложил _схему_ а не 100% рабочий код.
15. Intercititude 11.08.20 17:46 Сейчас в теме
18. ignorant 11.08.20 18:43 Сейчас в теме
(13)
Полагаю так как у первых двуух строк в моей ТЗ отсуствует напрочь номенклатурная группа. Как быть ?
Если номенклатурная группа отсутствует в ячейку ТЗ нужно поставить пустую ссылку
19. Intercititude 11.08.20 19:41 Сейчас в теме
(18) Да,так и сделал. в (17) скинул весь код. Всё равно цикл ходит бесконечно.
20. ignorant 11.08.20 20:24 Сейчас в теме
(19) Циклы поменял.
	РодительРодитель = Неопределено;
	
	ИндексСтроки = 0;
	ПоследняяСтрока = ТЗ.Количество()-1;
	СтрокаТЗ = ТЗ [ИндексСтроки];
	
	Пока Истина Цикл
		
		Если РодительРодитель <> СтрокаТЗ.РодительРодитель Тогда
			
			Если РодительРодитель = Неопределено Тогда
				// 	Первый раз в РодительРодитель
				//	Начать группировку РодительРодитель
			Иначе
				// 	Закончить группировку РодительРодитель
			КонецЕсли
			
			РодительРодитель = СтрокаТЗ.РодительРодитель;

		КонецЕсли;
		
		Пока РодительРодитель = СтрокаТЗ.РодительРодитель Цикл
			
			Родитель = Неопределено;
			
			Если Родитель <> СтрокаТЗ.Родитель Тогда
				Если Родитель = Неопределено Тогда
					// 	Первый раз в Родитель
					//	Начать группировку Родитель
				Иначе
					// Закончить группировку Родитель
				КонецЕсли
			
				Родитель = СтрокаТЗ.Родитель;
				
			КонецЕсли;
			
			Пока (РодительРодитель = СтрокаТЗ.РодительРодитель) И (Родитель = СтрокаТЗ.Родитель) Цикл
				//	Вывод детальных записей	
				
				ИндексСтроки = ИндексСтроки + 1;
				Если ИндексСтроки > ИндексПоследнейСтроки Тогда
					Прервать;
				Иначе
					СтрокаТЗ = ТЗ [ИндексСтроки];
				КонецЕсли;
				
			КонецЦикла
			
			Если ИндексСтроки > ИндексПоследнейСтроки Тогда
				Прервать;
			КонецЕсли;
			
		КонецЦикла
		
		Если ИндексСтроки > ИндексПоследнейСтроки Тогда
			Прервать;
		КонецЕсли;
			
	КонецЦикла	
Показать
21. Intercititude 11.08.20 20:34 Сейчас в теме
(20) А я вообще правильно свои куски кода то вставил в ваши циклы?
Круто Вы умеете! Попробую переделать на такой.
22. Intercititude 12.08.20 09:15 Сейчас в теме
(20)
ИндексПоследнейСтроки
это откууда ?
23. ignorant 12.08.20 09:21 Сейчас в теме
(22)
ИндексПоследнейСтроки = ТЗ.Количество()-1;
24. Intercititude 12.08.20 09:25 Сейчас в теме
(23) Уже сообразил. А по поводу (21) ?
Возможно глупые вопросы задаю,но я новичок..
В итоге добавил ваш цикл,выводит всех родителей. Но вот группировка лишь одна появляется.
26. ignorant 12.08.20 10:04 Сейчас в теме
(24)Без обид Свое отношение к коду я указал в (7). Традиционный подход:
- Зарос к ТЗ.
- На основании выборки - заполнять макет.

А с циклами - попробуйте отладчиком смотреть почему след. группировки не открываются.
27. Intercititude 12.08.20 10:12 Сейчас в теме
(26) Так у меня так и сделано.
А Ваш цикл неправильный выходит. Спасибо за помощь...

РодительРодитель = неопределенно лишь один раз!
Соответственно будет РодительРодитель открываться группировка только один раз..
28. Intercititude 12.08.20 14:44 Сейчас в теме
(26) Я сдаюсь. Помогите. Пытаюсь хотя бы по первому родителю сгруппировать. Идёт всё по порядку как надо. Но группировка только детальная делается.. Где мой косяк ?:

ТаблицаСтроки  	= ТаблицаСводная.Скопировать();
	ТаблицаСтроки.Свернуть("НоменклатурнаяГруппа,НоменклатурнаяГруппаРодитель,НоменклатурнаяГруппаРодительРодитель, Номенклатура");
	ТаблицаСтроки.Сортировать("НоменклатурнаяГруппа,НоменклатурнаяГруппаРодитель,НоменклатурнаяГруппаРодительРодитель,Номенклатура");

ТекущаяГруппа = Неопределено;
	Родитель = Неопределено;
	
	ИндексСтрока = 0;
	ИндексПоследнейСтроки = ТаблицаСтроки.Количество()-1;
	Строка = ТаблицаСтроки[ИндексПоследнейСтроки];
	
	Пока Истина Цикл
			
		Если Родитель <> Строка["НоменклатурнаяГруппаРодительРодитель"] Тогда			
			Если Родитель <> Неопределено Тогда
				ТабДокумент.ЗакончитьГруппуСтрок();
			КонецЕсли;
			Родитель 				= Строка["НоменклатурнаяГруппаРодительРодитель"];
			Область 					= Макет.ПолучитьОбласть("Группа|Номенклатура");
			Область.Параметры.Группа 	= СокрЛП(Родитель);
			ТабДокумент.Вывести(Область);
						
			ТабДокумент.НачатьГруппуСтрок(СокрЛП(Родитель));
		КонецЕсли;	
	
	Пока Родитель = Строка.НоменклатурнаяГруппаРодительРодитель Цикл
	
		//группировка по группам номенклатуры
		Если ТекущаяГруппа <> Строка["НоменклатурнаяГруппа"] Тогда			
			Если ТекущаяГруппа <> Неопределено Тогда
				ТабДокумент.ЗакончитьГруппуСтрок();
			КонецЕсли;
			ТекущаяГруппа 				= Строка["НоменклатурнаяГруппа"];
			Область 					= Макет.ПолучитьОбласть("Группа|Номенклатура");
			Область.Параметры.Группа 	= СокрЛП(ТекущаяГруппа);
			ТабДокумент.Вывести(Область);
						
			ТабДокумент.НачатьГруппуСтрок(СокрЛП(ТекущаяГруппа));
		КонецЕсли;	
		
		
		//наименование товара
		Область 		= Макет.ПолучитьОбласть("Строка|Номенклатура");				
		Область.Параметры.Номенклатура = Строка["Номенклатура"];
		Область.Параметры.Артикул = Строка["Номенклатура"].Артикул;
		ТабДокумент.Вывести(Область);
		
		ИндексСтрока = ИндексСтрока +1;
		Если ИндексСтрока > ИндексПоследнейСтроки Тогда
			Прервать;
		Иначе
			Строка = ТаблицаСтроки[ИндексСтрока];
		КонецЕсли;
		
	КонецЦикла;
	
	Если ИндексСтрока > ИндексПоследнейСтроки Тогда
		Прервать;
	КонецЕсли;
	
	КонецЦикла;
Показать
29. ignorant 12.08.20 14:51 Сейчас в теме
(28) КМК: ПОСЛЕ циклов нужно закрыть все группировки
30. Intercititude 12.08.20 15:08 Сейчас в теме
(29) После самого последнего "ТабДокумент.ЗакончитьГруппуСтрок();" и всё? хм
Не помогло... Выводит так же..
31. ignorant 12.08.20 15:21 Сейчас в теме
(30)
Синтаксис:
ЗакончитьГруппуСтрок()
Описание:
Заканчивает последнюю из начатых ранее групп строк.

Сколько групп строк у Вас открыто и сколько Вы закрыли?
32. Intercititude 12.08.20 15:25 Сейчас в теме
(31) Но я же внутри цикла открываю и закрываю.. По логике так и должно же быть
33. ignorant 12.08.20 15:33 Сейчас в теме
(32)После цикла попробуйте
ТабДокумент.ЗакончитьГруппуСтрок();
ТабДокумент.ЗакончитьГруппуСтрок();
ТабДокумент.ЗакончитьГруппуСтрок();
34. Intercititude 12.08.20 15:37 Сейчас в теме
(33)Если три раза, то выдаёт ошибку "группа не начата".
Если два раза. То группировка охватывает все строки. А внутри как было по порядку так и осталось.
Как то внутри циклы полагаю надо корректно открывать, но не пойму как.
35. ignorant 12.08.20 15:45 Сейчас в теме
(34)Сейчас отключаюсь .Если будет актуально, вечером покажите:
- актуальный код
- картинку с данными
- что попадает в печатную форму
36. Intercititude 12.08.20 16:17 Сейчас в теме
(35) Код актуальный в (28). Только в конце два раза закрыта группировка после цикла.

Что вылазит на печатной форме прикрепил картинкой. На строке 12, 13, 15 где пробелы как раз мой Родитель. Но группировки по нему нету..

Если убрать после цикла закрывание группировок, то в строке 9 просто уберётся группировка. Собственно она мне и не нужна,а нужна только где пробелы ( Родитель)

В таблице строки данные тоже верны и идут по порядку.
Дело в коде..
Прикрепленные файлы:
42. Intercititude 14.08.20 10:18 Сейчас в теме
(36)Намекните хотя бы в чём дело..
37. Intercititude 12.08.20 21:55 Сейчас в теме
(35)Всё ещё очень актуально..
38. ignorant 12.08.20 22:17 Сейчас в теме +0.3 $m
(37) Если у вас в конфигурации есть справочник Номенклатура - просто попробуйте выполнить отчет.
На форме 2 кнопки: _ваш_ вариант кода (с извращениями)
и ПРАВИЛЬНЫЙ, который _сразу_ предлагался в (7).

Выбирайте.
Прикрепленные файлы:
Infostart_Topic246007.epf
39. Intercititude 13.08.20 12:34 Сейчас в теме
(38Посмотрел. У вас предоставляется выбор РодительРодитель лишь одного!
В моей же ТЗ РодительРодитель меняется.
В итоге в коде "ВашВариант" когда строка попадает с другим РодительРодитель происходит бессконечный цикл. Как исправить??!
Тоесть в начало цикла где условие на РодительРодитель не попадает, подскажите.


Первый вариант не стал делать, так как отчёт не мой и не особо хочется менять всё полностью. А так да, я бы сделал через выборку ПоГруппорвкам.
40. Intercititude 13.08.20 13:12 Сейчас в теме
(38) Получилось. Заменил второе условие цикла по истина на проверку) Спасибо Вам!
41. Intercititude 13.08.20 15:15 Сейчас в теме
(38) Единственное, когда я делаю присоединить область в детальных записях с итогами,колонку. То почему то выводит справа от макета ещё раз эти колонки, не пойму как обойти..
25. Intercititude 12.08.20 09:59 Сейчас в теме
(20)
// Закончить группировку Родитель


Туда поставил ТабДокумент.ЗакончитьГруппуСтрок();
Поставил точку остаанова и туда вообще не попадает даже.
7. ignorant 11.08.20 15:34 Сейчас в теме
я бы деал _совсем_ не так.
1. в ТЗ ТаблицаСводная добавить колонки Родитель и РодительРодитель и заполнить их.
2. Зарос к полученной ТЗ.
3. На основании выборки - заполнять макет.

КМК, В вашем коде не хватает ещё одного вложенного цикла по РодительРодитель
16. пользователь 11.08.20 17:53
Сообщение было скрыто модератором.
...
17. Intercititude 11.08.20 17:55 Сейчас в теме
(16) Однозначно дело в коде:

	ТекущаяГруппа = Неопределено;
	РодительРодитель = Неопределено;	
	
	Для Каждого Строка из ТаблицаСтроки Цикл
		//группировку по родителю
		Если РодительРодитель <> Строка.НоменклатурнаяГруппаРодительРодитель Тогда
			
			Если РодительРодитель = Неопределено Тогда
				
				ТабДокумент.НачатьГруппуСтрок(СокрЛП(РодительРодитель));					
			Иначе
				ТабДокумент.ЗакончитьГруппуСтрок();
			КонецЕсли;
				
					РодительРодитель 			= Строка.НоменклатурнаяГруппаРодительРодитель;
					Область 					= Макет.ПолучитьОбласть("Группа|Номенклатура");
					Область.Параметры.Группа 	= СокрЛП(РодительРодитель);
					ТабДокумент.Вывести(Область);
			
		КонецЕсли;
		
		Пока РодительРодитель = Строка.НоменклатурнаяГруппаРодительРодитель Цикл
			
			Родитель = Неопределено;
			
			Если Родитель <> Строка.НоменклатурнаяГруппаРодитель Тогда
				Если Родитель = Неопределено Тогда
					ТабДокумент.НачатьГруппуСтрок(СокрЛП(Родитель));					
				Иначе
					ТабДокумент.ЗакончитьГруппуСтрок();
				КонецЕсли;
				
					Родитель 			= Строка.НоменклатурнаяГруппаРодитель;
					Область 					= Макет.ПолучитьОбласть("Группа|Номенклатура");
					Область.Параметры.Группа 	= СокрЛП(Родитель);
					ТабДокумент.Вывести(Область);
				
			КонецЕсли;
			
			Пока (РодительРодитель = Строка.НоменклатурнаяГруппаРодительРодитель) И (Родитель = Строка.НоменклатурнаяГруппаРодитель) Цикл
				
				
				//группировка по группам номенклатуры
				Если ТекущаяГруппа <> Строка["НоменклатурнаяГруппа"] Тогда			
					Если ТекущаяГруппа <> Неопределено Тогда
						ТабДокумент.ЗакончитьГруппуСтрок();
					КонецЕсли;
					ТекущаяГруппа 				= Строка["НоменклатурнаяГруппа"];
					Область 					= Макет.ПолучитьОбласть("Группа|Номенклатура");
					Область.Параметры.Группа 	= СокрЛП(ТекущаяГруппа);
					ТабДокумент.Вывести(Область);
					
					Для Каждого Колонка из ТаблицаКолонок Цикл
						Область 		=  Макет.ПолучитьОбласть("Группа|Склад");		
						ПараметрыОтбора = Новый Структура;
						ПараметрыОтбора.Вставить("НоменклатурнаяГруппа", Строка["НоменклатурнаяГруппа"]);
						ПараметрыОтбора.Вставить("Склад", 				 Колонка["Склад"]);   
						НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);			
						Если НайденныеСтроки.Количество() > 0 Тогда
							Если Колонка["Склад"] = "Склад СВХ" Тогда 
								КоличествоЛабаратория 			= 0;
								КоличествоДоработка 			= 0;
								КоличествоГотовДекларирование 	= 0;
								КоличествоНаДекларировании 		= 0;
								КоличествоБезстатуса 			= 0;
								Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
									Если НайденнаяСтрока.Статус = "Проверка лаборатории проведена" Тогда
										КоличествоЛабаратория = КоличествоЛабаратория + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
									ИначеЕсли НайденнаяСтрока.Статус = "Требуется доработка" Тогда
										КоличествоДоработка = КоличествоДоработка + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
									ИначеЕсли НайденнаяСтрока.Статус = "Готов к декларированию" Тогда
										КоличествоГотовДекларирование = КоличествоГотовДекларирование + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
									ИначеЕсли НайденнаяСтрока.Статус = "Товар на декларировании" Тогда
										КоличествоНаДекларировании = КоличествоНаДекларировании + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
									ИначеЕсли НайденнаяСтрока.Статус = "Без статуса" Тогда
										КоличествоБезстатуса = КоличествоБезстатуса + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
									КонецЕсли;
								КонецЦикла;
								Область.Параметры.ГруппаСвободныйОстаток 	= КоличествоЛабаратория;
								Область.Параметры.ГруппаРезервы 			= КоличествоДоработка;
								Область.Параметры.ГруппаНоваяМарка 			= КоличествоГотовДекларирование;
								Область.Параметры.ГруппаСтараяМарка 		= КоличествоНаДекларировании;
								Область.Параметры.ГруппаПартионно			= КоличествоБезстатуса;					
							Иначе
								КоличествоСвободныйОстаток = 0;
								КоличествоВРезерве 		   = 0;
								КоличествоНоваяМарка 	   = 0;
								КоличествоСтараяМарка	   = 0;
								КоличествоПартионно 	   = 0;
								Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
									КоличествоСвободныйОстаток = КоличествоСвободныйОстаток + НайденнаяСтрока["СвободныйОстаток"];
									КоличествоВРезерве 		   = КоличествоВРезерве + НайденнаяСтрока["КоличествоВРезерве"];
									КоличествоНоваяМарка	   = КоличествоНоваяМарка + НайденнаяСтрока["КоличествоПоштучно2"];
									КоличествоСтараяМарка 	   = КоличествоСтараяМарка + НайденнаяСтрока["КоличествоПоштучно"];
									КоличествоПартионно 	   = КоличествоПартионно + НайденнаяСтрока["КоличествоПартионно"];						
								КонецЦикла;
								Область.Параметры.ГруппаСвободныйОстаток 	= КоличествоСвободныйОстаток;
								Область.Параметры.ГруппаРезервы 			= КоличествоВРезерве;
								Область.Параметры.ГруппаНоваяМарка 			= КоличествоНоваяМарка;
								Область.Параметры.ГруппаСтараяМарка 		= КоличествоСтараяМарка;
								Область.Параметры.ГруппаПартионно 			= КоличествоПартионно;	
							КонецЕсли;
						Иначе
							Область.Параметры.ГруппаСвободныйОстаток 	= 0;
							Область.Параметры.ГруппаРезервы 			= 0;
							Область.Параметры.ГруппаНоваяМарка 			= 0;
							Область.Параметры.ГруппаСтараяМарка 		= 0;
							Область.Параметры.ГруппаПартионно 			= 0;					
						КонецЕсли;
						ТабДокумент.Присоединить(Область);
					КонецЦикла;
					
					// группа итог 
					Область 	= Макет.ПолучитьОбласть("Группа|Итог");
					ПараметрыОтбора = Новый Структура;
					ПараметрыОтбора.Вставить("НоменклатурнаяГруппа", 		Строка["НоменклатурнаяГруппа"]);
					НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);
					Если НайденныеСтроки.Количество() > 0 Тогда
						КоличествоОстаток = 0;
						Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл 
							Если НайденнаяСтрока.Склад = "Склад СВХ" Тогда
								КоличествоОстаток = КоличествоОстаток + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];
							иначе
								КоличествоОстаток = КоличествоОстаток + НайденнаяСтрока["КоличествоОстаток"];
							КонецЕсли;	
						КонецЦикла;
						Область.Параметры.ГруппаИтогоОбщийОстаток 	= КоличествоОстаток;
					Иначе
						Область.Параметры.ГруппаИтогоОбщийОстаток 	= 0;
					КонецЕсли;
					ТабДокумент.Присоединить(Область);
					
					ТабДокумент.НачатьГруппуСтрок(СокрЛП(ТекущаяГруппа));
				КонецЕсли;			
				
				//наименование товара
				Область 		= Макет.ПолучитьОбласть("Строка|Номенклатура");				
				Область.Параметры.Номенклатура = Строка["Номенклатура"];
				Область.Параметры.Артикул = Строка["Номенклатура"].Артикул;
				ТабДокумент.Вывести(Область);
				
				////данные по складам 
				Для Каждого Колонка из ТаблицаКолонок Цикл
					Область = Макет.ПолучитьОбласть("Строка|Склад");			
					ПараметрыОтбора = Новый Структура;
					ПараметрыОтбора.Вставить("Склад", 			Колонка["Склад"]);
					ПараметрыОтбора.Вставить("Номенклатура", 	Строка["Номенклатура"]);
					НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);
					Если НайденныеСтроки.Количество() > 0 Тогда
						Если Колонка["Склад"] = "Склад СВХ" Тогда
							Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
								Если НайденнаяСтрока.Статус = "Проверка лаборатории проведена" Тогда
									Область.Параметры.СвободныйОстаток = НайденнаяСтрока.КоличествоОстатокПоСтатусу;
								ИначеЕсли НайденнаяСтрока.Статус = "Требуется доработка" Тогда
									Область.Параметры.Резервы = НайденнаяСтрока.КоличествоОстатокПоСтатусу;
								ИначеЕсли НайденнаяСтрока.Статус = "Готов к декларированию" Тогда
									Область.Параметры.НоваяМарка = НайденнаяСтрока.КоличествоОстатокПоСтатусу;
								ИначеЕсли НайденнаяСтрока.Статус = "Товар на декларировании" Тогда
									Область.Параметры.СтараяМарка = НайденнаяСтрока.КоличествоОстатокПоСтатусу;
								ИначеЕсли НайденнаяСтрока.Статус = "Без статуса" Тогда
									Область.Параметры.Партионно = НайденнаяСтрока.КоличествоОстатокПоСтатусу;
								КонецЕсли;
							КонецЦикла;
						иначе
							Область.Параметры.СвободныйОстаток 	= НайденныеСтроки[0]["СвободныйОстаток"];
							Область.Параметры.Резервы 			= НайденныеСтроки[0]["КоличествоВРезерве"];
							Область.Параметры.НоваяМарка 		= НайденныеСтроки[0]["КоличествоПоштучно2"];
							Область.Параметры.СтараяМарка 		= НайденныеСтроки[0]["КоличествоПоштучно"];
							Область.Параметры.Партионно 		= НайденныеСтроки[0]["КоличествоПартионно"];
						КонецЕсли;
					Иначе
						Область.Параметры.СвободныйОстаток 	= 0;
						Область.Параметры.Резервы 			= 0;
						Область.Параметры.НоваяМарка 		= 0;
						Область.Параметры.СтараяМарка 		= 0;
						Область.Параметры.Партионно 		= 0;				
					КонецЕсли;
					ТабДокумент.Присоединить(Область);
				КонецЦикла;
				
				//////итог строк 
				Область = Макет.ПолучитьОбласть("Строка|Итог");
				ПараметрыОтбора = Новый Структура;
				ПараметрыОтбора.Вставить("Номенклатура", 	Строка["Номенклатура"]);
				НайденныеСтроки = ТаблицаСводная.НайтиСтроки(ПараметрыОтбора);
				Если НайденныеСтроки.Количество() > 0 Тогда
					КоличествоОстаток = 0;
					Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл    
						Если НайденнаяСтрока.Склад = "Склад СВХ" Тогда
							КоличествоОстаток = КоличествоОстаток + НайденнаяСтрока["КоличествоОстатокПоСтатусу"];	
						Иначе
							КоличествоОстаток = КоличествоОстаток + НайденнаяСтрока["КоличествоОстаток"];   
						КонецЕсли;
					КонецЦикла;
					Область.Параметры.ИтогоОбщийОстаток 	= КоличествоОстаток;
				Иначе
					Область.Параметры.ИтогоОбщийОстаток 	= 0;
				КонецЕсли;	
				ТабДокумент.Присоединить(Область);
				Продолжить;
			КонецЦикла;
		КонецЦикла;			
	КонецЦикла;			
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

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