Вопрос

Хочу дополнительно по определенным сложным условиям фильтровать Результат в активности.

Единственным способом мне видится lookupListConfig filters. 

Вопрос - как корректно вызвать родительские фильтры, чтобы не копипастить их в свой код?

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

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

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

Не так давно уже обсуждали подобную тему здесь.

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

Но так как, к сожалению, это не так, Вам прийдется дублировать родительские фильтры в своем коде sad

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

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

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

Пример работы должен получится как в Employees -> Communication options.

 

 

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

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

Логика детали средств связи контакта с многоуровневым меню кнопки [+] реализована в схеме страницы ContactCommunicationDetailV2 и в схеме модели BaseCommunicationViewModel.

Есть ли возможность это сделать без программирования? Мне как новичку сложно там разобраться, а именно разобраться где начало. 

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

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

После компиляции вывалилось сообщение о неуспешном завершении, после этого в колонке текст последней ошибки объекта всплыло сообщение The statement terminated. The maximum recursion 100 has been exhausted before statement completion. что это значит и как ее исправить? объект не открывается, метаданные тоже

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

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

Очень похоже на зацикливание в иерархии наследования, если сгенерировать исходные коды и компилировать все не помогает, то попытайтесь экспортировать последние измененные схемы в файл, удалить их и перекомпилировать (Режим компилировать все)

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

Уточните, какие изменения вносились с Вашей стороны в конфигурацию?

У Вас on-site или on-demand?

Очень похоже на зацикливание в иерархии наследования, если сгенерировать исходные коды и компилировать все не помогает, то попытайтесь экспортировать последние измененные схемы в файл, удалить их и перекомпилировать (Режим компилировать все)

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

Григорий Чех,

Спасибо, разобрались! Каким-то образом в созданном нами объекте вместо "базового" родительским был указан сам новосозданный объект. Т.е. он ссылался сам на себя.

Геннадий Кутуков,

Ну чтото такое я и подозревал в общем хорошо что все наладилось :)

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

Решил подключить Visual Studio,  для более удобной разработки.

После измены параметров:

fileDesignMode enabled="true" />
...
<add key="UseStaticFileContent" value="false" />

зашел компилировать - пишет что не найдено родителя у (Внимание!) схемы - это исходный код!

В системе уже есть несколько пакетов с доработками, все делал по https://academy.terrasoft.ru/documents/technic-sdk/7-12/nastroyka-visual-studio-dlya-razrabotki-v-faylovoy-sisteme

Как скомпилировать и продолжить настройку?

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

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

 

Вот текст ошибки:

Зависимость 'UsrSyncInvoicesService' пакета 'Sync1C' не найдена. Путь поиска: C:\inetpub\wwwroot\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\Sync1C\Schemas\UsrSyncInvoicesService\UsrSyncInvoicesService.cs

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

Ефанов Иван Александрович,

так не дает скомпилировать! я же писал об этом

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

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

Она на месте, с ней все в порядке, используется в БП, компиляция без настроек проходит успешно

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

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

Есть БП, в нем есть скрипт. в скрипте выполняется некий код, который использует сервис ReportService. Там берется Connection. Если запускать БП вручную - все работает. Если по плану - выбивает ошибку.

Вопрос: Как в БП передать Get<UserConnection>("UserConnection"); в userConnection сервиса ReportService? Есть ряд других сервисов, возможно туда тоже нужно будет это передать....

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

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

Почему вы решили что UserConnection не передается?

Вы от какого пользователя запускаете БП по расписанию? Есть ли у єтого ползователя права для рабьоты с  ReportService?

Добавить комментарий

Григорий Чех,

Автозапуск от пользователя что и обычный запуск, вот ошибка:

System.ServiceModel.ServiceActivationException: Set AspNetCompatibilityEnabled true
   в Terrasoft.Web.Common.BaseService.get_UserConnection()
   в Terrasoft.Configuration.ReportService.ReportService.GenerateDevExpressReport(String entitySchemaUId, String reportSchemaId, String recordId, String reportParameters)
   в Terrasoft.Configuration.ReportService.ReportHelper.CreateReport(String entitySchemaUId, String reportSchemaUId, String templateId, String recordId, String reportParameters, Boolean convertInPDF)
   в Terrasoft.Configuration.ReportService.ReportService.CreateReport(String entitySchemaUId, String reportSchemaUId, String templateId, String recordId, String reportParameters, Boolean convertInPDF)
   в Terrasoft.Core.Process.UsrAutoSendNightReportMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

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

Те определять UserConnectionнужно как для сервиса

userConnection = HttpContext.Current.Session["UserConnection"]

Те определять UserConnectionнужно как для сервиса

userConnection = HttpContext.Current.Session["UserConnection"]

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

Дмитрий Степанов,

тоже делал так, но там нужно было несколько функций тока, а тут хз что нужно будет...

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

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

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

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

Надо было искать не в QuickFilterModuleV2, а в CustomFilterViewModelV2.

Список колонок получает функция:

function getSimpleFilterColumnList(filters, list) {
	list.clear();
	var columnList = {};
	var columnNames = [];
	var columns = this.entitySchema.columns;
	Terrasoft.each(columns, function(column) {
if (column.dataValueType !== Terrasoft.DataValueType.GUID &&
	column.dataValueType !== Terrasoft.DataValueType.TIME &&
	column.dataValueType !== Terrasoft.DataValueType.BLOB &&
	column.dataValueType !== Terrasoft.DataValueType.IMAGELOOKUP &&
	column.usageType !== ConfigurationEnums.EntitySchemaColumnUsageType.None) {
	if (this.isColumnDeprecated(column)) {
return;
	}
	columnNames.push({
name: column.name,
caption: column.caption
	});
}
	}, this);
	var sortedColumnNames = columnNames.sort(function(a, b) {
if (a.caption === b.caption) {
	return 0;
} else {
	return a.caption > b.caption ? 1 : -1;
}
	});
	Terrasoft.each(sortedColumnNames, function(item) {
var column = columns[item.name];
columnList[column.name] = {
	value: column.name,
	displayValue: column.caption,
	dataValueType: column.dataValueType,
	referenceSchemaName: column.referenceSchemaName
};
	});
	list.loadAll(columnList);
}

 

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

Здравствуйте! Была ли у кого-нибудь такая ситуация, когда на детали сортируешь по определённому полю, и происходит не просто сортировка, а изменяется количество записей, т.е. например до того как отсортировать записи на реестре детали, их было 8, а после - 12?

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

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

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

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

О, тоже не раз замечал клиент такое. В реестре видит одно количество записей, а в Summaries - другое. И только refresh помогает

Если в Summaries  больше то можно думать в сторону фильтрации и о каком реестре речь о Lookup справочнике или реестре раздела? 

В первом случае можно думать о фильтрации во втром права и тд. А свалов не было в консоли броузера?

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

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

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

 

 

Григорий Чех,

В консоли ничего не валится, и я дождался загрузки данных после нажатия "показать ещё". Речь идёт о реестре детали "Пакет документов".
На первом скрине при фильтрации по колонке "Документ", есть 2 записи "Договор аренды" у заявителя, всё хорошо.

https://yadi.sk/i/vH19rH6KcGSXOQ
но потом при фильтрации по колонке "Роль", этих записей у заявителя нет, вот может кто-то объяснит что это?
https://yadi.sk/i/AZFQEA194gzTKQ

Смотрите SQL-запросы при открытии детали.

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

При звонке из задачи нажимаю ПОЗВОНИТЬ. Звоню, звонок сохраняется, но к задаче не привязывается (не появляется на вкладке Звонки и SQL запросом видно, что ActivityId = NULL).

При этом на сервере разработки ОК, на проде - не работает привязка. 

Чего не хватает7

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

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

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

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

У меня 7.11.2 

Если дело не в доработках на тесте, попробуйте обновиться.

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

Добрый день!

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

 

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

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

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

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

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

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

Решение из маркет плейса не подходит по причине того что версия приложения 7.11.1, а дополнение должно работать на версии не ниже 7.11.3

Так отправьте из внешнего сигнал, который поймают внутренние и завершатся.

А по поводу версий, Вы можете обновиться с 7.11.1 на 7.11.3, между минорными версиями не должно быть особо тяжело.

Шувалов Николай Юрьевич,

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

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

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

Добрый день! 
Появилась необходимость изменить базовое поле поиска, при выборе в окне справочного поля, и подставить туда своё значение.
Как это выглядит на примере:

 

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

Поиски не увенчались успехом, застопорился на схеме LookupPage.js

var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
if (primaryDisplayColumn) {
	this.lookupInfo.searchColumn = {
		value: primaryDisplayColumn.name,
		displayValue: primaryDisplayColumn.caption
	};
}

Значение для данной колонки берётся отсюда, но как его подменять для определённого поля - не сообразил

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

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

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

Григорий Чех, columnName упорно изменяться не хочет. А именно значение в списке слева на первом скрине

Покажите свой код

Григорий Чех,

"Gun": {
   "dataValueType": Terrasoft.DataValueType.LOOKUP,
   "lookupListConfig": {
      columns: ["LkpGauges", "UsrConfigProduct"],
      searchValue: "Вериф", // Вот это работает, в инпуте value заполняется
      columnName: "UsrConfigProduct",
      orders: [{
          columnPath: "UsrConfigProduct"
          direction: Terrasoft.OrderDirection.ASC
      }],
      "filters": [ //Фильтры ]
   }
}

 

Григорий Чех,

Это справочное поле, не уверен, что сыграет роль. Но на всякий случай скажу. 

И еще, поле над которым производится действие, является полем в детали с редактируемым реестром

Это интересно. Т.е. теоретически можно прокинуть searchColumn в lookupInfo, но если у объекта есть колонка для отображения - всё перетрется.

варианта 2:

- Доделывать Lookup-модуль

- Оставить как есть, убрать в схеме детали отображаемое поле.

 

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

"Gun": {
   "lookupListConfig": {
      searchValue: "Вериф",
      searchColumn: "UsrConfigProduct"
   }
}

 

Варфоломеев Данила,

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

Самое интересное в том, что у меня получалось прокинуть значения. Но при обращении к lookupinfo он забирает все равно свои значения, которые получил из схемы ConfItem.js (куда ссылается справочное поле). И там прописано поле для отображения
(PrimaryDisplayColumnName)

 

Варфоломеев Данила,

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

Попробуй переопределить loadVocabulary как то так\:

loadVocabulary: function(args, tag) {
    var column = this.getColumnByName(tag);
    args.schemaName = column.referenceSchemaName; //подставь свой
     this.callParent(arguments);
 }

Если не получится отпишись, вечером смогу проєксперементировать.

Григорий Чех,

не совсем понял, что менять. Однако там все равно схема (ConfItem) по которой открытие справочника производится, я думаю, что её подменить можно, но это не то, что мы ищем

Прокинуть как-то туда primaryDisplayColumnName, у меня не увенчалось успехом

VadimCh пишет:
Однако там все равно схема (ConfItem) по которой открытие справочника производится

 Я немного неправильно описал.
Схема ConfItem генерится на основании объекта в конфигурации. На ConfItem ссылается справочное поле, которое вы пытаетесь открыть. Соответственно и берется PrimaryDisplayColumnName из ConfItem. Те 2 варианта так и остаются: либо менять PrimaryDisplayColumnName в null в каждом объекте на которое ссылается нужное вам справочное поле, либо переделать логику LookupPage.

Варфоломеев Данила,

В рамках реализации задачи, заместил LookupPage, и переработал тот кусок кода, который скидывал в посте, и присоединил новую схему

"lookupListConfig": {
  lookupPageName: "KmFiltrationBaseLookup",
}

Как по мне, про два варианта вы правы, но первый не подходит - если этот объект используется по всей системе не единожды. И везде требуется разная колонка, либо существует множество старых записей на основе колонки для отображения. При изменении колонки - старые записи будут отображаться не корректно

VadimCh,

А не могли бы Вы посоветовать что и где переработать, чтобы решить эту проблему?

Alex Zaslavsky,

Да, конечно

Чтобы решить именно эту проблему, требуется создать модуль, 

// Полный листинг схемы, создаем свой модуль, и пихаем туда эту схему, дав ей своё название
 
define("KmFiltrationBaseLookup", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator",
"ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"],
	function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) {
		return Ext.define("Terrasoft.configuration.KmFiltrationBaseLookup", {
			alternateClassName: "Terrasoft.KmKLSHLookupPage",
			extend: "Terrasoft.LookupPage",
			gridWrapClasses: ["custom-lookup-control"],
 
			init: function(callback, scope) {
				callback = callback || Terrasoft.emptyFn;
				if (this.viewModel) {
					callback.call(scope);
					return;
				}
				var lookupInfo = this.getLookupInfo();
				if (this.Ext.isArray(lookupInfo)) {
					var configIndex = 0;
					var parameters = this.parameters;
					if (!this.Ext.isEmpty(parameters)) {
						configIndex = parameters.index;
					}
					this.lookupInfo = lookupInfo[configIndex];
					this.lookupsInfo = lookupInfo;
				} else {
					this.lookupInfo = lookupInfo;
				}
				this.processModuleFlag = this.sandbox.publish("CardProccessModuleInfo", null, [this.sandbox.id]);
				this.initHistoryState();
				this.getSchemaAndProfile(this.lookupInfo.lookupPostfix, function(entitySchema, profile) {
					if (this.isDestroyed) {
						return;
					}
                    // Здесь сам объект, и сюда мы прокидываем свои свойства
                    // Свойства для каждой колонки находятся в схеме объекта (ConfItem.js Пример!)
					entitySchema.primaryDisplayColumn = {
						caption: "Модель",
						columnPath: "UsrConfigProduct.UsrName",
						dataValueType: 1,
						isInherited: false,
						isRequired: true,
						isValueCloneable: false,
						name: "UsrConfigProduct.UsrName",
						size: 250,
						uId: "c4f28c00-8c5d-46cd-98de-f38d2e52a2dc",
						usageType: 0
					};
 
					var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
 
					if (primaryDisplayColumn) {
						this.lookupInfo.searchColumn = {
							value: primaryDisplayColumn.name,
							displayValue: primaryDisplayColumn.caption
						};
					}
					this.lookupInfo.entitySchema = entitySchema;
					this.lookupInfo.gridProfile = profile;
					var viewModel = this.viewModel = this.generateViewModel();
					viewModel.lookupInfo = this.lookupInfo;
					viewModel.load(profile, callback, scope);
				});
			}
		});
	}
);

 

Alex Zaslavsky,

 
			//в атрибутах её подключаем
			"Gun": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					lookupPageName: "KmFiltrationBaseLookup",
				}
			}

 

VadimCh,

Благодарю, попытаемся разобраться :)

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