К статье
Практический материал

Разработка и Конфигурация · 12 мин

Какие существуют формы документа в 1С

Какие формы документа существуют в 1С: форма списка, объекта, выбора, произвольная. Назначение каждой формы, настройка, типичные ошибки и советы разработчику.

В платформе 1С:Предприятие документ — это объект, который фиксирует факт хозяйственной операции: отгрузку, оплату, приём сотрудника, перемещение товара. Чтобы пользователь мог работать с документами, платформа использует формы — экранные представления данных. Формы документа делятся на несколько типов, и каждый тип решает свою задачу: одни показывают журнал документов, другие позволяют заполнять конкретный документ, третьи помогают выбрать документ в качестве реквизита.

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

В управляемом приложении (режим «Такси») формы строятся декларативно: платформа сама генерирует форму по описанию объекта, а разработчик при необходимости создаёт собственную форму в конфигураторе и назначает её основной. В обычном приложении формы рисовались вручную, но в современных типовых решениях этот режим практически не используется, поэтому дальше речь идёт об управляемых формах.

Как платформа формирует формы документа

Если разработчик не создал ни одной формы для документа, платформа построит их сама. Автоматически генерируются форма списка (журнал документов) и форма объекта (карточка документа). Этого достаточно для полноценной работы: пользователь может создавать, заполнять, проводить и отменять проведение документов без единой строчки кода.

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

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

Форма списка документов

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

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

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

Форма объекта (карточка документа)

Форма объекта открывается при создании нового документа или редактировании существующего. Здесь пользователь заполняет реквизиты шапки (контрагент, договор, склад), табличные части (товары, услуги) и выполняет проведение. Это самая нагруженная форма с точки зрения логики: в ней работают обработчики заполнения, проверки, расчёты сумм и взаимодействие с другими объектами.

В модуле формы объекта доступны события «ПриСозданииНаСервере», «ПриОткрытии», «ПередЗаписью», «ПослеЗаписи» и другие. Они позволяют управлять поведением формы: блокировать поля в зависимости от статуса, пересчитывать итоги, проверять заполненность обязательных реквизитов. Деление событий на клиентские и серверные принципиально: обращение к базе данных возможно только в серверном контексте.

Отдельный момент — блокировка данных. Пока документ открыт в форме, платформа удерживает объектную блокировку, и другой пользователь не сможет изменить этот же документ до закрытия формы или записи. Это защищает от конфликтов, но при массовой обработке документов через форму может приводить к ошибкам «Конфликт блокировок».

Форма выбора документа

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

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

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

bsl
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Контрагент", Контрагент));
ОткрытьФорму("Документ.ЗаказПокупателя.ФормаВыбора", ПараметрыФормы, ЭтотОбъект);

Дополнительные и произвольные формы документа

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

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

Также формы документа могут содержать команды с обработчиками, которые открывают связанные объекты: печатные формы, отчёты по документу, структуру подчинённости. Сама печатная форма при этом формой документа не является — она строится на табличном документе и формируется из модуля менеджера или команды печати.

Сравнение видов форм

Форма списка

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

Форма объекта

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

Форма выбора

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

Дополнительная форма

Произвольная логика: подбор, мастера, служебные окна. Открывается только программно, не заменяет основные формы.

Как создать и настроить собственную форму

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

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

Если дорабатывается типовая конфигурация, предпочтительный путь — расширение. Форма заимствуется в расширение, изменяется там, а типовой объект остаётся нетронутым. Это резко упрощает обновления, хотя накладывает ограничения: не все элементы формы можно изменить в расширении, а при изменении типовой формы поставщиком возможны конфликты, которые нужно проверять после каждого обновления.

Порядок создания формы документа
  1. 1
    Откройте конфигуратор и найдите нужный документ в дереве конфигурации
  2. 2
    На вкладке «Формы» добавьте форму нужного типа через конструктор
  3. 3
    Разместите реквизиты, настройте порядок элементов и команды
  4. 4
    Назначьте форму основной в свойствах документа
  5. 5
    Обновите конфигурацию базы данных (F7)
  6. 6
    Откройте документ в режиме предприятия и проверьте работу формы и обработчиков

Типичные ошибки и ограничения

Самая частая ошибка — попытка изменить данные документа из формы списка напрямую, минуя форму объекта. Динамический список предназначен для чтения; изменения нужно выполнять через открытие формы объекта или программную запись с последующим оповещением форм об изменении, иначе открытые окна покажут устаревшие данные.

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

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

Типичные ошибки
01
Редактирование данных документа напрямую из формы списка — открытые формы не узнают об изменениях и покажут устаревшие данные
02
Запросы к базе в клиентских обработчиках формы — ошибка компиляции или необходимость серверных вызовов на каждое действие
03
Доработка типовой формы без расширения — сложное ручное объединение при каждом обновлении конфигурации
04
Обращение к данным строки динамического списка запросом в цикле — журнал документов начинает открываться и прокручиваться медленно

Как проверить корректность работы формы

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

Отдельно проверьте работу под пользователем с ограниченными правами. Форма может быть доступна, но часть реквизитов или команд окажется недоступной из-за настроек RLS и ролей — это нормально, но не должно приводить к ошибкам выполнения кода. Обращения к недоступным данным в модуле формы нужно оборачивать проверками или выполнять в привилегированном режиме осознанно.

Контрольные точки

Как проверить результат

Открытие формы списка
Норма

Журнал открывается быстро, отборы и сортировка работают

Тревожный признак

Долгое открытие, ошибки динамического списка, пустые колонки

Запись и проведение документа
Норма

Документ записывается, проводится, движения по регистрам корректны

Тревожный признак

Ошибки в обработчиках, движения не формируются или дублируются

Работа под ограниченными правами
Норма

Недоступные поля скрыты или заблокированы, ошибок нет

Тревожный признак

Ошибки «Нарушение прав доступа» при открытии или записи

Повторное открытие
Норма

Все введённые данные сохранились и отображаются

Тревожный признак

Часть реквизитов теряется или показывает старые значения

Частые вопросы о формах документа в 1С

Чем форма списка отличается от формы выбора?

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

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

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

Как открыть форму конкретного документа из кода?

Используйте метод ОткрытьФорму с именем формы вида «Документ.ИмяДокумента.ФормаОбъекта» и передайте ключ записи в параметрах формы (параметр «Ключ» со ссылкой на документ). Для нового документа форму объекта открывают без ключа или с параметрами заполнения.

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

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

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

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

Можно ли создать несколько форм объекта для одного документа?

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

Итог

Что важно запомнить

У документа 1С есть форма списка, форма объекта, форма выбора и произвольные дополнительные формы. Платформа генерирует основные формы автоматически, а собственные создаются в конфигураторе и назначаются основными в свойствах документа. Для типовых конфигураций доработку форм безопаснее выполнять через расширения.