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

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияВопросаИзменениеСкупки(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
    Код = СкупочнаяКвитанцияПриИзмененииНаСервере();
    СсылкаДоговор = ПолучитьДоговор(Код);
    ОповеститьОбИзменении(СсылкаДоговор);
    КонецЕсли;

    КонецПроцедуры
```
---
прочел первые три строки и стало тоскливо...
мда, заголовок был так заманчив, а по факту какая-то малопонятная чушь.

почти как на первом свидании вслепую

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

Чтобы окончательно вернуть мне веру в существование разума на этой планете я бы хотел увидеть рисунок, хотя бы наскальный.
---
ОповеститьОбИзменении(ИзмененныйОбъектСсылка)
---
Попробую, но я делал нечто подобное

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияВопросаИзменениеСкупки(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
    Код = СкупочнаяКвитанцияПриИзмененииНаСервере();
    СсылкаДоговор = ПолучитьДоговор(Код);
    //Объект.ДоговорКонтрагента = СсылкаДоговор;
    ЭтаФорма.ОбновитьОтображениеДанных();
    КонецЕсли;

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

    &НаСервере
    Функция СкупочнаяКвитанцияПриИзмененииНаСервере()

    Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
    СсылкаНаДоговор = Объект.ДоговорКонтрагента;
    ИзмДоговор = СсылкаНаДоговор.ПолучитьОбъект();

    ПрефиксНомера = Объект.Филиал.ПрефиксДокументов;
    НомерКвитанцииСПрефиксом = " + ПрефиксНомера + "-" + Объект.СкупочнаяКвитанция;
    ИзмДоговор.Наименование = "Скупка " + НомерКвитанцииСПрефиксом;
    ИзмДоговор.Номер = НомерКвитанцииСПрефиксом;
    ИзмДоговор.Записать();

    ДокОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.ЛМБ_СкупкаЦенностей"));
    ДокОбъект.ДоговорКонтрагента = ИзмДоговор.Ссылка;
    Объект.ДоговорКонтрагента = ИзмДоговор.Ссылка;
    ЗначениеВДанныеФормы(ДокОбъект, Объект);

    Возврат ИзмДоговор.Код;
    КонецЕсли;

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

    &НаСервере
    Функция ПолучитьДоговор(Код)

    СсылкаДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Код);
    Объект.ДоговорКонтрагента = СсылкаДоговор;

    Возврат СсылкаДоговор;

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

В серверной процедуре ПолучитьДоговор в Объект.ДоговорКонтрагента отображается правильное представление, а на клиенте, при возврате оно все равно старое. Получается что проблема в том что на Клиенте не меняется представление
---
&НаСервере заюзать надо

```1c
    СсылкаДоговор = ПолучитьДоговор(Код);
    Объект.ДоговорКонтрагента = СсылкаДоговор;
```

, пока сервак спит клиент отморожен - есть такой "глюк"
это как в молодости Солдат спит - служба идет
---
Настаиваю :-)

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияВопросаИзменениеСкупки(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
    Код = СкупочнаяКвитанцияПриИзмененииНаСервере();
    СсылкаДоговор = ПолучитьДоговор(Код);
    ОповеститьОбИзменении(СсылкаДоговор);
    КонецЕсли;

    КонецПроцедуры
```
---
Настаиваю :-)
Спасибо!!! Сработало. Возьму на вооружение))))
---
Всего модуля формы конечно нет, но существует подозрение что при выполнении

ОповеститьОбИзменении(СсылкаДоговор);

уже выполняется

СкупочнаяКвитанцияПриИзмененииНаСервере();

по крайней мере это было бы логично и в этом случае получаем два вызова одной и той же процедуры...
Думаю что использовать

ЭтаФорма.ОбновитьОтображениеДанных();

Всё же правильнее, поскольку само значение реквизита (ссылка на договор) не изменялось
---
уже выполняется

СкупочнаяКвитанцияПриИзмененииНаСервере();В сообщении, на которое я отвечал, есть реализация этого метода. И нет, там нет вызова оповещения, т.к. это серверный метод. Оповещение об изменении же доступно лишь в клиентском контексте.
ЭтаФорма.ОбновитьОтображениеДанных();Автор пробовал, ему не помогло. И также это можно увидеть в сообщении, на которое я отвечал.
---
Он применял эту процедуру неверно и судя по вашему комментарию вы тоже не очень понимаете "что это и с чем это едят"

специально для вас продублирую

надо в процедуру "ОбновитьОтображениеДанных" указать отображение каких данных мы хотим обновить
читайте СП.
---
Цитата из СП:
Вызов метода ОбновитьОтображениеДанных с параметром <ОбновлятьЭлементы> имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).В коде автора не увидел ни одного из трех обработчиков. Стало быть указывать что-либо не имеет смысла.

Ну и само описание метода:
В принудительном порядке обновляет содержание элементов управления.
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.У автора не меняются значения реквизитов формы. У автора меняются объекты, ссылки на которые указаны в реквизитах формы.
---
И что вы скажете на то что согласно СП предлагаемый вами метод уведомляет динамические списки, которым реквизит документа, собственно как и форма документа уж точно никак не является?
---
Не-не, давайте в этой ветке обсуждать уже Ваш совет использовать метод "ОбновитьОтображениеДанных". :-)

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

Обратите внимание на область со стрелочкой это во-первых (особенно на фразу "такое же как при интерактивном изменении")

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

Что касается обновления динамических списков, то ничего сказать не могу. Есть фраза об "очистке закэшированных данных на клиенте". Вероятно этот же кэш используется и при отображении текста в полях формы объекта. Это предположение подтверждается экспериментом (совет помог ТС). Также мой опыт подобного использования метода не подтверждает вызов обработчиков изменения (возможно Вы перепутали с методом ОповеститьОВыборе).

В любом случае к синтакс-помощнику я предлагал Вам обратиться лишь за поиском подтверждения Ваших же слов, что будет вызвана процедура события "ПриИзменении". Не более того.
---
тут надо в процедуру "ОбновитьОтображениеДанных" указать отображение каких данных мы хотим обновить
читайте СП.
---
Если все делается на форме, зачем все эти реквизитВЗначение и пр, вот так разве не работает?

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияВопросаИзменениеСкупки(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
    Код = СкупочнаяКвитанцияПриИзмененииНаСервере();
    КонецЕсли;

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

    &НаСервере
    Функция СкупочнаяКвитанцияПриИзмененииНаСервере()

    Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
    СсылкаНаДоговор = Объект.ДоговорКонтрагента;
    ИзмДоговор = СсылкаНаДоговор.ПолучитьОбъект();

    ПрефиксНомера = Объект.Филиал.ПрефиксДокументов;
    НомерКвитанцииСПрефиксом = " + ПрефиксНомера + "-" + Объект.СкупочнаяКвитанция;
    ИзмДоговор.Наименование = "Скупка " + НомерКвитанцииСПрефиксом;
    ИзмДоговор.Номер = НомерКвитанцииСПрефиксом;
    ИзмДоговор.Записать();

    Объект.ДоговорКонтрагента = ИзмДоговор.Ссылка;

    Возврат ИзмДоговор.Код;
    КонецЕсли;

    КонецФункции
```
---
Если все делается на форме, зачем все эти реквизитВЗначение и пр, вот так разве не работает?
Оно никак не работает. Это я для примера оставил несколько вариантов того, как пробовал перезаполнить ДоговорКонтрагента. Ни один успеха не принес