Форма

Типы · Form

Используется для доступа к свойствам, методам и событиям формы в целом, а также к коллекции ее элементов управления. Доступ к свойствам, методам формы из ее собственного модуля осуществляется непосредственно, используя их имена (без ссылки на какой-либо объект).

Доступность

Толстый клиент.

Примеры платформы

КлючУникальности = Новый УникальныйИдентификатор;
Форма = Отчеты.КнигаПродаж.ПолучитьФорму(, , КлючУникальности);
Форма.Открыть();
Полное описание, параметры и ограничения

Используется для доступа к свойствам, методам и событиям формы в целом, а также к коллекции ее элементов управления. Доступ к свойствам, методам формы из ее собственного модуля осуществляется непосредственно, используя их имена (без ссылки на какой-либо объект).

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

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

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

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

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

Подготовка

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

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

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

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

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. В отдельной пустой конфигурации Учебная85 создайте Планы обмена → УчебныйОбмен: длина кода 9, тип Строка, наименование длиной 100. Распределённая информационная база выключена; состав плана пустой.

  7. Добавьте реквизит АдресУчебногоУзла: Строка длиной 100, Проверка заполнения = Показывать ошибку. Модуль объекта и подписки должны быть пустыми; не добавляйте отправку сообщений или внешние действия.

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

  9. Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи. УчебныйОбмен не является существующим рабочим обменом КА2 или УТ.

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

  11. Для этого отдельного GUI-урока используйте толстый клиент в режиме Обычное приложение. Серверный общий модуль из других уроков здесь не подходит.

  12. Конфигуратор → Планы обмена → УчебныйОбмен → Формы: добавьте именно обычную форму объекта УчебнаяФормаУзла с основным реквизитом объекта. Добавьте поле Наименование, связанное с основным реквизитом. Кнопки Записать, ОК и Удалить в этой учебной форме не добавляйте; модуль формы пустой.

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

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

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

  1. Создаём только свой новый периферийный узел и задаём учебное имя.

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

  3. Результат проверяется на Неопределено до обращения к форме.

  4. ТолькоПросмотр и отсутствие команд записи ограничивают редактирование именно этой учебной формы, не права всей ИБ.

  5. Открыть показывает окно. Новый статус и пустая ссылка доказывают, что пример не записал узел.

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

  1. Четыре сообщения Истина.

  2. В обычном толстом клиенте видно собственное имя и заголовок, поле недоступно для редактирования. Эта визуальная проверка выполняется отдельно в учебной базе.

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

Получена и открыта своя обычная форма нового узла без сохранения.

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

  1. В управляемой форме используется другой API; этот фрагмент нельзя туда вставлять без переработки.

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

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

Получить текущие данные строки обычного табличного поля

ТекущаяСтрока для таблицы значений — объект строки, не номер 0. Находим колонку количества и проверяем текущую книгу.

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

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

Подготовка

  1. Это обычная форма, не управляемая: используйте толстый клиент с обычными формами в отдельной учебной базе. Создайте новую внешнюю обработку, обычную форму и её реквизит Товары типа ТаблицаЗначений. Рабочие документы и справочники не нужны.

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

  3. Каждый урок — отдельный полный модуль этой учебной формы. Он заново создаёт в памяти Книгу (3) и Ручку (1), а СоздатьКолонки удаляет прежние колонки только своего табличного поля. Не вставляйте код в рабочую форму с настроенными колонками.

  4. Откройте форму, затем нажмите учебную кнопку. Изменения данных и оформления относятся только к реквизиту внешней обработки в памяти. Здесь нет Записать, обращения к рабочим данным или проверки интерфейса реальной УТ 10.3.

Процедура ПриОткрытии()
    Товары = Новый ТаблицаЗначений;
    Товары.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Товары.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    Товары.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
    Товары.Колонки.Добавить("Выбран", Новый ОписаниеТипов("Булево"));
    Книга = Товары.Добавить();
    Книга.Код = "A-01";
    Книга.Наименование = "Книга";
    Книга.Количество = 3;
    Книга.Выбран = Ложь;
    Ручка = Товары.Добавить();
    Ручка.Код = "B-02";
    Ручка.Наименование = "Ручка";
    Ручка.Количество = 1;
    Ручка.Выбран = Ложь;
    Таблица = ЭтаФорма.ЭлементыФормы.ТаблицаТоваров;
    Таблица.СоздатьКолонки();
    Таблица.АвтоВводНовойСтроки = Ложь;
    Если Товары.Количество() <> 2 Тогда
        ВызватьИсключение "Ожидались два собственных учебных товара";
    КонецЕсли;
    Таблица.ТекущаяСтрока = Товары[0];
    Колонка = Таблица.Колонки.Найти("Количество");
    Если Колонка = Неопределено Тогда
        ВызватьИсключение "В своей таблице не найдена колонка количества";
    КонецЕсли;
    Таблица.ТекущаяКолонка = Колонка;
    Таблица.РежимВыбора = Ложь;
    Таблица.Подсказка = "Собственная учебная книга и ручка";
КонецПроцедуры

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

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

  1. СоздатьКолонки формирует колонки по четырём полям собственной таблицы значений.

  2. Колонка Количество ищется и проверяется перед назначением ТекущаяКолонка.

  3. ТекущаяСтрока назначается объектом Товары[0]. Это не переносимая модель для динамического списка: там тип идентификатора может быть другим.

  4. ДанныеСтроки и ТекущиеДанные дают данные текущей строки. До доступа к полям оба случая отсутствия обработаны.

  5. ПроверитьСтроку проверяет соответствие отбору табличного поля, не существование SQL-записи. Отбора в собственной форме нет.

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

  1. Сразу после открытия выбрана Книга: выводится количество 3 и три сравнения Истина.

  2. Выберите Ручку: выводится количество 1. Выделение строки диагностируется, не изменяется присваиванием.

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

Проверен доступ к собственной текущей строке и колонке.

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

  1. РежимВыделенияСтроки только для чтения.

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

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

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

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

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

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