1. user973528 10.06.19 16:29 Сейчас в теме

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

Здравствуйте, написал цикл по заполнению макета

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

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

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

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

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


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

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

Иначе
А = 0

КонецЕсли;
4. alex-l19041 9 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 19 10.06.19 16:51 Сейчас в теме
Ну начнем с того что не стоит делать запрос в цикле, если заранее известна вся номенклатура то можно передать таблицу с ней в запрос до цикла и дополнить вашу таблицу ценами.
Второе если цена "Неопределенно" значит у вас запрос возвращает 0 значений. И Возврат А дает пустое.
А = ТЗ.Итог("Цена"); вот эта строчка не нужна достаточно будет А = ТЗ.Цена
Ну и нужно смотреть какие параметры идут в запрос тогда будет ясно почему он не выполняется.
| И ПоступлениеТоваров.Проведен = &Истина вот эту строчку лучше заменить на
| И ПоступлениеТоваров.Проведен
Будет тоже самое только красиво.
alex-l19041; +1 Ответить
7. alex-l19041 9 10.06.19 16:54 Сейчас в теме
(6) поправочка
достаточно будет А = ТЗ[0].Цена
18. Isa816 19 10.06.19 17:05 Сейчас в теме
(7) Можно и так :) Но всё равно на количество надо ТЗ проверять. Я вот до сих пор не вкурсе что быстрей, обращение по индексу в тз с одной строкой или прохождение её циклом.
9. user973528 10.06.19 16:56 Сейчас в теме
(6) В консоле запросов этот же запрос выполняется, я проверил.
10. alex-l19041 9 10.06.19 16:59 Сейчас в теме
(9) проверили установку параметра запроса "Дата" ?
11. user973528 10.06.19 17:00 Сейчас в теме
(10) Да, эту же дату в консоль засунул, там работает
12. alex-l19041 9 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 9 10.06.19 17:04 Сейчас в теме
(15) надо проверить тип СтрТЗ.Номенклатура (может там строка, а не ссылка )
19. user973528 10.06.19 17:06 Сейчас в теме
(16) Да, в этом оказалась проблема

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

Вакансии

Программист 1С
Бобров
зарплата от 100 000 руб. до 150 000 руб.
Временный (на проект)

Студент (стажер) 1С
Нижний Новгород
зарплата от 25 000 руб.
Полный день

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

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

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