Дополнительные свойства для отображения строки поиска.
Полное описание, параметры и ограничения
Расширение дополнения элемента формы для отображения строки поиска (Form item addition extension for search string)
Расширение дополнения элемента формы для отображения строки поиска (Form item addition extension for search string)
Доступен, начиная с версии 8.3.5.
Свойства:
РастягиватьПоГоризонтали (HorizontalStretch)
ЦветРамки (BorderColor)
ЦветТекста (TextColor)
ЦветФона (BackColor)
Ширина (Width)
Шрифт (Font)
Описание:
Дополнительные свойства для отображения строки поиска.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Строка поиска своего списка: два профиля размеров и оформления с полным восстановлением
Создаём форму собственного динамического списка Книга/Ручка/Чай/Вода. Настраиваем автоматическую строку поиска, переключаем широкий и компактный профили отдельными кнопками, проверяем шесть свойств и восстанавливаем исходное оформление. Отдельно объясняем, почему цвета и шрифт не применяются в интерфейсе «Версия 8.5».
Где и как запускать
Полный модуль своей управляемой формы внешней обработки УчебноеОформлениеПоиска85; клиентские кнопки вызывают серверные процедуры формы. В1С не запускался.
Подготовка
НОВАЯ пустая отдельная учебная база платформы точно8.5.1.1343, конфигурация УчебноеОформлениеПоиска85, совместимость Не использовать. Нет бизнес-объектов, расширений, подписок и фоновых заданий. Не открывайте этот опыт в рабочей базе. Общие модули не нужны, модули конфигурации вручную пустые.
Создайте свою внешнюю обработку УчебноеОформлениеПоиска85 и пустую управляемую основную форму. Один реквизит Список типа ДинамическийСписок. Один элемент ТаблицаФормы с именем ТаблицаТоваров и ПутьКДанным=Список. Колонки и кнопки вручную не добавляйте: полный модуль создаёт пять колонок и три собственные команды.
В событии формы ПриСозданииНаСервере выберите одноимённую процедуру из полного модуля. Вставьте весь модуль формы с директивами, не в тело другого обработчика. Новый клиентский сеанс и открытие своей обработки — только будущая ручная проверка; здесь форма не открывалась и BSL не выполнялся.
Вместо справочника используется буквальный запрос из четырёх строк: Книга3×250, Ручка1×30, Чай2×150, Вода0×70. ОсновнаяТаблица пустая, ДинамическоеСчитываниеДанных=Ложь, ключ УчебныйНомер имеет уникальные значения1–4. Старые пользовательские настройки автоматически не сохраняются.
Для сравнения оформления учитывайте режим интерфейса. В «Версия 8.5» свойства ЦветРамки, ЦветТекста, ЦветФона и Шрифт этой строки НЕ ПРИМЕНЯЮТСЯ. Для отдельного будущего визуального опыта можно выбрать поддерживаемый клиентом прежний интерфейс; платформа при этом остаётся8.5.1.1343. Здесь не менялся интерфейс и не доказывалась его поддержка конкретным клиентом.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
Список.ПроизвольныйЗапрос = Истина;
Список.ОсновнаяТаблица = "";
Список.ДинамическоеСчитываниеДанных = Ложь;
Список.АвтоЗаполнениеДоступныхПолей = Истина;
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
КлючевыеПоля = Новый Массив;
КлючевыеПоля.Добавить("УчебныйНомер");
Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
Список.ТекстЗапроса = "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
Таблица = Элементы.ТаблицаТоваров;
Таблица.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Верх;
ДобавитьСвоюКомандуПоиска("ШирокийПоиск85", "Широкая строка", "ШирокийПоиск85");
ДобавитьСвоюКомандуПоиска("КомпактныйПоиск85", "Компактная строка", "КомпактныйПоиск85");
ДобавитьСвоюКомандуПоиска("ЦиклПоиска85", "Проверить восстановление", "ЦиклПоиска85");
Для Каждого ИмяПоля Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяПоля, Тип("ПолеФормы"), Элементы.ТаблицаТоваров);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Список." + ИмяПоля;
Колонка.Заголовок = ИмяПоля;
КонецЦикла;
ПроверитьСвоюОсновуПоиска();
Исходное = ПолучитьСвоеОформлениеПоиска();
ПроверитьСвоеОформлениеПоиска(Исходное);
КонецПроцедуры
&НаКлиенте
Процедура ШирокийПоиск85(Команда)
ЗадатьСвойПрофильНаСервере(Истина);
Сообщить("Свойства широкой строки сверены; это не доказательство применения цветов в интерфейсе8.5");
КонецПроцедуры
&НаКлиенте
Процедура КомпактныйПоиск85(Команда)
ЗадатьСвойПрофильНаСервере(Ложь);
Сообщить("Свойства компактной строки сверены; ширина задана в символах, не пикселях");
КонецПроцедуры
&НаКлиенте
Процедура ЦиклПоиска85(Команда)
ПроверитьСвойЦиклНаСервере();
Сообщить("Оба профиля проверены; восстановлены все шесть свойств именно этой формы");
КонецПроцедуры
&НаСервере
Процедура ДобавитьСвоюКомандуПоиска(Имя, Заголовок, Обработчик)
Команда = Команды.Добавить(Имя);
Команда.Действие = Обработчик;
Команда.Заголовок = Заголовок;
Кнопка = Элементы.Добавить("Кнопка" + Имя, Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = Имя;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоюОсновуПоиска()
ПроверитьСвойПустойСтенд();
Если ТипЗнч(Список) <> Тип("ДинамическийСписок") Или Не Список.ПроизвольныйЗапрос
Или Список.ОсновнаяТаблица <> "" Или Список.ДинамическоеСчитываниеДанных
Или Не Список.АвтоЗаполнениеДоступныхПолей Или Список.АвтоматическоеСохранениеПользовательскихНастроек
Или Список.ВидКлюча <> ВидКлючаДинамическогоСписка.ЗначениеПоля
Или Список.ТекстЗапроса <> "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70" Тогда
ВызватьИсключение "Изменился собственный буквальный источник или настройки чтения";
КонецЕсли;
Ключи = Список.ПоляКлюча;
Если ТипЗнч(Ключи) <> Тип("ФиксированныйМассив") Или Ключи.Количество() <> 1
Или Ключи[0] <> "УчебныйНомер" Тогда
ВызватьИсключение "Нужен единственный собственный ключ УчебныйНомер";
КонецЕсли;
Таблица = Элементы.Найти("ТаблицаТоваров");
Если ТипЗнч(Таблица) <> Тип("ТаблицаФормы") Или Таблица.ПутьКДанным <> "Список"
Или Не Таблица.ТолькоПросмотр Или Таблица.ПоложениеСтрокиПоиска <> ПоложениеСтрокиПоиска.Верх Тогда
ВызватьИсключение "Нужна собственная таблица списка с поиском сверху";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Найти("Товары" + Имя);
Если ТипЗнч(Колонка) <> Тип("ПолеФормы") Или Колонка.Вид <> ВидПоляФормы.ПолеВвода
Или Колонка.ПутьКДанным <> "Список." + Имя Или Колонка.Заголовок <> Имя Тогда
ВызватьИсключение "Не совпала одна из пяти собственных колонок списка";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьСвойПоиск()
ПроверитьСвоюОсновуПоиска();
Поиск = Элементы.ТаблицаТоваров.ОтображениеСтрокиПоиска;
Если ТипЗнч(Поиск) <> Тип("ДополнениеЭлементаФормы")
Или Поиск.Вид <> ВидДополненияЭлементаФормы.ОтображениеСтрокиПоиска Тогда
ВызватьИсключение "Нужно автоматическое дополнение именно строки поиска, не состояния просмотра";
КонецЕсли;
Возврат Поиск;
КонецФункции
&НаСервере
Функция ПолучитьСвоеОформлениеПоиска()
Поиск = ПолучитьСвойПоиск();
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
Поиск.Ширина, Поиск.РастягиватьПоГоризонтали, Поиск.ЦветРамки, Поиск.ЦветТекста, Поиск.ЦветФона, Поиск.Шрифт);
КонецФункции
&НаСервереБезКонтекста
Функция СоздатьСвойПрофильПоиска(Широкий)
Если ТипЗнч(Широкий) <> Тип("Булево") Тогда
ВызватьИсключение "Профиль выбирается собственным логическим флагом";
КонецЕсли;
Если Широкий Тогда
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
0, Истина, Новый Цвет(70, 110, 170), Новый Цвет(15, 36, 64), Новый Цвет(243, 248, 255),
Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 100));
Иначе
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
24, Ложь, Новый Цвет(170, 125, 45), Новый Цвет(64, 42, 14), Новый Цвет(255, 247, 224),
Новый Шрифт("Arial", 11, Истина, Ложь, Ложь, Ложь, 100));
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция СвоеОформлениеВXML(Значение)
Если ТипЗнч(Значение) <> Тип("Цвет") И ТипЗнч(Значение) <> Тип("Шрифт") Тогда
ВызватьИсключение "Сериализуются только собственные значения Цвет или Шрифт, не данные базы";
КонецЕсли;
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
СериализаторXDTO.ЗаписатьXML(Запись, Значение);
Возврат Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ПрименитьСвоеОформлениеПоиска(Профиль)
Поиск = ПолучитьСвойПоиск();
Поиск.Ширина = Профиль.Ширина;
Поиск.РастягиватьПоГоризонтали = Профиль.РастягиватьПоГоризонтали;
Поиск.ЦветРамки = Профиль.ЦветРамки;
Поиск.ЦветТекста = Профиль.ЦветТекста;
Поиск.ЦветФона = Профиль.ЦветФона;
Поиск.Шрифт = Профиль.Шрифт;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоеОформлениеПоиска(Ожидание)
Факт = ПолучитьСвоеОформлениеПоиска();
Если Факт.Количество() <> 6 Или ТипЗнч(Факт.Ширина) <> Тип("Число")
Или (ТипЗнч(Факт.РастягиватьПоГоризонтали) <> Тип("Булево") И Факт.РастягиватьПоГоризонтали <> Неопределено)
Или ТипЗнч(Факт.ЦветРамки) <> Тип("Цвет") Или ТипЗнч(Факт.ЦветТекста) <> Тип("Цвет")
Или ТипЗнч(Факт.ЦветФона) <> Тип("Цвет") Или ТипЗнч(Факт.Шрифт) <> Тип("Шрифт") Тогда
ВызватьИсключение "Не совпали все шесть типов оформления собственной строки поиска";
КонецЕсли;
Если Факт.Ширина <> Ожидание.Ширина
Или ТипЗнч(Факт.РастягиватьПоГоризонтали) <> ТипЗнч(Ожидание.РастягиватьПоГоризонтали)
Или Факт.РастягиватьПоГоризонтали <> Ожидание.РастягиватьПоГоризонтали
Или СвоеОформлениеВXML(Факт.ЦветРамки) <> СвоеОформлениеВXML(Ожидание.ЦветРамки)
Или СвоеОформлениеВXML(Факт.ЦветТекста) <> СвоеОформлениеВXML(Ожидание.ЦветТекста)
Или СвоеОформлениеВXML(Факт.ЦветФона) <> СвоеОформлениеВXML(Ожидание.ЦветФона)
Или СвоеОформлениеВXML(Факт.Шрифт) <> СвоеОформлениеВXML(Ожидание.Шрифт) Тогда
ВызватьИсключение "Не совпало полное описание собственных настроек поиска";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗадатьСвойПрофильНаСервере(Широкий)
Профиль = СоздатьСвойПрофильПоиска(Широкий);
ПрименитьСвоеОформлениеПоиска(Профиль);
ПроверитьСвоеОформлениеПоиска(Профиль);
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойЦиклНаСервере()
Исходное = ПолучитьСвоеОформлениеПоиска();
ПроверитьСвоеОформлениеПоиска(Исходное);
Попытка
Широкий = СоздатьСвойПрофильПоиска(Истина);
ПрименитьСвоеОформлениеПоиска(Широкий);
ПроверитьСвоеОформлениеПоиска(Широкий);
Компактный = СоздатьСвойПрофильПоиска(Ложь);
ПрименитьСвоеОформлениеПоиска(Компактный);
ПроверитьСвоеОформлениеПоиска(Компактный);
Исключение
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
ВызватьИсключение;
КонецПопытки;
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Сначала защитить пустой стенд отсутствием рабочих объектов/расширений. Создать собственный буквальный список, явно задать ключ, пять колонок, режим только просмотра и положение строки поиска Верх. Все последующие действия заново проверяют неизменность этого источника и каждого пути колонки.
Получить readonly ТаблицаТоваров.ОтображениеСтрокиПоиска. Это ДополнениеЭлементаФормы с видом ОтображениеСтрокиПоиска. Его расширение предоставляет шесть свойств; отдельного конструктора расширения нет. Не менять Вид: справка предупреждает, что при смене вида все свойства расширения сбрасываются.
Кнопка «Широкая строка» вызывает серверную процедуру с Истина: Ширина=0 означает автоматически, РастягиватьПоГоризонтали=Истина. Три абсолютных RGB-цвета и шрифт Arial12 заданы полностью. Изменения свойств на клиенте требуют сервера, поэтому присваивания выполняются на сервере формы.
Кнопка «Компактная строка» передаёт Ложь: Ширина=24 символа, растягивание выключено, другие три RGB-цвета и Arial11 полужирный. Это две разные настройки, а не обещание точной ширины в пикселях или обязательной смены цветов в8.5.
После каждого присваивания проверить типы всех шести свойств. Размер и растягивание сравниваются вместе с типом; Неопределено у растягивания сохраняется как Неопределено, не приравнивается к Ложь. Цвета и шрифт сравниваются по полному XML/XDTO-описанию, потому что исходное значение может быть ссылкой на стиль, а не абсолютным RGB.
Кнопка «Проверить восстановление» снимает оформление, существующее непосредственно перед её нажатием. В одном серверном вызове проверяет широкий и компактный профили, затем возвращает все шесть исходных свойств и сверяет их. Если проверка профиля вызывает исключение, восстановление выполняется и в ветке ошибки; ошибка не скрывается.
Промежуточные профили внутри проверки цикла не предъявляются как увиденные на экране: клиент получает результат одного завершённого серверного вызова. Для осмысленного визуального сравнения используйте две отдельные кнопки профилей и меняйте размер окна. Сохранение оформления не является доказательством успешного поиска или оформления в8.5.
Как проверить результат
Будущий ручной контроль данных: до поиска видны четыре собственные строки1–4; в строке поиска введите Книга, ожидайте подходящую собственную строку, очистите поиск и сверяйте исходный список. Реальный результат поиска зависит от клиента/настроек и здесь не измерялся.
Будущий контроль свойств: широкая строка0/Истина, компактная24/Ложь, каждое полное описание цвета/шрифта соответствует своему эталону. Проверьте восстановление после каждого профиля: должны вернуться именно настройки перед проверкой, а не предполагаемые значения по умолчанию.
Будущий отрицательный контроль: в процедуре ПроверитьСвойЦиклНаСервере сразу после ПрименитьСвоеОформлениеПоиска(Компактный) и перед проверкой компактного профиля вставьте две строки: Поиск = ПолучитьСвойПоиск(); и Поиск.Ширина = 23;. Эталон24 в СоздатьСвойПрофильПоиска и общую процедуру присваивания/восстановления не меняйте. Проверка должна сообщить о несовпадении полного описания; исходные свойства восстанавливаются в ветке ошибки. Верните полный исходный код и откройте новый собственный сеанс.
runtimeVerifiedScenarios=0. Ни один профиль, запрос, поиск, XDTO-вызов или форма в1С здесь не запускались. В интерфейсе «Версия 8.5» отсутствие изменения цветов/шрифта не является ошибкой поиска; установленная справка прямо запрещает обещать их визуальное применение. Если при ручном запуске обнаружится нормализация значения свойства, строгая сверка выявит её — не объявляйте визуальный успех по одному зелёному сообщению.
Ожидаемый результат
Полный самостоятельный модуль разделяет данные списка, автоматическое дополнение поиска, настройки размеров, сохранённое описание оформления и реальное применение интерфейсом.
На что обратить внимание
Не создавайте Новый РасширениеОтображенияСтрокиПоиска и не присваивайте новый объект readonly ОтображениеСтрокиПоиска. Свойства расширения доступны у действительного дополнения нужного вида, полученного от собственной таблицы.
Ширина задаётся в символах, не пикселях;0 означает автоматический размер. РастягиватьПоГоризонтали имеет тип Булево или Неопределено. Они не изменяют количество товаров и не являются фильтром запроса.
ЦветРамки, ЦветТекста, ЦветФона и Шрифт НЕ ПРИМЕНЯЮТСЯ в интерфейсе «Версия 8.5». Успешное присваивание/чтение описания не доказывает, что виджет использовал его. Шрифтовой файл Arial, его замена клиентом и активная тема также влияют на вид; здесь они не проверены.
XML-писатель работает только со строкой памяти и только с конкретными значениями Цвет/Шрифт. Не передавайте объекты метаданных, записи или весь список: сериализация объектов данных может выгружать записи. Писатель закрывается в нормальной и ошибочной ветках.
Снимок живёт только в одном серверном вызове формы. Нет глобальной переменной, общего хранилища настроек или записи в базу. Нельзя ожидать сохранения серверной переменной между отдельными клиентскими вызовами.
Это пример автоматической строки поиска таблицы, не НастройкиОтображенияДинамическогоСписка. Последнее содержит readonly РежимОтображенияСтрокиПоиска и здесь не конструируется и не привязывается к уроку без настоящего способа получения. Функциональность полномасштабного полнотекстового поиска и права доступа не выдумываются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разрешить и временно закрыть свой поиск, проверить структуру и вернуть его свойства
Собственное автоматическое дополнение строки поиска получает два полных режима доступности, выравнивания и подсказок. Настоящие readonly-меню, дочерние элементы, родитель и расширенная подсказка диагностируются без подмены; все измененные значения восстанавливаются вместе с типами.
Где и как запускать
Полный модуль своей управляемой формы внешней обработки УчебныеСвойстваПоиска85. Изменения на сервере формы, отдельные клиентские кнопки; в1С не запускался.
Подготовка
НОВАЯ пустая отдельная учебная база платформы точно8.5.1.1343, конфигурация УчебныеСвойстваПоиска85, совместимость Не использовать. Нет бизнес-объектов, расширений, подписок и фоновых заданий. Не открывайте этот опыт в рабочей базе. Общие модули не нужны, модули конфигурации вручную пустые.
Создайте свою внешнюю обработку УчебныеСвойстваПоиска85 и пустую управляемую основную форму. Один реквизит Список типа ДинамическийСписок. Один элемент ТаблицаФормы с именем ТаблицаТоваров и ПутьКДанным=Список. Колонки и кнопки вручную не добавляйте: полный модуль создаёт пять колонок и три собственные команды.
В событии формы ПриСозданииНаСервере выберите одноимённую процедуру из полного модуля. Вставьте весь модуль формы с директивами, не в тело другого обработчика. Новый клиентский сеанс и открытие своей обработки — только будущая ручная проверка; здесь форма не открывалась и BSL не выполнялся.
Вместо справочника используется буквальный запрос из четырёх строк: Книга3×250, Ручка1×30, Чай2×150, Вода0×70. ОсновнаяТаблица пустая, ДинамическоеСчитываниеДанных=Ложь, ключ УчебныйНомер имеет уникальные значения1–4. Старые пользовательские настройки автоматически не сохраняются.
Для сравнения оформления учитывайте режим интерфейса. В «Версия 8.5» свойства ЦветРамки, ЦветТекста, ЦветФона и Шрифт этой строки НЕ ПРИМЕНЯЮТСЯ. Для отдельного будущего визуального опыта можно выбрать поддерживаемый клиентом прежний интерфейс; платформа при этом остаётся8.5.1.1343. Здесь не менялся интерфейс и не доказывалась его поддержка конкретным клиентом.
Все прежние кнопки оформления строки поиска сохранены; код дополнительно создает три собственные команды Разрешить свой поиск, Запретить свой поиск, Структура и восстановление. Они расположены отдельно от самого дополнения, поэтому выключение его Доступность не выключает команду обратного включения.
Будущая ручная подготовка: сохранить пустую собственную конфигурацию и обновить ее базу F7; внешнюю обработку сохранить отдельно. Проверку настоящих форм выполнять только после проверки всех пустых модулей собственного стенда.
Опыт предназначен для тонкого/толстого клиента своей управляемой формы. Свойство ВажностьПриОтображении здесь намеренно не используется: установленная справка допускает его только на мобильном клиенте и сервере. Это не обещание проверки адаптивного мобильного интерфейса.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
Список.ПроизвольныйЗапрос = Истина;
Список.ОсновнаяТаблица = "";
Список.ДинамическоеСчитываниеДанных = Ложь;
Список.АвтоЗаполнениеДоступныхПолей = Истина;
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
КлючевыеПоля = Новый Массив;
КлючевыеПоля.Добавить("УчебныйНомер");
Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
Список.ТекстЗапроса = "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
Таблица = Элементы.ТаблицаТоваров;
Таблица.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Верх;
ДобавитьСвоюКомандуПоиска("ШирокийПоиск85", "Широкая строка", "ШирокийПоиск85");
ДобавитьСвоюКомандуПоиска("КомпактныйПоиск85", "Компактная строка", "КомпактныйПоиск85");
ДобавитьСвоюКомандуПоиска("ЦиклПоиска85", "Проверить восстановление", "ЦиклПоиска85");
ДобавитьСвоюКомандуПоиска("АктивныйПоиск85", "Разрешить свой поиск", "АктивныйПоиск85");
ДобавитьСвоюКомандуПоиска("ЗакрытыйПоиск85", "Запретить свой поиск", "ЗакрытыйПоиск85");
ДобавитьСвоюКомандуПоиска("АудитДополнения85", "Структура и восстановление", "АудитДополнения85");
Для Каждого ИмяПоля Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяПоля, Тип("ПолеФормы"), Элементы.ТаблицаТоваров);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Список." + ИмяПоля;
Колонка.Заголовок = ИмяПоля;
КонецЦикла;
ПроверитьСвоюОсновуПоиска();
Исходное = ПолучитьСвоеОформлениеПоиска();
ПроверитьСвоеОформлениеПоиска(Исходное);
КонецПроцедуры
&НаКлиенте
Процедура ШирокийПоиск85(Команда)
ЗадатьСвойПрофильНаСервере(Истина);
Сообщить("Свойства широкой строки сверены; это не доказательство применения цветов в интерфейсе8.5");
КонецПроцедуры
&НаКлиенте
Процедура КомпактныйПоиск85(Команда)
ЗадатьСвойПрофильНаСервере(Ложь);
Сообщить("Свойства компактной строки сверены; ширина задана в символах, не пикселях");
КонецПроцедуры
&НаКлиенте
Процедура ЦиклПоиска85(Команда)
ПроверитьСвойЦиклНаСервере();
Сообщить("Оба профиля проверены; восстановлены все шесть свойств именно этой формы");
КонецПроцедуры
&НаСервере
Процедура ДобавитьСвоюКомандуПоиска(Имя, Заголовок, Обработчик)
Команда = Команды.Добавить(Имя);
Команда.Действие = Обработчик;
Команда.Заголовок = Заголовок;
Кнопка = Элементы.Добавить("Кнопка" + Имя, Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = Имя;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоюОсновуПоиска()
ПроверитьСвойПустойСтенд();
Если ТипЗнч(Список) <> Тип("ДинамическийСписок") Или Не Список.ПроизвольныйЗапрос
Или Список.ОсновнаяТаблица <> "" Или Список.ДинамическоеСчитываниеДанных
Или Не Список.АвтоЗаполнениеДоступныхПолей Или Список.АвтоматическоеСохранениеПользовательскихНастроек
Или Список.ВидКлюча <> ВидКлючаДинамическогоСписка.ЗначениеПоля
Или Список.ТекстЗапроса <> "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70" Тогда
ВызватьИсключение "Изменился собственный буквальный источник или настройки чтения";
КонецЕсли;
Ключи = Список.ПоляКлюча;
Если ТипЗнч(Ключи) <> Тип("ФиксированныйМассив") Или Ключи.Количество() <> 1
Или Ключи[0] <> "УчебныйНомер" Тогда
ВызватьИсключение "Нужен единственный собственный ключ УчебныйНомер";
КонецЕсли;
Таблица = Элементы.Найти("ТаблицаТоваров");
Если ТипЗнч(Таблица) <> Тип("ТаблицаФормы") Или Таблица.ПутьКДанным <> "Список"
Или Не Таблица.ТолькоПросмотр Или Таблица.ПоложениеСтрокиПоиска <> ПоложениеСтрокиПоиска.Верх Тогда
ВызватьИсключение "Нужна собственная таблица списка с поиском сверху";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Найти("Товары" + Имя);
Если ТипЗнч(Колонка) <> Тип("ПолеФормы") Или Колонка.Вид <> ВидПоляФормы.ПолеВвода
Или Колонка.ПутьКДанным <> "Список." + Имя Или Колонка.Заголовок <> Имя Тогда
ВызватьИсключение "Не совпала одна из пяти собственных колонок списка";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьСвойПоиск()
ПроверитьСвоюОсновуПоиска();
Поиск = Элементы.ТаблицаТоваров.ОтображениеСтрокиПоиска;
Если ТипЗнч(Поиск) <> Тип("ДополнениеЭлементаФормы")
Или Поиск.Вид <> ВидДополненияЭлементаФормы.ОтображениеСтрокиПоиска Тогда
ВызватьИсключение "Нужно автоматическое дополнение именно строки поиска, не состояния просмотра";
КонецЕсли;
Возврат Поиск;
КонецФункции
&НаСервере
Функция ПолучитьСвоеОформлениеПоиска()
Поиск = ПолучитьСвойПоиск();
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
Поиск.Ширина, Поиск.РастягиватьПоГоризонтали, Поиск.ЦветРамки, Поиск.ЦветТекста, Поиск.ЦветФона, Поиск.Шрифт);
КонецФункции
&НаСервереБезКонтекста
Функция СоздатьСвойПрофильПоиска(Широкий)
Если ТипЗнч(Широкий) <> Тип("Булево") Тогда
ВызватьИсключение "Профиль выбирается собственным логическим флагом";
КонецЕсли;
Если Широкий Тогда
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
0, Истина, Новый Цвет(70, 110, 170), Новый Цвет(15, 36, 64), Новый Цвет(243, 248, 255),
Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 100));
Иначе
Возврат Новый Структура("Ширина,РастягиватьПоГоризонтали,ЦветРамки,ЦветТекста,ЦветФона,Шрифт",
24, Ложь, Новый Цвет(170, 125, 45), Новый Цвет(64, 42, 14), Новый Цвет(255, 247, 224),
Новый Шрифт("Arial", 11, Истина, Ложь, Ложь, Ложь, 100));
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция СвоеОформлениеВXML(Значение)
Если ТипЗнч(Значение) <> Тип("Цвет") И ТипЗнч(Значение) <> Тип("Шрифт") Тогда
ВызватьИсключение "Сериализуются только собственные значения Цвет или Шрифт, не данные базы";
КонецЕсли;
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
СериализаторXDTO.ЗаписатьXML(Запись, Значение);
Возврат Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ПрименитьСвоеОформлениеПоиска(Профиль)
Поиск = ПолучитьСвойПоиск();
Поиск.Ширина = Профиль.Ширина;
Поиск.РастягиватьПоГоризонтали = Профиль.РастягиватьПоГоризонтали;
Поиск.ЦветРамки = Профиль.ЦветРамки;
Поиск.ЦветТекста = Профиль.ЦветТекста;
Поиск.ЦветФона = Профиль.ЦветФона;
Поиск.Шрифт = Профиль.Шрифт;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоеОформлениеПоиска(Ожидание)
Факт = ПолучитьСвоеОформлениеПоиска();
Если Факт.Количество() <> 6 Или ТипЗнч(Факт.Ширина) <> Тип("Число")
Или (ТипЗнч(Факт.РастягиватьПоГоризонтали) <> Тип("Булево") И Факт.РастягиватьПоГоризонтали <> Неопределено)
Или ТипЗнч(Факт.ЦветРамки) <> Тип("Цвет") Или ТипЗнч(Факт.ЦветТекста) <> Тип("Цвет")
Или ТипЗнч(Факт.ЦветФона) <> Тип("Цвет") Или ТипЗнч(Факт.Шрифт) <> Тип("Шрифт") Тогда
ВызватьИсключение "Не совпали все шесть типов оформления собственной строки поиска";
КонецЕсли;
Если Факт.Ширина <> Ожидание.Ширина
Или ТипЗнч(Факт.РастягиватьПоГоризонтали) <> ТипЗнч(Ожидание.РастягиватьПоГоризонтали)
Или Факт.РастягиватьПоГоризонтали <> Ожидание.РастягиватьПоГоризонтали
Или СвоеОформлениеВXML(Факт.ЦветРамки) <> СвоеОформлениеВXML(Ожидание.ЦветРамки)
Или СвоеОформлениеВXML(Факт.ЦветТекста) <> СвоеОформлениеВXML(Ожидание.ЦветТекста)
Или СвоеОформлениеВXML(Факт.ЦветФона) <> СвоеОформлениеВXML(Ожидание.ЦветФона)
Или СвоеОформлениеВXML(Факт.Шрифт) <> СвоеОформлениеВXML(Ожидание.Шрифт) Тогда
ВызватьИсключение "Не совпало полное описание собственных настроек поиска";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗадатьСвойПрофильНаСервере(Широкий)
Профиль = СоздатьСвойПрофильПоиска(Широкий);
ПрименитьСвоеОформлениеПоиска(Профиль);
ПроверитьСвоеОформлениеПоиска(Профиль);
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойЦиклНаСервере()
Исходное = ПолучитьСвоеОформлениеПоиска();
ПроверитьСвоеОформлениеПоиска(Исходное);
Попытка
Широкий = СоздатьСвойПрофильПоиска(Истина);
ПрименитьСвоеОформлениеПоиска(Широкий);
ПроверитьСвоеОформлениеПоиска(Широкий);
Компактный = СоздатьСвойПрофильПоиска(Ложь);
ПрименитьСвоеОформлениеПоиска(Компактный);
ПроверитьСвоеОформлениеПоиска(Компактный);
Исключение
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
ВызватьИсключение;
КонецПопытки;
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АктивныйПоиск85(Команда)
ПрименитьСвойРежимДополненияНаСервере(Истина);
Сообщить("Свой поиск разрешен. Для визуального опыта введите Книга и затем очистите только свой поиск");
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытыйПоиск85(Команда)
ПрименитьСвойРежимДополненияНаСервере(Ложь);
Сообщить("Доступность своего дополнения выключена; отдельная кнопка АктивныйПоиск85 остается доступной");
КонецПроцедуры
&НаКлиенте
Процедура АудитДополнения85(Команда)
Отчет = ПроверитьСвойЦиклДополненияНаСервере();
Сообщить(Отчет);
КонецПроцедуры
&НаСервере
Функция СоздатьСвойРежимДополнения(Активный)
Если ТипЗнч(Активный) <> Тип("Булево") Тогда
ВызватьИсключение "Нужен собственный флаг активности, не произвольный объект";
КонецЕсли;
Если Активный Тогда
Возврат Новый Структура("Вертикальное,Горизонтальное,Доступность,Заголовок,РежимПодсказки,Подсказка,РасширенныйТекст",
ВертикальноеПоложениеЭлемента.Верх, ГоризонтальноеПоложениеЭлемента.Лево, Истина,
"Поиск в четырех своих строках", ОтображениеПодсказки.Всплывающая,
"Введите Книга. Очистка поиска не удаляет собственные строки",
"Собственный буквальный список: Книга, Ручка, Чай, Вода. Это не поиск в рабочих данных");
КонецЕсли;
Возврат Новый Структура("Вертикальное,Горизонтальное,Доступность,Заголовок,РежимПодсказки,Подсказка,РасширенныйТекст",
ВертикальноеПоложениеЭлемента.Низ, ГоризонтальноеПоложениеЭлемента.Право, Ложь,
"Свой поиск временно недоступен", ОтображениеПодсказки.Нет, "", "");
КонецФункции
&НаСервере
Функция СнятьСвойРежимДополнения()
Поиск = ПолучитьСвойПоиск();
Расширенная = Поиск.РасширеннаяПодсказка;
Если ТипЗнч(Расширенная) <> Тип("ДекорацияФормы") Тогда
ВызватьИсключение "Нужно настоящее описание расширенной подсказки своего дополнения";
КонецЕсли;
Возврат Новый Структура("Вертикальное,Горизонтальное,Доступность,Заголовок,РежимПодсказки,Подсказка,РасширенныйТекст",
Поиск.ВертикальноеПоложениеВГруппе, Поиск.ГоризонтальноеПоложениеВГруппе, Поиск.Доступность,
Поиск.Заголовок, Поиск.ОтображениеПодсказки, Поиск.Подсказка, Расширенная.Заголовок);
КонецФункции
&НаСервере
Процедура УстановитьСвойРежимДополнения(Режим)
Поиск = ПолучитьСвойПоиск();
Расширенная = Поиск.РасширеннаяПодсказка;
Если ТипЗнч(Расширенная) <> Тип("ДекорацияФормы") Тогда
ВызватьИсключение "У собственного дополнения нет нужной декорации подсказки";
КонецЕсли;
Поиск.ВертикальноеПоложениеВГруппе = Режим.Вертикальное;
Поиск.ГоризонтальноеПоложениеВГруппе = Режим.Горизонтальное;
Поиск.Доступность = Режим.Доступность;
Поиск.Заголовок = Режим.Заголовок;
Поиск.ОтображениеПодсказки = Режим.РежимПодсказки;
Поиск.Подсказка = Режим.Подсказка;
Расширенная.Заголовок = Режим.РасширенныйТекст;
КонецПроцедуры
&НаСервере
Процедура СверитьСвойРежимДополнения(Эталон)
Фактический = СнятьСвойРежимДополнения();
Для Каждого Пара Из Эталон Цикл
Значение = Неопределено;
Если Не Фактический.Свойство(Пара.Ключ, Значение) Тогда
ВызватьИсключение "Исчезло поле собственного режима " + Пара.Ключ;
КонецЕсли;
Если ТипЗнч(Значение) <> ТипЗнч(Пара.Значение) Или Значение <> Пара.Значение Тогда
ВызватьИсключение "Не совпало свойство собственного режима " + Пара.Ключ;
КонецЕсли;
КонецЦикла;
Если Фактический.Количество() <> Эталон.Количество() Тогда
ВызватьИсключение "Не совпал состав собственного снимка";
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьСвоюСтруктуруДополнения()
Поиск = ПолучитьСвойПоиск();
Меню = Поиск.КонтекстноеМеню;
Дочерние = Поиск.ПодчиненныеЭлементы;
Родитель = Поиск.Родитель;
Расширенная = Поиск.РасширеннаяПодсказка;
Если ТипЗнч(Меню) <> Тип("ГруппаФормы") Или ТипЗнч(Дочерние) <> Тип("ЭлементыФормы")
Или ТипЗнч(Расширенная) <> Тип("ДекорацияФормы") Тогда
ВызватьИсключение "Не совпали настоящие readonly-объекты своего дополнения";
КонецЕсли;
Если ТипЗнч(Родитель) <> Тип("ГруппаФормы") И ТипЗнч(Родитель) <> Тип("ФормаКлиентскогоПриложения") Тогда
ВызватьИсключение "Получен недокументированный родитель собственного дополнения";
КонецЕсли;
Отчет = "Структура собственного дополнения " + Поиск.Имя + Символы.ПС;
Отчет = Отчет + "Свой вид: " + Строка(Поиск.Вид) + Символы.ПС;
Отчет = Отчет + "Группа собственного контекстного меню: " + Меню.Имя + Символы.ПС;
Отчет = Отчет + "Дочерних элементов: " + Строка(Дочерние.Количество()) + Символы.ПС;
Отчет = Отчет + "Тип собственного родителя: " + Строка(ТипЗнч(Родитель)) + Символы.ПС;
Если ТипЗнч(Родитель) = Тип("ГруппаФормы") Тогда
Отчет = Отчет + "Имя родительской группы: " + Родитель.Имя + Символы.ПС;
КонецЕсли;
Отчет = Отчет + "Текст собственной расширенной подсказки: " + Расширенная.Заголовок;
Возврат Отчет;
КонецФункции
&НаСервере
Процедура ПрименитьСвойРежимДополненияНаСервере(Активный)
Исходный = СнятьСвойРежимДополнения();
Режим = СоздатьСвойРежимДополнения(Активный);
Попытка
УстановитьСвойРежимДополнения(Режим);
СверитьСвойРежимДополнения(Режим);
Исключение
УстановитьСвойРежимДополнения(Исходный);
СверитьСвойРежимДополнения(Исходный);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ПроверитьСвойЦиклДополненияНаСервере()
Исходный = СнятьСвойРежимДополнения();
Активный = СоздатьСвойРежимДополнения(Истина);
Закрытый = СоздатьСвойРежимДополнения(Ложь);
Попытка
УстановитьСвойРежимДополнения(Активный);
СверитьСвойРежимДополнения(Активный);
УстановитьСвойРежимДополнения(Закрытый);
СверитьСвойРежимДополнения(Закрытый);
Отчет = ПроверитьСвоюСтруктуруДополнения();
Исключение
УстановитьСвойРежимДополнения(Исходный);
СверитьСвойРежимДополнения(Исходный);
ВызватьИсключение;
КонецПопытки;
УстановитьСвойРежимДополнения(Исходный);
СверитьСвойРежимДополнения(Исходный);
Возврат Отчет + Символы.ПС + "Оба собственных режима проверены; семь исходных значений восстановлены";
КонецФункцииРазбор по шагам
Сначала защитить пустой стенд отсутствием рабочих объектов/расширений. Создать собственный буквальный список, явно задать ключ, пять колонок, режим только просмотра и положение строки поиска Верх. Все последующие действия заново проверяют неизменность этого источника и каждого пути колонки.
Получить readonly ТаблицаТоваров.ОтображениеСтрокиПоиска. Это ДополнениеЭлементаФормы с видом ОтображениеСтрокиПоиска. Его расширение предоставляет шесть свойств; отдельного конструктора расширения нет. Не менять Вид: справка предупреждает, что при смене вида все свойства расширения сбрасываются.
Кнопка «Широкая строка» вызывает серверную процедуру с Истина: Ширина=0 означает автоматически, РастягиватьПоГоризонтали=Истина. Три абсолютных RGB-цвета и шрифт Arial12 заданы полностью. Изменения свойств на клиенте требуют сервера, поэтому присваивания выполняются на сервере формы.
Кнопка «Компактная строка» передаёт Ложь: Ширина=24 символа, растягивание выключено, другие три RGB-цвета и Arial11 полужирный. Это две разные настройки, а не обещание точной ширины в пикселях или обязательной смены цветов в8.5.
После каждого присваивания проверить типы всех шести свойств. Размер и растягивание сравниваются вместе с типом; Неопределено у растягивания сохраняется как Неопределено, не приравнивается к Ложь. Цвета и шрифт сравниваются по полному XML/XDTO-описанию, потому что исходное значение может быть ссылкой на стиль, а не абсолютным RGB.
Кнопка «Проверить восстановление» снимает оформление, существующее непосредственно перед её нажатием. В одном серверном вызове проверяет широкий и компактный профили, затем возвращает все шесть исходных свойств и сверяет их. Если проверка профиля вызывает исключение, восстановление выполняется и в ветке ошибки; ошибка не скрывается.
Промежуточные профили внутри проверки цикла не предъявляются как увиденные на экране: клиент получает результат одного завершённого серверного вызова. Для осмысленного визуального сравнения используйте две отдельные кнопки профилей и меняйте размер окна. Сохранение оформления не является доказательством успешного поиска или оформления в8.5.
Полный исходный стенд остается тем же буквальным списком из четырех строк. ПолучитьСвойПоиск заново проверяет его запрос, ключ, пять колонок и собственную таблицу; Вид дополнения не меняется, потому что смена вида сбрасывает свойства расширения.
Разрешить свой поиск задает вертикальное положение Верх, горизонтальное Лево, Доступность=Истина, собственные заголовок/краткую/расширенную подсказки и Всплывающая. Запретить свой поиск задает Низ/Право/Ложь и Нет для показа подсказки. Все изменения выполняются на сервере формы, согласно контрактам свойств.
Снимок из семи значений берется непосредственно перед изменением. Это шесть свойств дополнения плюс Заголовок его настоящей декорации РасширеннаяПодсказка. Нельзя присвоить новый объект readonly РасширеннаяПодсказка; допустимое изменение текста выполняется у возвращенной собственной декорации.
КонтекстноеМеню читается как ГруппаФормы; ПодчиненныеЭлементы как ЭлементыФормы; Родитель как группа или ФормаКлиентскогоПриложения. После проверки реальных типов отчет выводит имена и число дочерних элементов. Код не добавляет команды в системное контекстное меню и не меняет родительский объект.
Структура и восстановление в одном серверном вызове проверяет оба режима, снимает диагностический отчет и возвращает именно семь исходных значений. В ветке исключения сначала восстанавливает и сверяет их, затем повторно вызывает исключение. Отчет структуры содержит текст закрытого режима на момент его снятия; к моменту возврата исходный режим уже восстановлен.
Сверка сравнивает и ТипЗнч, и значение каждого поля снимка. Успешное чтение Заголовок/выравнивания/подсказки не доказывает, что встроенное дополнение конкретного клиента визуально использовало каждый параметр. Для наблюдения нужны отдельные нажатия двух кнопок, не только мгновенный цикл.
Как проверить результат
Будущий ручной контроль данных: до поиска видны четыре собственные строки1–4; в строке поиска введите Книга, ожидайте подходящую собственную строку, очистите поиск и сверяйте исходный список. Реальный результат поиска зависит от клиента/настроек и здесь не измерялся.
Будущий контроль свойств: широкая строка0/Истина, компактная24/Ложь, каждое полное описание цвета/шрифта соответствует своему эталону. Проверьте восстановление после каждого профиля: должны вернуться именно настройки перед проверкой, а не предполагаемые значения по умолчанию.
Будущий отрицательный контроль: в процедуре ПроверитьСвойЦиклНаСервере сразу после ПрименитьСвоеОформлениеПоиска(Компактный) и перед проверкой компактного профиля вставьте две строки: Поиск = ПолучитьСвойПоиск(); и Поиск.Ширина = 23;. Эталон24 в СоздатьСвойПрофильПоиска и общую процедуру присваивания/восстановления не меняйте. Проверка должна сообщить о несовпадении полного описания; исходные свойства восстанавливаются в ветке ошибки. Верните полный исходный код и откройте новый собственный сеанс.
runtimeVerifiedScenarios=0. Ни один профиль, запрос, поиск, XDTO-вызов или форма в1С здесь не запускались. В интерфейсе «Версия 8.5» отсутствие изменения цветов/шрифта не является ошибкой поиска; установленная справка прямо запрещает обещать их визуальное применение. Если при ручном запуске обнаружится нормализация значения свойства, строгая сверка выявит её — не объявляйте визуальный успех по одному зелёному сообщению.
Будущий ручной контроль: нажать Разрешить свой поиск, ввести Книга, очистить поиск и сверить все четыре исходные строки. Затем Запретить свой поиск: исследовать блокировку именно дополнения и режим подсказки выбранного клиента; отдельная кнопка Разрешить остается вне блокируемого элемента.
Будущий контроль восстановления: после каждого собственного режима нажать Структура и восстановление. Обе сверки проходят, семь значений после цикла равны исходным снимкам, типы меню/дочерней коллекции/декорации/родителя соответствуют справке. Имена внутренних элементов и число дочерних элементов выводятся реально, не заменяются выдуманными постоянными.
Будущий отрицательный контроль: только в ПроверитьСвойЦиклДополненияНаСервере после УстановитьСвойРежимДополнения(Закрытый) и до СверитьСвойРежимДополнения(Закрытый) добавить Поиск = ПолучитьСвойПоиск(); Поиск.Заголовок = "Неверный свой заголовок";. Эталон и общую процедуру присваивания не менять. Сверка должна отклонить заголовок, ветка ошибки вернуть семь исходных значений. Затем вернуть полный исходный код.
runtimeVerifiedScenarios=0: никакие формы, поиски, кнопки, запросы или серверные процедуры в1С здесь не выполнялись. Ни успешный видимый поиск, ни отображение всплывающей подсказки/выравнивания данным статическим опытом не доказаны.
Ожидаемый результат
Полный собственный пример разделяет данные списка, доступность дополнения, его изменяемые настройки, структуру readonly-объектов и подтвержденное точное восстановление исходного состояния.
На что обратить внимание
Не создавайте Новый РасширениеОтображенияСтрокиПоиска и не присваивайте новый объект readonly ОтображениеСтрокиПоиска. Свойства расширения доступны у действительного дополнения нужного вида, полученного от собственной таблицы.
Ширина задаётся в символах, не пикселях;0 означает автоматический размер. РастягиватьПоГоризонтали имеет тип Булево или Неопределено. Они не изменяют количество товаров и не являются фильтром запроса.
ЦветРамки, ЦветТекста, ЦветФона и Шрифт НЕ ПРИМЕНЯЮТСЯ в интерфейсе «Версия 8.5». Успешное присваивание/чтение описания не доказывает, что виджет использовал его. Шрифтовой файл Arial, его замена клиентом и активная тема также влияют на вид; здесь они не проверены.
XML-писатель работает только со строкой памяти и только с конкретными значениями Цвет/Шрифт. Не передавайте объекты метаданных, записи или весь список: сериализация объектов данных может выгружать записи. Писатель закрывается в нормальной и ошибочной ветках.
Снимок живёт только в одном серверном вызове формы. Нет глобальной переменной, общего хранилища настроек или записи в базу. Нельзя ожидать сохранения серверной переменной между отдельными клиентскими вызовами.
Это пример автоматической строки поиска таблицы, не НастройкиОтображенияДинамическогоСписка. Последнее содержит readonly РежимОтображенияСтрокиПоиска и здесь не конструируется и не привязывается к уроку без настоящего способа получения. Функциональность полномасштабного полнотекстового поиска и права доступа не выдумываются.
ПодчиненныеЭлементы — элементы интерфейса, не найденные товары. Число0 не означает пустой список данных; отчет не обещает фиксированное число автоматически созданных дочерних элементов.
Родитель может иметь два документированных типа. Имя читается только в ветке настоящей ГруппаФормы; экземпляру формы не приписывается чужой API группы. КонтекстноеМеню и РасширеннаяПодсказка не заменяются фиктивными Новыми объектами.
Доступность элемента формы не является проверкой прав доступа к данным. Заголовок не меняет техническое Имя и не изменяет источник списка. ОтображениеПодсказки.Нет подавляет подсказку, а не удаляет ее сохраненный текст.
ВажностьПриОтображении не включена в primaryTargets и не считается покрытой этим настольным опытом. Для мобильного клиента требуется отдельный настоящий стенд и собственная проверка адаптации.
Если платформа нормализует значение свойства, строгая сверка обнаружит отличие. Это основание исследовать конкретный клиент и режим, не скрывать отличие и не сообщать о неисполненном визуальном успехе.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.