Difference between revisions of "DB.Unpublish"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:43, 7 February 2021
Unpublish (Отмена обработки документа) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет процедуру отмены обработки документа. Обработка -- условное название процесса изменения состояния документа. Обработанным называется документ, когда он имеет движения в накопителях (документ может иметь движения только в накопителях, закрепленных за ним в Студии), и его статус больше 1. Функция помогает свести совокупность изменений, происходящих при отмене обработки документа в один вызов. При необходимости можно полностью эмулировать поведение этой функции, существует возможность также вызвать заданный в конфигурации обработчик OnUnpublish без вызова самой функции (см. InvokeEvent). Функция вызывается автоматически при удалении обработанного документа (Mark), либо его визуальном удалении из журналов документов. Функция последовательно выполняет следующие действия:
- Если для документа указан режим автоматической транзакции, функция инициирует режим транзакции и сохраняет состояние текущего документа во внутреннем буфере.
- Функция производит вызов события OnUnpublish, если оно задано в структуре метаданных проекта (см. Конфигурация данных проекта). Ожидается, что событие произведет проверку корректности и заполненности данных в документе, после чего, либо вернет ошибку (будет вызвано исключение), либо заблокирует и очистит движения документа в нужных накопителях. Если событие OnUnpublish не задано, функция очищает движения в накопителях самостоятельно.
- Если для документа указан режим автоматической транзакции, функция проверяет состояние документа. Если он имеет состояние изменен, функция производит вызов события метаданных OnSave. Событие может отменить попытку отмены обработки (будет вызвано исключение).
- Также, если объект открыт для визуального редактирования и он имеет обязательные для заполнения реквизиты, эти реквизиты будут проверены на заполненность, если хотя бы один из них не заполнен, будет вызвано исключение.
- Будет произведена попытка сохранения измененного документа в базе данных (см. функцию Save).
- Будет снята пометка обработки документа, если она уже не была снята в процессе выполнения обработчика OnUnpublish (см. PublishedMark). Документ получает состояние 0 -- нормальный объект.
- Будет произведено фиксирование транзакции CommitTransaction
- Если предусмотрено установками, создается соответствующая запись в таблице журнала регистрации событий. Функция заканчивает работу и возвращает управление вызвавшей программе.
- При наличии исключения на любом из этапов работы функции, если для документа указан режим автоматической транзакции, функция отменяет транзакцию и возвращает предыдущее состояние документа из внутреннего буфера.
Синтаксис
DB.Unpublish(<Параметр>,<Опция>)
Аргументы
<Параметр>,<Опция>
- (необязательный аргумент) Два необязательных параметра, которые будут доступны, как переменные Param и Option внутри обработчика события OnUnpublish.
Примеры
//Пример производит отмену обработки документа aEl //Если обработка неудачна, событие ''OnUnpublish'' вернет текст ошибки, из которого функция Unpublish создает исключение //Чтобы отличить ошибку обработки от системных ошибок и ошибок сервера, пример проверяет код ошибки и, если это ошибка обработки, // оставляет только текст, удаляя из сообщения ошибки лишнюю информацию. аПольз:="";аМаш:="";аВремя:=""; If aEl.Lock(аПольз,аМаш,аВремя)=0 Then Message("Невозможно заблокировать документ, так как в данный момент с ним работает пользователь "+аПольз+" на "+аМаш+" в "+аВремя+"!","!"); Exit; EndIf; Try aEl.Reload(); Try aEl.Unpublish(); Except Стр:=PeekError(); If Pos("(80 at",Стр)=1 Then Стр:=PopError(4); EndIf; Стр:=PopError(); Message(Стр,"!"); EndTry Finally aEl.Unlock(); EndTry