1. SantiouS 14.05.19 11:07 Сейчас в теме

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

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

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

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

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

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

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

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

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


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

Расширение формы клиентского приложения для объектов (Client application form extension for objects)
Записать (Write)
Синтаксис:
Записать(<ПараметрыЗаписи>)
Параметры:
<ПараметрыЗаписи> (необязательный)
Тип: Структура. 
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:
Тип: Булево. 
Истина - успешно записан; Ложь - в противном случае.
Описание:
Записывает объект.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Показать
SantiouS; +1 Ответить
Остальные ответы
Избранное Подписка Сортировка: Древо
11. dandykry 3 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 19 14.05.19 11:15 Сейчас в теме
Ты изменил данные в бд, форма ничего об этом не знает, естественно теперь у нее рассинхрон получается. делай через реквизитФормыВЗначение и после записи загружай изменения в форму через ЗначениеВРеквизитФормы
SantiouS; alex-l19041; +2 Ответить
4. SantiouS 14.05.19 11:19 Сейчас в теме
(2) Хорошо, я получаю значения реквизита (старые):
&НаСервере: ПолученноеЗначение=РеквизитФормыВЗначение("Объект");
Что мне с ними делать? Можете дать пример кода?
6. bad_wag 19 14.05.19 11:27 Сейчас в теме
(4)
ПолученноеЗначение=РеквизитФормыВЗначение("Объект");
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
ПолученноеЗначение.Записать();

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

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

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


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

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


&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
Если ЗаписатьДокументНаСервере() Тогда
       УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
       ЭтаФОрма.Прочитать(); 
       Иначе
       Сообщить("Версия документа нарушена. Перезайдите в документ!");
    КонецЕсли;
КонецПроцедуры
Показать
SantiouS; +1 Ответить
14. VladimirElohov 93 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 93 14.05.19 11:48 Сейчас в теме
(16) Если хотите, можно хоть на клиенте, хоть на сервере. Можно даже без "ЭтаФорма." Вы же всё равно пишете в контексте формы.
SantiouS; +1 Ответить
18. SantiouS 14.05.19 11:49 Сейчас в теме
(17) Данные формы будут автоматически обновлены и у меня не будет рассинхрона в таком случае?
19. VladimirElohov 93 14.05.19 11:50 Сейчас в теме
20. SantiouS 14.05.19 11:53 Сейчас в теме
(19) Понял. Дельный совет. Спасибо Вам большое что откликнулись - запомню :)
3. catena 99 14.05.19 11:16 Сейчас в теме
Вы взяли из формы объект и записали его. версия объекта формы осталась прежней.
5. SantiouS 14.05.19 11:19 Сейчас в теме
(3) Как мне обновить данные формы?
8. VladimirElohov 93 14.05.19 11:38 Сейчас в теме
(5) Не до конца понятно, где у вас проставляются флажки таб.части, в основной форме редактирования документа или какой-то вспомогательной.
А также являются эти флажки реквизитами ТЧ документа (хранимыми) или только таблицы формы?
9. SantiouS 14.05.19 11:39 Сейчас в теме
(8) Табличная часть в форме - это табличная часть объекта данного документа.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

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

Программист 1С
Самара
зарплата от 50 000 руб. до 100 000 руб.
По совместительству


Ведущий программист 1С
Сочи
зарплата от 82 500 руб. до 99 000 руб.
Полный день