Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, которые описывают все общие формы, определенные в конфигурации. Элементами коллекции являются объекты типа ОбъектМетаданных: Форма.
Полное описание, параметры и ограничения
ОбъектМетаданныхКонфигурация.ОбщиеФормы (ConfigurationMetadataObject.CommonForms)
ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)
ОбщиеФормы (CommonForms)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных, которые описывают все общие формы, определенные в конфигурации.
Элементами коллекции являются объекты типа ОбъектМетаданных: Форма.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Составить карту категорий объектов текущей конфигурации
Инвентаризация схемы: сколько определено справочников, документов, регистров, форм и сервисов. Это не число товаров или документов в базе.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.
Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.
Для запуска на старой версии некоторые новые категории могут отсутствовать. Здесь используется именно API 8.5.1.1343.
Категории = Новый Соответствие;
Категории.Вставить("Справочники", Метаданные.Справочники);
Категории.Вставить("Документы", Метаданные.Документы);
Категории.Вставить("Журналы документов", Метаданные.ЖурналыДокументов);
Категории.Вставить("Перечисления", Метаданные.Перечисления);
Категории.Вставить("Константы", Метаданные.Константы);
Категории.Вставить("Регистры сведений", Метаданные.РегистрыСведений);
Категории.Вставить("Регистры накопления", Метаданные.РегистрыНакопления);
Категории.Вставить("Регистры бухгалтерии", Метаданные.РегистрыБухгалтерии);
Категории.Вставить("Регистры расчета", Метаданные.РегистрыРасчета);
Категории.Вставить("Планы счетов", Метаданные.ПланыСчетов);
Категории.Вставить("Планы видов характеристик", Метаданные.ПланыВидовХарактеристик);
Категории.Вставить("Планы видов расчета", Метаданные.ПланыВидовРасчета);
Категории.Вставить("Планы обмена", Метаданные.ПланыОбмена);
Категории.Вставить("Бизнес-процессы", Метаданные.БизнесПроцессы);
Категории.Вставить("Задачи", Метаданные.Задачи);
Категории.Вставить("Последовательности", Метаданные.Последовательности);
Категории.Вставить("Нумераторы", Метаданные.НумераторыДокументов);
Категории.Вставить("Общие модули", Метаданные.ОбщиеМодули);
Категории.Вставить("Подписки на события", Метаданные.ПодпискиНаСобытия);
Категории.Вставить("Регламентные задания", Метаданные.РегламентныеЗадания);
Категории.Вставить("Общие реквизиты", Метаданные.ОбщиеРеквизиты);
Категории.Вставить("Параметры сеанса", Метаданные.ПараметрыСеанса);
Категории.Вставить("Определяемые типы", Метаданные.ОпределяемыеТипы);
Категории.Вставить("Обработки", Метаданные.Обработки);
Категории.Вставить("Отчеты", Метаданные.Отчеты);
Категории.Вставить("Общие формы", Метаданные.ОбщиеФормы);
Категории.Вставить("Общие команды", Метаданные.ОбщиеКоманды);
Категории.Вставить("Группы команд", Метаданные.ГруппыКоманд);
Категории.Вставить("Общие макеты", Метаданные.ОбщиеМакеты);
Категории.Вставить("Общие картинки", Метаданные.ОбщиеКартинки);
Категории.Вставить("Подсистемы", Метаданные.Подсистемы);
Категории.Вставить("Интерфейсы", Метаданные.Интерфейсы);
Категории.Вставить("Стили", Метаданные.Стили);
Категории.Вставить("Элементы стиля", Метаданные.ЭлементыСтиля);
Категории.Вставить("Цвета палитры", Метаданные.ЦветаПалитры);
Категории.Вставить("Языки", Метаданные.Языки);
Категории.Вставить("Роли", Метаданные.Роли);
Категории.Вставить("Роли автономных ограничений", Метаданные.РолиОграниченияАвтономнойКонфигурации);
Категории.Вставить("Функциональные опции", Метаданные.ФункциональныеОпции);
Категории.Вставить("Параметры функциональных опций", Метаданные.ПараметрыФункциональныхОпций);
Категории.Вставить("Критерии отбора", Метаданные.КритерииОтбора);
Категории.Вставить("Хранилища настроек", Метаданные.ХранилищаНастроек);
Категории.Вставить("HTTP-сервисы", Метаданные.HTTPСервисы);
Категории.Вставить("Web-сервисы", Метаданные.WebСервисы);
Категории.Вставить("WS-ссылки", Метаданные.WSСсылки);
Категории.Вставить("WebSocket-клиенты", Метаданные.WebSocketКлиенты);
Категории.Вставить("Сервисы интеграции", Метаданные.СервисыИнтеграции);
Категории.Вставить("Боты", Метаданные.Боты);
Категории.Вставить("Пакеты XDTO", Метаданные.ПакетыXDTO);
Категории.Вставить("Внешние источники данных", Метаданные.ВнешниеИсточникиДанных);
ВсегоОписаний = 0;
Для Каждого Категория Из Категории Цикл
Количество = Категория.Значение.Количество();
Сообщить(СтрШаблон("%1: %2", Категория.Ключ, Количество));
ВсегоОписаний = ВсегоОписаний + Количество;
КонецЦикла;
Сообщить("Учтено верхнеуровневых описаний: " + Строка(ВсегоОписаний));
Сообщить(Категории.Количество() = 50);Разбор по шагам
У каждой категории берём коллекцию метаданных напрямую из корня текущей конфигурации.
Соответствие связывает понятную подпись с коллекцией. Цикл вызывает Количество описаний, не выбирает данные прикладных таблиц.
Разделяем прикладные объекты, исполняемые модули/события, интерфейс/оформление, права/опции и интеграционные контракты.
Пустая коллекция допустима: отсутствие WebSocket-клиентов или планов расчёта не является ошибкой конфигурации.
Итог складывает только верхний уровень. Вложенные реквизиты, формы объектов и колонки сюда не включаются.
Как проверить результат
В выводе ровно 50 категорий с неотрицательными количествами.
Сверьте два значения со своим деревом Конфигурация: например, Справочники и ОбщиеМодули.
Пустая учебная база может иметь документы в метаданных и 0 документов в данных. Создание экземпляра документа не изменяет этот отчёт.
Ожидаемый результат
Получена карта состава схемы без чтения товаров, пользователей, документов и секретов интеграций.
На что обратить внимание
ОбщиеФормы не включает все формы каждого справочника: они вложены в соответствующие объекты.
Количество HTTPСервисов не доказывает публикацию, доступность или правильность HTTP-ответов.
Количество Роли не означает число пользователей и не раскрывает назначенные пользователю права.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Переставить две собственные формы в черновике начальной страницы
Создаём реальный объект НастройкиНачальнойСтраницы, читаем исходный состав, строим план из подготовленных форм и возвращаем исходные строки. readonly-свойства колонок дают массивы для изменения состава, а не для замены ссылок присваиванием.
Где и как запускать
Полный модуль общей управляемой формы УчебныйПультНачальной85. Тонкий или толстый управляемый клиент собственной пустой базы 8.5.1.1343; весь доступ к настройкам выполняется на сервере одного вызова. Две общие формы начальной страницы подготовлены в метаданных.
Подготовка
Создайте отдельную новую пустую учебную базу платформы 8.5.1.1343. Имя конфигурации в корне дерева — УчебнаяКонфигурацияНачальнойСтраницы85. Основной режим запуска — Управляемое приложение, язык встроенного языка Русский, режим совместимости Не использовать. Для наблюдения начальной страницы выберите интерфейс Такси.
В Общие → Общие формы создайте три управляемые формы: УчебнаяКарточкаНачальной85, УчебнаяЗаметкаНачальной85, УчебныйПультНачальной85. Это реальные собственные метаданные, а не внешняя незарегистрированная обработка. В коде их полные имена извлекаются через коллекцию Метаданные.ОбщиеФормы и ПолноеИмя(), а не вводятся как неизвестные строки.
В УчебнаяКарточкаНачальной85 разместите декорацию вида Надпись с заголовком Собственная учебная карточка. В УчебнаяЗаметкаНачальной85 разместите декорацию Надпись с заголовком Собственная учебная заметка. Их модули оставьте пустыми: им не нужны реквизиты, параметры, обработчики, команды, файлы или предметные данные.
В корне конфигурации откройте свойство РабочаяОбластьНачальнойСтраницы и его редактор. Задайте собственную карточку в левой колонке и собственную заметку в правой. Никаких других форм на начальную страницу стенда не добавляйте. В своей учебной роли разрешите использование двух форм начальной страницы и открытие пульта.
В УчебныйПультНачальной85 создайте строковый реквизит Протокол неограниченной длины и поле ввода ПолеПротокола, ПутьКДанным=Протокол, МногострочныйРежим=Истина, ТолькоПросмотр=Истина. Разрешите полю растягиваться по высоте. АвтоматическоеСохранениеДанныхВНастройках формы оставьте НеИспользовать.
В пульте создайте команду ПереставитьЧерновикИВернуть, её клиентское действие — одноимённая процедура. Снимите ИзменяетСохраняемыеДанные, разместите кнопку команды. Весь приведённый полный модуль вставьте в модуль этого пульта; другие обработчики ему не назначайте.
Для запуска создайте общую команду ОткрытьУчебныйПультНачальной85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы УчебнаяНачальнаяСтраница85. Полный модуль общей команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.УчебныйПультНачальной85");
КонецПроцедуры
Обновите конфигурацию только этой учебной базы и запустите тонкий или толстый управляемый клиент.Войдите новым учебным пользователем, которому доступны только подготовленные формы. Не редактируйте интерактивно его начальную страницу до опыта. Запомните фактический вид начальной страницы: собственная карточка слева, собственная заметка справа.
Состав, возвращённый новым объектом НастройкиНачальнойСтраницы, читается фактически и выводится в протокол. Урок не предполагает, что новый объект обязательно пустой или уже содержит конкретное количество форм. Исходная сигнатура строится по прочитанному объекту.
Все создаваемые настройки — локальные серверные объекты в памяти одного вызова. Их не сохраняют в ХранилищеСистемныхНастроек и не применяют к пользовательскому интерфейсу. Очистка записей не нужна. Запуск в 1С не проверялся; выполните ручные проверки на своём пустом стенде.
&НаКлиенте
Процедура ПереставитьЧерновикИВернуть(Команда)
ЭтаФорма.Протокол = ВыполнитьПерестановкуНаСервере();
КонецПроцедуры
&НаСервере
Функция ВыполнитьПерестановкуНаСервере()
МетаданныеКарточки = Метаданные.ОбщиеФормы.Найти("УчебнаяКарточкаНачальной85");
МетаданныеЗаметки = Метаданные.ОбщиеФормы.Найти("УчебнаяЗаметкаНачальной85");
Если МетаданныеКарточки = Неопределено Или МетаданныеЗаметки = Неопределено Тогда
ВызватьИсключение "Создайте обе собственные общие формы по подготовке урока";
КонецЕсли;
ИмяКарточки = МетаданныеКарточки.ПолноеИмя();
ИмяЗаметки = МетаданныеЗаметки.ПолноеИмя();
Настройки = Новый НастройкиНачальнойСтраницы;
ПрочитанныйСостав = Настройки.ПолучитьСоставФорм();
Если ТипЗнч(ПрочитанныйСостав) <> Тип("СоставФормНачальнойСтраницы") Тогда
ВызватьИсключение "Не подтверждён документированный тип состава";
КонецЕсли;
СнимокИсходного = СкопироватьСтрокиСостава(ПрочитанныйСостав);
ИсходнаяСигнатура = СигнатураСостава(СнимокИсходного);
ПереставленныйПлан = Новый СоставФормНачальнойСтраницы;
ПереставленныйПлан.ЛеваяКолонка.Добавить(ИмяЗаметки);
ПереставленныйПлан.ПраваяКолонка.Добавить(ИмяКарточки);
Настройки.УстановитьСоставФорм(ПереставленныйПлан);
ПеречитанныйПлан = Настройки.ПолучитьСоставФорм();
Если ПеречитанныйПлан.ЛеваяКолонка.Количество() <> 1 Или ПеречитанныйПлан.ПраваяКолонка.Количество() <> 1 Тогда
ВызватьИсключение "Черновик не дал по одной подготовленной форме в колонке";
КонецЕсли;
Если ПеречитанныйПлан.ЛеваяКолонка.Получить(0) <> ИмяЗаметки Тогда
ВызватьИсключение "Слева не подтверждена собственная заметка";
КонецЕсли;
Если ПеречитанныйПлан.ПраваяКолонка.Получить(0) <> ИмяКарточки Тогда
ВызватьИсключение "Справа не подтверждена собственная карточка";
КонецЕсли;
Если СигнатураСостава(СнимокИсходного) <> ИсходнаяСигнатура Тогда
ВызватьИсключение "Ручная копия исходных строк неожиданно изменилась";
КонецЕсли;
ТекстПереставленного = СигнатураСостава(ПеречитанныйПлан);
КопияДляВозврата = СкопироватьСтрокиСостава(СнимокИсходного);
Настройки.УстановитьСоставФорм(КопияДляВозврата);
ВозвращённыйСостав = Настройки.ПолучитьСоставФорм();
Если СигнатураСостава(ВозвращённыйСостав) <> ИсходнаяСигнатура Тогда
ВызватьИсключение "Исходный состав локального объекта не восстановлен";
КонецЕсли;
Результат = "Исходный состав локального объекта:" + Символы.ПС + ИсходнаяСигнатура;
Результат = Результат + Символы.ПС + "Перечитанный черновик:" + Символы.ПС + ТекстПереставленного;
Результат = Результат + Символы.ПС + "Ручная копия исходных строк сохранилась: Истина";
Результат = Результат + Символы.ПС + "Исходный состав локального объекта возвращён: Истина";
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СкопироватьСтрокиСостава(Состав)
Копия = Новый СоставФормНачальнойСтраницы;
Для Каждого ИмяФормы Из Состав.ЛеваяКолонка Цикл
Если ТипЗнч(ИмяФормы) <> Тип("Строка") Тогда
ВызватьИсключение "Левая колонка должна содержать строковые имена форм";
КонецЕсли;
Копия.ЛеваяКолонка.Добавить(ИмяФормы);
КонецЦикла;
Для Каждого ИмяФормы Из Состав.ПраваяКолонка Цикл
Если ТипЗнч(ИмяФормы) <> Тип("Строка") Тогда
ВызватьИсключение "Правая колонка должна содержать строковые имена форм";
КонецЕсли;
Копия.ПраваяКолонка.Добавить(ИмяФормы);
КонецЦикла;
Возврат Копия;
КонецФункции
&НаСервереБезКонтекста
Функция СигнатураСостава(Состав)
Возврат "Л=[" + СтрСоединить(Состав.ЛеваяКолонка, ";") + "]; П=[" + СтрСоединить(Состав.ПраваяКолонка, ";") + "]";
КонецФункции
Разбор по шагам
Откройте свой пульт общей командой и нажмите ПереставитьЧерновикИВернуть. Клиент получает только текст протокола; конструкторы и методы настроек выполняются на сервере, где они доступны в нативной справке.
Сервер проверяет точное имя стенда и наличие обеих подготовленных общих форм. Полные имена карточки и заметки получает из найденных объектов метаданных, чтобы передавать УстановитьСоставФорм настоящие имена форм.
Новый НастройкиНачальнойСтраницы — документированный конструктор. ПолучитьСоставФорм() возвращает СоставФормНачальнойСтраницы, учитывая заданный в конфигураторе состав и отличия конкретного объекта настроек. Запишите выведенный исходный состав; не подменяйте чтение предположением о пустом новом объекте.
СкопироватьСтрокиСостава создаёт новый СоставФормНачальнойСтраницы и переносит строковые имена двух колонок циклом. Присваивания Копия.ЛеваяКолонка=Массив нет: это readonly-свойство. Изменяется состав массива через Добавить.
В отдельный ПереставленныйПлан добавляем реальное полное имя собственной заметки слева и собственной карточки справа. УстановитьСоставФорм принимает объект СоставФормНачальнойСтраницы, а не один Массив или Структуру.
Повторное ПолучитьСоставФорм подтверждает ровно по одной форме в колонках и их реальные имена. Затем сравнивается ручная копия исходных строк с ранее записанной сигнатурой. Урок не приписывает самому методу ПолучитьСоставФорм гарантию глубокой независимой копии.
Для возврата создаётся ещё одна ручная копия исходного состава. УстановитьСоставФорм задаёт её тому же локальному объекту настроек; повторное чтение должно точно совпасть с фактически прочитанной исходной сигнатурой.
Вернитесь на начальную страницу клиента: карточка должна остаться слева, заметка справа. В протоколе черновика порядок обратный. Это демонстрирует разницу между локальным объектом и сохранённой пользовательской настройкой; серверное чтение не является визуальной проверкой.
Повторите кнопку. Появится новый протокол отдельного серверного вызова; настройки интерфейса и записи баз не меняются. Закройте свой пульт после опыта.
Как проверить результат
Протокол содержит фактически прочитанную исходную сигнатуру. На подготовленном стенде она должна соответствовать заданной рабочей области; если не соответствует, сначала проверьте редактор начальной страницы и права нового учебного пользователя. Код не выдаёт заранее заданный текст за прочитанные данные.
Перечитанный черновик: Л=[ОбщаяФорма.УчебнаяЗаметкаНачальной85]; П=[ОбщаяФорма.УчебнаяКарточкаНачальной85]. Проверка количества выполняется до Получить(0), поэтому пустой массив не читается по несуществующему индексу.
Есть строки Ручная копия исходных строк сохранилась: Истина и Исходный состав локального объекта возвращён: Истина. Они добавляются только после реальных сравнений и повторного чтения в коде, а не заранее.
Начальная страница клиентского приложения визуально сохраняет прежний порядок. Если ваша проверка показывает другое, остановитесь и проверьте, что в модуль не добавлены вызовы сохранения системных настроек или другое расширение интерфейса.
Ожидаемый результат
Новый локальный объект настроек прошёл чтение, перестановку двух реально подготовленных форм и восстановление собственного исходного состава. Поведение массивов проверено ручным копированием строк, исходные пользовательские настройки не сохраняются и не подменяются.
На что обратить внимание
НастройкиСписка и НастройкиСостава не являются типами этой версии. Здесь используются точные существующие имена НастройкиНачальнойСтраницы и СоставФормНачальнойСтраницы; оба имеют публичный конструктор по умолчанию.
ЛеваяКолонка и ПраваяКолонка доступны только для чтения и имеют тип Массив. readonly относится к свойству-ссылке: менять элементы полученного массива через Добавить допустимо, присваивать свойству новый массив нельзя.
УстановитьСоставФорм требует полные имена метаданных форм и игнорирует строки, не являющиеся именами форм. Передавать псевдонимы, представления, имя одной подсистемы или неизвестную форму неверно. Код использует ПолноеИмя() двух подготовленных форм.
Описание ПолучитьСоставФорм не обещает независимость возвращённых массивов от внутреннего объекта. Поэтому снимок собирается вручную из строк в новом объекте, а сохранность проверяется отдельно; не заменяйте его простым СнимокИсходного=ПрочитанныйСостав.
УстановитьСоставФорм формирует отличия внутри конкретного объекта настроек. Этот урок не выполняет сохранение объекта в системный ключ Общее/НастройкиНачальнойСтраницы; результат не является изменением реальной начальной страницы пользователя.
Строка Л=[...]; П=[...] — собственный диагностический формат урока, не формат сериализации 1С. Фактическое выполнение BSL и визуальное поведение начальной страницы требуют ручного запуска на подготовленном стенде.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.