1С8 пример. ПостроительОтчета и ТЗ. Расчитать данные построителяОтчета.

Пример вычисления источника данных для универсального построителя отчетов. Запрос - оборачиваемость за период.

В построитель передаются данные из расчитанной ранее таблицы значений из одной колонки - данные календаря - даты для расчета оборачиваемости. Таблица передается как параметр.

Процедура Отчет1Вывести()
    	
	ЭлементыФормы.ПолеТабличногоДокумента.Очистить();
	ПостроительОтчета1=РасчитатьДанныеПостроителяОтчета();	

	ПостроительОтчета1.Параметры.Вставить("КонецПериода", КонецПериода);
	ПостроительОтчета1.Параметры.Вставить("НачалоПериода", НачалоПериода);

	ПостроительОтчета1.Выполнить();
	ПостроительОтчета1.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе;
	ПостроительОтчета1.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.Отдельно;
	ПостроительОтчета1.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.Отдельно;
	ПостроительОтчета1.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика);
	ПостроительОтчета1.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);


КонецПроцедуры


Функция РасчитатьДанныеПостроителяОтчета()
	
	ЗаполнитьТЗКалендарь(НачалоПериода,КонецПериода);
	
	Запрос=Новый Запрос();

	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.УстановитьПараметр("мТЗКалендарь",мТЗКалендарь);
	Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода",КонецПериода);
	
	Запрос.Текст =	
	"ВЫБРАТЬ
	|	мТЗКалендарь.ДатаДень,
	|	мТЗКалендарь.ОстатокКоличество
	|ПОМЕСТИТЬ TTКалендарь
	|ИЗ
	|	&мТЗКалендарь КАК мТЗКалендарь
	|ГДЕ
	|	мТЗКалендарь.ДатаДень >= &НачалоПериода
	|	И мТЗКалендарь.ДатаДень <= &КонецПериода
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК Период,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоОборот,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
	|ПОМЕСТИТЬ ТТОстатки
	|ИЗ
	|	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
	|		&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, 
	|		{(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* 
	|		КАК ХарактеристикаНоменклатуры} 
	|		)КАК ПартииТоваровНаСкладахОстаткиИОбороты
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоОборот,
	|	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
	|ПОМЕСТИТЬ ТТКонечныеОстаткиИСуммарноеДвижениеЗаПериод
	|ИЗ
	|	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
	|		&НачалоПериода, &КонецПериода, Auto, ДвиженияИГраницыПериода, 
	|		{(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* 
	|		КАК ХарактеристикаНоменклатуры}
	|		) КАК ПартииТоваровНаСкладахОстаткиИОбороты
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	TTКалендарь.ДатаДень,
	|	TTКалендарь.ОстатокКоличество,
	|	ТТОстатки.Номенклатура КАК Номенклатура,
	|	ТТОстатки.Склад КАК Склад
	|ПОМЕСТИТЬ TTКалендарьДляВвсех
	|ИЗ
	|	TTКалендарь КАК TTКалендарь,
	|	ТТОстатки КАК ТТОстатки
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РАЗНОСТЬДАТ(ТТОстаткиНаДату.Период, TTКалендарьДляВвсех.ДатаДень, ДЕНЬ) КАК РазницаДатаДень,
	|	TTКалендарьДляВвсех.ДатаДень,
	|	TTКалендарьДляВвсех.ОстатокКоличество,
	|	TTКалендарьДляВвсех.Номенклатура,
	|	TTКалендарьДляВвсех.Склад,
	|	ТТОстаткиНаДату.Период,
	|	ТТОстаткиНаДату.КоличествоНачальныйОстаток,
	|	ВЫБОР
	|		КОГДА РАЗНОСТЬДАТ(ТТОстаткиНаДату.Период, TTКалендарьДляВвсех.ДатаДень, ДЕНЬ) = 0
	|			ТОГДА ТТОстаткиНаДату.КоличествоПриход
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК КоличествоПриход,
	|	ВЫБОР
	|		КОГДА РАЗНОСТЬДАТ(ТТОстаткиНаДату.Период, TTКалендарьДляВвсех.ДатаДень, ДЕНЬ) = 0
	|			ТОГДА ТТОстаткиНаДату.КоличествоРасход
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК КоличествоРасход,
	|	ВЫБОР
	|		КОГДА РАЗНОСТЬДАТ(ТТОстаткиНаДату.Период, TTКалендарьДляВвсех.ДатаДень, ДЕНЬ) = 0
	|			ТОГДА ТТОстаткиНаДату.КоличествоОборот
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК КоличествоОборот,
	|	ТТОстаткиНаДату.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
	|ПОМЕСТИТЬ ТТКалендарьОтатков
	|ИЗ
	|	TTКалендарьДляВвсех КАК TTКалендарьДляВвсех
	|		ЛЕВОЕ СОЕДИНЕНИЕ ТТОстатки КАК ТТОстаткиНаДату
	|		ПО TTКалендарьДляВвсех.ДатаДень >= ТТОстаткиНаДату.Период
	|			И TTКалендарьДляВвсех.Номенклатура = ТТОстаткиНаДату.Номенклатура
	|			И TTКалендарьДляВвсех.Склад = ТТОстаткиНаДату.Склад
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	МИНИМУМ(ТТКалендарьОтатков.РазницаДатаДень) КАК РазницаДатаДень,
	|	ТТКалендарьОтатков.ДатаДень,
	|	ТТКалендарьОтатков.Номенклатура,
	|	ТТКалендарьОтатков.Склад
	|ПОМЕСТИТЬ ТТДниНаСкладе
	|ИЗ
	|	ТТКалендарьОтатков КАК ТТКалендарьОтатков
	|
	|СГРУППИРОВАТЬ ПО
	|	ТТКалендарьОтатков.ДатаДень,
	|	ТТКалендарьОтатков.Номенклатура,
	|	ТТКалендарьОтатков.Склад
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТТДниНаСкладе.ДатаДень КАК ДатаДень,
	|	ТТДниНаСкладе.Номенклатура КАК Номенклатура,
	|	ТТДниНаСкладе.Склад КАК Склад,
	|	ТТКалендарьОтатков.КоличествоПриход,
	|	ТТКалендарьОтатков.КоличествоРасход,
	|	ТТКалендарьОтатков.КоличествоОборот,
	|	ТТКалендарьОтатков.КоличествоКонечныйОстаток
	|ПОМЕСТИТЬ ТТОстаткиТовараНаСкладе
	|ИЗ
	|	ТТДниНаСкладе КАК ТТДниНаСкладе
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТТКалендарьОтатков КАК ТТКалендарьОтатков
	|		ПО ТТДниНаСкладе.РазницаДатаДень = ТТКалендарьОтатков.РазницаДатаДень
	|			И ТТДниНаСкладе.ДатаДень = ТТКалендарьОтатков.ДатаДень
	|			И ТТДниНаСкладе.Номенклатура = ТТКалендарьОтатков.Номенклатура
	|			И ТТДниНаСкладе.Склад = ТТКалендарьОтатков.Склад
	|ГДЕ
	|	(ТТКалендарьОтатков.КоличествоКонечныйОстаток <> 0
	|			ИЛИ ТТКалендарьОтатков.КоличествоПриход <> 0
	|			ИЛИ ТТКалендарьОтатков.КоличествоРасход <> 0)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТТОстаткиТовараНаСкладе.ДатаДень) КАК ДнейНаСкладе,
	|	ТТОстаткиТовараНаСкладе.Номенклатура,
	|	ТТОстаткиТовараНаСкладе.Склад
	|ПОМЕСТИТЬ ТТТоварДнейНаСкладе
	|ИЗ
	|	ТТОстаткиТовараНаСкладе КАК ТТОстаткиТовараНаСкладе
	|
	|СГРУППИРОВАТЬ ПО
	|	ТТОстаткиТовараНаСкладе.Номенклатура,
	|	ТТОстаткиТовараНаСкладе.Склад
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТТТоварДнейНаСкладе.Склад КАК Склад,
	|	ТТТоварДнейНаСкладе.Номенклатура,
	|	ТТТоварДнейНаСкладе.Номенклатура.Код,
	|	ТТОстаткиИДвижениеЗаПериод.КоличествоНачальныйОстаток,
	|	ТТОстаткиИДвижениеЗаПериод.КоличествоПриход,
	|	ТТОстаткиИДвижениеЗаПериод.КоличествоРасход КАК КоличествоРасход,
	|	ТТОстаткиИДвижениеЗаПериод.КоличествоОборот,
	|	ТТОстаткиИДвижениеЗаПериод.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
	|	ТТТоварДнейНаСкладе.ДнейНаСкладе,
	|	ВЫБОР
	|		КОГДА ТТТоварДнейНаСкладе.ДнейНаСкладе = 0
	|			ТОГДА 0
	|		ИНАЧЕ ТТОстаткиИДвижениеЗаПериод.КоличествоРасход / ТТТоварДнейНаСкладе.ДнейНаСкладе
	|	КОНЕЦ КАК проданоВДень,
	|	ВЫБОР
	|		КОГДА ТТТоварДнейНаСкладе.ДнейНаСкладе = 0
	|				ИЛИ ТТОстаткиИДвижениеЗаПериод.КоличествоРасход = 0
	|			ТОГДА 0
	|		ИНАЧЕ ТТОстаткиИДвижениеЗаПериод.КоличествоКонечныйОстаток / (ТТОстаткиИДвижениеЗаПериод.КоличествоРасход / ТТТоварДнейНаСкладе.ДнейНаСкладе)
	|	КОНЕЦ КАК НаСколькоДнейТовара
	|ИЗ
	|	ТТТоварДнейНаСкладе КАК ТТТоварДнейНаСкладе
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТТКонечныеОстаткиИСуммарноеДвижениеЗаПериод КАК ТТОстаткиИДвижениеЗаПериод
	|		ПО ТТТоварДнейНаСкладе.Номенклатура = ТТОстаткиИДвижениеЗаПериод.Номенклатура
	|			И ТТТоварДнейНаСкладе.Склад = ТТОстаткиИДвижениеЗаПериод.Склад
	|
	|УПОРЯДОЧИТЬ ПО
	|	ТТТоварДнейНаСкладе.Номенклатура.Наименование,
	|	ТТТоварДнейНаСкладе.Склад.Наименование
	|";
	
	ТТДниНаСкладе=Запрос.Выполнить().Выгрузить();                                       
		
	ПостроительОтчета1.ИсточникДанных = новый ОписаниеИсточникаДанных(ТТДниНаСкладе);
	
    возврат ПостроительОтчета1;
   
КонецФункции 

ПостроительОтчета1 - Построитель отчета - реквизит:

1С8 пример. ПостроительОтчета и ТЗ. Расчитать данные построителяОтчета.

1С8 пример. ПостроительОтчета и ТЗ. Расчитать данные построителяОтчета.




Рекламный блок:

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

Доработка и сопровождение 1С:

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Пишите: j008@j008.ru

Звоните: 8 916 710 83 51 Ольга