Как понять, что написано в запросе типовой конфигурации.....?

1. G_113451693535665660083 21.10.21 16:48 Сейчас в теме
Есть отчет "Оплата за период" и в нем какой то запрос дикий запрос, найдутся ли у вас совет как понять логику запроса, сам не особо опытен и в констукторе часть его не открывается
	ТекстВрмТбл = "	
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
	|	ВзаиморасчетыСКонтрагентамиОбороты.Период,
	|	ВзаиморасчетыСКонтрагентамиОбороты.Сделка,
	|	ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
	|	ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход
	|ПОМЕСТИТЬ
	|	ВзаиморасчетыСКонтрагентамиОборотыНаДатуКон
	|ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(, &ДатаКон, Регистратор, {ДоговорКонтрагента.* КАК ДоговорВзаиморасчетовПокупателя, Контрагент.* КАК Покупатель}) КАК ВзаиморасчетыСКонтрагентамиОбороты
	|ГДЕ НЕ ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|;
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ  
	|	ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
	|	ВзаиморасчетыСКонтрагентамиОбороты.Период,
	|	ВзаиморасчетыСКонтрагентамиОбороты.Сделка,
	|	ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
	|	ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход
	|ПОМЕСТИТЬ
	|	ВзаиморасчетыСКонтрагентамиОборотыНаДатуНач
	|ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(, &ДатаНач, Регистратор, {ДоговорКонтрагента.* КАК ДоговорВзаиморасчетовПокупателя, Контрагент.* КАК Покупатель}) КАК ВзаиморасчетыСКонтрагентамиОбороты
	|ГДЕ НЕ ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|;			
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВзаиморасчетыПоДок.Регистратор,
	|	ВзаиморасчетыПоДок.Период,
	|	ВзаиморасчетыПоДок.ДокументРасчетовСКонтрагентом,
	|	ВзаиморасчетыПоДок.ДоговорКонтрагента,
	|	ВзаиморасчетыПоДок.СуммаВзаиморасчетовПриход
	|ПОМЕСТИТЬ
	|	ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОборотыНаДату­Кон
	|ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(, &ДатаКон, Регистратор, {ДоговорКонтрагента.* КАК ДоговорВзаиморасчетовПокупателя, Контрагент.* КАК Покупатель}) КАК ВзаиморасчетыПоДок
	|ГДЕ ВзаиморасчетыПоДок.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|;
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ 
	|	ВзаиморасчетыПоДок.Регистратор,
	|	ВзаиморасчетыПоДок.Период,
	|	ВзаиморасчетыПоДок.ДокументРасчетовСКонтрагентом,
	|	ВзаиморасчетыПоДок.ДоговорКонтрагента,
	|	ВзаиморасчетыПоДок.СуммаВзаиморасчетовПриход
	|ПОМЕСТИТЬ
	|	ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОборотыНаДату­Нач
	|ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(, &ДатаНач, Регистратор, {ДоговорКонтрагента.* КАК ДоговорВзаиморасчетовПокупателя, Контрагент.* КАК Покупатель}) КАК ВзаиморасчетыПоДок
	|ГДЕ ВзаиморасчетыПоДок.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|;";		

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

	ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач = СтрЗаменить(ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуКон, "ВзаиморасчетыСКонтрагентамиОборотыНаДатуКон", "ВзаиморасчетыСКонтрагентамиОборотыНаДатуНач");
	ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач = СтрЗаменить(ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач, "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОборотыНаДат­уКон", "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОборотыНаДат­уНач");
	ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач = СтрЗаменить(ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач, "&ДатаКонОст", "&ДатаНачОст");

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

