Коллеги, здравствуйте!

Беру [#Системная переменная.Текущее значение времени#] и мне из нее необходимо:

  • вычитать день и месяц из текущей даты;
  • сравнить день и месяц текущей даты с другими значениями дня и месяца;
  • написать сравнение в Формулу условного потока.

Фактический пример: сегодня 19.07.2021.

19.07 < 15. 11 и 19.07 > 01.01, поэтому идем по условному потоку 1, иначе по условному потоку 2.



Возможно ли данное условие прописать через формулу? Какие системные переменные необходимо создать для того, чтобы корректно описать формулу?

Нравится

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

Коллеги, решили вопрос такой формулой.

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

Например, в одном потоке такая формула для промежутка времени 01.01 - 31.08:

([#Системная переменная.Текущее значение даты#].Day >= 1 && [#Системная переменная.Текущее значение даты#].Month == 1) || ([#Системная переменная.Текущее значение даты#].Month == 2) || ([#Системная переменная.Текущее значение даты#].Month == 3) || ([#Системная переменная.Текущее значение даты#].Month == 4) || ([#Системная переменная.Текущее значение даты#].Month == 5) ||  ([#Системная переменная.Текущее значение даты#].Month == 6) ||  ([#Системная переменная.Текущее значение даты#].Month == 7) || ([#Системная переменная.Текущее значение даты#].Month == 8)



в другом потоке такая формула для промежутка времени16.11 - 31.12:

([#Системная переменная.Текущее значение даты#].Day >= 16 && [#Системная переменная.Текущее значение даты#].Month == 11 ) || ([#Системная переменная.Текущее значение даты#].Month == 12 )

Правильно ли я понял, вы хотите, чтоб ваш поток срабатывал ежегодно в определённый период дат (с 01.01 по 15.11)? Поэтому вы хотите отделить год от даты?

Николай Ходаковский,

да, верно

Александра Дубс, добрый день!

Отделить год, к сожалению, не получится. Но возможно, указанная ниже реализация покроет Ваш кейс:

В параметр процесса записываем текущую дату по формуле:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)

Во второй параметр записываем дату сравнения с текущим годом:

new DateTime(DateTime.Now.Year, [#Дата сравнения 1#].Month,[#Дата сравнения 1#].Day)

Созданные параметры можно сравнивать в формуле или условном потоке в виде:

[#Текущая дата#] < [#Дата сравнения#]

Коллеги, решили вопрос такой формулой.

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

Например, в одном потоке такая формула для промежутка времени 01.01 - 31.08:

([#Системная переменная.Текущее значение даты#].Day >= 1 && [#Системная переменная.Текущее значение даты#].Month == 1) || ([#Системная переменная.Текущее значение даты#].Month == 2) || ([#Системная переменная.Текущее значение даты#].Month == 3) || ([#Системная переменная.Текущее значение даты#].Month == 4) || ([#Системная переменная.Текущее значение даты#].Month == 5) ||  ([#Системная переменная.Текущее значение даты#].Month == 6) ||  ([#Системная переменная.Текущее значение даты#].Month == 7) || ([#Системная переменная.Текущее значение даты#].Month == 8)



в другом потоке такая формула для промежутка времени16.11 - 31.12:

([#Системная переменная.Текущее значение даты#].Day >= 16 && [#Системная переменная.Текущее значение даты#].Month == 11 ) || ([#Системная переменная.Текущее значение даты#].Month == 12 )

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

Добрый день!



Может кто-то сталкивался с данной ситуацией.

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

Т.е. хотелось бы, чтобы сотрудники работали с одной версией договора, а не скачивали его. 

Как я вижу это:

При выборе печатной, она выгружается в некое облачное хранилище

Получаю ссылку на документ, которая добавляется в "Файлы и ссылки"

Во фрейме по этому договору отображаю данную ссылку.

Недавно предложили сделать через FTP-сервер



Встречал реализацию данной функциональности в Marketplace, но цена немного не устраивает

Нравится

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

Добрый день.

Я передам Ваше пожелание ответственной команде разработки, спасибо за идею.



Если Вас не устраивает цена дополнения на Marketplace, то Вы можете реализовать данный функционал самостоятельно средствами разработки. Для этого необходимо:



1) Создать собственный метод-обработчик нажатия на кнопку или же переопределить существующий.

2) Использовать базовую логику генерации печатной формы. 

3) Внутри метода настроить взаимодействие с API google и последующей загрузкой файла на диск.

4) Через EntitySchemaQuery или кастомный сервис создать ссылку и привязать ее к нужному объекту. 

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

Изображение удалено.

Может кто знает как можно скрыть в ActionsDashboard в активностях кнопку выполнения. В коде вижу что в базовом классе данная кнопка просто уcтановленyа в true

Изображение удалено.

 

Как изменить для определенного вида активности этот атрибут в false?

Нравится

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

После загрузки всех элементов страницы, либо в любой другой момент:

this.set("ExecuteButtonVisible"false);

 

Добрый день.

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



Создайте модуль UsrBaseDashboardItemViewModel и переопределите метод initExecuteButtonVisibility:

 

define("UsrBaseDashboardItemViewModel", ["BaseDashboardItemViewModel"],
	function(resources, MaskHelper) {
		Ext.define("Terrasoft.configuration.UsrBaseDashboardItemViewModel", {
			override: "Terrasoft.configuration.BaseDashboardItemViewModel",
			initExecuteButtonVisibility: function() {
				this.set("ExecuteButtonVisible", false);
			}
		});
	});



После этого добавьте этот модуль в BootstrapModulesV2, заместив его:



 

 define("BootstrapModulesV2", ["UsrBaseDashboardItemViewModel"], function() {
    return {};
});





Пример и инструкцию можно найти по ссылке.

Тимофей Ромах,

 

на странице где грид, или активности?

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

Задача "интеграция с Jira и отображения стадий в отдельной карточке в которую можно попасть из страницы раздела. Задач в Jira может быть несколько".

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

То что сразу приходит в голову:

1) Как же управлять такими кейсами, ведь кнопки "Вид" тут нет, а значит и перейти в меню управление DCM не можем. А кнопка вид у нас есть только у страниц что имею связь с Section, у нас ее нет, потому и кнопки нет (эта логика прописана в базовой странице).

Нравится

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

Добрый вечер.

 

Я бы попробовала такие варианты.

1. Для этой страницы создать раздел, но не подключать в рабочее место пользователей.

2. Посмотреть, как эта логика реализована в карточке раздела, а потом попробовать перенести её в нужную карточку.

Добрый вечер.

 

Я бы попробовала такие варианты.

1. Для этой страницы создать раздел, но не подключать в рабочее место пользователей.

2. Посмотреть, как эта логика реализована в карточке раздела, а потом попробовать перенести её в нужную карточку.

Алла Савельева,

 

1) Кстати, хорошая идея, когда-то делал так, а сейчас в голову не пришло это. Самый безболезненный вариант.

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

 

Спасибо за ответ!

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

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

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

Кейс следующий: на диаграмму взаимосвязей контрагента добавлены связанные контрагенты (тип связи не суть важно какой). Нужно обратиться к этим связям в настройках фильтра, например: отобрать контрагентов, имеющих связи с другими контрагентами. Условия могут быть более сложными (например, отобрать контрагентов, имеющих связи с контрагентами определенной категории). 

В настройке фильтра доступны только объекты "Взаимосвязь (по колонке Контрагент А)" и "Взаимосвязь (по колонке Контрагент Б)", но насколько я понимаю, в 7.17 эти объекты уже не используются про добавлении связей на диаграмму взаимосвязей. Как правильно поступить?

Изображение удалено.

Нравится

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

Добрый день!

 

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

В колонке RecordId таблицы RelationshipEntity нет связи ни с каким объектом, так как в этой колонке могут храниться как записи контакта, так и аккаунта.

 

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

Показать все комментарии
Здравствуйте, настраиваю глобальный поиск, хочу удалить индексы:
http://айпи:81/sites/sales/search
Пробовал вот так:
curl -XDELETE http://айпи:81/sites/sales/search-*/
Но потом при curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://айпи:81/sites/sales/search
Как правильно удалить ранее созданные индексы?
Выдает ошибку:
{"code":500,"status":"error","message":"System.Exception: Could not check index 'uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt' exists. ---> System.Exception: Invalid NEST response built from a unsuccessful low level call on HEAD: /uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt\n# Audit trail of this API call:\n - [1] BadRequest: Node: http://elasticsearch-public-ip:9200/ Took: 00:00:10.0127688\n# OriginalException: System.Net.Http.HttpRequestException: Resource temporarily unavailable ---> System.Net.Sockets.SocketException: Resource temporarily unavailable\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   --- End of inner exception stack trace ---\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)\n   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\n   at Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) in C:\\Users\\russc\\source\\git\\elasticsearch-net-5.x\\src\\Elasticsearch.Net\\Connection\\HttpConnection-CoreFx.cs:line 78\n# Request:\r\n\n# Response:\r\n\n\n   --- End of inner exception stack trace ---\n   at GlobalSearch.WebApp.Services.SearchManagement.SearchService.CheckIndexExist(String indexName) in /src/Src/GlobalSearch.WebApp/Services/SearchManagement/SearchService.cs:line 95\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.DeleteSearchBySite(Site site) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 44\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.InternalHandle(DeleteSearchRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 70\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.BaseRequestHandler`1.Handle(TRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/BaseRequestHandler.cs:line 38"}

Нравится

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

Евгений, добрый день! 



Вам следует обратить внимание на причину, по которой в запросе не удаётся определить существование индекса, а именно на запись:

 

Invalid NEST response built from a unsuccessful low level call on HEAD

Попробуйте поискать информацию по данному фрагменту.

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

Добрый день!

При развертывании стенда Creatio верси 7.17.3.1377_ServiceEnterprise_Softkey_PostgreSQL_ENU

После нажатия кнопки "Компилировать" получаю ошибку

"Errors occurred while compiling configuration. See logs for more details"

 

Изображение удалено.

 

В логах по адресу C:\Windows\Temp\Creatio\IT4IT MVP 2\0\Log\2021_07_16

ошибка не обнаружена.



Установлены соответствующие компоненты 

microsoft .NET CORE SDK 3.1.301

microsoft .NET FrameWork 4.7.2 SDK



Настройка проведа по инструкции.





Ошибка как в данном посте https://community.creatio.com/questions/error-compilation

Нравится

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

Дмитрий,

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

 

https://dotnet.microsoft.com/download/thank-you/net472-developer-pack

https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.402-windows-x64-installer

https://support.microsoft.com/en-us/help/4054531/microsoft-net-framework-4-7-2-web-installer-for-windows

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

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

Дмитрий Вавринюк,

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

 

Также возможной причиной может быть нехватка памяти на сервере, проверьте, соответствует ли значение RAM системным требованиям.

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

Сервис развертывал по этому примеру:

https://community.terrasoft.ru/articles/2-realnyy-primer-po-razvertyvaniyu-servisa-exchange-listener-s-ispolzovaniem-kubernetes

 

Сам сервис работает, через браузер открывается:

Изображение удалено.

 

Пинг с машины, на которой развернут Creatio, проходит, через telnet на 30001 порт подключается, но в Creatio при диагностике такая картина:

Изображение удалено.

 

Никто не сталкивался с таким?

 

Так же было замечено, что если зайти на сервис /0/ServiceModel/ExchangeListenerService.svc в версии 7.14, там выдается корректное сообщение:

Изображение удалено.

 

Но в новой версии 7.17, где пытаюсь настроить, была такая ошибка:

Изображение удалено.

 

Добавил в services.config в этот сервис строчку по аналогии с другими сервисами:

Теперь сервис выдает такое сообщение:

Изображение удалено.

Может это быть причиной?

Нравится

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

файрвол, не правильно проброшен порт(если через nat на гостевую машину", проверьте логи сервиса  на предмет ошибок kubectl logs  <название pod'a>

и с браузера он открывается на машине, где разврнут creatio или только на виртуалке?

Файрвол на машине, где поднят сервис, отключен. С браузера на машине, где развернут сайт с Creatio, а так же через telnet по порту 30001 на той же машине подключается. Логи смотрел. Ошибок никаких нет.

Добрый день!

 

В рамках обращения в Support Creatio, нашли очень не обычную причимну ошибки.

Проблемой оказался некорректно завершенный fiddler.

Он выступал как прокси-сервер и перенаправлял все запросы с IIS на наш проблемный адрес, по этому мы видели ошибки, а через браузер все работало.

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

Показать все комментарии
Добрый день, выполнял настройку elasticsearch по инструкции, linux+docker. Версия Creatio 7.17.1.1364 (.NET Core 3.1.15). Компоненты на машинах запустились без ошибок, дошел до момента когда нужно выполнить sql  скрипт. Для этого в Creatio добавил плагин SQL консоли, он там 1. Вот первый скрипт который запускаю:

БД Postgres
DO $$

DECLARE 
    GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
    GlobalSearchFeatureId uuid;
    GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
    GlobalSearchV2FeatureId uuid;
    GS_RelatedEntityIndexingFeature VARCHAR(50) :=   'GlobalSearchRelatedEntityIndexing';
    GS_RelatedEntityIndexingFeatureId uuid;
    allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

   SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchFeature
   LIMIT 1;
   IF (GlobalSearchFeatureId IS NOT NULL)
      THEN
          IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
             UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
          ELSE
              INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
          END IF;
   ELSE
       GlobalSearchFeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
   END IF;

   SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchV2Feature
   LIMIT 1;
   IF (GlobalSearchV2FeatureId IS NOT NULL)
    THEN
        IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
            UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
        ELSE
           INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
        END IF;
   ELSE
       GlobalSearchV2FeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
   END IF;

  SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
  IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
  THEN
  IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
  ELSE
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
  ELSE
  GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
  INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
END $$;

Этот скрипт падает с ошибкой(но таймер у скрипта все таки стартует)

Вот второй скрипт:

Данные нужные подставил

 
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://external.elasticsearch:9200/indexname]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, сл. типа - http://SERVER2_IP_ADDRESS:82]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );

Окей, раз скрипты не работают я пошел на:

 

/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage
Без /0/ потому что Linux.
Там нашел один единственный тумблер с надписью GlobalSearch, вот его и включил и сохранил, все ок.
Вопрос в следующем, как мне убедится что Глобальный поиск работает? И нужны ли все таки выполненные эти скрипты?
Если скрипты нужно выполнять, то где? в Postgres(на Linux)? или как это работает?

Нравится

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

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

Скрипты необходимо выполнять на базе данных приложения Creatio.

После выполнения скриптов нужно перезапустить сайт с очисткой Redis.

Далее создать тестовую запись и через минуту попробовать поискать её в глобальном поиске. 

Алёна Доля, здравствуйте, встретился с ошибкой с ссылкой на отсутствие переменных в psql, GlobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl

если есть пример того как должно выглядеть буду благодарен

Алёна Доля,

ещё вопрос не по теме  БД, на сервере с компонентами elasticsearch заметил что не дописал порт в команду curl, вопрос, как теперь удалить старую запись? Потому что сейчас не дает записать ничего из-за того что ранее уже записывал

Евгений Шевченко,

Для более быстрой настройки можете заполнить настройки GobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl  через интерфейс в разделе  "Системные настройки". Необходимые записи фильтруйте в разделе по коду.

ОШИБКА:  "globalsearchfeatureid" - не известная переменная

СТРОКА 14:    SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"

не подскажете в чем причина?

Добрый день!

Проблема заключалась в функционале страницы https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/nastrojka_kontejnernyh_komponentov/nastroit_globalnyy_poisk

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



Воспроизводится проблема в результате использования кнопки Копировать код (скриншот во вложении).

Если копировать сам текст запроса, ошибка перестанет воспроизводиться.

Жмурко Сергей,

Всё ещё не поправлено :)

Андрей,

Добрый день! Проблема зарегистрирована для исправления в будущих версиях Creatio.

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

Добрый день

Возникла сложность в переносах строк из поля Notes при печати отчета в FastReport.

так выглядит в приложении

Изображение удалено.

Так выглядит в БД, если делать выбор в текст

Изображение удалено.

Обратываю в FastReport

Cell24.Text = ((String)Report.GetColumnValue("EPMAccountChk.EPMNotes"))
.Replace("<div>","")
.Replace("</div>","")
.Replace("strong","b")
.Replace("em","i");

Сама ячейка имеет значение свойства TextRenderType = HtmlParagraph

Получаю на выходе

Изображение удалено.

В принципе как в БД, не придраться, Но не так как на экране.

Если отключить мои замены и свойство TextRenderType перевести в Default, то вообще получаю полное соответсвие БД

Изображение удалено.

Если свойство TextRenderType оставить равным HtmlParagraph, и не делать замен, то получим:

Изображение удалено.

Если свойство TextRenderType сделать равным HtmlTags, и не делать замен, то получим:

Изображение удалено.

Вопрос. Как сделать отображение как на экране в приложении? Как избавится от лишних переносов?

Нравится

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

Ура! Нашел. Метод, "если не можешь найти что делать - пробуй все подряд" работает))

Начал заменять подряд все комбинации "\n\r", "\r\n", "\n", "\r". Нашел.  Это не \n\r как ожидалось, а просто \n. после первой и второй стоки \n\n, в конце просто \n. В итоге делаю следующее:

Cell24.Text = ((String)Report.GetColumnValue("EPMAccountChk.EPMNotes"))
	.Replace("&lt;div&gt;","")
	.Replace("&lt;/div&gt;","")
	.Replace("strong","b")
	.Replace("em","i")
	.Replace("\n\n","&lt;br&gt;")
	.Replace("\n","");

и свойство TextRenderType = HtmlParagraph

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

\n\r - C#

CHAR(10) и CHAR(13) - SQL

#10#13 - делфи если память не изменяет.



Посмотрите, что у вас в fastreport используется и добавить replace спец символа в ваш код 

Литвинко Павел,

Это первое, что пробовал. Забыл написать об этом.

Ура! Нашел. Метод, "если не можешь найти что делать - пробуй все подряд" работает))

Начал заменять подряд все комбинации "\n\r", "\r\n", "\n", "\r". Нашел.  Это не \n\r как ожидалось, а просто \n. после первой и второй стоки \n\n, в конце просто \n. В итоге делаю следующее:

Cell24.Text = ((String)Report.GetColumnValue("EPMAccountChk.EPMNotes"))
	.Replace("&lt;div&gt;","")
	.Replace("&lt;/div&gt;","")
	.Replace("strong","b")
	.Replace("em","i")
	.Replace("\n\n","&lt;br&gt;")
	.Replace("\n","");

и свойство TextRenderType = HtmlParagraph

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