Вопрос

Добрый день!

 Нужно загрузить в систему объекты связанные с Контрагентом. Например, договоры.

мы можем подготовить 2 файла.

1 с данными о контрагентах, другой с данными о договорах.

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

можно ли настроить импорт так, чтобы поиск справочных полей был по кастомным полям, например, по ИНН и КПП?

то есть в файл по договорам добавляем 2 столбца и при загрузке по этим двум столбцам  находится потребитель

 

У меня такой же вопрос

1 комментарий
Лучший ответ

Насколько я знаю, то система позволит Вам обратиться к одному полю в контрагенте, чтобы определить его уникальность. Например, к полю ИНН. (но оно ведь не всегда уникально). Так что, придется по другому полю проверить уникальность или убедиться, что все ИНН уникальны. А потом, когда сопоставляю колонки договора при импорте с моим файлом excel, при выборе контрагента "проваливаюсь" в него плюсиком и ищу там ранее проимпортированное поле с кодом.

Насколько я знаю, то система позволит Вам обратиться к одному полю в контрагенте, чтобы определить его уникальность. Например, к полю ИНН. (но оно ведь не всегда уникально). Так что, придется по другому полю проверить уникальность или убедиться, что все ИНН уникальны. А потом, когда сопоставляю колонки договора при импорте с моим файлом excel, при выборе контрагента "проваливаюсь" в него плюсиком и ищу там ранее проимпортированное поле с кодом.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, здравствуйте.
Возник вопрос по импорту фото из Excel.
Есть ли сейчас такая возможность, либо какое-то обходное решение?
Заранее спасибо!

У меня такой же вопрос

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

Здравствуйте, Роман!

На текущий момент функционал импорта фото из Excel не реализован в базовой версии продукта.

Мы передали пожелание команде разработки для анализа возможности внедрения функционала в будущих версиях.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Как запретить "Роли" импорт в определенный раздел?

Есть раздел Контакты, роль должна мочь создавать их руками, но не должна мочь загрузить через импорт. При этом в раздел "Контрагенты" роль должна иметь доступ на импорт.

От того и вопрос, как ограничивать импорт по объектам (разделам)

У меня такой же вопрос

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

Здравствуйте, Евгений

Логика приложения работает таким образом, что можно либо разрешить импорт в приложение либо запретить его.

Запрет импорта в определенные объекты приложения не реализован.

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

Denys Diachenko,

А можно тогда ограничить список отображемых объектов при импорте для роли?

Пример:
Роль будет видеть в списке только раздел "Контрагент", а контакт просто не будет ему отображаться?

То есть нужен хитрый фильтр который в зависимости от роли показывает объекты в которые можно произвести импорт

Добрый день, Евгений. Оптимальный вариант решения вашей задачи - раздача прав доступа на объекты системы. Если необходима ситуация, когда у роли есть доступ к Контактам, но нет возможности их импорта - рекомендуем просто убрать у них возможность импорта, и раздать ее, например, только роли администраторов. Логика импорта находится в FileImportWizard, и в теории вы можете переопределить какие-то ее фрагменты через Ext.override, но на практике не рекомендуем выполнять подобные манипуляции чтобы не сломать базовую логику продукта.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени суток, есть вопрос следующего характера
У меня есть расширяющий модуль для FileDetailV2
Внутри него я получаю контент PDF документа (контент строкой)
Каким образом мне этот контент передать на FileApiService модуль в метод Upload что бы загрузить этот файл?
Если я загружаю руками документ то получаю в консоли POST запрос на

https://testDomain.bpmonline.com/0/rest/FileApiService/Upload?fileapi14996709535744&totalFileLength=47386&fileId=file_id&mimeType=application%2Fpdf&columnName=Data&fileName=20846491.pdf&parentColumnName=Document&parentColumnValue=parent_document_value&entitySchemaName=DocumentFile

И также интересно как в JS получить текущий entitySchemaName?

У меня такой же вопрос

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

Сформируйте аналогичный запрос со значениями колонок в url, и с данными файла в теле запроса средствами js.
Ответ на второй вопрос:

"Максим Шевченко" написал:file_id

Спаибо за Ваш ответ
Но в url есть значение file_id откуда мне его взять если файл еще не создан?

"Nickstery" написал:Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:
https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascri…

"Максим Шевченко" написал:
Nickstery пишет:

Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:
https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript

С формированием параметра понятно
Каким образом отправлять контент файла в теле запроса, это form-data по ключу определенному или передаеться как binary data?
Если я формирую запрос в Postman (приложение для отправки запросов) как приведено ниже

http://joxi.ru/V2VKJBwuxeDROA

Я получаю следующий ответ:

http://joxi.ru/L21bq0kh8Jx3dA

Есть где-то дока какой ендпоинт/модуль какие есть методы, и какие поля нужно отправлять что бы загрузить документ?
Не совсем понятно каким образом проиходит передача самого документа

Я набросал кусок кода, который получает контент файла, формирует BLOB и пытаеться отправить его на FilApiService Только я получаю ту же ошибку

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "arraybuffer";
http.onload = function(e) {
    if (this.status === 200) {
        var uInt8Array = new Uint8Array(this.response);
        var i = uInt8Array.length;
        var binaryString = new Array(i);
        while (i--)
        {
             binaryString[i] = String.fromCharCode(uInt8Array[i]);
         }
        var data = binaryString.join("");
 
        var http2 = new XMLHttpRequest();
        http2.open("post", "/0/rest/FileApiService/Upload?fileapi14998570381414&totalFileLength=47386&" +
        "fileId=*****&mimeType=application/pdf&columnName=Data" +
        "&fileName=20846491.pdf&parentColumnName=Document" +
        "&parentColumnValue=***&entitySchemaName=DocumentFile", true);
        http2.onload = function(e) {
             window.console.log("UPLOAD FILE OPERATION DONE");
             window.console.log(e);
        };
        http2.send(new Blob([data]));
 
        }
    };
