Постановка задачи
В организации согласуется и отправляется на подписание во внешние организации большое количество договоров. Все договоры имеют одинаковый вид документа. Для единообразия все договоры отправляются на подписание в формате PDF. Перед отправкой документы экспортируются в специальный каталог файловой системы.
Решение
Автоматический экспорт документов в файловую систему с преобразованием в PDF можно сделать в прикладном сценарии системы DIRECTUM. Удобно настроить автоматический запуск сценария по расписанию (лучше настроить выполнение сценария в ночное время, чтобы не замедлять работу пользователей системы DIRECTUM). Сценарий будет искать все документы с заданным видом, изменявшиеся со времени последнего запуска сценария. Далее документы будут преобразованы в формат PDF – для каждого документа будет создана новая версия в PDF-формате. На последнем этапе PDF-версии документов будут экспортированы в заданный каталог файловой системы.
Сценарию необходимо передавать следующие параметры:
• | EDocKind – код экспортируемого вида документа в справочнике Виды документов; |
• | LastScriptRunTime – дата последнего запуска сценария; |
• | DocumentsFolder – каталог для экспорта документов. |
Для передачи параметров сценарию удобно создать запись в справочнике «Параметры запуска компонент», тогда при вызове сценария в параметрах командной строки достаточно будет передать код созданной записи.
Программный код
// Получить константу, содержащую адрес сервиса преобразования.
DCTSConvertToPDFWSDL = GetAssignedConst("DCTSConvertToPDFWSDL")
// Получить параметры сценария из справочника Параметры запуска компонент.
ListParams = GetComponentLaunchParams()
EDocKind = ListParams.ValueByName('EDocKind')
LastScriptRunTime = ListParams.ValueByName('LastScriptRunTime')
DocumentsFolder = ListParams.ValueByName('DocumentsFolder')
// Выполнить поиск документов с видом EDocKind,
// изменявшихся со времени LastScriptRunTime.
SearchDescription = Searches.Load('EDOCUMENT_SEARCH')
Criteria = SearchDescription.SearchCriteria
KindCriterion = Criteria.Add('ISBEDocKind')
KindCriterion.Add(EDocKind)
ModifyCriterion = Criteria.Add('ISBEDocModifyDate')
ModifyCriterion.AddRange(LastScriptRunTime; Today())
EDocumentList = SearchDescription.Execute
// Запомнить время выполнения сценария.
ScriptRunTime = Today()
// Преобразовать последние версии документов в PDF-формат.
foreach EDocumentInfo in EDocumentList
ConvertingFailed = FALSE
try
EDocument = EDocumentInfo.Document
DCTSConvertEDocumentToPDF(DCTSConvertToPDFWSDL; EDocument;; TRUE)
except
ConvertingFailed = TRUE
endexcept
if not ConvertingFailed
// PDF-версии документов экспортировать
// в подкатолог ConvertToPDFSuccess.
Versions = EDocument.Versions
VersionNumber = GetLastEDocumentVersionNum(EDocument)
FileName = Format('%s\ConvertToPDFSuccess\%s.%s';
ArrayOf(DocumentsFolder; EDocument.ID; Versions.ValueByName(
VersionNumber).Editor.Extension))
EDocument.Export(VersionNumber; FileName; False)
else
// Последние версии документов,
// для которых не удалось выполнить преобразование,
// экспортировать в подкаталог ConvertToPDFFailed.
Versions = EDocument.Versions
VersionNumber = GetLastEDocumentVersionNum(EDocument)
FileName = Format('%s\ConvertToPDFFailed\%s.%s';
ArrayOf(DocumentsFolder; EDocument.ID; Versions.ValueByName(
VersionNumber).Editor.Extension))
EDocument.Export(VersionNumber; FileName; False)
endif
endforeach
// Занести время запуска сценария в справочник Параметры запуска компонент.
// LaunchParamsCode – код записи справочника с параметрами сценария.
// Наименование параметра – реквизит Наименование (СтрокаТ).
// Значение параметра – реквизит Значение (ЗначПарамТ).
Reference = References.ПЗК.GetObjectByCode(LaunchParamsCode)
DataSet = Reference.DetailDataSet(1)
DataSet.Locate('СтрокаТ'; 'LastScriptRunTime')
DataSet.ЗначПарамТ = ScriptRunTime
Reference.Save
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |