Автонумерация

Создала системную переменную, в дизайнере объектов присвоила полю значению по умолчанию из этой переменной.Что ещё нужно сделать? потому как инкремента поля не происходит, при добавлении новой записи выставляется в 0, а в БД эта возможность заблокирована.

Нравится

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

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

Посмотрела,скопировала к себе этот кусок - не работает.Не пойму, как работает это действие "Сгенерировать порядковый номер" - оно использует системные настройки(Текущий номер и Маска)?

Да, нужно создать системные настройки.

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

Да, по имени. В коде схемы "Сгенерировать номер по порядку" есть:

	var entitySchemaName = entitySchema.Name;
	string codeMaskSettingName = entitySchemaName + "CodeMask";
	string lastNumberSettingName = entitySchemaName + "LastNumber";

Сделала ранее по аналогии, как в схеме Документ - не работает, потом так

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

object EntitySchema = Entity.Schema;
if (EntitySchema != null) {
	var entitySchema = EntitySchema as Terrasoft.Core.Entities.EntitySchema;
	var entitySchemaName = entitySchema.Name;
	string codeMaskSettingName = entitySchemaName + "CodeMask";
	string lastNumberSettingName = entitySchemaName + "LastNumber";
 
	var connection = context.UserConnection;
	string sysSettingsCodeMask = (string)SysSettings.GetValue(connection, codeMaskSettingName);
	int sysSettingsLastNumber = (int) SysSettings.GetValue(connection, lastNumberSettingName);
 
	SysSettings.SetValue(connection, UserConnection.RootAdminUnitGroupId, lastNumberSettingName, ++sysSettingsLastNumber);
 
	var code = string.Format(sysSettingsCodeMask,sysSettingsLastNumber);
	var update = new Update(UserConnection, Entity.Schema.Name)
	.Set("Number", Column.Parameter(code))
	.Where("Id").IsEqual(Column.Parameter(Entity.PrimaryColumnValue));
update.Execute();
}

При компиляции ругается

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

Все-таки рекомендую сделать по аналогии с "Документом". Что именно у Вас не получилось?

Здравствуйте, Дмитрий
Сделала по аналогии с "Документом"

В скрипте SetGenerateParamScript сначала 1 строка идентична как в Документе
но поскольку не работала, добавила код на обновление поля....не работает (((

GenerateNumberUserTask.EntitySchema = Entity.Schema;
string code = "1";
var update = new Update(UserConnection, Entity.Schema.Name)
	.Set("Number", Column.Parameter(code))
	.Where("Id").IsEqual(Column.Parameter(Entity.PrimaryColumnValue));
update.Execute();

Такое ощущение что вообще не происходит наступление этого события, тем не менее Заказ в таблицу добавляется....

А какая у этого объекта PrimaryColumn?
Также, пожалуйста, т.к. у Вас On-Site версия - попробуйте запустить Profiler и посмотреть какие запросы идут на сервер после нажатия на "ОК".

Если я не ошибаюсь, то по умолчанию PrimaryColumn это Id (объект наследован от базового)
В профайлере обязательно посмотрю, пока сделала через триггер: после вставки читаю значение из системной таблицы, обновляю поле Number, потом обновляю значение системной переменной в таблице....Понимаю что не совсем правильно, но так хотя бы работает

Если у Вас On-Site, то триггер - вполне разумное решение. :)

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