DB.StoreObjectToBuffer

From SunFlurry wiki
Jump to: navigation, search
  StoreObjectToBuffer (Сохранение состояния объекта)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Не подходящий объект
Визуальность:Нет

Функция сохраняет текущий объект в памяти и возвращает его в виде буфера. Функция работает как для объектов, открытых для визуального редактирования, так и для обычных объектов. Принимаются только элементы справочников и документы. Текущий объект не будет изменен. В буфере сохраняются все свойства объекта -- реквизиты, особые реквизиты, признак объект изменен, внутренние коды и пр. Функция обычно используется для объектов, открытых для визуального редактирования до начала транзакции с попыткой записи объекта. См. также RestoreObjectFromBuffer.

Синтаксис

DB.StoreObjectToBuffer():<Состояние объекта (BUFFER)>

Возвращаемое значение

Функция возвращает буфер, хранящий текущее состояние объекта.

Примеры

//Пример для документа 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;