Вопрос

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

Сделал замещение страницы BaseModulePageV2 (ESN)

Написал такой код.

define("BaseModulePageV2", [], function() {
	return {
		methods: {
			init: function() {
				this.callParent(arguments);
				this.setESNTabCaptionNumber();
			},
			setESNTabCaptionNumber: function() {
				var esnTabCaption = this.get("Resources.Strings.ESNTabCaption") + "()";
				this.$ESNTabCaptionNumber = esnTabCaption;
			}
		},
		attributes: {
			"ESNTabCaptionNumber": {
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				dataValueType: this.Terrasoft.DataValueType.LONG_TEXT,
				value: ""
			}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "ESNTab",
				"values": {
					"caption": {"bindTo": "ESNTabCaptionNumber"},
				}
			},
		]/**SCHEMA_DIFF*/
	};
});

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

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

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

Добрый день!
Скорее всего вместо this.$ESNTabCaptionNumber = esnTabCaption нужно написать this.set("ESNTabCaptionNumber", esnTabCaption)

Сидоров Александр В., нет, так тоже не работает

Нашел похожую тему https://community.terrasoft.ru/questions/izmenit-ima-vkladki-tab

Придется писать напрямую в коллекцию.

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

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

Например, называлось моё поле Цена, стало называться Стоимость. Я имею ввиду стандартными средствами, без html хаков?

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

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

Добрый день, да можно, для этого при добавлении поля необходимо реализовать метод, который будет возвращать имя вашей колонки. И свойство Caption забиндить на него, или на какой-то атрибут (смысл тот же)
{
                "operation": "merge",
                "name": "Owner",
                "values": {
                    "caption": {
                        "bindTo": "getDetailCaption"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 12,
                        "row": 1
                    }
                }
            }

getDetailCaption: function() {
                var caption = this.get("Resources.Strings.GantDetailCaption");
                return caption;
            },

Добрый день, да можно, для этого при добавлении поля необходимо реализовать метод, который будет возвращать имя вашей колонки. И свойство Caption забиндить на него, или на какой-то атрибут (смысл тот же)
{
                "operation": "merge",
                "name": "Owner",
                "values": {
                    "caption": {
                        "bindTo": "getDetailCaption"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 12,
                        "row": 1
                    }
                }
            }

getDetailCaption: function() {
                var caption = this.get("Resources.Strings.GantDetailCaption");
                return caption;
            },

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

Можно ли как-то прочитать название если в объекте в колонке указан справочник, так как там указан Guid?

Пример:

[#Читать данные контакта.Первый элемент результирующей коллекции.Страна#] узнать название страны при чтении из "Читать данные"

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

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

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

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

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

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

Алла Савельева,

Первый способ не подходит, там 18 справочником, выйдет многовато читать. Второй способ я использовал, но руководство не совсем приветствует использование C# скриптов

Придётся делать подряд 2 элемента чтения данных: в первом читать из контакта Id страны, во втором — из справочника стран, отфильтрованного по этому Id, получать название.

Зверев Александр у меня 6 таблиц которые нужно заполнить данными. Для каждой таблицы порядка 20 справочников читать. Выйдет адский труд

Если таких слишком много и писать скрипты не хотите, можно ещё сделать view с текстовыми колонками, потом создать по нему объект и работать с ним.

Prime Source,

Prime Source пишет:
руководство не совсем приветствует использование C# скриптов

Главное с этим не злоупотреблять, в данном случае это оптимальный вариант.

К сожалению, пока вычитать данные из связанных таблиц в элементе 'Чтение данных' невозможно.

Как вариант, можно реализовать представление, которое содержит все нужные данные и обращаться к нему из элемента 'Чтение данных', но это такой вариант костыля и потом, так как мне не до конца известна Ваша задача, то не факт, что представление будет лучше, чем C# код.

Алла Савельева,

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Идея
Здравствуйте!Есть идея позволить пользователю(разработчику) при использовании мастера разделов давать название и заголовок для групп, аналогично полям. В текущей реализации группы именуются по шаблону "group(№группы)". Хотелось бы добавить возможность называть группы собственным именем, например "StartAddressGroup"
Ревью
1 комментарий

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

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

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

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

В версии 3.3 это сделать просто -- достаточно переименовать ами-меню. Здесь же, насколько я понимаю, это меню формируется динамически -- но откуда берутся названия?? переискала все (по запросу в греп-серче по названию раздела), переименовала все окна и сервисы раздела, переименовывала рабочее место (файл--сервис--рабочие места) -- толку 0.

что не так и куда нужно копать? подскажите, пожалуйста!))

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

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

Редактирование раздела в настройке рабочих мест :)

http://www.community.terrasoft.ua/system/files/10-07-2012_11-11-28.png

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

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

Иногда бывает необходимость получить название элемента перечисления в ходе интеграции с 1С. Например, если Вы планируете синхронизировать поле типа перечисление в 1С и справочник в TS.

Для этого можно использовать синтаксис 1С

Для 8.х:

var EnumName = 'ТипыКонтактнойИнформации';
var EnumIndex = Param.Obj1C.Перечисления[EnumName].Индекс(Select1C.Тип);
var Name = Select1C.Тип.Метаданные().EnumValues.Get(EnumIndex).Имя;

Для 7.7:

var Name = Select1C.Тип.Представление()

Поделиться

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

А можно так

var TypeName = Param.Obj1C.String(Select1C.Тип)

?

*где Param.Obj1C - COM-объект 1С;
Select1C - объект (объект 1С 'ВыборкаИзРезультатаЗапроса') содержащий текущую строку выборки из 1С

Спасибо, Максим :)

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

Есть необходимость переименовать во всей системе, глобально, где есть упоминания два поля: Ответственный и Автор на Исполнитель и Ответственный соотв., т.к. нам кажется такой порядок более логичным и понятным.

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

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

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

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

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

Для того, чтобы изменить динамически Caption формы отчета, Вам необходимо внести изменения в обработчик события OnPreview формы отчета.

А именно,

ReportPreviewer.ParentComponent.ParentWindow.WindowCaption = "Test";

Вместо "Test" нужно внести требующееся название формы отчета.
Сохраните внесенные изменения, протестируйте работоспособность системы.

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

Желаю удачи!

С уважением,
Мельникова Екатерина

Поделиться

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

Можно ли, чтобы при создании бизнес-процесса в названии бизнес-процесса (по умолчанию Sale) делалась например приписка с контрагентом, например Sale (КОМПАНИЯ) вместо просто Sale, либо как добавить столбец контрагенты в списоке отображения бизнес-процессов? Имеется ввиду название контрагента с которым связана задача

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

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

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

Добрый день.

Спасибо за Ваш вопрос.

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

1) Открыть серсис sq_WorkflowItem, к таблице tbl_WorkflowItem присоединить (JOIN) таблицу tbl_Task по параметру tbl_Task.WorkflowItemID=tbl_WorkflowItem.ID. В запросе на выборку добавить поле из tbl_Task, которое необходимо отображать в реестре записей. Сохранить изменения в сервисе.

2) Открыть ds_WorkflowItem и добавить там необходимое поле из перечня полей добавленых в sq_WorkflowItem. Сохранить изменения в сервисе.

3) Добавить в wnd_WorkflowItemsGridArea колонку Контрагент. Сохранить изменения в сервисе.

Касательно использования параметров, во вложеном файле есть пример передачи параметров между процессами и подпроцессами.

Элемент “Подпроцесс” позволяет запустить некоторый процесс внутри другого, причём процесс, являющийся подпроцессом, в другом процессе представлен как его элемент.

Дело в том, что вызов процесса осуществляется методом StartWorkflow объекта WorkflowEngine, который, в свою очередь, является атрибутом системного объекта Connector (как Вы могли заметить это в коде функции WFStartByID). Другими словами, вызов процесса/подпроцесса осуществляется средствами ядра системы.

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

Изначально необходимо определиться со значениями, которые Вам необходимо передать, и сформировать SQL-запросы на выборку этих значений. Например, если Вам необходимо выбрать названия всех компаний, которые связаны с задачами по определенному процессу, запрос будет примерно такой:

select tbl_Account.Name from tbl_Account
 
left outer join tbl_Task on tbl_Task.AccountID = tbl_Account.ID
 
left outer join tbl_WorkflowItem on tbl_WorkflowItem.ID = tbl_Task.WorkflowItemID
 
left outer join tbl_Workflow on tbl_Workflow.ID = tbl_WorkflowItem.WorkflowID
 
where tbl_Workflow.ID = '{172E75BF-2A11-41EF-98F7-F0AB9BBC7BDA}'

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

select tbl_Account.Name from tbl_Account
 
left outer join tbl_Task on tbl_Task.AccountID = tbl_Account.ID
 
left outer join tbl_WorkflowItem on tbl_WorkflowItem.ID = tbl_Task.WorkflowItemID
 
left outer join tbl_Workflow on tbl_Workflow.ID = tbl_WorkflowItem.WorkflowID
 
left outer join tbl_WorkflowItem ParentItem on ParentItem.ID = tbl_Workflow.ParentSubProcessItemID
 
left outer join tbl_Workflow Parent on Parent.ID = ParentItem.WorkflowID
 
where Parent.ID = '{172E75BF-2A11-41EF-98F7-F0AB9BBC7BDA}'

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

Необходимо создать сервис (сервисы) SQL-запроса на выборку в системе Terrasoft.
По созданным запросам создать датасеты для хранения значений.
Определить событие, в результате которого параметры из родительского процесса будут подставляться в подпроцесс (например, во время события dlDataOnDatasetAfterPost даталинка задачи).

В обработчике события вставить условия проверки (например, является ли задача элементом процесса, происходит ли создание новой задачи или редактирование существующей – if (Dataset.State == dstInsert), и т.д.). Также необходимо создать переменные для ранее созданных датасетов. Вызвать ранее созданный датасет можно, например, так:

var ParentWFTaskDataset = Services.GetNewItemByUSI(<Код датасета>);
 
ParentWFTaskDataset.Open();

Работа с датасетами дальше идет по аналогии с другими обработчиками, в зависимости от конкретной цели. Например:

Dataset.Values(‘AccountID’) = ParentWFTaskDataset.Values(‘AccountID’);

Будем рады ответить на все Ваши вопросы.

Terrasoft Support Team

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