Обновление формы при изменении документа в БД
Открываю форму документа с табличной частью, в которой есть реквизит с типом Булево (галочка). Далее при распечатке документа я возле определенных строк документа ставлю галочку в положение "Истина" и записываю документ:
Но после программной записи я не могу работать с формой, так 1с выдает ошибку что данные изменил уже какой то другой пользователь и так же не могу и записывать ее второй раз, так как попадаю в исключение описанное в программном коде приведенном выше. Как мне после записи обновить и открытую форму документа? Я ведь записал данные, находящиеся на форме, почему они перестали сходиться с БД? Объясните логику работы пожалуйста и что делать в такой ситуации.
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
Если ЗаписатьДокументНаСервере() Тогда
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
Иначе
Сообщить("Версия документа нарушена. Перезайдите в документ!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаписатьДокументНаСервере()
Попытка
ОбъектДокумент=ДанныеФормыВЗначение(Объект,Тип("ДокументОбъект.Ярлык"));
ОбъектДокумент.Записать();
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
ПоказатьНо после программной записи я не могу работать с формой, так 1с выдает ошибку что данные изменил уже какой то другой пользователь и так же не могу и записывать ее второй раз, так как попадаю в исключение описанное в программном коде приведенном выше. Как мне после записи обновить и открытую форму документа? Я ведь записал данные, находящиеся на форме, почему они перестали сходиться с БД? Объясните логику работы пожалуйста и что делать в такой ситуации.
По теме из базы знаний
- Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)
- Методика обновления формы объекта данных при изменении объекта
- Перенос данных из УПП (УСХП, КА) в ЗУП 3.1 остатками/документами (в том числе алгоритм переноса по одной выбранной организации)
- Надежная регистрация изменений. Версионирование объектов. Аудит. Все средствами SQL Server
- Использование подключаемых команд в обработках на примере дополнительных печатных форм
Найденные решения
(1)
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:
Прочитать()
Описание:
Обновляет объект управляемой формы.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:
Прочитать()
Описание:
Обновляет объект управляемой формы.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
(12)
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
Если ЗаписатьДокументНаСервере() Тогда
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
ЭтаФОрма.Прочитать();
Иначе
Сообщить("Версия документа нарушена. Перезайдите в документ!");
КонецЕсли;
КонецПроцедуры
Показать
(12) У вас же ничего не меняется программно вне формы. Вы просто процедуру записи неимоверно усложнили. Почему просто не использовать стандартный метод Записать()?
Расширение формы клиентского приложения для объектов (Client application form extension for objects)
Записать (Write)
Синтаксис:
Записать(<ПараметрыЗаписи>)
Параметры:
<ПараметрыЗаписи> (необязательный)
Тип: Структура.
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:
Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.
Описание:
Записывает объект.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:
Прочитать()
Описание:
Обновляет объект управляемой формы.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:
Прочитать()
Описание:
Обновляет объект управляемой формы.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
(11) Вы наверное подключились к моему конфигуратору и что то явно подправили) В самом начале пробовал методом ЭтаФорма.Прочитать() обновить данные, но почему то не работало и тут специально что бы привести Вам пример с неработающий кодом снова написал это - все работает.
Спасибо :)
Спасибо :)
Ты изменил данные в бд, форма ничего об этом не знает, естественно теперь у нее рассинхрон получается. делай через реквизитФормыВЗначение и после записи загружай изменения в форму через ЗначениеВРеквизитФормы
(6)
То есть мне каждый реквизит вручную прописывать:
Если например пользователь поменял число где то, поставил галочки где то и я потом программно записал, то мне нужно самому каждый реквизит переопределять и я никак не могу обновить все реквизиты связанные с объектом?
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
ПолученноеЗначение.Записать();
ЗначениеВРеквизитФормы(ПолученноеЗначение, "Объект");
ПолученноеЗначение.Записать();
ЗначениеВРеквизитФормы(ПолученноеЗначение, "Объект");
То есть мне каждый реквизит вручную прописывать:
ПолученноеЗначение.ВашРеквизит = НужноеЗначение;
Если например пользователь поменял число где то, поставил галочки где то и я потом программно записал, то мне нужно самому каждый реквизит переопределять и я никак не могу обновить все реквизиты связанные с объектом?
(10) Получается самым логичным образов в случае обновления всей формы является закрытие открытой формы и программное открытие формы заново. Это единственный вариант который мне удалось вычитать в прочитанных мною источниках, но все же это бешенный костыль и хотелось бы обновить данные уже в открытой форме.
(12)
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
Если ЗаписатьДокументНаСервере() Тогда
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
ЭтаФОрма.Прочитать();
Иначе
Сообщить("Версия документа нарушена. Перезайдите в документ!");
КонецЕсли;
КонецПроцедуры
Показать
(12) У вас же ничего не меняется программно вне формы. Вы просто процедуру записи неимоверно усложнили. Почему просто не использовать стандартный метод Записать()?
Расширение формы клиентского приложения для объектов (Client application form extension for objects)
Записать (Write)
Синтаксис:
Записать(<ПараметрыЗаписи>)
Параметры:
<ПараметрыЗаписи> (необязательный)
Тип: Структура.
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:
Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.
Описание:
Записывает объект.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот