Добрый день! Помогите добавить в имеющийся запрос выборку top 1 (первую запись из результирующего набора).

 

Имеется данный запрос на странице карточки клиента:

 

var recordId = this.get("Id");

                var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "Inspectors"

                });

                var filterGroup = new esq.createFilterGroup();

                filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;

                filterGroup.add("InspectorFilter1", esq.createColumnFilterWithParameter(

                    Terrasoft.ComparisonType.EQUAL, "Account", recordId));

                filterGroup.add("InspectorFilter2", esq.createColumnFilterWithParameter(

                    Terrasoft.ComparisonType.EQUAL, "InspectorsType", SNClientConstants.InspectorTypes.InspectorCredit));

                esq.addColumn("Inspector");    

                esq.getEntityCollection(function(result) {

                    if (result.success) {

                        var collection = result.collection;

                        collection.each(function(item) {

                            var inspector = item.get("Inspector");

                            if (inspector)

                            {

                                this.set("CreditInspectorCr", inspector);                                    

                            }

                        }, this);

                    }

                }, this);

  

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

Нравится

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

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

 

Вам нужно отсортировать записи по дате создания по убыванию и установить свойство rowCount = 1:

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Inspectors"
});
var createdOnColumn = esq.addColumn("CreatedOn");
createdOnColumn.orderDirection = Terrasoft.OrderDirection.DESC;
createdOnColumn.orderPosition = 0;
esq.rowCount = 1;

 

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

 

Вам нужно отсортировать записи по дате создания по убыванию и установить свойство rowCount = 1:

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Inspectors"
});
var createdOnColumn = esq.addColumn("CreatedOn");
createdOnColumn.orderDirection = Terrasoft.OrderDirection.DESC;
createdOnColumn.orderPosition = 0;
esq.rowCount = 1;

 

Отлично! Большое спасибо!

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

При запуске WorkspaceConsole в самом начале лога выполнения операции появляется ошибка. При этом запрошенная операция проходит успешно:

[09:46:11] Error has occurred during the loading of workspace build System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Creatio_7.14\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.WebApp\Terrasoft.Configuration\bin\Terrasoft.Configuration.dll'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.File.InternalReadAllBytes(String path, Boolean checkHost)
   at Terrasoft.Common.IO.FileWrapper.ReadAllBytes(String path)
   at Terrasoft.Core.DesignMode.FileSystemWorkspaceAssemblyLoader.LoadAssemblyToWorkspace(SysWorkspace workspace, String assemblyPath)
   at Terrasoft.Core.AppConnection.GetWorkspaceAssembly(SysWorkspace workspace)

В чем может быть проблема? Вижу, что путь не верный, но как попросить WorkspaceConsole обращаться по правильному пути, не понял.



Команда запуска:

 

C:\Creatio_7.14\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe ^
-operation=BuildWorkspace ^
-workspaceName=Default ^
-webApplicationPath="C:\Creatio_7.14\Terrasoft.WebApp" ^
-confRuntimeParentDirectory="C:\Creatio_7.14\Terrasoft.WebApp"

 

Нравится

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

Александр. Да, я видел этот пост, но видимо не очень внимательно прочитал.



Добавление параметра -configurationPath, указывающего на конфигурацию проекта ничего не дало.



Помогло добавление этого пути (к конфигурации) в параметр ConfigurationProjectPath файла: Terrasoft.Tools.WorkspaceConsole.exe.config



Ошибки теперь нет, всё работает как надо :-)



Добавлять ли это решение в документацию или нет, решайте сами. Какая то не очевидная штука. И, что характерно, видимо не частая, раз люди о ней не пишут.

Дмитрий, а в config-файле программы-консоли, который находится рядом с exe ничего подозрительного нет? Имею в виду неправильный путь, не прописан ли он там.

Александр, спасибо за вопрос! :-)

Нет, в Terrasoft.Tools.WorkspaceConsole.exe.config никаких подозрительных путей нет.

По сути видно, что путь в логах состоит из двух частей

1. Путь к WorkspaceConsole: 

 

C:\Creatio_7.14\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\



2. Путь от корня проекта к Terrasoft.Configuration.dll:

 

\Terrasoft.WebApp\Terrasoft.Configuration\bin\Terrasoft.Configuration.dll



