1. user618695_ka 1 11.01.17 13:05 Сейчас в теме

Простой вопрос по запросам.

Есть документ "ЗаказПокупателя", есть ссылка на этот документ. В документе есть табличная часть "Запасы".

Я хочу обойти запросом эту табличную часть:
				"ВЫБРАТЬ
				|	ЗаказПокупателяЗапасы.Номенклатура КАК Номенклатура1,
				|	ЗаказПокупателяЗапасы.Цена КАК Цена1
				|ИЗ
				|	Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы";


Но мне нужно обойти табличную часть именно этого документа, на который у меня ссылка.
Как это указать в запросе?
Найденные решения
2. antz 11.01.17 13:10 Сейчас в теме
Вчера же обсуждали. Ссылка в табличной части справочника указывает на элемент справочника. С документами - то же самое.

ГДЕ
    ЗаказПокупателяЗапасы.Ссылка = &Ссылка
le0nid; herfis; Ганс; user618695_ka; +4 Ответить
Остальные ответы
Избранное Подписка Сортировка: Древо
2. antz 11.01.17 13:10 Сейчас в теме
Вчера же обсуждали. Ссылка в табличной части справочника указывает на элемент справочника. С документами - то же самое.

ГДЕ
    ЗаказПокупателяЗапасы.Ссылка = &Ссылка
le0nid; herfis; Ганс; user618695_ka; +4 Ответить
3. Frogger1971 11.01.17 13:11 Сейчас в теме
ВЫБРАТЬ
	ЗаказПокупателяТовары.Номенклатура,
	ЗаказПокупателяТовары.Количество
ИЗ
	Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ГДЕ
	ЗаказПокупателяТовары.Ссылка.Ссылка = &Ссылка
4. antz 11.01.17 13:20 Сейчас в теме
(3)
ЗаказПокупателяТовары.Ссылка.Ссылка = &Ссылка


Не надо так)
herfis; Ганс; +2 Ответить
5. Frogger1971 11.01.17 13:24 Сейчас в теме
(4) ЗаказПокупателяТовары.Ссылка
в данном случае это будет ссылка на строку табличной части
6. user667308_icscloud 11.01.17 13:25 Сейчас в теме
(5)
в данном случае это будет ссылка на строку табличной части


Поясните это как?
7. user618695_ka 1 11.01.17 13:27 Сейчас в теме
(5) Я так понял со слов antz Петров (antz) что это ссылка на документ.
8. herfis 264 11.01.17 13:29 Сейчас в теме
(5) Строка табличной части не может иметь ссылки.
9. Frogger1971 11.01.17 13:29 Сейчас в теме
(4) профтыкал - да, не нужно две ссылки
10. user618695_ka 1 11.01.17 13:31 Сейчас в теме
вот(

			Запрос3 = Новый Запрос;
			Запрос3.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи1.Ссылка);
			Запрос3.Текст = 
				"ВЫБРАТЬ
				|	ЗаказПокупателяЗапасы.Номенклатура.Наименование КАК Номенклатура2,
				|	ЗаказПокупателяЗапасы.Сумма КАК Цена2
				|ИЗ
				|	Документ.ЗаказПокупателя.Работы КАК ЗаказПокупателяЗапасы
				|ГДЕ
				|	ЗаказПокупателяЗапасы.Ссылка = &Ссылка";
			
			РезультатЗапроса3 = Запрос3.Выполнить();
			ВыборкаДетальныеЗаписи3 = РезультатЗапроса3.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
				ОбластьМакета.Параметры.Номенклатура = ВыборкаДетальныеЗаписи3.Номенклатура2;
				ОбластьМакета.Параметры.Сумма = ВыборкаДетальныеЗаписи3.Цена2;
				ТабличныйДокумент.Вывести(ОбластьМакета);
				СуммаОбщая = СуммаОбщая + ВыборкаДетальныеЗаписи3.Цена2;
			КонецЦикла
Показать
Прикрепленные файлы:
12. spacecraft 11.01.17 13:34 Сейчас в теме
(10)
Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
ОбластьМакета.Параметры.Номенклатура

Ничего не замечаете?
user618695_ka; +1 Ответить
14. user618695_ka 1 11.01.17 13:36 Сейчас в теме
(12) да, спасибо! Нарукожопил я)
11. user618695_ka 1 11.01.17 13:34 Сейчас в теме
Форма печатная ошибок не выдает, но и строк нет.
Ссылка на документ передалась, в документе строки в табличной части есть, а вот в обходе условие "Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл" не проходит и код не выполняется..
13. antz 11.01.17 13:36 Сейчас в теме
ВыборкаДетальныеЗаписи3 = РезультатЗапроса3.Выбрать();
            
Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл


Ничего не замечаете? :)
корум; user618695_ka; +2 Ответить
15. herfis 264 11.01.17 13:37 Сейчас в теме
Это к вопросу о том, что переменным нужно давать правильные мнемонические названия.
16. user618695_ka 1 11.01.17 13:46 Сейчас в теме
А теперь самое страшное..

