1С8 Самоучитель. Консоль отчетов. Язык построителя отчета.

Язык построителя отчета - инструмент программиста.

Язык построителя отчета используется в 1С - запросах. Конструкции языка построителя отчета управляют формированием отчета.

[ missing image ]

Конструкции построителя заключаются в фигурные скобки.

{ВЫБРАТЬ}

- Позволяет пользователю в настройке отчета выбирать поля для вывода (закладка "Выбранные поля")

ВЫБРАТЬ - в этом предложении описываются поля, которые пользователь сможет выбирать для вывода.

{ГДЕ}

- Позволяет пользователю в настройке отчета выбирать поля для задания условия отбора (закладка "Отбор").

ГДЕ - описываются поля, на которые пользователь сможет накладывать ограничения.

{УПОРЯДОЧИТЬ ПО}

- Позволяет пользователю в настройке отчета выбирать поля управления порядком сортировки (закладка "Сортировка").

После конструкции {УПОРЯДОЧИТЬ ПО - описываются поля, которые можно использовать для управления порядком сортировки выводимых в отчет данных.

{ИТОГИ ПО}

- Дает возможность пользователю в настройке отчета выбирать поля для которых необходимо расчитывать итоги.

ИТОГИ ПО - описываются поля, по которым будут выводиться итоговые значения. После всех этих элементов через запятую перечисляются поля, которые могут являться как "реальными" полями, так и псевдонимами полей из списка выборки. После поля можно указывать псевдоним поля для построителя отчета.

Пример:

{ИТОГИ ПО Номенклатура КАК Товар, Контрагент КАК Покупатель}

Если после поля поставить ".*", то это будет означать, что кроме самого поля построитель даст возможность использовать и все поля "через точку" от данного поля.

Пример:

{ИТОГИ ПО Номенклатура.* КАК Товар, Контрагент КАК Покупатель}

В данном примере, в отчете пользователь сможет выбирать в качестве измерения не только номенклатуру но также и все ее реквизиты, например "Номенклатура.ОсновнойПоставщик". Кроме основных элементов, построитель принимает элементы, записанные в параметрах виртуальных таблиц. В таких случаях тип полей зависит от типа параметра, в котором располагаются элементы.

Примеры:

// Пример 1:
// В этом примере, в настройках отчета, поля ДатаНачала, ДатаКонца, Номенклатура, Склад, 
// станут доступными в отборе, 
// т.е. пользователь сможет применять для них фильтры.
// Возможно обозначение таблиц как "необязательных". 
// Это делается при помощи выделения части соединения в фигурные скобки. 
// В этом случае построитель отчета будет включать выделенное соединение в результирующий 
// запрос только тогда, когда пользователь где-либо задействует любое поле из таблиц соединения.

ВЫБРАТЬ
    УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,
    УчетНоменклатурыОбороты.Склад КАК Склад,
    УчетНоменклатурыОбороты.КоличествоПриход КАК КоличествоПриход,
    УчетНоменклатурыОбороты.КоличествоРасход КАК КоличествоРасход
ИЗ
    РегистрНакопления.УчетНоменклатуры.Обороты({&ДатаНачала}, {&ДатаКонца}, ,{Номенклатура.*, Склад.*}) 
        КАК УчетНоменклатурыОбороты




// Пример 2:
// В приведенном примере таблица РегистрНакопления.УчетНоменклатуры.
// Остатки будет включатся в запрос только в том случае, 
// если пользователь выберет любое поле из нее либо в отборе, либо в выбранных полях.

ВЫБРАТЬ
	СтравочникНоменклатуры.Код КАК Код,
	СтравочникНоменклатуры.Наименование КАК Наименование,
	СтравочникНоменклатуры.СтранаПроисхождения,
	ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Остаток
{ВЫБРАТЬ
	СтравочникНоменклатуры.Код КАК Код,
	СтравочникНоменклатуры.Наименование КАК Наименование,
	ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Остаток}
ИЗ
	Справочник.Номенклатура КАК СтравочникНоменклатуры
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
		ПО (ПартииТоваровНаСкладахОстатки.Номенклатура = СтравочникНоменклатуры.Ссылка)}
