Подскажите сабж, пожалуйста.

Вот есть картинка в виде byte[] - как её зааплоадить через OData в Contact.ContactPhoto?

Спасибо.

Нравится

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

Товарищи, а удалось ли кому это сделать?
За пример был бы очень благодарен :cool:

Коллеги, сделал пример работы с потоками через oData с
использованием WCF-клиента. Привожу код функции консольного приложения,
которое пишет файл из базы потоком в файл на диске и, соответственно,
файл на диске пишет в базу. Сначала, естественно, сгенерированы классы клиента
как это описано в SDK.
Пример только для показа технологии, не несет подробностей и особого смысла, поэтому
не судите строго.
Тот же принцип можно использовать и при передаче фотографий, только таблицы и поля будут другими.

static void Main(string[] args)
{
    // URI сервиса oData.            
    Uri svcUri = new Uri("http://localhost/0/ServiceModel/EntityDataService.svc/");
 
    // Создаем контекст приложения BPMonline. 
    BPMonline context = new BPMonline(svcUri);
    // Указываем имя и пароль пользователя BPMonline.
    context.Credentials = new NetworkCredential("Login", "Password");
 
//=============== Чтение потоковых данных из базы в файл
 
    // Читаем первую запись из коллекции файлов
    BpmonlineService.File file = (from f in context.FileCollection
                                  select f).First();
 
    // Тип передаваемого контента
    DataServiceRequestArgs _args = new DataServiceRequestArgs();
    _args.ContentType = "application/octet-stream";
 
    // Получаем поток с двоичными данными из поля Data
    using (Stream rs = context.GetReadStream(file, "Data", _args).Stream)
    {
        // Создаем файл в текущем каталоге
        using (Stream fs = new FileStream(file.Name, FileMode.Create))
        {
            // Пишем поток в файл
            rs.CopyTo(fs);
        }
    }
 
//=============== Запись файла в базу данных
 
    // Открываем файл, который будем записывать
    using (FileStream fs = new FileStream("Data.xls", FileMode.Open))
    {
        // Создаем новый файл и инициализируем свойства.
        BpmonlineService.File NewFile = new BpmonlineService.File()
        {
            Id = Guid.NewGuid(),
            Name = fs.Name
        };
 
        // Добавляем созданный файл в коллекцию файлов контекста сервиса.
        context.AddToFileCollection(NewFile);
        // Сохраняем изменения данных в BPMonline
        context.SaveChanges();
 
        // Пишем поток в поле Data
        context.SetSaveStream(NewFile, "Data", fs, true, _args);
 
        // Сохраняем изменения данных в BPMonline
        context.SaveChanges();
    }
}
Показать все комментарии

Здравствуйте! В нашей компании на одном компьютере не удается выдать отчет из-за мнимой ошибки запроса. Вот текст сообщения об ошибке: Ошибка выполнения метода 'amiFinanceReportOnExecute'. Ошибка открытия источника данных "ds_GetSaldo".
Оригинальное сообщение об ошибке: Столбец "dbo.vw_OfferingMovement.ID" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY «Call Stack" .

Вот текст запроса:

SELECT
SUM(CASE tbl_OfferingMovement.TypeID
WHEN '{7E653680-A583-4647-A98D-BCE0F53D68CE}' THEN tbl_OfferingMovement.CurrentSaldo
WHEN '{A48368CD-E28D-458D-8AE8-E2A314186C5C}' THEN tbl_OfferingMovement.Amount
WHEN '{2400133D-B146-46C3-83E7-2C0DCDECCBA5}' THEN -tbl_OfferingMovement.Amount
END) AS [Saldo]
FROM
[dbo].[tbl_OfferingMovement] AS [tbl_OfferingMovement]
LEFT OUTER JOIN
[dbo].[tbl_TechCenter] AS [tbl_TechCenter] ON [tbl_TechCenter].[ID] = [tbl_OfferingMovement].[TechCenterID]
WHERE([tbl_TechCenter].[Name] = :TechCenterTsar AND
([tbl_OfferingMovement].[TypeID] = :SaldoType OR
(CAST(CONVERT(VARCHAR(8), [tbl_OfferingMovement].[Date], 112) AS DATETIME) > :Date AND
([tbl_OfferingMovement].[CashGiveID] IS NULL OR
(NOT [tbl_OfferingMovement].[CashGiveID] IS NULL AND
NOT CAST(CONVERT(VARCHAR(8), [tbl_OfferingMovement].[Date], 112) AS DATETIME) = :InCassDate)))) AND
([tbl_OfferingMovement].[PayFor] IS NULL OR
(NOT ([tbl_OfferingMovement].[PayFor] = :Card OR
[tbl_OfferingMovement].[PayFor] = :NoCard))))

На моем компьютере под их логином этот запрос работает нормально. Версия 3.2.1.61.

Нравится

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

Здравствуйте, Владимир!
Простите за банальный вопрос, но Вы пробовали почистить кеш?
Если проблема воспроизводится только на одном из компьютеров, то обычно ошибка кроется именно там.
Еще может быть разная версия клиента у Вас на машине и на машине, где воспроизводится ошибка.

Здравствуйте Андрей!
Кэш на проблемном компьютере вычистил, проблема осталась. О каком клиенте вы говорите? База данных одна и та же у меня и у пользователей. Версия Террасофт у меня 3.2.1.62, у пользователей - 3.2.1.61, но у других пользователей этой проблемы нет.

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

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

Добрый день! Столкнулись с такой проблемой: при выборе двух записей для объединения в контрагентах, через "Действия"-"Объединить выделенные записи". После выбора данных которые должны отображаться в итоговой записи и нажатии на кнопку "Объединить", вылетает ошибка "При слиянии записей произошла ошибка - Error converting data type nvarchar to int". Смысле ошибки понятен, что какие-то поля не конвертируются к нужному типу. Но проблема в том, что не получается отследить из-за каких полей могут быть косяки.
Может кто сталкивался с такой проблемой или знает как можно решить её, буду очень признателен!

Нравится

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

Здравствуйте, Николай.

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

"Maxim Gritsenko" написал:

Здравствуйте, Николай.

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

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

Большое спасибо за ответ!

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

Здравствуйте!
У нас проблема с подключением к базе данных. Подключиться можно только в период времени с 9.00 до 21.00. В другое время возникает ошибка "Ошибка открытия конфигурации. Истекло время ожидания входа".
При этом тест соединения проходит нормально. Иногда и после 9.00 бывает "раскачка" до получаса - Timeout (ошибка 258).

Нравится

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

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

Здравствуйте.
Если взять Террасофт стандартной (без доработок) конфигурации и штатно работающий сервер базы данных, то система не будет себя так вести. Судя по описанию можно предположить, что или в указанный промежуток (после 21.00) сервер загружен какими-то сторонними задачами, или, возможно, на СУБД настроены job-ы (задания по расписанию) для выполнения каких-то операций с базой. В такой ситации физическое подключение к базе присутствует, но ответить она не может.

С уважением, Terrasoft Support Team.

По словам сисадмина, сервер в указанное время свободен, задания для БД не предусмотрены. Как можно посмотреть настройку job-ов для БД? В SQL-manager я этого не вижу.

Система просто намекает, что ночью надо спать.

Для работы job-ов необходимо наличие запущенной в составе SQL-сервера службы "SQL Server Agent". Она есть только в полных версиях (не SQL Express). Для просмотра-редактирования-создания job-ов нужно в дереве в Management Studio открыть "SQL Server Agent" > "Jobs". В свойствах job-а можно просмотреть шаги его выполнения (Steps) и периодичность + время запуска (Schedules).

а еще посмотрите когда у вас отрабатывают системы резервного копирования на сервере (в т.ч. SQL), а то бывает, когда большие объемы да по сети, да в несколько потоков - тормозит и затягивается.

Не нашел я такой службы

Значит job-ов у Вас нет. Нужно смотреть что в это время происходит с базой. Если Вы уверены, что сервер в порядке (лучше что бы администратор продемонстрировал), тогда можно например выполнить какой-то запрос к базе, что бы проверить её рабоспособность в это время. В любом случае, если работоспособность системы зависит от времени суток, то нужно источник проблемы искать в указанном направлении. Может у Вас есть какая-то ресурсоёмкая интеграция, которую, например, запускает "шедулер" ОС ночью.

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

Добрый день.
Поставили Terrasoft CRM. Настроили. Есть несколько проблем:
1. Возникла необходимость добавить поле в карточке контрагента (Дополнительный контакт). Подскажите, насколько сложно и как это сделать?
2. Можно ли "прикрутить" к Террасофту адресный классификатор. Пользователи вводят данные по Местоположению кому как заблагорассудится. В результате получается каша (дублируются территории, города, страны, регионы).
Заранее благодарю за ответы.

Нравится

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

Речь о версии 3.Х?

1. Можно. Просто.

2. Можно. Сложно.

Да, речь о версии 3.х. Спасибо. Буду пробовать. А насчет второго вопроса есть советы?

