Здравствуйте.
Столкнулся вот с такой необходимостью, добавить склад в раздел "Продукт в заказе", чтобы он так же отображался и в мобильном приложении.
В конфигурации, в папке "Custom" открыл объект "Продукт в заказе". В папку "İnherited Columns" добавил справочник "Склад". После настройки опубликовал объект. После добавления дополнительной колонки в списке продукта в заказе, поначалу отображался склад, но нужно было его добавлять в ручную.
Однако, после обновления самой страницы, продукты не отображались в заказе, а новый товар не добавлялся.
Подскажите пожалуйста, как настроить данную колонку без ущерба для системы, и чтобы склад, к которому привязан продукт отображался автоматически?
Благодарю за помощь.

Нравится

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

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

Если у Вас продукт привязан к складу, то логичней было бы добавить изначально поле "Склад" в объект "Продукты".
Далее, вывести это поле на страницу редактирования "Продукта в заказе", как поле связанного объекта.

Как итог, Вы будете только один раз заполнять поле "Склад" (в разделе "Продукты"), а в разделе "Продукты в заказе" значение будет подтягиваться автоматически.

"Демьяник Алексей Олегович" написал:

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

Если у Вас продукт привязан к складу, то логичней было бы добавить изначально поле "Склад" в объект "Продукты".

Далее, вывести это поле на страницу редактирования "Продукта в заказе", как поле связанного объекта.

Как итог, Вы будете только один раз заполнять поле "Склад" (в разделе "Продукты"), а в разделе "Продукты в заказе" значение будет подтягиваться автоматически.

Здравствуйте.
Создал справочник "Склад" в разделе "Продукты". Добавил новую колонку "Склад" в колонке. Привязал продукт к складу. Однако, при добавлении продукта в заказ, склад не отображается.

Дмитрий, попробуйте настроить колонки детали.

"Александр Зубков" написал:

Дмитрий, попробуйте настроить колонки детали.


Уже всё перепробовал. Не отображается автоматически и всё. Приходится вручную вводить склад в колонке продукта.
Может есть другой вариант?

Так же были добавлены новые детали цены и суммы. Как настроить деталь "Сумма", чтобы она изменялась в зависимости от кол-ва и цены продукта? Чтобы не нужно было прописывать сумму товаров вручную?

"Ануфриев Дмитрий Юрьевич" написал:

Уже всё перепробовал. Не отображается автоматически и всё. Приходится вручную вводить склад в колонке продукта.

Может есть другой вариант?

Еще раз повторюсь.
У Вас есть одно поле "Склад". Это поле находится в разделе "Продукты". И больше нигде.
У Вас есть деталь "Продукт в заказе". Для корректного вывода поля:
1) Перейдите в раздел "Заказы"
2) Перейдите к детали "Продукт в заказе".
3) Нажмите Вид -> Настроить колонки
4) Отобразится окно настройки колонок. Нажмите (+). Откроется окно выбора поля. Нажмите (+) возле названия объекта (в нашем случае это "Продукт в заказе"). Выберите объект "Продукты". В поле ниже введите "Склад" и выберите поле, которое предлагает система. Нажмите "Ок".

"Ануфриев Дмитрий Юрьевич" написал:

Так же были добавлены новые детали цены и суммы. Как настроить деталь "Сумма", чтобы она изменялась в зависимости от кол-ва и цены продукта? Чтобы не нужно было прописывать сумму товаров вручную?

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

"Демьяник Алексей Олегович" написал:
Ануфриев Дмитрий Юрьевич пишет:

Уже всё перепробовал. Не отображается автоматически и всё. Приходится вручную вводить склад в колонке продукта.

Может есть другой вариант?

Еще раз повторюсь.

У Вас есть одно поле "Склад". Это поле находится в разделе "Продукты". И больше нигде.

У Вас есть деталь "Продукт в заказе". Для корректного вывода поля:

1) Перейдите в раздел "Заказы"

2) Перейдите к детали "Продукт в заказе".

3) Нажмите Вид -> Настроить колонки

4) Отобразится окно настройки колонок. Нажмите (+). Откроется окно выбора поля. Нажмите (+) возле названия объекта (в нашем случае это "Продукт в заказе"). Выберите объект "Продукты". В поле ниже введите "Склад" и выберите поле, которое предлагает система. Нажмите "Ок".

Ануфриев Дмитрий Юрьевич пишет:

Так же были добавлены новые детали цены и суммы. Как настроить деталь "Сумма", чтобы она изменялась в зависимости от кол-ва и цены продукта? Чтобы не нужно было прописывать сумму товаров вручную?

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

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

Я предложил один из возможных вариантов решения, а не пытался искать ошибки в Вашем решение.

"Демьяник Алексей Олегович" написал:

Я предложил один из возможных вариантов решения, а не пытался искать ошибки в Вашем решение.

Если есть ошибки, то почему бы и не указать на них? Тот вариант, который предложили вы и был использован. За что вам большое спасибо.
Однако, второй вопрос заключался, в том, что не идёт привязка склада товара в разделе "Заказы". Пока всё добавляют вручную.
Будем искать способ. Надеюсь на вашу помощь и дальше

"Ануфриев Дмитрий Юрьевич" написал:

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

Однако, второй вопрос заключался, в том, что не идёт привязка склада товара в разделе "Заказы". Пока всё добавляют вручную.

Будем искать способ. Надеюсь на вашу помощь и дальше

Вы не то поле "Склад" отображаете.
Как вариант Вы можете использовать БП для реализации этой задачи:
1) Сигнал по событию добавления записи в объект "Продукты в заказе"
2) Чтение данных по объекту "Продукты в заказе" с фильтром Id = Стартовый сигнал.Уникальный идентификатор записи
3) Чтение данных по объекту "Продукты " с фильтром Id = Чтение данных "Продукты в заказе".Продукт
4) Изменение данных в объекте "Продукты в заказе" с фильтром Id = Стартовый сигнал.Уникальный идентификатор записи
Изменяем значение в поле "Склад" значением поля "Склад" с третьего чтения данных.
5) Конец процесса

"Демьяник Алексей Олегович" написал:
Ануфриев Дмитрий Юрьевич пишет:

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

Однако, второй вопрос заключался, в том, что не идёт привязка склада товара в разделе "Заказы". Пока всё добавляют вручную.

Будем искать способ. Надеюсь на вашу помощь и дальше

Вы не то поле "Склад" отображаете.

Как вариант Вы можете использовать БП для реализации этой задачи:

1) Сигнал по событию добавления записи в объект "Продукты в заказе"

2) Чтение данных по объекту "Продукты в заказе" с фильтром Id = Стартовый сигнал.Уникальный идентификатор записи

3) Чтение данных по объекту "Продукты " с фильтром Id = Чтение данных "Продукты в заказе".Продукт

4) Изменение данных в объекте "Продукты в заказе" с фильтром Id = Стартовый сигнал.Уникальный идентификатор записи

Изменяем значение в поле "Склад" значением поля "Склад" с третьего чтения данных.

5) Конец процесса

Благодарю. Попробую данный вариант то же.

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

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

Столкнулись с задачей, когда необходимо переделать базовую фильтрацию "FixedFilters" для расписания. Идея в том, чтобы вместо кнопок "Сегодня" и "Текущая неделя" сделать 4 кнопки, которые будут показывать определенные недели в году (например кнопка "1" будет показывать неделю, по которой была зарегистрирована 1ая запись для данного объекта). Подскажите, пожалуйста, как лучше всего будет организовать подобное?

Нравится

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

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

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

Как пример, можете посмотреть реализованный функционал (фиксированный фильтр по ответственному и фиксированный фильтр по периоду) в базовой версии и сделать по на подобии:

this.fixedFilterConfig = {
entitySchema: Activity,
filters: [
{
	  name: 'PeriodFilter',
	  caption: resources.localizableStrings.PeriodFilterCaption,
	  dataValueType: Terrasoft.DataValueType.DATE,
	  startDate: {
			   columnName: 'StartDate',
			   defValue: Terrasoft.startOfWeek(new Date())
	  },
	  dueDate: {
			   columnName: 'DueDate',
			   defValue: Terrasoft.endOfWeek(new Date())
	  }
},
{
	  name: 'Owner',
	  caption: resources.localizableStrings.OwnerFilterCaption,
	  columnName: 'Owner',
	  defValue: Terrasoft.SysValue.CURRENT_USER_CONTACT,
	  dataValueType: Terrasoft.DataValueType.LOOKUP,
	  filter: BaseFiltersGenerateModule.OwnerFilter,
	  appendFilter: function(filterInfo) {
			   var filter;
			   if (filterInfo.value && filterInfo.value.length > 0) {
						 filter = Terrasoft.createColumnInFilterWithParameters(
								  '[ActivityParticipant:Activity].Participant',
								  filterInfo.value);
			   }
			   return filter;
	  }
}
]
};

Дмитрий, спасибо за совет! Попробуем на основе этого что-то придумать.

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

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

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

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

Нравится

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

Дарья, добрый день.

Выгрузите исходники согласно инструкции:

http://www.community.terrasoft.ru/blogs/8747

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

Ссылка, которую вы дали - это же ветка форума 5.х, касающаяся отладки - причем здесь выгрузка исходников?
Я в принципе, уже увидела следующий пример

if (this.get("CanViewSysOperationAudit") != null) {
this.navigateToSysOperationAuditSection();
} else {
RightUtilities.checkCanExecuteOperation({
operation: "CanViewSysOperationAudit"
}, function(result) {
this.set("CanViewSysOperationAudit", result);
this.navigateToSysOperationAuditSection();
}, this);
}
}

Это пример использования операции - когда операция запрещает/разрешает использовать то или иное действие меню - в данном случае, это журнал аудита.
В основном, все операции в конфигурации используются для таких целей

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

Предположила, что надо сделать виртуальный атрибут
"MyCanEditDateReact": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: null
},

создать метод для его заполнения
(т.е. аттрибут заполняется true,
если у пользователя есть право на операцию с кодом CanEditDateReact)
MethodCanEditDateReact: function() {

RightUtilities.checkCanExecuteOperation({
operation: "CanEditDateReact"
}, function(result) {
this.set("MyCanEditDateReact", result);

}, this);
}

вызвать метод этот в событии
onEntityInitialized: function() {
this.callParent(arguments);
this.MethodCanEditDateReact();
},

и уже в условиях бизнес-правила сравнивать заполняемый виртуальный аттрибут со значением true.
Но еще до прописывания самого бизнес-правила
наткнулась на ошибку в строке operation: "CanEditDateReact".

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

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

Коллеги, в пакете Nui есть замечательная схема RightsHelper. Там много примеров по использованию прав на операции.

Добрый день!
Спасибо, все получилось.
Использовала функцию checkCanExecuteOperation из схемы RightUtilites

Реализация такова была:

вызвала функцию в методе
MethodCanEditDateReact: function() {

RightUtilities.checkCanExecuteOperation({
operation: "CanEditDateReact"
}, function(result) {
this.set("MyCanEditDateReact", result);
}, this);
}

данный метод вызван в событии
onEntityInitialized: function() {
this.callParent(arguments);
this.MethodCanEditDateReact();
}

На поле наложено бизнес-правило
( если у пользователя есть право на операцию, то данное поля enabled для него)
rules {
"SatisfactionLevel": {
"EnableLevel1": {
//debugger
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.ENABLED,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "CanEditDateReact"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: true
}
}]
}

}

}

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

При добавлении, удалении или изменении записи детали "Бонусы", поле "Бонус по плану" каждой записи пересчитывается относительно суммы полей "Доля" всех записей. Пересчет реализован на сервере при событиях onSaved и onDeleted. Обновление грида детали происходит при помощи subscriber:

"SxProjectTeamBonus": {
"schemaName": "SxProjectTeamBonusDetailV2",
"entitySchemaName": "SxProjectTeamBonus",
"filter": {
"detailColumn": "SxProject",
"masterColumn": "Id"
},
subscriber:function(){
this.updateDetail(
{
detail: "SxProjectTeamBonus",
reloadAll: true
}
);
}
}
При удалении или изменении записи, в гриде детали на странице проекта отображаются верные значения. Но при добавлении правильные значения только у добавленной записи. Остальные же не обновляются. В базу заносятся правильные значения, но деталь просто отказывается обновляться.
Пробовал и this.updateDetail({detail: "SxProjectTeamBonus"}) и this.updateDetails() и при помощи SUBSCRIBE/PUBLISH.
Как заставить грид детали обновиться при добавлении новой записи?

Нравится

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

Решил проблему с помощью reloadEntity()
Но, может быть, все-таки есть способ обновить грид детали не обновляя страницу проекта?
Интересный факт - при нажатии на колонку грида, чтобы отсортировать по ней записи - данные обновляются.

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

Уточните, пожалуйста, версию, которую Вы используете.

Версия BPMOnline 7.5

Здравствуйте, Олег!

Рекомендую посмотреть процессы, реализованные в объекте "Продукт в заказе" - при добавлении или удалении записи запускается процесс, которые пересчитывает поле "Итого".
Аналогичным образом может быть реализована Ваша задача.

Важно! При добавлении/удалении записи, Вам необходимо (на сколько я понял), пересчитывать не только значение поля в самом разделе, но еще и все записи в объекте детали, у которых поле для связи с объектом содержит то же значение, что и у добавляемой/удаляемой записи.

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

Добрый день.
Помогите с реализацией примера процесса в BpmOnline 7.6 BankSales

1. Необходимо создать новый объект в системе без создания нового раздела.
2. Создать его страницу редактирования.
3. Добавить его как деталь в раздел Физ.Лица.
4. Создать процесс в разделе Физ.Лица. при запуске которого открывается карточка редактирования созданного объекта с заполненным полем выбранного Физ. лица. и после сохранения карточки создается задача на пользователя.

Реализация на текущий момент:
1. Создал объект "Согласование отпуска" с полями Физ.Лицо., Заголовок, Ответственный
2. Создал новую деталь в разделе Физ.Лица с помощью мастера деталей
3. Зарегистрировал созданную мастером страницу редактирования с помощью процедуры
EXEC [dbo].[tsp_RegisterPage]
@ModuleEntityName = N'nfcMatchingAbsent',
@PageName = N'nfcnfcMatchingAbsent1Page',
@TypeColumnUId = NULL,
@TypeValue = NULL,
@AddMenuCaptionRus = NULL,
@AddMenuCaptionEng = NULL,
@CardHeaderCaptionRus = NULL,
@CardHeaderCaptionEng = NULL
4. Создал процесс, и добавил элемент страница редактирования.
5. В поле страница элемента редактирования "Страница редактирования" моя зарегистрированная страница не появилась.
6. Вписал значения страницы и объекта вручную (Id объектов в переменные ObjectSchemaId и PageSchemaId).
7. Установил значение по умолчанию Физ.Лицо
8. Опубликовал процесс.
9. При запуске процесса в консоли возникает ошибка:
В консоли опять ошибка Uncaught TypeError: Cannot read property 'cardSchema' of undefined
:8075/core/e995a30a7af7cc9773586f5211d95c73/Terrasoft/amd/core.js:555 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://ччч.ru:8075/0/configuration/75c5ed49bdf66b4c26da63b1d93b3572/ConfigurationBootstrap.js
line: 6064
message: Uncaught TypeError: Cannot read property 'cardSchema' of undefined

Нравится

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

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

"Илья Т." написал:

Добрый день.

Помогите с реализацией примера процесса в BpmOnline 7.6 BankSales

2. Создал новую деталь в разделе Физ.Лица с помощью мастера раздела

Схема детали создается при помощи мастера детали, а не мастера раздела. Схему детали нельзя открыть в бизнес процессе элементом "Страница редактирования"

Есть два решения Вашей задачи.
Первое - пользовательскими инструментами системы:
1) Создайте новый раздел, используя мастер раздела. Создайте поля, которые должны быть на детали.
Данное действие создаст страницу редактирования раздела (которая будет позже вызываться в бизнес процессе).
Созданный раздел не нужно выводить в рабочие места - он будет техническим.

2) Создайте деталь на основе объекта, созданного в первом пункте. Деталь создается с использованием мастера детали.

3) Выведите созданную деталь в нужный раздел, используя мастер раздела в нужном разделе (прошу прощения за тавтологию).

Итог: у Вас есть страница редактирования и деталь, которые смотрят в один объект.

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

Второе - создать свою страницу редактирования, используя навыки программирования на Java Script, унаследовав, например, базовую страницу редактирования справочников. После этого, созданную страницу необходимо зарегистрировать в качестве страницы редактирования, используя хранимую процедуру [dbo].[tsp_RegisterPage].

Алексей, ошибся, создал деталь с помощью мастера деталей.

И получается что на каждый новый объект нужно создавать технический раздел?
Это очень неэкономный способ. Так как параллельно создается множество иных объектов. И еще существует ограничение по длине названия создаваемого объекта.
И как быть если я хочу отобразить карточку уже существующего объекта? Например страницу редактирования Адреса?

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

Алексей, а можно ли как то передавать значения по умолчанию в элемент "преднастроенная страница" без создания промежуточных страниц?
Как показано здесь http://www.community.terrasoft.ru/img/video/lms/28/story.html это также очень затратный способ.

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

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

Добрый день.
Подскажите пожалуйста, есть ли возможность отправлять сообщение из процесса объекта на клиент?
Например: перед сохранением выполнить проверку и выдать предупреждение пользователю.
Такой вариант предпочтительнее чем проверка на клиенте (с которой проблем нет), потому что записи могут добавляться тремя различными способами.
Версия BPM 7.6

Нравится

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

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

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

:biggrin:
throw new Exception("Сообщение пользователю")

Дмитрий спасибо, то что нужно!

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

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

Подскажите, пожалуйста, пару моментов.
1. Пытаюсь реализовать раздел, аналогичный разделу "Счета". В разделе есть поле, где можно выбрать счёт из справочника "счета". Делаю вкладку, где размещается деталь "Продукты в счете". Колонка детали - "Счёт". Колонка объекта - "Счёт". Когда выбираю счёт, сохраняю его, в деталь продукты подгружаются, здесь всё нормально. Но когда создаю новый объект раздела, вместо пустого поля выдаётся список всех возможных продуктов. Как этого избежать - чтобы можно было просто выбрать нужные продукты при создании нового объекта раздела?
2. Делаю в этом же разделе ещё одну вкладку. Туда должна подгружаться пустая деталь для выбора продуктов - как при создании нового счёта. Эти продукты не привязаны к счёту. Как это правильно реализовать?

Спасибо.

Нравится

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

Здравствуйте, Александр!

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

  • Сделать поле "Счет" необязательным для заполнения
  • Создать новое справочное поле, которое будет "смотреть" на объект Вашего раздела (назовем его "Связь с разделом"

На детали Вам необходимо будет указать полем для связи с разделом следующие поля: Деталь.Связь с разделом, Раздел.Id

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

Как добавить свою страницу в список страниц доступных в элементе "Редактирование страницы" BpmOnline 7.6 BankSales

Нравится

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

Илья, здравствуйте!

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

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

Приятного дня!

registraciyarazdela-kartochkiredaktirovaniyavnui.doc

Дмитрий, зарегестрировал страницу
EXEC [dbo].[tsp_RegisterPage]
@ModuleEntityName = N'nfcMatchingAbsent',
@PageName = N'nfcnfcMatchingAbsent1Page',
@TypeColumnUId = NULL,
@TypeValue = NULL,
@AddMenuCaptionRus = NULL,
@AddMenuCaptionEng = NULL,
@CardHeaderCaptionRus = NULL,
@CardHeaderCaptionEng = NULL

В списке элемента процесса она не появилась. Вписал значения страницы и объекта вручную (Id объектов в переменные ObjectSchemaId и PageSchemaId). В элементе Редактирование страницы все стало верно.
Опубликовал процесс и запустил.
В консоли опять ошибка Uncaught TypeError: Cannot read property 'cardSchema' of undefined
:8075/core/e995a30a7af7cc9773586f5211d95c73/Terrasoft/amd/core.js:555 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://ччч.ru:8075/0/configuration/75c5ed49bdf66b4c26da63b1d93b3572/Con…
line: 6064
message: Uncaught TypeError: Cannot read property 'cardSchema' of undefined
date: Thu Sep 17 2015 17:22:57 GMT+

Илья, уточните, с чем вы работаете: 7.6 или 5.2. Эти платформы хотя и имеют некоторые общие механизмы, но реализация может значительно отличаться. Нельзя просто так взять и запустить скрипт от 7.Х в 5.Х.

Александр, Конечно с 7.6, я даже в заголовке это указал.

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

"Демьяник Алексей Олегович" написал:

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


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

Илья, по функционалу или по строению кода ничем, кроме того, как она зарегистрирована в таблице SysModuleEdit (страница раздела).
Согласно базовой логики если Вам необходимо открывать страницу раздела, то используйте «Страницу редактирования». В данном элементе можно использовать только страницы редактирования раздела.
Если Вам необходимо открывать страницу детали, то используйте «Преднастроенная страница».
Об это говорил пользователь Вильшанский Дмитрий.

Также заметил, что есть похожий топик созданный Вами, где были предложены другие варианты решения - http://www.community.terrasoft.ru/forum/topic/13029

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

Илья, так как это страница детали, то для своего БП можете использовать преднастроенную страницу.
Создавать разделы можно на основании пользовательских существующих объектов, если в мастере раздела указать название существующего объекта.
Если это базовый объект, то можете попробовать убрать значение системной настройки «Префикс названия объекта» и в мастере указать название объекта. Но гарантий нет, что с деталью «Адрес физ. лица» получиться.

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

Скажите, пожалуйста, в каком пространстве имён находится класс UserConnection, который имеет свойство EntitySchemaManager, относительно которого вызывается метод GetInstanceByName(). Собственно, меня здесь больше всего интересует сам метод GetInstanceByName(). Заранее благодарен.

Нравится

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

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

Класс UserConnection находится в пространстве имён Terrasoft.Core.

Метод GetInstanceByName реализован в классе Manager, от которого наследуются все менеджеры системы, в том числе и EntitySchemaManager. Класс Manager также находится в Terrasoft.Core.

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

Добрый день!

В странице раздела использую переопределенный метод GetModuleRowConfig со следующим кодом:

var configs = base.GetModuleRowConfig( module );

string primaryColumnName = module.Schema.PrimaryColumn.Name;
string primaryColumnValue = module.GetColumnValue(primaryColumnName).ToString();
var config = new DataSourceRowConfig(primaryColumnValue);

string VIPColumnValue = "";

Select select = new Select( UserConnection )
.Column("VipClientMarkId")
.From("Contact")
.Where("Contact", "Id")
.IsEqual( new QueryParameter( module.GetTypedColumnValue( "DebtorContactId" ) ) ) as Select;

VIPColumnValue = select.ExecuteScalar();

if ( VIPColumnValue != null ) {
configs.AddConfig( new DataSourceRowBackgroundColorConfigValue( "Salmon" ));
}

return configs;

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

Нравится

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

Да, посмотреть, как это сделано, можно на странице «RecordAllChangesGridPage» (журнал изменений):

		public virtual DataSourceRowConfig GetRowConfig(Entity row) {
			if (!HighlightColumnsCheckPerformed) {
	HighlightColumns = GetColumnsHighlightState();
	HighlightColumnsCheckPerformed = true;
}
string primaryColumnName = row.Schema.PrimaryColumn.Name;
string primaryColumnValue = row.GetColumnValue(primaryColumnName).ToString();
var config = new DataSourceRowConfig(primaryColumnValue);
Guid changeType = row.GetTypedColumnValue<Guid>("ChangeTypeId");
string backgroundColor;
if (changeType == new Guid("A852C33F-0BDD-E011-92C3-00155D04C01D")) {
	backgroundColor = "Green";
} else if (changeType == new Guid("AA52C33F-0BDD-E011-92C3-00155D04C01D")) {
	backgroundColor = "Red";
} else {
	backgroundColor = "Blue";
}
var cellsBackground = new Dictionary<string, DataSourceRowColumnBackgroundColorConfigValue>();
if (PreviousRow != null && HighlightColumns) {
	var previousRow = PreviousRow as Entity;
	foreach (var column in row.Schema.Columns) {
		if ((column.Name != "ModifiedOn") && (column.Name != "ModifiedBy") 
			&& (column.Name != "ChangeTrackedBy") && (column.Name != "ChangeTrackedOn")
			&& (column.Name != "ChangeType")) {
			object currentValue = row.GetColumnValue(column.Name);
			object prevValue = previousRow.GetColumnValue(column.Name);
			if (!Object.Equals(currentValue, prevValue)) {
				cellsBackground.Add(column.Name, new DataSourceRowColumnBackgroundColorConfigValue("#FFF30F"));
			}
		}
	}
}
PreviousRow = row;
config.AddConfig(new DataSourceRowColorConfigValue(backgroundColor));
config.AddConfig(new DataSourceRowColumnsBackgroundColorConfigValue(cellsBackground));
return config;
		}

Алксандр, а если поле справочное, как тогда? (т.е. в бд поле DebtorContactId, а в карточке и реестре отображается Физ лицо)

А в чём разница? В моём примере в цикле перебираются колонки и выкидывается ModifiedBy (полное название ModifiedById), оно тоже справочное.

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