ГДЕ
	СтравочникНоменклатуры.ЭтоГруппа = ЛОЖЬ
{ГДЕ
	СтравочникНоменклатуры.Ссылка.* КАК Номенклатура,
	ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Остаток}
{УПОРЯДОЧИТЬ ПО
	Код,
	Наименование}
ИТОГИ
	СУММА(Остаток)
ПО
	ОБЩИЕ
{ИТОГИ ПО
	СтравочникНоменклатуры.Ссылка.* КАК Номенклатура}




// Пример - шаблон 3:
// Такой шаблон рекомендуется при написании завпросов для СКД - отчетов:
// При написании текста запроса рекомендуется следовать правилам, описанным в следующем шаблоне текста запроса:
	//
	//ВЫБРАТЬ // РАЗРЕШЕННЫЕ
	//	<ПсевдонимТаблицы.Поле> КАК <ПсевдонимПоля>,
	//	ПРЕДСТАВЛЕНИЕ(<ПсевдонимТаблицы>.<Поле>),
	//	<ПсевдонимТаблицы.Показатель> КАК <ПсевдонимПоказателя>
	//	<ПсевдонимТаблицы>.Регистратор КАК Регистратор,
	//	<ПсевдонимТаблицы>.Период КАК Период,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕНЬ) КАК ПериодДень,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, НЕДЕЛЯ) КАК ПериодНеделя,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕКАДА) КАК ПериодДекада,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, МЕСЯЦ) КАК ПериодМесяц,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, КВАРТАЛ) КАК ПериодКвартал,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ГОД) КАК ПериодГод
	//	//ПОЛЯ_СВОЙСТВА
	//	//ПОЛЯ_КАТЕГОРИИ
	//{ВЫБРАТЬ
	//	<ПсевдонимПоля>.*,
	//	<ПсевдонимПоказателя>,
	//	Регистратор,
	//	Период,
	//	ПериодДень,
	//	ПериодНеделя,
	//	ПериодДекада,
	//	ПериодМесяц,
	//	ПериодКвартал,
	//	ПериодПолугодие,
	//	ПериодГод
	//	//ПОЛЯ_СВОЙСТВА
	//	//ПОЛЯ_КАТЕГОРИИ
	//}
	//ИЗ
	//	<Таблица> КАК <ПсевдонимТаблицы>
	//	//СОЕДИНЕНИЯ
	//{ГДЕ
	//	<ПсевдонимТаблицы.Поле>.* КАК <ПсевдонимПоля>,
	//	<ПсевдонимТаблицы.Показатель> КАК <ПсевдонимПоказателя>,
	//	<ПсевдонимТаблицы>.Регистратор КАК Регистратор,
	//	<ПсевдонимТаблицы>.Период КАК Период,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕНЬ) КАК ПериодДень,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, НЕДЕЛЯ) КАК ПериодНеделя,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕКАДА) КАК ПериодДекада,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, МЕСЯЦ) КАК ПериодМесяц,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, КВАРТАЛ) КАК ПериодКвартал,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
	//	НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ГОД) КАК ПериодГод
	//	//ПОЛЯ_СВОЙСТВА
	//	//ПОЛЯ_КАТЕГОРИИ
	//}
	//{УПОРЯДОЧИТЬ ПО
	//	<ПсевдонимПоля>.*,
	//	<ПсевдонимПоказателя>,
	//	Регистратор,
	//	Период,
	//	ПериодДень,
	//	ПериодНеделя,
	//	ПериодДекада,
	//	ПериодМесяц,
	//	ПериодКвартал,
	//	ПериодПолугодие,
	//	ПериодГод
	//	//УПОРЯДОЧИТЬ_СВОЙСТВА
	//	//УПОРЯДОЧИТЬ_КАТЕГОРИИ
	//}
	//ИТОГИ
	//	АГРЕГАТНАЯ_ФУНКЦИЯ(<ПсевдонимПоказателя>)
	//	//ИТОГИ_СВОЙСТВА
	//	//ИТОГИ_КАТЕГОРИИ
	//ПО
	//	ОБЩИЕ
	//{ИТОГИ ПО
	//	<ПсевдонимПоля>.*,
	//	Регистратор,
	//	Период,
	//	ПериодДень,
	//	ПериодНеделя,
	//	ПериодДекада,
	//	ПериодМесяц,
	//	ПериодКвартал,
	//	ПериодПолугодие,
	//	ПериодГод
	//	//ПОЛЯ_СВОЙСТВА
	//	//ПОЛЯ_КАТЕГОРИИ
	//}

