Как проще добавить номер по порядку для записей в детали
Всем доброго дня.
Подскажите пожалуйста, как проще всего добавить номер по порядку при создании новой записи в детали через "+"?
Ранее сделала заполнение номера по бп с тригером на добавление записи, хотелось бы переделать кодом или через установку значения по умолчанию.
Нравится
Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.
Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.
using System.Linq; public virtual void RunNumeration() { string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name); var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку esq.AddAllSchemaColumns(); if (parentEnityName.IsNotNullOrEmpty()) { Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id"); if (parentEnityId != Guid.Empty) { esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId)); var entityProductsCollection = esq.GetEntityCollection(UserConnection) .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0) .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn)); int newNumber = 0; foreach (var item in entityProductsCollection) { int number = item.GetTypedColumnValue<int>(positionNumberColumn); newNumber++; if (number != newNumber) { item.SetColumnValue("UsrPositionNumber", newNumber); item.Save(); } } } } }
Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.
Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.
using System.Linq; public virtual void RunNumeration() { string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name); var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку esq.AddAllSchemaColumns(); if (parentEnityName.IsNotNullOrEmpty()) { Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id"); if (parentEnityId != Guid.Empty) { esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId)); var entityProductsCollection = esq.GetEntityCollection(UserConnection) .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0) .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn)); int newNumber = 0; foreach (var item in entityProductsCollection) { int number = item.GetTypedColumnValue<int>(positionNumberColumn); newNumber++; if (number != newNumber) { item.SetColumnValue("UsrPositionNumber", newNumber); item.Save(); } } } } }
Трефилов Павел Сергеевич,
спасибо, отлично работает с вашим кодом)