Это существенная доработка: несколько новых таблиц, карточка ввода адреса, синхронизация с базой КЛАДРа (хотя бы разовая) и тому подобное. Скажем так, намного сложнее, чем поле добавить.
Один из вариантов реализации:
КЛАДР
Такое могут сделать под заказ специально обученные люди из Terrasoft или её партнёров.

Понятно. В общем надо проводить разъяснительную работу среди пользователей, чтобы сначала искали нужный элемент, а потом, если не найдут, заводили новый.
Спасибо большое за разъяснения.
И еще. Не могли бы вы подсказать как накатить сервисы из FieldMaker'а на нашу базу? Просто с Terrasoft'ом только-только начинаю разбираться.

"Зюльков И.А." написал:И еще. Не могли бы вы подсказать как накатить сервисы из FieldMaker'а на нашу базу?

Запустить TSAdmin.exe, правой кнопкой по дереву справа, "Загрузить из файла", выбрать все файлы за раз.

Да, когда будете создавать в FieldMaker'е новое поле, на второй вкладке колонку для отображения ContactName заменить на что-то вроде AdditionalContactName. И аналогично, на первой вкладке исправьтеLEFT JOIN TABLE tbl_Contact AS tbl_Contact на LEFT JOIN TABLE tbl_Contact AS AdditionalContact.

Попробовал. Получилось. Александр, а можно ли сделать это поле таким же как и для Основного контакта (т.е. с выбором из справочника Контакты)?

А сейчас оно какое?

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

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

На первой нужно тип данных "справочник", название "AdditionalAccountID" и заголовок "Дополнительный контакт". Как на картинке в описании FieldMaker. Кстати, почему назвали "AdditionalAccount", а не "AdditionalContact"?

"Зверев Александр" написал: Кстати, почему назвали "AdditionalAccount", а не "AdditionalContact"

Вы правы. AdditionalContact будет логичнее.
Не совсем понятно какой выбрать источник данных на 1 закладке? Контакта там нет. И добавить нельзя.

Должен быть. Искали и по "Контакт", и по "Contact"?

Да. Искал. Вот что система предлагает на выбор.

Это только первая страница списка. Введите "Contact" в поле в правом верхнем углу и оно отфильтрует.

Александр. Я Вас наверное замучаю сегодня.

Действительно, ввел в поиске Контакт и получил список. Только теперь опять проблема: какой бы из Контактов я ни выбирал (Контакт - ds_Contact, Контакт - ds_SelectContact, Контакт контрагента - ds_ContactInAccount) при попытке сохранить карточку Контрагента вываливается ошибка.

сначала очистите все заполненые поля AdditionalAccountID или удалите поле и сделайте все заново
чтобы удалить поле надо поочередно удалить его в сервисах
wnd_AccountEdit
ds_Account
sq_Account
tbl_Account

ОГРОМНОЕ СПАСИБО Александр и Дмитрий за терпение и ответы.
Все получилось.

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

Существуют ли готовые решения( библиотеки) встраивания проверки/подписания файлов в XRM? Интересует интеграция криптопровайдеров, поддерживающие интерфейс CryptoAPI, таких как:
КриптоПро CSP: "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
ViPNet CSP: "Infotecs Cryptographic Service Provider",
Signal-COM CPGOST Cryptographic Provider.

или может кто сталкивался с подобной потребностью? Как её лучше решать?

Нравится

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

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

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

Оптимальный вариант в данном случае - действительно интеграция через API, путем включения в сборку дополнительной библиотеки и использования ее функций. Есть и возможность обратной интеграции - Terrasoft также имеет собственный API, позволяющий вызывать его как COM-объект.

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

В Вашем случае оптимальным вариантом будет вначале написать постановку задачи (т.е. перечислить точки интеграции и определить объем данных, которыми будут обмениваться две системы), а затем принять решение о том, в какую сторону ее реализовывать.

Занимаемся сейчас этой проблемой как один из вариантов: создание общей папки обмена куда выкладываются файлы любого формата подписываются и отправляются... примерно как то так если что пишите nemov.exe@gmail.com

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

Здравствуйте! Не получаеться реализовать: Поле номер договора подставлять автоматически
Вид номера: 05/08/01, где 05 числа, 08 месяца, 01 первый договор за этот день

Нравится

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

закомментируйте в function dlDataOnDatasetBeforePost скрипта wnd_ContractEditScript следующее:

SetItemSystemNumber('Contract', Dataset, 'ContractNumber');

и добавьте:

	var ADate = DateToStr(System.Now(), '//');
	ADate = ADate.slice(0, -4) + ADate.slice(-2);
	Dataset('ContractNumber') = ADate;
Показать все комментарии

