Получение Цены на дату документа

1. user1226970 17.08.19 11:23 Сейчас в теме
Ребята,помогите!Мне надо чтобы в расходной накладной при при выборе товара подставлялась цена продажи,актуальная на дату документа.История значений цены храниться в РС История значения цен.
Что то у меня не получается ее вытащить,подставляется какая попало(((
Помогите ,пожалуйста,туплю.не могу понять где не правильно.(((



ВЫБРАТЬ
	ПриходнаяНакладнаяТовары.Ссылка КАК Документ,
	ПриходнаяНакладнаяТовары.Номенклатура,
	Максимум(ИсторияЗначенияЦен.Период) КАК Период
ПОМЕСТИТЬ ВТ
ИЗ
	Документ.ПриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен
		ПО ПриходнаяНакладнаяТовары.Номенклатура = ИсторияЗначенияЦен.Номенклатура
			И ПриходнаяНакладнаяТовары.ЦенаПродажи = ИсторияЗначенияЦен.Цена
			И ПриходнаяНакладнаяТовары.Ссылка.Дата >= ИсторияЗначенияЦен.Период

СГРУППИРОВАТЬ ПО
	ПриходнаяНакладнаяТовары.Ссылка,
	ПриходнаяНакладнаяТовары.Номенклатура,
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Документ,
	ВТ.Номенклатура,
	ВТ.Период,
	ИсторияЗначенияЦен.Цена
ИЗ
	ВТ КАК ВТ
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен
		ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура
			И ВТ.Период = ИсторияЗначенияЦен.Период
Показать
По теме из базы знаний
Найденные решения
26. independ 1520 17.08.19 18:55 Сейчас в теме
(23) рекомендую изменить директиву на &НаСервереБезКонтекста и передавать дату как параметр

&НаСервереБезКонтекста
Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)
......
    Запрос.УстановитьПараметр("Период",Дата);
......    
КонецФункции
user1226970; +1 Ответить
29. independ 1520 17.08.19 20:26 Сейчас в теме
(27)
Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура,Объект.Дата);
user1226970; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SaschaL 17.08.19 12:44 Сейчас в теме
Добрый день. вам нужны именно цены которые были назначены документами?
Срез последних не проще сделать?
3. user1226970 17.08.19 13:22 Сейчас в теме
Мне не нужна цена последняя,а нужна цена которая в регистре ближе всего к дате документа.
Например
Приход 1.01 цена 100р
5.01-120р
Расходная 2.01 -цена должна подставляться 100р.
Я тоже сначала пробовала со СрезомПоследних,но как тогда в параметр Период передать дату документа?
4. coollerinc 188 17.08.19 15:43 Сейчас в теме
(3)В чем сложность передать в срез последних дату документа? Вообще то так всегда и получается цена. В запросы параметры умеете подставлять?
5. user1226970 17.08.19 17:02 Сейчас в теме
6. user1226970 17.08.19 17:07 Сейчас в теме
ВЫБРАТЬ
	ИсторияЗначенияЦенСрезПоследних.Период КАК Период,
	ИсторияЗначенияЦенСрезПоследних.Номенклатура КАК Номенклатура,
	ИсторияЗначенияЦенСрезПоследних.Цена КАК Цена
ИЗ
	РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних



я сначала сделала так

В параметры передаю Номенклатуру

Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Период", ??)-а тут что?
7. coollerinc 188 17.08.19 17:09 Сейчас в теме
если управляемая форма документа тогда Запрос.УстановитьПараметр("Период", Объект.Дата)
8. user1226970 17.08.19 17:10 Сейчас в теме
(7)Я так пыталась,выводит ошибку!
9. coollerinc 188 17.08.19 17:11 Сейчас в теме
10. user1226970 17.08.19 17:14 Сейчас в теме
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(27,37)}: Переменная не определена (Объект)
Запрос.УстановитьПараметр("Период",<<?>>Объект.Дата); (Проверка: Сервер)
13. independ 1520 17.08.19 17:31 Сейчас в теме
(10) код процедуры? Директива какая &НаСервере или &НаСервереБезКонтекста
15. user1226970 17.08.19 17:35 Сейчас в теме
(13) Это СоСрезом
ВЫБРАТЬ 
ИсторияЗначенияЦенСрезПоследних.Период КАК Период, 
ИсторияЗначенияЦенСрезПоследних.Номенклатура КАК Номенклатура, 
ИсторияЗначенияЦенСрезПоследних.Цена КАК Цена 
ИЗ 
РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних 



я сначала сделала так 

В параметры передаю Номенклатуру 

Запрос.УстановитьПараметр("Номенклатура",Номенклатура); 
Запрос.УстановитьПараметр("Период", ??)-а тут что?



//////////////////////////////////////////////
Это с ФизТаблицами
ВЫБРАТЬ 
ПриходнаяНакладнаяТовары.Ссылка КАК Документ, 
ПриходнаяНакладнаяТовары.Номенклатура, 
Максимум(ИсторияЗначенияЦен.Период) КАК Период 
ПОМЕСТИТЬ ВТ 
ИЗ 
Документ.ПриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары 
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен 
ПО ПриходнаяНакладнаяТовары.Номенклатура = ИсторияЗначенияЦен.Номенклатура 
И ПриходнаяНакладнаяТовары.ЦенаПродажи = ИсторияЗначенияЦен.Цена 
И ПриходнаяНакладнаяТовары.Ссылка.Дата >= ИсторияЗначенияЦен.Период 

СГРУППИРОВАТЬ ПО 
ПриходнаяНакладнаяТовары.Ссылка, 
ПриходнаяНакладнаяТовары.Номенклатура, 
; 

////////////////////////////////////////////////////////////­­//////////////////// 
ВЫБРАТЬ 
ВТ.Документ, 
ВТ.Номенклатура, 
ВТ.Период, 
ИсторияЗначенияЦен.Цена 
ИЗ 
ВТ КАК ВТ 
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен 
ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура 
И ВТ.Период = ИсторияЗначенияЦен.Период
Показать
16. independ 1520 17.08.19 17:38 Сейчас в теме
(15) если нетрудно, оформите код вот так
ВЫБРАТЬ 
ВТ.Документ, 
ВТ.Номенклатура, 
ВТ.Период, 
ИсторияЗначенияЦен.Цена 
ИЗ 
ВТ КАК ВТ 
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен 
ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура 
И ВТ.Период = ИсторияЗначенияЦен.Период
Показать

так удобней читать
11. coollerinc 188 17.08.19 17:21 Сейчас в теме
Управляемая форма или обычная? Если обычные формы то: Запрос.УстановитьПараметр("Период", Дата);

Если документ новый, то дата пустая. Используйте Текущаядата()
12. user1226970 17.08.19 17:26 Сейчас в теме
(11)Управляемая форма.Если выбрать ТекущаяДата(),то он будет брать сумму даты последнего документа,а мне то надо не последнего документа,а мне надо сумму которая,"ближе " к дате документа.


Например
Приход 1.01 цена 100р
5.01-120р
Расходная 2.01 -цена должна подставляться 100р.
14. user1226970 17.08.19 17:33 Сейчас в теме
17. independ 1520 17.08.19 17:38 Сейчас в теме
Проверьте в отладчике, доступен ли переменная Объект?
18. coollerinc 188 17.08.19 17:39 Сейчас в теме
Или Отправьте скриншот с реквизитами формы
19. user1226970 17.08.19 17:47 Сейчас в теме
СкринФормы
Прикрепленные файлы:
20. coollerinc 188 17.08.19 17:48 Сейчас в теме
21. user1226970 17.08.19 17:55 Сейчас в теме
Пардон за фото,принскрин не работает)))
Прикрепленные файлы:
22. coollerinc 188 17.08.19 18:05 Сейчас в теме
Если вы в модуле формы этого документа и процедура с директивой на &НаСервере то Объект.Дата - должно работать. Либо вы что то не договариваете. Выложите код этой формы. Только оформите его с помощью специальной кнопки "Вставка кода"
24. user1226970 17.08.19 18:50 Сейчас в теме
(22)Этот код,или еще что то скинуть?
23. user1226970 17.08.19 18:19 Сейчас в теме
&НаСервере
Функция ПолучитьЦенуНоменклатуры(Номенклатура)
	  	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ИсторияЗначенияЦенСрезПоследних.Период,
		|	ИсторияЗначенияЦенСрезПоследних.Номенклатура,
		|	ИсторияЗначенияЦенСрезПоследних.Цена
		|ИЗ
		|	РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних";
	
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	Запрос.УстановитьПараметр("Период",Объект.Дата);
	  РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();

	Пока Выборка.Следующий() Цикл
		АктуальнаяЦена=Выборка.Цена;
	КонецЦикла;
	
	
	Возврат АктуальнаяЦена;
	
