Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, описывающих табличные части данного объекта метаданных. Элементами коллекции являются объекты типа ОбъектМетаданных: ТабличнаяЧасть.
Полное описание, параметры и ограничения
ОбъектМетаданных: ПланСчетов.ТабличныеЧасти (MetadataObject: ChartOfAccounts.TabularSections)
ОбъектМетаданных: ПланСчетов (MetadataObject: ChartOfAccounts)
ТабличныеЧасти (TabularSections)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных, описывающих табличные части данного объекта метаданных.
Элементами коллекции являются объекты типа ОбъектМетаданных: ТабличнаяЧасть.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Отделить стандартные поля счёта от признаков учёта и пользовательских реквизитов
В минимальном плане есть стандартные поля и стандартная табличная часть субконто. Пользовательские реквизиты, табличные части и признаки учёта по подготовке отсутствуют.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, корневое имя УчебныйУчет85. В рабочей БП/КА2/УТ/УНФ эти задачи не запускайте. Это технический пример API, не готовый бухгалтерский учёт.
Планы видов характеристик → Добавить: УчебныеАналитики85. Тип значения только Строка 30. Элементы, дополнительные реквизиты, табличные части и предопределённые значения не создавайте.
Планы счетов → Добавить: УчебныеСчета85. ДлинаКода 10, МаскаКода @@@.@@@.@@, ДлинаНаименования 100, ДлинаПорядка 20. АвтоПорядокПоКоду выключен, КонтрольУникальности включён. ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=2.
У плана счетов не создавайте пользовательские реквизиты, табличные части, признаки учёта/субконто, предопределённые счета, формы, команды, макеты и дополнительные индексы. Модули оставьте пустыми. Историю данных и два флага обработки её версий выключите. Расширений нет.
Обновите конфигурацию БД. Создайте серверный обработчик ВыполнитьПример() Экспорт в собственной обработке. Фрагмент вставляйте в тело; запускайте уроки по отдельности.
Объекты создаются только в памяти: Записать/Удалить/Заблокировать не вызываются. Регистров бухгалтерии, проводок и фактических остатков в этом примере нет.
Описание = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный план УчебныеСчета85";
КонецЕсли;
Если Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Описание.ДлинаПорядка <> 20 Или Описание.МаскаКода <> "@@@.@@@.@@"
Или Описание.АвтоПорядокПоКоду Или Описание.МаксКоличествоСубконто <> 2 Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.ВидыСубконто = Неопределено Тогда
ВызватьИсключение "Назначьте собственный план аналитик";
КонецЕсли;
Если Описание.ВидыСубконто.Имя <> "УчебныеАналитики85" Тогда
ВызватьИсключение "Нужны только собственные учебные аналитики";
КонецЕсли;
Менеджер = ПланыСчетов.УчебныеСчета85;
Для Каждого Поле Из Описание.СтандартныеРеквизиты Цикл
Сообщить("Стандартное поле: " + Поле.Имя);
КонецЦикла;
Для Каждого Часть Из Описание.СтандартныеТабличныеЧасти Цикл
Сообщить("Стандартная часть: " + Часть.Имя);
КонецЦикла;
Сообщить(Описание.Реквизиты.Количество() = 0);
Сообщить(Описание.ТабличныеЧасти.Количество() = 0);
Сообщить(Описание.ПризнакиУчета.Количество() = 0);
Сообщить(Описание.ПризнакиУчетаСубконто.Количество() = 0);
Сообщить(Описание.ДополнительныеИндексы.Количество() = 0);
Сообщить(Описание.Команды.Количество() = 0);
Сообщить(Описание.Макеты.Количество() = 0);
Сообщить(Описание.МодульОбъекта = Неопределено);
Сообщить(Описание.МодульМенеджера = Неопределено);
Сообщить(Описание.Справка = Неопределено);
Сообщить(Описание.Предопределенные = Неопределено);
Сообщить(Описание.ПолучитьИменаПредопределенных().Количество() = 0);
Сообщить(Описание.КонтрольУникальности);
Сообщить("Описаний характеристик: " + Строка(Описание.Характеристики.Количество()));
Для Каждого ПолеБлокировки Из Описание.ПоляБлокировкиДанных Цикл
Сообщить("Поле блокировки: " + ПолеБлокировки.Имя);
КонецЦикла;
Сообщить("Режим блокировки: " + Строка(Описание.РежимУправленияБлокировкойДанных));Разбор по шагам
Стандартные поля и табличные части перебираем через Имя. Не используем отсутствующий Найти у коллекции стандартных реквизитов.
ПризнакиУчета и ПризнакиУчетаСубконто — определения схемы, не сами виды субконто и не движения.
МодульОбъекта/МодульМенеджера/Справка/Предопределенные имеют текущий контракт Неопределено. Для списка имён предопределённых используем специальный метод.
КонтрольУникальности читаем по подготовке; не записываем два одинаковых кода для проверки.
ПоляБлокировкиДанных и режим только читаются. Установка блокировки не выполняется.
Как проверить результат
Тринадцать логических проверок дают Истина.
В выводе стандартной части видны ВидыСубконто, хотя коллекция пользовательских ТабличныеЧасти пуста.
Ожидаемый результат
Показан состав схемы счёта и отделены стандартные, пользовательские и недоступные через API данные.
На что обратить внимание
Неопределено у свойства модуля не доказывает отсутствие BSL.
Пустая пользовательская коллекция не означает отсутствие стандартных полей/частей.
Историю, регистр бухгалтерии и пользовательские права этот урок не анализирует.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отличить описание ВидыСубконто от строк собственного незаписанного счета
Собственная минимальная схема плана дает реальное readonly-описание стандартной части. Строим диагностический отчет, разбираем все настройки и типы полей, затем сравниваем одну системную часть схемы с нулем строк нового счета в памяти.
Где и как запускать
Полный серверный общий модуль УчебныеСтандартныеЧасти85 собственной конфигурации и отдельный полный клиент-серверный модуль формы. В1С не запускался.
Подготовка
НОВАЯ отдельная пустая файловая база платформы8.5.1.1343. Имя конфигурации УчебныеСтандартныеЧасти85, совместимость Не использовать, основной язык Русский. Не использовать БП/КА2/УТ/УНФ и другие рабочие базы. Это технический опыт метаданных, не настройка бухгалтерского учета.
Конфигуратор → Планы видов характеристик → Добавить → УчебныеАналитики85: тип значения характеристик только Строка30, без дополнительных реквизитов, табличных частей, элементов и предопределенных значений. Все модули оставить пустыми.
Конфигуратор → Планы счетов → Добавить → УчебныеСчета85. Длина кода10, длина наименования100, ВидыСубконто=ПланВидовХарактеристик.УчебныеАналитики85, максимальное количество субконто2. ВидыСубконто — стандартная часть платформы: не добавлять пользовательскую часть с таким же именем.
В собственном плане не создавать реквизиты, пользовательские табличные части, признаки учета, признаки учета субконто, счета, предопределенные счета, формы, макеты и команды. Модуль объекта и модуль менеджера вручную проверить: полностью пусты. Не создавать регистры бухгалтерии, подписки, задания, общие реквизиты и расширения; других прикладных объектов нет.
Общие модули → УчебныеСтандартныеЧасти85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить весь основной модуль. Собственная внешняя обработка → управляемая Форма → команда/кнопка Выполнить, действие Выполнить. Весь отдельный модуль формы приведен ниже. Будущая ручная подготовка: сохранить и обновить только собственную базу F7.
Комментарий, синоним, подсказку и проверку заполнения стандартной части не подменять BSL-присваиванием. Отчет читает фактические настройки собственной схемы; пустой текст допустим, точные локализованные подписи заранее не обещаются. Учебные счета и аналитики в базу вручную не вводить: созданный кодом счет остается в памяти.
Функция ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
ОписаниеПлана = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
Аналитики = Метаданные.ПланыВидовХарактеристик.Найти("УчебныеАналитики85");
Если ОписаниеПлана = Неопределено Или Аналитики = Неопределено Тогда
ВызватьИсключение "Подготовьте только собственные УчебныеСчета85 и УчебныеАналитики85";
КонецЕсли;
Если ОписаниеПлана.ВидыСубконто <> Аналитики Или ОписаниеПлана.МаксКоличествоСубконто <> 2
Или ОписаниеПлана.ДлинаКода <> 10 Или ОписаниеПлана.ДлинаНаименования <> 100
Или ОписаниеПлана.Реквизиты.Количество() <> 0 Или ОписаниеПлана.ТабличныеЧасти.Количество() <> 0
Или ОписаниеПлана.ПризнакиУчета.Количество() <> 0 Или ОписаниеПлана.ПризнакиУчетаСубконто.Количество() <> 0 Тогда
ВызватьИсключение "Схема собственного плана не соответствует подготовке";
КонецЕсли;
Части = ОписаниеПлана.СтандартныеТабличныеЧасти;
Если ТипЗнч(Части) <> Тип("ОписанияСтандартныхТабличныхЧастей") Тогда
ВызватьИсключение "Нужна настоящая коллекция описаний стандартных частей";
КонецЕсли;
СистемнаяЧасть = Неопределено;
КоличествоОписаний = 0;
Для Каждого Часть Из Части Цикл
КоличествоОписаний = КоличествоОписаний + 1;
Если Часть.Имя = "ВидыСубконто" Тогда
СистемнаяЧасть = Часть;
КонецЕсли;
КонецЦикла;
Если КоличествоОписаний <> 1 Или СистемнаяЧасть = Неопределено Тогда
ВызватьИсключение "Ожидается одно реальное описание ВидыСубконто собственного плана";
КонецЕсли;
Если ТипЗнч(СистемнаяЧасть) <> Тип("ОписаниеСтандартнойТабличнойЧасти")
Или Части[0].Имя <> СистемнаяЧасть.Имя Тогда
ВызватьИсключение "Не совпали native-тип описания и допустимый индекс0";
КонецЕсли;
Отчет = "СХЕМА СОБСТВЕННОГО ПЛАНА, НЕ СТРОКИ СЧЕТА" + Символы.ПС;
Отчет = Отчет + "Техническое имя: " + СистемнаяЧасть.Имя + Символы.ПС;
Отчет = Отчет + "Представление: " + СистемнаяЧасть.Представление() + Символы.ПС;
Отчет = Отчет + "Синоним: " + СистемнаяЧасть.Синоним + Символы.ПС;
Отчет = Отчет + "Комментарий: " + СистемнаяЧасть.Комментарий + Символы.ПС;
Отчет = Отчет + "Подсказка: " + СистемнаяЧасть.Подсказка + Символы.ПС;
Если СистемнаяЧасть.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку Тогда
Отчет = Отчет + "Настройка заполнения: ВыдаватьОшибку. Проверка объекта в этом опыте не выполнялась" + Символы.ПС;
ИначеЕсли СистемнаяЧасть.ПроверкаЗаполнения = ПроверкаЗаполнения.НеПроверять Тогда
Отчет = Отчет + "Настройка заполнения: НеПроверять. Это не разрешение любого бухгалтерского учета" + Символы.ПС;
Иначе
ВызватьИсключение "Получен неописанный вариант проверки заполнения";
КонецЕсли;
Поля = СистемнаяЧасть.СтандартныеРеквизиты;
Если ТипЗнч(Поля) <> Тип("ОписанияСтандартныхРеквизитов") Или Поля.Количество() = 0 Тогда
ВызватьИсключение "Описание должно содержать настоящие настройки стандартных полей";
КонецЕсли;
КоличествоПолей = 0;
Для Каждого Поле Из Поля Цикл
Если ТипЗнч(Поле) <> Тип("ОписаниеСтандартногоРеквизита") Тогда
ВызватьИсключение "Получено не описание стандартного реквизита";
КонецЕсли;
КоличествоПолей = КоличествоПолей + 1;
Отчет = Отчет + "Стандартное поле: " + Поле.Имя + "; описание типов: " + Строка(Поле.Тип) + Символы.ПС;
КонецЦикла;
Если КоличествоПолей <> Поля.Количество() Тогда
ВызватьИсключение "Счетчик обхода не совпал с количеством описаний полей";
КонецЕсли;
Счет = ПланыСчетов.УчебныеСчета85.СоздатьСчет();
Счет.Код = "85";
Счет.Наименование = "Свой незаписанный учебный счет";
СтрокиСчета = Счет.ВидыСубконто;
Если СтрокиСчета.Количество() <> 0 Тогда
ВызватьИсключение "В новом собственном счете неожиданно появились строки";
КонецЕсли;
Отчет = Отчет + "Свой счет: " + Счет.Код + " / " + Счет.Наименование + Символы.ПС;
Отчет = Отчет + "Описаний стандартных частей: " + Строка(КоличествоОписаний) + Символы.ПС;
Отчет = Отчет + "Описаний стандартных полей: " + Строка(КоличествоПолей) + Символы.ПС;
Отчет = Отчет + "Строк ВидыСубконто у своего нового счета: " + Строка(СтрокиСчета.Количество()) + Символы.ПС;
Отчет = Отчет + "Пользовательских табличных частей: " + Строка(ОписаниеПлана.ТабличныеЧасти.Количество()) + Символы.ПС;
Отчет = Отчет + "Изменен только свой новый объект в памяти. Записи, проводки и проверки заполнения не выполнялись";
Возврат Отчет;
КонецФункции
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 1 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 1 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыУчебныеСтандартныеЧасти85.Форма
Собственная внешняя обработка → управляемая Форма → Модуль
Полный отдельный модуль формы; на клиент возвращается только отчет. В1С не выполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
Отчет = ВыполнитьНаСервере();
Сообщить(Отчет);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
Возврат УчебныеСтандартныеЧасти85.ВыполнитьПример();
КонецФункцииРазбор по шагам
Сначала проверяются состав собственной конфигурации, отсутствие расширений. Затем два Найти получают реальные объекты метаданных. Проверка Неопределено предшествует чтению их настроек; связь ВидыСубконто сравнивается с собственными метаданными плана характеристик, не со строкой имени.
СтандартныеТабличныеЧасти возвращает ОписанияСтандартныхТабличныхЧастей. В этой коллекции справка не описывает Найти, Получить и Количество. Поэтому счетчик строится обычным обходом Для Каждого, а искомая часть выбирается по техническому Имя. Только после подтверждения одного описания допустимо обращение Части[0].
Реальный элемент имеет тип ОписаниеСтандартнойТабличнойЧасти. У него нет используемого здесь конструктора: создавать Новый ОписаниеСтандартнойТабличнойЧасти или передавать неизвестный объект не требуется. Техническое имя ВидыСубконто отдельно от пользовательского Представление(), Синоним, Комментарий и Подсказка; каждый текст попадает в отчет.
ПроверкаЗаполнения читается как системное перечисление и выбирает пояснение отчета. ВыдаватьОшибку описывает настройку, но ее чтение не вызывает проверку нового счета. НеПроверять не означает готовность произвольного объекта к бухгалтерскому учету. Значение проверки заранее не подменяется учебной константой.
СтандартныеРеквизиты дает другую настоящую коллекцию — ОписанияСтандартныхРеквизитов. У нее Количество действительно есть. Перебор выводит имена и описания типов полей и сверяет число элементов со счетчиком. Это схема полей, а не значения аналитик и не строки табличной части.
СоздатьСчет() создает только свой новый объект в памяти. Код85 и наименование заданы локально, Записать отсутствует. Его ВидыСубконто — уже специализированная коллекция строк, не описание метаданных. У собственного нового счета проверяется0 строк; в схеме при этом1 стандартная часть, а пользовательских частей0.
Сервер возвращает одну строку отчета клиентской форме; объекты метаданных и новый счет клиенту не передаются. Отчет нельзя считать доказательством проводок, прав записи, наличия остатков или успешной записи счета.
Как проверить результат
Будущий результат: в отчете есть техническое имя ВидыСубконто, реальные текстовые настройки, одна из двух веток политики заполнения и реальные имена/типы стандартных полей. Описаний стандартных частей1, пользовательских частей0, строк в собственном новом счете0. Количество полей не выдумано: оно вычисляется из настоящей коллекции.
Будущий отрицательный контроль: в собственной конфигурации измените только имя плана УчебныеСчета85 на ИнойУчебныйПлан85 и обновите свой стенд. Проверка должна остановиться после Найти до чтения стандартной части и создания счета. Верните исходное имя после опыта.
Будущий отрицательный контроль схемы: измените только МаксКоличествоСубконто с2 на1. Аудит должен отклонить отличающуюся схему до обхода частей и создания счета. После опыта вернуть2. Не проверять ошибку изменением рабочего плана.
runtimeVerifiedScenarios=0: конфигуратор, форма, серверный модуль и СоздатьСчет здесь не запускались. Выполнены только проверки исходников и native-контрактов установленной справки. Код не записывает и не удаляет счета, аналитики, файлы или проводки.
Ожидаемый результат
Получен содержательный отчет собственной схемы: отдельно проверены настройки стандартной части, описания ее полей и пустые строки нового незаписанного счета.
На что обратить внимание
Все шесть свойств описания стандартной части readonly. Ни одно не присваивается; изменение схемы выполняется только будущей ручной подготовкой своего Конфигуратора, не заменой чтения на фиктивное значение.
Коллекции стандартных частей, стандартных реквизитов и строк счета имеют разные API. Не переносить Количество/Найти одной коллекции на другую. Индекс0 используется только после доказанного количества1; имя здесь техническое и не зависит от синонима.
Представление и Синоним могут зависеть от языка и настроек. У пустых Комментарий/Подсказка нет ошибки: это отсутствие текста, а не отсутствие стандартной части. Отчет не проверяет появление подсказки в интерфейсе.
Чтение ПроверкаЗаполнения не запускает ПроверитьЗаполнение и не доказывает возможность записи счета. Здесь не проводится отрицательный опыт реальной записи и не проверяются бухгалтерские требования.
Проверки состава и расширений не доказывают пустоту модулей. Поэтому подготовка требует вручную проверить пустые модуль объекта, менеджера и остальные модули собственного стенда. СоздатьСчет нельзя запускать в рабочем плане с чужими обработчиками.
ВидыСубконто у объекта метаданных плана — ссылка на метаданные плана характеристик; у описания стандартной части — техническое имя; у объекта счета — строки настройки аналитик. Эти три одноименных смысла не заменяют друг друга.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.