http.send();

Разобрался:
Суть в том что при расширении FileDatailV2 (логично) мы унаследуем и методы оринильного модуля.
Можно не использовать FileApiService и не генерировать 100500 параметров а просто обойтись готовым решением, как это делает аплоад документа юзер, который находится в CRM.
Достаточно использовать FileDetailV2 -> onFileSelect метод и из строчного контента сгенерировать window.File
Пример как я это реализовал ниже:

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "blob";
var parent = this;
http.onload = function(e) {
    if (http.readyState === 4) {
    var blob = http.response;
    parent.onFileSelect([new window.File([blob], "UPLOADED.pdf")]);
    }
};
http.send();

Таким образом не нужно думать как приатачить документ в таблицу после его загрузи, это все делает модуль автоматически

Войдите или зарегистрируйтесь, чтобы комментировать
Идея

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

Ревью
1 комментарий

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

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

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

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

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

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Хотелось бы произвести каким либо способом - пакетный или массовый импорт схем выгруженных в формате MD-файлов. (т.к. их достаточно много)

PS: Подкупает, что экспорт схем - через мультиселект позволяет выгрузить сразу все выделенные схемы, но вот импорт почему-то работает исключительно по одному файлу за раз.

У меня такой же вопрос

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

Здравствуйте, Илья.

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

Подробное описание работы с утилитой и примеры вы можете найти по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-utilito….

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Подскажите, как лучше выполнить импорт данных из Access. Кроме обычных данных, таблицы содержат BLOB-поля. Каким образом их лучше всего перенести в bpm'online?

Спасибо!

У меня такой же вопрос

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

Если у Вас on-site, то можно в SQL Management Studio подключиться к Access как к linked-серверу и перенести данные SQL-запросами.

Владимир,

В случае наличия в Access только обычных данных, достаточно выполнить экспорт в MS Excel и последующих пользовательский импорт из MS Excel в bpm'online.
Если есть BLOB, тогда нужно переносить данные через интеграцию средствами СУБД либо по ODATA.

"Бондарь Наталия" написал:Если есть BLOB, тогда нужно переносить данные через интеграцию средствами СУБД либо по ODATA.

А если это on-demand, то можно подключиться к СУБД через какой-нибудь VPN или еще как?

"Владимир Соколов" написал:
Бондарь Наталия пишет:

Если есть BLOB, тогда нужно переносить данные через интеграцию средствами СУБД либо по ODATA.

А если это on-demand, то можно подключиться к СУБД через какой-нибудь VPN или еще как?

Владимир, из-за политики безопасности нет возможности подключиться к приложения, которые находятся в облаке.

Можно залить данные в свою базу с копией таблиц боевой базы с идентичной структурой. А потом передать её и попросить перенести, приложив SQL-запросы с Insert-Select по этим таблицам.

"Зверев Александр" написал:Можно залить данные в свою базу с копией таблиц боевой базы с идентичной структурой. А потом передать её и попросить перенести, приложив SQL-запросы с Insert-Select по этим таблицам

Да, при первоначальном импорте так и поступим - попросим базу, проимпортируем, вернем обратно. Спасибо за помощь!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, как можно импортировать в bpm realestate объекты недвижимости с параметрами? если кто сталкивался отпишитесь

У меня такой же вопрос

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

Здравствуйте!

В системе есть три объекта:
1) Объект недвижимости
2) Параметр
3) Значение параметра объекта или листинга (развязочная таблица параметров и объектов).

Для решения вашей задачи необходимо последовательно импортировать записи в следующие объекты:
1) Объект недвижимости (для создания объектов)
2) Значение параметра объекта или листинга (для создания связи между объектом, параметром и значением параметра).

Хочу обратить внимание, что в зависимости от типа параметра, нужно заполнять соответствующее поле в файле импорта.

Дополнительно прикрепляю шаблон для импорта в объект "Значение параметра объекта или листинга"

"Демьяник Алексей" написал:

Здравствуйте!

В системе есть три объекта:
1) Объект недвижимости
2) Параметр
3) Значение параметра объекта или листинга (развязочная таблица параметров и объектов).

Для решения вашей задачи необходимо последовательно импортировать записи в следующие объекты:
1) Объект недвижимости (для создания объектов)
2) Значение параметра объекта или листинга (для создания связи между объектом, параметром и значением параметра).

Хочу обратить внимание, что в зависимости от типа параметра, нужно заполнять соответствующее поле в файле импорта.

Дополнительно прикрепляю шаблон для импорта в объект "Значение параметра объекта или листинга"


Спасибо Алексей, буду пробовать

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго дня!
Подскажите пожалуйста, стоит задача сделать кнопку для импорта из 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 и записывать последнее значение в системные настройки?Чтобы каждая позиция имела уникальный номер
И может быть сможете подсказать, как реализовать вложенность при импорте, поскольку деталь древовидная

Войдите или зарегистрируйтесь, чтобы комментировать