DB.Publish

From SunFlurry wiki
Revision as of 08:38, 17 October 2020 by Admin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  Publish (Обработка документа)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер и БД
Исключения:Ошибка обработки, ошибка сервера и пр.
Визуальность:Нет

Функция выполняет процедуру обработки документа. Обработка -- условное название процесса изменения состояния документа. Обработанным называется документ, когда он имеет движения в накопителях (документ может иметь движения только в накопителях, закрепленных за ним в Студии), и его статус больше 1. Функция помогает свести совокупность изменений, происходящих при обработке документа в один вызов. При необходимости можно полностью эмулировать поведение этой функции, к примеру, когда необходимо загрузить документ с движениями из внешнего источника. Существует возможность также вызвать заданный в конфигурации обработчик без вызова самой функции (см. InvokeEvent). Функция не может быть вызвана для удаленных документов (имеющих статус 1). Функция последовательно выполняет следующие действия:

  • Если для документа указан режим автоматической транзакции, функция инициирует режим транзакции и сохраняет состояние текущего документа во внутреннем буфере.
  • Функция производит вызов события OnPublish, если оно задано в структуре метаданных проекта (см. Конфигурация данных проекта). Ожидается, что событие произведет проверку корректности и заполненности данных в документе, после чего, либо вернет ошибку (будет вызвано исключение), либо заблокирует нужные накопители и произведет их заполнение на основе информации документа.
  • Если для документа указан режим автоматической транзакции, функция проверяет состояние документа. Если он имеет состояние изменен, функция производит вызов события метаданных OnSave. Событие может отменить попытку обработки (будет вызвано исключение).
    • Также, если объект открыт для визуального редактирования и он имеет обязательные для заполнения реквизиты, эти реквизиты будут проверены на заполненность, если хотя бы один из них не заполнен, будет вызвано исключение.
    • Будет произведена попытка сохранения измененного документа в базе данных (см. функцию Save).
  • Будет установлена пометка обработки документа, если она пока не установлена на данном документе (см. PublishedMark)
  • Будет произведено фиксирование транзакции CommitTransaction
  • Если предусмотрено установками, создается соответствующая запись в таблице журнала регистрации событий. Функция заканчивает работу и возвращает управление вызвавшей программе.
  • При наличии исключения на любом из этапов работы функции, если для документа указан режим автоматической транзакции, функция отменяет транзакцию и возвращает предыдущее состояние документа из внутреннего буфера.

Синтаксис

DB.Publish(<Параметр>,<Опция>)

Аргументы

  • <Параметр>,<Опция> - (необязательный аргумент) Два необязательных параметра, которые будут доступны, как переменные Param и Option внутри обработчика события OnPublish.

Примеры

//Пример производит обработку документа с дополнительным параметром
//Если обработка неудачна, событие ''OnPublish'' вернет текст ошибки, из которого функция Publish создает исключение
//Чтобы отличить ошибку обработки от системных ошибок и ошибок сервера, пример проверяет код ошибки и, если это ошибка обработки,
//  оставляет только текст, удаляя из сообщения ошибки лишнюю информацию.
сп:=List.Create();
сп.SetByName("ФорсироватьОбработку",1);
Try
  аДок.Publish(сп);
Except
  Стр:=PeekError();
  If Pos("(80 at",Стр)=1 Then
    Стр:=PopError(4);
  EndIf;
  Стр:=PopError();
  Message(Стр,"!");
EndTry;