Если вам нужны только готовые экраны внутри системы — это Страницы (внешние и внутренние). Здесь — то, что нужно программисту.
| Страницы (HTML / CSS / JS) | Свои экраны внутри системы и публичные страницы |
| Компоненты | Переиспользуемые библиотеки JS |
| Модули объектов | Серверная и клиентская логика объекта |
formApi | Единый API для страниц, компонентов и модулей |
| Внешний REST API | Чтение и запись данных из чужих систем |
| Планировщик | Фоновые задачи по расписанию |
# Где что лежит
| Артефакт | Раздел Конструктора |
| Страницы | Страницы |
| Компоненты | Компоненты |
| Планировщик | Планировщик |
| Модули объектов | Справочники/Документы/… → вкладка Модуль |
Подробнее: Компоненты, Планировщик, Модуль объекта.
# Адреса страниц
| Вид страницы | Адрес |
| Внешняя | URL, заданный в Свойства страницы → URL страницы (например /my-custom-page) |
| Внутренний объект | Открывается вкладкой внутри системы; произвольного URL нет |
| Публичная (без авторизации) | Тот же URL внешней страницы, но доступна без входа |
Публичная страница может читать только те объекты, которые перечислены в Публичные данные (ID через запятую), и только на чтение, с ограничением частоты запросов.
ВажноДля публичных страниц HTML проходит через очистку по белому списку: теги <script>/<style>, атрибут style и обработчики вида onclick="…" вырезаются. Логику навешивайте через addEventListener в коде страницы, стили — во вкладке CSS.
# formApi — единый API
formApi доступен в JS страницы, в компонентах и в модулях объектов. В модуле объекта это глобальная переменная — объявлять её не нужно.
# Работа с текущей формой
| Метод | Что делает |
getValue(поле) | Прочитать значение поля |
setValue(поле, значение) | Записать значение поля |
setFieldState(поле, настройки) | Изменить видимость, доступность, обязательность поля |
getTabularSection(имя) | Получить табличную часть |
preloader(вкл/выкл) | Показать/скрыть индикатор загрузки |
# Диалоги и навигация
| Метод | Что делает |
showAlert(текст, настройки) | Показать сообщение |
showConfirm(текст) | Спросить подтверждение, вернуть «да/нет» |
showPage(имя, настройки, параметры) | Открыть страницу |
getContext() | Получить контекст: текущего пользователя |
# Данные
| Метод | Что делает |
read(ссылка) | Прочитать запись |
readList(тип, имя, отбор) | Прочитать список |
create(тип, имя, данные) | Создать запись |
update(ссылка, данные) | Изменить запись |
delete(ссылка) | Удалить запись |
post(имя, id) | Провести документ |
unpost(имя, id) | Отменить проведение |
# Почта и ИИ
| Метод | Что делает |
Почта(кому, html, тема) | Отправить письмо |
ai(запрос) | Спросить ИИ-ассистента |
На страницах недоступны методы, привязанные к объекту: getValue, setValue, setFieldState, preloader, getTabularSection. Страница не привязана к конкретной записи.
# Пример
javascriptdocument.addEventListener('DOMContentLoaded', async () => {
const ctx = formApi.getContext();
const rows = await formApi.readList('Справочник', 'Номенклатура', {});
const box = document.getElementById('list');
if (box) box.innerHTML = rows.map(r => `<div>${r.Наименование}</div>`).join('');
});
# Порядок выполнения кода
| Порядок | Что подключается |
| 1 | Глобальные стили |
| 2 | formApi |
| 3 | HTML страницы |
| 4 | Внешние CSS/JS (ваши ссылки) |
| 5 | Модуль страницы (ваш JavaScript) |
Компоненты, подключённые к странице, выполняются до модуля страницы. В модуле объекта компоненты выполняются до кода модуля.
# Внешний REST API
Внешний API позволяет сторонним системам читать и изменять данные платформы.
# Аутентификация
| Шаг | Действие |
| 1 | POST /api/external/login с телом { "username": "...", "password": "..." } |
| 2 | В ответ приходит токен |
| 3 | Дальше токен передаётся в заголовке Authorization: Bearer <токен> |
Токены — JWT (HS256). Отозванные сессии не проходят проверку. Вход защищён ограничением частоты попыток.
# Адреса
| Метод | Адрес | Что делает |
GET | /api/external/{Тип}/{objectId} | Список записей |
POST | /api/external/{Тип}/{objectId} | Создать запись |
GET | /api/external/{Тип}/{objectId}/{recordId} | Прочитать запись |
PUT | /api/external/{Тип}/{objectId}/{recordId} | Изменить запись |
DELETE | /api/external/{Тип}/{objectId}/{recordId} | Удалить запись |
{Тип} — человекочитаемый тип: Справочник, Документ, Регистр, Отчет.
# Параметры списка
| Параметр | Что делает |
_sort=Поле:asc / :desc | Сортировка |
_page=1 | Номер страницы |
_limit=25 | Записей на страницу |
_fields=Поле1,Поле2 | Только указанные поля |
Поле=значение | Фильтр по точному значению |
Поле[gt]=значение | Больше |
Поле[gte]=значение | Больше или равно |
Поле[lt]=значение | Меньше |
Поле[lte]=значение | Меньше или равно |
Поле[ne]=значение | Не равно |
Поле[contains]=текст | Содержит подстроку |
# Права и защита
| Механизм | Как работает |
| Права на объект | Проверяются по группам пользователя: read_access, write_access, delete_access |
| Администратор | Группа admin обходит проверки прав |
| По умолчанию | Если строки прав нет — доступ запрещён |
| Ограничение частоты | По IP и по пользователю |
| Служебные поля | __proto__, constructor, prototype, _markedForDeletion, _rowVersion и подобные не принимаются от клиента |
Подробнее о правилах прав — Права и роли.
# Планировщик для разработчика
| Понятие | Значение |
| Точка входа компонента | onSchedule(formApi, schedulerTask) |
| Резервная точка входа | main, если onSchedule не определена |
| Режимы | Однократно / многократно / непрерывно |
| Журнал | Хранятся последние 50 запусков |
Подробнее — Планировщик задач.
# Ограничения и правила
| Правило | Почему |
Не используйте eval и динамическое исполнение в публичных страницах | Код вырезается санитайзером |
| Не храните секреты в HTML/JS страницы | Страница может быть публичной |
| Проверяйте права на стороне сервера | Клиентские проверки легко обойти |
| Не пишите в регистры напрямую из отчётов | Используйте документы и правила проведения |
| Числовые вычисления — через Выражение реквизита | Так надёжнее и быстрее, чем код |
Обработчики событий — через addEventListener | Инлайновые обработчики удаляются |
# Куда смотреть дальше