Всем доброго дня.
Подскажите пожалуйста, как проще всего добавить номер по порядку при создании новой записи в детали через "+"?
Ранее сделала заполнение номера по бп с тригером на добавление записи, хотелось бы переделать кодом или через установку значения по умолчанию.
![]()
Нравится
Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.
Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.
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();
}
}
}
}
}
Трефилов Павел Сергеевич,
спасибо, отлично работает с вашим кодом)