КонецФункции
Показать
26. independ 1520 17.08.19 18:55 Сейчас в теме
(23) рекомендую изменить директиву на &НаСервереБезКонтекста и передавать дату как параметр

&НаСервереБезКонтекста
Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)
......
    Запрос.УстановитьПараметр("Период",Дата);
......    
КонецФункции
user1226970; +1 Ответить
28. user1226970 17.08.19 19:05 Сейчас в теме
(26) Не выходит...

Что тогда передавать сюда?
&НаСервереБезКонтекста
Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)
	  	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ИсторияЗначенияЦенСрезПоследних.Период,
		|	ИсторияЗначенияЦенСрезПоследних.Номенклатура,
		|	ИсторияЗначенияЦенСрезПоследних.Цена
		|ИЗ
		|	РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних";
	
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	Запрос.УстановитьПараметр("Период",Дата);
	  РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();

	Пока Выборка.Следующий() Цикл
		АктуальнаяЦена=Выборка.Цена;
	КонецЦикла;
	
	
	Возврат АктуальнаяЦена;
	
КонецФункции

&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
	
	Стр = Элементы.Товары.ТекущиеДанные;
	Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура,    <<?>>    Дата);
	КоличествоПриИзменении(Элемент);
	
КонецПроцедуры
Показать
25. coollerinc 188 17.08.19 18:54 Сейчас в теме
Кидайте весь модуль формы
27. user1226970 17.08.19 19:01 Сейчас в теме
(25)
&НаКлиенте
Процедура КоличествоПриИзменении(Элемент)
	
	Стр = Элементы.Товары.ТекущиеДанные;
	Стр.Сумма = Стр.Количество * Стр.Цена;
	Объект.СуммаДокумента=Объект.Товары.Итог("Сумма")+Объект.Услуги.Итог("Сумма");
	
