Доброго времени!

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

Стандартный функционал удаления схемы процесса (его некоторой версии) приводит к удалению всех схем данного бизнес-процесса из пакета.

Нравится

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

Кажется, я делал Export, затем удалял, затем Import :)

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

Только на прошлой неделе удаляла копию БП, при этом удалялись все запущенные экземпляры данного процесса-копии, если таковые имелись, но в моем случае таких вроде не было, а родительский процесс (из которого делала копию) остался.
Он был неактивен и активировала я его через действие [Set as actual] прямо в дизайнере БП.
Используемая версия 7.10.0.
Если у Вас версия ниже данной, то, возможно, что вариант, предложенный Владимиром подойдет больше.

Коллеги, спасибо за ответы.

Задача решилась небольшим шаманством :) с файлами descriptor.json и properties.json.

Из первого файла удалил секцию Parent (ссылка на первую версию процесса), а во втором файле указал "Version": "0" и "IsActiveVersion": "True". Все изменения производил в Visual Studio.

Затем загрузил изменения в файловой системе в Конфигурацию, и удалил из Конфигурации первую версию процесса уже как независимый процесс.

Решение выше оказалось не рабочим, при попытке сохранить отредактированную диаграмму процесса стало вылетать исключение: http://prntscr.com/fe4sw8
Пришлось через меню "Действия" в диаграмме процесса создавать копию процесса, а старый удалять.

"Давыдов Андрей Дмитриевич" написал:Пришлось через меню "Действия" в диаграмме процесса создавать копию процесса, а старый удалять.

Жаль, с версиями подпроцессов так не поступить :(

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

Добрый день!

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

Нравится

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

"Шамшин Олег" написал:Вопрос, как формировать и сериализовывать их для записи в таблицу?

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

Олег,

а какую бизнес-задачу Вы хотите решить таким образом?

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

Заранее благодарю за ответ ;-)

"Алла Савельева" написал:а какую бизнес-задачу Вы хотите решить таким образом?

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

Так и не решили, кстати - пришлось пользователям изучать сложные универсальные механизмы фильтрации

"Алла Савельева" написал:а какую бизнес-задачу Вы хотите решить таким образом?

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

"Шамшин Олег" написал:статические группы не работают в 7.10

Это не решает задачу, но в 7.10 вместо статических групп можно использовать тэги, по которым уже строить динамические группы.

Олег,

Можно реализовать некий справочник, который будет хранить структуру каталога продуктов. В каждом продукте добавить поле (назовем его [Каталог]), которое будет ссылаться на этот справочник и хранить принадлежность продукта к определенному каталогу.
На основании информации в поле [Каталог] настроить структуру динамических групп, какой угодно вложенности.

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

Олег, а какой именно у вас продукт bpm'online? В Enterprise этот вопрос решен уже

"Владимир Соколов" написал:какой именно у вас продукт bpm'online

Владимир, BPMOnline Sales Enterprise 7.10.1, а каким образом вопрос решен?

"Алла Савельева" написал:такой способ не позволяет менять саму структуру каталога

Алла, рассматривали похожий вариант - не подходит, т.к. надо менять структуру без участия пользователя/людей вообще, то бишь автоматически.

А попробуйте реализовать эту функциональность с помощью статических групп в продуктах.

Группа = каталог (название группы - это название каталога), а продукт, который принадлежит каталогу входит в группу.

Если настроить импорт записей соответственно, то получится менять структуру автоматически.
Если появляется новый каталог, то добавляется новая статическая группа, в которую добавляются нужные продукты.
Из плюсов такого подхода: возможность хранения каталога в виде иерархического списка сколько угодно уровней вложенности.
Таким образом в Bpm'online для этого уже все реализовано, остается только вопрос в реализации импорта, а это фактически запись нужных данных в нужные таблицы :wink:

Небольшая поправка, если у Вас продукт bpm'online sales enterprise 7.10.1, тогда статических групп у Вас нет (они есть только в продукте bpm'online marketing), а вместо них есть тэги, о которых писал Владимир.

"Шамшин Олег" написал:Владимир, BPMOnline Sales Enterprise 7.10.1, а каким образом вопрос решен?

Олег, мне кажется, функционал каталога продуктов вам поможет - как раз динамически формируется структура: https://academy.terrasoft.ua/documents/sales-enterprise/7-10/katalog-pr…

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

Добрый день.
Если я копирую процесс (кнопка "Копировать диаграмму") который находится в пакете "MyPackage", то копия создается в пакете "Custom". Даже если в системной настройке CurrentPackageId установлен "MyPackage".

Является ли данное поведение корректным?
И есть ли возможность при создании копии указывать в какой пакет создавать эту копию?
Версия 7.10.0.1742

Нравится

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

В новой диаграмме, которая создалась после копирования, нужно перейти на закладку Settings (Настройки) и в поле Package (Пакет) указать нужное значение (см. прикрепленный файл).

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

Насчет корректности такого поведения системы (копирования в Custom). Логично копировать в тот пакет, который указан пользовательским. Вы пишите, что сменили значение настройки CurrentPackageId, попробуйте изменить значение настройки CustomPackageUId, после вылогиниться и потом зайти и проверить, куда будет скопирована диаграмма.

"Алла Савельева" написал:В новой диаграмме, которая создалась после копирования, нужно перейти на закладку Settings (Настройки) и в поле Package (Пакет) указать нужное значение (см. прикрепленный файл).

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

"Алла Савельева" написал:
...
попробуйте изменить значение настройки CustomPackageUId
...

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

Просьба к сотрудникам Террасофт:
Может стоит указать об этой особенности копирования диаграмм в документации или исправить код который смотрит на CustomPackageUId вместо CurrentPackageId?

На самом деле в документации информация об этой настройке есть на Академии по ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/paket-custom, хотя, как по мне, объяснение отличий не очень очевидно :confused:

Информацию по работе с пакетами можно найти тут: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-paketami

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

Изначально создал web service с методом POST, для передачи данных на локальной машине. Из visual studio создавал подключение к rest сервису, авторизовался, после чего вызвал метод - данные передались. Аналогично сделал для GET: вызвал из вижлы метод - данные пришли.
Но потом, была необходимость перенести код на облако [site].bpmonline.com, закинул туда код сервиса.

Метод GET - данные возвращает, все работает.
Но вот метод пост, при попытке его вызова, сервер возвращает ошибку: ЗАПРЕЩЕНО. С чет это связано, как это фиксить?

Уже проверки ради, создал пустой метод (без какой-ибо логики) и все равно сервер возвращает ошибку "Запрещено":

[OperationContract]
            [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
                BodyStyle =WebMessageBodyStyle.Wrapped)]
            public void ExportFromJson(string input)
            {
}

Нравится

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

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

Ознакомьтесь с следующей статьей на академии. https://academy.terrasoft.ru/documents/technic-sdk/7-10/zashchita-ot-cs…

"Мотков Илья" написал:

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

Ознакомьтесь с следующей статьей на академии. https://academy.terrasoft.ru/documents/technic-sdk/7-10/zashchita-ot-csr...


Спасибо, помогло. В заголовок запроса добавил это:

CookieCollection cookieCollection = authCookie.GetCookies(new Uri(authServiceUri));
                string csrfToken = cookieCollection["BPMCSRF"].Value;
                request.Headers.Add("BPMCSRF", csrfToken);
Показать все комментарии

В мастере "бизнес-правил" (новые, в 7.10)

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

Нравится

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

Это нормально, вам нужно под каждое действие сделать отдельное БП. Так же работали и рукописные БП, посмотрите на академии.

Как пожелание:
Иметь возможность выполнять группу действий основываясь на группе условий - весьма ожидаемый кейс.
Зачастую доступность/видимость/обязательность десятков полей, зависит от единой группы условий.

PS: мы понимаем что тут необходимо повесить требуемые конечные свойства видимость/доступность/обязательность - на атрибут и управлять его состоянием в логике.
Но, ИМХО, в бизнес-правилах, такой кейс очень будет "к месту".

и еще...

само собой тут не хватает "противоположенных" действий:
Если есть действие "Сделать поле редактируемым", то по идее должно быть и "Сделать поле недоступным"
Если есть действие "Скрыть поле", то должно быть и "Показать поле"
и так далее...

