Разработка и Конфигурация · 13 мин
Как сделать поле ввода в 1С
Как добавить поле ввода на форму в 1С: через конфигуратор, программно, с выбором типа данных и проверкой значений. Практические примеры и типичные ошибки.
Поле ввода — базовый элемент любой формы в 1С: через него пользователь вводит наименования, количества, даты, суммы и ссылки на справочники. Добавить его можно двумя способами: визуально в конфигураторе через редактор формы или программно кодом на встроенном языке. Первый способ подходит для типовых задач и статичных форм, второй — когда поле должно появляться динамически, например по условию или в цикле.
Ключевой момент, который часто упускают новички: поле ввода на форме — это не самостоятельный объект, а отображение реквизита. Сначала создаётся реквизит объекта (справочника, документа) или реквизит формы, и только потом он выводится на форму как поле ввода. Если добавить элемент формы без привязки к данным, введённое значение не будет нигде храниться и пропадёт после закрытия формы.
Ниже разобраны оба подхода с конкретными шагами, настройкой типов данных, проверкой введённых значений и разбором ошибок, которые чаще всего встречаются на практике.
Что нужно понять перед созданием поля ввода
В 1С элемент «Поле ввода» всегда связан с данными через свойство «ПутьКДанным». Это фундаментальное отличие платформы от классических форм в других средах разработки, где поле может существовать само по себе. Поэтому порядок работы всегда одинаковый: сначала данные (реквизит), затем их визуальное представление (элемент формы).
Реквизит может храниться в трёх местах. Реквизит объекта конфигурации (справочника, документа) сохраняется в базе данных и доступен всем пользователям. Реквизит формы существует только пока открыта форма и нужен для промежуточных значений — отборов, параметров, настроек. Динамический список или данные объекта, редактируемого на форме, — третий вариант для управляемых форм.
Выбор места хранения определяется задачей. Если значение должно сохраняться в базе (например, «Комментарий» в карточке контрагента) — это реквизит объекта. Если значение нужно только для работы с формой (например, период отбора в отчёте) — достаточно реквизита формы, и база данных не потребует изменения структуры.
Как добавить поле ввода через конфигуратор
Визуальный способ — основной для большинства доработок. Откройте конфигуратор, найдите нужный объект (справочник, документ, обработку) и откройте его форму двойным щелчком. Если формы ещё нет, создайте её через кнопку добавления на закладке «Формы» объекта.
Последовательность действий для добавления реквизита объекта: откройте объект конфигурации, перейдите на закладку «Данные», добавьте новый реквизит, задайте имя (например, «Комментарий») и тип (например, «Строка(250)»). Затем откройте форму объекта — в панели реквизитов появится новый элемент, который можно перетащить мышью в дерево элементов формы.
- 1Откройте объект конфигурации и добавьте реквизит на закладке «Данные»
- 2Укажите имя и тип реквизита (строка, число, дата, ссылка)
- 3Откройте форму объекта и найдите реквизит в панели реквизитов
- 4Перетащите реквизит в дерево элементов формы в нужное место
- 5Проверьте свойство «Вид» элемента — должно быть «Поле ввода»
- 6Обновите конфигурацию базы данных (F7) и проверьте в режиме предприятия
Для реквизита формы порядок немного другой. В редакторе формы перейдите на закладку «Реквизиты» в правой части окна, добавьте новый реквизит формы с нужным типом, затем перетащите его в дерево элементов. Такой реквизит не требует обновления структуры базы данных — достаточно сохранить форму.
После перетаскивания платформа автоматически выбирает вид элемента в зависимости от типа данных: для строки и числа — поле ввода, для булево — поле флажка, для даты — поле ввода с календарём. Вид можно изменить вручную в свойствах элемента, но в большинстве случаев автоматический выбор корректен.
Как создать поле ввода программно
Программное создание нужно, когда набор полей заранее неизвестен: например, обработка формирует поля по настройкам пользователя или по данным из таблицы. Работа выполняется в модуле формы, обычно в обработчике «ПриСозданииНаСервере».
Сначала программно добавляется реквизит формы через метод ИзменитьРеквизиты, затем создаётся элемент формы и связывается с реквизитом. Пример кода для добавления строкового поля:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем реквизит формы
ДобавляемыеРеквизиты = Новый Массив;
ОписаниеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100));
НовыйРеквизит = Новый РеквизитФормы("НовоеПоле", ОписаниеТипа, "", "Новое поле");
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
// Добавляем элемент формы
НовыйЭлемент = Элементы.Добавить("ПолеНовоеПоле", Тип("ПолеФормы"));
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "НовоеПоле";
КонецПроцедуры
Обратите внимание на три обязательных свойства элемента: имя (уникальное в пределах формы), вид (ПолеВвода) и путь к данным (имя реквизита). Без пути к данным элемент отобразится, но ввод в него будет бесполезен. Если нужно разместить поле внутри конкретной группы, укажите родителя третьим параметром метода Добавить.
Настройка типа данных и ограничений ввода
Тип реквизита — главный инструмент контроля ввода. Строка ограничивается длиной через квалификаторы: «Строка(50)» не даст ввести больше 50 символов. Число настраивается разрядностью и точностью: «Число(15,2)» подходит для сумм, «Число(10,0)» — для целых количеств. Для количества имеет смысл установить признак «Неотрицательное» в квалификаторах числа.
Ссылочные типы (СправочникСсылка, ДокументСсылка) превращают поле ввода в поле выбора с выпадающим списком, быстрым поиском по подстроке и кнопкой открытия списка. Это правильный способ связать данные: пользователь физически не сможет ввести несуществующее значение, если включён режим проверки.
Дополнительные ограничения настраиваются в свойствах элемента формы. Кнопка выбора, кнопка выпадающего списка, режим пароля для ввода секретных данных, маска ввода для форматов вроде телефона, многострочный режим для длинных текстов. Для строкового поля комментария почти всегда стоит включить свойство «МногострочныйРежим».
Выбор типа данных для поля
Наименования, артикулы, коды. Ограничение длины защищает от переполнения при обмене данными
Комментарии, описания. Не индексируется, не используйте для полей поиска
Суммы, количества, коэффициенты. Задайте точность и признак неотрицательности
Связи с другими объектами. Даёт выбор из списка и контроль существования значения
Даты и время. Платформа сама покажет календарь и проверит корректность
Проверка введённых значений
Ограничения типа не закрывают все сценарии: например, строка может быть пустой, число — выходить за разумные пределы, ссылка — указывать на помеченный на удаление объект. Для таких проверок используются события элемента формы и обработчики проверки заполнения.
Событие «ПриИзменении» поля срабатывает сразу после ввода и подходит для реакции интерфейса: пересчёта суммы, заполнения связанных полей. Событие «ОбработкаВыбора» используется для ссылочных полей, когда нужно перехватить выбранное значение. Для проверки перед записью объекта служит обработчик «ОбработкаПроверкиЗаполнения» в модуле объекта — именно там корректно выводить сообщения об ошибках и отказывать в записи.
Пример простой проверки при записи документа:
&НаСервере
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните комментарий";
Сообщение.Поле = "Комментарий";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Свойство «Поле» сообщения привязывает ошибку к конкретному полю на форме — платформа подсветит его и позволит пользователю перейти к ошибке кликом. Это заметно удобнее, чем общее сообщение без привязки.
Как проверить результат
Поле видно в нужном месте, доступно для ввода
Поля нет — проверьте путь к данным и видимость элемента
Введённое значение сохраняется после записи объекта
Значение пропадает — поле привязано к реквизиту формы, а не объекта
Платформа не даёт ввести буквы в числовое поле
Вводится что угодно — проверьте тип реквизита
При записи пустого обязательного поля выводится сообщение
Записывается без проверки — не настроен обработчик или свойство «Проверка заполнения»
Типичные ошибки и ограничения
Самая частая ошибка — поле добавлено на форму, но значение не сохраняется. Причина почти всегда в том, что элемент привязан к реквизиту формы, а не к реквизиту объекта. Реквизит формы живёт только в памяти: для хранения в базе нужен реквизит справочника или документа и обновление конфигурации базы данных.
Вторая группа ошибок связана с типами. Неограниченная строка не участвует в индексах и замедляет поиск, если по ней фильтруют данные. Составной тип (например, «Строка или СправочникСсылка») усложняет обработку значений и часто является признаком непродуманной структуры. Изменение типа существующего реквизита с данными может привести к потере значений при обновлении — платформа предупредит, но в рабочей базе это риск.
Ещё одно ограничение касается управляемых форм: программное изменение реквизитов (ИзменитьРеквизиты) доступно только в серверном контексте. Вызов этого метода на клиенте вызовет ошибку — весь код создания полей размещайте в серверных процедурах или обработчике «ПриСозданииНаСервере».
Обычные и управляемые формы: в чём разница
В современных конфигурациях используются управляемые формы, и весь описанный выше материал относится именно к ним. Обычные формы встречаются в старых конфигурациях на платформе 8.2 и ранних версиях 8.3, а также в режиме обычного приложения.
В обычных формах элементы размещаются на форме с точным позиционированием в пикселях, а реквизиты формы создаются через диалог свойств формы. Программное добавление выполняется проще — элементы доступны напрямую через коллекцию ЭлементыФормы, без разделения на клиент и сервер. Однако принцип «сначала данные, потом элемент» сохраняется и там.
Если вы поддерживаете старую конфигурацию, учитывайте, что перенос доработок между обычными и управляемыми формами требует переработки кода: модели форм несовместимы. Для новых разработок всегда выбирайте управляемые формы.
Частые вопросы
Как сделать поле ввода обязательным для заполнения?
Установите у реквизита свойство «Проверка заполнения» в значение «Выдавать ошибку». Платформа автоматически проверит заполненность при записи объекта и подсветит пустое поле. Для реквизитов формы аналогичное свойство есть у элемента формы. Если нужна нестандартная логика (например, обязательность по условию), используйте обработчик «ОбработкаПроверкиЗаполнения».
Можно ли добавить поле ввода без изменения конфигурации?
Да, двумя способами. Первый — дополнительные реквизиты и сведения: механизм встроен в типовые конфигурации и позволяет администратору добавить поле к справочнику или документу прямо в режиме предприятия, без конфигуратора. Второй — расширение конфигурации, которое добавляет реквизит без снятия конфигурации с поддержки. Оба способа предпочтительнее прямой доработки типовой конфигурации.
Почему поле ввода недоступно для редактирования?
Проверьте три причины: свойство «ТолькоПросмотр» у элемента формы или у всей формы, свойство «Доступность» элемента и права пользователя на реквизит объекта. Также поле блокируется, если объект открыт в режиме просмотра или заблокирован другим пользователем. Для программно созданных элементов проверьте, что свойства установлены после добавления элемента.
Как сделать поле ввода с выбором из списка значений?
Заполните у элемента формы свойство «СписокВыбора» — в конфигураторе через палитру свойств или программно через Элемент.СписокВыбора.Добавить(). Включите свойство «РежимВыбораИзСписка», чтобы пользователь мог выбирать только из предложенных значений. Если значения должны храниться в базе и редактироваться пользователями, вместо списка выбора создайте справочник и используйте ссылочный тип.
Как ограничить длину вводимого текста?
Длина задаётся в типе реквизита: «Строка(50)» ограничит ввод 50 символами на уровне платформы. Для программно создаваемых реквизитов длина указывается в квалификаторах строки при формировании ОписаниеТипов. Дополнительно можно включить у элемента свойство «АвтоОтметкаНезаполненного» и настроить подсказку ввода, чтобы пользователь видел ограничение до начала ввода.
Что делать, если поле нужно только в некоторых случаях?
Используйте программное создание поля по условию или управляйте видимостью существующего элемента через свойство «Видимость» в зависимости от данных формы. Для сложных сценариев с несколькими вариантами наборов полей удобнее создать несколько групп-страниц и переключать их. Не создавайте и не удаляйте элементы при каждом изменении данных — это вызывает перерисовку формы и замедляет работу.
Что важно запомнить
Поле ввода в 1С всегда привязано к реквизиту: сначала создаются данные, затем элемент формы. Реквизит объекта хранится в базе, реквизит формы — только пока форма открыта. Тип данных и проверка заполнения контролируют корректность ввода, а изменения структуры данных в рабочей базе выполняются только после резервного копирования.