КонецПроцедуры

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

	Пока Выборка.Следующий() Цикл
		АктуальнаяЦена=Выборка.Цена;
	КонецЦикла;
	
	
	Возврат АктуальнаяЦена;
	
КонецФункции

&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
	
	Стр = Элементы.Товары.ТекущиеДанные;
	Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура);      ///Что здесь тогда?
	КоличествоПриИзменении(Элемент);
	
КонецПроцедуры
Показать



Остальной код уже не про Цену...
29. independ 1520 17.08.19 20:26 Сейчас в теме
(27)
Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура,Объект.Дата);
user1226970; +1 Ответить
30. user1226970 17.08.19 20:32 Сейчас в теме
(29)Так тоже не работает(((
31. independ 1520 17.08.19 20:37 Сейчас в теме
(30) а что именно не работает?
user1226970; +1 Ответить
32. user1226970 17.08.19 20:49 Сейчас в теме
(31)Дмитрий!!!Спасибо!Все получилось!!!))))Рада,как слон!!!
33. user1136877 18.08.22 00:35 Сейчас в теме
Только учусь
Для Торговли
передаем в функцию товар, вид цены и дату документа

&НаСервере
Функция ОпределитьЦенуНаДату(Товар,ВЦены,Период)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЦеныНоменклатуры25.Период КАК Период,
| ЦеныНоменклатуры25.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры25 КАК ЦеныНоменклатуры25
|ГДЕ
| ЦеныНоменклатуры25.Период <= &Период
| И ЦеныНоменклатуры25.Номенклатура.Ссылка = &Товар
| И ЦеныНоменклатуры25.ВидЦены.Ссылка = &ВЦены
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ";

Запрос.УстановитьПараметр("Период", Период);
Запрос.УстановитьПараметр("Товар", Товар);
Запрос.УстановитьПараметр("ВЦены", ВЦены);

РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
Возврат 0;
Иначе
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;
КонецЕсли;

КонецФункции
Оставьте свое сообщение

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