Выгружается пустой запрос.

1. user599147_quazar99 20.02.17 06:57 Сейчас в теме
1С Комплексная автоматизация 2.0

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


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

	КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура Маржа(Команда)
	МаржаНаСервере();
КонецПроцедуры
Показать

Как правильно запросить цены продажи из документа основания?
+
По теме из базы знаний
Найденные решения
3. minarenko 20.02.17 07:23 Сейчас в теме
Вот так попробуй, но запрос в цикле не лучшее решение
Для Каждого СтрокиТовары из Объект.Товары Цикл 
		ЗапросЦены=Новый Запрос; 
		ЗапросЦены.УстановитьПараметр("Основание",Объект.ДокументОснование); 
		ЗапросЦены.УстановитьПараметр("Номенклатура",СтрокиТовары.Номенклатура); 
		ЗапросЦены.Текст= "ВЫБРАТЬ 
		|	ЗаказКлиентаТовары.Цена 
		|ИЗ 
		|	Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары 
		|ГДЕ 
		|	ЗаказКлиентаТовары.Ссылка = &Основание 
		|	И ЗаказКлиентаТовары.Номенклатура = &Номенклатура"; 
		ВыборкаЦен=ЗапросЦены.Выполнить().Выбрать(); 
		
		СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена; 
		
	КонецЦикла; 
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. minarenko 20.02.17 07:20 Сейчас в теме
НаименованиеНоменклатура у тебя ссылка и это условие не работает
И ЗаказКлиентаТовары.Номенклатура.Наименование = &Наименование
+
3. minarenko 20.02.17 07:23 Сейчас в теме
Вот так попробуй, но запрос в цикле не лучшее решение
Для Каждого СтрокиТовары из Объект.Товары Цикл 
		ЗапросЦены=Новый Запрос; 
		ЗапросЦены.УстановитьПараметр("Основание",Объект.ДокументОснование); 
		ЗапросЦены.УстановитьПараметр("Номенклатура",СтрокиТовары.Номенклатура); 
		ЗапросЦены.Текст= "ВЫБРАТЬ 
		|	ЗаказКлиентаТовары.Цена 
		|ИЗ 
		|	Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары 
		|ГДЕ 
		|	ЗаказКлиентаТовары.Ссылка = &Основание 
		|	И ЗаказКлиентаТовары.Номенклатура = &Номенклатура"; 
		ВыборкаЦен=ЗапросЦены.Выполнить().Выбрать(); 
		
		СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена; 
		
	КонецЦикла; 
Показать
+
4. ImHunter 315 20.02.17 07:29 Сейчас в теме
Полагаю, кодом
СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена;

вы предполагаете обратиться к первой строке таблицы значений? Тогда и нужно использовать соответствующий метод для получения данных из результата запроса.
ВыборкаЦен=ЗапросЦены.Выполнить().Выгрузить(); // вместо Выбрать(...) используйте Выгрузить(...)
 

Но это так, цветочки. Ягодки в том, что вы генерите несколько запросов согласно кол-ву строк в ТЧ. И для сопоставления используете ненадежные данные - например, ищете по номеру документа. А если номер - периодический и будет куча документов с таким номером?...
+
5. user599147_quazar99 20.02.17 07:41 Сейчас в теме
Спасибо, помогло.
Я понимаю что запрос в цикле не лучшее решение, но других вариантов я пока не знаю ((.
Как бы Вы реализовали данную задачу?
+
6. minarenko 20.02.17 07:47 Сейчас в теме
Конфигурацию такую я незнаю, но
Открой процедуру ОбработкаЗаполнения документа ЗаказПоставщику, там наверняка уже есть цикл подобный
Для Каждого ТекСтрока Из ДанныеЗаполнения.Товары Цикл
			НоваяСтрока = Товары.Добавить();
			НоваяСтрока.Количество = ТекСтрока .Количество;
			НоваяСтрока.Номенклатура = ТекСтрока .Номенклатура;
			.........
КонецЦикла;


Добавь туда
НоваяСтрока.Цена = ТекСтрока .Цена;
+
7. minarenko 20.02.17 07:48 Сейчас в теме
Или тебе это надо делать в уже созданных документах?
+
8. Pralva 86 20.02.17 07:58 Сейчас в теме
ВыборкаЦен.Следующий() пропущено

ВыборкаЦен.Следующий();
......= ВыборкаЦен.Цена;
+
9. user_gea 20.02.17 08:19 Сейчас в теме
Запрос в цикле делать НЕЛЬЗЯ!!! Это нагружает систему! А если 1000 строк в документе?Нужно попробовать альтернативное решение одним запросом. Выбираете из заказа покупателя номенклатуру и цену, помещаете в виртуальную таблицу, далее из текущего документа номенклатуру, устанавливаете связь по ней, необходимые условия. В итоговую таблицу номенклатура из заказа поставщика, цены из заказа покупателя. Далее выборку подгружаете в необходимое место. Думаю как-то так, и все должно получиться
+
10. PhoenixAOD 62 20.02.17 08:40 Сейчас в теме
А что мешает, выгрузить номенклатуру в список и в условии сделать
ЗаказКлиентаТовары.Номенклатура в (спНоменклатура)"
зачем в цикл все загонять
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот