Запрос: Получение узлового заказа покупателя из структуры подчиненности документов (УТ 10.3)

29.03.17

Разработка - Запросы

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

Задача возникла из потребности получить в отчете "Ведомость товаров на складах" графу "Заказ покупателя" по которому происходили движения товаров по регистру "ТоварыНаСкладах", в котором при сложной структуре документов невозможно напрямую вытащить Заказ из регистратора. В итоге задача была решена другим способом, но сам запрос мне показался интересным для публики.

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

Вторым этапом путем последовательного(ступенчатого) соединениея журнала с самим собой вытаскивается узловой заказ.

В моем оказалось достаточно 3х уровневого соединения. Если у вас структура документов имеет больше уровней группировок, просто добавьте новое соединение.

Сам запрос собственно. Также показано, как подцепить полученный журнал к регистру.

Запрос опробован и полностью подходит для встраивания в СКД.

ВЫБРАТЬ
	ПТУ.Ссылка КАК Ссылка,
	ПТУ.Сделка КАК ПервоеОснование
ПОМЕСТИТЬ ПервыеОснования
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПТУ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	РТУ.Ссылка,
	РТУ.Сделка
ИЗ
	Документ.РеализацияТоваровУслуг КАК РТУ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВПок.Ссылка,
	ВПок.Сделка
ИЗ
	Документ.ВозвратТоваровОтПокупателя КАК ВПок

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	СТ.Ссылка,
	СТ.Претензия
ИЗ
	Документ.СписаниеТоваров КАК СТ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ОТов.Ссылка,
	""
ИЗ
	Документ.ОприходованиеТоваров КАК ОТов

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТПост.Ссылка,
	ВТПост.Сделка
ИЗ
	Документ.ВозвратТоваровПоставщику КАК ВТПост

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	РТО.Ссылка,
	РТО.ДокументПеремещения
ИЗ
	Документ.РасходныйОрдерНаТовары КАК РТО

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПТО.Ссылка,
	ПТО.ДокументПеремещения
ИЗ
	Документ.ПриходныйОрдерНаТовары КАК ПТО

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Перемещение.Ссылка,
	Перемещение.ВнутреннийЗаказ
ИЗ
	Документ.ПеремещениеТоваров КАК Перемещение

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВЗак.Ссылка,
	ВЗак.ДокументОснование
ИЗ
	Документ.ВнутреннийЗаказ КАК ВЗак

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ПервыеОснования.Ссылка,
	ПервыеОснования.ПервоеОснование,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПервыеОснования.ПервоеОснование) = ТИП(Документ.ЗаказПокупателя)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ЭтоЗаказ
ПОМЕСТИТЬ ПолныйЖурнал
ИЗ
	ПервыеОснования КАК ПервыеОснования
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ПолныйЖурнал.Ссылка,
	ВЫБОР
		КОГДА ПолныйЖурнал.ЭтоЗаказ
			ТОГДА ПолныйЖурнал.ПервоеОснование
		ИНАЧЕ ВЫБОР
				КОГДА ПолныйЖурналОснований.ЭтоЗаказ
					ТОГДА ПолныйЖурналОснований.ПервоеОснование
				ИНАЧЕ ВЫБОР
						КОГДА ПолныйЖурналОснований2.ЭтоЗаказ
							ТОГДА ПолныйЖурналОснований2.ПервоеОснование
						ИНАЧЕ NULL
					КОНЕЦ
			КОНЕЦ
	КОНЕЦ КАК ЗаказПокупателя
ПОМЕСТИТЬ ЖурналДокументов
ИЗ
	ПолныйЖурнал КАК ПолныйЖурнал
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований
		ПО ПолныйЖурнал.ПервоеОснование = ПолныйЖурналОснований.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований2
		ПО (ПолныйЖурналОснований.ПервоеОснование = ПолныйЖурналОснований2.Ссылка)
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований3
		ПО (ПолныйЖурналОснований2.ПервоеОснование = ПолныйЖурналОснований3.Ссылка)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЖурналДокументов.Ссылка,
	МАКСИМУМ(ЕСТЬNULL(ЖурналДокументов.ЗаказПокупателя, 0)) КАК ЗаказПокупателя
ПОМЕСТИТЬ Заказы
ИЗ
	ЖурналДокументов КАК ЖурналДокументов