// Ниже пошел запрос, отвечающий за передачу Продажам только тех регистраторов, которые оплатились
// в течение периода отчета.
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ 
	|		(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|			ОсновнаяТаблица.Регистратор,
	|			ОсновнаяТаблица.Сделка,
	|			МАКСИМУМ(ВЫБОР КОГДА
	|				ВЫБОР //документ не был оплаченным на ДатаНач
	|					КОГДА НеоплаченныеНаДатуКон.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|						ОсновнаяТаблица.Период < НеоплаченныеНаДатуКон.Период
	|						ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуКон.Период 
	|							И ОсновнаяТаблица.Регистратор<НеоплаченныеНаДатуКон.ПервыйРегистратор
	|					ИНАЧЕ
	|						ОсновнаяТаблица.Период <= &КонДата
	|				КОНЕЦ
	|				И
	|				ВЫБОР //и стал оплаченным на ДатаКон
	|					КОГДА НеоплаченныеНаДатуНач.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|						ОсновнаяТаблица.Период > НеоплаченныеНаДатуНач.Период
	|						ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуНач.Период 
	|							И ОсновнаяТаблица.Регистратор>=НеоплаченныеНаДатуНач.ПервыйРегистратор
	|					ИНАЧЕ
	|						ОсновнаяТаблица.Период >= &НачДата
	|				КОНЕЦ ТОГДА 1
	|			ИНАЧЕ -1 КОНЕЦ) КАК ДопКоэффициент,
	|			МАКСИМУМ(РСКВ.Период) КАК ДатаКурсаВалютыУпрУчета //это даты курсов
	|		ИЗ
	|			(	ВЫБРАТЬ   ОсновнаяТаблица.Регистратор
	|						, ОсновнаяТаблица.ДоговорКонтрагента
	|						, ОсновнаяТаблица.Сделка
	|						, ОсновнаяТаблица.Период
	|				ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ОсновнаяТаблица
	|				ГДЕ НЕ ОсновнаяТаблица.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|				ОБЪЕДИНИТЬ
	|				ВЫБРАТЬ   ОсновнаяТаблицаДок.Регистратор
	|						, ОсновнаяТаблицаДок.ДоговорКонтрагента
	|						, ОсновнаяТаблицаДок.ДокументРасчетовСКонтрагентом
	|						, ОсновнаяТаблицаДок.Период
	|				ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов КАК ОсновнаяТаблицаДок
	|				ГДЕ ОсновнаяТаблицаДок.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом
	|			) КАК ОсновнаяТаблица
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК РСКВ
	|				ПО РСКВ.Валюта = &ВалютаУпрУчета И РСКВ.Период<=ОсновнаяТаблица.Период

	|			ЛЕВОЕ СОЕДИНЕНИЕ ("+ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуКон+") КАК НеоплаченныеНаДатуКон
	|				ПО НеоплаченныеНаДатуКон.ДоговорКонтрагента = ОсновнаяТаблица.ДоговорКонтрагента
	|				И НеоплаченныеНаДатуКон.Сделка = ОсновнаяТаблица.Сделка

	|			ЛЕВОЕ СОЕДИНЕНИЕ ("+ТекстВложенногоЗапросаПоНеоплаченнымДокументамНаДатуНач+") КАК НеоплаченныеНаДатуНач
	|				ПО НеоплаченныеНаДатуНач.ДоговорКонтрагента = ОсновнаяТаблица.ДоговорКонтрагента
	|				И НеоплаченныеНаДатуНач.Сделка = ОсновнаяТаблица.Сделка

	|		ГДЕ
	|			ВЫБОР //документ не был оплаченным на ДатаНач
	|				КОГДА НеоплаченныеНаДатуКон.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|					ОсновнаяТаблица.Период < НеоплаченныеНаДатуКон.Период
	|					ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуКон.Период 
	|						И ОсновнаяТаблица.Регистратор<НеоплаченныеНаДатуКон.ПервыйРегистратор
	|				ИНАЧЕ
	|					ОсновнаяТаблица.Период <= &КонДата
	|			КОНЕЦ
	|			И
	|			ВЫБОР //и стал оплаченным на ДатаКон
	|				КОГДА НеоплаченныеНаДатуНач.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|					ОсновнаяТаблица.Период > НеоплаченныеНаДатуНач.Период
	|					ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуНач.Период 
	|						И ОсновнаяТаблица.Регистратор>=НеоплаченныеНаДатуНач.ПервыйРегистратор
	|				ИНАЧЕ
	|					ОсновнаяТаблица.Период >= &НачДата
	|			КОНЕЦ
	|			ИЛИ
	|			ВЫБОР //документ был оплаченным на ДатаНач, т.е. находился левее границы
	|				КОГДА НеоплаченныеНаДатуНач.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|					ОсновнаяТаблица.Период < НеоплаченныеНаДатуНач.Период
	|					ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуНач.Период 
	|						И ОсновнаяТаблица.Регистратор<НеоплаченныеНаДатуНач.ПервыйРегистратор
	|				ИНАЧЕ
	|					ОсновнаяТаблица.Период < &НачДата
	|			КОНЕЦ
	|			И
	|			ВЫБОР //и стал НЕоплаченным на ДатаКон, т.е находится правее границы
	|				КОГДА НеоплаченныеНаДатуКон.ДоговорКонтрагента ЕСТЬ НЕ NULL ТОГДА
	|					ОсновнаяТаблица.Период > НеоплаченныеНаДатуКон.Период
	|					ИЛИ ОсновнаяТаблица.Период = НеоплаченныеНаДатуКон.Период 
	|						И ОсновнаяТаблица.Регистратор>=НеоплаченныеНаДатуКон.ПервыйРегистратор
	|				ИНАЧЕ
	|					Ложь //этот вариант предполагает, что появились неоплаченные документы
	|			КОНЕЦ
	|		СГРУППИРОВАТЬ ПО
	|			ОсновнаяТаблица.Регистратор,
	|			ОсновнаяТаблица.Сделка
	|	) КАК СписокРегистраторов
	|	ПО ПродажиОбороты.Регистратор = СписокРегистраторов.Регистратор
	|		И	ВЫБОР	КОГДА ПродажиОбороты.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам)
	|					ТОГДА ПродажиОбороты.ЗаказПокупателя = СписокРегистраторов.Сделка
	|					ИНАЧЕ ИСТИНА
	|			КОНЕЦ
	// Себестоимость продаж, списываемая сразу
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|	 (ВЫБРАТЬ СУММА(СтоимостьОборот) КАК СтоимостьОборот, Номенклатура, ХарактеристикаНоменклатуры, ЗаказПокупателя, Регистратор 
	|		ИЗ РегистрНакопления.ПродажиСебестоимость.Обороты(,&ДатаКон,Регистратор) КАК ПродажиСебестоимость 
	|	СГРУППИРОВАТЬ ПО Номенклатура, ХарактеристикаНоменклатуры, ЗаказПокупателя, Регистратор) ПродажиСебестоимостьОбороты 
	|	ПО ПродажиОбороты.Регистратор = ПродажиСебестоимостьОбороты.Регистратор 
	|	И ПродажиОбороты.Номенклатура = ПродажиСебестоимостьОбороты.Номенклатура 
	|	И ПродажиОбороты.ХарактеристикаНоменклатуры = ПродажиСебестоимостьОбороты.ХарактеристикаНоменклатуры 
	|	И ПродажиОбороты.ЗаказПокупателя = ПродажиСебестоимостьОбороты.ЗаказПокупателя 
	// Себестоимость продаж, списываемая при корректировке
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		(ВЫБРАТЬ СУММА(Стоимость) КАК Стоимость, Номенклатура, ДокументДвижения, ХарактеристикаНоменклатуры, ЗаказПокупателя, Подразделение 
	|		ИЗ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
	|//		ГДЕ ПродажиСебестоимость.ДокументДвижения <> Неопределено
	|		СГРУППИРОВАТЬ ПО                         Номенклатура, ДокументДвижения, ХарактеристикаНоменклатуры, ЗаказПокупателя, Подразделение
	|		) ПродажиСебестоимостьКорректировка
	|		ПО ПродажиСебестоимостьКорректировка.Номенклатура = ПродажиОбороты.Номенклатура
	|		И ПродажиСебестоимостьКорректировка.ХарактеристикаНоменклатуры = ПродажиОбороты.ХарактеристикаНоменклатуры
	|		И ПродажиСебестоимостьКорректировка.ДокументДвижения = ПродажиОбороты.Регистратор
	|		И ПродажиСебестоимостьКорректировка.ЗаказПокупателя = ПродажиОбороты.ЗаказПокупателя
	|		И ПродажиСебестоимостьКорректировка.Подразделение = ПродажиОбороты.Подразделение
	// ...
	// Цены для плановой себестоимости
	|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК РСЦеныКомпании
	|		ПО РСЦеныКомпании.ТипЦен = &ТипЦенПлановойСебестоимости
	|		И ПродажиОбороты.Номенклатура = РСЦеныКомпании.Номенклатура
	|		И ПродажиОбороты.ХарактеристикаНоменклатуры = РСЦеныКомпании.ХарактеристикаНоменклатуры
	|		И РСЦеныКомпании.Период<=ПродажиОбороты.Период
	// Курсы валют для плановой себестоимости
	|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК РСКурсыВалют
	|		ПО РСКурсыВалют.Валюта = РСЦеныКомпании.Валюта
	|		И РСКурсыВалют.Период<=РСЦеныКомпании.Период
	|СГРУППИРОВАТЬ ПО
	|	ПродажиОбороты.СтоимостьОборот*ДопКоэффициент,
	|	(ВЫБОР КОГДА (ПродажиСебестоимостьОбороты.СтоимостьОборот) ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ПродажиСебестоимостьОбороты.СтоимостьОборот КОНЕЦ + ВЫБОР КОГДА (ПродажиСебестоимостьКорректировка.Стоимость) ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ПродажиСебестоимостьКорректировка.Стоимость КОНЕЦ)*ДопКоэффициент,
	|	ПродажиОбороты.КоличествоОборот*ДопКоэффициент,
	|	ПродажиОбороты.Регистратор,
	|	ПродажиОбороты.Номенклатура,
	|	ПродажиОбороты.ХарактеристикаНоменклатуры,
	|	ПродажиОбороты.Контрагент,
	|	ПродажиОбороты.ДоговорКонтрагента,
	|	ПродажиОбороты.ЗаказПокупателя,
	|	ПродажиОбороты.Подразделение,
	|	ПродажиОбороты.ДокументПродажи,
	|	СписокРегистраторов.ДатаКурсаВалютыУпрУчета
	|) КАК ПродажиСДатамиЦенИДатамиКурсов
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК РСЦеныКомпании
	|	ПО РСЦеныКомпании.ТипЦен = &ТипЦенПлановойСебестоимости
	|	И РСЦеныКомпании.Период = ПродажиСДатамиЦенИДатамиКурсов.ДатаЦены
	|	И РСЦеныКомпании.Номенклатура = ПродажиСДатамиЦенИДатамиКурсов.Номенклатура
	|	И РСЦеныКомпании.ХарактеристикаНоменклатуры = ПродажиСДатамиЦенИДатамиКурсов.ХарактеристикаНоменклатуры
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК РСКурсыВалютыУпрУчета
	|	ПО РСКурсыВалютыУпрУчета.Период = ПродажиСДатамиЦенИДатамиКурсов.ДатаКурсаВалютыУпрУчета
	|	И РСКурсыВалютыУпрУчета.Валюта = &ВалютаУпрУчета
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК РСКурсыВалютыЦен
	|	ПО РСКурсыВалютыЦен.Валюта = РСЦеныКОмпании.Валюта
	|	И РСКурсыВалютыЦен.Период = ПродажиСДатамиЦенИДатамиКурсов.ДатаКурсаВалютыЦены
	|{ГДЕ 
	|	ПродажиСДатамиЦенИДатамиКурсов.Подразделение.* КАК Подразделение,
	|	ПродажиСДатамиЦенИДатамиКурсов.ЗаказПокупателя.Ответственный.* КАК Ответственный,
	|	ПродажиСДатамиЦенИДатамиКурсов.ДоговорВзаиморасчетовПокупателя.Владелец.* КАК Покупатель,
	|	ПродажиСДатамиЦенИДатамиКурсов.ДоговорВзаиморасчетовПокупателя.* КАК ДоговорВзаиморасчетовПокупателя,
	|	ПродажиСДатамиЦенИДатамиКурсов.ЗаказПокупателя.* КАК ЗаказПокупателя,
	|	ПродажиСДатамиЦенИДатамиКурсов.Номенклатура.* КАК Номенклатура,
	|	ПродажиСДатамиЦенИДатамиКурсов.СуммаПродажиОборот КАК СуммаПродажи,
	|	ПродажиСДатамиЦенИДатамиКурсов.КоличествоОборот КАК КоличествоОборот,
	|	ПродажиСДатамиЦенИДатамиКурсов.КоличествоОборот * ПродажиСДатамиЦенИДатамиКурсов.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ПродажиСДатамиЦенИДатамиКурсов.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК КоличествоЕдиницДляОтчетовОборот,
	|	ПродажиСДатамиЦенИДатамиКурсов.СебестоимостьОборот КАК Себестоимость,
	|	ПродажиСДатамиЦенИДатамиКурсов.СуммаПродажиОборот - ПродажиСДатамиЦенИДатамиКурсов.СебестоимостьОборот КАК Маржа,
	|	ПродажиСДатамиЦенИДатамиКурсов.СуммаПродажиОборот - ПродажиСДатамиЦенИДатамиКурсов.СебестоимостьОборот КАК ЧистаяМаржа,
	|	0 КАК СуммаЗатрат,
	|	РСЦеныКомпании.Цена * ПродажиСДатамиЦенИДатамиКурсов.КоличествоОборот * ПродажиСДатамиЦенИДатамиКурсов.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / РСЦеныКомпании.ЕдиницаИзмерения.Коэффициент * РСКурсыВалютыЦен.Курс / РСКурсыВалютыЦен.Кратность * РСКурсыВалютыУпрУчета.Кратность / РСКурсыВалютыУпрУчета.Курс * &КоэффициентОтБазовогоТипа КАК ПлановаяСебестоимость,
	|	ПродажиСДатамиЦенИДатамиКурсов.СуммаПродажиОборот - РСЦеныКомпании.Цена * ПродажиСДатамиЦенИДатамиКурсов.КоличествоОборот * ПродажиСДатамиЦенИДатамиКурсов.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / РСЦеныКомпании.ЕдиницаИзмерения.Коэффициент * РСКурсыВалютыЦен.Курс / РСКурсыВалютыЦен.Кратность * РСКурсыВалютыУпрУчета.Кратность / РСКурсыВалютыУпрУчета.Курс * &КоэффициентОтБазовогоТипа КАК ПлановаяПрибыль
	
	|	//СВОЙСТВА
	|	//КАТЕГОРИИ
	|}
	|ОБЪЕДИНИТЬ ВСЕ
	|ВЫБРАТЬ
	|	0 КАК СуммаПродажи,
	|	0 КАК КоличествоОборот,
	|	0 КАК КоличествоЕдиницДляОтчетовОборот,
	|	0 КАК Себестоимость,
	|	0 КАК МАРЖА,
	|	-ЗатратыОбороты.СуммаОборот КАК ЧистаяМаржа,
	|	ЗатратыОбороты.СуммаОборот КАК СуммаЗатрат,
	|	0 КАК ПлановаяСебестоимость,
	|	0 КАК ПлановаяПрибыль,
	|	ЗатратыОбороты.Регистратор КАК ДокументРеализации,
	|	NULL КАК ХарактеристикаНоменклатуры,
	|	ЗатратыОбороты.Подразделение КАК Подразделение,
	|	ЗатратыОбороты.Заказ КАК ЗаказПокупателя,
	|	ЗатратыОбороты.Заказ.ДоговорКонтрагента КАК ДоговорВзаиморасчетовПокупателя,
	|	ЗатратыОбороты.Заказ.Ответственный КАК Ответственный,
	|	ЗатратыОбороты.СтатьяЗатрат КАК Номенклатура,
	|	ЗатратыОбороты.Заказ.Контрагент КАК Покупатель
	|{ВЫБРАТЬ
	|	СуммаПродажи,
	|	КоличествоОборот,
	|	КоличествоЕдиницДляОтчетовОборот,
	|	Себестоимость,
	|	Маржа,
	|	ЧистаяМаржа,
	|	СуммаЗатрат,
	|	ПлановаяСебестоимость,
	|	ПлановаяПрибыль,
	|	ДокументРеализации.*,
	|	ХарактеристикаНоменклатуры.*,
	|	Покупатель.*,
	|	ЗаказПокупателя.*,
	|	ДоговорВзаиморасчетовПокупателя,
	|	Ответственный.*,
	|	Подразделение.*,
	|	Номенклатура.*}
	|ИЗ РегистрНакопления.Затраты.Обороты(&ДатаНач, &ДатаКон, Регистратор {&Периодичность}, Заказ <> НЕОПРЕДЕЛЕНО) КАК ЗатратыОбороты
	|{ГДЕ 
	|	ЗатратыОбороты.Подразделение.* КАК Подразделение,
	|	ЗатратыОбороты.Заказ.Ответственный.* КАК Ответственный,
	|	ЗатратыОбороты.Заказ.Контрагент.* КАК Покупатель,
	|	ЗатратыОбороты.Заказ.ДоговорКонтрагента.* КАК ДоговорВзаиморасчетовПокупателя,
	|	ЗатратыОбороты.Заказ.* КАК ЗаказПокупателя,
	|	ЗатратыОбороты.СтатьяЗатрат КАК Номенклатура,
	|	0 КАК СуммаПродажи,
	|	0 КАК КоличествоОборот,
	|	0 КАК КоличествоЕдиницДляОтчетовОборот,
	|	0 КАК Себестоимость,
	|	0 КАК МАРЖА,
	|	-ЗатратыОбороты.СуммаОборот КАК ЧистаяМаржа,
	|	ЗатратыОбороты.СуммаОборот КАК СуммаЗатрат,
	|	0 КАК ПлановаяСебестоимость,
	|	0 КАК ПлановаяПрибыль
	|	//СВОЙСТВА
	|	//КАТЕГОРИИ
	|}
	|{УПОРЯДОЧИТЬ ПО 
	|	ЗаказПокупателя.*,
	|	Подразделение.*,
	|	Покупатель.*,
	|	Ответственный.*,
	|	Номенклатура.*,
	|	СуммаПродажи,
	|	КоличествоОборот,
	|	КоличествоЕдиницДляОтчетовОборот,
	|	Себестоимость,
	|	Маржа,
	|	ЧистаяМаржа,
	|	СуммаЗатрат,
	|	ПлановаяСебестоимость,
	|	ПлановаяПрибыль
	|	//СВОЙСТВА
	|}
	|ИТОГИ
	|	СУММА(СуммаПродажи),
	|	СУММА(КоличествоОборот),
	|	СУММА(КоличествоЕдиницДляОтчетовОборот),
	|	СУММА(Себестоимость),
	|	СУММА(Маржа),
	|	СУММА(ЧистаяМаржа),
	|	СУММА(СуммаЗатрат),
	|	СУММА(ПлановаяСебестоимость),
	|	СУММА(ПлановаяПрибыль)
	|
	|ПО ОБЩИЕ
	|
	|{ИТОГИ ПО
	|	ЗаказПокупателя.*,
	|	Подразделение.*,
	|	Покупатель.*,
	|	Ответственный.*,
	|	Номенклатура.*
	|	//СВОЙСТВА
	|}
		|";
Показать
Найденные решения
7. rusmil 262 21.10.21 19:35 Сейчас в теме
1. Так как запрос динамически меняется, ставите в отладчике точку остановки после текста запроса на операторе: Запрос.Выполнить() или Запрос.ВыполнитьПакет().
2. Смотрите значение переменной в отладчике Запрос.Текст и значения переменных Запрос.Параметры если таковые есть. Можете скопировать этот текст в Консоль запросов.
3. В консоли запросов управляемого приложения можете выполнить текст запроса со всеми промежуточными таблицами и посмотреть в них данные. Также в консоли запросов можно менять запрос или устанавливать дополнительные параметры и смотреть что будет получаться.
4. Советую в запросе наложить фильтр по договору иначе Вы утонете в данных и таблицах если в базе много контрагентов, договоров и документов.
5. Вообще советую при анализе запроса держать в голове для чего Вы этот анализ хотите сделать, какую задачу решить, как правильно заметил выше пользователь "TokarevV. А" пытаться анализировать такой запрос бесцельно - это потеря времени.
dehro; G_113451693535665660083; I_train; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. STELEICE 21.10.21 17:46 Сейчас в теме
(1) Не полностью в конструктор попадает потому что текст динамически подменяется в зависимости от условий.
Надо брать и "читать" или сделать свой по проще
2. DJ_Codebase 21.10.21 17:00 Сейчас в теме
понять логику можно умом. других вариантов нет. в конфигураторе ставишь точку останова после формирования всего текста запроса, копируешь, сохр. в файл, а дальше его в конструктор запроса и разбираться
3. XAKEP 21.10.21 17:04 Сейчас в теме
вы хоть знаете сколько там строк и на какой у вас "непонятка" :) ?
4. TokarevV 35 21.10.21 17:11 Сейчас в теме
Пишите конкретную потребность, у вас ведь не самоцель понять логику?
dehro; Denis_CFO; Fox-trot; +3 Ответить
6. Denis_CFO 49 21.10.21 18:26 Сейчас в теме
(4) Очередной ленивец ,который работать не хочет.
По-теме: в запросе данные выгружаются в виртуальные таблицы, из которых потом данные повторно используются. Набор данных там небольшой, но много раз повторяется, поэтому - записывайте на листок и структурируйте. Позже, если поймете, сможете эти все "двадцать квадриллионов" строк держать в голове, как шаблон.
и ещё, для понимания всего этого, нужно знать архитектуру конфигурации и бизнес-процессы. Но вы же на всё готовы?
G_113451693535665660083; I_train; FatPanzer; Torin; +4 Ответить
7. rusmil 262 21.10.21 19:35 Сейчас в теме
1. Так как запрос динамически меняется, ставите в отладчике точку остановки после текста запроса на операторе: Запрос.Выполнить() или Запрос.ВыполнитьПакет().
2. Смотрите значение переменной в отладчике Запрос.Текст и значения переменных Запрос.Параметры если таковые есть. Можете скопировать этот текст в Консоль запросов.
3. В консоли запросов управляемого приложения можете выполнить текст запроса со всеми промежуточными таблицами и посмотреть в них данные. Также в консоли запросов можно менять запрос или устанавливать дополнительные параметры и смотреть что будет получаться.
4. Советую в запросе наложить фильтр по договору иначе Вы утонете в данных и таблицах если в базе много контрагентов, договоров и документов.
5. Вообще советую при анализе запроса держать в голове для чего Вы этот анализ хотите сделать, какую задачу решить, как правильно заметил выше пользователь "TokarevV. А" пытаться анализировать такой запрос бесцельно - это потеря времени.
dehro; G_113451693535665660083; I_train; +3 Ответить
9. dehro 12 22.10.21 19:46 Сейчас в теме
(7)Добавлю.
К п1. в отладчике может быть не весь текст запроса, а только первые несколько тысяч символов. Один раз мне пришлось подписывать код сохранения текста запроса в текстовый файл: в блокноте увидел весь запрос.

Так как там куча временных таблиц: если нет МенеджерВременныхТаблиц - укажите. Можно будет посмотреть их в отладчике.

За п 5 - однозначно плюс.
8. FatPanzer 21.10.21 20:02 Сейчас в теме
Начни с "тренировки на кошечках". Тем, кто "сам не силен в 1С" до таких запросов как отсюда и до японской матери.
Оставьте свое сообщение

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