FILE_NAME = "CreatedFromScaner" // Вид L_KIND = LoadString('REFSINGULAR_Д000035'; 'CRM') // Наименование L_NAME = LoadString('DIRSTR_732'; 'COMMON') // Заполните параметры документа L_EDOC_PARAMS = LoadString('DIR6A4BC950_F47F_4518_98C7_E983742BFF68'; 'RM') // Тип карточки L_EDOC_TYPE = LoadString('DIRSTR_221'; 'EDM') // Задать лист соответствия вида РКК и константы с ВЭД и наименованию ВЭД // чтобы заоплнить ВЭД по умолчанию в диалоге параметров создания документа ViewNameList = CreateList() ViewNameList.Add("Входящий"; ArrayOf('RMIncomingRRCScanEDocKind'; 'Письмо входящее')) ViewNameList.Add("Исходящий"; ArrayOf('RMOutgoingRRCScanEDocKind'; 'Письмо исходящее')) ViewNameList.Add("Внутренний"; ArrayOf('RMInternalRRCScanEDocKind'; '')) RRCType = Object.ПризнакДок ScanEDocKindArray = ViewNameList.ValueByName(RRCType) ScanEDocKindConstName = ScanEDocKindArray[0] ScanEDocKindCode = КонстЗнач(ScanEDocKindConstName; '') // Если в константе не задан ВЭД, то искать по наименованию if not Assigned(ScanEDocKindCode) and Assigned(ScanEDocKindArray[1]) // Найти ВЭД по наименованию EDocKindRef = CreateReference('ВЭД'; ArrayOf(SYSREQ_NAME; SYSREQ_CODE)) AddWhere = EDocKindRef.AddWhere(Format('%s.%s like "%%%s%%"'; ArrayOf( EDocKindRef.SQLTableName; EDocKindRef.Requisites(SYSREQ_NAME).SQLFieldName; ScanEDocKindArray[1]))) EDocKindRef.Open if EDocKindRef.RecordCount > 0 ScanEDocKindCode = EDocKindRef.SYSREQ_CODE endif EDocKindRef.Close EDocKindRef.DelWhere(AddWhere) endif // Запросить параметры для создаваемого документа Data = InputDialog( Format('*%s|*%s'; ArrayOf(L_KIND; L_NAME)); Format('%s|%s'; ArrayOf(ScanEDocKindCode; Object.Requisites('Содержание').AsString)); 'Аналитика:ВЭД|Строка:120'; L_EDOC_PARAMS) EDocKindCode = SubString(Data; '|'; 1) EDocName = SubString(Data; '|'; 2) // Проверить сколько ТКЭД доступно для выбранного ВЭД EDocKind = References.ВЭД.GetObjectByCode(EDocKindCode) EDocTypeWithKind = EDocKind.DetailDataSet(2) EDocTypeCount = EDocTypeWithKind.RecordCount // Если доступно больше 1 ТКЭД, то вывести диалог для выбора if EDocTypeCount > 1 EDocTypes = '' EDocTypeList = CreateList() foreach EDocType in EDocTypeWithKind EDocTypeTitle = EDocType.Requisites('ТипЭлДокТ2').DisplayText EDocTypes = AddSubString(EDocTypeTitle; EDocTypes; ',') EDocTypeList.Add(EDocType.ТипЭлДокТ2; EDocTypeTitle) endforeach EDocTypeTitle = InputDialog( Format('*%s'; L_EDOC_TYPE); ; Format('Признак:%s'; EDocTypes); L_EDOC_PARAMS) EDocTypeCodeIndex = EDocTypeList.IndexOf(EDocTypeTitle) EDocTypeCode =EDocTypeList.Names(EDocTypeCodeIndex) else EDocTypeCode = EDocTypeWithKind.ТипЭлДокТ2 endif // Путь к временному файлу TempFolderPath = GetTempFolder() FilePath = Format("%s%s.tiff"; ArrayOf(TempFolderPath; FILE_NAME)) if FileExists(FilePath) Index = 1 FilePath = Format("%s%s_%s.tiff"; ArrayOf(TempFolderPath; FILE_NAME; Index)) while FileExists(FilePath) Index = Index + 1 FilePath = Format("%s%s_%s.tiff"; ArrayOf(TempFolderPath; FILE_NAME; Index)) endwhile endif try // Сканировать файл во временный документ DocumentSuccessfullyScanned = ServiceFactory.ScanToFile(FilePath; iffTIFF; 1; TRUE; im8bGrayscale) except Raise(CreateException("EDIRInvalidUserAction"; LoadString('DIR7FDE1F1D_F998_409B_B399_E49F28F2B9A4'; 'RM'); ecWarning)) endexcept if not DocumentSuccessfullyScanned Raise(CreateException("EDIRInvalidUserAction"; LoadString('DIR7FDE1F1D_F998_409B_B399_E49F28F2B9A4'; 'RM'); ecWarning)) endif // Записать в реестр код РКК, чтобы автоматически заполнить нужные реквизиты RRCCode = Object.Requisites(SYSREQ_CODE).AsString РеестрЗапись('HKEY_CURRENT_USER\Software\Computer\DIRECTUM\Параметры сценариев\Создание эл. док. из РКК'; 'SourceRKK'; RRCCode) //**************************************************************************** // Сибгатуллин А.А. - 15.08.2012 // Имеем TIFF-файл в FilePath. Попробуем его преобразовать в PDF DCTSConvertToPDFWSDL = GetAssignedConst("DCTSConvertToPDFWSDL") PDFFilePath = Replace(FilePath; ".tiff"; ".pdf") ConvertingToPDFFailed = FALSE try DCTSConvertFileToPDF(DCTSConvertToPDFWSDL; FilePath; PDFFilePath) except ConvertingToPDFFailed = TRUE endexcept // Создать документ из файла. Если возникла ошибка, то сохраняем TIFF. if ConvertingToPDFFailed ScannedDoc = EDocuments.CreateNewFromFile(EDocTypeCode; EDocKindCode; GetEditorCodeByExtension('tiff'); FilePath; FALSE) else ScannedDoc = EDocuments.CreateNewFromFile(EDocTypeCode; EDocKindCode; GetEditorCodeByExtension('pdf'); PDFFilePath; FALSE) // ScannedDoc = EDocuments.CreateNewFromFile(EDocTypeCode; EDocKindCode; GetEditorCodeByExtension('tiff'); FilePath; FALSE) endif //**************************************************************************** // Заполнить наименование: для разных ТКЭД в разные поля if EDocTypeCode == 'IncomingInvoiceForPayment' ScannedDoc.String = EDocName else if EDocTypeCode == 'ДГД' ScannedDoc.Дополнение2 = EDocName else if in(ArrayOf('ЗВЛ'; 'ПСВ'; 'ПКК'; 'ПКО'; 'АХД'; 'IncomingClaimByCitizen'); EDocTypeCode) ScannedDoc.Дополнение3 = EDocName else ScannedDoc.SYSREQ_EDOC_NAME = EDocName endif endif endif // Сохранить документ try ScannedDoc.Save except // Если сохранить не удалось - например, заполнены не все обязательные поля, то показать карточку пользователю ScannedDoc.Form.ShowModal endexcept // Если не нажата кнопка 'Отмена' if ScannedDoc.DataSet.RecordCount > 0 // Связать документ с РКК EDocuments.BindTo(Object.Info; ScannedDoc.Info) // Открыть документ L_EDOC_OPEN = LoadString('DIRSTR_159'; 'EDM') // Открыть карточку документа L_EDOC_CARD_OPEN = LoadString('DIR2A75A208_2563_4543_A760_66C21B3EAC9F'; 'RM') // Настроить права доступа L_EDOC_ACCESS_RIGHTS = LoadString('DIR51394371_F2FD_41AF_B55B_88992FB2CB41'; 'RM') // Вывести сообщение о создании документа Button = MessageBoxEx(INFORMATION_CAPTION; // 'Документ успешно отсканирован и связан с РКК.' LoadString('DIRCEE66B98_428A_4102_859F_72F2C6B3F7A2'; 'RM');; Format('%s|%s|%s'; ArrayOf(L_EDOC_OPEN; L_EDOC_CARD_OPEN; L_EDOC_ACCESS_RIGHTS)); ; ; ; cbsCommandLinks; L_EDOC_OPEN;) if Button == L_EDOC_OPEN // Открыть на редактирование документ ScannedDoc.Open(TRUE; 1) endif if Button == L_EDOC_CARD_OPEN // Показать карточку документа ScannedDoc.Form.ShowModal endif if Button == L_EDOC_ACCESS_RIGHTS // Нажать кнопку Права доступа ScannedDoc.Form.Actions.FindAction('&Права доступа').Execute // Сохранить документ try ScannedDoc.Save except ScannedDoc.Form.ShowModal endexcept endif endif ScannedDoc = nil DeleteFile(FilePath) DeleteFile(PDFFilePath)