Т.е. WorkspaceConsole использует для поиска Terrasoft.Configuration.dll не корень проекта, а собственную домашнюю папку. 

Каких то параметров у WorkspaceConsole относительно такого поведения я не нашел. Может тут тоже есть какая то хитрость с путями в параметрах? Хотя, всё сделано строго в соответствии с документацией.

Дмитрий, кажется, нашёлся аналогичный случай:

Решил указать параметр "configurationPath" и переменная "Assembly" стала инициализироваться.

Александр. Да, я видел этот пост, но видимо не очень внимательно прочитал.



Добавление параметра -configurationPath, указывающего на конфигурацию проекта ничего не дало.



Помогло добавление этого пути (к конфигурации) в параметр ConfigurationProjectPath файла: Terrasoft.Tools.WorkspaceConsole.exe.config



Ошибки теперь нет, всё работает как надо :-)



Добавлять ли это решение в документацию или нет, решайте сами. Какая то не очевидная штука. И, что характерно, видимо не частая, раз люди о ней не пишут.

Спасибо за решение, Дмитрий. Зафиксировал информацию об отсутствии этих тонкостей в документации.

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

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

Нравится

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

А пароль почтового ящика на стороне системы правильный? Может, уже неактуальный?

 

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

Может, после обновления на версию, где почта работает через Exchange Listener, не настроили всё необходимое.

Может, на почтовом сервисе места мало.

Может, если почта на GMail, не внесли изменения в настройки с обеих сторон по этой инструкции.

Может, наконец, всё реально синхронизируется, но смотрите не на той вкладке, а в «Обраьотанных».

 

Также см. похожую тему прошлого года.

 

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

Здравствуйте! Возник такой вопрос: Как добавить отображение ещё одного поля для справочника. Допустим, к примеру, нужно отобразить Id напротив каждого значения Name, ну или любую другую колонку. Можно ли это сделать прям при выборе в справочнике? 

Версия мобильного приложения:7.16.5 основного:7.14

 

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

Нравится

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

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

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

Нигрескул Алексей, для реестра это сработает, а как быть с обычными справочниками уже внутри страницы? Допустим справочник "Состояние" на странице "Активности".

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

Николай Кузьмин пишет:

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

 

 Благодарю за подсказку. Помогло.

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

Добрый день.

По документации настроил приложение для разработки в файловой системе. При запуске WorkspaceConsole с ключом BuildWorkspace возникает ошибка:



Compilation started

--> ESN_Entity

--> Case_Case

Error: One or more errors occurred.

Utility finished working.



Запускаю так:

C:\SandboxCreatio\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe ^

--operation=BuildWorkspace ^

--workspaceName=Default ^

--webApplicationPath="C:\SandboxCreatio\Terrasoft.WebApp" ^

--confRuntimeParentDirectory="C:\SandboxCreatio\Terrasoft.WebApp"



Интересно, что тот же вызов с ключом RebuildWorkspace работает нормально.



В чем может быть проблема?

Как включить более подробное логирование ошибки?



Заметил один момент в документации:

Описание ключа webApplicationPath в документации WorkspaceConsole говорит о том, что здесь надо прописывать корневую папку приложения, где лежит ConnectionStrings.config. Однако в описании настройки IDE, тут надо указывать папку \Terrasoft.WebApp. Где правда?

 

Нравится

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

Отвечу сам )

1. Ошибка вылечилась копированием файлов из Terrasoft.WebApp\bin в папку WorkspaceConsole. Где то тут нашел решение;

2. Оказалось в документации это есть, типо примечания, что при использовании ключа BuildWorkplace параметр confRuntimeParentDirectory должен принимать значение отличное от описанного в основной документации по утилите. Оптимизация, экономим на параметрах ))

Отвечу сам )

1. Ошибка вылечилась копированием файлов из Terrasoft.WebApp\bin в папку WorkspaceConsole. Где то тут нашел решение;

2. Оказалось в документации это есть, типо примечания, что при использовании ключа BuildWorkplace параметр confRuntimeParentDirectory должен принимать значение отличное от описанного в основной документации по утилите. Оптимизация, экономим на параметрах ))

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

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

Бизнес задача такая: есть пользователи, которые публикуют в ленте новости, а другие пользователи просматривают новости в полной версии и в мобильной.

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

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

 Кто-то реализовывал деталь в ленте мобильного приложения и в полной версии?

Нравится

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

Владислав, можно просто программно создать в ленте сообщение со ссылками на скачивание в системе нужных файлов с адресами вроде http://адрес_сайта/0/rest/FileService/GetFile/ 7b332db9-3993-4136-ac32-09353333cc7a/935b6ecb-3509-4c8a-bc7e-03ab0661da24. Как они формируются, см. в этой теме.

 

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

Зверев Александр,

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

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

Здравствуйте! Подскажите как создать ссылку в email-шаблоне(базовом функционале) на конкретную запись.

Дело в том, я нашел только html-элементы, где можно вставлять ссылки, наподобии /0/Nui/ViewModule.aspx#CardModuleV2/ITCardGenerationRequest1Page/edit/{Здесь должен быть Id записи}, но там недоступны максросы, чтобы вставить Id, также пробовал вручную - не работает.

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

Нравится

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

Егор, в стандартном справочнике шаблонов email-сообщений есть один «Шаблон уведомления о новой визе счета» с гиперссылкой на запись в разделе. Этот шаблон указан в системной настройке InvoiceVisaEmailTemplate. Но в нём, если открыть в дизайнере шаблонов, ссылка сделана просто как цифра в фигурных скобках:

 <div>
  <a href="{0}" style="color: rgb(8, 87, 166);" target="_blank">Invoice No.[#Invoice.Number#]</a> from [#Invoice.Date#] with total amount of [#Invoice.Currency.Short Name#][#Invoice.Amount#] requires approval by user or role "[#Approver.Name#]".</div>
 <div>

Его заполнение делается в коде отдельно, во встроенном БП BaseVisa в функции ProcessEmailBody:

  public virtual string GetVisaLink() {
   var schemaColumns = Entity.Schema.Columns;
   var referenceSchemaName = string.Empty;
   var referenceSchemaUId = Guid.Empty;
   EntitySchemaColumnCollection referenceSchemaColumns = null;
 
   foreach (var column in schemaColumns) {
    if (!column.IsInherited && column.DataValueType.IsLookup) {
     referenceSchemaName = column.ReferenceSchema.Name;
     referenceSchemaUId = column.ReferenceSchema.UId;
     referenceSchemaColumns = column.ReferenceSchema.Columns;
    }
   }
   var mainEntityId = Entity.GetTypedColumnValue<Guid>(referenceSchemaName + "Id");
   var typeColumnUId = GetSchemaTypeColumnUId(referenceSchemaUId);
   var cardSchemaName = string.Concat(referenceSchemaName, "Page");
   var cardSchemaUId = Guid.Empty;
   if (!typeColumnUId.Equals(Guid.Empty)) {
    var typeColumnName = referenceSchemaColumns.GetByUId(typeColumnUId).Name + ".Id";
    var typeColumnValue = GetSchemaTypeColumnValue(referenceSchemaName, typeColumnName, mainEntityId);
    cardSchemaUId = GetCardSchemaUId(typeColumnValue, SysModuleEntityId);
    cardSchemaName = GetCardSchemaName(cardSchemaUId);
   } else {
    cardSchemaUId = GetCardSchemaUId(Guid.Empty, SysModuleEntityId);
    cardSchemaName = GetCardSchemaName(cardSchemaUId);
   }
   var sectionNameUId = GetSectionName(SysModuleEntityId);
   var sectionName = GetCardSchemaName(sectionNameUId);
   var template = string.Empty;
   var formatStr = string.Empty;
   string baseUrl = Terrasoft.Web.Common.WebUtilities
    .GetBaseApplicationUrl(Terrasoft.Web.Http.Abstractions.HttpContext.Current.Request);
   if (sectionName.Contains("V2")) {
    template = "{3}/Nui/ViewModule.aspx#SectionModuleV2/{2}/{0}/edit/{1}";
    formatStr = string.Format(template, cardSchemaName, mainEntityId, sectionName, baseUrl);
   } else {
    template = "{2}/Nui/ViewModule.aspx#CardModule/{0}/view/{1}";
    formatStr = string.Format(template, cardSchemaName, mainEntityId, baseUrl);
   };
   return formatStr;
  }
...
  public virtual string ProcessEmailBody(string body, Guid contactId, byte[] macrosBytes) {
   var url = GetVisaLink();
   body = string.Format(body, url);
...

Как видим, для получения URL в общем случае нужно довольно много вычислений.

 

Ещё пример, в маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку.

Зверев Александр, Спасибо, посмотрю!

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

Добрый день! Согласно информации на академии: "Мобильное приложение доступно только для пользователей основного приложения Creatio и не может использоваться пользователями портала".

Чем это ограничение обусловлено?

Кейс следующий: есть мобильное приложение (нативное), которое надо прикрутить к CRM.

Возможно ли использование DataService через мобильное приложение? В CRM уже существует Портал с ограниченным доступом к сущностям.

 

Нравится

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

Searcher, насколько я понял, в стороннем нативном приложении вы хотите взаимодействовать с api creatio(beckend) к примеру через DataService, как делает МП Creatio? Тогда ответ - да, можно. Мобильный клиент работает по тому же принципу что и любой web клиент, если есть открытое api - оно будет работать везде одинаково. Готовых решений(или хотябы набросков на эту тему) не встречал.

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

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

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

Аналогичный вопрос рассматривался в статье:

https://community.terrasoft.ru/questions/licenzia-self-service-portal

Хочу уточнить, под нативным мобильным приложением имелось ввиду стороннее приложение (нативное для устройств IOS/Android).

МП Creatio относится к гибридным согласно информации на Академии.

Если я правильно понял, ограничений на подключение нет и через любое приложение можно обратиться к API CRM.

Пользователи Портала и мобильного приложения одни и те же. Поэтому возникает огромное желание прикрутить мобильное приложение как клиент к CRM, которое через API использует методы портала для получения/передачи данных. Это жизнеспособная схема?

 

Searcher, насколько я понял, в стороннем нативном приложении вы хотите взаимодействовать с api creatio(beckend) к примеру через DataService, как делает МП Creatio? Тогда ответ - да, можно. Мобильный клиент работает по тому же принципу что и любой web клиент, если есть открытое api - оно будет работать везде одинаково. Готовых решений(или хотябы набросков на эту тему) не встречал.

Kuchma Ivan,

Да, мы хотим взаимодействовать с api creatio (backend) через DataService с префиксом SSP и вызывать кастомные сервисы: аутентификация, авторизация и т.д.

Спасибо.

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

Зверев Александр,

Спасибо, насчет разделения в курсе, поэтому пишу выше префикс ssp

Вы удалили последний ответ Кучмы Ивана по какой причине? Он содержал ошибку?

Ответ не удалили, а выбрали лучшим, после чего он сдвинулся вверх.

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

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

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

Нравится

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

Отчет где будет строиться?

1) Был опыт вывода view в итоги

2) В excel отчеты

