Недавно отлаживал запрос, состоящий из 8 временных таблиц. Некоторые таблицы имели дублирование по полям. Например, может быть много поступлений безналичных по одному заказу. Или много реализаций по одному заказу. Или много заказов оплачивается в одном поступлении безналичных. В общем, когда эти таблицы соединяешь в разных местах и вариантах, то естественно возникают дублирования строк. И очень сложно держать весь контекст пакета запросов у себя в голове и отлаживать его. Понял, что так больше не хочу и надо что-то придумать. Поиск в интернете, по визуализации запросов, простых решений не дал. Ближайшее, что было похоже на то, что мне нужно - это рисовать ER-диаграммы. Но мне хотелось видеть больше информации на диаграмме, поэтому решил рисовать свой велосипед сам с помощью сайта диаграмм draw.io

Вот текст одного из запросов по моей задаче, и его визуализация:

ВЫБРАТЬ
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка КАК БДС,
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.Дата КАК ДатаБДС,
	СУММА(ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма) КАК СуммаБДС,
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_БДСПоЗаказам
ИЗ
	Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК ПоступлениеБезналичныхДенежныхСредствРасшифров��аПлатежа
ГДЕ
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.ХозяйственнаяОперация = &ХозяйственнаяОперация
	И ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств = &СтатьяДвиженияДенежныхСредств
	И ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
	И ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.Проведен
	И НЕ ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.ПометкаУдаления
	И ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа.Менеджер = &Менеджер

СГРУППИРОВАТЬ ПО
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка,
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка.Дата,
	ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_БДСПоЗаказам.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_ЗаказыКлиентов
ИЗ
	ВТ_БДСПоЗаказам КАК ВТ_БДСПоЗаказам

СГРУППИРОВАТЬ ПО
	ВТ_БДСПоЗаказам.ЗаказКлиента
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_БДСПоЗаказам.БДС КАК БДС,
	ВТ_БДСПоЗаказам.ДатаБДС КАК ДатаБДС,
	ВТ_БДСПоЗаказам.СуммаБДС КАК СуммаБДС,
	ВТ_БДСПоЗаказам.ЗаказКлиента КАК ЗаказКлиента,
	СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаРеализацииВПрошлом,
	КОНЕЦПЕРИОДА(МАКСИМУМ(РеализацияТоваровУслуг.Дата), ДЕНЬ) КАК ДатаПоследнейРеализации
ПОМЕСТИТЬ ВТ_СуммаИПоследняяДатаРеализации
ИЗ
	ВТ_БДСПоЗаказам КАК ВТ_БДСПоЗаказам
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ПО ВТ_БДСПоЗаказам.ЗаказКлиента = РеализацияТоваровУслуг.ЗаказКлиента
			И (РеализацияТоваровУслуг.Дата <= ВТ_БДСПоЗаказам.ДатаБДС)
ГДЕ
	РеализацияТоваровУслуг.Проведен
	И НЕ РеализацияТоваровУслуг.ПометкаУдаления

СГРУППИРОВАТЬ ПО
	ВТ_БДСПоЗаказам.БДС,
	ВТ_БДСПоЗаказам.ДатаБДС,
	ВТ_БДСПоЗаказам.СуммаБДС,
	ВТ_БДСПоЗаказам.ЗаказКлиента
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_БДСПоЗаказам.БДС КАК БДС,
	ВТ_БДСПоЗаказам.СуммаБДС КАК СуммаБДС,
	ВТ_БДСПоЗаказам.ЗаказКлиента КАК ЗаказКлиента,
	СУММА(ВТ_БДСПоЗаказамКопия.СуммаБДС) КАК СуммаБДСВПрошлом,
	МАКСИМУМ(ВТ_БДСПоЗаказамКопия.ДатаБДС) КАК ПоследняяДатаБДС,
	ВТ_БДСПоЗаказам.ДатаБДС КАК ДатаБДС
