Анализ Продаж отчет по торговый агентам

1. jeniks 03.10.17 16:06 Сейчас в теме
Допиливаю отчет по продажам в котором хочу привязать продажи и торг.агентов:
В документе РасходнаяНакладная реквизиты шапки добавляю ТорговыйАгент (спр.сотрудники) далее в отчете хочу вытянуть продажи которые сделал этот агент (в разрезе товаров, контрагентов, документов) выборочно по галочкам:

ОтчетПоПродажам:
Процедура ПриОткрытии()
	Дата1 = РабочаяДата() - 1;
	Дата2 = РабочаяДата(); 
	РазвПоТов = 1;
	РазвПоКонтр = 1;
	РазвПоДок = 1;
	РазвПоАгенту = 1;              
КонецПроцедуры
//*******************************************  
Процедура Сформировать() 
	
	Таб = СоздатьОбъект("Таблица"); 
	
	Если Склады.Выбран()=1 Тогда
		ВыбСклада = Склады.ТекущийЭлемент(); 
	Иначе      
		ВыбСклада = "по всем складам";
	КонецЕсли;
	
	/////////////////
	

	
	
	Таб.ВывестиСекцию("Шапка");
	
	ТабБухИт = СоздатьОбъект ("ТаблицаЗначений");
	
	ТабБухИт.НоваяКолонка("Товар","Справочник.Номенклатура");
	ТабБухИт.НоваяКолонка("Склад","Справочник.МестаХранения");
	ТабБухИт.НоваяКолонка("Контрагент","Справочник.Контрагенты");
	///
	ТабБухИт.НоваяКолонка("ТоргАгент","Справочник.Сотрудники");
	ТабБухИт.НоваяКолонка("Документ","Документ");
	ТабБухИт.НоваяКолонка("Сумма","Число",15,2); 
	ТабБухИт.НоваяКолонка("НДС","Число",15,2);
	ТабБухИт.НоваяКолонка("СуммаПрод","Число",15,2);
	
	БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); 
	
	
	Если ВыбТовар.Выбран()=1  Тогда 
		БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,ВыбТовар,2); 
	Иначе   
		БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура); 
	КонецЕсли;  

	 
	
	БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
	
	БухИт.ВыполнитьЗапрос(Дата1,Дата2,"41.1,41.2,41.3,41.4,43",,,,"Проводка","СК"); 
	
	БухИт.ВыбратьСубконто(1);   //
	
	Пока БухИт.ПолучитьСубконто()=1 Цикл
		
		БухИт.ВыбратьПериоды();  
		
		Пока БухИт.ПолучитьПериод() = 1 Цикл  
			
			Знач41 = БухИт.КО("С"); 
			Знач41_К = БухИт.КО("К");
			Если (Знач41_К <> 0) или (Знач41 <> 0) Тогда
				Если Склады.Выбран() = 1 Тогда  
					Если БухИт.ПолучитьСубконто(ВидыСубконто.МестаХранения,,Склады) = 1 Тогда
						КоличествоНаСкладе = БухИт.КО("К");
						СуммаНаСкладе = Знач41/Знач41_К*КоличествоНаСкладе;
					Иначе
						КоличествоНаСкладе = 0;
						СуммаНаСкладе = 0;
					КОнецЕсли;
				Иначе
					КоличествоНаСкладе = Знач41_К;
					СуммаНаСкладе = Знач41;
				КонецЕсли;  
				Если (КоличествоНаСкладе <> 0) или (СуммаНаСкладе <> 0) Тогда
					
					ТабБухИт.НоваяСтрока();  
					ТабБухИт.Товар = БухИт.Субконто(1); 	 
					
					ТабБухИт.Документ 	= БухИт.Операция.Документ.ТекущийДокумент(); 	 					
					ТабБухИт.Склад 		= БухИт.Субконто(2);
					Если (Метаданные.Документ(ТабБухИт.Документ.Вид()).РеквизитШапки("Контрагент").Выбран() = 1) Тогда
						ТабБухИт.Контрагент = ТабБухИт.Документ.Контрагент;	 			  
					КонецЕсли;
					ТабБухИт.Сумма 		= СуммаНаСкладе;
				////	
					Если (Метаданные.Документ(ТабБухИт.Документ.Вид()).РеквизитШапки("ТорговыйАгент").Выбран() = 1) Тогда
						ТабБухИт.ТоргАгент = ТабБухИт.Документ.ТорговыйАгент; 
					КонецЕсли;	
						
					Итог1 = ТабБухИт.Итог("Сумма");
					Док = ТабБухИт.Документ;
					Если (Док.Вид()= "РасходнаяНакладная") или (Док.Вид()= "ПоступлениеТоваров") Тогда
						
						Док.ВыбратьСтроки();
						Пока Док.ПолучитьСтроку()=1 Цикл
							Если ТабБухИт.Товар = Док.Товар Тогда
								ТабБухИт.СуммаПрод 	= ТабБухИт.СуммаПрод + Док.Сумма;
								ТабБухИт.НДС 		= ТабБухИт.НДС + Док.НДС;
								Итог2 = ТабБухИт.Итог("СуммаПрод");
							КонецЕсли;
						КонецЦикла
					КонецЕсли;
					
				КонецЕсли;
			Иначе
			КонецЕсли;   		     
			
		КонецЦикла;  
	КонецЦикла;     
	
\\\ тут начинаю тупить

	Если РазвПоТов=1 Тогда 
		Если РазвПоКонтр=1 Тогда
			Если РазвПоДок=1 Тогда
				Если РазвПоАгенту=1 Тогда
				ТабБухИт.Свернуть("Контрагент,Товар,ТоргАгент,Документ","Сумма,СуммаПрод,НДС"); 
				ТабБухИт.Сортировать("Контрагент,Документ,Товар"); 
				ПечШапкаТаб = "Товар/Контрагент/Документ/ТоргАгент";
			Иначе
				ТабБухИт.Свернуть("Контрагент,Товар,Склад","Сумма,СуммаПрод,НДС");
				ТабБухИт.Сортировать("Контрагент,Товар");
				ПечШапкаТаб = "Товар/Контрагент";
			КонецЕсли;
			КонецЕсли;
		Иначе
			Если РазвПоДок=1 Тогда  
				ТабБухИт.Свернуть("Товар,Склад,Документ","Сумма,СуммаПрод,НДС");
				ТабБухИт.Сортировать("Документ,Товар"); 
				ПечШапкаТаб = "Товар/Документ";
			Иначе
				ТабБухИт.Свернуть("Товар,Склад","Сумма,СуммаПрод,НДС"); 
				ТабБухИт.Сортировать("Товар");
				ПечШапкаТаб = "Товар";
			КонецЕсли;   
		КонецЕсли;
		
	Иначе
		
	/////////////	пробую свернуть тз по агенту
		
      Если РазвПоАгенту=1 Тогда  
				ТабБухИт.Свернуть("ТоргАгент,Документ","Сумма,СуммаПрод,НДС");
				ТабБухИт.Сортировать("ТоргАгент"); 
				ПечШапкаТаб = "Агент";
	             Иначе
				ТабБухИт.Свернуть("ТоргАгент,Контрагент","Сумма,СуммаПрод,НДС");  
				ТабБухИт.Сортировать("Документ,Товар");
				ПечШапкаТаб = "ТоргАгент/Контрагент";
			КонецЕсли;      
	 //////
	
		
		Если РазвПоКонтр=1 Тогда
			Если РазвПоДок=1 Тогда  
				ТабБухИт.Свернуть("Контрагент,Склад,Документ","Сумма,СуммаПрод,НДС"); 
				ТабБухИт.Сортировать("Контрагент,Документ"); 
				ПечШапкаТаб = "Контрагент/Документ";
			Иначе
				ТабБухИт.Свернуть("Контрагент,Склад","Сумма,СуммаПрод,НДС");  
				ТабБухИт.Сортировать("Контрагент");
				ПечШапкаТаб = "Контрагент";
			КонецЕсли;             
		Иначе   
			
			Если РазвПоДок=1 Тогда  
				ТабБухИт.Свернуть("Склад,Документ","Сумма,СуммаПрод,НДС"); 
				ТабБухИт.Сортировать("Документ");  
				ПечШапкаТаб = "Документ";
			Иначе 
				
				Предупреждение("Не выбрано ни одной группировки", 60);
				Возврат;
			КонецЕсли;		
		КонецЕсли;	  			
	КонецЕсли;  
	Таб.ВывестиСекцию("ОбщаяШапка"); 
	
	ТЗТов = СоздатьОбъект("ТаблицаЗначений"); 
	ТЗКонтр = СоздатьОбъект("ТаблицаЗначений"); 
	ТЗСклад = СоздатьОбъект("ТаблицаЗначений"); 
	ТЗДок = СоздатьОбъект("ТаблицаЗначений");
////////////////////	
	ТЗАгент = СоздатьОбъект("ТаблицаЗначений"); 
	
////////// тут собираю по агентам



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


В итоге не получается вывести в разрезе Торговых Агентов их продажи по документам, товарам, контрагентам. Подскажите где ошибся?
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

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