Вопрос

На страницу выведено поле с датой и временем, нужно передать в него время из справочника при изменении значения в выпадающем списке. Стандартные js способы new Data(dataCode) не работает

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

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

Добрый день!

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

//...
attributes: {
	"SomeDate": {
		"dataValueType": this.Terrasoft.DataValueType.DATE_TIME,
		"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"dependencies": [{
			columns: ["Type"],
			methodName: "setSomeDate"
		}]
	},
	"Type": {
		"lookupListConfig": {
			columns: ["CreatedOn"]
		}
	}
},
//...
methods: {
	setSomeDate: function () {
		var value = (this.get("Type") || {}).CreatedOn || null;
		this.set("SomeDate", value);
	}
}
//...

И Вам, наверное, стоит заглянуть в консоль, там скорее всего ошибка, которая прояснит ситуацию

Добрый день!

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

//...
attributes: {
	"SomeDate": {
		"dataValueType": this.Terrasoft.DataValueType.DATE_TIME,
		"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"dependencies": [{
			columns: ["Type"],
			methodName: "setSomeDate"
		}]
	},
	"Type": {
		"lookupListConfig": {
			columns: ["CreatedOn"]
		}
	}
},
//...
methods: {
	setSomeDate: function () {
		var value = (this.get("Type") || {}).CreatedOn || null;
		this.set("SomeDate", value);
	}
}
//...

И Вам, наверное, стоит заглянуть в консоль, там скорее всего ошибка, которая прояснит ситуацию

Лопатин Константин Николаевич,

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

Пробовал this.set("dataColume", new Date(); - не работает, хотя в js даёт текущую дату и время. Так же пробовал из другого поля скопировать дату this.set("date", new Date(this.get("date2").toString()))

И

this.set("date1", this.get("date2"))

Prime Source,

А в каком методе Вы это делаете? По событию? Запрос может быть к базе какой-то выполняете? Контекст верный? Вариант с

this.set("SomeDate", new Date());

очень даже рабочий. Тяжело помочь, когда не видишь полной картины

Лопатин Константин Николаевич,

define("PsPPsPApprovalPuRequests1Page", [], function() {
	return {
		entitySchemaName: "PsPApprovalPuRequests",
		attributes: {
			"PsPDateTimeApproval": {
				dataValueType: Terrasoft.DataValueType.FLOAT,
				dependencies: [
					{
						columns: ["PsPsPMatchResult"],
						methodName: "approvalDate"
					}
				]
			}
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{
			"PsPsPMatchResult": {
				"b7a163a0-228d-4005-bfd3-3d19229a6328": {
					"uId": "b7a163a0-228d-4005-bfd3-3d19229a6328",
					"enabled": true,
					"removed": false,
					"ruleType": 0,
					"property": 1,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 3,
								"value": "CurrentUserContact",
								"dataValueType": 10
							},
							"rightExpression": {
								"type": 1,
								"attribute": "PsPApprovalMan"
							}
						},
						{
							"comparisonType": 1,
							"leftExpression": {
								"type": 1,
								"attribute": "PsPsPMatchResult"
							}
						}
					]
				}
			},
			"PsPComent": {
				"e39449ef-895f-4341-8133-2e773a4dec7d": {
					"uId": "e39449ef-895f-4341-8133-2e773a4dec7d",
					"enabled": true,
					"removed": false,
					"ruleType": 0,
					"property": 1,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 3,
								"value": "CurrentUserContact",
								"dataValueType": 10
							},
							"rightExpression": {
								"type": 1,
								"attribute": "PsPApprovalMan"
							}
						}
					]
				}
			}
		}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			approvalDate: function() {
				var matchResult = this.get("PsPsPMatchResult");
				if (matchResult) {
					var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "PsPMatchResult"});
					//esq.addColumn("PsPTimeLimit", "PsPTimeLimit");
					debugger;
					esq.getEntity(matchResult.value, function(result) {
						if (!result.success) {
							// обработка/логирование ошибки, например
							this.showInformationDialog("Ошибка запроса данных");
							return;
						}
						this.set("PsPDateTimeApproval", new Date());
					}, this);
				}
			}
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "PsPApprovalMan",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "Header"
					},
					"bindTo": "PsPApprovalMan"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "PsPsPMatchResult",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 2,
						"layoutName": "Header"
					},
					"bindTo": "PsPsPMatchResult",
					"labelConfig": {
						"caption": {
							"bindTo": "Resources.Strings.PsPsPMatchResultLabelCaption"
						}
					},
					"enabled": true,
					"contentType": 5
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "PsPComent",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 3,
						"layoutName": "Header"
					},
					"bindTo": "PsPComent"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 2
			},
			{
				"operation": "insert",
				"name": "PsPDateTimeApproval27fcf723-04c0-4c5d-86d1-e4ef52f8b467",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "PsPDateTimeApproval",
					"enabled": false
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 3
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Лопатин Константин Николаевич,

attributes: {
	"PsPTimeLimit": {
		dataValueType: Terrasoft.DataValueType.FLOAT,
		dependencies: [
			{
				columns: ["PsPProcurementType"],
				methodName: "calculateTimeLimit"
			}
		]
	}
},
methods: {
	onEntityInitialized: function() {
		this.callParent(arguments);
		this.calculateTimeLimit();
		this.calculateDepartment();
	},
	calculateTimeLimit: function() {
		var recordId = this.get("PsPProcurementType");
		var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "PsPProcurementType"});
		esq.addColumn("PsPTimeLimit", "PsPTimeLimit");
		if (recordId) {
			esq.getEntity(recordId.Id, function(result) {
				if (!result.success) {
					// обработка/логирование ошибки, например
					this.showInformationDialog("Ошибка запроса данных");
					return;
				}
				var timeLimit = result.entity.get("PsPTimeLimit").toString();
				this.set("PsPTimeLimit", {
					displayValue: new Date(timeLimit)
				});
			}, this);
		}
	}
}

Это из базы уже

Prime Source,

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

this.set("PsPTimeLimit", { displayValue: new Date(timeLimit) });

Вы где подсмотрели?

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

Лопатин Константин Николаевич,

Спасибо, тип изменил и все заработало, нужно больше спать)))

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

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

Обсуждение
1 комментарий

Здравствуйте, Владимир!

Передали данное пожелание команде разработки для анализа возможности изменения данного функционала в будущих версиях системы.

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

Коллеги, посоветуйте, пожалуйста, какой формат даты и времени выбрать, чтобы иметь возможность вводить её в общепринятом виде dd.MM.yyyy?

Перепробовали очень многие, но на такой так и не нарвались (версии 7.8 и 7.11)

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

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

Здравствуйте, Владимир!

Можете выбрать формат Russian (Russia). 

 

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

Я хочу в процессе создать активность, в которой дата=текущая дата, а время - конкретное. Но стандартные элементы позволяют либо выбирать текущую дату (без времени), либо текущую дату и время. А как объединить текущую дату и конкретное время, которое я могу выбрать?

И как задать в параметрах дату на следующий день (на завтра)?http://prntscr.com/g4x2g2

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

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

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

выбрать текущую дату и прилепить к ней время

пишет:
Вам требуется это сделать прямо в БП, или же у Вас автогенерируемая страница и ввод пользователем ?

 Да, мне это нужно в процессе сделать

Дмитрий Степанов пишет:
выбрать текущую дату и прилепить к ней время

 В этом-то и вопрос, как прилепить то?

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

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

Например есть одна дата,
и необходимо рассчитать другую дату 2 = как дата 1 + столько дней/месяцев

Спасибо

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

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

Думаю, ответ тут - про методы DateTime C#
А если на клиенте, то javascript здесь

на клиенте, да.
в скриптах карточек..

Значит что-то вроде

var newDate = CurrentDate.setMonth(CurrentDate.getMonth() + x);

хотя правильнее

var newDate = new Date(CurrentDate.getTime() + days * 24*60*60*1000);

Спасибо

Добрый день!
Хочу в элементе процесса (добавление данных)
рассчитать дату
вот таким образом, например,
[#Системная переменная.Текущее значение даты#].AddMonths(1)

Но при сохранении процесса возникает ошибка

Подскажите, пожалуйста, какое пространство надо подключить? или ошибка в синтаксисе?

Здравствуйте, Дарья!

Вместо [#Системная переменная.Текущее значение даты#] используйте System.DateTime.Now

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

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

Например есть одна дата,
и необходимо рассчитать другую дату 2 = как дата 1 + столько дней/месяцев

Спасибо

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

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

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

C# или JavaScript?

Дарья,

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

JavaScript: https://learn.javascript.ru/datetime
C#: https://msdn.microsoft.com/ru-ru/library/bb546099(v=vs.110).aspx

Добрый день. Спасибо

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

Добрый день!
Подскажите, пожалуйста, как
1) очистить дату через элемент "Изменение данных" - то есть как обозначить пустую дату?
2) как сравнить в условии(условный поток) в бизнес-процессе дату с null (то есть проверить заполнена дата или нет)

Собственно, интересует вопрос как обозначить пустую дату? (незаполненную)
Например, строка - это string.Empty
а в случае даты?

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

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

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

На уровне приложения поле с типом DateTime является non-nullable. Т.е. установить значение null в элемент “Изменить данные” не получится.
Список доступных методов DateTime можно посмотреть в документации https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx
Если не указывать значение для поля с типом DateTime при создании записи в объекте – в базе данных будет установлено значение null.

а в условном потоке можно как-то проверить, заполнена дата или нет?

Если нельзя очистить дату с помощью элемента "Изменить данные", тогда как действовать? использовать элемент сценарий?

Здравствуйте, Дарья!

Для проверки заполнена дата или нет Вы можете в условном потоке сравнивать [#Параметр#] c минимальной датой (DateTime.MinValue).

Дата не заполнена, если [#Параметр#]<=(DateTime.MinValue).

Для очистки даты Вам нужно использовать задание-сценарий, т.к. элементом "Изменить данные" Вы сможете только задать значение DateTime.MinValue, которое соответствует 01.01.0001 (такое значение будет отображаться на странице редактирования/в реестре, что не очень красиво).

спасибо

Добрый день!
Использую такой код в сценарии для очищения даты
UserConnection userConnection = context.UserConnection;
var update = new Update(userConnection, "Case")
.Set("SolutionProvidedOn", new QueryParameter(null))
.Where("Id").IsEqual(new QueryParameter(RecordId));
update.Execute();
Возникает ошибка при исполнении процесса -
Ссылка на объект не указывает на экземпляр объекта.

Пробую использовать такой код в сценарии для очищения даты
UserConnection userConnection = context.UserConnection;
var update = new Update(userConnection, "Case")
.Set("SolutionProvidedOn", null)
.Where("Id").IsEqual(new QueryParameter(RecordId));
update.Execute();
При публикации объекта возникает ошибка

Как очистить дату с помощью элемента-сценарий?

Здравствуйте, Дарья!

Вы можете использовать CustomQuery.

var dr = new CustomQuery(UserConnection, String.Format(
"update case set SolutionProvidedOn = null where Id = 974ca9fc-c066-4a7a-ac65-7ec91a44a067")).ExecuteReader(dbExecutor);

При этом сам запрос Вам необходимо формировать отдельно (так как Id каждый раз будет новый).

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

Добрый день.
Подскажите пожалуйста, как увеличить дату ровно на 1 год. В договоре есть поле "Дата начала" (StartDate) типа дата/время и есть поле "Дата завершения" (DueDate) типа дата/время. Так вот, мне нужно чтобы в поле "Дата завершения" автоматически проставлялась дата на год больше, чем стоит в поле "Дата начала."

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

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

scr_Utils
функция AddDateDays

есть же високосные года)

добавьте в function dlDataOnDatasetDataChange(DataField) скрипта wnd_ContractEditScript

	if (DataField.Name == 'StartDate') {
		var NewDate = new Date(dlData.Dataset.Values('StartDate'));
		NewDate.setYear(NewDate.getYear() + 1);
		dlData.Dataset.Values('DueDate')= NewDate.getVarDate();
	}

Спасибо, все получилось

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

Здравствуйте. При формировании отчета в Word дата и время отображается в формате 28.12.2012 10:00:00.
Как сделать так, чтобы секунды не выводились в отчет?

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

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

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

При настройке отчета используется <#Деталь 3.Дата начала>

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

Спасибо, Сергей, это помогло. Единственное, что при таком решении часы и минуты, если их значение меньше 10, выводятся в таком виде, например, 8:5. Хотелось бы, конечно, в формате 08:05. Наверное, здесь ничего нельзя сделать

Вы правы, тут уже ничего.
как вариант, можете писать 8 часов 10 минут

Да, этот вариант я тоже уже рассмотрел) Спасибо)

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

Как вставить дату контракта в формате "7 июля 2012 года" в Word-отчет?
Ну, или другой формат другой даты. Иногда необходимо немного видоизменять данные пользовательского запроса для отчета Word

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

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

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

1

Однако, обратите внимание, что после изменений везде, где используется поля типа "Дата/время" дата будет отображена в данном формате.

А если конкретно в одном отчете?

Здравствуйте, Владимир.

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

1

Может, в Word'е можно вставить какую-то формулу соотстветствия номера месяца и его названия?

Попробуйте следующим образом:

Создайте новую закладку Word с именем, к примеру, Test. (Вставка - Закладка)

Далее, поместите курсор в начало документа и нажмите Alt+F9, потом Ctrl+F9.
Между фигурных скобок вставьте следующий текст:

SET test #макрос с датой из террасофт  \* MERGEFORMAT

в том месте где нужно вывести дату в нужном Вам формате - нажмите Alt+F9, потом Ctrl+F9 и между фигурных скобок вставьте следующий текст:

\@ "dd MMMM yyyy"  \* MERGEFORMAT

далее, между отрывающейся фигурной скобкой и символом \@ нажмите еще раз Ctrl+F9 и между фигурных скобок вставьте текст:

 REF  test

В итоге у меня вышло следующее:

1

Файл Word во вложении.

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