Можно конечно отталкиваться от "противоположенности" условий, но в таком случае необходимо предусматривать особые начальные состояния.
Например чтобы эффективно использовать "Показать поле на странице"
Его для начала следует "скрыть", т.е. описать его как изначально скрытое, в то время как по умолчанию (например из мастера) поля создаются видимыми.
По этому логичнее скрывать его там где оно не нужно, чем показывать его везде где оно нужно.
ну я думаю кейс понятен :) одно бизнес-правило, против нескольких бизнес-правил и работы со схемой, для реализации одного и того же поведения.

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

Илья,

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

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

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

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

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

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

Вопрос...
Так а каким образом согласуются/конкатенируются/мержатся несколько бизнес-правил, которые ориентированы на одно и то же поле, в рамках одной сущности.
Логическое "И" или логическое "ИЛИ"
или там вообще особая схема ?

Добрый день, Илья!

По моим наблюдениям, если написать такую логику, когда правило 1 противоречит правилу 2, то применится случайное. Не думаю, что на этот случай есть какие-то правила мержа, ведь непонятно зачем вообще такое делать.)

"Мотков Илья" написал:Не думаю, что на этот случай есть какие-то правила мержа, ведь непонятно зачем вообще такое делать.)

В пределах одного бизнес-правила можно использовать только группу "И" или группу "ИЛИ",
т.е. нельзя развернуть такую логику в пределах одно правила:
"Если поле X содержит Z или W, и поле Y равно Q, то делать поле N обязательным"
Такое в текущем положении вещей можно организовать только двумя бизнес-правилами:
1)"Если поле X содержит Z, и поле Y равно Q, то делать поле N обязательным"
2)"Если поле X содержит W, и поле Y равно Q, то делать поле N обязательным"
И вот теперь вступает в силу мой вопрос.
Так как же они конкатенируются объединяются.

PS: На самом деле два разработчика в разных схемах добавили свои бизнес-правила. пока у каждого было свое БП - все было нормально, после объединения в цепочку замещающих схем на тесте - правило ведет себя как-то странно, но оно точно не делает того чего от него ожидают :)
В итоге правила как-бы и не противоречат друг другу, и переписать его в одно правило тоже нет возможности. вот...

Добрый день, Илья!

Так ведь они никак не конкатенируются/объединяются. Если X содержит Z, отработает правило 1, если X содержит W, отработает правило 2. Так как они не противоречат друг-другу - все хорошо, сделать "более обязательным" поле Вы уже не сможете.

Не-а :)
В итоге не работают оба правила :) в этом то и кроется проблема понимания того как оно вообще должно работать в таком случае.
Результат для приведенного примера таков:
Имеем два правила:
1)"Если поле X содержит Z, и поле Y равно Q, то делать поле N обязательным"
2)"Если поле X содержит W, и поле Y равно Q, то делать поле N обязательным"

в итоге имеем следующее поведение:
правила вообще не работают - ни одно из них.

Если переписать правила иначе:
1)"Если поле X содержит Z или W, то делать поле N обязательным"
2)"Если поле Y равно Q, то делать поле N обязательным"

в итоге имеем следующее поведение:
Если поле X содержит Z или W, поле N становится обязательным
значение поля Y - вообще не играет ни какого значения.

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

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

Всем доброго времени суток.

Версия 7.10.

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

Для примера на детали "Продукт в продаже" я хочу поменять правило, в соответствии с которым в случае, если для количества задано отрицательное значение в колонку выставлялось значение 0, а не 1, как сейчас + дополнительно, если для логической колонки UsrService "Услуга" выставлено значение true, то колонка Quantity выставлялась 0 и блокировалась для изменения.

Для этого я создал файл UsrMobileOpportunityProductInterestModelConfig в пакете Custom и добавил там следующий код по аналогии с оригиналом:

Terrasoft.sdk.Model.addBusinessRule("OpportunityProductInterest", {
        name: "UsrOpportunityProductInterestQuantityBelowZeroRule",
        ruleType: Terrasoft.RuleTypes.Custom,
        triggeredByColumns: ["Quantity"],
        events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],
        executeFn: function(model, rule, column, customData, callbackConfig) {
                if (model.get("Quantity") 0) {
                        model.set("Quantity", 0, true);
                }
                Ext.callback(callbackConfig.success, callbackConfig.scope);
        }
});

Далее в файле MobileApplicationManifestDefaultWorkplace в том же пакете Custom в Models пытаюсь подключить созданный файл:

"OpportunityProductInterest": {
                        "ModelExtensions": [
                                "MobileOpportunityProductInterestModelConfig",
                                "UsrMobileOpportunityProductInterestModelConfig"
                        ]
                },

При синхронизации и загрузке один файл судя по всему добавился (вместо 232 стало 233). И всё равно при изменении в этом случае получаю в количестве 1 вместо 0.

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

Нравится

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

Насколько я понимаю, бизнес-правило для блокировки поля Количество по условию UsrService == true должно выглядеть так:

Terrasoft.sdk.Model.addBusinessRule("OpportunityProductInterest", {
	name: "UsrOpportunityProductInterestQuantityBlockedRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["UsrService"],
	events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],
	executeFn: function(model, rule, column, customData, callbackConfig) {
		var value = model.get("Quantity");
		if (model.get("UsrService")) {
			model.set("Quantity", 1, false);
		} else {
			model.set("Quantity", value, true);
		}
		Ext.callback(callbackConfig.success, callbackConfig.scope);
	}
});

Подключил также, как описывал выше - всё равно не срабатывает.

Денис,

Для активации/деактивации колонки можно использовать правило Terrasoft.RuleTypes.Activation.
Обратите внимание на пример:

Terrasoft.sdk.Model.addBusinessRule('OpportunityProductInterest', {
    ruleType: Terrasoft.RuleTypes.Activation,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: [UsrService],
    conditionalColumns: [
        {name: UsrService, value: false}
    ],
    dependentColumnNames: ['Quantity']
});
Показать все комментарии

Насколько я понимаю для синтаксического анализа JavaScript во встроенном редакторе используется ESLint
А где можно его конфигурационный файл найти (по идее должен быть *.eslintrc.json но ничего подобного среди загружаемых файлов не найдено, скорее всего он бандлится или минифицируется)?
Для того чтобы использовать его (конфиг) со сторонними редакторами/IDE (Atom/VSCode/WebStorm), и иметь в них такой же набор предупреждений и ошибок, а так же иметь возможность настройки автоматического форматирования в соответствии с требованиями линтера.

Нравится

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

Здравствуйте, Илья.

Во встроенном редакторе используется не ESLint, а JSHint, конфигурация которого не хранится в открытом виде. Для ее получения вам нелобходимо перейти по следующей ссылке: адрес_приложения/0/terrasoft.axd?rm=Terrasoft.UI.WebControls&r=jshintoptions.js

Здравствуйте, и большое спасибо Вам за исчерпывающие и оперативные ответы.

Сопутствующая информация, для соискателей по этой тематике:
Например, если очень сильно мешают некоторые замечания, которые прям пресекают использовать средства выразительности JS, например declare by lazy if syntax (присвоение значения переменной, по результату выполнения краткой формы записи оператора "Если")

var sameResultVariable = someReturnBooleanFunction() ? ifTrueFunction() : ifFalseFunction();


Оператор "?" (lazy if) предусматривает возвращение результата, это его особенность и присвоение его переменной, ну как-то сомнительно в качестве даже замечания (waring) но в данном контексте это вообще считается ошибкой (error)
Конкретно в этом случае, достаточно добавить комментарий "[color=green]/* jshint expr: true */[/color]" в начало вашей схемы:

/* jshint expr: true */
define("LeadPageV2", ["ProcessModuleUtilities"],
	function(UserUtilsMixin ...
Показать все комментарии

Добрый день. Помогите разобраться новичку с идиотской проблемой: в пакете Custom неактивна кнопка "Добавить". Следовательно -> не могу корректно создать свой пакет. Как это можно побороть?

Нравится

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

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

Чтобы добавить новый пакет в контекстном меню (не обязательно пакета Custom) на вкладке [Пакеты] раздела [Конфигурация] выбрать действие [Добавить] (во вложении скриншот). Подробнее с механизмом создания пользовательского пакета вы можете ознакомиться по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/sozdanie-polzova….

"Мария Ватулина" написал:
Подробнее с механизмом создания пользовательского пакета вы можете ознакомиться по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/sozdanie-polzovat....

Я наверное не совсем правильно изъяснил проблему... попытаюсь по пунктам:
1. Создал свой пакет.
2. Унаследовался от предпоследнего пакета из схемы зависимостей пакетов.
3. При попытке переопределить зависимость пакета Custom (я должен указать зависимость от своего, вновь созданного пакета), обнаружил, что не могу внести данное изменение т.к. кнопки "Добавить" и "Удалить" неактивны.
4. При осмотре других пакетов данный функционал так же неактивен.

P.S. Пакет, созданный мною в SVN зафиксирован.

"Терещенко Алексей" написал:"Добавить" и "Удалить" неактивны.

Следующая вкладка на вашем скриншоте)
Custom не зависит от пакетов.
Но у него есть зависимые пакеты

"Варфоломеев Данила" написал:

Следующая вкладка на вашем скриншоте)