// Пример 4:
// Пример запроса: 
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец КАК ДоговорКонтрагентаВладелец,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец),
	ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента),
	ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя) КАК ЗаказПокупателяПредставление,
	ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.Номенклатура),
	ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры),
	ЗаказыПокупателейОстаткиИОбороты.СтатусПартии КАК СтатусПартии,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.СтатусПартии),
	ЗаказыПокупателейОстаткиИОбороты.Цена КАК Цена,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.Цена),
	ЗаказыПокупателейОстаткиИОбороты.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстаткиИОбороты.ЕдиницаИзмерения),
	ВЫБОР
		КОГДА СводЗаказыПокупателейОстаткиИОбороты.КоличествоПриход = СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток
			ТОГДА "Не отгружено"
		КОГДА ЕСТЬNULL(СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) <= 0
			ТОГДА "Отгружено полностью"
		ИНАЧЕ "Отгружено частично"
	КОНЕЦ КАК СостояниеОтгрузки,
	ВЫБОР
		КОГДА РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход = 0
				ИЛИ РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход ЕСТЬ NULL 
			ТОГДА "Не оплачено"
		КОГДА РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход >= РасчетыСКонтрагентами.СуммаВзаиморасчетовПриход
			ТОГДА "Оплачено полностью"
		ИНАЧЕ "Оплачено частично"
	КОНЕЦ КАК СостояниеОплаты,
	РасчетыСКонтрагентами.СуммаУпрПриход КАК СуммаЗаказа,
	РасчетыСКонтрагентами.СуммаУпрКонечныйОстаток КАК ОсталосьОплатить,
	ВЫБОР
		КОГДА РасчетыСКонтрагентами.СуммаУпрПриход * (РасчетыСКонтрагентами.ДоговорКонтрагента.ПроцентПредоплаты / 100) 
			- РасчетыСКонтрагентами.СуммаУпрРасход <= 0
			ТОГДА 0
		ИНАЧЕ РасчетыСКонтрагентами.СуммаУпрПриход * (РасчетыСКонтрагентами.ДоговорКонтрагента.ПроцентПредоплаты / 100) 
			- РасчетыСКонтрагентами.СуммаУпрРасход
	КОНЕЦ КАК Предоплата,
	ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК ОсталосьОтгрузитьСуммаВзаиморасчетов,
	ЗаказыПокупателейОстаткиИОбороты.СуммаУпрКонечныйОстаток КАК ОсталосьОтгрузитьСуммаУпр,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход КАК Запланировано,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОсталосьОтгрузить,
	ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0) + ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток, 0) КАК СоСклада,
	РазмещениеЗаказовПокупателей.КоличествоОстаток КАК Заказано,
	ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток, 0) КАК ОсталосьОбеспечить,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход  
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		КАК ЗапланированоБазовыхЕд,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		КАК ОсталосьОтгрузитьБазовыхЕд,
	ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		КАК СоСкладаБазовыхЕд,
	РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		КАК ЗаказаноБазовыхЕд,
	ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		КАК ОсталосьОбеспечитьБазовыхЕд,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент 
		КАК ЗапланированоЕдиницОтчетов,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент 
		КАК ОсталосьОтгрузитьЕдиницОтчетов,
	ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПередаче.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПолучению.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		КАК СоСкладаЕдиницОтчетов,
	РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаДляОтчетов.Коэффициент 
		КАК ЗаказаноЕдиницОтчетов,
	ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПередаче.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток * РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПолучению.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		КАК ОсталосьОбеспечитьЕдиницОтчетов
{ВЫБРАТЬ
	ДоговорКонтрагентаВладелец.*,
	ДоговорКонтрагента.*,
	ЗаказПокупателя.*,
	Номенклатура.*,
	ХарактеристикаНоменклатуры.*,
	СтатусПартии,
	Цена,
	ЕдиницаИзмерения.*,
	СостояниеОтгрузки,
	СостояниеОплаты,
	Предоплата,
	СуммаЗаказа,
	ОсталосьОплатить,
	ОсталосьОтгрузитьСуммаВзаиморасчетов,
	ОсталосьОтгрузитьСуммаУпр,
	Запланировано,
	ОсталосьОтгрузить,
	СоСклада,
	Заказано,
	ОсталосьОбеспечить,
	ЗапланированоБазовыхЕд,
	ОсталосьОтгрузитьБазовыхЕд,
	СоСкладаБазовыхЕд,
	ЗаказаноБазовыхЕд,
	ОсталосьОбеспечитьБазовыхЕд,
	ЗапланированоЕдиницОтчетов,
	ОсталосьОтгрузитьЕдиницОтчетов,
	СоСкладаЕдиницОтчетов,
	ЗаказаноЕдиницОтчетов,
	ОсталосьОбеспечитьЕдиницОтчетов}
