Добрый день. Столкнулся с проблемой, подскажите, как можно решить, пожалуйста.
Есть регистр сведений (Измерения: объект, номерзаписи, ид; Ресурсы: автор, реквизит, значение, староезначение).
У объекта есть обещание и код из справочника: Активность.Объект.Обещание.Код.
Необходимо, чтобы при добавлении новой записи, менялся код у предыдущих записей, но того же объекта.
То есть, добавляется новая запись с "обещанием" = 123, ставится реквизит = "обещание", значение = "123". Нужно, чтобы предыдущие записи с реквизитом "срок" меняли код обещания.
Пытаюсь так:

```1c
    Если Реквизит = "Обещание" Тогда
    Запись = РегистрыСведений.Активность.СоздатьМенеджерЗаписи();
    Запись.Объект = Объект;
    Запись.Реквизит = "Срок";
    Запись.Прочитать();
    Если НЕ Запись.Выбран() Тогда
    Запись.Объект.Обещание.Код = Справочники.Обещания.НайтиПоКоду("000000019");
    Запись.Записать();
    КонецЕсли;
```

Запись и не читается и не выбирается...
Подскажите, что можно сделать? Заранее спасибо.
---
определяя два значения реквизита перед Прочитать() - фильтр отрабатывает по этим двум - Объект и "Срок"
если записи с именно таким значениями ресурсов\измерений нет - то ничего и не найдется, это раз
два - сравнение строковых величин выполняется в полном соответствии с заданным значением, в данном случае четко со "Срок", т.к. с большой буквы и длиной 4 символа - возможно длина в измерении не совпадает или записано с маленькой буквы
три - типы значений, они разные в Обещание.Код = строка и Обещание.НайтиПоКоду() = ссылка
четыре - называть реквизиты, ресурсы и измерения объекта зарезервированными словами конфигурации типа Объект, Реквизит, Значение, Код - это плохо, может снести крышу у 1С
ну и вишенка на торте -Объект.Обещание - это ссылка на некий элемент и поменять ему Код будет невозможно без получения ссылки на данный элемент. Да и менять код у существующего элемента - имхо, бредовая идея
если так уж сильно хочется чего-то в существующем Обещании менять - надо менять не КОД, а свой реквизит, который к Коду не имеет отношения
---
определяя два значения реквизита перед Прочитать() - фильтр отрабатывает по этим двум - Объект и "Срок"
если записи с именно таким значениями ресурсов\измерений нет - то ничего и не найдется, это раз
два - сравнение строковых величин выполняется в полном соответствии с заданным значением, в данном случае четко со "Срок", т.к. с большой буквы и длиной 4 символа - возможно длина в измерении не совпадает или записано с маленькой буквы
три - типы значений, они разные в Обещание.Код = строка и Обещание.НайтиПоКоду() = ссылка
четыре - называть реквизиты, ресурсы и измерения объекта зарезервированными словами конфигурации типа Объект, Реквизит, Значение, Код - это плохо, может снести крышу у 1С
ну и вишенка на торте -Объект.Обещание - это ссылка на некий элемент и поменять ему Код будет невозможно без получения ссылки на данный элемент. Да и менять код у существующего элемента - имхо, бредовая идея
если так уж сильно хочется чего-то в существующем Обещании менять - надо менять не КОД, а свой реквизит, который к Коду не имеет отношения
---
Опишу корень проблемы. Из регистра сведений выбираю значения по типу реквизита (Срок) и коду обещания (Подано на банкротство). Но если у объекта добавляется новая запись с изменением обещания (Банкрот), то сроки не должны выводиться. Но они выводятся, так как у старых записей тот же код обещания. Может быть как-то в запросе можно отсечь значения объекта, у которого появилась запись с Банкротом.

```1c
    ВЫБРАТЬ
    Активность.Значение КАК Дата,
    ВЫРАЗИТЬ(Активность.Объект КАК Документ.АнкетаКлиента).Контрагент КАК Контрагент
    ИЗ
    РегистрСведений.Активность КАК Активность
    ГДЕ
    Активность.Реквизит = "Срок"
    И ВЫРАЗИТЬ(Активность.Значение КАК СТРОКА(100)) ПОДОБНО &ДатаЗавтра + "%"
    И ВЫРАЗИТЬ(Активность.Объект КАК Документ.АнкетаКлиента).Обещание.Код = "000000077"
```
---
ну вы же как-то понимаете, чем отличаются "Банкрот" и "Подано на банкротство"?
в данном случае я бы или сделал регистр периодическим и читал на &ДатаЗавтра по нужным параметрам
или бы перед записью читал все связанное с новой записью, но без нового кода обещания - удалял и писал новую с обновленным кодом
или бы разобрался, а почему у разных "Банкрот" и "Подано на банкротство" одинаковый код обещания
---
```1c
    Запись.Объект.Обещание.Код = Справочники.Обещания.НайтиПоКоду("000000019");
```

Интересно, как можно присваивать значение реквизиту реквизита ссылки?
---
ничего не произойдет, т.к. типы разные. Код это строка, а не ссылка на справочник обещание
---
По моим представлениям должна произойти ошибка т.к реквизиту ссылки (а уж тем более реквизиту реквизита ссылки) нельзя присваивать значения
---
"а почему у разных "Банкрот" и "Подано на банкротство" одинаковый код обещания" у них код обещания разный.
Если я сделаю запись с рек. "срок" сейчас, то в запросе получу код банкрота, но если я возьму запись у него же, но недельной давности, то будет код "подано на банкротство", так как у старых записей код не меняется.
---
а зачем тогда менять коды старых записей?
раз видим две различные записи, то можно же запрос выполнить так, чтобы получить одну, другую или обе, зависит от "на когда" (если правильно понял описание)
так в чем смысл смены кода в старой записи?

ну и если на то пошло, то можно запросом получить все записи и из выборки, циклом поменять в них что угодно...
---
Да тут непонятно, зачем вообще справочник, если можно обойтись просто регистром. Что такого содержит этот справочник обещаний внутри себя? Кроме кода?
---
И конечно же, справочник "обещаний" не подчинен справочнику "объектов", правда?

Или, например, почему бы для новой записи в регистр активностей не создавать новое обещание? Ведь это именно новая активность с новым обещаниям. И код ни с какими другими обещаниями совпадать не будет...