ПОМЕСТИТЬ ВТ_СуммаИПоследняяДатаБДС
ИЗ
	ВТ_БДСПоЗаказам КАК ВТ_БДСПоЗаказам
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_БДСПоЗаказам КАК ВТ_БДСПоЗаказамКопия
		ПО ВТ_БДСПоЗаказам.ЗаказКлиента = ВТ_БДСПоЗаказамКопия.ЗаказКлиента
			И ВТ_БДСПоЗаказам.ДатаБДС > ВТ_БДСПоЗаказамКопия.ДатаБДС

СГРУППИРОВАТЬ ПО
	ВТ_БДСПоЗаказам.БДС,
	ВТ_БДСПоЗаказам.СуммаБДС,
	ВТ_БДСПоЗаказам.ЗаказКлиента,
	ВТ_БДСПоЗаказам.ДатаБДС
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_БДСПоЗаказам.БДС КАК БДС,
	ВТ_БДСПоЗаказам.ДатаБДС КАК ДатаБДС,
	ВТ_БДСПоЗаказам.СуммаБДС КАК СуммаБДС,
	ВТ_СуммаИПоследняяДатаБДС.ПоследняяДатаБДС КАК ПоследняяДатаБДС,
	ВТ_СуммаИПоследняяДатаБДС.СуммаБДСВПрошлом КАК СуммаБДСВПрошлом,
	ВТ_СуммаИПоследняяДатаРеализации.ДатаПоследнейРеализации КАК ДатаПосле��нейРеализации,
	ВТ_СуммаИПоследняяДатаРеализации.СуммаРеализацииВПрошлом КАК СуммаРеализацииВПрошлом,
	ВТ_БДСПоЗаказам.ЗаказКлиента КАК ЗаказКлиента,
	РАЗНОСТЬДАТ(ВТ_СуммаИПоследняяДатаРеализации.ДатаПоследнейРеализации, ВТ_БДСПоЗаказам.ДатаБДС, ДЕНЬ) КАК ДнейПослеРеализации,
	ВТ_СуммаИПоследняяДатаРеализации.СуммаРеализацииВПрошлом - ВТ_СуммаИПоследняяДатаБДС.СуммаБДСВПрошлом КАК СуммаНеОплаченнойРеализации
ИЗ
	ВТ_БДСПоЗаказам КАК ВТ_БДСПоЗаказам
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СуммаИПоследняяДатаБДС КАК ВТ_СуммаИПоследняяДатаБДС
		ПО (ВТ_БДСПоЗаказам.БДС = ВТ_СуммаИПоследняяДатаБДС.БДС)
			И (ВТ_БДСПоЗаказам.ЗаказКлиента = ВТ_СуммаИПоследняяДатаБДС.ЗаказКлиента)
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СуммаИПоследняяДатаРеализации КАК ВТ_СуммаИПоследняяДатаРеализации
		ПО (ВТ_БДСПоЗаказам.БДС = ВТ_СуммаИПоследняяДатаРеализации.БДС)
			И (ВТ_БДСПоЗаказам.ЗаказКлиента = ВТ_СуммаИПоследняяДатаРеализации.ЗаказКлиента)

УПОРЯДОЧИТЬ ПО
	ДнейПослеРеализации УБЫВ

Как я уже говорил, основные проблемы для меня возникают из-за соединения таблиц по полям допускающим дубликаты. Поэтому в таблицах их сразу выделяю красным. При взгляде на таблицу сразу видно, что соединение двух таблиц с красными полями, дает результирующую таблицу с красным полем. Это очень удобно сразу видеть по цветам. Стрелки красного цвета показывают какая таблица ЛЕВАЯ в соединениях. Да, рисование занимает время, но очень разгружает мозг от необходимости держать это все в уме. Потому как других способов нет. Комментарии в запрос не вставишь, так как конструктор запроса их удалит. Названия полей в тексте и на визуализации отличаются. Так как запрос в процессе работы. Сразу отвечу для профи 1С-ников. Почему запрос к документам, а не регистрам? Потому что база маленькая и можно себе это позволить. И создавать сложную логику задачи мне так удобнее. Переписать запрос на регистры можно потом, когда это (никогда) потребуется :-)