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

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Документ,
    ВТ.Номенклатура,
    ВТ.Период,
    ИсторияЗначенияЦен.Цена
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен
    ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура
    И ВТ.Период = ИсторияЗначенияЦен.Период
```
---
рекомендую изменить директиву на &НаСервереБезКонтекста и передавать дату как параметр

```1c
    &НаСервереБезКонтекста
    Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)
    ......
    Запрос.УстановитьПараметр("Период",Дата);
    ......
    КонецФункции
```
---
```1c
    Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура,Объект.Дата);
```
---
Добрый день. вам нужны именно цены которые были назначены документами?
Срез последних не проще сделать?
---
Мне не нужна цена последняя,а нужна цена которая в регистре ближе всего к дате документа.
Например
Приход 1.01 цена 100р
5.01-120р
Расходная 2.01 -цена должна подставляться 100р.
Я тоже сначала пробовала со СрезомПоследних,но как тогда в параметр Период передать дату документа?
---
В чем сложность передать в срез последних дату документа? Вообще то так всегда и получается цена. В запросы параметры умеете подставлять?
---
Ну подскажите как)
---
```1c
    ВЫБРАТЬ
    ИсторияЗначенияЦенСрезПоследних.Период КАК Период,
    ИсторияЗначенияЦенСрезПоследних.Номенклатура КАК Номенклатура,
    ИсторияЗначенияЦенСрезПоследних.Цена КАК Цена
    ИЗ
    РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних
```

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

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

Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Период", ??)-а тут что?
---
если управляемая форма документа тогда Запрос.УстановитьПараметр("Период", Объект.Дата)
---
Я так пыталась,выводит ошибку!
---
какую?
---
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(27,37)}: Переменная не определена (Объект)
 Запрос.УстановитьПараметр("Период",<<?>>Объект.Дата); (Проверка: Сервер)
---
код процедуры? Директива какая &НаСервере или &НаСервереБезКонтекста
---
Это СоСрезом

```1c
    ВЫБРАТЬ
    ИсторияЗначенияЦенСрезПоследних.Период КАК Период,
    ИсторияЗначенияЦенСрезПоследних.Номенклатура КАК Номенклатура,
    ИсторияЗначенияЦенСрезПоследних.Цена КАК Цена
    ИЗ
    РегистрСведений.ИсторияЗначенияЦен.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ИсторияЗначенияЦенСрезПоследних

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

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

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

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

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

    ////////////////////////////////////////////////////////////­­////////////////////
    ВЫБРАТЬ
    ВТ.Документ,
    ВТ.Номенклатура,
    ВТ.Период,
    ИсторияЗначенияЦен.Цена
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен
    ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура
    И ВТ.Период = ИсторияЗначенияЦен.Период
```
---
если нетрудно, оформите код вот так

```1c
    ВЫБРАТЬ
    ВТ.Документ,
    ВТ.Номенклатура,
    ВТ.Период,
    ИсторияЗначенияЦен.Цена
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияЗначенияЦен КАК ИсторияЗначенияЦен
    ПО ВТ.Номенклатура = ИсторияЗначенияЦен.Номенклатура
    И ВТ.Период = ИсторияЗначенияЦен.Период
```

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

Если документ новый, то дата пустая. Используйте Текущаядата()
---
Управляемая форма.Если выбрать ТекущаяДата(),то он будет брать сумму даты последнего документа,а мне то надо не последнего документа,а мне надо сумму которая,"ближе " к дате документа.

Например
Приход 1.01 цена 100р
5.01-120р
Расходная 2.01 -цена должна подставляться 100р.
---
&НаСервере ((
---
Проверьте в отладчике, доступен ли переменная Объект?
---
Или Отправьте скриншот с реквизитами формы
---
СкринФормы
---
В конфигураторе))
---
Пардон за фото,принскрин не работает)))
---
Если вы в модуле формы этого документа и процедура с директивой на &НаСервере то Объект.Дата - должно работать. Либо вы что то не договариваете. Выложите код этой формы. Только оформите его с помощью специальной кнопки "Вставка кода"
---
Этот код,или еще что то скинуть?
---
```1c
    &НаСервере
    Функция ПолучитьЦенуНоменклатуры(Номенклатура)

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

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Период",Объект.Дата);
    РезультатЗапроса = Запрос.Выполнить();

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

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

    Возврат АктуальнаяЦена;

    КонецФункции
```
---
рекомендую изменить директиву на &НаСервереБезКонтекста и передавать дату как параметр

```1c
    &НаСервереБезКонтекста
    Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)
    ......
    Запрос.УстановитьПараметр("Период",Дата);
    ......
    КонецФункции
```
---
Не выходит...

Что тогда передавать сюда?

```1c
    &НаСервереБезКонтекста
    Функция ПолучитьЦенуНоменклатуры(Номенклатура,Дата)

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

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Период",Дата);
    РезультатЗапроса = Запрос.Выполнить();

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

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

    Возврат АктуальнаяЦена;

    КонецФункции

    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)

    Стр = Элементы.Товары.ТекущиеДанные;
    Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура, <<?>> Дата);
    КоличествоПриИзменении(Элемент);

    КонецПроцедуры
```
---
Кидайте весь модуль формы
---
```1c
    &НаКлиенте
    Процедура КоличествоПриИзменении(Элемент)

    Стр = Элементы.Товары.ТекущиеДанные;
    Стр.Сумма = Стр.Количество * Стр.Цена;
    Объект.СуммаДокумента=Объект.Товары.Итог("Сумма")+Объект.Услуги.Итог("Сумма");

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

    &НаСервереБезКонтекста
    Функция ПолучитьЦенуНоменклатуры(Номенклатура)

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

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Период",Объект.Дата);
    РезультатЗапроса = Запрос.Выполнить();

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

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

    Возврат АктуальнаяЦена;

    КонецФункции

    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)

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

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

Остальной код уже не про Цену...
---
```1c
    Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура,Объект.Дата);
```
---
Так тоже не работает(((
---
а что именно не работает?
---
Дмитрий!!!Спасибо!Все получилось!!!))))Рада,как слон!!!
---
Только учусь
Для Торговли
передаем в функцию товар, вид цены и дату документа

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

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

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

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

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

КонецФункции