Здравствуйте, коллеги. 
Каким образом можно скопировать карточку продажи со всеми данными при переходе ее в стадию "Купил"? 

 

Нравится

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

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

var newGoodsEntity = goodsEntity.Clone() as Terrasoft.Core.Entities.Entity;
newGoodsEntity.SetDefColumnValues();
newGoodsEntity.SetColumnValue("Id", Guid.NewGuid());
newGoodsEntity.SetColumnValue("ChangeRequestId", newChangeRequestId);
newGoodsEntity.Save();

 

если нужно детали копировать то тут нужно или по форинкеям бегать или же кастомно выборочные таблицы, кароче без c# никуда

Добрый день.

Как уже было упомянуто выше, решение такой задачи невозможно в полноценном объеме без разработки. 

Аналогичный вопрос рассматривался в статье: https://community.terrasoft.ru/questions/kopirovanie-suschnosti-iz-deta…  

Также на Marketplace есть такое дополнение, возможно будет полезным:

https://marketplace.terrasoft.ru/app/copy-detail-records-creatio

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

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

Появилась ошибка валидации лицензий при добавлении записи на кастомный раздел.
Был создан кастомный раздел и установлен на прод систему. Сначала раздел не появлялся в системе, поэтому пришлось привязать данный через БД. Потом, когда раздел появился, была найдена ещё одна ошибка связанная с лицензиями. На дев системе никаких проблем не было. Генерировать исходный код и обновлять БД пробовал, переустановку пакета тоже, также пробовал настраивать доступ по объектам, по операциям и пользователей - ничего не помогло.
Может кто-нибудь сталкивался с похожим или знает в чём проблема.

Заранее благодарю за помощь.
 

Прикрепленные файлы

Нравится

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

Тут лучше в поддержку обратиться. Возможно название объекта раздела как-то совпало с названием объекта из платного дополнения. У террасофта есть список "платных" разделов, которые они проверяют по названию объекта и если нет лицензии, то появляется такое предупреждение. Если dev среда без лицензий (с ограничением в 1000 записей), то там проверка лицензий не запускается.

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

Проверьте название Объекта раздела, который требует лицензию.
Возможно у него нет префикса и система считает его лицензируемым объектом базового приложения или какого-то решения.
Проверьте лицензируемый ли сам объект в SysLicPackage. Возможно, он содержится в Operations лицензионного продукта в списке LicEntities. 
Если это так, проверьте есть ли на объект права в лицензии, в Operations. Например, Case.Full, Lead.Read.

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

Добрый день
В чем может быть проблема? На локально развёрнутую систему не получается установить пакет из SVN.
При установке появляется ошибка "Working copy 'PACKAGE_NAME' locked."

Если попробовать установить в тестовой облачной среде то всё хорошо, всё устанавливается.
Другие пакеты устанавливаются на локалку без проблем

Нравится

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

Чеботов Никита, добрый день!
Проверьте, что пакет разблокирован в базе данных, то есть InstallType = 0 и Maintainer пакета совпадает с Maintainer в системе.

Также, возможно, поможет очистка папки рабочей копии, находящейся по пути прописанном в ConnectionStrings.config в секции "defPackagesWorkingCopyPath".
%TEMP%\%APPLICATION%\%APPPOOLIDENTITY%\%WORKSPACE%\TerrasoftPackages
Пример на веб сервере:\Windows\Temp\<номер сайта>\<пользователь IIS>\Default\TerrasoftPackages

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

Добрый день,

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

Просто бизнес-правилом такой фильтр не добавить, а как можно сделать?

Нравится

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

Екатерина, здравствуйте.

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

В иных случаях, наиболее корректным выходом из Вашей ситуации будет создание корректной детали (Создать объект по аналогии с "Продукт в продаже" или "Продукт в заказе"), например, "Клиент в контрагенте" - и настраивать функционал средствами базовой логики или доработками.

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

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

 

Я установил приложение от DeVLabs - Настройка колонок реестра раздела в разрезе групп (Advanced list setup for Creatio) и последнее время, возможно при работе ТП над какими-то запросами у меня начали слетать настройки при переключении между группами.

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

Нравится

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

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

Дополнительно уточню, что дополнение не поддерживает динамическую настройку папок. То есть, если Вы перешли в режим редактирования динамической группы, необходимо ее изменить и  нажать кнопку "сохранить", чтобы переключиться на преднастроенный для этой папки ранее реестр, иначе система будет отображать стандартную конфигурацию реестра.

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

Добрый день! Потребовалось встроить Creatio через iframe в кастомное приложение Microsoft Teams, с помощью React, однако Creatio блокирует встраивание через iframe. Возможно ли отключить заголовок X-Frame-Options, если стенд Creatio развернут в облаке?

Нравится

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

Никита, добрый день!

Заголовок X-Frame-Options находится во внешнем web.config приложение. Если сайт находится в облаке, то вы не сможете отключить его (согласно мерам безопасности).

Также хочу заметить, что отключать заголовок X-Frame-Options можно на стороне клиента, то есть за это отвечает браузер, не приложение. Могут быть полезными, например, расширения для браузера. Для Хрома есть вот такие расширения - https://chrome.google.com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe/related

Данные аутентификации Вы можете передать с помощью сервиса AuthService.svc. Документация по его использованию предоставлена на Академии: https://academy.terrasoft.ua/docs/developer/integrations_and_api/request_authentication/autentifikaciya_zaprosov#reference-2298
Документация по использованию интеграции с iframe https://academy.terrasoft.ua/docs/developer/interface_elements/page/html_element_iframe#case-3252

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

Подскажите, пожалуйста, можно ли как-то исправить формулу для поля "Стартовать через" в Активности по БП:

Формула, которая отрабатывала в версии 7.15 - (DateTime.Now.Date.AddDays(1).AddHours(6) - DateTime.Now).TotalMinutes

Цель - назначить начало Активности на 6.00 следующего дня после создания.

Обновлялись с версии 7.15 сразу до 7.18. Во всех БП появилась ошибка по  Активности с этой формулой - Допущена ошибка в формуле: Невозможно преобразовать тип "Double" в "Int32"

Очень важно, чтобы эта задача попадала именно на 06.00 следующего дня.

Нравится

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

Романова Юлия Александровна, добрый день!

Дело в том, что начиная с версии 7.17.4 преобразования, которые ведут к потере точности, например: "Допущена ошибка в формуле: Невозможно преобразовать тип "Double" в "Int32"" - необходимо выполнять явно. Для решения возникшей ошибки необходимо перед параметром числа двойной точности проставлять признак (Int32). Например: 

​​​​​​​(int)(DateTime.Now.Date.AddDays(1).AddHours(6) - DateTime.Now).TotalMinutes)

Романова Юлия Александровна, добрый день!

Дело в том, что начиная с версии 7.17.4 преобразования, которые ведут к потере точности, например: "Допущена ошибка в формуле: Невозможно преобразовать тип "Double" в "Int32"" - необходимо выполнять явно. Для решения возникшей ошибки необходимо перед параметром числа двойной точности проставлять признак (Int32). Например: 

​​​​​​​(int)(DateTime.Now.Date.AddDays(1).AddHours(6) - DateTime.Now).TotalMinutes)
Показать все комментарии

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

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

Заранее спасибо за помощь.

Прикрепленные файлы

Нравится

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

Я правильно понимаю, не появился встроенный процесс на объекте CGREventLists? Судя по логу, установка и генерация исходного кода схемы прошла успешно, сам пакет в целом установился без ошибок.

 

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

Олег Нефедьев,

спасибо, помогло.

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

Коллеги, добрый день!

 

Проблема с ExchangeListener, никак не удаётся победить.

Exchange локальный, все виды авторизации включены.
Сервис ExchangeListener развернут, проверки проходят успешно.

При попытке добавить ящик, в интерфейсе вываливается ошибка
"Указан неправильный email или пароль"


Пробовал различным образом вводить логин. И полный email, и  domain\username.
В настройке провайдера в блоке Формат логина пробовал и использовать email, и формировать вручную.
Не помогает.

Попытки авторизоваться в exchangeOWA и exchange/ews/exchange.asmx - проходят успешно по базовой авторизации.
В логах на вебе Creatio вижу ошибку, которую отдаёт Exchange. Такое ощущение, что ему прилетает что-то очень неожиданное.