ИЗ
	РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ДоговорКонтрагента.Владелец).* КАК ДоговорКонтрагентаВладелец, 
		(ДоговорКонтрагента).* 		 КАК ДоговорКонтрагента, 
		(ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя)
		).* 
		КАК ЗаказПокупателя, 
		(Номенклатура).* КАК Номенклатура, 
		(ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры
		}
		) 
		КАК ЗаказыПокупателейОстаткиИОбороты
		{ЛЕВОЕ СОЕДИНЕНИЕ 
		РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ВЫРАЗИТЬ(ДокументРезерва КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя,
		(Номенклатура).* КАК Номенклатура, 
		(ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры
		}
		) КАК ТоварыВРезервеНаСкладах
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = ТоварыВРезервеНаСкладах.ДокументРезерва
			И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура
			И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры}
		{ЛЕВОЕ СОЕДИНЕНИЕ 
		РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&ДатаКон, ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ВЫРАЗИТЬ(ДокументРезерва КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя, 
		(Номенклатура).* КАК Номенклатура, 
		(ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры
		}
		) КАК РезервыКПередаче
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РезервыКПередаче.ДокументРезерва
			И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РезервыКПередаче.Номенклатура
			И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РезервыКПередаче.ХарактеристикаНоменклатуры}
		{ЛЕВОЕ СОЕДИНЕНИЕ 
		РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(&ДатаКон, ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ВЫРАЗИТЬ(ДокументРезерва КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя, 
		(Номенклатура).* КАК Номенклатура, 
		(ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры
		}
		) КАК РезервыКПолучению
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РезервыКПолучению.ДокументРезерва
			И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РезервыКПолучению.Номенклатура
			И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РезервыКПолучению.ХарактеристикаНоменклатуры}
		{ЛЕВОЕ СОЕДИНЕНИЕ 
		РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя,
		(Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры
		}
		) КАК РазмещениеЗаказовПокупателей
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РазмещениеЗаказовПокупателей.ЗаказПокупателя
			И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РазмещениеЗаказовПокупателей.Номенклатура
			И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателей.ХарактеристикаНоменклатуры}
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Сделка ССЫЛКА Документ.ЗаказПокупателя 
		{
		(ДоговорКонтрагента.Владелец).* КАК ДоговорКонтрагентаВладелец, 
		(ДоговорКонтрагента).* КАК ДоговорКонтрагента, 
		(ВЫРАЗИТЬ(Сделка КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя
		}
		) КАК РасчетыСКонтрагентами
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РасчетыСКонтрагентами.Сделка
			И ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = РасчетыСКонтрагентами.ДоговорКонтрагента
		}
		{ЛЕВОЕ СОЕДИНЕНИЕ 
		РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя 
		{(ДоговорКонтрагента.Владелец).* КАК ДоговорКонтрагентаВладелец, 
		(ДоговорКонтрагента).* КАК ДоговорКонтрагента, 
		(ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя
		}
		) 
		КАК СводЗаказыПокупателейОстаткиИОбороты
		ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = СводЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя}
{ГДЕ
	ЗаказыПокупателейОстаткиИОбороты.СтатусПартии.* КАК СтатусПартии,
	ЗаказыПокупателейОстаткиИОбороты.Цена КАК Цена,
	ЗаказыПокупателейОстаткиИОбороты.ЕдиницаИзмерения.* КАК ЕдиницаИзмерения,
	(ВЫБОР
			КОГДА СводЗаказыПокупателейОстаткиИОбороты.КоличествоПриход = СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток
				ТОГДА "Не отгружено"
			КОГДА ЕСТЬNULL(СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) <= 0
				ТОГДА "Отгружено полностью"
			ИНАЧЕ "Отгружено частично"
		КОНЕЦ) КАК СостояниеОтгрузки,
	(ВЫБОР
			КОГДА РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход = 0
					ИЛИ РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход ЕСТЬ NULL 
				ТОГДА "Не оплачено"
			КОГДА РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход >= РасчетыСКонтрагентами.СуммаВзаиморасчетовПриход
				ТОГДА "Оплачено полностью"
			ИНАЧЕ "Оплачено частично"
		КОНЕЦ) КАК СостояниеОплаты,
	(ВЫБОР
			КОГДА РасчетыСКонтрагентами.СуммаУпрПриход 
		* (РасчетыСКонтрагентами.ДоговорКонтрагента.ПроцентПредоплаты / 100) 
		- РасчетыСКонтрагентами.СуммаУпрРасход <= 0
				ТОГДА 0
			ИНАЧЕ РасчетыСКонтрагентами.СуммаУпрПриход 
		* (РасчетыСКонтрагентами.ДоговорКонтрагента.ПроцентПредоплаты / 100) 
		- РасчетыСКонтрагентами.СуммаУпрРасход
		КОНЕЦ) КАК Предоплата,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход КАК Запланировано,
	ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОсталосьОтгрузить,
	(ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0) 
		+ ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток, 0)
		) КАК СоСклада,
	РазмещениеЗаказовПокупателей.КоличествоОстаток КАК Заказано,
	(ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток, 0)
		) КАК ОсталосьОбеспечить,
	ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК ОсталосьОтгрузитьСуммаВзаиморасчетов,
	ЗаказыПокупателейОстаткиИОбороты.СуммаУпрКонечныйОстаток КАК ОсталосьОтгрузитьСуммаУпр,
	(ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) 
		КАК ЗапланированоБазовыхЕд,
	(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) 
		КАК ОсталосьОтгрузитьБазовыхЕд,
	(ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0)
		) КАК СоСкладаБазовыхЕд,
	(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент
		) КАК ЗаказаноБазовыхЕд,
	(ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 0)
		) КАК ОсталосьОбеспечитьБазовыхЕд,
	(ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
		) КАК ЗапланированоЕдиницОтчетов,
	(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
		) КАК ОсталосьОтгрузитьЕдиницОтчетов,
	(ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПередаче.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПолучению.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0)
		) КАК СоСкладаЕдиницОтчетов,
	(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
		) КАК ЗаказаноЕдиницОтчетов,
	(ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток 
		* ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток 
		* ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ ТоварыВРезервеНаСкладах.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РезервыКПередаче.КоличествоОстаток 
		* РезервыКПередаче.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПередаче.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		+ ЕСТЬNULL(РезервыКПолучению.КоличествоОстаток 
		* РезервыКПолучению.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РезервыКПолучению.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) 
		- ЕСТЬNULL(РазмещениеЗаказовПокупателей.КоличествоОстаток 
		* РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
		/ РазмещениеЗаказовПокупателей.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0)
		) КАК ОсталосьОбеспечитьЕдиницОтчетов,
	РасчетыСКонтрагентами.СуммаУпрПриход КАК СуммаЗаказа,
	РасчетыСКонтрагентами.СуммаУпрКонечныйОстаток КАК ОсталосьОплатить}
{УПОРЯДОЧИТЬ ПО
	ДоговорКонтрагентаВладелец.*,
	ДоговорКонтрагента.*,
	ЗаказПокупателя.*,
	Номенклатура.*,
	ХарактеристикаНоменклатуры.*,
	СтатусПартии,
	Цена,
	ЕдиницаИзмерения.*,
	СостояниеОтгрузки,
	СостояниеОплаты,
	Предоплата,
	Запланировано,
	СоСклада,
	Заказано,
	ОсталосьОтгрузить,
	ОсталосьОплатить,
	ОсталосьОбеспечить,
	СуммаЗаказа,
	ОсталосьОплатить КАК ОсталосьОтгрузитьСуммаВзаиморасчетов,
	ОсталосьОтгрузитьСуммаУпр,
	ЗапланированоБазовыхЕд,
	ОсталосьОтгрузитьБазовыхЕд,
	СоСкладаБазовыхЕд,
	ЗаказаноБазовыхЕд,
	ОсталосьОбеспечитьБазовыхЕд,
	ЗапланированоЕдиницОтчетов,
	ОсталосьОтгрузитьЕдиницОтчетов,
	СоСкладаЕдиницОтчетов,
	ЗаказаноЕдиницОтчетов,
	ОсталосьОбеспечитьЕдиницОтчетов}
