Артёменко Максим | Директор, ведущий разработчик, архитектор 1С | ООО "Арт Порт"

«Практика создания модульных отраслевых конфигураций на БСП с общими библиотеками методов и метаданных на примере программного комплекса "Арт:Порт"»

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

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

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

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

"
Показать
user618695_ka; +1 Ответить
Оставьте свое сообщение

Вакансии

Программист 1С
Москва
Полный день

Программист 1С
Москва
Полный день

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

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

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