Копирование детали "Файлы" вместе с карточкой

Недавно пользователи попросили добавить функцию копировать файлы вместе с карточкой библиотеки (по объективным причинам это необходимо).

В службе поддержки порекомендовали использовать пример копирование договора, чему я и последовал.
В скрипте scr_DocumentUtils, на примере функции CopyOfferingInItemDetail, создал свою:

/* Функция копирование детали файлы: */

function CopyFilesInItemDetail(SourceFileInItemDatasetCode, //источник
    DestinationFileInItemDatasetCode, //назначение
    SourceParentItemIDFieldName,
    DestinationParentItemIDFieldName, SourceItemID, DestinationItemID) {
    var SourceItemName = GetItemNameByParentItemIDFieldName(
                SourceParentItemIDFieldName);
        var DestinationItemName = GetItemNameByParentItemIDFieldName(
                DestinationParentItemIDFieldName);
        if (SourceItemName == DestinationItemName) {
                var Message = FormatStr(CopyItemDetailConfirmation, "Файлы");
        } else {
                var Message = FormatStr(CopyItemDetailFromItemToItem, "Файлы",
                        SourceItemName, DestinationItemName);
        }
        var SourceDataset = GetSingleItemByCode(SourceFileInItemDatasetCode,
                'FileDetailSource'); //источник
        SourceDataset.FetchRecordsCount = -1;
        var DestinationDataset = GetSingleItemByCode(
                DestinationFileInItemDatasetCode, 'FileDetailDestination'); //назначение
        DestinationDataset.FetchRecordsCount = -1;
        SourceDataset.DisableEvents();
        DestinationDataset.DisableEvents();
        try {
                ApplyDatasetFilter(SourceDataset, SourceParentItemIDFieldName, SourceItemID,
                        true);
                EnableDatasetFields(SourceDataset, true);
                EnableDatasetFields(DestinationDataset, true);
                SourceDataset.Open();
                if (IsDatasetEmpty(SourceDataset)) {
                        SourceDataset.Close();
                        return;
                }
                if (ShowConfirmationDialog(Message) != wmrYes) {
                        SourceDataset.Close();
                        return;
                }
                CopyTreeDetail(SourceDataset, DestinationDataset,
                        SourceParentItemIDFieldName, DestinationParentItemIDFieldName,
                        DestinationItemID);
        } finally {
                SourceDataset.EnableEvents();
                DestinationDataset.EnableEvents();
        }
}

/* Функция копирование детали файлы END */  

Затем, для wnd_LibraryEditScript подключил scr_DocumentUtils и прописал:

/* Функция копирование детали файлы: */

function ProcessCopyFilesDetail(Dataset) {
        var IsCopy = Self.Attributes('IsCopy');
        if (!IsCopy) {
            return;
        }
        var SourceFileInItemDatasetCode = 'ds_FileInLibrary';
        var DestinationFileInItemDatasetCode = 'ds_FileInLibrary';
        var SourceParentItemIDFieldName = 'LibraryID';
        var DestinationParentItemIDFieldName = 'LibraryID';
        var SourceItemID = Self.Attributes('SourceRecordID');
        var DestinationItemID = Dataset.Values('ID');
        CopyFilesInItemDetail(SourceFileInItemDatasetCode,
                DestinationFileInItemDatasetCode, SourceParentItemIDFieldName,
    DestinationParentItemIDFieldName, SourceItemID, DestinationItemID);
}

/* Функция копирование детали файлы END */

Но возникает ошибка, с которой не могу справиться:

"Необработанное исключение (требуется объект)"

и дебаггер выбрасывает на строчку SourceParentID = SourceParentIDDataField.Value;
в скрипте scr_DB.

Может кто поможет решить проблему? :smile:

Нравится

1 комментарий

деталь продукты - это дерево
а деталь файлы - это не дерево , из-за этого и происходит ошибка
попробуйте реализовать как в задачах , копирование контактов
scr_TaskUtils (CopyTaskContacts)

Показать все комментарии