Меняю с одного договора на другой во всех документах

 для каждого строк из ВыборкаДетальныеЗаписи цикл
  строк.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УТ0002294"); - - - - в этой строке оно находит его и заменяет

  док = строк.Ссылка.ПолучитьОбъект();
  док.Записать();------- но как только записывает,сразу меняет на старый который был,в чём дело??
  Сообщить("Документ: "+док+" записан!");

 КонецЦикла;
---
смотрите. в документа есть:
ПлатежноеПоручениеВходящее.ДоговорКонтрагента КАК ДоговорКонтрагента
и есть ТЧ РеквизитыКонтрагента, в которой тоже есть ДоговорКонтрагента. Может не там смотрите.

Ну и смотрите в модуле объекта процедуры ПередЗаписью, ПриЗаписи, ОбработкаПроведения и подписки на эти обработчики. Может так какая проверка и подмена происходит.
---
И на будущее: все записи объектов лучше делать в попытке)
---
да,согласен,с этим я уже столкнулся разок))
---
Давайте сначала улучшим читаемость кода, и будем использовать ссылки. !! только подставьте параметры , вот такое выполните

```1c
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ПлатежноеПоручениеВходящее.Ссылка КАК Ссылка,
    | ПлатежноеПоручениеВходящее.ДоговорКонтрагента КАК ДоговорКонтрагента
    |ИЗ
    | Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
    |ГДЕ
    | ПлатежноеПоручениеВходящее.Проведен
    | И ПлатежноеПоручениеВходящее.Контрагент = &Контрагент
    | И ПлатежноеПоручениеВходящее.ДоговорКонтрагента <> &ДоговорКонтрагента
    | И ПлатежноеПоручениеВходящее.Ссылка = &Ссылка");

    НовДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УТ0002294");
    Контр = Справочники.Контрагенты.НайтиПоКоду("); // "А Кони ООО"
    ДогДляПроверки = Документы.ПлатежноеПоручениеВходящее.НайтиПоНомеру(",Дата(2019,1,1, 0,0,0)); // Для проверки

    Запрос.УстановитьПараметр("Контрагент", Контр); // "А Кони ООО"
    Запрос.УстановитьПараметр("ДоговорКонтрагента", НовДоговор); // "Дог Р"
    Запрос.УстановитьПараметр("Ссылка", ДогДляПроверки); // Для проверки

    ИЗапрос = Запрос.Выполнить().Выбрать();

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

    //проверим
    Сообщить(НовДоговор);
    Сообщить(Контр);
    Сообщить(ДогДляПроверки);
    Сообщить(Запрос.Выполнить().Выбрать().Количество());

    КонецПроцедуры
```
---
Так вы получаете объект ещё не измененный, у Вас в нём старый договор, соответственно, он и записывается.

Лучше сделать так:

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

