28 февр. 2026 г.·5 мин

Родительско-дочерние модели данных для практичных форм с построчными элементами

Изучите родительско-дочерние модели данных для котировок, заказов, возмещений и чек-листов с простыми шаблонами для редактируемых форм со строками.

Родительско-дочерние модели данных для практичных форм с построчными элементами

Почему одной записи недостаточно

Котировка, заказ, заявка на возмещение или чек-лист редко описывают только одну вещь. У большинства таких форм есть одна главная запись сверху и много мелких записей под ней. Если попытаться уместить всё в одну запись, форма становится трудно читаемой, неудобной для редактирования и лёгкой в поломке.

Поле с длинным текстом может показаться проще, но почти сразу создаёт проблемы. Люди не могут аккуратно добавить один элемент, исправить одну строку, не затронув остальные, или уверенно удалить устаревшую информацию. Валидация тоже ослабевает, потому что система видит один блок текста вместо чётких отдельных элементов.

Подумайте о коммерческом предложении. Один запрос клиента может включать пять товаров, и для каждого нужна собственная сумма, цена за единицу, скидка и заметка. Заявка на возмещение работает так же. Одна подача относится к одному сотруднику, но каждый расход имеет свою дату, категорию, сумму и состояние чека.

Именно здесь помогает модель родитель–дитя. Родительская запись хранит общие детали для всей формы, такие как заявитель, дата, подразделение или статус утверждения. Дочерние записи хранят построчные элементы. Каждая строка может быть добавлена, отредактирована или удалена отдельно, не повредив главную запись.

Такое разделение делает форму проще в использовании и надёжнее для команд. Если в одной строке неверная сумма или отсутствует поле, вы можете исправить только эту строку. Остальная часть записи остаётся целой.

Такая же схема подходит для редактируемых чек-листов. Чек-лист может иметь одного владельца и общий дедлайн, в то время как каждая задача имеет собственную метку, исполнителя, заметку и статус выполнения. Общие детали остаются в одном месте. Детали элементов — там, где им и место.

Как работают родительские и дочерние записи

Форму со строками проще всего управлять, если разделить её на две части: одну основную запись и множество связанных записей-элементов.

Родитель хранит информацию, которая должна отображаться только один раз. В котировке это может быть клиент, дата котировки, ответственный менеджер и текущий статус. В заявке на возмещение — имя сотрудника, отдел, дата подачи и стадия согласования.

Каждая дочерняя запись хранит один редактируемый элемент, связанный с родителем. В котировке одна дочерняя запись представляет товар или услугу. В чек-листе — одна задача. В форме возмещения каждая дочерняя запись обычно соответствует одному расходу с полями: категория, сумма, дата расхода и заметка о чеке.

Самое простое описание:

  • Родитель: общие детали для всей формы
  • Дочь: одна строка, один элемент, одно действие
  • Связь: поле в дочерней записи, указывающее на родителя

Эта структура важна, потому что итоги и сводки должны вычисляться из дочерних строк, а не вводиться вручную в родителе. Когда кто-то добавляет, удаляет или редактирует элемент, итог должен обновляться по реальным данным. Это сокращает число ошибок и делает решения по утверждению более надёжными.

Она также делает валидацию точнее. Вы можете требовать количество, отклонять отрицательную сумму или помечать пропущенную дату в одной строке, не блокируя всю форму.

Распространённые случаи в повседневной работе

Эту схему вы встретите везде, где одной записи нужно много редактируемых строк снизу.

Котировки — очевидный пример. Менеджер создаёт одну котировку, затем добавляет строку для каждого товара или услуги. Каждая строка может нуждаться в своём наименовании, количестве, цене за единицу, скидке, налоге или заметке, тогда как родитель хранит клиента, дату и статус утверждения.

Заказы используют ту же идею, но строки часто несут более операционные детали. Один заказ может включать несколько товаров, и каждая строка может требовать статуса наличия, заметок по складу, информации о доставке или дат выполнения. Строки задают работу, которая произойдёт после размещения заказа.

Процессы возмещения — ещё один частый случай. Одна заявка принадлежит одному сотруднику и одному отчётному периоду, но может содержать много расходов. Каждая строка расхода обычно нуждается в дате, сумме, категории, поставщике и ссылке на чек. Руководители часто просматривают такие строки по отдельности, а не принимают решение по всей заявке целиком.

Чек-листы также вписываются в ту же модель, даже если выглядят проще. Родителем может быть план адаптации, инспекция объекта или еженедельный обзор. Каждая дочерняя строка превращается в задачу с собственным состоянием выполнения, заметкой, исполнителем или сроком.

