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

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

ulovka22
23.10.2025 13:33В 1С же есть свой конструктор блок-схем, и объектная модель запросов, логично было бы сделать обработку для визуализации
amatoravg
Визуализация прикольная, но я ожидал, что вы предложите какой то инструмент для автоматизации этого процесса, обработку например, куда вставляешь текст запроса, а она тебе на выходе выдаёт такую (географическую?) схему. А так каждый раз вручную рисовать самому - это не наш метод!
Pavel_nobranch Автор
На обработке не заработаешь. А вот кто сделает такой интернет сервис наверное озолотится.
amatoravg
Отчего же не заработаешь... Приделать защиту или хотя бы закрыть код, и выложить на инфостарте...
gennayo
PlantUml прикрутить не сложно...