Таким образом вы измените объект прям и запишется у Вас Ваш договор нужный)
---
В общем, суть в том, что, скорее всего в ВыборкеДетальныеЗаписи у Вас содержатся ссылки на документы. Вы меняете сначала в ссылке договор, но никак не записываете. Затем Вы получаете объект, у которого в ссылке старое значение, ведь новое Вы не записали. То есть если Вы пойдете отладкой и посмотрите, что у Вас строк.ДоговорКонтрагента изменился до получения объекта, но в самом объекте старая ещё ссылка. Потому нужно сначала получить объект, произвести изменения и затем его записать
---
пробовал изначально так,записывает всё равно старый договор
---
не прокатывает такой метод,всё равно
---
Ну, тогда вариантов не много:
1) Не туда пишите
2) Не там смотрите
3) В объекте перед записью отрабатывает собственный код по заполнению договора.
---
Процедура КнопкаВыполнитьНажатие(Кнопка)
 Запрос = Новый Запрос;
 Запрос.Текст =
  "ВЫБРАТЬ
  | ПлатежноеПоручениеВходящее.Ссылка КАК Ссылка,
  | ПлатежноеПоручениеВходящее.ВерсияДанных КАК ВерсияДанных,
  | ПлатежноеПоручениеВходящее.ПометкаУдаления КАК ПометкаУдаления,
  | ПлатежноеПоручениеВходящее.Номер КАК Номер,
  | ПлатежноеПоручениеВходящее.Дата КАК Дата,
  | ПлатежноеПоручениеВходящее.Проведен КАК Проведен,
  | ПлатежноеПоручениеВходящее.ДокументОснование КАК ДокументОснование,
  | ПлатежноеПоручениеВходящее.ДатаВходящегоДокумента,
  | ПлатежноеПоручениеВходящее.НомерВходящегоДокумента,
  | ПлатежноеПоручениеВходящее.Организация КАК Организация,
  | ПлатежноеПоручениеВходящее.СчетОрганизации КАК СчетОрганизации,
  | ПлатежноеПоручениеВходящее.Контрагент КАК Контрагент,
  | ПлатежноеПоручениеВходящее.СчетКонтрагента КАК СчетКонтрагента,
  | ПлатежноеПоручениеВходящее.ДоговорКонтрагента КАК ДоговорКонтрагента,
  | ПлатежноеПоручениеВходящее.СуммаДокумента КАК СуммаДокумента,
  | ПлатежноеПоручениеВходящее.ВалютаДокумента КАК ВалютаДокумента,
  | ПлатежноеПоручениеВходящее.ВидОперации КАК ВидОперации,
  | ПлатежноеПоручениеВходящее.ОтраженоВОперУчете КАК ОтраженоВОперУчете,
  | ПлатежноеПоручениеВходящее.Оплачено КАК Оплачено,
  | ПлатежноеПоручениеВходящее.ДатаОплаты КАК ДатаОплаты,
  | ПлатежноеПоручениеВходящее.ЧастичнаяОплата КАК ЧастичнаяОплата,
  | ПлатежноеПоручениеВходящее.Комментарий КАК Комментарий,
  | ПлатежноеПоручениеВходящее.Ответственный КАК Ответственный,
  | ПлатежноеПоручениеВходящее.ОтражатьВБухгалтерскомУчете КАК ОтражатьВБухгалтерскомУчете,
  | ПлатежноеПоручениеВходящее.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
  | ПлатежноеПоручениеВходящее.ОтражатьВНалоговомУчете КАК ОтражатьВНалоговомУчете,
  | ПлатежноеПоручениеВходящее.Подразделение КАК Подразделение,
  | ПлатежноеПоручениеВходящее.НазначениеПлатежа КАК НазначениеПлатежа,
  | ПлатежноеПоручениеВходящее.СтатьяЗатрат,
  | ПлатежноеПоручениеВходящее.НоменклатурнаяГруппа,
  | ПлатежноеПоручениеВходящее.ПодразделениеЗатраты,
  | ПлатежноеПоручениеВходящее.СуммаУслуг,
  | ПлатежноеПоручениеВходящее.Б_Идентификатор,
  | ПлатежноеПоручениеВходящее.Б_НомерВерсии,
  | ПлатежноеПоручениеВходящее.Б_ДатаДокумента,
  | ПлатежноеПоручениеВходящее.РасшифровкаПлатежа.(
  | Ссылка,
  | НомерСтроки,
  | ДоговорКонтрагента,
  | Сделка,
  | КурсВзаиморасчетов,
  | СуммаПлатежа,
  | КратностьВзаиморасчетов,
  | СуммаВзаиморасчетов,
  | СтавкаНДС,
  | СуммаНДС,
  | СтатьяДвиженияДенежныхСредств,
  | ДокументПланированияПлатежа,
  | Проект,
  | КурсВзаиморасчетовПлан,
  | СуммаПлатежаПлан,
  | ДокументРасчетовСКонтрагентом
  | ) КАК РасшифровкаПлатежа,
  | ПлатежноеПоручениеВходящее.РеквизитыКонтрагента.(
  | Ссылка,
  | НомерСтроки,
  | Реквизит,
  | Значение,
  | Представление,
  | ТипКонтрагента
  | ) КАК РеквизитыКонтрагента
  |ИЗ
  | Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
  |ГДЕ
  | ПлатежноеПоручениеВходящее.Проведен = ИСТИНА
  | И ПлатежноеПоручениеВходящее.Контрагент.Наименование = &Наименование
  | И ПлатежноеПоручениеВходящее.ДоговорКонтрагента.Наименование <> &Наименование2";

 Наименование = "А Кони ООО";
 Наименование2 = "Дог Р";

 Запрос.УстановитьПараметр("Наименование", Наименование);
 Запрос.УстановитьПараметр("Наименование2", Наименование2);

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

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

 для каждого строк из ВыборкаДетальныеЗаписи цикл
док = строк.Ссылка.ПолучитьОбъект();
док.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УТ0002294");
док.Записать();

 КонецЦикла;

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

```1c
    НовДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УТ0002294");
    Для каждого строк из ВыборкаДетальныеЗаписи цикл
    док = строк.Ссылка.ПолучитьОбъект();
    док.ДоговорКонтрагента = НовДоговор;
    док.Записать();
    КонецЦикла;
```
---
так тоже не прошло(
не пойму почему
---
ниже весь код обработки
---
из примера (2) проверьте что содержится в док.ДоговорКонтрагента до записи и после. Если конфа правилась, поищите подписки и просто в коде, может есть какая то проверка. По журналу регистрации нет ли второй записи после вашей, которая могла вернуть обратно договор. И по Журналу регистрации ваша запись не в откаченной транзакции?
---
как ни странно,всё там вроде гуд
---
если смотрите в той же выборке, то и не будет там новых данных. Эти данные получены на момент до изменений и не отображают данные в реальном времени.Нужно повторное получение данных для просмотра изменений.
---
нет,смотрю прямо в документе что ничего не изменилось
---
смотрите реквизит документа или в ТЧ документа? Изменяете только реквизит самого документа.
---
захожу в сам документ и смотрю что там остался тот же договор
---
А запросом проверьте
---
запрос выводит опять все документы со старыми договорами
---
возможно там и реквизит документа и в ТЧ есть этот договор. А форма документа может брать из ТЧ или наоборот
---
смотрите. в документа есть:
ПлатежноеПоручениеВходящее.ДоговорКонтрагента КАК ДоговорКонтрагента
и есть ТЧ РеквизитыКонтрагента, в которой тоже есть ДоговорКонтрагента. Может не там смотрите.

Ну и смотрите в модуле объекта процедуры ПередЗаписью, ПриЗаписи, ОбработкаПроведения и подписки на эти обработчики. Может так какая проверка и подмена происходит.
---
сейчас значит закину и в табл.часть сразу))) сейчас попробую
---
вы были правы,только лежал ещё договор в РасшифровкаПлатежа, из его и брал на подмену.
Спасибо большое

 НовДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УТ0002294");
Для каждого строк из ВыборкаДетальныеЗаписи цикл
 док = строк.Ссылка.ПолучитьОбъект();
 док.ДоговорКонтрагента = НовДоговор;
 для каждого строк2 из док.РасшифровкаПлатежа цикл
 строк2.ДоговорКонтрагента = НовДоговор;
 КонецЦикла;

 док.Записать();
КонецЦикла;
---
Всем спасибо большое)