3) подключение вычисляемых полей из view к реестру раздела

Добрый день! Вы строите View c набором итоговых столбцов по которым уже и будите фильтровать из интерфейса.

Вот пример моего представления:

CREATE VIEW dbo.[VwDynamicOsago] ([Id],[CreatedAt],[WeekId],[MonthId],[Name], [InsuranceCount], 
[AvgPolicyCost], [PolicyIncome], [Cpa], [ProfitByOnePolicy], [Turnover], [Revenue], [AdsCost], [Profit], 
[MultiplexCoeff], [SingleTax], [BankExpenses], [MotivationCC],[BankRatio]) AS
SELECT 
	NEWID() [Id],	
	CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt])) [CreatedAt],
	[I].[WeekId] [WeekId],
	[I].[MonthId] [MonthId],
	'Динамика '+'('+CONVERT(varchar(10), DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt]), 120)+')' [Name],
	COUNT([I].[Id]) [InsuranceCount],
	AVG([I].BrokerDiscountedPayment) [AvgPolicyCost],
	AVG([I].Revenue) [PolicyIncome],
	dbo.fn_AbCalculateCpa([CpcCost].[AdsCost], COUNT([I].[Id])) [Cpa],
	dbo.fn_AbCalculateProfitByOnePolicy(SUM([I].Revenue), 
										dbo.fn_AbCalculateSingleTax(SUM([I].[Commission]), 5), 
										dbo.fn_AbCalculateBankExpenses(AVG([I].Revenue), dbo.fn_AbGetBankRatio(CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt])))), 
										dbo.fn_AbCalculateMotivationCC(SUM(CC_MOTIVATION.[Value]), COUNT([I].[Id])), 
										[CpcCost].[AdsCost], 
										COUNT([I].[Id])
										) [ProfitByOnePolicy],	
	SUM([I].BrokerDiscountedPayment) [Turnover],
	SUM([I].Revenue) [Revenue],
	[CpcCost].[AdsCost] [AdsCost],
	dbo.fn_AbCalculateProfit(SUM([I].Revenue), 
							 dbo.fn_AbCalculateSingleTax(SUM([I].[Commission]), 5), 
							 dbo.fn_AbCalculateBankExpenses(AVG([I].BrokerDiscountedPayment), dbo.fn_AbGetBankRatio(CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt])))), 
							 dbo.fn_AbCalculateMotivationCC(SUM(CC_MOTIVATION.[Value]),	COUNT([I].[Id])), 
							 [CpcCost].[AdsCost]
							 ) [Profit],
	IIF([CpcCost].[AdsCost] IS NOT NULL AND [CpcCost].[AdsCost] > 0, SUM([I].Revenue)/[CpcCost].[AdsCost],0) [MultiplexCoeff],
 
	dbo.fn_AbCalculateSingleTax(SUM([I].[Commission]), 5) [SingleTax],
	dbo.fn_AbCalculateBankExpenses(AVG([I].BrokerDiscountedPayment), dbo.fn_AbGetBankRatio(CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt])))) [BankExpenses],
	dbo.fn_AbCalculateMotivationCC(SUM(CC_MOTIVATION.[Value]), COUNT([I].[Id])) [MotivationCC],
	dbo.fn_AbGetBankRatio(CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt]))) [BankRatio]
 
