Тип: ДополнениеЭлементаФормы. Возвращает автоматически сформированный элемент для отображения состояния просмотра таблицы.
Полное описание, параметры и ограничения
ТаблицаФормы.ОтображениеСостоянияПросмотра (FormTable.ViewStatusRepresentation)
ТаблицаФормы (FormTable)
ОтображениеСостоянияПросмотра (ViewStatusRepresentation)
Доступен, начиная с версии 8.3.5.
Использование:
Только чтение.
Описание:
Тип: ДополнениеЭлементаФормы.
Возвращает автоматически сформированный элемент для отображения состояния просмотра таблицы.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Описание изменено в версии 8.3.22.
Методическая информация
Практические примеры
Задать важность двух своих дополнений на сервере и не выдать ее за мобильную видимость
Собственная общая форма содержит буквальный список, настоящее дополнение поиска и настоящее состояние просмотра. На сервере меняем их относительную важность, проверяем оба набора значений и точно восстанавливаем исходные настройки. Это настройка формы, не исполненный опыт мобильной адаптации.
Где и как запускать
Полный модуль собственной управляемой общей формы УчебныйПоиск85, серверные настройки приоритетов; отдельная форма внешней обработки открывает ее. В1С и на мобильном устройстве не выполнялся.
Подготовка
НОВАЯ пустая отдельная файловая база точно8.5.1.1343. Имя конфигурации УчебнаяВажностьПоиска85, совместимость Не использовать, Русский. Нет бизнес-объектов, расширений, подписок, заданий, общих реквизитов и рабочих данных. Модули конфигурации вручную пустые. Не использовать БП/КА2/УТ/УНФ.
Конфигуратор → Общие → Общие формы → Добавить → УчебныйПоиск85, управляемая форма. В конфигурации ровно одна общая форма. Реквизит Список типа ДинамическийСписок; один элемент ТаблицаФормы ТаблицаТоваров с ПутьКДанным=Список. Колонки и кнопки вручную не добавлять: код создает пять колонок и шесть собственных команд.
Назначить событию ПриСозданииНаСервере одноименную процедуру. Вставить весь основной модуль в МОДУЛЬ ОБЩЕЙ ФОРМЫ, не в общий модуль и не в обработчик команды. Запрос содержит только четыре буквальные строки Книга/Ручка/Чай/Вода, без таблиц базы; ключ УчебныйНомер1–4. Настройки списка не сохраняются автоматически.
Будущая ручная подготовка: сохранить собственную конфигурацию и обновить свою базу F7. Собственная внешняя обработка УчебныйЗапускПриоритета85 → управляемая форма → команда/кнопка ОткрытьСвойПоиск, действие ОткрытьСвойПоиск. Полный отдельный модуль этой формы ниже только открывает собственную ОбщаяФорма.УчебныйПоиск85 в своем тонком клиенте.
Начальный учебный опыт — серверное присваивание и чтение двух приоритетов из собственной общей формы, открытой тонким клиентом. ВажностьПриОтображении не читается на настольном клиенте: справка дает только Мобильный клиент, сервер. Наличие символа перечисления ВажностьПриОтображении на тонком клиенте не дает права читать там одноименное свойство дополнения.
Это НЕ готовая сборка мобильного приложения и НЕ доказательство отображения этой таблицы/дополнений на телефоне. Развертывание собственного сервера, поддержка общей формы конкретным мобильным клиентом и адаптация его интерфейса — отдельный будущий опыт, здесь не выполнялись и не подменяются уменьшением окна настольного клиента.
Прежние три кнопки размеров/цветов поиска из полного стенда остаются рабочими как отдельные настройки формы. В интерфейсе Версия8.5 цвета и шрифт этого дополнения не применяются; их не использовать как доказательство действия приоритета. Новые три кнопки меняют только две ВажностьПриОтображении на сервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
Список.ПроизвольныйЗапрос = Истина;
Список.ОсновнаяТаблица = "";
Список.ДинамическоеСчитываниеДанных = Ложь;
Список.АвтоЗаполнениеДоступныхПолей = Истина;
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
КлючевыеПоля = Новый Массив;
КлючевыеПоля.Добавить("УчебныйНомер");
Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
Список.ТекстЗапроса = "ВЫБРАТЬ
| 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(Ожидание.Шрифт) Тогда
ВызватьИсключение "Не совпало полное описание собственных настроек поиска";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗадатьСвойПрофильНаСервере(Широкий)
Профиль = СоздатьСвойПрофильПоиска(Широкий);
ПрименитьСвоеОформлениеПоиска(Профиль);
ПроверитьСвоеОформлениеПоиска(Профиль);
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойЦиклНаСервере()
Исходное = ПолучитьСвоеОформлениеПоиска();
ПроверитьСвоеОформлениеПоиска(Исходное);
Попытка
Широкий = СоздатьСвойПрофильПоиска(Истина);
ПрименитьСвоеОформлениеПоиска(Широкий);
ПроверитьСвоеОформлениеПоиска(Широкий);
Компактный = СоздатьСвойПрофильПоиска(Ложь);
ПрименитьСвоеОформлениеПоиска(Компактный);
ПроверитьСвоеОформлениеПоиска(Компактный);
Исключение
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
ВызватьИсключение;
КонецПопытки;
ПрименитьСвоеОформлениеПоиска(Исходное);
ПроверитьСвоеОформлениеПоиска(Исходное);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.ОбщиеФормы.Количество() <> 1 Или Метаданные.ОбщиеФормы.Найти("УчебныйПоиск85") = Неопределено Тогда
ВызватьИсключение "Нужна ровно одна собственная общая форма УчебныйПоиск85";
КонецЕсли;
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриоритетПоиска85(Команда)
ЗадатьСвойПриоритетНаСервере(Истина);
Сообщить("На сервере свой поиск получил ОченьВысокая, состояние просмотра ОченьНизкая. Мобильное отображение не проверялось");
КонецПроцедуры
&НаКлиенте
Процедура ПриоритетСостояния85(Команда)
ЗадатьСвойПриоритетНаСервере(Ложь);
Сообщить("На сервере свое состояние получило ОченьВысокая, поиск ОченьНизкая. Это не запрет и не скрытие элементов");
КонецПроцедуры
&НаКлиенте
Процедура ЦиклПриоритетов85(Команда)
ПроверитьСвоиПриоритетыНаСервере();
Сообщить("Оба собственных приоритета сверены с типами и возвращены в состояние перед проверкой");
КонецПроцедуры
&НаСервере
Функция ПолучитьСвоеСостояниеДляПриоритета()
ПроверитьСвоюОсновуПоиска();
Таблица = Элементы.ТаблицаТоваров;
Если Таблица.ПоложениеСостоянияПросмотра <> ПоложениеСостоянияПросмотра.Низ Тогда
ВызватьИсключение "Нужно собственное состояние просмотра под таблицей";
КонецЕсли;
Состояние = Таблица.ОтображениеСостоянияПросмотра;
Если ТипЗнч(Состояние) <> Тип("ДополнениеЭлементаФормы")
Или Состояние.Вид <> ВидДополненияЭлементаФормы.ОтображениеСостоянияПросмотра Тогда
ВызватьИсключение "Нужно настоящее автоматическое дополнение состояния своей таблицы";
КонецЕсли;
Возврат Состояние;
КонецФункции
&НаСервере
Функция СнятьСвоиПриоритеты()
Поиск = ПолучитьСвойПоиск();
Состояние = ПолучитьСвоеСостояниеДляПриоритета();
Возврат Новый Структура("Поиск,Состояние", Поиск.ВажностьПриОтображении, Состояние.ВажностьПриОтображении);
КонецФункции
&НаСервере
Функция СоздатьСвойПриоритет(ПоискГлавный)
Если ТипЗнч(ПоискГлавный) <> Тип("Булево") Тогда
ВызватьИсключение "Ожидается собственный булевый выбор приоритета";
КонецЕсли;
Если ПоискГлавный Тогда
Возврат Новый Структура("Поиск,Состояние", ВажностьПриОтображении.ОченьВысокая, ВажностьПриОтображении.ОченьНизкая);
КонецЕсли;
Возврат Новый Структура("Поиск,Состояние", ВажностьПриОтображении.ОченьНизкая, ВажностьПриОтображении.ОченьВысокая);
КонецФункции
&НаСервере
Процедура УстановитьСвоиПриоритеты(Приоритеты)
Поиск = ПолучитьСвойПоиск();
Состояние = ПолучитьСвоеСостояниеДляПриоритета();
Поиск.ВажностьПриОтображении = Приоритеты.Поиск;
Состояние.ВажностьПриОтображении = Приоритеты.Состояние;
КонецПроцедуры
&НаСервере
Процедура СверитьСвоиПриоритеты(Эталон)
Фактические = СнятьСвоиПриоритеты();
Если ТипЗнч(Фактические.Поиск) <> ТипЗнч(Эталон.Поиск) Или Фактические.Поиск <> Эталон.Поиск
Или ТипЗнч(Фактические.Состояние) <> ТипЗнч(Эталон.Состояние) Или Фактические.Состояние <> Эталон.Состояние Тогда
ВызватьИсключение "Не совпали значения или типы двух собственных приоритетов";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗадатьСвойПриоритетНаСервере(ПоискГлавный)
Исходные = СнятьСвоиПриоритеты();
Приоритеты = СоздатьСвойПриоритет(ПоискГлавный);
Попытка
УстановитьСвоиПриоритеты(Приоритеты);
СверитьСвоиПриоритеты(Приоритеты);
Исключение
УстановитьСвоиПриоритеты(Исходные);
СверитьСвоиПриоритеты(Исходные);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоиПриоритетыНаСервере()
Исходные = СнятьСвоиПриоритеты();
ПоискГлавный = СоздатьСвойПриоритет(Истина);
СостояниеГлавное = СоздатьСвойПриоритет(Ложь);
Попытка
УстановитьСвоиПриоритеты(ПоискГлавный);
СверитьСвоиПриоритеты(ПоискГлавный);
УстановитьСвоиПриоритеты(СостояниеГлавное);
СверитьСвоиПриоритеты(СостояниеГлавное);
Исключение
УстановитьСвоиПриоритеты(Исходные);
СверитьСвоиПриоритеты(Исходные);
ВызватьИсключение;
КонецПопытки;
УстановитьСвоиПриоритеты(Исходные);
СверитьСвоиПриоритеты(Исходные);
КонецПроцедурыУчебныйЗапускПриоритета85.Форма
Собственная внешняя обработка → управляемая форма → Модуль
Полный клиентский модуль запуска только собственной общей формы, не развертывание мобильного клиента.
&НаКлиенте
Процедура ОткрытьСвойПоиск(Команда)
ОткрытьФорму("ОбщаяФорма.УчебныйПоиск85");
КонецПроцедурыРазбор по шагам
При создании проверяются ровно одна собственная общая форма и отсутствие расширений. Создается только собственный буквальный список из четырех строк. Общая форма дает элементам настоящее происхождение из одной конфигурации, а не неизвестный ИсходныйОбъект.
ПолучитьСвойПоиск проверяет неизменность буквального запроса, ключа, путей пяти колонок и вида дополнения ОтображениеСтрокиПоиска. Для состояния просмотров отдельно задается положение Низ и проверяется вид ОтображениеСостоянияПросмотра. Полученные объекты — реальные readonly-свойства своей таблицы; новые фиктивные дополнения не создаются.
Кнопка Важнее свой поиск задает поиск=ОченьВысокая, состояние=ОченьНизкая. Важнее свое состояние меняет их местами. Это варианты настоящего системного перечисления, а не числа0/100, не Булево, не уровень прав и не гарантированная команда скрытия элемента.
Все чтения и присваивания .ВажностьПриОтображении расположены только в &НаСервере. Клиентские обработчики передают собственный Булево из кода и выводят честное сообщение; свойство, снимки и объекты дополнений клиенту не возвращаются.
До каждого отдельного изменения снимаются два текущих значения. Ошибка установки/сверки вызывает восстановление и проверку обоих исходных значений, затем повторный вызов исключения. Кнопка Проверить приоритеты проверяет оба режима в одном серверном вызове и восстанавливает исходные значения и при успехе, и при ошибке.
Сверка сравнивает значение и ТипЗнч каждого приоритета. Исходное Авто не заменяется искусственно на Обычная; восстанавливается именно снятый вариант. Для этого дополнения не выдумывается конкретный приоритет, который платформа выбрала бы для Авто.
Важность учитывается при адаптации мобильного отображения. Успех серверной сверки означает лишь соответствие свойств заданным вариантам. Он не подтверждает, что мобильный клиент отобразил дополнение или что ОченьВысокая обязательно оставляет его видимым при любой ширине.
Как проверить результат
Будущий серверный контроль в своем тонком клиенте: отдельные кнопки должны сверить поиск/состояние как ОченьВысокая/ОченьНизкая и наоборот. Кнопка проверки цикла после каждого режима возвращает именно два значения до своего нажатия. Данные Книга3×250, Ручка1×30, Чай2×150, Вода0×70 остаются буквальными строками.
Будущий отрицательный контроль: только в ПроверитьСвоиПриоритетыНаСервере после УстановитьСвоиПриоритеты(СостояниеГлавное) и перед СверитьСвоиПриоритеты(СостояниеГлавное) вставить Поиск = ПолучитьСвойПоиск(); Поиск.ВажностьПриОтображении = ВажностьПриОтображении.Обычная;. Эталон и общую процедуру присваивания не менять. Сверка должна отвергнуть состояние, ветка ошибки восстановить оба исходных значения. Затем вернуть полный исходный модуль.
Будущий отрицательный контроль происхождения: переименовать только собственную общую форму УчебныйПоиск85 и обновить свой стенд. Открытие по старому имени либо начальная проверка должна отклонить измененный fixture; не проверять эту ошибку в рабочей конфигурации.
runtimeVerifiedScenarios=0: общая форма, внешняя обработка, серверные процедуры, поиск, запрос, телефон, мобильный клиент и сетевое развертывание здесь не запускались. Проверены только исходники и точные native-контракты8.5.1.1343. Мобильный визуальный результат не заявлен.
Ожидаемый результат
Настроены и проверены два настоящих серверных приоритета собственных дополнений с полным восстановлением; граница между настройкой и фактической мобильной адаптацией сформулирована явно.
На что обратить внимание
Не переносить .ВажностьПриОтображении из серверной процедуры в &НаКлиенте настольного клиента. Доступность самого перечисления шире доступности свойства конкретного объекта; это разные контракты.
Важность не заменяет Видимость, Доступность, права пользователя и проверку данных. Само присваивание не удаляет элемент, не фильтрует товары и не доказывает, что клиент его отрисовал.
ТаблицаФормы.ОтображениеСостоянияПросмотра и ее положение в справке доступны на сервере, но не имеют заявленной доступности на мобильном клиенте. В коде они используются только на сервере; это еще одна причина не обещать мобильную визуальную поддержку по одному чтению свойств.
Снимок — локальные переменные одного серверного вызова, не общая настройка всех пользователей. Открытие общей формы само по себе не выполняет сетевую интеграцию и не развертывает мобильный сервер.
Авто имеет описанные платформой правила для отдельных типов реквизитов; их нельзя произвольно перенести на дополнение поисковой строки. Пример сохраняет исходный вариант, не утверждая, что Авто здесь равно конкретной числовой или перечислимой важности.
Использование общей формы не является доказательством поддержки формы мобильным клиентом. Для настоящего мобильного опыта нужны отдельно проверенные развертывание, клиент, экран и сценарий; никакие чужие устройства, серверы или базы здесь не затрагивались.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разобрать встроенную строку поиска и её расположение
Настраиваем поиск только в двух учебных строках. Поиск при вводе и автоматически созданные элементы поиска — разные части интерфейса.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В учебной базе: Файл → Новый → Внешняя обработка. Создайте управляемую форму и назначьте её основной. Дайте обработке имя УчебнаяТаблица.
Не добавляйте вручную реквизит Товары и одноимённые элементы: код создаст их при открытии. Модуль формы для этой задачи должен быть пустым.
В свойствах формы → События свяжите ПриСозданииНаСервере с одноимённой процедурой. Сохраните отдельную учебную EPF и откройте через Файл → Открыть.
Данные Книга/Ручка создаются в памяти формы. Справочники, документы и регистры вашей конфигурации не читаются и не записываются.
Проверяйте в настольном тонком/толстом или веб-клиенте 8.5.1.1343, не в мобильном приложении. Для каждого урока отдельная учебная форма с пустым модулем.
Изменение учебных строк остаётся только в открытой форме. При её новом открытии снова создаются Книга/3 и Ручка/1. Настройки таблицы не являются правами доступа к данным.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Товары", Новый ОписаниеТипов("ТаблицаЗначений")));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Код", Новый ОписаниеТипов("Строка"), "Товары", "Код"));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Наименование", Новый ОписаниеТипов("Строка"), "Товары", "Название"));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)), "Товары", "Количество"));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)));
СтрокаТовара = Данные.Добавить();
СтрокаТовара.Код = "A-01";
СтрокаТовара.Наименование = "Книга";
СтрокаТовара.Количество = 3;
СтрокаТовара = Данные.Добавить();
СтрокаТовара.Код = "B-02";
СтрокаТовара.Наименование = "Ручка";
СтрокаТовара.Количество = 1;
ЭтаФорма.ЗначениеВРеквизитФормы(Данные, "Товары");
Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаТоваров", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "Товары";
Таблица.Заголовок = "Учебные товары";
Таблица.Шапка = Истина;
Таблица.АвтоВводНезаполненного = Ложь;
Таблица.АвтоВводНовойСтроки = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Код,Наименование,Количество", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Товары." + ИмяКолонки;
Колонка.Заголовок = ИмяКолонки;
КонецЦикла;
Таблица.ТолькоПросмотр = Истина;
Таблица.ПоискПриВводе = ПоискВТаблицеПриВводе.Использовать;
Таблица.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Верх;
Таблица.ПоложениеСостоянияПросмотра = ПоложениеСостоянияПросмотра.Низ;
Таблица.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.КоманднаяПанель;
Поиск = Таблица.ОтображениеСтрокиПоиска;
Состояние = Таблица.ОтображениеСостоянияПросмотра;
Управление = Таблица.УправлениеПоиском;
Если Поиск <> Неопределено Тогда
Поиск.Видимость = Истина;
КонецЕсли;
Если Состояние <> Неопределено Тогда
Сообщить("Дополнение состояния: " + Состояние.Имя);
КонецЕсли;
Если Управление <> Неопределено Тогда
Сообщить("Дополнение управления поиском: " + Управление.Имя);
КонецЕсли;
КонецПроцедуры
Разбор по шагам
ТолькоПросмотр не даёт вводимым символам случайно менять товар во время учебного поиска.
ПоискПриВводе включает стандартное поведение поиска при вводе символов, не запрос к справочникам базы.
Три настройки расположения относятся к строке поиска, состоянию просмотра и управлению поиском.
Свойства дополнений доступны для чтения. Возвращённый элемент проверяем до обращения к нему; не присваиваем новый объект самому свойству таблицы.
Имена дополнений — имена UI, не коды товара. Конкретное размещение и доступность проверяются в выбранном клиенте.
Как проверить результат
Введите Книга или Ручка в отображаемую строку поиска и изучите стандартное поведение выбранного клиента.
Сами учебные данные не меняются: исходный реквизит содержит две строки. Поиск не является удалением строк.
Ожидаемый результат
Показаны расположение поисковых дополнений и различие поиска/редактирования.
На что обратить внимание
Не все клиенты и варианты интерфейса отображают дополнения одинаково.
Не трактуйте видимый результат поиска как количество строк во всей коллекции.
Поиск в таблице не заменяет серверный запрос с параметрами и не расширяет права.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.