Открываю форму документа с табличной частью, в которой есть реквизит с типом Булево (галочка). Далее при распечатке документа я возле определенных строк документа ставлю галочку в положение "Истина" и записываю документ:

```1c
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    Если ЗаписатьДокументНаСервере() Тогда
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
    Иначе
    Сообщить("Версия документа нарушена. Перезайдите в документ!");
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Функция ЗаписатьДокументНаСервере()
    Попытка
    ОбъектДокумент=ДанныеФормыВЗначение(Объект,Тип("ДокументОбъект.Ярлык"));
    ОбъектДокумент.Записать();
    Возврат Истина;
    Исключение
    Возврат Ложь;
    КонецПопытки;
    КонецФункции
```

Но после программной записи я не могу работать с формой, так 1с выдает ошибку что данные изменил уже какой то другой пользователь и так же не могу и записывать ее второй раз, так как попадаю в исключение описанное в программном коде приведенном выше. Как мне после записи обновить и открытую форму документа? Я ведь записал данные, находящиеся на форме, почему они перестали сходиться с БД? Объясните логику работы пожалуйста и что делать в такой ситуации.
---
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:

Прочитать()
Описание:

Обновляет объект управляемой формы.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
---
```1c
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    Если ЗаписатьДокументНаСервере() Тогда
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
    ЭтаФОрма.Прочитать();
    Иначе
    Сообщить("Версия документа нарушена. Перезайдите в документ!");
    КонецЕсли;
    КонецПроцедуры
```
---
У вас же ничего не меняется программно вне формы. Вы просто процедуру записи неимоверно усложнили. Почему просто не использовать стандартный метод Записать()?

```1c
    Расширение формы клиентского приложения для объектов (Client application form extension for objects)
    Записать (Write)
    Синтаксис:
    Записать(<ПараметрыЗаписи>)
    Параметры:
    <ПараметрыЗаписи> (необязательный)
    Тип: Структура.
    Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
    Возвращаемое значение:
    Тип: Булево.
    Истина - успешно записан; Ложь - в противном случае.
    Описание:
    Записывает объект.
    Доступность:
    Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
```
---
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:

Прочитать()
Описание:

Обновляет объект управляемой формы.

Доступность:

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

    ЗначениеВРеквизитФормы(ПолученноеЗначение, "Объект");
```
---
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
ПолученноеЗначение.Записать();

ЗначениеВРеквизитФормы(ПолученноеЗначение, "Объект");

То есть мне каждый реквизит вручную прописывать:

```1c
    ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
```

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

```1c
    Расширение формы клиентского приложения для объектов (Client application form extension for objects)
    Записать (Write)
    Синтаксис:
    Записать(<ПараметрыЗаписи>)
    Параметры:
    <ПараметрыЗаписи> (необязательный)
    Тип: Структура.
    Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
    Возвращаемое значение:
    Тип: Булево.
    Истина - успешно записан; Ложь - в противном случае.
    Описание:
    Записывает объект.
    Доступность:
    Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
```
---
Вы имеете ввиду что написать просто в НаКлиенте: ЭтаФорма.Записать() ?
---
Если хотите, можно хоть на клиенте, хоть на сервере. Можно даже без "ЭтаФорма." Вы же всё равно пишете в контексте формы.
---
Данные формы будут автоматически обновлены и у меня не будет рассинхрона в таком случае?
---
Всё верно.
---
Понял. Дельный совет. Спасибо Вам большое что откликнулись - запомню :)
---
Вы взяли из формы объект и записали его. версия объекта формы осталась прежней.
---
Как мне обновить данные формы?
---
Не до конца понятно, где у вас проставляются флажки таб.части, в основной форме редактирования документа или какой-то вспомогательной.
А также являются эти флажки реквизитами ТЧ документа (хранимыми) или только таблицы формы?
---
Табличная часть в форме - это табличная часть объекта данного документа.
---
Сообщение было скрыто модератором.