СоставФормНачальнойСтраницы

Типы · HomePageForms

Содержит описание начальной страницы: состав форм и их расположение.

Полное описание, параметры и ограничения

СоставФормНачальнойСтраницы (HomePageForms)

СоставФормНачальнойСтраницы (HomePageForms)

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

Свойства:
ЛеваяКолонка (LeftColumn)
ПраваяКолонка (RightColumn)

Конструкторы:
По умолчанию

Описание:

Содержит описание начальной страницы: состав форм и их расположение.

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

Сервер, толстый клиент, мобильное приложение (сервер), мобильный автономный сервер.

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

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

Описание изменено в версии 8.3.18.

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

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

Переставить две собственные формы в черновике начальной страницы

Создаём реальный объект НастройкиНачальнойСтраницы, читаем исходный состав, строим план из подготовленных форм и возвращаем исходные строки. readonly-свойства колонок дают массивы для изменения состава, а не для замены ссылок присваиванием.

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

Полный модуль общей управляемой формы УчебныйПультНачальной85. Тонкий или толстый управляемый клиент собственной пустой базы 8.5.1.1343; весь доступ к настройкам выполняется на сервере одного вызова. Две общие формы начальной страницы подготовлены в метаданных.

Подготовка

  1. Создайте отдельную новую пустую учебную базу платформы 8.5.1.1343. Имя конфигурации в корне дерева — УчебнаяКонфигурацияНачальнойСтраницы85. Основной режим запуска — Управляемое приложение, язык встроенного языка Русский, режим совместимости Не использовать. Для наблюдения начальной страницы выберите интерфейс Такси.

  2. В Общие → Общие формы создайте три управляемые формы: УчебнаяКарточкаНачальной85, УчебнаяЗаметкаНачальной85, УчебныйПультНачальной85. Это реальные собственные метаданные, а не внешняя незарегистрированная обработка. В коде их полные имена извлекаются через коллекцию Метаданные.ОбщиеФормы и ПолноеИмя(), а не вводятся как неизвестные строки.

  3. В УчебнаяКарточкаНачальной85 разместите декорацию вида Надпись с заголовком Собственная учебная карточка. В УчебнаяЗаметкаНачальной85 разместите декорацию Надпись с заголовком Собственная учебная заметка. Их модули оставьте пустыми: им не нужны реквизиты, параметры, обработчики, команды, файлы или предметные данные.

  4. В корне конфигурации откройте свойство РабочаяОбластьНачальнойСтраницы и его редактор. Задайте собственную карточку в левой колонке и собственную заметку в правой. Никаких других форм на начальную страницу стенда не добавляйте. В своей учебной роли разрешите использование двух форм начальной страницы и открытие пульта.

  5. В УчебныйПультНачальной85 создайте строковый реквизит Протокол неограниченной длины и поле ввода ПолеПротокола, ПутьКДанным=Протокол, МногострочныйРежим=Истина, ТолькоПросмотр=Истина. Разрешите полю растягиваться по высоте. АвтоматическоеСохранениеДанныхВНастройках формы оставьте НеИспользовать.

  6. В пульте создайте команду ПереставитьЧерновикИВернуть, её клиентское действие — одноимённая процедура. Снимите ИзменяетСохраняемыеДанные, разместите кнопку команды. Весь приведённый полный модуль вставьте в модуль этого пульта; другие обработчики ему не назначайте.

  7. Для запуска создайте общую команду ОткрытьУчебныйПультНачальной85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы УчебнаяНачальнаяСтраница85. Полный модуль общей команды:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебныйПультНачальной85");
    КонецПроцедуры
    Обновите конфигурацию только этой учебной базы и запустите тонкий или толстый управляемый клиент.

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

  9. Состав, возвращённый новым объектом НастройкиНачальнойСтраницы, читается фактически и выводится в протокол. Урок не предполагает, что новый объект обязательно пустой или уже содержит конкретное количество форм. Исходная сигнатура строится по прочитанному объекту.

  10. Все создаваемые настройки — локальные серверные объекты в памяти одного вызова. Их не сохраняют в ХранилищеСистемныхНастроек и не применяют к пользовательскому интерфейсу. Очистка записей не нужна. Запуск в 1С не проверялся; выполните ручные проверки на своём пустом стенде.

&НаКлиенте
Процедура ПереставитьЧерновикИВернуть(Команда)
    ЭтаФорма.Протокол = ВыполнитьПерестановкуНаСервере();
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция СкопироватьСтрокиСостава(Состав)
    Копия = Новый СоставФормНачальнойСтраницы;
    Для Каждого ИмяФормы Из Состав.ЛеваяКолонка Цикл
        Если ТипЗнч(ИмяФормы) <> Тип("Строка") Тогда
            ВызватьИсключение "Левая колонка должна содержать строковые имена форм";
        КонецЕсли;
        Копия.ЛеваяКолонка.Добавить(ИмяФормы);
    КонецЦикла;
    Для Каждого ИмяФормы Из Состав.ПраваяКолонка Цикл
        Если ТипЗнч(ИмяФормы) <> Тип("Строка") Тогда
            ВызватьИсключение "Правая колонка должна содержать строковые имена форм";
        КонецЕсли;
        Копия.ПраваяКолонка.Добавить(ИмяФормы);
    КонецЦикла;
    Возврат Копия;
КонецФункции

&НаСервереБезКонтекста
Функция СигнатураСостава(Состав)
    Возврат "Л=[" + СтрСоединить(Состав.ЛеваяКолонка, ";") + "]; П=[" + СтрСоединить(Состав.ПраваяКолонка, ";") + "]";
КонецФункции

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

  1. Откройте свой пульт общей командой и нажмите ПереставитьЧерновикИВернуть. Клиент получает только текст протокола; конструкторы и методы настроек выполняются на сервере, где они доступны в нативной справке.

  2. Сервер проверяет точное имя стенда и наличие обеих подготовленных общих форм. Полные имена карточки и заметки получает из найденных объектов метаданных, чтобы передавать УстановитьСоставФорм настоящие имена форм.

  3. Новый НастройкиНачальнойСтраницы — документированный конструктор. ПолучитьСоставФорм() возвращает СоставФормНачальнойСтраницы, учитывая заданный в конфигураторе состав и отличия конкретного объекта настроек. Запишите выведенный исходный состав; не подменяйте чтение предположением о пустом новом объекте.

  4. СкопироватьСтрокиСостава создаёт новый СоставФормНачальнойСтраницы и переносит строковые имена двух колонок циклом. Присваивания Копия.ЛеваяКолонка=Массив нет: это readonly-свойство. Изменяется состав массива через Добавить.

  5. В отдельный ПереставленныйПлан добавляем реальное полное имя собственной заметки слева и собственной карточки справа. УстановитьСоставФорм принимает объект СоставФормНачальнойСтраницы, а не один Массив или Структуру.

  6. Повторное ПолучитьСоставФорм подтверждает ровно по одной форме в колонках и их реальные имена. Затем сравнивается ручная копия исходных строк с ранее записанной сигнатурой. Урок не приписывает самому методу ПолучитьСоставФорм гарантию глубокой независимой копии.

  7. Для возврата создаётся ещё одна ручная копия исходного состава. УстановитьСоставФорм задаёт её тому же локальному объекту настроек; повторное чтение должно точно совпасть с фактически прочитанной исходной сигнатурой.

  8. Вернитесь на начальную страницу клиента: карточка должна остаться слева, заметка справа. В протоколе черновика порядок обратный. Это демонстрирует разницу между локальным объектом и сохранённой пользовательской настройкой; серверное чтение не является визуальной проверкой.

  9. Повторите кнопку. Появится новый протокол отдельного серверного вызова; настройки интерфейса и записи баз не меняются. Закройте свой пульт после опыта.

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

  1. Протокол содержит фактически прочитанную исходную сигнатуру. На подготовленном стенде она должна соответствовать заданной рабочей области; если не соответствует, сначала проверьте редактор начальной страницы и права нового учебного пользователя. Код не выдаёт заранее заданный текст за прочитанные данные.

  2. Перечитанный черновик: Л=[ОбщаяФорма.УчебнаяЗаметкаНачальной85]; П=[ОбщаяФорма.УчебнаяКарточкаНачальной85]. Проверка количества выполняется до Получить(0), поэтому пустой массив не читается по несуществующему индексу.

  3. Есть строки Ручная копия исходных строк сохранилась: Истина и Исходный состав локального объекта возвращён: Истина. Они добавляются только после реальных сравнений и повторного чтения в коде, а не заранее.

  4. Начальная страница клиентского приложения визуально сохраняет прежний порядок. Если ваша проверка показывает другое, остановитесь и проверьте, что в модуль не добавлены вызовы сохранения системных настроек или другое расширение интерфейса.

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

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

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

  1. НастройкиСписка и НастройкиСостава не являются типами этой версии. Здесь используются точные существующие имена НастройкиНачальнойСтраницы и СоставФормНачальнойСтраницы; оба имеют публичный конструктор по умолчанию.

  2. ЛеваяКолонка и ПраваяКолонка доступны только для чтения и имеют тип Массив. readonly относится к свойству-ссылке: менять элементы полученного массива через Добавить допустимо, присваивать свойству новый массив нельзя.

  3. УстановитьСоставФорм требует полные имена метаданных форм и игнорирует строки, не являющиеся именами форм. Передавать псевдонимы, представления, имя одной подсистемы или неизвестную форму неверно. Код использует ПолноеИмя() двух подготовленных форм.

  4. Описание ПолучитьСоставФорм не обещает независимость возвращённых массивов от внутреннего объекта. Поэтому снимок собирается вручную из строк в новом объекте, а сохранность проверяется отдельно; не заменяйте его простым СнимокИсходного=ПрочитанныйСостав.

  5. УстановитьСоставФорм формирует отличия внутри конкретного объекта настроек. Этот урок не выполняет сохранение объекта в системный ключ Общее/НастройкиНачальнойСтраницы; результат не является изменением реальной начальной страницы пользователя.

  6. Строка Л=[...]; П=[...] — собственный диагностический формат урока, не формат сериализации 1С. Фактическое выполнение BSL и визуальное поведение начальной страницы требуют ручного запуска на подготовленном стенде.

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

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

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

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

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