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

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

К примеру. Есть карточка Заказа, на которой есть поле Контрагент. И есть справочное поле Договор. Открываем поле Договор. Не находим требуемого договора и жмем Добавить прямо в модальном окне - открывается карточка добавления Договора. Необходимо, чтобы поле Контрагент в добавляемом договоре было заполнено также как и в карточке Заказа

Нравится

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

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

https://community.terrasoft.ru/questions/est-li-manual-po-ispolzovaniu-…

Андрей, удалось вам реализовать ваш кейс?  у нас такая же проблема с передачей идентификатора начального объекта.

Добрый день.

Извиняюсь, что поздно, но лучше поздно чем никогда. Вот пример. Есть карточка обращения и в ней справочное поле Продажа (NrbOpportunity). В продаже есть поле Продукт (NrbProduct), которое должно автоматически заполниться значением из обращения, из которого создаем продажу (поле NrbProductBase в обращении). В карточке обращения (CasePage) достаточно переопределить два метода.

			openLookup: function(config, callback, scope) {
				/// <summary>overridden. Базовый метод, который срабатывает при открытии модального окна справочника.</summary>
				if (config && config.columnName === "NrbOpportunity") {
					config.valuePairs = this.getNrbValuePairs();
				}
				this.callParent(arguments);
			},
 
			getNrbValuePairs: function() {
				/// <summary>Инициализирует значения для карточки продажи при ее добавлении из карточки обращения.</summary>
				var valuePairs = [];
				var product = this.get("NrbProductBase") && this.get("NrbProductBase").value;
				if (product) {
					valuePairs.push(
							{
								name: "NrbProduct",
								value: product
							});
				}
				return valuePairs;
			},

 

Андрей, Спасибище!!!

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

Здравствуйте, продолжаю осваивать версию 7.10 после 10 лет использования 3.0.4.122.

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

Нравится

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

Возникла необходимость переопределить код процесса родительского объекта. Этот код не вынесен в метод, а находится внутри элемента ScriptTask (Задание-сценарий) процесса родительского объекта (это код базовой комплектации, а значит нет никакой возможности изменить его напрямую). Возникала ли у кого подобная задача и решаема ли она вообще? 

Нравится

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

Эмм... также как и тут создаём замещающий объект.

Только потом идём в родителя смотрим, где находится конкретный скрипт таск

Далее в процессе замещённого объекта справа ищем такой же лайн-сет и открываем скрипт-таск (дабл кликом), редактируем, сохраняем.

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

Попробовал, как Вы предлагаете. Но безуспешно. Система вовсе игнорирует изменения, сделанные из замещающего объекта. Даже код с синтаксическими ошибками успешно проходит публикацию. Хотя, изменения сохраняются. Что я делаю не так?

Бершеда Д. Н. пишет:

Хотя, изменения сохраняются. Что я делаю не так?

Согласен, я написал фигню) Изменить стандартные реализации скорее всего нельзя.

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

Хочу дополнительно отфильтровать печатные формы.

В версии 7.2 была функция modifyViewConfig, которая вызывалась в карточке и где я это делал. В 7.10 она не вызывается. 

Как быть?

Нравится

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

Можете на уровне секции или карточки переопределить методы:

initCardPrintForms или 

initSectionPrintForms

в зависимости секции или карточки спсписок форм вы хотите отфильтровать.

Изначально эти методы написаны в миксине 

PrintReportUtilities

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

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

Изначально задание стояло так "Пользователь сам выбирает основной адрес из списка существующих" при помощи галочки "Основной"(как в 3.х)

Это дело делается в дизайнере объекта контрагента. Нашел я его в исходном коде - "SynchronizeAddress()" и запускается после сохранения запись контрагента. Подскажите как изменить эту функцию или заменить ее другой и как такую создать вообще

Думаю если отключить Базовое событие это может решить мою проблему

Нравится

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

1) Создаём замещающий объект "Контрагент"

2) "Дополнительно"—>"Открыть процесс" (кнопка справа вверху)

3) Methods (справа вверху), разворачиваете, находите метод SynchronizeAddress, ставите галку "Переопределен"

4)  Комментите base.SynchronizeAddress(), если не надо вызывать родительскую реализацию, дописываете свой код

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

Вау, BPM удивляет) обыскал замещающий объект но на структуру почему не обратил внимания(

Благодарю!

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

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

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

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

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

Нравится

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

Добрый день, Анатолий. К сожалению, сделать это непосредственно в мастере у вас не получится, необходимо перейти в конфигурацию, открыть нужный вам объект(например, Contact), в настройках установить галочку "Отображать расширенный список типов колонок", после чего изменить тип колонок на необходимый вам, и опубликовать объект.

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

Через БП изменяю значение поля через действие "Изменить данные". БП запускается по нажатию кнопки на странице редактирования записи. 

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

Нравится

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

т.е. вы меняете поле в карточке путём бп? Если да, то способ такой себе, честно говоря) Лучше сделать esq запрос в js и через this.set что-то устанавливать. Если всё же хотите оставить бп, то:

 лёгкий способ - при вызыве бп указать callback-функцию, в ней делать this.reloadEntity()

трудный - генерировать сообщение из бп в карточку с конкретным значением, устанавливать его через this.set.

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

хорошо, спасибо) 

со страницей редактирования разобрался, а как изменить значение поля в совмещенном режиме?

Миннекаев Айдар,

Там добавляется кнопка примерно таким образом (добавлять в Section):

{
	"operation": "insert",
	"name": "RandomButton", //своё название
	"parentName": "CombinedModeActionButtonsCardLeftContainer",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": {"bindTo": "Resources.Strings.RandomButtonCaption"}, //свой капшн
		"click": {"bindTo": "onCardAction"}, //!!!оставляем
		"style": Terrasoft.controls.ButtonEnums.style.BLUE, //свой стиль
		"visible": true,
		"classes": {"textClass": ["actions-button-margin-right"]}, //отступ 5 пикселей от соседних кнопок
		"tag": "onRunMyProcess" //!!!метод КАРТОЧКИ, который будет вызываться
	}
},

Метод onCardAction кидает в карточку сообщение с названием метода, в карточке идёт обычный вызов метода (который указан в тэге) без параметров

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

спасибо:)

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

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

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

Нравится

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

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

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

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

Добрый день!

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

Как мне лучше реализовать эту задачу:

1) виндовый сервис

2) бп с таймером(скрин). но тут я боюсь, что таймер как-то некорректно будет работать, например, если прекращается активность пользователей, то таймер будет работать или нет?

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

Нравится

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

Как в C# скрипте БП получить URL сайта.

Туда передается (ProcessExecutingContext context), но документации по нему не нашел.

Нравится

3 комментария
string baseUrl = WebUtilities.GetBaseApplicationUrl(HttpContext.Current.Request);

 

Варфоломеев Данила пишет:

<span>string</span> baseUrl <span>=</span> WebUtilities.<span>GetBaseApplicationUrl</span><span>(</span>HttpContext.<span>Current</span>.<span>Request</span><span>)</span><span>;</span>

К сожалению, это работает, если БП вызывается с клиента. Но если вызов происходит, например, по событию добавление/изменение записи, то где-то возникает NullReferenceException. 

есть ещё такое

UserConnection uc = Get&lt;UserConnection&gt;("UserConnection");
string uri = uc.Workspace.RepositoryUri;

 

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