FROM [AbInsurance] [I] WITH(NOLOCK)
LEFT OUTER JOIN [CpcCost] [CpcCost] WITH(NOLOCK) ON [CpcCost].[Date] = CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt]))
OUTER APPLY (SELECT SUM(IIF( DATEPART(HOUR, DATEADD(HOUR,dbo.fn_AbGetAddedHoursToSqlQuery(),CreatedAt)) > 18, 50, 40)) [Value]
			 FROM [AbInsurance] [I1] WITH(NOLOCK)
			 WHERE [I1].ProcessingReasonCCId IS NOT NULL AND [I1].Id = [I].Id
			 GROUP BY CONVERT(date,DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I1].[CreatedAt]))
			 ) AS CC_MOTIVATION
WHERE [I].StatusId = '195CD1AD-37B3-4F0A-B4FC-70E2BF0B3F06'
		AND [I].[CreatedAt] IS NOT NULL
GROUP BY CONVERT(date, DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt])), 'Динамика  '+'('+CONVERT(varchar(10), DATEADD(HOUR, dbo.fn_AbGetAddedHoursToSqlQuery(), [I].[CreatedAt]), 120)+')', [CpcCost].[AdsCost], [I].[MonthId], [I].WeekId

 

Может, лучше не создавать динамически view под каждый запуск отчёта, а при его запуске формировать программно в ESQ или Select выборку с нужными условиями и группировками и записывать её  результаты в некоторую (одну и ту же) служебную таблицу, добавив в отдельную колонку Id запуска. А при построении отчёта фильтровать её по этому Id. А когда после построения отчёта эти записи станут ненужными, чистить.

Александр, Ваша идея очень интересна. Спасибо! Объясните, пожалуйста, вкратце как можно на вкладке с итогами добавить контролы дат, для запроса диапазона дат у пользователя и кнопки Сформировать для инициирования формирования ESQ.

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

 

Вам необходимо реализовать страницу настроек отчёта (пример схемы в конфигурации — ContactAnniversariesReportFilter) и зарегистрировать её в БД, в таблице SysModuleAnalyticsReport, в колонке SysOptionsPageSchemaUId записи Вашего отчёта.

 

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

Нигрескул Алексей пишет:

Добрый день! Вы строите View c набором итоговых столбцов по которым уже и будите фильтровать из интерфейса.

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

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

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

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

Нравится

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

Егор, вопрос недавно обсуждался тут и тут. У Вас такое же поведение детали, как у Андрея по второй ссылке или трудность возникла в чём-то другом?

Зверев Александр, деталь вообще не показывается, и речь идет на полностью кастомном модальном окне

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

 

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

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