Осуществляет поиск элемента управления с заданным именем.
Синтаксис
Найти(<Имя>)Примеры платформы
Процедура АктивизироватьРеквизитВФорме(ФормаДокумента) Экспорт
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("Дата");
СтруктураРеквизитов.Вставить("Номер");
СтруктураРеквизитов.Вставить("Организация");
СтруктураРеквизитов.Вставить("Касса");
СтруктураРеквизитов.Вставить("БанковскийСчет");
СтруктураРеквизитов.Вставить("Склад");
СтруктураРеквизитов.Вставить("Контрагент");
СтруктураРеквизитов.Вставить("Получатель");
СтруктураРеквизитов.Вставить("Плательщик");
СтруктураРеквизитов.Вставить("ФизЛицо");
Для каждого Элемент Из СтруктураРеквизитов Цикл
ЭУ = ВсеЭлементыФормы.Найти(Элемент.Ключ);
Если ЭУ <> Неопределено Тогда
Если Не ЗначениеЗаполнено(ЭУ.Значение) Тогда
ФормаДокумента.ТекущийЭлемент = ЭУ;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедурыПолное описание, параметры и ограничения
ВсеЭлементыФормы.Найти (FormAllItems.Find)
ВсеЭлементыФормы (FormAllItems)
Найти (Find)
Доступен, начиная с версии 8.2.
Синтаксис:
Найти(<Имя>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Имя элемента формы.
Возвращаемое значение:
Тип: Элемент управления, Неопределено.
Элемент управления в форме. Если элемент не найден, то возвращается значение Неопределено.
Описание:
Осуществляет поиск элемента управления с заданным именем.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Процедура АктивизироватьРеквизитВФорме(ФормаДокумента) Экспорт
// Структура - порядок активизации реквизитов.
// Активизируется первый не заполненный.
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("Дата");
СтруктураРеквизитов.Вставить("Номер");
СтруктураРеквизитов.Вставить("Организация");
СтруктураРеквизитов.Вставить("Касса");
СтруктураРеквизитов.Вставить("БанковскийСчет");
СтруктураРеквизитов.Вставить("Склад");
СтруктураРеквизитов.Вставить("Контрагент");
СтруктураРеквизитов.Вставить("Получатель");
СтруктураРеквизитов.Вставить("Плательщик");
СтруктураРеквизитов.Вставить("ФизЛицо");
Для каждого Элемент Из СтруктураРеквизитов Цикл
// Определим, есть ли ЭУ с таким именем.
ЭУ = ВсеЭлементыФормы.Найти(Элемент.Ключ);
Если ЭУ <> Неопределено Тогда
// есть такой элемент
Если Не ЗначениеЗаполнено(ЭУ.Значение) Тогда
// Нашли не заполненный ЭУ.
// Делаем его текущим и прекращаем цикл.
ФормаДокумента.ТекущийЭлемент = ЭУ;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Объединить количество, цену и сумму в группу колонок
Две учебные строки дают итог 780. Переключаем обычное и компактное оформление расчётной группы, меняем источник шапки и проверяем восстановление всех 12 её свойств. Подготовка базы вынесена в отдельный модуль; основная задача находится в модуле формы.
Где и как запускать
Полный модуль своей управляемой формы внешней обработки УчебныеГруппыКолонок85. Серверные процедуры работают только с реквизитами и элементами этой формы; не запускались.
Подготовка
Для будущего ручного запуска создайте НОВУЮ пустую учебную базу на платформе 8.5.1.1343. Имя конфигурации — УчебныеГруппыКолонок85; бизнес-объектов, расширений, подписок и регламентных заданий нет. Не используйте УТ, КА, УНФ или БП с рабочими данными. Здесь база и форма не создавались, код в 1С не выполнялся: runtimeVerifiedScenarios=0.
Создайте общий модуль УчебныеГруппы85: Сервер=Да, Клиент=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте целиком отдельный модуль проверки стенда из блока ниже; его экспортную процедуру вызывает только сервер формы.
Создайте свою внешнюю обработку УчебныеГруппыКолонок85 и управляемую форму Форма. Добавьте реквизит Книги типа ТаблицаЗначений с колонками Название (Строка,100), Количество (Число,3,0,неотрицательное), Цена (Число,9,2,неотрицательное), Сумма (Число,12,2,неотрицательное). Добавьте реквизиты Всего (Число,12,2,неотрицательное) и ЗаголовокРасчета (Строка,80). Это реквизиты этой формы, не таблицы базы.
На форме разместите таблицу ТаблицаКниг с ПутьКДанным=Книги. Колонку Название свяжите с Книги.Название. Прямо внутри ТаблицаКниг создайте группу ГруппаРасчет: Вид=ГруппаКолонок, Заголовок=Расчет. Внутри неё разместите поля Количество, Цена, Сумма с путями Книги.Количество, Книги.Цена, Книги.Сумма. Не вкладывайте группу в другую группу. Включите шапку таблицы. В ходе урока не меняйте порядок строк.
Создайте команды ОбычныйВид, КомпактныйВид, ПроверитьВосстановление и кнопки для них. Назначьте одноимённые обработчики, а событию формы ПриСозданииНаСервере — одноимённую процедуру. Вставьте полный основной код в модуль формы, на верхний уровень, не внутрь другого обработчика. Проверьте F7. Не выполняйте этот урок в рабочей базе.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УчебныеГруппы85.ПроверитьСвойПустойСтенд();
Книги.Очистить();
ДобавитьСтроку("Книга", 3, 250);
ДобавитьСтроку("Ручка", 1, 30);
Всего = Книги[0].Сумма + Книги[1].Сумма;
ЗаголовокРасчета = "Расчет стоимости";
Элементы.ТаблицаКниг.ТолькоПросмотр = Истина;
ПрименитьПрофиль(СоздатьПрофиль(Истина));
КонецПроцедуры
&НаСервере
Процедура ДобавитьСтроку(Название, Количество, Цена)
Строка = Книги.Добавить();
Строка.Название = Название;
Строка.Количество = Количество;
Строка.Цена = Цена;
Строка.Сумма = Количество * Цена;
КонецПроцедуры
&НаКлиенте
Процедура ОбычныйВид(Команда)
ВыбратьПрофильНаСервере(Истина);
КонецПроцедуры
&НаКлиенте
Процедура КомпактныйВид(Команда)
ВыбратьПрофильНаСервере(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВосстановление(Команда)
ПроверитьЦиклНаСервере();
Сообщить("Оба профиля сверены; все 12 свойств восстановлены. Внешний вид проверяйте отдельно");
КонецПроцедуры
&НаСервере
Функция ПолучитьСвоюГруппу()
УчебныеГруппы85.ПроверитьСвойПустойСтенд();
Таблица = Элементы.Найти("ТаблицаКниг");
Группа = Элементы.Найти("ГруппаРасчет");
Если ТипЗнч(Таблица) <> Тип("ТаблицаФормы") Или Таблица.ПутьКДанным <> "Книги"
Или Не Таблица.ТолькоПросмотр Или ТипЗнч(Группа) <> Тип("ГруппаФормы") Тогда
ВызватьИсключение "Подготовьте свою таблицу Книги и группу ГруппаРасчет";
КонецЕсли;
Если Группа.Вид <> ВидГруппыФормы.ГруппаКолонок
Или ТипЗнч(Группа.Родитель) <> Тип("ТаблицаФормы")
Или Группа.Родитель.Имя <> Таблица.Имя Или Группа.Имя <> "ГруппаРасчет" Тогда
ВызватьИсключение "Группа колонок должна находиться прямо внутри своей таблицы";
КонецЕсли;
Если Книги.Количество() <> 2 Или Всего <> 780 Или ЗаголовокРасчета <> "Расчет стоимости" Тогда
ВызватьИсключение "Изменился собственный учебный набор или данные шапки";
КонецЕсли;
ПроверитьСтроку(Книги[0], "Книга", 3, 250, 750);
ПроверитьСтроку(Книги[1], "Ручка", 1, 30, 30);
Возврат Группа;
КонецФункции
&НаСервереБезКонтекста
Процедура ПроверитьСтроку(Строка, Название, Количество, Цена, Сумма)
Если Строка.Название <> Название Или Строка.Количество <> Количество
Или Строка.Цена <> Цена Или Строка.Сумма <> Сумма Тогда
ВызватьИсключение "Оформление не должно менять учебные строки";
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СоздатьПрофиль(Обычный)
Если ТипЗнч(Обычный) <> Тип("Булево") Тогда
ВызватьИсключение "Выберите обычный или компактный профиль";
КонецЕсли;
Если Обычный Тогда
Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
ГоризонтальноеПоложениеЭлемента.Центр, ГруппировкаКолонок.Горизонтальная, Новый Картинка,
Истина, Истина, Неопределено, Неопределено, "Всего", ФиксацияВТаблице.Нет,
Неопределено, "ЧДЦ=2", Новый Цвет(232, 242, 255));
Иначе
Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
ГоризонтальноеПоложениеЭлемента.Лево, ГруппировкаКолонок.Вертикальная, Новый Картинка,
Истина, Ложь, Ложь, Истина, "ЗаголовокРасчета", ФиксацияВТаблице.Лево,
Истина, "", Новый Цвет(255, 244, 220));
КонецЕсли;
КонецФункции
&НаСервере
Функция СнятьПрофиль()
Группа = ПолучитьСвоюГруппу();
Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
Группа.ГоризонтальноеПоложениеВШапке, Группа.Группировка, Группа.КартинкаШапки,
Группа.ОтображатьВКарточке, Группа.ОтображатьВШапке, Группа.ОтображатьЗаголовок,
Группа.ОтображатьЗаголовокВКарточке, Группа.ПутьКДаннымШапки, Группа.ФиксацияВТаблице,
Группа.ФиксироватьВКарточке, Группа.ФорматШапки, Группа.ЦветФонаЗаголовка);
КонецФункции
&НаСервере
Процедура ПрименитьПрофиль(Профиль)
Группа = ПолучитьСвоюГруппу();
Группа.ГоризонтальноеПоложениеВШапке = Профиль.ГоризонтальноеПоложениеВШапке;
Группа.Группировка = Профиль.Группировка;
Группа.КартинкаШапки = Профиль.КартинкаШапки;
Группа.ОтображатьВКарточке = Профиль.ОтображатьВКарточке;
Группа.ОтображатьВШапке = Профиль.ОтображатьВШапке;
Группа.ОтображатьЗаголовок = Профиль.ОтображатьЗаголовок;
Группа.ОтображатьЗаголовокВКарточке = Профиль.ОтображатьЗаголовокВКарточке;
Группа.ПутьКДаннымШапки = Профиль.ПутьКДаннымШапки;
Группа.ФиксацияВТаблице = Профиль.ФиксацияВТаблице;
Группа.ФиксироватьВКарточке = Профиль.ФиксироватьВКарточке;
Группа.ФорматШапки = Профиль.ФорматШапки;
Группа.ЦветФонаЗаголовка = Профиль.ЦветФонаЗаголовка;
КонецПроцедуры
&НаСервере
Процедура ПроверитьПрофиль(Ожидание)
Факт = СнятьПрофиль();
Если Факт.Количество() <> 12 Или Ожидание.Количество() <> 12 Тогда
ВызватьИсключение "Сверяются все 12 свойств группы колонок";
КонецЕсли;
Для Каждого Пара Из Ожидание Цикл
Значение = Факт[Пара.Ключ];
Если ТипЗнч(Значение) <> ТипЗнч(Пара.Значение) Тогда
ВызватьИсключение "Не совпал тип свойства " + Пара.Ключ;
КонецЕсли;
Если Пара.Ключ = "КартинкаШапки" Тогда
Если Значение.Вид <> ВидКартинки.Пустая Или Пара.Значение.Вид <> ВидКартинки.Пустая Тогда
ВызватьИсключение "Этот урок использует только пустую картинку шапки";
КонецЕсли;
ИначеЕсли Пара.Ключ = "ЦветФонаЗаголовка" Тогда
Если Значение.Красный <> Пара.Значение.Красный Или Значение.Зеленый <> Пара.Значение.Зеленый
Или Значение.Синий <> Пара.Значение.Синий Тогда
ВызватьИсключение "Не совпали три составляющие собственного цвета";
КонецЕсли;
ИначеЕсли Значение <> Пара.Значение Тогда
ВызватьИсключение "Не совпало значение свойства " + Пара.Ключ;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыбратьПрофильНаСервере(Обычный)
Профиль = СоздатьПрофиль(Обычный);
ПрименитьПрофиль(Профиль);
ПроверитьПрофиль(Профиль);
КонецПроцедуры
&НаСервере
Процедура ПроверитьЦиклНаСервере()
Снимок = СнятьПрофиль();
Если ТипЗнч(Снимок.КартинкаШапки) <> Тип("Картинка")
Или Снимок.КартинкаШапки.Вид <> ВидКартинки.Пустая
Или ТипЗнч(Снимок.ЦветФонаЗаголовка) <> Тип("Цвет")
Или Снимок.ЦветФонаЗаголовка.Красный < 0
Или Снимок.ЦветФонаЗаголовка.Зеленый < 0 Или Снимок.ЦветФонаЗаголовка.Синий < 0 Тогда
ВызватьИсключение "Проверка рассчитана на собственную пустую картинку и абсолютный цвет";
КонецЕсли;
Попытка
ВыбратьПрофильНаСервере(Истина);
ВыбратьПрофильНаСервере(Ложь);
Исключение
ПрименитьПрофиль(Снимок);
ПроверитьПрофиль(Снимок);
ВызватьИсключение;
КонецПопытки;
ПрименитьПрофиль(Снимок);
ПроверитьПрофиль(Снимок);
КонецПроцедурыУчебныеГруппы85
Своя пустая конфигурация УчебныеГруппыКолонок85 → Общие → Общие модули → УчебныеГруппы85
Полный серверный общий модуль, Сервер=Да, Вызов сервера=Нет. Подготовка отдельно от модуля формы; не выполнялась.
Процедура ПроверитьСвойПустойСтенд() Экспорт
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
ПриСозданииНаСервере создаёт только две строки в памяти формы: Книга — 3 × 250 = 750; Ручка — 1 × 30 = 30. Всего=780. Таблица становится доступной только для просмотра, чтобы оформление не смешивалось с редактированием данных.
ПолучитьСвоюГруппу берёт конкретный элемент Элементы.ГруппаРасчет, проверяет ВидГруппыФормы.ГруппаКолонок и его непосредственного родителя — ТаблицаКниг. Расширение не создают через Новый: его свойства принадлежат уже подготовленной группе колонок.
ОбычныйВид задаёт горизонтальную группировку, выравнивание по центру, показ группы в шапке и карточке, отсутствие фиксации в таблице. Источник текста шапки — числовой реквизит Всего; ЧДЦ=2 задаёт два знака после десятичного разделителя. КартинкаШапки получает Новый Картинка — это осознанное отсутствие значка, без загрузки файлов.
ОтображатьЗаголовок, ОтображатьЗаголовокВКарточке и ФиксироватьВКарточке получают Неопределено: платформа выбирает поведение автоматически. Это не Ложь. КомпактныйВид показывает явные Булево-значения и другую группировку: вертикально, фиксация слева, выравнивание влево, без группы в шапке, с заголовком и фиксацией в мобильной карточке.
КомпактныйВид меняет ПутьКДаннымШапки на свой строковый реквизит ЗаголовокРасчета и сбрасывает числовой формат. Но ОтображатьВШапке=Ложь скрывает эту часть шапки: для отдельного опыта включите это свойство в компактном профиле, тогда строковый источник станет видимым. Изменения пути, группировки и фиксации выполняются на сервере.
ЦветФонаЗаголовка получает абсолютные RGB-цвета: 232/242/255 и 255/244/220. Проверка сравнивает составляющие, а не строковое представление или идентичность объектов. Пустые картинки сравниваются по виду; это проверка только данного учебного случая, не любых библиотечных картинок.
ПроверитьВосстановление сохраняет текущее состояние этой формы, применяет оба профиля и возвращает все 12 свойств. При ошибке тоже выполняется восстановление и повторно передаётся исключение. Данные двух строк и итог сверяются при получении группы; успешная проверка свойств не заменяет проверку внешнего вида.
Как проверить результат
В будущем ручном запуске сверяйте обе строки целиком: Книга/3/250/750 и Ручка/1/30/30; итог 780. После каждой команды данные должны остаться прежними. Никаких записей справочников или документов урок не создаёт.
Сначала выберите КомпактныйВид, затем ПроверитьВосстановление: после проверки остаётся компактный профиль. Повторите из ОбычныйВид: остаётся обычный. Неопределено в трёх автоматических свойствах должно сохраниться именно как Неопределено, а не стать Ложь.
Для проверки обнаружения ошибки на копии учебного модуля вставьте в ВыбратьПрофильНаСервере после ПрименитьПрофиль(Профиль), перед ПроверитьПрофиль(Профиль): Элементы.ГруппаРасчет.ФорматШапки = "ошибка";. Запустите ПроверитьВосстановление: сравнение должно вызвать исключение, после которого сохранённые 12 свойств восстанавливаются. Не меняйте ожидание и код восстановления; затем удалите только вставленную строку.
ОтображатьВКарточке, ОтображатьЗаголовокВКарточке и ФиксироватьВКарточке имеют визуальный смысл для мобильного приложения в интерфейсе Версия 8.5. На настольном клиенте можно сверить их значения, но нельзя подтвердить вид мобильной карточки. При будущем отдельном мобильном тесте дополнительно проверьте скрытие группы через ОтображатьВКарточке=Ложь.
Для наглядной проверки фиксации подготовьте достаточно узкую таблицу с горизонтальной прокруткой. Настольный и мобильный внешний вид, формат числа и восстановление в живой форме здесь не проверены.
Ожидаемый результат
Подготовлен полный учебный модуль формы и отдельный модуль проверки пустого стенда. Ожидаются два варианта оформления одной расчётной группы и восстановление её 12 свойств без изменения двух строк. Это описание ожидаемого поведения, не протокол запуска в 1С.
На что обратить внимание
ПутьКДаннымШапки доступен только на сервере. Не переносите применение или снятие профиля в клиентский цикл.
Программно допустимы картинки вида Пустая и ИзБиблиотеки. Здесь используется только Пустая; снимок не обещает восстановление произвольных файловых картинок или библиотечных ресурсов.
Снимок рассчитан на эту собственную форму, пустую картинку и абсолютный цвет. Он не является глубоким клонированием произвольного объекта. Для относительных цветов RGB могут быть -1 — такой исходный профиль проверка отклоняет до изменений.
ФиксацияВТаблице=Лево/Право может поднять вложенную группу на верхний уровень таблицы. Поэтому ГруппаРасчет изначально является прямым дочерним элементом таблицы; Родитель только читается, не переприсваивается.
Скрытие группы в шапке не удаляет её данные и не означает скрытие мобильной карточки. Управление шапкой, карточкой, заголовком и фиксацией — разные настройки.
Запись и чтение свойства не гарантируют его визуального применения конкретным интерфейсом. Не выдавайте статическую проверку за испытание клиента или мобильного приложения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Строка поиска своего списка: два профиля размеров и оформления с полным восстановлением
Создаём форму собственного динамического списка Книга/Ручка/Чай/Вода. Настраиваем автоматическую строку поиска, переключаем широкий и компактный профили отдельными кнопками, проверяем шесть свойств и восстанавливаем исходное оформление. Отдельно объясняем, почему цвета и шрифт не применяются в интерфейсе «Версия 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 РежимОтображенияСтрокиПоиска и здесь не конструируется и не привязывается к уроку без настоящего способа получения. Функциональность полномасштабного полнотекстового поиска и права доступа не выдумываются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.