ИТОГИ
	МАКСИМУМ(СостояниеОтгрузки),
	МАКСИМУМ(СостояниеОплаты),
	ВЫБОР
		КОГДА Номенклатура ЕСТЬ НЕ NULL 
			ТОГДА 0
		КОГДА ЗаказПокупателя ЕСТЬ НЕ NULL 
			ТОГДА СУММА(СуммаЗаказа) / КОЛИЧЕСТВО(Номенклатура)
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаЗаказа,
	ВЫБОР
		КОГДА Номенклатура ЕСТЬ НЕ NULL 
			ТОГДА 0
		КОГДА ЗаказПокупателя ЕСТЬ НЕ NULL 
			ТОГДА СУММА(ОсталосьОплатить) / КОЛИЧЕСТВО(Номенклатура)
		ИНАЧЕ 0
	КОНЕЦ КАК ОсталосьОплатить,
	ВЫБОР
		КОГДА Номенклатура ЕСТЬ НЕ NULL 
			ТОГДА 0
		КОГДА ЗаказПокупателя ЕСТЬ НЕ NULL 
			ТОГДА СУММА(Предоплата) / КОЛИЧЕСТВО(Номенклатура)
		ИНАЧЕ 0
	КОНЕЦ КАК Предоплата,
	СУММА(ОсталосьОтгрузитьСуммаВзаиморасчетов),
	СУММА(ОсталосьОтгрузитьСуммаУпр),
	СУММА(Запланировано),
	СУММА(ОсталосьОтгрузить),
	СУММА(СоСклада),
	СУММА(Заказано),
	СУММА(ОсталосьОбеспечить),
	СУММА(ЗапланированоБазовыхЕд),
	СУММА(ОсталосьОтгрузитьБазовыхЕд),
	СУММА(СоСкладаБазовыхЕд),
	СУММА(ЗаказаноБазовыхЕд),
	СУММА(ОсталосьОбеспечитьБазовыхЕд),
	СУММА(ЗапланированоЕдиницОтчетов),
	СУММА(ОсталосьОтгрузитьЕдиницОтчетов),
	СУММА(СоСкладаЕдиницОтчетов),
	СУММА(ЗаказаноЕдиницОтчетов),
	СУММА(ОсталосьОбеспечитьЕдиницОтчетов)
ПО
	ОБЩИЕ,
	ДоговорКонтрагентаВладелец,
	ДоговорКонтрагента,
	ЗаказПокупателя,
	Номенклатура,
	ХарактеристикаНоменклатуры,
	Цена,
	ЕдиницаИзмерения,
	СтатусПартии
{ИТОГИ ПО
	СостояниеОтгрузки,
	СостояниеОплаты,
	ДоговорКонтрагентаВладелец.*,
	ДоговорКонтрагента.*,
	ЗаказПокупателя.*,
	Номенклатура.*,
	ХарактеристикаНоменклатуры.*,
	Цена,
	ЕдиницаИзмерения.*,
	СтатусПартии}




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

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

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

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

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

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

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