В компании существует большое количество вторичных серверов. Документы с них попадают на главный сервер, и это сказывается на размерах базы данных главного сервера. На главном сервере решили развернуть файловое хранилище, в которое перенесли старые и давно не используемые документы. Возникла проблема: тексты документов, находящиеся в ФХ стали недоступны на вторичных серверах.
Для решения данной проблемы можно разработать механизм возврата документа из файлового хранилища главного сервера на вторичном сервере, работающий по такой схеме.
На карточку электронного документа необходимо добавить кнопку Получить из ФХ, вызывающую функцию GetDocumentFromStorage(), которая содержит следующий код:
BUTTON_GET = 'Продолжить'
BUTTON_CANCEL = 'Отменить'
QUESTION_BUTTONS = Format("%s|%s"; ArrayOf(BUTTON_GET; BUTTON_CANCEL))
MsgBoxResult = MessageBoxEx(CONFIRMATION_CAPTION;
'Будет отправлена задача с запросом на возврат документа из файлового хранилища. Продолжить?';;
QUESTION_BUTTONS;;;; cbsDefault;
BUTTON_GET)
if MsgBoxResult == BUTTON_GET
// Создать задачу
Task = Tasks.CreateNew()
// Вложить в нее документ
DocInfo = Object.Info
Attachments = Task.GetAttachments(FALSE)
Attachments.Add(DocInfo)
// Запустить по ТМ "Получение документа"
Task.LoadStandardRoute(Конст('GetDocRouteCode'))
Task.RunStandardRoute()
Task.Start()
ShowMessage('Запрос на получение документа отправлен!')
endif
При нажатии на кнопку создается задача по типовому маршруту «Запрос возврата документа из ФХ», в нее вкладывается карточка необходимого пользователю документа. Задача отправляется, пользователь вторичного сервера получает сообщение о том, что запрос на получение электронного документа из ФХ на вторичном сервере отправлен.
Схема типового маршрута, по которому создается задача, должна выглядеть следующим образом:
В качестве исполнителя первого блока типового маршрута нужно указать служебного пользователя главного сервера с правами администратора. Разработан прикладной блок, на событии «Завершение» которого вызывается код, переносящий документ в хранилище главного сервера.
// Перенести документ из ФХ в хранилище SQL-сервера
Attachments = Object.GetAttachments(True)
DocumentInfo = Attachments.Values(0).ObjectInfo
Document = DocumentInfo.Document
SQLStrgRef = References.EDS.GetObjectByCode(Конст('SQLServerStorageCode'))
SQLStrg = EDocuments.GetStorageByID(SQLStrgRef.Requisites('ИД').Value)
Document.MoveToStorage(SQLStrg)
Для автоматического выполнения заданий можно реализовать сценарий «Выполнение заданий на перенос документа», который ищет невыполненные задания по задачам, созданным по ТМ «Запрос возврата документа из ФХ» и выполняет их на главном сервере.
Сценарий может выполняться как вручную, так и при помощи назначенных заданий Windows по расписанию от имени служебного пользователя или любого другого пользователя с правами администратора. Код следующий:
Search = Searches.Load("JOB_SEARCH")
Criterion = Search.SearchCriteria.Add("StandardRoute")
Criterion.Add(Конст('GetDocRouteCode'))
Criterion = Search.SearchCriteria.Add("JobState")
Criterion.Add("В работе")
SearchJob = Search.Execute
foreach JobInfo in SearchJob
Job = Jobs.GetObjectByID(JobInfo.ID)
Job.Perform
endforeach
После переноса документа инициатор задачи получает уведомление: документ получен, с ним можно работать.
Для настройки переноса документа реализован специальный сценарий, при помощи которого можно задать значения констант:
В архиве:
Авторизуйтесь, чтобы написать комментарий