Custom не зависит от пакетов.

Но у него есть зависимые пакеты

Согласно обучению, которое было проведено ранее и зафиксировано в видео уроках, пакет Custom ВСЕГДА должен находится последним в цепочке зависимостей пакетов и принимать наследование, например, от моего, вновь созданного, ПРЕДПОСЛЕДНЕГО. В противном случае могут возникнуть ряд непредвиденных проблем в работе всего функционала данного продукта.
На вкладке "Зависит от пакетов" - как раз таки это и отображено. а вкладка "Зависимые пакеты" - всегда будет пустой для Custom - такова логика построения пакетов данного продукта со слов тренера по обучению.

"Терещенко Алексей" написал:такова логика построения пакетов данного продукта

Согласен, был не прав. Уже сам запутался в зависимостях.
Сейчас создал свой пакет, унаследовался от SalesEnterpriseSoftkeyRus и он автоматом перенёсся в "зависит от пакетов" Custom'а. Раньше вроде как надо было вручную указывать.

Отредактировать пакет Custom нельзя, если вы поменяли системную настройку "Издатель". Измените её обратно на Customer и отредактируйте то, что нужно. Если я правильно понял проблему.

"Сидоров Александр Валерьевич" написал:Отредактировать пакет Custom нельзя, если вы поменяли системную настройку "Издатель"

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

"Терещенко Алексей" написал:Но тут возникает

Так я и говорю - измените системную настройку Издатель на Customer

"Сидоров Александр Валерьевич" написал:измените системную настройку Издатель на Customer

Название = Издатель
Тип = Строка (500 символов)
Знач. по ум. = Customer
Код = Maintainer

это настройки по умолчанию - 100%. Т.е. они не правились.

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

После создания и сохранения вашего пакета пакет Custom должен автоматически добавиться на вкладку Зависимые пакеты вашего пакета. Откройте ваш пакет на изменение и проверьте данную вкладку. На ней должен отображаться пакет Custom (скрин 1). Также, откройте на изменение пакет Custom и проверьте вкладку Зависит от пакетов. В списке должен присутствовать ваш созданный ранее пакет (скрин 2).

"Мария Ватулина" написал:После создания и сохранения вашего пакета пакет Custom должен автоматически добавиться на вкладку Зависимые пакеты вашего пакета

Пробовал... пробовал как с фиксацией в SVN, так и без... Данного волшебства не происходит.

Алексей, проверьте в БД для пакета Custom поле Maintainer в таблице SysPackage. Возможно, что в поле указано значение от значения в системной настройке Maintainer.

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

"Мария Ватулина" написал:Возможно, что в поле указано значение от значения в системной настройке Maintainer.

"Terrasoft"

"Мария Ватулина" написал:Для более подробного рассмотрения проблемы рекомендуем обратиться в Техническую поддержку Terrasoft

Победил!!!
"Управление конфигурацией" -> "Конфигурация" -> Вкладка "Действия" -> "Компилировать все".
После чего зависимости пакетов приобрели правильную схему.
Однако, я не увидел скомпилированных исходников C#... Но это уже тема следующего поста...

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

Коллеги, привет!

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

Столкнулся со следующей проблемой: пытаюсь создать новый объект детали по инструкциям со страницы https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-detali-... . На этапе заполнения свойств создаваемого объекта в дизайнере объектов нужно выбрать в качестве родительского объекта Базовый Объект (Base), но он отсутствует в выпадающем списке вариантов выбора. Также я пытался создать объект через Мастер Деталей, однако там в выпадающем списке выбора аж 3 записи "Базовый объект", что немного вводит в заблуждение.
Так же интересует такой вопрос: является ли критичным удаление пакета Сustom? На странице в Академии, посвященной данному пакету об удалении информации нет,
Буду очень признателен за помощь.

Нравится

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

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

Отвечаю на ваши вопросы:

1. В случае если в списке объектов поля Родительский объект не отображается наименование нужного объекта, вам необходимо проверить зависимости пакетов. Подобное поведение возникает если не установлена зависимость между пакетом, в котором создается объект, и пакетом, в котором создан родительский объект.

2. Если при создании объекта через Мастер деталей в списке отображается Три объекта с наименованием Базовый объект, то вероятно, что кастомные объекты имеют название Базовый объект. вам нужно в конфигурации найти все объекты по названию Базовый объект и кастомные переимновать - изменить значение поля Заголовок.

3. Пакет Custom мы не рекомендуем удалять! Его удаление может привести к проблемам в работе системы. Помимо кастомных доработок, в пакет Custom автоматически сохраняется информация по настройке прав доступа и журналированию. Вы можете создать свой пользовательский пакет и вести разработку в нем.

Обращаю ваше внимание, что устанавливать вместо пакета [Custom] любой другой пакет в качестве корневого крайне не рекомендуется!

"Орлов Алексей" написал:Также я пытался создать объект через Мастер Деталей, однако там в выпадающем списке выбора аж 3 записи "Базовый объект", что немного вводит в заблуждение.

А у вас какая версия? Кажется, этот баг в какой-то проскакивал, но потом исправили

"Владимир Соколов" написал: однако там в выпадающем списке выбора аж 3 записи "Базовый объект"

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

в данном случае следует обратить внимание на аттрибут элемента списка "data-value" оно содержит уникальный идентификатор объекта (UId)
следует открыть конфигуратор, осуществить поиск элементов по имени (которое дублируется),
потом изучив их "мета-данные" определить "кто есть кто"

вот так.

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

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

Возникла проблема с деталями.

  1. Создала 2 объекта через конфигурацию, наследованные от базового объекта.
  2. а) Внешний объект с полем -ссылкой на Контакт
    b) Внутренний объект с полем ссылкой на Внешний объект

  3. Создала 2 детали. Внешняя деталь и внутренняя деталь.
  4. Добавила внешнюю деталь на страницу Контакта
  5. Добавила внутреннюю деталь на страницу Внешней детали

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

"NullOrEmptyException"
"У схемы "ICLOuterEntity" не указана первичная отображаемая колонка"
Также показалось странным, что у обеих созданных сущностей(внешний объект и внутренний объект) папка Inherited Columns пустая, хотя в БД все стандартные колонки есть(дата создания. создал и пр) и при настройке страницы мастером разделов их можно вывести на форму .

В чем может быть дело?

Версия 7.10.0.1742

Нравится

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

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

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

Насчет того, что в Inherited Columns не отображаются системные колонки дата создания, создал и прочее, - это нормально, если Вы наследовались от Base Object.
А, если сделать наследника от Вашей схемы, тогда системные колонки уже в наследнике появятся)

Добрый день, Любовь!

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

Илья,

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

В английской версии аналогично.

"Алла Савельева" написал:

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

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

Насчет того, что в Inherited Columns не отображаются системные колонки дата создания, создал и прочее, - это нормально, если Вы наследовались от Base Object.

А, если сделать наследника от Вашей схемы, тогда системные колонки уже в наследнике появятся)

Life is better than you think :-)

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

"Мотков Илья" написал:

Добрый день, Любовь!

Для того, чтобы увидеть InheretedColumns, необходимо в настройках объекта нажать галочку Показывать системные колонки - ведь у базовой сущности все колонки системные.

Ошибка же прямо указывается на источник проблемы. Первичная для отображения колонка - это та, которую видно в реестре или при выборе из объекта из справочника, например, имя у контакта или номер у счета:

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

111.png
245.68 кб


Спасибо!

"Zaitova Liubov" написал:Большое спасибо! и правда, не была указана колонка, так как я и не знала про это свойство. Раз оно такое важное, может стоит его выносить в блок основных свойств?

Действительно, в большинстве случаев значение данного поля должно быть установлено.

Насчет вынесения в блок основных свойств - это вопрос к разработчикам платформы.

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