Под учетной записью Администратора (Supervisor) не видно кнопки экспорта в Excel. Перерыл все настройки - не нашел.

Нравится

8 комментариев

Здравствуйте, Игорь!

Проверьте, пожалуйста, что на ПК установлен MS Excel.

Добрый день, Сергей.

Спасибо, Excel был установлен. Версия 2013.

Игорь, внесите в конфигурацию эти изменения.

Наталия, добрый день.
Для эксель 2013 нужна новая версия, поставил офис 2010, кнопок не появилось...

Здравствуйте, Игорь!

Девайте попробуем локализировать проблему:

1) Данная проблема воспроизводится только на одной машине? То есть если зайти под Supervisor на другом ПК та же ситуация?
2) В системных настройках есть настройка "GridCanExport", если она активирована пользователи могут выгружать данные?
3) Настроена ли интеграция Terrasoft и MS Office? В корневой папке, где лежат бинарные файлы, есть приложение TSMSOfficeConfig, проверьте установлены ли чекбоксы интеграции.
4) Если на другой машине можно экспортировать данные, то необходимо смотреть в сторону локальной среды. Тогда следует проверить пункт №3

Добрый день, Сергей.

Спасибо за развернутый ответ! Проблему удалось решить. убиранием и просталением заново "GridCanExport".

Игорь, описание как добавить в реестр колонку есть здесь.

Наталия, спасибо!

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

Кто-нибудь делал интеграцию с 1С 8.3
Возможно ли это? Есть готовая инструкция? Или может в новой версии Terrasoft XRM (для Firebird) появилась такая возможность?

Нравится

3 комментария

Здравствуйте!
Официально пока нет поддержки интеграции с 1С 8.3, но Вы можете попробовать использовать утилиту интеграции , добавив свою версию в перечисление "enm_1CVersion".

А встроенной, проверенной и гарантированной авторами программы Terrasoft XRM интеграции не будет? Хотя бы в следующих версиях?

linuxmasterz, интеграция обязательно будет, но пока не могу сориентировать по срокам.

Показать все комментарии
Странно, очень странно, что в такой замечательной CRM нет банальной выгрузки в платформонезависимый формат табличных данных CSV:http://ru.wikipedia.org/wiki/CSV Очень хотелось бы такой нехитрый функционал для экспорта данных из Terrasoft XRM в этом формате данных.
2 комментария

Добрый день!

Прошу уточнить, о ккой системе идет речь?
Дело в том, что в BPMonline данная функция уже реализована и выгрузка данных происходит именнов CSV формат.

Если нужно в конкретном разделе, можно добавить вручную.

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

Здравствуйте, меня интересует или есть возможность создавать excel отчеты в BPMOnline 5.4 ?
(Печатные формы и последующую конвертацию в excel не предлагать, в силу того что там изначально нарушено форматирование).
Имееться в виду возможность в скрипте описать файл или какимто другим способом.
Пробывал использовать csv файлы, но в них нельзя применять форматирование и обьеденение строк.

Нравится

8 комментариев

Здравствуйте, Игорь!
Да, есть возможность сделать такую доработку.
Вам нужно использовать Open XML SDK.
Для использования нужно просто подключить namespace DocumentFormat.OpenXml:

Вот конкретный пример использования:
здесь формируется .xlsx файл с колонками объекта, выбранного в lookup-поле

Page.BaseMessagePanel.Clear();
if (string.IsNullOrEmpty(SchemaName)) {
	Page.BaseMessagePanel.AddMessage(WarrningMessage, UnableSelectObjectMessage, MessageType.Warning, true);
	return true;
}
Page.Response.ClearHeaders();
Page.Response.ClearContent();
string fileName = SchemaName;
var instance = UserConnection.EntitySchemaManager.GetInstanceByUId(SchemaId);
if (instance != null) {
	fileName = instance.Caption.ToString();
}
Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
 
List<double> columnWidthsList = new List<double>();
using (MemoryStream stream = new MemoryStream()) {
	using(SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)) {
		// Add a WorkbookPart to the document.
        var workbookpart = spreadsheetDocument.AddWorkbookPart();
        workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
 
        // Add a WorksheetPart to the WorkbookPart.
        var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
        var workbookStylesPart = workbookpart.AddNewPart<WorkbookStylesPart>(); 
		worksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
 
        // Add Sheets to the Workbook.
        OpenXmlSpreadsheet.Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<OpenXmlSpreadsheet.Sheets>(new OpenXmlSpreadsheet.Sheets());
 
        // Append a new worksheet and associate it with the workbook.
		string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart);
		string sheetName = fileName;
        OpenXmlSpreadsheet.Sheet sheet = new OpenXmlSpreadsheet.Sheet() {
			Id = relationshipId,
            SheetId = 1, 
			Name = sheetName
        };
        sheets.Append(sheet);
 
        OpenXmlSpreadsheet.Worksheet worksheet = new OpenXmlSpreadsheet.Worksheet();
        OpenXmlSpreadsheet.SheetData sheetData = new OpenXmlSpreadsheet.SheetData();
        OpenXmlSpreadsheet.Row row = new OpenXmlSpreadsheet.Row();
 
		OpenXmlSpreadsheet.Cell currentCell;
		int columnCount = 0;
		var entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
		foreach (var column in entitySchema.Columns) {
			if (!column.DefValue.IsSystemValue && !column.Name.Equals("ProcessListeners")) {
				currentCell = new OpenXmlSpreadsheet.Cell();
				currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
				if (column.RequirementType == EntitySchemaColumnRequirementType.ApplicationLevel || column.RequirementType == EntitySchemaColumnRequirementType.DBLevel) {
					currentCell.StyleIndex = 3;
				} else {
					currentCell.StyleIndex = 4;
				}
				columnWidthsList.Add(CalculateWidth(column.Caption.Value));
	            currentCell.CellValue = new OpenXmlSpreadsheet.CellValue(column.Caption.Value);
				row.AppendChild(currentCell);
			}
		}
		sheetData.Append(row);
		row = new OpenXmlSpreadsheet.Row();
		for (int i=0;i<columnWidthsList.Count; i++) {
			currentCell = new OpenXmlSpreadsheet.Cell();
			currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
			currentCell.StyleIndex = 5;
			row.AppendChild(currentCell);
		}
		sheetData.Append(row);
		//Adding columns and specifeing width
		OpenXmlSpreadsheet.Columns columns = new OpenXmlSpreadsheet.Columns();
		uint j = 1;
		foreach (var w in columnWidthsList) {
			columns.Append(CreateColumnData(j, w));
			j++;
		}
		worksheet.Append(columns);
		//--
        worksheet.Append(sheetData);
 
		workbookStylesPart.Stylesheet = CreateStyleSheet();
        worksheetPart.Worksheet = worksheet;
		spreadsheetDocument.Close();
 
		stream.Seek(0, SeekOrigin.Begin);
		byte[] dataArray = stream.ToArray();
 
		Page.Response.BinaryWrite(dataArray);
		Page.Response.End();
	}
}
return true;

Андрей, большое спасибо !

Андрей, Добрый день!
Пытаюсь реализовать создание Excel отчета по вашему примеру. Не компилируется из-за ошибки с функцией CreateStyleSheet()
Не могли бы Вы привести пример данной функции, т.к. вероятно данная функция добавлена в methods, или ответить, что необходимо написать вместо данной функции.

Код без данной строки

workbookStylesPart.Stylesheet = CreateStyleSheet();

компилируется и отрабатывает(видно в Visual Studio), но файл на сохранение не выдается. Пишет ошибку "Время ожидания выполнения запроса истекло." Может ли быть проблема в данной строке?

Здравствуйте, Эмин!
Этот пример из страницы "ImportSettingsPage". Метод CreateStyleSheet() определен там же. На всякий случай прикладываю исходный код.

Добрый день!
Почти та же проблема, что и у Эмина, только у меня код отрабатывает без ошибок, но в конце файл не выдается на сохранение с ошибкой:
Время ожидания выполнения запроса истекло.
Action: Click
ControlId: PageContainer_btnOk
SubmitAjaxEventConfig: {"config":{"viewStateMode":"include","extraParams":{}}}

            Page.Response.ClearHeaders();
            Page.Response.ClearContent();
            Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Page.Response.AddHeader("Content-Disposition", "attachment; filename=TurnoverReport.xlsx");
 
            using (DB.DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    #region openxml
                    using (OpenXmlPackaging.SpreadsheetDocument spreadsheetDocument = OpenXmlPackaging.SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
                    {
//...тут все без ошибок
                    }//using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create
                    #endregion
 
                    stream.Seek(0, SeekOrigin.Begin);
                    byte[] dataArray = stream.ToArray();
 
                    Page.Response.BinaryWrite(dataArray);
                    Page.Response.End();
 
                } //using (MemoryStream stream = new MemoryStream())
            } //using dbExecutor

версия 5.4
схемы из примера Андрея у меня в конфигурации нет

Здравствуйте, Лариса!
Вам нужно импортировать схему, которую я предоставлял, вызвать

workbookStylesPart.Stylesheet = CreateStyleSheet();

и тогда должно работать. В общем, если Вы вырезали из кода строки, из-за которых происходила ошибка компиляции, это не означает, что этот код не нужен, и без него не возникнет ошибки на этапе выполнения.
Приведите, пожалуйста, свой код в соответствие с приведенным примером.

Андрей, я вырезала свой очень длинный рабочий код :)

если я сохраняю stream в файл на диск, то получаю корректный отчет, т.е. проблема не в OpenXML, а в отдаче файла на сохранение

если я убираю весь код, связанный с

Page.Response

то ошибок нет

Спасибо за помощь :twisted:

Проблему решила. Если кому-то будет интересно - пишите.

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

Задать кодировку выгружаемого *.csv файла реестра можно в системной настройке CSVCodePage:

Нравится

Поделиться

10 комментариев

а что-то параметр utf-8 дал вообще странный результат

Владимир, не интригуйте, поделитесь скриншотом :)

Вот, что получается при экспорте с параметром utf-8

Это значит, что кодировка базы данных не utf8. Данная системная переменная предназначена для того, чтобы корректно выгружать данные в зависимости от кодировки, использользованной для разворачивания БД.

А какая кодировка базы данных BPMOnline On-Demand?

Добрый день, Владимир!

Кодировка базы данных on-demand utf-8.

Ранее наблюдалось подобное поведение при выгрузке в случае конфликта из-за использования английской локализации Windows. Попробуйте выполнить выгрузку на компьютере с русской локализацией. Также можно попробовать заменить параметр "Current location" на "Russian" в разделе {Clock, Language, and Region} в панели управления.

"Адасюк Валерий Викторович" написал:Ранее наблюдалось подобное поведение при выгрузке в случае конфликта из-за использования английской локализации Windows.

Погодите, зачем тогда utf-8, если корректность выгрузки зависит от локализации Windows?
В таком случае, если поменять локализацию Windows на русскую, то будут некорректно выгружаться данные с латышской кодировкой.

Этот вариант предлался как обходное решение при необходимости выгрузки реестра. После чего можно изменить параметр обратно.
Как еще один вариант можно открыть выгружаемый файл с помощью Notepad ++ и уже в блокноте выберите параметр {Convert to utf-8}.

Интересно, а это так и осталось как обходное решение? Та же проблема с utf-8 наблюдается на 7.6

Здравствуйте, Владимир!

Эта ошибка связана с тем, что при открытии CSV-файла Excel не понимает, какую кодировку использовать при отображении. Это довольно распространенная проблема (Подробнее про ошибку), которая решается добавлением маркера последовательности байтов при формирования файла с нашей стороны. Работоспособность гарантируется для версий Excel 2007 и выше.

Есть несколько путей решения данного обращения, который Вы можете выбрать:
- Внести исправления схему ReportHelper. Тело метода заменить на исправленный вариант (добавил во вложения);
- В крайнем случае, т.к. ReportHelper поддается замещению, его поведение можно изменить в пользовательских пакетах. Подробнее в статье - SDK

Хотелось бы отметить, что формат CSV является универсальным, чтобы не завязываться на конкретный софт. Если реализовать подобное, чтобы Excel читал правильно, то CSV файлы с нестандартными символами (чешский и т.д.), например, станут неправильно открываться на Mac (CSV и Mac).

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

Всем добрый день! Возникла необходимость импортировать существующие конфигурационные единицы в формате Excel в БД bpm online. В версии которая есть у меня данная возможность стандартными методами не предусмотрена. Подскажите пожалуйста как это можно сделать?

Нравится

3 комментария

Пожалуйста, уточните версию продукта и сам продукт (пример BPMonline CRM 5.4.0.195 )

"Sergey Karpenko" написал:

Пожалуйста, уточните версию продукта и сам продукт (пример BPMonline CRM 5.4.0.195 )

BPMonline ServiceDesk, Версия 5.4.0.591

Добрый день, Александр Васильевич.
На данный момент реализована возможность импорта из Excel только Контактов и Контрагентов. В работе департамента разработки функциональность импорта Лидов. Возможность импорта других сущностей может быть реализована в рамках проектной доработки.

Если Вам необходимо, сообщите нам, пожалуйста, о необходимости оценки такой доработки для внедрения в Вашу конфигурацию.

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

Задача:
Экспорт отчета FastReport в деталь Файлы в формате PDF для выделенных записей в реестре
Решение
1. В ShowSelectedRecordsReport добавляем SetAttribute(ReportPreviewer,'GridDatasetIDs',GridDatasetIDs);

function ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode,
        GridDatasetIDs, FilterForm) {
        var Report = Services.GetNewItemByUSI(ReportCode);
        var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
        var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer');
        var ReportDataset = Services.GetNewItemByUSI(FilteredDatasetCode);
        SetAttribute(ReportPreviewer, 'Report', Report);       
        var Select = GetSelectQueryPrimarySelect(ReportDataset.SelectQuery);
        var Filters = Select.Filters;
        Filter = GetSelectQueryFilterByCode(ReportDataset.SelectQuery, 'IDs');
        if (!Assigned(Filter)) {
            Filter = Filters.CreateIncludeFilter();
            Filter.Code = 'IDs';
            Filters.Add(Filter);
                Filter.TestExpression =
                        Filter.CreateFieldFilterExpression();
                Filter.TestExpression.TableAlias =
                        Select.FromTableAlias;
                Filter.TestExpression.Field =
                        Select.FromTable.Fields.ItemsByName('ID');
        }
        var Enabled = (GridDatasetIDs.length > 0);
        ApplyDatasetIncludeFilter(ReportDataset, 'IDs', GridDatasetIDs, Enabled);              
        if (Assigned(FilterForm)) {
                SetAttribute(ReportPreviewer, 'FilterForm', FilterForm);
                SetAttribute(ReportPreviewer, 'ShowFilterForm', true);
        }
       

        SetAttribute(ReportPreviewer,'GridDatasetIDs',GridDatasetIDs);

       
        ReportPreviewer.Build();
        ReportPreviewer.Prepare();  
        ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset;
}

2. В wnd_BaseFastReportPreviewScript дописываем

function  wnd_BaseFastReportPreviewOnClose(Window) {
         if (Window.ComponentsByName('frpMain').Report.Caption == 'Коммерческое предложение') {
          var GridDatasetIDs = GetAttribute(Window, 'GridDatasetIDs');
         var frpMain =  Window.ComponentsByName('frpMain');//ReportPreviewer.ComponentsByName('frpMain')           ;
                var TempFileName = System.CreateObject('TSObjectLibrary.Value');
                var FileNameStr = frpMain.Report.Caption;
                var Extension = '.pdf';
                TempFileName.Value = GetTemporaryFileName(FileNameStr + Extension, true);
                frpMain.Export(retPDF, TempFileName, false);
               
                for (var i=0 ; iGridDatasetIDs.length; i++)
                {
                  var ID = Connector.GenGUID();
                  var Dataset = Services.GetNewItemByUSI('ds_Files');
                  var DataFieldName = 'FileData';
                               //пишем файл в базу...
                               Dataset.Append();
                               Dataset.Values('ID') = ID;
                               //тип - файл
                               Dataset.Values('ItemTypeID') = '{39A5B367-4A7A-473E-8F74-26977CB6DB67}';
                               Dataset.Values('Link') = FileNameStr+ Extension;
                               Dataset.Values('Revision') = 1;
                               var FileSize = GetFileSize(TempFileName.Value);
                               if (FileSize > 0)
                               {
                                    Dataset.Values('FileSize') = FileSize;
                               }
                               SaveFileToDataset(TempFileName.Value, Dataset, DataFieldName);
                               Dataset.Post();
                               var FileID = ID;
                                               //получили Documents, теперь формируем полное имя сервиса insert query
//                                           IsertQueryLinkUSI = IsertQueryLinkUSI + 'Invoice'//Temp[1].substring(0, count);
                                               //и получаем экземпляр данного сервиса
                                               var InsertQuery = Services.GetNewItemByUSI('iq_FileInOffering');
                                               //заполняем параметры запроса        
                                               var ColumnsValues = InsertQuery.ColumnsValues;
                                               ColumnsValues.Items(1).Value = FileID;
                                               ColumnsValues.Items(2).Value = GridDatasetIDs[i];
                                               var IDs = Connector.GenGUID();
                                               ColumnsValues.Items(0).Value = IDs;
                                               //выполняем
                                               InsertQuery.Execute();
                             
                }
        }
       
        frpMain.Cancel();
}

Комментарий:
Мы делаем экспорт на событии закрытия пред просмотра отчета, так необходимо делать так как на OnShow, отчет еще не успевает сформироваться.
В данном примере в экспорт в деталь будет только для отчета с названием 'Коммерческое предложение' в деталь продукты (iq_FileInOffering) , если нужно выгружать все отчеты, уберите проверку.
Аналогичный код можно кинуть в ShowSelectedRecordsReport, в конце функции, но будет беда когда к отчету прикручено окно фильтрации, а отчет то не сформировался, и писать нечего, поэтому решено писать на событии закрытия предпросмотра.

Пожелание по улучшению:
1.Сделать универсальную подстановку InsertQuery, в духе того как это сделано тут Прикрепить отчет на деталь "Файлы" сразу после генерации Word отчета
2.Проверку делать не по Window.ComponentsByName('frpMain').Report.Caption а по USI

Нравится

Поделиться

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

Доброго времени суток.
Задача: Корректно сохранять в Excel древовидный реестр.
В моем реестре есть поле Номер, вид следующий 000001.
Подчиненные к нему записи имеют вид 000001-1, 000001-2, 000001-3 ....
При выгрузке в Excel (кнопка с дискеткой в гриде), сначала выгружаются все корневые записи (вида 000001) после чего все подчиненные (000001-1, 000001-2, 000001-3 ....) т.е в файле Excel имеем следующую картину

000001
000002
000003
...
000001-1
000001-2
000001-3
000002-1
000002-2
000002-3

что есть не хорошо. Я понимаю что кнопка сохранения в Excel заложена в бин. файлах. Меня интересует возможность при сохранении сортировать колонки по убыванию, так как это поможет получить вид

000001
000001-1
000001-2
000001-3
000002
000002-1
000002-2
000002-3
000003
...

в результирующем файле.
Просьба подсказать варианты решения корректного экспорта древовидного реестра.

Кофигурация: Terrasoft 3.3.2.157
Бин. файлы: Terrasoft 3.3.2.268

Нравится

6 комментариев

Вариантом решения я вижу создание отдельной кнопки, в которой бы вызывалась базовая логика экспорта, с предварительным кодом установки сортировки по колонке.

Добрый день!

Решение в создании окна с гридом, которое будет отображать данные Memory Dataset'a. Сам набор данных необходимо заполнять так, как Вы хотите его видеть при экспорте. Экспорт производить уже в созданном реестре.

