Обновление формы при изменении документа в БД

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

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

Но после программной записи я не могу работать с формой, так 1с выдает ошибку что данные изменил уже какой то другой пользователь и так же не могу и записывать ее второй раз, так как попадаю в исключение описанное в программном коде приведенном выше. Как мне после записи обновить и открытую форму документа? Я ведь записал данные, находящиеся на форме, почему они перестали сходиться с БД? Объясните логику работы пожалуйста и что делать в такой ситуации.
По теме из базы знаний
Найденные решения
11. dandykry 10 14.05.19 11:39 Сейчас в теме
(1)

Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:

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

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

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
SantiouS; +1 Ответить
13. dandykry 10 14.05.19 11:42 Сейчас в теме
(12)


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

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

Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:

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

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

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
SantiouS; +1 Ответить
15. SantiouS 14.05.19 11:44 Сейчас в теме
(11) Вы наверное подключились к моему конфигуратору и что то явно подправили) В самом начале пробовал методом ЭтаФорма.Прочитать() обновить данные, но почему то не работало и тут специально что бы привести Вам пример с неработающий кодом снова написал это - все работает.
Спасибо :)
2. bad_wag 48 14.05.19 11:15 Сейчас в теме
Ты изменил данные в бд, форма ничего об этом не знает, естественно теперь у нее рассинхрон получается. делай через реквизитФормыВЗначение и после записи загружай изменения в форму через ЗначениеВРеквизитФормы
SantiouS; alex-l19041; +2 Ответить
4. SantiouS 14.05.19 11:19 Сейчас в теме
(2) Хорошо, я получаю значения реквизита (старые):
&НаСервере: ПолученноеЗначение=РеквизитФормыВЗначение("Объект");
Что мне с ними делать? Можете дать пример кода?
6. bad_wag 48 14.05.19 11:27 Сейчас в теме
(4)
ПолученноеЗначение=РеквизитФормыВЗначение("Объект");
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
ПолученноеЗначение.Записать();

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

7. SantiouS 14.05.19 11:29 Сейчас в теме
(6)
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
ПолученноеЗначение.Записать();

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


То есть мне каждый реквизит вручную прописывать:
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;

Если например пользователь поменял число где то, поставил галочки где то и я потом программно записал, то мне нужно самому каждый реквизит переопределять и я никак не могу обновить все реквизиты связанные с объектом?
10. bad_wag 48 14.05.19 11:39 Сейчас в теме
(7) Я описал как изменять реквизиты программно, как это к вашей задаче применить не особо понятно
12. SantiouS 14.05.19 11:41 Сейчас в теме
(10) Получается самым логичным образов в случае обновления всей формы является закрытие открытой формы и программное открытие формы заново. Это единственный вариант который мне удалось вычитать в прочитанных мною источниках, но все же это бешенный костыль и хотелось бы обновить данные уже в открытой форме.
13. dandykry 10 14.05.19 11:42 Сейчас в теме
(12)


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

Расширение формы клиентского приложения для объектов (Client application form extension for objects)
Записать (Write)
Синтаксис:
Записать(<ПараметрыЗаписи>)
Параметры:
<ПараметрыЗаписи> (необязательный)
Тип: Структура. 
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:
Тип: Булево. 
Истина - успешно записан; Ложь - в противном случае.
Описание:
Записывает объект.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Показать
SantiouS; +1 Ответить
16. SantiouS 14.05.19 11:46 Сейчас в теме
(14) Вы имеете ввиду что написать просто в НаКлиенте: ЭтаФорма.Записать() ?
17. VladimirElohov 129 14.05.19 11:48 Сейчас в теме
(16) Если хотите, можно хоть на клиенте, хоть на сервере. Можно даже без "ЭтаФорма." Вы же всё равно пишете в контексте формы.
SantiouS; +1 Ответить
18. SantiouS 14.05.19 11:49 Сейчас в теме
(17) Данные формы будут автоматически обновлены и у меня не будет рассинхрона в таком случае?
19. VladimirElohov 129 14.05.19 11:50 Сейчас в теме
20. SantiouS 14.05.19 11:53 Сейчас в теме
(19) Понял. Дельный совет. Спасибо Вам большое что откликнулись - запомню :)
3. catena 110 14.05.19 11:16 Сейчас в теме
Вы взяли из формы объект и записали его. версия объекта формы осталась прежней.
5. SantiouS 14.05.19 11:19 Сейчас в теме
(3) Как мне обновить данные формы?
8. VladimirElohov 129 14.05.19 11:38 Сейчас в теме
(5) Не до конца понятно, где у вас проставляются флажки таб.части, в основной форме редактирования документа или какой-то вспомогательной.
А также являются эти флажки реквизитами ТЧ документа (хранимыми) или только таблицы формы?
9. SantiouS 14.05.19 11:39 Сейчас в теме
(8) Табличная часть в форме - это табличная часть объекта данного документа.
21. пользователь 16.05.19 13:22
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день