Здравствуйте, возникла некая проблема, Не запускаются бизнес процессы, не в вкладке Процессы, не в самой бпм 7 )одним словом будто они не существуют)
В журнале процессов показано что процесс выполняется но толком нечего не происходит!

Нравится

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

Здравствуйте. А что за процесс? Какие действия он выполняет? Возможно он зависает на первом же шаге? К примеру, если первым действием идет элемент "Задача", дальнейшие действия по процессу возможны только при закрытии задачи с определенным результатом, но сама карточка задачи при этом не показывается, т.к. не установлена галочка "показывать карточку редактирования задачи"?

Здравствуйте. Создал новый Бп.
При добавлении нового контакта запускается Бп --> открыть карточку Продажа !

Вот скрин БП

Вот активности

А вот скрин журнала процессов

Юрий, подскажите пожалуйста версию используемой Вами системы.
А также, если у Вас система установлена на наших серверах (*.bpmonline.com) - в личное сообщение, если есть такая возможность, предоставьте логин и пароль пользователя с правами администратора для анализа возникшей проблемы.
Заранее спасибо!

Дмитрий, использую Bpm online 7 установлено на локальном сервере компании в которой я работаю!
Если можно укажите пожалуйста возможные причины, и способы их исправления! буду очень благодарен!

Юрий, точную причину назвать пока не могу, как собственно и её решение.
Уточните полную версию (к примеру 7.0.0.153) - я попробую воспроизвести данную ситуацию на "коробочной" версии и предоставить Вам рекомендации.

Bpm версия 7.0.0.153

Может быть это и не поможет, но попробуйте сначала поместить на дорожку элемент "Событийный процесс", а потом в нём уже строить всю схему процесса т.е. элементы помещать внутри него. У меня тоже очень многие вещи не работали, пока я не дотумкала, в чём проблема

поправлюсь "Событийный подпроцесс"

"Найданова O" написал:

поправлюсь "Событийный подпроцесс"


Уже пробовал много вариантов не один не помог)

Кое что все же работает! поставил сигнал, после добавления Контакта --> добавить данные в продажу
Процесс выполнился!), а вот открыть карточку продажи не выполняется)

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

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

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

Здравствуйте!
У меня проблема с сохранением таблицы tbl_Document. На поле AutoID включаю флажок "Отслеживать изменения". Возникает ошибка: "Недопустимое имя столбца Name". В этой таблице нет такого поля.

Нравится

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

сохраняли таблицу (в БД)?

Сохранял.

Вопрос снят. Нужно было указать первичное поле отображения.

Здравствуйте!
Вопрос не снялся. В ту же таблицу пытаюсь добавить обычное числовое поле. Опять "Недопустимое имя столбца Name". Можно сохранить, если снять с таблицы флажок "Отслеживать изменения" или добавить это поле из SQL-менеджера, затем добавить то же поле в Администраторе, но не обновлять таблицу в БД. Такие проблемы начались после неудачных попыток задействовать репликацию. В результате установки модуля репликации в каждой таблице появились дополнительные поля. Можно ли их удалить?

Владимир, присутствует ли поле, на которое ссылается ошибка, в триггере tr_tbl_TableName_IU?
Складывается такое впечатление, что поле удалено из таблицы, но осталось в триггере.
Например:

/system/files/18-07-2013_20-37-56.png

Здравствуйте Наталия!
У меня такого триггера нет. Сейчас нужное поле добавлено, но флажок "Отслеживать изменения" отключен. У меня 4 триггера:

del_tbl_Document,
iu_tbl_Document (название похожее, но содержимое совсем другое),
tr_tbl_Document_I,
tr_tbl_Document_ID.

При попытке включить флажок "Отслеживать изменения" выдается указанная ошибка.

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

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

Здравствуйте! Необходимо в при нажатии кнопки выбрать файл, записать в базу его ссылку поле в базе
file.

Нравится

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

Николай, детализируйте, пожалуйста, задачу т.к. не понятно, что Вы хотите реализовать.

Мне нужно при вводе нового договора(своя форма) при нажатии кнопки выбор файла(картинки). записать его ссылку в таблицу. А далее эту картинку вставить в договор (ворд) в определенное место - это я уже сделал не знаю как выбрать файл.

Попробуйте так:

var FileName = GetNewValue();
    if (System.OpenDialog(FileName, '', '', '', '')) { // Показ диалога выбора файла с изображением
    dlData.Dataset.DataFields('Photo').LoadFromFile(FileName.Value); // Загрузка изображения из файла в поле данных

Подобный вопрос рассматривался здесь: http://www.community.terrasoft.ru/forum/topic/1552

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

dlData.Dataset.ValAsStr('--Link--') = FileName.Value;
Показать все комментарии