СГРУППИРОВАТЬ ПО
	ЖурналДокументов.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ТоварыНаСкладах.Склад,
	Заказы.ЗаказПокупателя КАК Заказ,
	ТоварыНаСкладах.Регистратор,
	ТоварыНаСкладах.Номенклатура,
	ТоварыНаСкладах.КоличествоНачальныйОстаток КАК НачальныйОстаток,
	ТоварыНаСкладах.КоличествоПриход КАК Приход,
	ТоварыНаСкладах.КоличествоРасход КАК Расход,
	ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КонечныйОстаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ТоварыНаСкладах
		ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказы
		ПО (Заказы.Ссылка = ТоварыНаСкладах.Регистратор)

Вступайте в нашу телеграмм-группу Инфостарт

Запрос

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    278002    1564    423    

1205

Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.

2 стартмани

06.07.2026    4420    59    XSlava    20    

46

Запросы Разработчик 1С 8.3 Россия Бесплатно (free)

Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.

26.06.2026    9991    Alex_YAM    7    

33

WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    3841    94    priem_nv    27    

66

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    13066    163    zup_dev    32    

86

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    7390    25    XilDen    12    

29

Обновление 1С Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

3 стартмани

06.02.2025    6625    39    XilDen    26    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dmitrichenko.ivan 6 29.03.17 14:22 Сейчас в теме
В запросе выбираются все документы?
2. KazanKokos 11 29.03.17 14:33 Сейчас в теме
(1) какие объедините в верхней времтаблице такие и будут. причем если из документа две ссылки вверх (допустим документоснование и заказпокупателя) то его туда надо два раза включать меняя второе поле. Выборка на удивление быстро происходит(у меня база очень большая). секунда две
3. slawa 26 30.03.17 14:59 Сейчас в теме
(0) Почему не используете критерии отбора?
4. KazanKokos 11 30.03.17 15:31 Сейчас в теме
(3) а какая разница? Запрос по всему журналу документов(довольно массивному) за секунду проходит. И критерии отбора не отменяют поиск по всем группировка структуры подчиненности вверх. Да и через критерии обмена это не нужно оказалось. Выложил просто как фишку работы с запросом
5. German_Tagil 43 06.04.17 09:10 Сейчас в теме
(4)Поставил ЗаказПоставщику вместо ЗаказПокупателя и как-то не понятно - отбор по заказпоставщику нормальный за период не удалось сделать
те мысль была приспособить данный запрос для отбора по ЗаказПоставщику
6. KazanKokos 11 06.04.17 11:09 Сейчас в теме
(5)
Тут меняете:
КОГДА ТИПЗНАЧЕНИЯ(ПервыеОснования.ПервоеОснование) = ТИП(Документ.ЗаказПокупателя)


тут псевдоним надо поменять:
1.
К
ОГДА ПолныйЖурналОснований2.ЭтоЗаказ
							ТОГДА ПолныйЖурналОснований2.ПервоеОснование
						ИНАЧЕ NULL
					КОНЕЦ
			КОНЕЦ
	КОНЕЦ КАК ЗаказПокупателя

2.
МАКСИМУМ(ЕСТЬNULL(ЖурналДокументов.ЗаказПокупателя, 0)) КАК ЗаказПокупателя

3.
 Заказы.ЗаказПокупателя КАК Заказ 



в принципе должно взлететь.
При этом:
1. В первой временной таблице указать(дообъединить) все поля из которых по цепочке можно вытащить основание.
2. Поиск по этим полям идет вверх по узлам. И если ЗаказПоставщику какого-то регистратора находится в параллельной ветке. То его не вытащить. Можно в принципе подумать как переделать запрос чтобы он вытаскивал от любой ветки всю структуру подчиненности в виде дерева а не только шел последовательно от узла к узлу вверх.

3. Ну и если вы идете конкретно по регистрам данных поставщиков то в любом случае должны до ЗПоставщику дойти
7. KazanKokos 11 06.04.17 11:10 Сейчас в теме
(5)

киньте запрос посмотрю. и какая конфа?
8. German_Tagil 43 06.04.17 14:22 Сейчас в теме
запрос счас скину конфа КА 1.1
9. German_Tagil 43 06.04.17 14:24 Сейчас в теме
ВЫБРАТЬ
	ПТУ.Ссылка КАК Ссылка,
	ПТУ.Сделка КАК ПервоеОснование
ПОМЕСТИТЬ ПервыеОснования
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПТУ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	РТУ.Ссылка,
	РТУ.Сделка
ИЗ
	Документ.РеализацияТоваровУслуг КАК РТУ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВПок.Ссылка,
	ВПок.Сделка
ИЗ
	Документ.ВозвратТоваровОтПокупателя КАК ВПок

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ОТов.Ссылка,
	""
ИЗ
	Документ.ОприходованиеТоваров КАК ОТов

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТПост.Ссылка,
	ВТПост.Сделка
ИЗ
	Документ.ВозвратТоваровПоставщику КАК ВТПост

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПТО.Ссылка,
	ПТО.ДокументПеремещения
ИЗ
	Документ.ПриходныйОрдерНаТовары КАК ПТО

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Перемещение.Ссылка,
	Перемещение.ВнутреннийЗаказ
ИЗ
	Документ.ПеремещениеТоваров КАК Перемещение

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВЗак.Ссылка,
	ВЗак.ДокументОснование
ИЗ
	Документ.ВнутреннийЗаказ КАК ВЗак
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПервыеОснования.Ссылка,
	ПервыеОснования.ПервоеОснование,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПервыеОснования.ПервоеОснование) = ТИП(Документ.ЗаказПоставщику)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ЭтоЗаказ
ПОМЕСТИТЬ ПолныйЖурнал
ИЗ
	ПервыеОснования КАК ПервыеОснования
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПолныйЖурнал.Ссылка,
	ВЫБОР
		КОГДА ПолныйЖурнал.ЭтоЗаказ
			ТОГДА ПолныйЖурнал.ПервоеОснование
		ИНАЧЕ ВЫБОР
				КОГДА ПолныйЖурналОснований.ЭтоЗаказ
					ТОГДА ПолныйЖурналОснований.ПервоеОснование
				ИНАЧЕ ВЫБОР
						КОГДА ПолныйЖурналОснований2.ЭтоЗаказ
							ТОГДА ПолныйЖурналОснований2.ПервоеОснование
						ИНАЧЕ NULL
					КОНЕЦ
			КОНЕЦ
	КОНЕЦ КАК ЗаказПоставщику
ПОМЕСТИТЬ ЖурналДокументов
ИЗ
	ПолныйЖурнал КАК ПолныйЖурнал
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований
		ПО ПолныйЖурнал.ПервоеОснование = ПолныйЖурналОснований.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований2
		ПО (ПолныйЖурналОснований.ПервоеОснование = ПолныйЖурналОснований2.Ссылка)
		ЛЕВОЕ СОЕДИНЕНИЕ ПолныйЖурнал КАК ПолныйЖурналОснований3
		ПО (ПолныйЖурналОснований2.ПервоеОснование = ПолныйЖурналОснований3.Ссылка)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЖурналДокументов.Ссылка,
	МАКСИМУМ(ЕСТЬNULL(ЖурналДокументов.ЗаказПоставщику, 0)) КАК ЗаказПоставщику
ПОМЕСТИТЬ Заказы
ИЗ
	ЖурналДокументов КАК ЖурналДокументов

СГРУППИРОВАТЬ ПО
	ЖурналДокументов.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладах.Склад,
	Заказы.ЗаказПоставщику КАК Заказ,
	ТоварыНаСкладах.Регистратор,
	ТоварыНаСкладах.Номенклатура,
	ТоварыНаСкладах.КоличествоНачальныйОстаток КАК НачальныйОстаток,
	ТоварыНаСкладах.КоличествоПриход КАК Приход,
	ТоварыНаСкладах.КоличествоРасход КАК Расход,
	ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КонечныйОстаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ТоварыНаСкладах
		ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказы
		ПО (Заказы.Ссылка = ТоварыНаСкладах.Регистратор)
ГДЕ
	НЕ Заказы.Ссылка Есть NULL
Показать
10. KazanKokos 11 06.04.17 14:47 Сейчас в теме
Не получится. Вам по любому тогда надо переходить на соседнюю ветку. это надо запрос переделывать. У вас заказ поставщику всплывет только на приходных операциях когда от него есть прямая ссылка от ПТУ. Надо переделать запрос так:
Оставить запрос темы как есть и вытаскивать корневой ЗаказПокупателя. Потом делать выборку заказов поставщику(без периодов) и такимже запросом вытаскивать Заказ покупателя(если конечно заказпоставщику у вас в структуре) и по нему уже вязать соединением две временные таблицы.
11. KazanKokos 11 06.04.17 14:50 Сейчас в теме
ну и часто заказпоставщику содержит в себе ссылки на заказпокупателя по которому делается заказ(в типов в тч Товары, либо часто сами привязывают в Заказупокупателя)и вытаскивать этот заказ и понему вязать
12. German_Tagil 43 24.05.18 20:37 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация