Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Индексированная таблица (число прочтений - 2953 )
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Индексированная таблица
29. Сентября 2011 :: 07:26
Печать  
Есть индексированная таблица. Там есть много уровней группировки, причем оно может быть разным, данные прекрасно выводится на печать в рекурсии. То есть в итоговой таблице слева нарисовано дерево группировок, в колонках суммы.
теперь просят такую фишку сделать: суммы разбить по складам, чтобы выводились слева группировки - а суммы разделялись по складам.
Собственно сам вопрос, как это лучше сделать?
может группировку по складам поставить на самый верхний уровень?
Или когда выводить сумму, то определять к какому складу она относится? вот совсем непонятно мне пока, как это сделать.
Буду рад любому совету.
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Индексированная таблица
Ответ #1 - 29. Сентября 2011 :: 10:05
Печать  
добавь в каждую группировку склад.
  
Наверх
wwwICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Индексированная таблица
Ответ #2 - 30. Сентября 2011 :: 05:02
Печать  
В похожей ситуации (вывод продаж по дням) делал так:
1. Создаем ТЗ с датами
Код
Выбрать все
	вТЗ = СоздатьОбъект("ТаблицаЗначений");
	вТЗ.НоваяКолонка("тДата","Дата");
	Для Сч=Число(ДатаНачала) По Число(ДатаКонца) Цикл
		вТЗ.НоваяСтрока();
		вТЗ.тДата = Дата(Сч);
	КонецЦикла; 


2. Группируем Индексированную таблицу по Номенклатуре
Код
Выбрать все
	ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
	РС.УстановитьТекстовыйПараметр("НачДата",ДатаНачала);
	РС.УстановитьТекстовыйПараметр("КонДата",ДатаКонца);
	ИТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса, ИТЗ, 1);
	ИТЗ.Группировать("Товар: Name","Quantity,Sum,NDSSum,SaleSum,SaleNDSSum",1); 


3. Обход Индексированной таблицы
Код
Выбрать все
	ИТЗ.ВыбратьСтроки("Товар");
	Пока ИТЗ.ПолучитьСтроку("Товар") = 1 Цикл
		Товар = ИТЗ.Name+","+ИТЗ.Unit;
		Код = ИТЗ.Code;
		Таб.ВывестиСекцию(Секция+"Товар");
		итПрибыль = 0;
		итСумма = 0;
		итКолво = 0;
		тзГрупп = СоздатьОбъект("ТаблицаЗначений");
		ИТЗ.ТЗПотомки.Выгрузить(тзГрупп);
		вТЗ.ВыбратьСтроки();
		Пока вТЗ.ПолучитьСтроку() = 1 Цикл
			тДата = вТЗ.тДата;
			Стрк = "";
			Сумма = 0;
			Колво=0;
			Прибыль = 0;
			Если тзГрупп.НайтиЗначение(тДата,Стрк,"Date")=1 Тогда
				тзГрупп.ПолучитьСтрокуПоНомеру(Стрк);
				Сумма = тзГрупп.SaleSum;
				Колво = тзГрупп.Quantity;
				Прибыль = тзГрупп.SaleSum-тзГрупп.Sum;
			КонецЕсли;
			итПрибыль = итПрибыль + Прибыль;
			Если (флКолво=0) и (флСумма=1) Тогда
				Колво = Сумма;
			КонецЕсли;
			итКолво = итКолво + Колво;
			итСумма = итСумма + Сумма;
			тСумма = Формат(Сумма,"Ч15.2");
			тКолво = Формат(Колво,"Ч15.3");
			Таб.ПрисоединитьСекцию(Секция+"Колво");
		КонецЦикла;
		тСумма = Формат(итСумма,"Ч15.2");
		тКолво = Формат(итКолво,"Ч15.3");
		Если рдВыбор=1 Тогда
			тКолво = тСумма;
			Таб.ПрисоединитьСекцию(Секция+"Колво");
		ИначеЕсли рдВыбор=2 Тогда
			Таб.ПрисоединитьСекцию(Секция+"Колво");
			тКолво = тСумма;
			Таб.ПрисоединитьСекцию(Секция+"Колво");
		Иначе
			Таб.ПрисоединитьСекцию(Секция+"Колво");
		КонецЕсли;
		тКолво = Формат(итСумма-итПрибыль,"Ч15.2");
		Таб.ПрисоединитьСекцию(Секция+"Себестоимость");
		тПрибыль = Формат(итПрибыль,"Ч15.2");
		Если (итСумма-итПрибыль)=0 Тогда
			тПроцент = "---";
		Иначе
			тПроцент = Формат(итПрибыль*100/(итСумма-итПрибыль),"Ч7.2")+"%";
		КонецЕсли;
		Таб.ПрисоединитьСекцию(Секция+"Эффект");
	КонецЦикла;
	Таб.Показать(); 

  
Наверх
ICQ  
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: Индексированная таблица
Ответ #3 - 03. Октября 2011 :: 10:46
Печать  
Спасибо, вы мне помогли
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать