Часто возникает задача загрузки данных определенной структуры в таблицы bpm'online.Решить эту задачу можно с помощью функциональности импорта из MS Excel, однако, в системе нет возможности настроить этот импорт единоразово и предоставить пользователям нужный доступ . Возможность сохранения настроек импорта в определенном разделе решила бы эту проблему. Сейчас, к сожалению, приходится извращаться

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

Здравствуйте, Алла!

Я передал Ваше пожелание аналитикам продукта.
Они рассмотрят возможность его реализации в одной из последующих версий программного продукта.

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

Здравствуйте!
Подскажите пожалуйста как реализовать возможность экспорта отчета FR в xlsx. Доступно только xls, хоть в программе и прописаны все версии офиса. По большей части нужно для автоматического формирования и сохранения отчета. Если указывать в названии файла расширение xlsx - файл создается, но не открывается (((( На скрине - пользовательский экспорт отчета в Microsoft Excel.
Версия ТС - 3.4.0.38.
Спасибо!

Нравится

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

Светлана, используемый в Terrasoft движок FastReport является сторонним компонентом, влиять извне на его работу не всегда есть возможность. Если он не поддерживает сохранение в XLSX, то нельзя.

Можно попробовать следующие обходные решения:

  • Сохранять файл в XLS, потом отдельно конвертировать файлы с помощью Microsoft OFC.
  • Полностью переписать построение отчёта, вместо FastReport использовать чисто программное формирование при помощи COM-объекта Excel, там можно и XLSX.

"Зверев Александр" написал: Если он не поддерживает сохранение в XLSX, то нельзя.

Судя по форумам, вполне поддерживает. Возможно, вопрос в используемой версии в TS

Печально(( движок FR тоже ведь не заменить?
Спасибо!

В Terrasoft встроена конкретная версия движка. Возможно, по ссылке более новая.

Версия FR 4.10.18

А Владимир привёл ссылку на 5.5.9.

Менять встроенный движок нельзя.

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

Добрый день,

Давно уже не программировал на BPM, поэтому возникло несколько вопросов:
1) Где посмотреть как создать деталь файлы и примечания для своего раздела?
2) Стоит задача - прочитать файл excel. Т.е. прикрепляем файл на деталь, потом при изменении статуса считываем этот файл (можно и просто сделать поле для файла и считывать при загрузке, не суть):
Задача минимум - вытащить значение из определенной ячейки, например С10.
Задача максимум - прошерстить полностью файл (например, в ячейках B10:B12 лежат параметры (могут в разнобой) и значения лежат в ячейках С)
Т.е.
Файл 1:
parameter1 40
parameter2 30
parameter3 20
А может быть файл 2:
parameter3 20
parameter1 40
parameter2 30
Как это сделать, где посмотреть?
3) Можно ли (вообще теоретически) сделать представление календаря на детале (пример на скриншоте)? Почитав форум я понял, что документации нет даже, чтобы сделать календарь для своего нового раздела, и надо просто брать и методом проб и ошибок делать. Но также интересует вопрос про календарь в детале: представление календаря может встать на деталь (сталкивался кто-то с этим?) или же календарь исключетельно для раздела и даже и не пытайся вставить его в деталь, не получится?

Нравится

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

Доброго времени суток, при создании своего раздела так же в пакете создается объект (допустим), раздел MyModule, то объект будет MyModuleFile.
Вам необходимо зарегистрировать деталь в таблице SysDetails.
В колонку DetailSchemaUId необходимо заинсертить UId схемы FileDetailV2 (если не ошибаюсь).
В колонку EntitySchemaUId необходимо указать UId объекта MyModuleFile (у вас будет другое название).
Ну про Caption думаю вы догадаетесь)
А потом через мастер можете добавить деталь на страницу.

По поводу Примечаний это не деталь, а строка с неограниченной длинной только со стилями)
Прикреплю два документа, там более подробные инструкции что, куда и как)

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

В этот праздничный день хочется немного рассказать об особенностях работы с bpm'online CRM в агробизнесе.
культуры

Допустим, приобрела сельскохозяйственная компания CRM и через Excel наполняет разделы и справочники, пользуясь импортом данных. Внезапно, после очередной заливки всё ломается, не работает даже страница логина в систему.
culture
Дело в том, что произвели импорт в системную таблицу SysCulture значений вроде «озимая пшеница».
Но культура, она не для «овощи там, рожь — вот это всё», а для информации о локалях и языках, например, «en-US» и «ru-RU».
После восстановления исходных значений в таблице и удаления лишних записей работоспособность сайта восстановилась.

Нравится

Поделиться

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

Доброго дня!
Подскажите пожалуйста, стоит задача сделать кнопку для импорта из excel файла в деталь раздела
Я вроде нашел пример, но пока что ничего не получается. Не могу понять в чем проблема, поскольку проходит все без ошибок, но позиции не импортируются.

function importQuote()
{

        var FileName = GetNewValue();
        if (!(System.OpenDialog(FileName, '*', EmptyStr, EmptyStr, EmptyStr))) {
                return;
        }
       
        var ExelApp = new ActiveXObject("Excel.Application");
        var WorkBook = ExelApp.Workbooks.Open(FileName.Value);
        var Sheet = WorkBook.ActiveSheet;
       
        var startRow = 2;
        var currentRow = startRow;
        var rate = Sheet.Cells(2, 12).Value;
       
        var OfferingInContractDS =  GetSingleItemByCode('ds_OfferingInOrderX',  'OfferingInOrderX');
        EnableDatasetFilters(OfferingInContractDS,  false);
        OfferingInContractDS.Open();

        var offeringsNotFound = 0;
        try {
                while(Sheet.Cells(currentRow, 12).Value != null)
                {
                        OfferingInContractDS.Append();
                        var num = Sheet.Cells(currentRow, 12).Value;
                        OfferingInContractDS('Name') = num;
                        var partNumber = Sheet.Cells(currentRow, 12).Value;
                        OfferingInContractDS('Description') = partNumber;
                       
                        OfferingInContractDS.Post();                                                   
                        currentRow++;
                }
        } finally {
                OfferingInContractDS.Close();    
        }
        dlData.Dataset.Close();
        dlData.Dataset.Open();
        WorkBook.Close();
       
        ShowWarningDialog('Загружено: ' + (currentRow - startRow));
}

Заранее спасибо!

Нравится

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

Может, у Вас просто Excel «не хочет» работать по ActiveX?
Если пройти пошагово в отладчике, то на какой строке виснет?

Я немного подправил скрипт и теперь вылетает ошибка:
"Ошибка выполнения метода 'btnImportOnClick'. Ошибка сохранения записи. Оригинальное сообщение об ошибке: The statement has been terminated.
Cannot insert the value NULL into column 'SpecificationID', table 'TSXRM3.dbo.tbl_OfferingInOrderX'; column does not allow nulls. INSERT fails «Call Stack»"
Хотя я вроде в эту колонку ничего не импортирую

import_test.xlsx

function importQuote()
{
 
	var FileName = GetNewValue();
	if (!(System.OpenDialog(FileName, '*', EmptyStr, EmptyStr, EmptyStr))) {
		return;
	}
 
	var ExelApp = new ActiveXObject("Excel.Application");
	var WorkBook = ExelApp.Workbooks.Open(FileName.Value);
	var Sheet = WorkBook.ActiveSheet;
 
	var startRow = 12;
	var currentRow = startRow;
	var rate = Sheet.Cells(12, 2).Value;
 
	var OfferingInContractDS =  GetSingleItemByCode('ds_OfferingInOrderX',  'OfferingInOrderX');
	EnableDatasetFilters(OfferingInContractDS,  false);
	OfferingInContractDS.Open();
 
	var offeringsNotFound = 0;
	try {
		while(Sheet.Cells(currentRow, 2).Value != null)
		{
			OfferingInContractDS.Append();
			var num = Sheet.Cells(currentRow, 2).Value;
			OfferingInContractDS('Name') = num;
			var partNumber = Sheet.Cells(currentRow, 3).Value;
			OfferingInContractDS('Description') = partNumber; 
 
			OfferingInContractDS.Post();							
			currentRow++;
		}
	} finally {
		OfferingInContractDS.Close();    
	}
	dlData.Dataset.Close();
	dlData.Dataset.Open();
	WorkBook.Close();
 
	ShowWarningDialog('Загружено: ' + (currentRow - startRow));
}

"Родненок Дмитрий Павлович" написал:Хотя я вроде в эту колонку ничего не импортирую

В том и дело. Вы не заполняете значением обязательное поле.

Понял, спасибо!
Теперь все импортирует!
Есть еще маленький вопрос:
У меня имеется поле с номером, который является автоинкрементом и храниться в системных настройках.
Каким образом я могу проставлять на все импортируемые файлы этот номер +1 и записывать последнее значение в системные настройки?Чтобы каждая позиция имела уникальный номер
И может быть сможете подсказать, как реализовать вложенность при импорте, поскольку деталь древовидная

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

Здравствуйте! Я в террасофте совсем новичок, только начинаю изучать. Версия ТС - 3.4.0.38. По форуму искала, вроде подходящего решения не нашла, либо не поняла что это "оно". Подскажите пожалуйста!
Была поставлена задача - по расписанию формировать файл с отчетом для Excel (есть аналог для работы пользователя в FR), выкладывать его в сеть и отправлять группе лиц.
Вроде как все решила через SQL, правда экселевский файл сформировала через spread xls на xml.
Несущественная проблема - при открытии на некоторых компьютерах ругается на несоответствие формата, с этим можно жить, но вот на телефонах этот файл не открывается в приложениях, но очень нужно.
В итоге встал вопрос о другом формате.. Возможно ли как то через sql или сам террасофт выполнить по расписанию формирование файла в формате xlsx или pdf (редактируемый)? Либо конвертацию сделать, может что-то вроде - открыть файл в sql через sp_OACreate 'Excel.Application', и сохранить его в xlsx..

Нравится

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

С помощью Terrasoft, также можно выполнить такую задачу, для этого необходимо на сервер создать задачу (Task Scheduler), которая будет запускаться по времени и вызывать Terrasoft командой TSClient.exe /wnd=wnd_ExportRep.

Где в окне wnd_ExportRep будет прописана логика экспорта.
Обратите внимание на сервисы scr_MSExcelLibrary, scr_MSExcelLibraryConsts, а также на сервис scr_UserReportCommon, в особенности на функцию GetExcelObject - которая возвращает Com объект на Excel.

Также можно изучить работу сервиса scr_ImportExcelWizardUtils, который автоматически создает отчеты в Excel, на основании его работы можете создать свой экспорт.

Хороший вариант! Спасибо! Правда мне очень много стоит изучить для реализации подобного..
А клиент терры будет открыватся на сервере или только процесс висеть? Если есть возможность подсказать подобные примеры решения буду очень признательна.

Пробовала запускать excel на террасофте через var ExcelApp = new ActiveXObject("Excel.Application");
но система выругалась на меня и клиент вылетел..

Можете взять мой пример запуска коннектора и создание Excel файла.
Алгоритм следующий:
1. Создайте файле с расширением js
2. Пропишите в нем следующий код:

function WSLog(LogText) {
	WScript.stdout.WriteLine(LogText);
}
 
function GetExcelObject() {
	var Excel = new ActiveXObject('Excel.Application');
	var Excel_wb = Excel.Workbooks.Add();
	Excel.Sheets(1).Name = "Данные";
	var SheetsCount = Excel.Sheets.Count;
	for (var i = 2; i <= SheetsCount; i++) {
		Excel.Sheets(2).Delete();
	}
	Excel.Visible = false;
	return Excel;
}
 
function Main() {
	var args = WScript.arguments;
	var ConfigurationName = "TS_3.4.1.113_XRM_SD_SoftKey_ENU_Tereshchuk";
	var AuthenticationMode = 1; //1 - DatabaseServer, 0 - Windows
	var UserName = "Supervisor";
	var UserPassword = "";
	var ExcelFileName = 'C:\\Temp\\TestExcel.xlsx';
	WSLog("Start!");
	var Connector =  new ActiveXObject('TSObjectLibrary.Connector');
	var Config;
	if (AuthenticationMode) {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode, UserName, UserPassword);
	} else {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode);
	}
	var Excel = GetExcelObject();
	Excel.Sheets(1).SaveAs(ExcelFileName);
	Excel.Visible = true;
	Connector.Logoff();
	WSLog("Finish!");
}
 
Main();

3. Создайте файл с расширением bat и пропишите в нем код:
%WinDir%/SysWOW64/cscript.exe /d D:\Projects\JS\RunTS.js

4. Запустите bat файл

Исходники: js.zip

Спасибо!
Так как задача была горящей, а 'Excel.Application' наотрез отказывается работать, временно решила через excelcnv.exe. Там правда очень много нюансов, за счет чего код получился совсем извращенным, но главное рабочим.. позже вернусь к приведению в нормальный вид ) попробую все-таки решить через террасофт по #1 предложенному ответу.

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

Добрый день!

При импорте огромного количества записей Excel в BPMOnline 7.6 (около 100000) возникает ошибка "Query execution timed out". Возможно ли решить данную проблему для импорта всех записей в одном файле?

Нравится

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

Илья, здравствуйте!

Ошибка означает, что отправили запрос и не дождались ответа от сервера. В результате приложение «свалилось» по таймауту.
В данном случае можно поступить следующим образом:

- обновиться до 7.7 (был оптимизирован процесс импорта);
- разбить файл для импорта на несколько частей (примерно по 2000 – 10000 записей).

Спасибо, Илья. Но ни один вариант мне не подходит. Так как импорт 100 тыс.записей - это тестовый, а реальный может и 500 тыс. достигать.

"Чубко Илья" написал:

Спасибо, Илья. Но ни один вариант мне не подходит. Так как импорт 100 тыс.записей - это тестовый, а реальный может и 500 тыс. достигать.

____________________________

С уважением, Чубко Илья

Илья, здравствуйте!

К сожалению, в приложении до версии 7.6 не позволяет загружать файл с большим объемом.
пользовтель Мотков Илья Вам предложил несколько вариантов.
Других вариантов на данный момент нет. Вы можете реализовать собственный импорт (например, с помощью SQL загружать на прямую в БД).

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

Добрый день, коллеги.

Пытаюсь решить одну проблему и столкнулся со странным поведением системы.

В нашей системе часто используется функционал загрузки данных из Excel. Наши клиенты присылают нам разнообразные данные, от банка приходит выписка в таком формате.
Загрузка данных с чтением из каждой ячейки - это медленный процесс, особенно если ячеек много.
Существует возможность сохранить диапазон листа Excel в массив и потом уже работать с массивом, что значительно ускоряет процесс. Но к сожалению, массив получается какой то странный и нормально обратиться к нему не получается. Кто нибудь сталкивался с подобной проблемой и есть ли решение?

Код примерно такой:

var ExlApp = new ActiveXObject("Excel.Application");
var WorkBook = ExlApp.Workbooks.Open(FileName);
var Sheet = WorkBook.Sheets(1);
var BankData = Sheet.UsedRange.Value;
// Вот здесь BankData и есть тот самый массив, но обратится к нему проблематично
// var Value = BankData[2][2] выдает ошибку о том что объект есть null или не является объектом
// да и BankData имеет тип Unknown. Хотя в студии его структура видна и данные как бы есть.

WorkBook.Close(false);
ExlApp.Quit();
delete ExlApp;

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

Нравится

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

Добрый день!
Это не мессив. В MSDN есть вся информация.
Sheet.UsedRange возвращает тип Range
Здесь все об этом типе
Такие вещи очень хорошо поискать снача в MSDN, а после можно найти решение на Stackoverflow

Я не писал что Sheet.UsedRange это массив.
А вот Sheet.UsedRange.Value возвращает массив, с которым чудесно можно работать в Delphi например.
Быстрая обработка данных Excel в Delphi
Благодарю за ссылку на MSDN :)

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

Добый день, уважаемые разработчики!
Пожалуйста, помогите решить задачу, которая на первый взгляд, кажется не сложной, но ни как у меня не поддается решению. Все перепробовал.
Как из открытой карточки Контакта выгрузить в excel-файл Полное имя контакта?
Допустим, я создал кнопку на карточке по нажатию на которую Полное имя контакта должно экспортироваться в ячейку файла excel. Пожалуйста, подскажите хотя-бы примерно какой код можно было бы прописать на событие onButtonClick ? Зараннее благодарю!

TS CRM 3.2.0.87

Нравится

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

Вопрос решил сам - вопрос снимаю

Можно пример кода?

С примером кода по выгрузке данных в Excel вы можете ознакомиться по ссылке.
Значение поля карточки можно получить из датасета карточки dlData.Dataset('название поля').

Создал кнопку на карточке ред. контакта.
Пример моего кода по нажатию кнопки на карточке(экспортирую три поля в файл EXPORT.xls). Код пишем в scr_ContactEdit:
function ButtonOnClick(Control) {

var ExcelApp = new ActiveXObject("Excel.Application");
var ExcelSheet = new ActiveXObject("Excel.Sheet");

ExcelSheet.Application.Visible = false;
var Dataset = dlData.Dataset;

ExcelSheet.ActiveSheet.Cells(1,1).Value = Dataset.Values('Communication4');
ExcelSheet.ActiveSheet.Cells(1,2).Value = Dataset.Values('Short');
ExcelSheet.ActiveSheet.Cells(1,3).Value = Dataset.Values('Dear');

ExcelSheet.SaveAs( "C:\EXPORT.xls" );
ExcelSheet.Application.Quit();

}

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

Добрый день! Довольно плохо работает с Office 2013. В админской части удалось найти массив-переменную с поддерживаемыми версиями Office и дописать туда 15.0. но беды не кончились. При формировании почти любого отчёта Excel вываливается ошибка "OLE error 80020102".
Как быть в такой ситуации?

Нравится

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