Difference between revisions of "DB.Save"
m (1 revision imported) |
1>Admin |
||
Line 28: | Line 28: | ||
== Синтаксис == | == Синтаксис == | ||
<code> | <code> | ||
− | {{Grey|DB.}}'''Save'''({{Optional|<Режим сохранения периодических реквизитов (INT)>,<Заблокировать объект после сохранения (INT)>{{Default|{{Eq}}0}}}}) | + | {{Grey|DB.}}'''Save'''({{Optional|<Режим сохранения периодических реквизитов (INT)>,<Заблокировать объект после сохранения (INT)>{{Default|{{Eq}}0}},<Элемент для изменения триггера или значение триггера (DB,INT)>}}) |
</code> | </code> | ||
Line 34: | Line 34: | ||
* <code>''<Режим сохранения периодических реквизитов (INT)>''</code> - {{Optional}} Режим определяет, будут ли загруженные периодические реквизиты сохранены при сохранении самого объекта. Если объект является визуальным объектом открытым в режиме изменения, этот параметр всегда будет равен 1, иначе по умолчанию этот параметр равен 0. | * <code>''<Режим сохранения периодических реквизитов (INT)>''</code> - {{Optional}} Режим определяет, будут ли загруженные периодические реквизиты сохранены при сохранении самого объекта. Если объект является визуальным объектом открытым в режиме изменения, этот параметр всегда будет равен 1, иначе по умолчанию этот параметр равен 0. | ||
* <code>''<Заблокировать объект после сохранения (INT)>''</code> - {{Optional}} Параметр определяет будет ли сохранена временная блокировка объекта после удачной записи. Если объект был заблокирован до записи, при любом значении этого аргумента, блокировка не будет снята. Так как в момент записи, объект, если он не был заблокирован, блокируется временной блокировкой, сохранение блокировки после записи имеет гарантированный успех. Параметр удобно использовать для блокировки новых объектов после записи, чтобы продолжать работать с ними, так как новый несохраненный объект еще не имеет внутренного кода базы данных и поэтому не может быть заблокирован. | * <code>''<Заблокировать объект после сохранения (INT)>''</code> - {{Optional}} Параметр определяет будет ли сохранена временная блокировка объекта после удачной записи. Если объект был заблокирован до записи, при любом значении этого аргумента, блокировка не будет снята. Так как в момент записи, объект, если он не был заблокирован, блокируется временной блокировкой, сохранение блокировки после записи имеет гарантированный успех. Параметр удобно использовать для блокировки новых объектов после записи, чтобы продолжать работать с ними, так как новый несохраненный объект еще не имеет внутренного кода базы данных и поэтому не может быть заблокирован. | ||
+ | * <code>''<Элемент для изменения триггера или значение триггера (DB,INT)>''</code> - {{Optional}} Параметр может иметь следующий тип: | ||
+ | ** Для типа '''объект базы данных''', параметр определяет дополнительный элемент (чаще всего элемент родителя), на котором нужно установить триггер изменения ('''1''') в случае, если сохранение элемента прошло успешно. Таким образом, удобно устанавливать триггеры на родителях элементов без триггеров (однако, можно подставлять не только элементы родителей). Система самостоятельно выполняет установку триггера на родителе элемента в случае, если сам элемент не имеет триггера, а его родитель имеет, и сохранение происходит из пользовательского интерфейса (не программно). | ||
+ | ** Для типа '''целое число''', параметр определяет значение триггера текущего объекта после записи, если объект имеет триггер изменения. По умолчанию для объектов с триггерами запись будет вызывать их установку в единицу, но использование данного параметра позволяет установить произвольное значение, таким образом исключается дополнительная операция [[DB.SetTrigger|SetTrigger]]. | ||
== Примеры == | == Примеры == |
Revision as of 16:58, 4 October 2022
Save (Сохранение объекта) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет сохранение текущего измененного объекта или/и его строчных частей. Функция последовательно выполняет следующие действия:
- Если объект открыт для визуального редактирования, будет произведен вызов события метаданных OnSave (см. Конфигурация данных проекта). Событие может отменить попытку записи.
- Если объект открыт для визуального редактирования и он имеет обязательные для заполнения реквизиты, эти реквизиты будут проверены на заполненность, если хотя бы один из них не заполнен, будет вызвано исключение.
- Измененные строчные части или/и совокупность сохраняемых реквизитов (если реквизиты самого объекта были изменены) формируют набор данных, и отправляются на сервер.
- Сервер производит временную блокировку, если объект уже не заблокирован. Если блокировка неудачна, сервер останавливает попытку записи и возвращает ошибку.
- Если объект новый, ему присваивается новый внутренний код базы данных
- Всем незаполненным реквизитам-нумераторам объекта присваиваются новые номера в соответствии с префиксами, заданными этим реквизитам. Заполненные реквизиты-нумераторы с флагом уникальности проверяются на уникальность,если проверка неудачна (какой-либо из реквизитов не уникален), сервер останавливает попытку записи и возвращает ошибку.
- Производится сохранение объекта в базу данных и обновление информации в журналах, в которые входит объект. Для новых объектов, имеющих реквизиты-нумераторы, заполняемые при создании объекта (а не при записи), хранящиеся в таблице временных нумераторов на сервере, будут удалены из этой таблицы.
- Если предусмотрено установками, создается соответствующая запись в таблице журнала регистрации событий.
- Если объект был заблокирован до записи, блокировка сохраняется. Если новый объект открыт для визуального редактирования или новый или существовавший объект имеет опцию заблокировать объект после сохранения, блокировка сохраняется. В иных случаях, временная блокировка снимается.
- Сервер возвращает клиенту информацию по внутреннему коду объекта (для новых объектов) и номерам незаполненных реквизитов-нумераторов, эта информация принимается клиентом, который обновляет ей содержимое реквизитов и строчных частей объекта, если объект открыт для визуального редактирования, также обновляются визуальные поля реквизитов-нумераторов.
- С объекта снимается признак изменен и, если он был открыт для редактирования в визуальной форме, с последней также снимается признак были изменения.
Синтаксис
DB.Save(<Режим сохранения периодических реквизитов (INT)>,<Заблокировать объект после сохранения (INT)>=0,<Элемент для изменения триггера или значение триггера (DB,INT)>)
Аргументы
<Режим сохранения периодических реквизитов (INT)>
- (необязательный аргумент) Режим определяет, будут ли загруженные периодические реквизиты сохранены при сохранении самого объекта. Если объект является визуальным объектом открытым в режиме изменения, этот параметр всегда будет равен 1, иначе по умолчанию этот параметр равен 0.<Заблокировать объект после сохранения (INT)>
- (необязательный аргумент) Параметр определяет будет ли сохранена временная блокировка объекта после удачной записи. Если объект был заблокирован до записи, при любом значении этого аргумента, блокировка не будет снята. Так как в момент записи, объект, если он не был заблокирован, блокируется временной блокировкой, сохранение блокировки после записи имеет гарантированный успех. Параметр удобно использовать для блокировки новых объектов после записи, чтобы продолжать работать с ними, так как новый несохраненный объект еще не имеет внутренного кода базы данных и поэтому не может быть заблокирован.<Элемент для изменения триггера или значение триггера (DB,INT)>
- (необязательный аргумент) Параметр может иметь следующий тип:- Для типа объект базы данных, параметр определяет дополнительный элемент (чаще всего элемент родителя), на котором нужно установить триггер изменения (1) в случае, если сохранение элемента прошло успешно. Таким образом, удобно устанавливать триггеры на родителях элементов без триггеров (однако, можно подставлять не только элементы родителей). Система самостоятельно выполняет установку триггера на родителе элемента в случае, если сам элемент не имеет триггера, а его родитель имеет, и сохранение происходит из пользовательского интерфейса (не программно).
- Для типа целое число, параметр определяет значение триггера текущего объекта после записи, если объект имеет триггер изменения. По умолчанию для объектов с триггерами запись будет вызывать их установку в единицу, но использование данного параметра позволяет установить произвольное значение, таким образом исключается дополнительная операция SetTrigger.
Примеры
//Пример производит блокировку и изменение документа аДок аПольз:="";аМаш:="";аВремя:=""; If аДок.Lock(аПольз,аМаш,аВремя)=0 Then Message("Невозможно заблокировать документ "+аДок+", так как в данный момент с ним работает пользователь "+аПольз+" на "+аМаш+" в "+аВремя+"!","!"); Exit; EndIf; Try //Перечитать аДок из базы данных, чтобы убедиться, что мы работаем со свежими данными и наше изменение не запишет устаревшие данные в базу данных аДок.Reload(); //Изменим реквизит и сохраним объект аДок.Реквизит:=1; аДок.Save(); Finally аДок.Unlock(); EndTry;