Мне нужно было взять документ "Прием и передача в ремонт", найти связанные с ним документы "Заказ-наряды" и обойти их табличные части "Работы" и "Запасы"..

Я как совсем не программист и немножечко рукожоп сделал страшную вещь: запросом нашел ссылки на связанные документы и в обходе результатов, двумя вложенными запросами обошел табличные части (сейчас у antz Петров (antz) снова кровь из глаз пойдет).

		Запрос1 = Новый Запрос;
		Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент);
		Запрос1.Текст = 
			"ВЫБРАТЬ
			|	ЗаказПокупателя.Ссылка КАК Ссылка
			|ИЗ
			|	Документ.ЗаказПокупателя КАК ЗаказПокупателя
			|ГДЕ
			|	ЗаказПокупателя.ДокументОснование.Ссылка = &Ссылка";
		
		РезультатЗапроса1 = Запрос1.Выполнить();	
		ВыборкаДетальныеЗаписи1 = РезультатЗапроса1.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
			
			Запрос2 = Новый Запрос;
			Запрос2.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи1.Ссылка);
			Запрос2.Текст = 
				"ВЫБРАТЬ
				|	ЗаказПокупателяЗапасы.Номенклатура.Наименование КАК Номенклатура1,
				|	ЗаказПокупателяЗапасы.Сумма КАК Цена1
				|ИЗ
				|	Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
				|ГДЕ
				|	ЗаказПокупателяЗапасы.Ссылка = &Ссылка";
			
			РезультатЗапроса2 = Запрос2.Выполнить();
			ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
				ОбластьМакета.Параметры.Номенклатура = ВыборкаДетальныеЗаписи2.Номенклатура1;
				ОбластьМакета.Параметры.Сумма = ВыборкаДетальныеЗаписи2.Цена1;
				ТабличныйДокумент.Вывести(ОбластьМакета);
				СуммаОбщая = СуммаОбщая + ВыборкаДетальныеЗаписи2.Цена1;
			КонецЦикла;
			
			Запрос3 = Новый Запрос;
			Запрос3.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи1.Ссылка);
			Запрос3.Текст = 
				"ВЫБРАТЬ
				|	ЗаказПокупателяЗапасы.Номенклатура.Наименование КАК Номенклатура2,
				|	ЗаказПокупателяЗапасы.Сумма КАК Цена2
				|ИЗ
				|	Документ.ЗаказПокупателя.Работы КАК ЗаказПокупателяЗапасы
				|ГДЕ
				|	ЗаказПокупателяЗапасы.Ссылка = &Ссылка";
			
			РезультатЗапроса3 = Запрос3.Выполнить();
			ВыборкаДетальныеЗаписи3 = РезультатЗапроса3.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи3.Следующий() Цикл
				ОбластьМакета.Параметры.Номенклатура = ВыборкаДетальныеЗаписи3.Номенклатура2;
				ОбластьМакета.Параметры.Сумма = ВыборкаДетальныеЗаписи3.Цена2;
				ТабличныйДокумент.Вывести(ОбластьМакета);
				СуммаОбщая = СуммаОбщая + ВыборкаДетальныеЗаписи3.Цена2;
			КонецЦикла;
				
		КонецЦикла;
Показать


А можете вкрадце рассказать как нужно было?) Можно ли было всё это вместить в один запрос?)
17. herfis 264 11.01.17 14:06 Сейчас в теме
(16) В один можно, но не рационально
У тебя все хорошо, только запросы по табличным частям надо делать не в цикле, а получить сразу все табличные части по всем документам - выгрузить массив ссылок из результата первого запроса и передать его в условия запросов табличных частей. А в цикле только обходить их результаты, выбирая данные табличных частей нужных документов. Как именно обходить - по вкусу:
1) добавить в запросы по табличным частям ИТОГИ по ссылке на документ, тогда выборку можно будет обходить иерархически
2) выгрузить результат запроса в таблицу значений и фильтровать ее по ссылкам на документы (через НайтиСтроки(), например)
antz; user618695_ka; +2 Ответить
18. bad_wag 18 11.01.17 14:16 Сейчас в теме
Можно и в одном

"ВЫБРАТЬ
                |    ЗаказПокупателяЗапасы.Номенклатура.Наименование КАК Номенклатура,
                |    ЗаказПокупателяЗапасы.Сумма КАК Цена
                |ИЗ
                |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
                |ГДЕ
                |    ЗаказПокупателяЗапасы.Ссылка.ДокументОснование = &Ссылка
                |
                |    ОБЪЕДИНИТЬ ВСЕ
                |
                |ВЫБРАТЬ
                |    ЗаказПокупателяРаботы.Номенклатура.Наименование,
                |    ЗаказПокупателяРаботы.Сумма
                |ИЗ
                |    Документ.ЗаказПокупателя.Работы КАК ЗаказПокупателяРаботы
                |ГДЕ
                |    ЗаказПокупателяРаботы.Ссылка.ДокументОснование = &Ссылка"

"
Показать
user618695_ka; +1 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день