Что такое одна настройка таблицы
Одна запись — это раскладка одной таблицы одной компании. У неё две содержательные части:- Название таблицы — ключ, по которому приложение узнаёт свою раскладку («список аренд», «клиенты» и так далее; конкретный набор названий задаёт само приложение).
- Описания колонок — список, где каждый элемент описывает одну колонку: какой это столбец, какой он ширины и показывать ли его.
Раскладка принадлежит компании, а не конкретному сотруднику. Все, кто работает в компании, видят одну и ту же сохранённую раскладку каждой таблицы, и сохранение перезаписывает её для всех сразу.
Модель данных
Описание одной колонки
Если в описании колонки прислать что-то сверх этих трёх полей, лишнее молча отбрасывается: сохранится и вернётся только ключ, ширина и активность. То же самое с лишними полями верхнего уровня — например, попытка передать компанию просто игнорируется.
Значения по умолчанию при чтении
При выдаче раскладки каждое описание колонки дополняется до полного вида — это защита от неполных или старых записей, чтобы приложение всегда получало предсказуемую структуру:
Подстановка выполняется отдельно для каждого элемента списка и только на чтение — в хранилище запись остаётся такой, какой её сохранили.
Название таблицы: и адрес, и ограничение
Название таблицы выполняет сразу две роли. Это адрес записи. Чтение, изменение и удаление отдельной раскладки выполняются по названию таблицы, а не по внутреннему номеру. Приложению не нужно ничего запоминать между сессиями: оно знает название своей таблицы и запрашивает раскладку прямо по нему. Поиск всегда идёт только среди раскладок текущей компании; если раскладки с таким названием у компании нет, ответом будет «не найдено», и приложение показывает таблицу в своём собственном виде по умолчанию. Это ограничение. В пределах одной компании название должно быть уникальным: двух раскладок с одинаковым названием быть не может. Названия сравниваются точно, посимвольно, — различие в регистре даёт две разные раскладки. Ограничение задано на уровне хранилища — отдельной предварительной проверки перед сохранением нет. Поэтому при попытке создать раскладку с уже занятым названием система перехватывает конфликт хранилища и превращает его в понятный отказ: «Настройка с таким названием уже существует.» Он приходит как общая ошибка формы, не привязанная к конкретному полю. Разные компании друг другу не мешают: одинаковые названия таблиц у разных компаний — обычная ситуация, ограничение действует только внутри одной компании.Кто и что может делать
Доступ к раскладкам устроен по принципу «смотреть — сотрудникам, менять — суперпользователю».Жизненный цикл раскладки
Создание
Приложение присылает название таблицы и список описаний колонок. Компанию указывать не нужно: её нет среди полей обмена, а присланное значение игнорируется — система подставляет текущую компанию сама, поэтому завести раскладку для чужой компании через обычную работу невозможно. Список описаний колонок при создании обязателен: чтобы завести раскладку «пока без колонок», нужно явно прислать пустой список. В каждом описании колонки обязательны ключ и активность, ширину можно опустить. Если название уже занято — отказ с сообщением «Настройка с таким названием уже существует.».Чтение
Список отдаёт все раскладки текущей компании одним ответом, без постраничной разбивки. Отдельная раскладка запрашивается по названию таблицы. В обоих случаях описания колонок дополняются значениями по умолчанию, как описано выше.Изменение
Изменение выполняется по названию таблицы. Если список описаний колонок прислан, он заменяет прежний целиком: прислать одну изменившуюся колонку нельзя — приложение отправляет полный актуальный набор, и то, что не вошло в присланный список, из раскладки исчезает. При частичном изменении список можно вообще не передавать — тогда он останется прежним. Название таблицы тоже можно изменить — это фактически переименование раскладки.Удаление
Удаление стирает раскладку целиком. Никаких других данных это не затрагивает: таблица просто вернётся к тому виду, который приложение считает видом по умолчанию, а следующий запрос этой раскладки ответит «не найдено» — до тех пор, пока её не создадут заново. Вместе с удалением самой компании удаляются и все её раскладки.Что система не проверяет
Настройки таблиц намеренно сделаны «глупым» хранилищем, и это стоит учитывать:- Название таблицы не сверяется ни с каким справочником. Система не знает, какие таблицы существуют в интерфейсе. Опечатка в названии не будет отклонена — вместо ошибки появится новая, никем не используемая раскладка, а нужная таблица останется в виде по умолчанию.
- Ключи колонок тоже не проверяются. Ключ несуществующего столбца сохранится и вернётся обратно; распорядиться им (или проигнорировать) — задача приложения.
- Дубликаты колонок не отслеживаются. Если в одном списке дважды встретится один и тот же ключ колонки, оба элемента сохранятся.
- Ширина не интерпретируется. Это просто целое число, которое система хранит и возвращает; смысл единиц измерения задаёт интерфейс.
Как это используется
Раскладки таблиц существуют исключительно ради интерфейса: ни расчёты аренды, ни финансы, ни отчёты к ним не обращаются. Типичный сценарий выглядит так:- Сотрудник открывает таблицу — приложение запрашивает раскладку по названию этой таблицы.
- Раскладка найдена — колонки показываются в сохранённом составе, порядке и ширине; не найдена — используется вид по умолчанию из самого приложения.
- Сотрудник с полными правами перетаскивает границы колонок, скрывает лишние — приложение отправляет полный обновлённый список описаний колонок.
- Все сотрудники компании при следующем открытии таблицы видят новый вид.
Подводные камни
- Ширина по умолчанию подставляется только тогда, когда ширина в сохранённом описании колонки отсутствует; явно сохранённое пустое значение так и вернётся пустым.
- В описании колонки сохраняются только ключ, ширина и активность — любые дополнительные атрибуты молча отбрасываются и в ответе не появляются; лишние поля верхнего уровня, включая попытку указать компанию, тоже игнорируются.
- Ни название таблицы, ни ключи колонок не сверяются с каким-либо справочником: опечатка не вызовет ошибки, а создаст неиспользуемую раскладку, при этом нужная таблица останется в виде по умолчанию.
- Если список описаний колонок прислан при изменении, он заменяет прежний целиком — отсутствующие в списке колонки исчезнут; при частичном изменении список можно не передавать вовсе, тогда он останется прежним.
- При создании список описаний колонок обязателен: чтобы завести раскладку без колонок, нужно явно передать пустой список, иначе запрос будет отклонён как неполный.
- Уникальность названия обеспечивается только ограничением хранилища, предварительной проверки перед сохранением нет — при одновременной отправке двух одинаковых названий одна из попыток гарантированно получит отказ.
- Обращение к отдельной раскладке идёт по названию таблицы в составе адреса, поэтому название с косой чертой адресовать не получится — такую раскладку нельзя будет ни прочитать, ни изменить, ни удалить.
- Одинаковые ключи колонок внутри одного списка не отслеживаются — дубликаты сохранятся и вернутся приложению как есть.
- Если в списке описаний колонок окажется элемент, не являющийся описанием колонки, чтение этой раскладки завершится ошибкой. Через обычную работу приложения такой элемент не появится: он отсекается при сохранении, поэтому случай достижим только через административный раздел платформы или прямую правку в базе.
- Список раскладок отдаётся целиком, без постраничной разбивки и без заданного порядка сортировки, поэтому порядок записей в ответе не гарантирован; порядок колонок внутри одной раскладки, наоборот, сохраняется без изменений.
- Сохранённые раскладки нигде в системе больше не используются: ни расчёты, ни отчёты, ни выгрузки к ним не обращаются — поэтому удаление раскладки безопасно и просто возвращает таблицу к виду по умолчанию.
- В административном разделе платформы заводить, менять и удалять раскладки может только сотрудник платформы с полными правами; компания у записи там недоступна для правки.
- Раскладки привязаны к компании жёстко: при удалении компании все её раскладки удаляются вместе с ней.
- Названия таблиц сравниваются точно, посимвольно: различие в регистре даёт две разные раскладки, и ограничение уникальности их не связывает.
Связанные страницы
Глоссарий: Настройки таблиц
Полный перечень полей раскладки таблицы и описания колонки.
Настройки компании
Обзорная страница модуля: из чего складываются настройки компании.
Реестр настроек компании
Полный перечень параметров компании: что можно включить, какие значения стоят по умолчанию и как настройки сохраняются.
Хранение и кэш настроек
Как значение настройки попадает в базу, кэшируется по компаниям и почему изменение сбрасывает кэш целиком.
Дополнительные поля
Собственные поля компании для клиентов, инвентаря и аренд: типы, обязательность и отображение в таблице.
Переименование сущностей
Как компания меняет названия разделов и статусов под свою нишу, включая формы слова по падежам и числам.
Промо-баннеры
Показ рекламных и информационных баннеров платформы внутри системы: частота, отметка о просмотре и исключения.
Сквозная автонумерация
Общий счётчик компании, из которого берутся номера клиентов, артикулы инвентаря и номера документов.
Настройки в админ-панели
Служебный экран платформы для просмотра и правки настроек компании со сбросом значений к умолчанию.