Форма

Типы

Синтаксис и применение Форма в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Форма

Форма
Форма является одним из основных интерфейсных средств 1С:Предприятия для обеспечения взаимодействия с пользователем.
Методическая информация

Практические примеры

Различить именованную обычную форму регистра и форму его списка

Толстоклиентский контракт принимает явное имя формы и настоящую ЭтаФорма владельца. Для каждого результата отдельно проверяется отказ создания.

Где и как запускать

Полный модуль своей ОБЫЧНОЙ формы обработки, толстый клиент с обычным приложением 8.5.1.1343; только свои два определения форм и пустой регистр. Здесь не запускался.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу, имя корневой конфигурации УчебныеОстатки85. Не добавляйте эти объекты в УТ/КА2/УНФ/БП. Режим управления блокировкой данных конфигурации — Управляемый.

  2. Документы → Добавить: УчебноеДвижение85. Номер: Строка длиной 40, автонумерация выключена. Модули объекта и менеджера оставьте пустыми; не добавляйте обработчики, подписки и обязательные пользовательские реквизиты.

  3. Регистры накопления → Добавить: УчебныеОстатки85. Вид регистра Остатки. Единственное измерение КодТовара: Строка 50, индексировать, проверка заполнения Показывать ошибку. Единственный ресурс Количество: Число 12,3, неотрицательное. Дополнительных реквизитов нет.

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

  5. Корневой режим совместимости Не использовать; платформа именно 8.5.1.1343. Единственный регистр — собственный УчебныеОстатки85 вида Остатки, единственный документ — УчебноеДвижение85. База новая пустая, не копия рабочей.

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

  7. Это операции настройки/обслуживания регистра, не проведение документа. Откат движений не обещает восстановить все настройки/внутренние таблицы итогов.

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

  9. При переключении булевых флагов исходное значение читается заранее и восстанавливается при успехе/ошибке. Если восстановление само завершилось ошибкой, код сообщает об этом явно; успешное восстановление не выдумывается.

  10. Примеры здесь не запускались в 1С. Ваши настройки, документы и итоги этим заполнением не изменялись.

  11. У своего УчебныеОстатки85 добавьте макет УчебнаяПамяткаИтогов типа Текстовый документ: первая строка OWN-TOTALS-85, вторая Пустой учебный регистр, не рабочая база. Обновите БД.

  12. В своём УчебныеОстатки85 добавьте ОБЫЧНУЮ произвольную форму УчебнаяПамяткаФорма с надписью Пустой собственный регистр; добавьте ОБЫЧНУЮ форму списка УчебныйПустойСписок. Модули пустые.

  13. У списка отключите кнопки добавления/удаления/записи и внешние обработчики. Ожидается пустой список, поскольку движений в собственной схеме нет.

  14. Толстый клиент, обычное приложение. В обычной форме своей обработки создайте кнопку с действием ПоказатьСвоиФормы, весь модуль вставьте в её модуль. Это НЕ серверный общий модуль; ЭтаФорма — реальный владелец.

  15. Закрывайте окна вручную без изменений. Две разные переменные/UUID не подменяют формы одна другой; чужой транзакции нет.

Процедура ПоказатьСвоиФормы(Кнопка)
    Если Метаданные.Документы.Количество() <> 1
        Или Метаданные.РегистрыНакопления.Количество() <> 1
        Или Метаданные.Документы.Найти("УчебноеДвижение85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственный учебный документ и регистр";
    КонецЕсли;
    Описание = Метаданные.РегистрыНакопления.Найти("УчебныеОстатки85");
    Если Описание = Неопределено Тогда
        ВызватьИсключение "Сначала создайте собственный учебный регистр";
    КонецЕсли;
    Если Описание.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
        Или Описание.Измерения.Количество() <> 1
        Или Описание.Ресурсы.Количество() <> 1
        Или Описание.Реквизиты.Количество() <> 0
        Или Описание.Измерения.Найти("КодТовара") = Неопределено
        Или Описание.Ресурсы.Найти("Количество") = Неопределено Тогда
        ВызватьИсключение "Нужен регистр остатков с КодТовара и Количество";
    КонецЕсли;
    Менеджер = РегистрыНакопления.УчебныеОстатки85;
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд без старого режима совместимости";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Не вызывайте административный опыт внутри чужой транзакции";
    КонецЕсли;
    Проверка = Новый Запрос;
    Проверка.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Строк
    |ИЗ РегистрНакопления.УчебныеОстатки85";
    Данные = Проверка.Выполнить().Выгрузить();
    Если Данные.Количество() <> 1 Тогда
        ВызватьИсключение "Не получена собственная контрольная строка";
    КонецЕсли;
    Если Данные[0].Строк <> 0 Тогда
        ВызватьИсключение "В собственном регистре уже есть движения: этот пустой административный опыт запрещён";
    КонецЕсли;

    КлючОкна = Новый УникальныйИдентификатор;
    СвояФорма = Менеджер.ПолучитьФорму("УчебнаяПамяткаФорма", ЭтаФорма, КлючОкна);
    Если СвояФорма = Неопределено Тогда
        Сообщить("Своя произвольная форма не создана");
        Возврат;
    КонецЕсли;
    СвояФорма.Открыть();
    КлючСписка = Новый УникальныйИдентификатор;
    СвойСписок = Менеджер.ПолучитьФормуСписка("УчебныйПустойСписок", ЭтаФорма, КлючСписка);
    Если СвойСписок = Неопределено Тогда
        Сообщить("Своя форма списка не создана, первое окно закрывайте вручную");
        Возврат;
    КонецЕсли;
    СвойСписок.Открыть();
    Сообщить("Открыты только два собственных окна пустого регистра, изменения данных кодом не выполнялись");
КонецПроцедуры

Разбор по шагам

  1. Подготовить две свои обычные формы и пустой регистр.

  2. Проверить точную платформу, схему, совместимость, ноль движений и отсутствие чужой транзакции.

  3. Получить именованную произвольную форму с новым ключом и реальным владельцем; при Неопределено не открывать.

  4. Получить именованную форму списка с другим новым ключом; её отказ обработать отдельно.

  5. Открыть лишь реально полученные формы; ничего не записывать.

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

  1. Открыта своя обычная памятка и свой пустой обычный список.

  2. Для каждого окна Неопределено обработано до Открыть.

  3. В коде нет setter итогов, записи движений, удаления и удержания транзакции.

Ожидаемый результат

Оба клиентских метода формы применены к явно подготовленным собственным определениям.

На что обратить внимание

  1. ПолучитьФорму требует имя формы; не переносите необязательность первого параметра ПолучитьФормуСписка.

  2. Это обычные формы толстого клиента, не управляемое ОткрытьФорму.

  3. Отказ второго окна не делает первое окно несуществующим — закрыть его нужно вручную.

  4. Здесь окна не открывались в 1С; HTML показывает только полный модуль.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

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

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

Где и как запускать

Полный модуль собственной ОБЫЧНОЙ формы обработки, толстый клиент с обычным приложением 8.5.1.1343. Только свой вручную подготовленный FORM-85 и именованная обычная форма; здесь не запускался.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Для этого блока УчебныеТовары не подчинён владельцу, не имеет предопределённых элементов и дополнительных обработчиков. Модули объекта/менеджера пусты, подписок и расширений нет. Иерархия групп и элементов допускает два уровня ниже корня.

  6. Точную платформу 8.5.1.1343 проверяет код. Ссылки и объекты создаются самим уроком; UUID не подменяется знакомым кодом из УТ/КА2/УНФ/БП.

  7. Свойства ссылки readonly, свойства полученного объекта могут быть записываемыми. Ссылка.Скопировать возвращает новый объект, но сам метод не записывает его в базу.

  8. Непустой UUID/ссылка не подтверждает наличие записи. Для плановой ссылки проверяется ПолучитьОбъект=Неопределено, а данные отсутствующей записи не читаются.

  9. ВерсияДанных — непрозрачная строка платформы, не число, дата, версия конфигурации или номер обновления. Урок не декодирует и не назначает её вручную.

  10. Здесь в 1С примеры не запускались. Проверены исходники и установленная справка; записи/формы в ваших базах этим заполнением не создавались.

  11. Этот отдельный урок выполняется в толстом клиенте с обычным приложением. В своём УчебныеТовары создайте ОБЫЧНУЮ форму элемента УчебныйРедакторСсылки с обычными полями кода/наименования. Её модуль пустой; не выбирайте управляемую форму.

  12. В своём справочнике вручную создайте один элемент, не группу: Код=FORM-85, Наименование=Учебная книга формы. Ничего из рабочих справочников не используйте. Этот урок его только находит и открывает, не создаёт/удаляет.

  13. У отдельной собственной обработки создайте обычную форму с командой ПоказатьУчебнуюФорму и вставьте весь модуль этого урока в модуль этой формы. Это не серверный общий модуль; ЭтаФорма — реальный владелец окна.

  14. В режиме обычного приложения запускайте именно толстый клиент. В тонкий/веб-клиент и управляемые формы этот контракт не переносится.

  15. Новый UUID окна обеспечивает новый ключ уникальности. Закрывайте открытое окно вручную без записи изменений; не сочетайте открытие интерактивной формы с удержанием транзакции предыдущих упражнений.

Процедура ПоказатьУчебнуюФорму(Команда)
    
    Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
        ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
    КонецЕсли;
    СсылкаТовара = Справочники.УчебныеТовары.НайтиПоКоду("FORM-85");
    Если СсылкаТовара.Пустая() Тогда
        ВызватьИсключение "Сначала вручную создайте свой FORM-85 по подготовке обычной формы";
    КонецЕсли;
    Если СсылкаТовара.Наименование <> "Учебная книга формы"
        Или СсылкаТовара.ЭтоГруппа
        Или СсылкаТовара.ПометкаУдаления Тогда
        ВызватьИсключение "Найденный объект не совпал с собственным подготовленным товаром";
    КонецЕсли;
    КлючОкна = Новый УникальныйИдентификатор;
    ПолученнаяФорма = СсылкаТовара.ПолучитьФорму("УчебныйРедакторСсылки", ЭтаФорма, КлючОкна);
    Если ПолученнаяФорма = Неопределено Тогда
        Сообщить("Форма не создана: отказ не является успешным открытием");
        Возврат;
    КонецЕсли;
    ПолученнаяФорма.Открыть();
    Сообщить("Открыта обычная форма только своего подготовленного товара. Код сам ничего не записал.");
КонецПроцедуры

Разбор по шагам

  1. Проверить точную платформу и собственный учебный справочник в модуле обычной формы.

  2. Найти только заранее вручную подготовленный FORM-85, затем проверить имя, отсутствие группы и пометки удаления.

  3. Получить именно именованную обычную форму с реальным владельцем ЭтаФорма и новым ключом уникальности.

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

  5. Открыть только полученную форму; код не записывает и не удаляет справочник и не удерживает транзакцию.

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

  1. Открыта обычная УчебныйРедакторСсылки собственного элемента FORM-85.

  2. Отсутствующий/неподходящий товар останавливает открытие; Неопределено не объявляется готовой формой.

  3. Не вызываются Записать/Удалить и не открывается форма случайной первой записи.

Ожидаемый результат

Контракт обычной формы ссылки использован на подготовленном собственном товаре с правильным клиентским контекстом.

На что обратить внимание

  1. Это отдельный толстоклиентский контракт обычной формы, не управляемый ОткрытьФорму.

  2. ПолучитьФорму сам по себе ещё не Открыть; сначала проверяется результат.

  3. Именованная форма и реальный товар подготовлены заранее; код не выдумывает отсутствующие метаданные.

  4. Интерактивное окно не включено в отменяемую серверную транзакцию; возможная ручная запись оператором здесь не выполняется и не проверялась.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.