Расширение тестируемого поля формы для поля ввода.ВыполнитьВыборИзСпискаВыбора

Методы · ExecuteChoiceFromChoiceList

Выбирает значение из открытого списка выбора по его представлению в списке выбора.

Синтаксис

ВыполнитьВыборИзСпискаВыбора(<Значение>)
Полное описание, параметры и ограничения

Расширение тестируемого поля формы для поля ввода.ВыполнитьВыборИзСпискаВыбора (Tested form field extension for an input field.ExecuteChoiceFromChoiceList)

Расширение тестируемого поля формы для поля ввода (Tested form field extension for an input field)

ВыполнитьВыборИзСпискаВыбора (ExecuteChoiceFromChoiceList)

Доступен, начиная с версии 8.3.1.

Синтаксис:
ВыполнитьВыборИзСпискаВыбора(<Значение>)
Параметры:

<Значение> (обязательный)
Тип: Строка, Число.
Представление выбираемого значения или номер значения (индекс строки, нумерация с 0).
Описание:

Выбирает значение из открытого списка выбора по его представлению в списке выбора.

Доступность:

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

Использование в версии:

Доступен, начиная с версии 8.3.1.

Методическая информация

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

Нажать Выбрать, выбрать вторую строку списка и очистить свой ввод

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

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

Полный модуль своей формы МенеджерВвода85.Пульт: имя своей конфигурации возвращает отдельная серверная функция без контекста, UI выполняется в /TESTMANAGER, тонкий клиент 8.5.1.1343. Реальный собственный /TESTCLIENT этой же базы УчебныйВыборВвода85 на вручную проверенном 127.0.0.1:15383; ни один модуль не запускался.

Подготовка

  1. Используйте только свою новую конфигурацию УчебныйВыборВвода85, язык Русский, управление Такси, платформа 8.5.1.1343. Создайте свой справочник УчебныеКниги85 по урокам выбора: иерархия групп и элементов, код Строка 10 без автонумерации, реквизиты МеткаСтенда и Секция типа Строка 30.

  2. Только в своём стенде вручную подготовьте группу BOOKGROUP и элемент BOOK/Книга, МеткаСтенда = owned-input85, Секция = Книги. Тест не создаёт и не записывает даже собственную книгу: использует заранее подготовленную настоящую ссылку.

  3. Создайте общую управляемую форму УчебныйВводТест85. Вставьте полный дополнительный модуль ниже и назначьте ПриСозданииНаСервере. Это испытуемая форма, основной модуль урока в неё не вставляйте.

  4. Реквизиты испытуемой формы: МеткаСеанса, НазваниеКниги85, УчебныйВыпадающий85, УчебныйСписок85, ИтогВыбора85 и Карточка85 — Строка 100; УчебноеКоличество85, Открытий85, Созданий85 — Число 6.0; УчебнаяКнига85 — СправочникСсылка.УчебныеКниги85.

  5. На испытуемой форме создайте отдельные поля ввода УчебныйВыпадающий85, УчебныйСписок85, УчебноеКоличество85 и УчебнаяКнига85 с одноимёнными ПутьКДанным. Это не колонки таблицы. Покажите МеткаСеанса, ИтогВыбора85, Открытий85 и Созданий85 как отдельные поля только для просмотра с одноимёнными путями.

  6. Для числовых полей задайте Формат ЧГ=0;ЧДЦ=0, чтобы контрольные представления были 3, 4, 0, 1 без группировки и дробной части. Для редактируемых полей доступность/видимость включены, ТолькоПросмотр выключено.

  7. Добавьте обычную группу КарточкаКниги85 и внутри поле Карточка85 только для просмотра. События Открытие/Создание показывают эту реальную собственную область и её данные; они не открывают стандартную форму записи каталога.

  8. Создайте команду и кнопку СброситьСвойВвод85 с одноимённым действием, ИзменяетСохраняемыеДанные = Ложь. Другие события поля назначаются кодом fixture, вручную их не привязывайте.

  9. Создайте собственную общую команду без параметра ОткрытьУчебныйВвод85 с дополнительным модулем запуска ниже; покажите её в единственной учебной подсистеме. Она открывает только подготовленную ОбщаяФорма.УчебныйВводТест85.

  10. Создайте обработку МенеджерВвода85 с управляемой формой Пульт, реквизитами Согласие (Булево), МеткаСеанса (Строка 100), Итог (Строка неограниченной длины). Команда и кнопка ВыполнитьСвойТест85, действие ВыполнитьСвойТест85. Основной код урока — полный модуль этого менеджера; назначьте ПриОткрытии(Отказ).

  11. Покажите флажок согласия, редактируемую фактическую метку и многострочный Итог только для просмотра. Для каждого урока используйте отдельную копию менеджера; одноимённые процедуры не вставляйте дважды.

  12. Самостоятельно обновите только свой стенд. Если позже решите выполнить ручной UI-тест, запустите свои тонкие клиенты с /TESTCLIENT -TPort15383 и /TESTMANAGER. Свободный локальный порт 15383 должен принадлежать только этому собственному тестовому клиенту. Код клиентов не запускает и порт не меняет.

  13. В своём /TESTCLIENT откройте испытуемую форму, скопируйте её настоящий UUID в менеджер, подтвердите согласие. Метку не создавайте в менеджере вместо источника. Не запускайте опыт в production или против чужого тестового приложения.

  14. Эти модули здесь не выполнялись: runtimeVerifiedScenarios=0, никаких 1С, GUI, соединений и кликов не запускалось. Авторские проверки статические, фактический выбор и действия интерфейса ещё требуют отдельного разрешённого ручного теста.

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Согласие = Ложь;
    МеткаСеанса = "";
    Итог = "Подготовьте свой /TESTCLIENT и скопируйте реальный UUID формы";
КонецПроцедуры

&НаКлиенте
Функция СвоеПоле85(Форма, Имя)
    Поле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , Имя, 10);
    Если Поле.Имя <> Имя Или Поле.Вид <> ВидПоляФормы.ПолеВвода Тогда
        ВызватьИсключение "Нужно именно своё отдельное поле ввода";
    КонецЕсли;
    Если Не Поле.ТекущаяВидимость() Или Не Поле.ТекущаяДоступность() Или Поле.ТекущееТолькоПросмотр() Тогда
        ВызватьИсключение "Своё поле должно быть видно, доступно и редактируемо";
    КонецЕсли;
    Возврат Поле;
КонецФункции

&НаКлиенте
Функция СвоеПредставление85(Форма, Имя)
    Поле = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , Имя, 10);
    Возврат Поле.ПолучитьПредставлениеДанных();
КонецФункции

&НаКлиенте
Процедура ВыполнитьСвойТест85(Команда)
    Если Не Согласие Тогда
        ВызватьИсключение "Нужны свой стенд и явное согласие на UI-опыт только в своей форме";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(МеткаСеанса);
    Если Строка(UUIDМетки) <> МеткаСеанса Тогда
        ВызватьИсключение "Нужно точное фактическое значение UUID своей формы";
    КонецЕсли;
    Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15383);
    Форма = Неопределено;
    Поле = Неопределено;
    ИсходныйЛимит = Неопределено;
    ОшибкаТеста = "";
    ОшибкиЗавершения = "";
    Итог = "Результат ещё не получен";
    Попытка
        Приложение.УстановитьСоединение();
        ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
        Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
        Заголовок = "Учебный ввод85 " + МеткаСеанса;
        Формы = Приложение.НайтиОбъекты(Тип("ТестируемаяФорма"), Заголовок, , 10);
        Если ТипЗнч(Формы) <> Тип("ФиксированныйМассив") Или Формы.Количество() <> 1 Тогда
            ВызватьИсключение "Нужна ровно одна настоящая собственная форма этого сеанса";
        КонецЕсли;
        Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), Заголовок, , 10);
        Если СвоеПредставление85(Форма, "МеткаСеанса") <> МеткаСеанса Тогда
            ВызватьИсключение "Реальная метка источника не совпала";
        КонецЕсли;
        Если СвоеПредставление85(Форма, "УчебныйВыпадающий85") <> "Книга"
            Или СвоеПредставление85(Форма, "ИтогВыбора85") <> "Книга"
            Или СвоеПредставление85(Форма, "УчебноеКоличество85") <> "3"
            Или СвоеПредставление85(Форма, "Открытий85") <> "0"
            Или СвоеПредставление85(Форма, "Созданий85") <> "0" Тогда
            ВызватьИсключение "Сначала вручную сбросьте собственный опыт; чужие изменения не затираются";
        КонецЕсли;
        Поле = СвоеПоле85(Форма, "УчебныйСписок85");
        Поле.Выбрать();
        Поле.ВыполнитьВыборИзСпискаВыбора(1);
        Если СвоеПредставление85(Форма, "ИтогВыбора85") <> "Ручка" Тогда
            ВызватьИсключение "Выбор второй реальной строки не изменил связанный собственный реквизит";
        КонецЕсли;
        Поле.Очистить();
        Если СвоеПредставление85(Форма, "ИтогВыбора85") <> "" Тогда
            ВызватьИсключение "Нажатие кнопки очистки не подтвердилось в собственных данных";
        КонецЕсли;
        Итог = "Кнопка выбора и вторая строка проверены; своё строковое значение очищено";
    Исключение
        ОшибкаТеста = ОписаниеОшибки();
    КонецПопытки;
    Если Поле <> Неопределено Тогда
        Попытка
            Если Поле.ВыпадающийСписокОткрыт() Тогда
                Поле.ЗакрытьВыпадающийСписок();
            КонецЕсли;
        Исключение
            ОшибкиЗавершения = "Закрытие своего списка не подтверждено: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Если Форма <> Неопределено Тогда
        Попытка
            Сброс = Форма.ПолучитьОбъект(Тип("ТестируемаяКнопкаФормы"), , "СброситьСвойВвод85", 10);
            Сброс.Нажать();
            Если СвоеПредставление85(Форма, "УчебныйВыпадающий85") <> "Книга"
                Или СвоеПредставление85(Форма, "ИтогВыбора85") <> "Книга"
                Или СвоеПредставление85(Форма, "УчебноеКоличество85") <> "3"
                Или СвоеПредставление85(Форма, "Открытий85") <> "0"
                Или СвоеПредставление85(Форма, "Созданий85") <> "0" Тогда
                ВызватьИсключение "Свои исходные данные не восстановлены";
            КонецЕсли;
        Исключение
            ОшибкиЗавершения = ОшибкиЗавершения + " Не выполнен собственный сброс: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
        Попытка
            Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
        Исключение
            ОшибкиЗавершения = ОшибкиЗавершения + " Не восстановлен лимит: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    Попытка
        Приложение.РазорватьСоединение();
    Исключение
        ОшибкиЗавершения = ОшибкиЗавершения + " Разрыв соединения не подтверждён: " + ОписаниеОшибки();
    КонецПопытки;
    Если ОшибкаТеста <> "" Или ОшибкиЗавершения <> "" Тогда
        Итог = "Опыт не завершён успешно: " + ОшибкаТеста + " " + ОшибкиЗавершения;
        ВызватьИсключение Итог;
    КонецЕсли;
    Итог = Итог + "; свои данные восстановлены, лимит восстановлен, соединение разорвано; клиент остаётся открытым";
КонецПроцедуры


УчебныйВводТест85

УчебныйВыборВвода85 → Общие формы → УчебныйВводТест85 → Модуль

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
    КонецЕсли;
    УчебнаяКнига85 = Справочники.УчебныеКниги85.НайтиПоКоду("BOOK");
    Если Не ЗначениеЗаполнено(УчебнаяКнига85) Тогда
        ВызватьИсключение "Нужен свой заранее созданный BOOK";
    КонецЕсли;
    Если УчебнаяКнига85.ЭтоГруппа Или УчебнаяКнига85.МеткаСтенда <> "owned-input85" Тогда
        ВызватьИсключение "BOOK должен быть своим учебным элементом";
    КонецЕсли;
    НазваниеКниги85 = УчебнаяКнига85.Наименование;
    ЭтаФорма.АвтоЗаголовок = Ложь;
    МеткаСеанса = Строка(Новый УникальныйИдентификатор);
    ЭтаФорма.Заголовок = "Учебный ввод85 " + МеткаСеанса;
    УчебныйВыпадающий85 = "Книга";
    УчебныйСписок85 = "Книга";
    УчебноеКоличество85 = 3;
    ИтогВыбора85 = "Книга";
    Карточка85 = "Закрыта";
    Открытий85 = 0;
    Созданий85 = 0;
    Элементы.КарточкаКниги85.Видимость = Ложь;
    Поле = Элементы.УчебныйВыпадающий85;
    Поле.РежимВыбораИзСписка = Истина;
    Поле.СписокВыбора.Добавить("Книга", "Книга");
    Поле.СписокВыбора.Добавить("Ручка", "Ручка");
    Поле.КнопкаВыпадающегоСписка = Истина;
    Поле.КнопкаОчистки = Истина;
    Поле.АвтоОтображениеКнопкиОчистки = Ложь;
    Поле = Элементы.УчебныйСписок85;
    Поле.РежимВыбораИзСписка = Истина;
    Поле.СписокВыбора.Добавить("Книга", "Книга");
    Поле.СписокВыбора.Добавить("Ручка", "Ручка");
    Поле.КнопкаВыбора = Истина;
    Поле.КнопкаСпискаВыбора = Истина;
    Поле.КнопкаОчистки = Истина;
    Поле.АвтоОтображениеКнопкиОчистки = Ложь;
    Поле.УстановитьДействие("НачалоВыбора", "НачатьСвойВыбор85");
    Поле.УстановитьДействие("ПриИзменении", "СвойВыборИзменен85");
    Поле = Элементы.УчебноеКоличество85;
    Поле.КнопкаРегулирования = Истина;
    Поле.Формат = "ЧГ=0;ЧДЦ=0";
    Поле.УстановитьДействие("Регулирование", "ИзменитьСвоеКоличество85");
    Поле = Элементы.УчебнаяКнига85;
    Поле.КнопкаОткрытия = Истина;
    Поле.АвтоОтображениеКнопкиОткрытия = Ложь;
    Поле.КнопкаСоздания = Истина;
    Поле.КнопкаВыпадающегоСписка = Истина;
    Поле.УстановитьДействие("Открытие", "ПоказатьСвоюКарточку85");
    Поле.УстановитьДействие("Создание", "НачатьСвойЧерновик85");
КонецПроцедуры

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

&НаКлиенте
Процедура СвойВыборИзменен85(Элемент)
    ИтогВыбора85 = УчебныйСписок85;
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСвоеКоличество85(Элемент, Направление, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если Направление <> 1 И Направление <> -1 Тогда
        ВызватьИсключение "Неожиданное направление собственного регулирования";
    КонецЕсли;
    НовоеКоличество = УчебноеКоличество85 + Направление;
    Если НовоеКоличество >= 0 И НовоеКоличество <= 5 Тогда
        УчебноеКоличество85 = НовоеКоличество;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСвоюКарточку85(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Открытий85 = Открытий85 + 1;
    Карточка85 = "Просмотр: " + НазваниеКниги85;
    Элементы.КарточкаКниги85.Видимость = Истина;
КонецПроцедуры

&НаКлиенте
Процедура НачатьСвойЧерновик85(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Созданий85 = Созданий85 + 1;
    Карточка85 = "Новый учебный черновик без записи";
    Элементы.КарточкаКниги85.Видимость = Истина;
КонецПроцедуры

&НаКлиенте
Процедура СброситьСвойВвод85(Команда)
    УчебныйВыпадающий85 = "Книга";
    УчебныйСписок85 = "Книга";
    УчебноеКоличество85 = 3;
    ИтогВыбора85 = "Книга";
    Карточка85 = "Закрыта";
    Открытий85 = 0;
    Созданий85 = 0;
    Элементы.КарточкаКниги85.Видимость = Ложь;
КонецПроцедуры
ОткрытьУчебныйВвод85

УчебныйВыборВвода85 → Общие команды → ОткрытьУчебныйВвод85 → Модуль

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

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебныйВводТест85");
КонецПроцедуры

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

  1. Подготовленное поле связано со своим строковым реквизитом. У него реально включены кнопка выбора, список выбора и очистка.

  2. Выбрать инициирует настоящее НачалоВыбора. Callback содержит Элемент, ДанныеВыбора, ВыборДобавлением и СтандартнаяОбработка; заполняет свой список без серверного вызова и отключает стандартную обработку.

  3. ВыполнитьВыборИзСпискаВыбора(1) относится к открывшемуся списку выбора. Это не метод обычного ПолеФормы и не подмена его значением вручную.

  4. ПриИзменении копирует фактическое значение связанного реквизита в отдельный ИтогВыбора85. Менеджер проверяет эту настоящую строку, не свой локальный ожидаемый объект.

  5. Очистить эмулирует реальную кнопку очистки; после неё итог должен стать пустым. Если обработчик или кнопка недоступны, опыт не объявляется успешным.

  6. Собственный сброс возвращает Книга, исходный лимит и разрыв соединения проверяются независимо.

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

  1. После второго элемента реальный ИтогВыбора85 = Ручка. После Очистить — пустая строка. После завершения снова Книга.

  2. Если список не появился или очистка не сработала, тест даёт исключение; исправляйте собственный fixture, не снижайте проверки результата.

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

Разделены кнопка выбора, действие выбора из списка и фактическая очистка данных своего поля.

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

  1. ВыполнитьВыборИзСпискаВыбора — не то же, что ВыполнитьВыборИзВыпадающегоСписка; применяется к своему открытому списку выбора.

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

  3. НачалоВыбора не допускает контекстные серверные вызовы; собственный callback содержит только клиентский СписокЗначений.

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

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

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

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

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