Перейти к основному содержанию
`Ctrl`+`K`

# Сервис группового редактирования

## Основные положения

Операция группового редактирования объявлена в `EntityAvi` в отображении `Default`, что означает, что она доступна в каждой выборке.

Чтобы включить операцию группового редактирования, необходимо в вашем отображении переопределить операцию, так как изначально она выключена:

    @Oper(
        active = true,
        headOperation = "extraOperation"
    )
    override def groupEditAttr(): Unit = super.groupEditAttr()

Для включения возможности группового редактирования на атрибуте необходимо в ODM (объектно-документном представлении) или AVM (прикладной модели представления) добавить флаг `isGroupEditAvailable`:

    <!-- odm -->
    <attr name="dDoc" attribute-type="Date" caption="Дата док-та" order="60" type="basic" isVisible="true"
          editorType="datePick" isHeadLine="true" isCopyInCopyObject="false" isGroupEditAvailable="true" />

    <!-- avm -->
    <attr name="dDoc" caption="Дата док-та" editorType="datePick" order="60" isGroupEditAvailable="true" />

Для JSON-атрибутов при регистрации так же можно включить групповое редактирование (изначально оно выключено):

    Btk_AttributeApi().registerJsonAttr(
        idpClass = idClass,
        spSystemName = "dCreateDoc".ns,
        spCaption = "Дата создания док-та",
        spAttrType = AttributeTypes.Long.toString,
        spType = AttrTypes.Basic.toString,
        bpGroupEditAvailable = 1.nn
    )

Если необходимо включить групповое редактирование, не изменяя проектный код, необходимо зайти в приложение:
«Настройки системы» -> «Сущности» -> «Классы».
В списке атрибутов в столбце «Групповое редактирование атрибутов» поставить галочку.

### Редактируемые объекты

Редактируемый объект представляет собой ссылку на провайдер строки определённого класса.
Для классов в отображении происходит поиск атрибута с наименованием `id`, для миксинов — `gidRef`.
Если ваше отображение не привязано к классу, то в нём происходит поиск по следующим атрибутам: `id`, `gid`, `gidRef`.
Если ни один из вышеперечисленных атрибутов не найден, будет выдано исключение.

### Свой список изменяемых объектов

Если необходимо передать свой список изменяемых атрибутов, необходимо переопределить операцию группового редактирования следующим образом:

    @Oper(
        active = true,
        headOperation = "extraOperation"
    )
    override def groupEditAttr(): Unit = {
        val idList = (0 until selection.selectedRecordsCount()).map { idx =>
          // Вместо id -> idTask
          NLong.fromAny(selection.selectedValueByName("idTask", idx))
        }.toList

        Btk_GroupEditPkg().execByRep(
            baseRep = this,
            listObjects = idList
        )
    }

## Установка групп

Если на классе установлена возможность группировки объектов (Руководство разработчика: Сервисные возможности для классов # Группировка), то в отображении группового редактирования появится закладка «Установка групп», на которой можно задать группы для выделенных записей.

## Дополнительные закладки для группового редактирования

Для отображения группового редактирования есть возможность добавить новые закладки для дополнительной обработки объектов.
Для этого необходимо переопределить операцию группового редактирования, в которой вызывается `Btk_GroupEditPkg().execByRep`, с параметром `addTabs`, который принимает последовательность объектов закладок для данного отображения.

Закладки представлены в виде case-класса `GroupEdit_TabsRow`, который принимает в себя данные об отображении и функцию обработки объекта.

### Функция обработки объекта

Данная функция принимает в себя один параметр в виде case-класса `GroupEdit_TabsRowParam`, который содержит в себе сессию выполнения группового редактирования и редактируемый объект, который может быть представлен в виде `NGid` или `NLong`.