доброго дня всем. проблема такая: нужно сделать подставление значений из регистра сведений в поле формы. конкретно: при вводе "оборудования" подставляется значение в "ЗаменяемыйКартридж". Когда мне было дано это задание, я вспомнил, что делал нечто похожее в своей курсовой, оттуда код я и взял. Но спустя не мало времени, я к сожалению почти все забыл.

```1c
    // ОБЩИЙ МОДУЛЬ
    Функция ПривязкаГр(АктуальнаяДата,
    ЭлементСправочник1) Экспорт
    // Создать вспомогательный объект Отбор
    Отбор = Новый Структура("Номенклатура",
    ЭлементСправочник1);
    // Получить актуальные значения ресурсов регистра
    ЗначенияРесурсов =
    РегистрыСведений.РасходныеМатериалыВОборудовании.ПолучитьПоследнее(АктуальнаяДата,
    Отбор);
    Возврат ЗначенияРесурсов.ЗаменяемыйКартридж;
    КонецФункции

    // ФОРМА ДОКУМЕНТА
    &НаКлиенте
    Процедура Привет(Элемент)
    Объект.СтарыйКартридж = ОбщийМодуль1.ПривязкаГр(Объект.Дата,
    объект.Оборудование);
    КонецПроцедуры
```

ошибок никаких не выдается, просто не работает подставление. добавлю еще скрины регистра и реквизитов формы для полноты картины. заранее благодарю за помощь
---
Используйте запрос, что бы понять что и как вам надо выбрать:

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

    Запрос.УстановитьПараметр("АктуальнаяДата", АктуальнаяДата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

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

Только учтите, что по условию задачи вам нужно отбирать по измерению Оборудование, а в коде вы отбираете по реквизиту Номенклатура.

Вышеприведенный запрос вам может вернуть не одну запись, а набор записей по всем измерениям где когда либо в Номенклатуре было указанное значение, а в коде будет взята только первая запись. и она может быть не та, что вы ожидаете
---
1. Посмотреть какие данные фактически находятся в регистре, может отбор ничего не возвращает, потому что соответствующих данных нет.
2. Пробежаться по цепочке отладчиком.
---
данные есть, отладчик тоже ничего не говорит
---
Отладчик не может ничего не говорить. )) Как уже указали, отбор должен быть по измерениям, оборудование не надо заполнять любым значением, типы значения, передаваемые в отбор и типы измерений должны, естественно, совпадать.
---
В структуре отбора указан ресурс, а должно быть измерение
---
когда указываю любое из имеющихся измерений, все равно ничего не меняется. ради интереса в модуле формы заменил "Процедура Привет(Элемент)" на "ОборудованиеПриИзменении(Элемент)" и начало выдавать ошибку когда заполняю "оборудование" любым значением
---
регистр периодический? Объект. Дата заполнен?
---
регистр периодичность в пределах секунды. объекта Дата нет в регистре, есть период, но если убрать Объект.Дата из кода, выдаст ошибку "недостаточно фактических параметров", если написать вместо объект.дата любой другой объект (период например) будет ошибка "поле объекта не обнаружено"
---
Объект. Дата это реквизит документа, записи есть в регистре?
---
вот что есть в регистре, именно даты нет
---
Так в качестве периода методу ПолучитьПоследнее надо передать значение типа Дата. И отбор по измерениям.
---
Эта задача состоит из двух этапов. 1) получить нужные данные из регистра 2) передать полученные данные в нужное место итоговой формы.
Насколько я вижу, пока нет даже понимания, какой из этапов вызывает проблему.
Я бы советовал или 1) воспользоваться отладчиком, понять, в чем же проблема, дальше ее решить или 2) нанять программиста. Второй путь быстрее и дешевле.
---
Используйте запрос, что бы понять что и как вам надо выбрать:

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

    Запрос.УстановитьПараметр("АктуальнаяДата", АктуальнаяДата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

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

Только учтите, что по условию задачи вам нужно отбирать по измерению Оборудование, а в коде вы отбираете по реквизиту Номенклатура.

Вышеприведенный запрос вам может вернуть не одну запись, а набор записей по всем измерениям где когда либо в Номенклатуре было указанное значение, а в коде будет взята только первая запись. и она может быть не та, что вы ожидаете
---
спасибо, разберу этот код.
---
в 13 не рабочий код, в параметрах виртуальной таблицы условия можно ноложить только на измерение
---
Рабочий, вопрос оптимальности пока оставим.
---
посмотрите структуру регистра, вы предлогаете наложить условие в параметрах виртуальной таблицы на ресурс, вряд-ли это у вас получится сделать на практике, это не неоптимально, это ошибка
---
в любом случае, лучше чем ничего (то что у меня было). потихоньку разбираюсь
---
проблема решилась. но очень странным образом. нужно ставить дату чуть позже, чем она есть в регистре, а по дефолту в форме стоит сегодняшняя дата и 00:00:00 часов. то есть, если бы я открыл тот же код завтра, он бы работал без смены время вручную. кто-нибудь может объяснить как это работает и почему?
---
читайте описание метода получить последнее из синтакс помощника и все поймете
---
Уважаемый коллега. Почему у Вас в регистре сведений имеется два измерения, а не одно. Во вторых, почему у Вас нет выражения строка табличной части. В третьих в форме документа у Вас строка табличной части не привязывается к функциям, которые содержатся в общем модуле. Поэтому у Вас и ничего не получается.
---
Кроме того, у Вас в функции стоит возврат значения ресурсов, Номенклатура, в общем ммодуле, а привязывается данная функция к реквизиту формы старый картридж. Это как такое возможно. Поди туда, не знаю куда, принеси то, не знаю что. Так что ли получается. Поэтому и ничего не происходит. Функция выполнена быть не может в принципе, поскольку значения ресурса и значение реквизита в которое должно идти представление значения ресурса не совпадает. Вот и весь ответ. Переписывайте функцию и разберитесь вначале, что Вы на самом деле хотите.