Добрый день Игорь,
У меня уже есть древовидный грид который отображает корректно данные с таблицы, проблема в том что в Terrasoft не корректно реализован экспорт в Excel при работе с древовидным реестре.

Зададим вопрос команде разработки :) Возможно ли это в принципе..

Команда разработки знает об этой проблеме, задача будет проанализирована при построении списка работ на следующую версию (3.4.2 или 3.5.0).
На текущий момент экспорт древовидного реестра не реализован.

Дело в том, что данные в датасете отсортированы совершенно по-другому, чем мы видим их в дереве, отсортирован только первый уровень дерева. Все остальное делается при отображении: у каждого родительского элемента строятся его подчиненные и т.д. Понятия древовидного датасета нет, только его древовидное отображение.

Ситуация понятна, спасибо Игорь.

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

Может возникнуть необходимость дать права на экспорт записей и на печать реестра не только администраторам, но и некоторым пользователям. Для решения вопроса можно воспользоваться следующими действиями:

1. В системных настройках установить значение «Ложь» для GridCanExport и GridCanPrint (системных настройках разрешения экспорта и печати реестра).

/system/files/1_50.png

2. Запусть TSAdministrator.
3. Открыть запрос sq_Contact.
4. Запустить предпросмотр (нажав на иконку с линзой).

/system/files/4_12.png

5. Выполнить запрос (нажав на зеленую стрелочку):

/system/files/5_11.png

6. Скопировать ID контакта пользователя, которому Вы хотите дать возможность экспорта.

/system/files/6_9.png

7. Открыть скрипт scr_BaseGridAreaUtils.
8. Закомментировать текст в функции InitializeDataGridExport (на скриншоте выделен зеленым цветом).
9. Добавить следующий код в показанном на скриншоте месте:

       if (Connector.CurrentUser.ContactID == '{8435FE2B-C825-40ED-A5D3-4BE350309B26}') {
                 GridArea.CanPrint = !Connector.Attributes(GridCanPrintName);
                 GridArea.CanExport = !Connector.Attributes(GridCanExportName);
       }

else
         {
         
                 GridArea.CanPrint = !!Connector.Attributes(GridCanPrintName);
                 GridArea.CanExport = !!Connector.Attributes(GridCanExportName);      
         
          }

Где вместо 8435FE2B-C825-40ED-A5D3-4BE350309B26 необходимо подставить ID, который копировался в пункте 6.

/system/files/9_5.png

10. Сохранить изменения и проверить работоспособность.

Нравится

Поделиться

2 комментария

В новом варианте проверка на админство исчезает?
И проверка на установленный Excel?

Нет, проверка на Excel никуда не делась. А проверка на админство там, где описано.

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

Помимо встроенной стандартной функции просмотра и печати, в компоненте exG2antt, который используется для отображения диаграммы Ганта, существуют две возможности сохранения данных:
1. EMF формат.
Можно экспортировать все содержимое в EMF формат, который в дальнейшем сохранить в любом графическом формате.
Например, добавить в окно wnd_ProjectGanttArea кнопку (компонент Button) под названием btnCopyData и заголовком «Скопировать данные».
В теле функции обработки события OnClick прописать код:

function btnCopyDataOnClick(Control) {
                  acxGanntDiagramm.ActiveXObject.Copy();
}

При нажатии на эту кнопку, все содержимое диаграммы Ганта будет скопировано в буфер обмена в формате EMF. Затем можно вставить содержимое буфера, например, в MSPaint и сохранить в любом формате. В результате, изображение будет без обрезаний и уменьшения.

2. XML формат
Можно также сохранять все данные диаграммы в XML. Это реализовывается следующей командой:

acxGanntDiagramm.ActiveXObject.SaveXML('С:\SampleFileName.xml');

Данный вариант более гибкий, но требует, чтобы дополнительно была реализована возможность загрузить данный xml-файл в такой же компонент exG2antt.
Для этих целей можно разработать простое приложение, которое будет содержать в себе ActiveX компонент exG2antt и сможет загружать и отображать содержимое XML.

Нравится

Поделиться

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