Хороший тест прост: есть ли у формы один заголовок и много строк, которые люди должны добавлять, редактировать или удалять? Если да, родительско-дочерняя структура обычно — более чистый выбор.

Планируйте структуру до начала разработки

Хорошие формы обычно начинаются с одного вопроса: что относится ко всей записи, а что повторяется в каждой строке?

Ответьте на это первым — и многие последующие проблемы исчезнут. Вы избежите дублирующихся полей, запутанных итогов и строк, которыми трудно управлять.

В родительской записи оставляйте только поля, описывающие весь документ. В котировке это может быть имя клиента, дата, валюта, менеджер по продажам и общий статус утверждения. В заявке на возмещение — имя сотрудника, отдел, дата подачи и окончательное решение.

В дочерних записях храните поля для каждой строки: наименование элемента, количество, цена за единицу, дата расхода, категория, тип чека, заметки по строке и т. п. Если значение может отличаться в каждой строке, скорее всего, ему место в дочерней записи.

Полезный тест: если вы удалите одну строку, должно ли связанное с ней значение исчезнуть вместе с ней? Если да — это поле для дочерней записи.

У каждой строки также должен быть собственный уникальный ID. Не полагайтесь только на позицию строки (первая, вторая и т.д.). ID облегчает редактирование конкретного расхода, восстановление удалённого элемента и отслеживание изменений.

Перед началом разработки решите, как люди будут работать со строками. Могут ли они добавлять новую строку, дублировать, удалять, менять порядок или фильтровать длинный список? Также определите, когда должны обновляться итоги и статусы. Некоторые команды хотят, чтобы итоги пересчитывались сразу при изменении строки. Другие предпочитают обновления только при сохранении или отправке записи. Оба подхода работают, важно соблюдать последовательность.

Правила статусов тоже важны. Если один расход отклонён, возвращается ли вся заявка в черновик, остаётся в ожидании или переходит в частично утверждённое состояние? Проще ответить на такие вопросы заранее, чем после того, как пользователи начнут полагаться на форму.

Делайте редактирование простым для пользователя

Начните с реального процесса
Начинайте с котировок, чек-листов или заявок и сохраняйте данные чистыми.
Создать процесс

Форма со строками работает лучше, когда пользователь видит детали родителя и строки вместе. Поместите главную запись сверху, а редактируемую таблицу — сразу под ней. Если человек создаёт котировку, он должен подтвердить клиента, дату и статус перед добавлением товаров.

Такой простой интерфейс снижает количество ошибок, потому что не нужно переключаться между экранами, чтобы проверить то, что редактируешь.

Держите задачу на одном экране

Добавление новой строки должно быть быстрым. Чёткая кнопка «Добавить элемент» над или под таблицей обычно достаточно. При нажатии открывайте пустую строку или небольшой встроенный формуляр вместо перехода на отдельную страницу.

Это особенно важно в длинных формах. Если нужно ввести десять расходов, каждое лишнее действие замедляет процесс и увеличивает шанс ошибки.

Наиболее полезные действия со строкой — простые: добавить, дублировать, удалить и иногда переместить. Дублирование особенно удобно, когда несколько строк похожи, например повторяющиеся ночёвки в отеле или элементы чек-листа с небольшими изменениями.

Показывайте ошибки там, где они возникают

Длинные формы должны автоматически сохранять частичную работу или, по крайней мере, позволять сохранять черновик. Потеря двадцати минут ввода из-за закрытой вкладки — один из самых быстрых способов сделать форму ненадёжной.

Валидация должна быть столь же прозрачной. Если одна строка имеет пропущенную сумму или неверное количество, показывайте ошибку в конкретной строке и поле. Не заставляйте людей искать по всей форме расплывчатое предупреждение.

Если семь строк верны, а одна не имеет номера чека, пометьте только ту строку. Сохраните остальную часть заявки нетронутой и позвольте пользователю исправить проблему на месте.

Пример: заявка на возмещение с несколькими расходами

Стройте внутренние инструменты визуально
Создавайте формы утверждения для продаж, поддержки, операций или админов.
Создать инструмент

Заявка на возмещение показывает, почему эта модель работает так хорошо. Одна заявка выступает родителем, а каждый расход становится дочерней строкой.

Родитель содержит детали, применимые ко всей заявке: имя сотрудника, отчётный период, менеджер и общий статус. Этот статус может меняться от «Черновик» до «Отправлено», затем в «Частично утверждён» или «Утверждён».

Каждая строка расхода хранит детали, относящиеся только к этому пункту. Одна строка может содержать данные такси: продавец, дата покупки, сумма, категория и чек. Другая — аналогично для счета в отеле.

Простая заявка может включать три строки:

  • Такси по городу, 3 мая, $28, Транспорт, чек приложен
  • Grand Hotel, 4 мая, $180, Проживание, чек приложен
  • Corner Cafe, 4 мая, $14, Питание, чек отсутствует

Эта структура важна потому, что менеджеры часто просматривают строки по одной. Такси и отель могут быть утверждены, а питание отклонено с краткой причиной вроде «Чек отсутствует» или «Питание превышает дневной лимит».

Одна отклонённая строка не должна портить всю заявку. Сотрудник по-прежнему должен получить возмещение по утверждённым позициям, а отклонённая строка остаётся видимой с указанием причины. Это упрощает процесс и делает возможным последующий аудит.

Итоги должны браться из дочерних строк, а не из числа, введённого вручную в родителе. Многие команды держат два итога: отправленный итог, основанный на всех включённых строках, и утверждённый итог, основанный только на принятых строках. Это показывает, почему выплата может быть меньше первоначальной суммы.

Итоги, утверждения и изменения статусов

Форма со строками начинает казаться надёжной, когда числа и статусы обновляются в нужный момент.

Если пользователь меняет количество, цену или сумму расхода, итоги должны перерассчитываться на основе этого изменения. Ожидание до окончательной отправки часто создаёт путаницу, особенно при скидках, налогах или лимитах утверждения. В большинстве случаев итог родителя должен быть вычисляемым, а не редактируемым.

Правила утверждения требуют такой же ясности. Решите заранее, будут ли строки блокироваться после окончательного утверждения. Если утверждённые строки остаются редактируемыми, данные могут расходиться с тем, что фактически подписал менеджер.

Иногда утверждение происходит построчно, а не целиком. Возмещения — хороший пример. Путешествия могут быть утверждены, питание — частично отклонено, а другой расход отправлен на уточнение. В этом случае каждая дочерняя строка нуждается в собственном статусе, а родитель хранит общий статус.

Небольшой набор общих состояний обычно достаточен:

  • Черновик
  • На рассмотрении
  • Частично утверждён
  • Утверждён
  • Отклонён

Такое разделение сохраняет честность формы. Родитель показывает общую стадию заявки, а дочерние строки объясняют, что случилось с каждым элементом.

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

Удалённым строкам тоже нужна своя политика. До начала проверки жёсткое удаление может быть приемлемо. После начала ревью архивирование обычно безопаснее полного удаления, чтобы прошлые итоги и решения по утверждению оставались осмысленными.

Ошибки, которые подрывают доверие

От рабочего процесса к приложению
Используйте одну основную модель для backend, веба и нативных мобильных приложений.
Начать сейчас

Доверие падает быстро, когда форма выглядит чисто на экране, но хранит хаотичные данные внизу.

Одна из самых частых ошибок — смешивание полей родителя и элементов в одной плоской таблице. Котировка, заказ или заявка на возмещение имеют общие детали (заявитель, дата, статус) и детали строк (наименование, сумма, количество, дата чека). Когда всё смешано, правки путают, отчёты усложняются, и дублирование данных распространяется.

Ещё одна распространённая проблема — позволять людям вручную вписывать итоги, когда система должна их вычислять. Если кто-то вводит три строки расходов, а затем отдельно пропечатывает общую сумму, цифры могут не совпасть. Когда это случается несколько раз, проверяющие перестают доверять форме.

Большой свободный текст создаёт похожие проблемы. Может показаться быстрее попросить пользователя вставить все элементы в одно поле, но неструктурированный текст трудно проверять, сортировать, фильтровать или утверждать. Структурированные строки требуют больше планирования, но гораздо проще управляемы в дальнейшем.

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

Удаление — ещё одна слабая точка. Если пользователи могут убрать строки одним кликом без подтверждения, важные данные могут исчезнуть по случайности. Ещё хуже, когда нет записи о том, кто сделал изменение.

Более безопасный подход прост: подтверждайте удаление строки, блокируйте вычисляемые поля и записывайте ключевые изменения, которые делают пользователи.

Проверьте перед запуском

Создавайте лучшие формы со строками
Визуально создавайте родительско-дочерние записи и сохраняйте строки простыми для редактирования.
Попробовать AppMaster

Перед публикацией формы с повторяющимися строками тестируйте её так, как будут работать реальные пользователи.

Начните с базовых сценариев. Убедитесь, что пользователь может добавить, отредактировать, дублировать и удалить строки без потери других данных. Проверьте поведение формы с десятью строками, затем со 50 или 100. Ошибки должны показываться в конкретной строке, а не только вверху страницы.

Затем проверьте, что происходит после изменений. Обновите количество, удалите строку, продублируйте элемент и смените статус. После каждого действия убеждайтесь, что родительская запись показывает правильные итоги, количество и сводное состояние.

Тестируйте также крайние случаи, которые обычно выявляют слабые места: все строки удалены, одна неверная строка среди множества верных, дубли, нулевые суммы, длинные заметки и правки после отправки.

Форма готова, когда она остаётся понятной при обычном использовании и продолжает вести себя предсказуемо в грязных, повседневных ситуациях.

Реализуйте в no-code приложении

Если вы строите это в no-code инструменте, начните с одного рабочего процесса, который люди уже понимают, например возмещения или котировок. Сначала создайте структуру данных, затем добавьте правила, связывающие родителя и дочерние строки, и только после этого приводите в порядок интерфейс.

Использование реальных примеров данных полезнее идеальных тестовых наборов. Введите дубли, отсутствующие заметки, исправленные суммы и незавершённые строки. Такие случаи показывают, где форма путает пользователей и где начинает падать доверие.

AppMaster хорошо подходит для такого рода задач, потому что родительско-дочерняя структура естественно отображается в раздельных моделях данных, связанных формах и бизнес-логике в одном месте. Если процесс вырастет, AppMaster позволит превратить ту же основную модель в backend, веб-приложение и нативное мобильное приложение без полной переработки рабочего процесса.

Главная цель остаётся прежней для любых инструментов: держите родительскую запись чистой, делайте каждую строку редактируемой по отдельности и позволяйте итогам и статусам формироваться по реальным данным. Как только вы правильно решите этот момент, формы со строками станут легче в использовании и надежными для бизнеса.

Вопросы и ответы

Почему не хранить всё в одной записи?

Потому что одна запись обычно смешивает общие данные и повторяющиеся детали по пунктам. Родительско-дочерняя модель сохраняет заголовок чистым и позволяет добавлять, редактировать, проверять или удалять каждую строку отдельно, не ломая всю форму.

Что должно находиться в родительской записи, а что в дочерних?

Поместите в родителя поля, которые описывают весь документ — заявитель, клиент, дата, отдел или общий статус. Помещайте в дочерние записи то, что может отличаться от строки к строке: количество, сумма, категория, заметка или срок.

Когда следует использовать родительско-дочернюю структуру?

Используйте её, когда у формы есть один заголовок и много редактируемых строк под ним. Котировки, заказы, возмещения и чек-листы — типичные примеры, потому что каждая строка требует собственных полей и действий.

Нужны ли строкам собственные идентификаторы?

Да. У каждой дочерней строки должен быть свой уникальный идентификатор вместо опоры на позицию строки. Это облегчает редактирование, отслеживание изменений, восстановление удалённых элементов и синхронизацию.

Нужно ли пользователям вручную вводить итоги?

Обычно нет. Более безопасный подход — вычислять итоги по дочерним строкам и делать поле итогов в родителе только для чтения. Это избегает рассинхронизации и повышает доверие к процессу утверждения.

Как должна работать валидация в форме со строками?

Показывайте ошибку на той же строке и поле, где она произошла. Если один элемент неверен, человек должен исправить именно эту строку без потери остальной части формы.

Нужны ли утверждения только в родительской записи?

Не всегда. Если ревью происходит построчно, у каждой дочерней строки должен быть собственный статус, а родитель хранит общий статус. Это удобно для возмещений, где часть расходов может быть утверждена, а часть отклонена.

Стоит ли полностью удалять строки?

До начала проверки полное удаление может быть допустимо. После начала ревью безопаснее архивировать строки, чтобы прошлые итоги и решения по утверждению оставались согласованными.

Что делает форму со строками удобнее для пользователя?

Держите детали родителя и редактируемые строки на одном экране, когда это возможно. Кнопки добавления, дублирования и удаления должны быть на виду, а сохранение черновиков помогает избежать потерь при длительном вводе.

Как можно построить это в no-code инструменте, например AppMaster?

Начните с отдельных моделей данных для родителя и дочерних элементов, затем добавьте правила связей, расчётов и статусов. AppMaster хорошо подходит для этого, потому что позволяет моделировать связанные данные, добавлять бизнес-логику и развертывать бекенд, веб и мобильные приложения на основе единой модели.

Легко начать
Создай что-то невероятное

Экспериментируйте с AppMaster с бесплатной подпиской.
Как только вы будете готовы, вы сможете выбрать подходящий платный план.

Попробовать AppMaster