2021-11-01 12:32:04,970 [87] WARN NT AUTHORITY\NETWORK SERVICE IsServerValid - Mailbox maxim.sedov@***.ru didn't pass validation with these credentials, info: Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. Resource temporarily unavailable Resource temporarily unavailable
 ---> System.Net.WebException: Resource temporarily unavailable Resource temporarily unavailable
 ---> System.Net.Http.HttpRequestException: Resource temporarily unavailable
 ---> System.Net.Sockets.SocketException (11): Resource temporarily unavailable
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage request, Uri authUri, ICredentials credentials, Boolean preAuthenticate, Boolean isProxyAuth, Boolean doRequestAuth, HttpConnectionPool pool, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at System.Net.HttpWebRequest.SendRequest()
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.WebRequest.<>c.<GetResponseAsync>b__68_2(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   --- End of inner exception stack trace ---
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest()
   at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.InternalExecuteAsync()
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.ExecuteAsync()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId folderId, PropertySet propertySet)
   at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder[TFolder](FolderId folderId, PropertySet propertySet)
   at ExchangeListener.EwsApi.ExchangeListenerService.<ValidateSynchronizationCredentials>b__5_0() in /src/ExchangeListener/EwsApi/ExchangeListenerService.cs:line 80
   at ListenerBase.Utils.Tracking.TimeElapsedProfiler.MeasureTime(Func`1 action) in /src/ListenerBase/Utils/Tracking/TimeElapsedProfiler.cs:line 23
   at ExchangeListener.EwsApi.ExchangeListenerService.ValidateSynchronizationCredentials() in /src/ExchangeListener/EwsApi/ExchangeListenerService.cs:line 78
   at ListenerBase.Service.Service.Validate() in /src/ListenerBase/Service/Service.cs:line 224

 

Куда рыть?

Идеи уже кончились.

 

Спасибо!

Нравится

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

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

1. Используется ли двухфакторная авторизация для входа в почтовый аккаунт? 
2. Не блокирует ли почтовый сервер адрес Creatio? 
3. Нет ли нюансов по работе с ресурсами в плане SSL? Возможно сервер не может доверять Вашему экземпляру приложения по этой причине.
4. Проверьте доступность к почтовому сервису из микросервиса Exchange listener. Есть несколько вариантов:

 

   - http://cweiske.de/tagebuch/curl-mail.htm (только добавьте аутентификацию)

-v --user "логин:пароль" --login-options AUTH=PLAIN

 

Полный пример:
curl smtps://адрес сервера smtp -v --user "логин ящика:пароль" --login-options AUTH=PLAIN 

    - либо второй вариант:

 

curl адрес почтового сервера.

Максим, добрый день!

Подскажите, пожалуйста, какую версию Creatio Вы используете?

Lev Kuptsov, добрый день! 7.18.4.1532

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

1. Используется ли двухфакторная авторизация для входа в почтовый аккаунт? 
2. Не блокирует ли почтовый сервер адрес Creatio? 
3. Нет ли нюансов по работе с ресурсами в плане SSL? Возможно сервер не может доверять Вашему экземпляру приложения по этой причине.
4. Проверьте доступность к почтовому сервису из микросервиса Exchange listener. Есть несколько вариантов:

 

   - http://cweiske.de/tagebuch/curl-mail.htm (только добавьте аутентификацию)

-v --user "логин:пароль" --login-options AUTH=PLAIN

 

Полный пример:
curl smtps://адрес сервера smtp -v --user "логин ящика:пароль" --login-options AUTH=PLAIN 

    - либо второй вариант:

 

curl адрес почтового сервера.

Максим Седов,

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

Бакалов Павел Вячеславович,

Да, привет! Победили. сервис был развёрнут в кубе. В кубе был неправильно настроен DNS. Сервис ходил не на Exchange, а куда-то еще. Как раз продиагностировали по вышеуказанному мануалу.

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

Всем привет, пытаюсь уже пару дней решить нерешаемое :) Есть api, на который ходит POST request c авторизацией сертификатом:

 

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
 
// переменная для сохранения тестового результат
string httpResponseData = ""; 
 
//тащим из системной настройки с типом "бинарные данные" содержимое сертификата
byte[] _certByte = (byte[])Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, "UsrIpsmsCertificate"); 
 
//из него реконструируем сертификат
X509Certificate2 _certificate = new X509Certificate2(_certByte);
 
// создаем тело POST запроса
IpSMS _ipSMS = new IpSMS();
_ipSMS.action = "ping";
_ipSMS.baID = "populo";
string output = JsonConvert.SerializeObject(_ipSMS);
 
//инициализируем uri
string uri = "https://www.xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 
//определяем протоколы ServicePointManager, не контролируем валидность сертификата
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
	| SecurityProtocolType.Tls11
	| SecurityProtocolType.Tls12
	| SecurityProtocolType.Ssl3;
	ServicePointManager.Expect100Continue = true;
	ServicePointManager.ServerCertificateValidationCallback +=
		(sender, cert, chain, error) =&gt; true;
 
//выполняем request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "text/json";
httpWebRequest.ClientCertificates.Add(_certificate);
try {
	using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
		streamWriter.Write(output);
	}
	var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
	using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
		httpResponseData += streamReader.ReadToEnd().ToString();
	}
} catch (Exception ex) {
	httpResponseData += ex.InnerException == null ? ex.Message : ex.InnerException.Message;
}
 
//как-то выводим httpResponseData 

Результат:

The request was aborted: Could not create SSL/TLS secure channel.

 

на сервере-приемнике:

] AH02261: Re-negotiation handshake failed

 

вот честно скажу, с сертификатами опыта мало, но чисто визуально все ок. И в чем тогда косяк?! 

 

Нравится

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

Дмитрий, добрый день!

Очень похоже на то, что вы используете Apache и его нужно обновить. Рекомендую ознакомится с этим обсуждением.

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