Простая форма добавления/редактирования

Для примера будет использоваться сущность \Bitrix\Iblock\ElementTable модуля iblock 
<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

Loader::includeModule("iblock");
Loader::includeModule("devbx.core");

$IBLOCK_ID = intval(\Bitrix\Main\Context::getCurrent()->getRequest()->get('IBLOCK_ID'));

$edit = new \DevBx\Core\Admin\AdminEdit('devbx.forms', "\Bitrix\Iblock\ElementTable", array(
    'ALLOW_DELETE' => 'Y',
    'ALLOW_ADD' => 'Y',
    'TABS' => array(
        array(
            'TAB' => 'Редактирование',
            'TITLE' => 'Редактирование',
            'FIELDS' => array(
                'ACTIVE',
                'ACTIVE_FROM',
                'ACTIVE_TO',
                'SORT',
                'CODE',
                'NAME',
            ),
        ),
    )
));

$edit->setAddParamsFileList('&IBLOCK_ID=' . $IBLOCK_ID);
$edit->setAddParamsFile('&IBLOCK_ID=' . $IBLOCK_ID);

$edit->setSaveCallback(function(\DevBx\Core\Admin\AdminEdit $edit, &$primary, $arLoadFields) use ($IBLOCK_ID) {

    $result = new \Bitrix\Main\ORM\Data\Result();

    $el = new CIBlockElement();

    if (!empty($primary))
    {
        if (!$el->Update($primary, $arLoadFields))
        {
            $result->addError(new \Bitrix\Main\Error($el->LAST_ERROR));
        }
    } else
    {
        $arLoadFields['IBLOCK_ID'] = $IBLOCK_ID;
        $ID = $el->Add($arLoadFields);
        if (!$ID)
        {
            $result->addError(new \Bitrix\Main\Error($el->LAST_ERROR));
        } else
        {
            $primary = $ID;
        }
    }

    return $result;

});

$edit->display();