Подскажите пожалуйста, не передаётся параметр в цикл

1. user973528 10.06.19 16:29 Сейчас в теме
Здравствуйте, написал цикл по заполнению макета

Получил Номенклатуру, передал её параметр в запрос для получения последней закупочной цены для этой номенклатуры, но на выходе получаю "Неопределено".

В консоле запросов проверил, запрос отрабатывается

Что делаю не так? Заранее спасибо

Для Каждого СтрТЗ Из ТЗ Цикл
			
		ОбластьМакета.Параметры.Номер 	= Номер;
		ОбластьМакета.Параметры.Номенклатура 	= СтрТЗ.Номенклатура;
		ОбластьМакета.Параметры.Объем 			= СтрТЗ.Объем * 10;
		ОбластьМакета.Параметры.Кол_во 			= СтрТЗ.Количество;
		ОбластьМакета.Параметры.СуммаПродажи 	= СтрТЗ.Цена;
		Парам 									= СтрТЗ.Номенклатура;
		А  										= ПолучитьСебестоимостьТовара(Парам);
		ОбластьМакета.Параметры.Себестоимость 	= А;
		ОбластьМакета.Параметры.СуммаПрод 		= Формат(СтрТЗ.Сумма,"ЧЦ=12; ЧДЦ=2");

		Номер 							= Номер + 1;
		
		ТабличныйДокумент.Вывести(ОбластьМакета);		
		
		КонецЦикла;
Показать


Функция ПолучитьСебестоимостьТовара(Парам);
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
	               |	ПоступлениеТоваровТовары.Цена КАК Цена
	               |ИЗ
	               |	Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
	               |		ПО ПоступлениеТоваровТовары.Ссылка = ПоступлениеТоваров.Ссылка
	               |ГДЕ
	               |	ПоступлениеТоваровТовары.Номенклатура = &Номенклатура
	               |	И ПоступлениеТоваров.Проведен = &Истина
	               |	И ПоступлениеТоваров.Дата <= &Дата
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ПоступлениеТоваров.Дата УБЫВ";
	
	
	Запрос.УстановитьПараметр("Номенклатура",Парам);
	Запрос.УстановитьПараметр("Истина",Истина);
	Запрос.УстановитьПараметр("Дата",НачалоДня(Объект.Дата));
	
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	Если ТЗ.Количество() > 0 Тогда
		
		А = ТЗ.Итог("Цена");
		
	КонецЕсли;
	
	Возврат А;
				
КонецФункции;
Показать
Найденные решения
16. alex-l19041 8 10.06.19 17:04 Сейчас в теме
(15) надо проверить тип СтрТЗ.Номенклатура (может там строка, а не ссылка )
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 10.06.19 16:43 Сейчас в теме
(1)
Запрос.УстановитьПараметр("Дата",НачалоДня(Объект.Дата));
- надо проверить что передается
3. alex-l19041 8 10.06.19 16:44 Сейчас в теме
(1) чтобы не возвращалось Неопределено
Если ТЗ.Количество() > 0 Тогда

А = ТЗ.Итог("Цена");

Иначе
А = 0

КонецЕсли;
4. alex-l19041 8 10.06.19 16:47 Сейчас в теме
(1) можете объяснить зачем Итог ?
А = ТЗ.Итог("Цена")
5. user973528 10.06.19 16:50 Сейчас в теме
(4) Переменная А возвращается как "Неопределено"
в "Парам" передаётся номенклатура как и нужно
8. spacecraft 10.06.19 16:56 Сейчас в теме
(1) Зачем делать выгрузку в ТЗ при ВЫБРАТЬ ПЕРВЫЕ 1 ?
Проще:
Функция ПолучитьСебестоимостьТовара(Номенклатура);
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    ПоступлениеТоваровТовары.Цена КАК Цена
                   |ИЗ
                   |    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
                   |        ПО ПоступлениеТоваровТовары.Ссылка = ПоступлениеТоваров.Ссылка
                   |ГДЕ
                   |    ПоступлениеТоваровТовары.Номенклатура = &Номенклатура
                   |    И ПоступлениеТоваров.Проведен
                   |    И ПоступлениеТоваров.Дата <= &Дата
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ПоступлениеТоваров.Дата УБЫВ";
    
    
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Дата",НачалоДня(Объект.Дата));
    
    РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат 0;
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Возврат Выборка.Цена;
    КонецЕсли;
                
КонецФункции;
Показать
alex-l19041; +1 Ответить
6. Isa816 64 10.06.19 16:51 Сейчас в теме
Ну начнем с того что не стоит делать запрос в цикле, если заранее известна вся номенклатура то можно передать таблицу с ней в запрос до цикла и дополнить вашу таблицу ценами.
Второе если цена "Неопределенно" значит у вас запрос возвращает 0 значений. И Возврат А дает пустое.
А = ТЗ.Итог("Цена"); вот эта строчка не нужна достаточно будет А = ТЗ.Цена
Ну и нужно смотреть какие параметры идут в запрос тогда будет ясно почему он не выполняется.
| И ПоступлениеТоваров.Проведен = &Истина вот эту строчку лучше заменить на
| И ПоступлениеТоваров.Проведен
Будет тоже самое только красиво.
alex-l19041; +1 Ответить
7. alex-l19041 8 10.06.19 16:54 Сейчас в теме
(6) поправочка
достаточно будет А = ТЗ[0].Цена
18. Isa816 64 10.06.19 17:05 Сейчас в теме
(7) Можно и так :) Но всё равно на количество надо ТЗ проверять. Я вот до сих пор не вкурсе что быстрей, обращение по индексу в тз с одной строкой или прохождение её циклом.
9. user973528 10.06.19 16:56 Сейчас в теме
(6) В консоле запросов этот же запрос выполняется, я проверил.
10. alex-l19041 8 10.06.19 16:59 Сейчас в теме
(9) проверили установку параметра запроса "Дата" ?
11. user973528 10.06.19 17:00 Сейчас в теме
(10) Да, эту же дату в консоль засунул, там работает
12. alex-l19041 8 10.06.19 17:00 Сейчас в теме
(11) не в консоли! в коде надо проверить
13. user973528 10.06.19 17:01 Сейчас в теме
(12) В коде через Сообщить, показывает дату тоже
14. spacecraft 10.06.19 17:02 Сейчас в теме
(13) а Номенклатуру какую показывает?
15. user973528 10.06.19 17:03 Сейчас в теме
(14) Номенклатура тоже через Сообщить в параметрах встаёт, не пойму почему возвращает то неопределенное значение
16. alex-l19041 8 10.06.19 17:04 Сейчас в теме
(15) надо проверить тип СтрТЗ.Номенклатура (может там строка, а не ссылка )
19. user973528 10.06.19 17:06 Сейчас в теме
(16) Да, в этом оказалась проблема

В прошлом запросе указал "Номенклатура.Наименование КАК Номенклатура"
17. spacecraft 10.06.19 17:04 Сейчас в теме
(15) неопределено возвращает, потому что запрос пустой.
Указываете Установка по ошибке и смотрите что передается.
Оставьте свое сообщение

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