Difference between revisions of "DB.RestoreObjectFromBuffer"
(Created page with "{{infobox function |name=RestoreObjectFromBuffer |object=Объект базы данных |caption=Восстановление состояния объекта |type=1...") |
m (1 revision imported) |
(No difference)
|
Latest revision as of 07:43, 7 February 2021
RestoreObjectFromBuffer (Восстановление состояния объекта) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция восстанавливает текущий объект из указанного буфера, созданного ранее функцией StoreObjectToBuffer. Из буфера восстанавливаются все свойства объекта -- реквизиты, особые реквизиты, признак объект изменен, внутренние коды и пр. Внимание: если объект является новым несохраненным, среди реквизитов объекта есть нумераторы, заполняемые при создании и была произведена успешная запись объекта, после чего она была отменена откатом транзакции (RollbackTransaction), получится ситуация, когда указанные нумераторы, содержат значения, которые не закреплены в таблице со значениями временных нумераторов на сервере (это, однако, не относится к реквизитам-нумераторам, заполняемым при записи). Поэтому, при наличии таких реквизитов, если объект новый, после отмены транзакции, нужно обновить значения реквизитов-нумераторов с помощью функции SetNumerator. Функция обычно используется для объектов, открытых для визуального редактирования, в момент отмены транзакции, когда запись не была успешной.
Синтаксис
DB.RestoreObjectFromBuffer(<Состояние объекта (BUFFER)>)
Аргументы
<Состояние объекта (BUFFER)>
- Задает состояние объекта, созданное ранее функцией StoreObjectToBuffer.
Примеры
//Пример для документа aEl, открытого визуально, при обработке которого необходимо убедиться, что также будут обработаны все документы из списка СпД. // Если хотя бы один документ не может быть обработан, текущий документ необходимо вернуть в исходное состояние //Сохраним состояние текущего документа Buff:=aEl.StoreObjectToBuffer(); BeginTransaction(); Try //Обработаем текущий документ aEl.Publish(); //Обработаем или сохраним все документы из списка СпД For i:=1 to СпД.Size() Do бДок:=СпД.Get(i); If бДок.Status()<2 Then бДок.Save(); Else бДок.Publish(); EndIf; EndDo; //Зафиксировать транзакцию CommitTransaction(); Except //Если сохранение или обработка документов невозможна, будет вызвано исключение //Мы должны отменить транзакцию (вернуть все документы и текущий в базе данных в исходное состояние RollBackTransaction(); //Также мы должны восстановить в исходное визуальное состояние текущий документ (обработчик события OnPublish мог изменить какие-либо реквизиты) aEl.RestoreObjectFromBuffer(Buff); Message(PopError(),"!"); Exit 0; EndTry;