ОбъектМетаданных: ПланСчетов.ТабличныеЧасти

Свойства · TabularSections

Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, описывающих табличные части данного объекта метаданных. Элементами коллекции являются объекты типа ОбъектМетаданных: ТабличнаяЧасть.

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

ОбъектМетаданных: ПланСчетов.ТабличныеЧасти (MetadataObject: ChartOfAccounts.TabularSections)

ОбъектМетаданных: ПланСчетов (MetadataObject: ChartOfAccounts)

ТабличныеЧасти (TabularSections)

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

Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных, описывающих табличные части данного объекта метаданных.
Элементами коллекции являются объекты типа ОбъектМетаданных: ТабличнаяЧасть.
Доступность:

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Отделить стандартные поля счёта от признаков учёта и пользовательских реквизитов

В минимальном плане есть стандартные поля и стандартная табличная часть субконто. Пользовательские реквизиты, табличные части и признаки учёта по подготовке отсутствуют.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу, корневое имя УчебныйУчет85. В рабочей БП/КА2/УТ/УНФ эти задачи не запускайте. Это технический пример API, не готовый бухгалтерский учёт.

  2. Планы видов характеристик → Добавить: УчебныеАналитики85. Тип значения только Строка 30. Элементы, дополнительные реквизиты, табличные части и предопределённые значения не создавайте.

  3. Планы счетов → Добавить: УчебныеСчета85. ДлинаКода 10, МаскаКода @@@.@@@.@@, ДлинаНаименования 100, ДлинаПорядка 20. АвтоПорядокПоКоду выключен, КонтрольУникальности включён. ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=2.

  4. У плана счетов не создавайте пользовательские реквизиты, табличные части, признаки учёта/субконто, предопределённые счета, формы, команды, макеты и дополнительные индексы. Модули оставьте пустыми. Историю данных и два флага обработки её версий выключите. Расширений нет.

  5. Обновите конфигурацию БД. Создайте серверный обработчик ВыполнитьПример() Экспорт в собственной обработке. Фрагмент вставляйте в тело; запускайте уроки по отдельности.

  6. Объекты создаются только в памяти: Записать/Удалить/Заблокировать не вызываются. Регистров бухгалтерии, проводок и фактических остатков в этом примере нет.

Описание = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Сначала создайте собственный план УчебныеСчета85";
КонецЕсли;
Если Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
    Или Описание.ДлинаПорядка <> 20 Или Описание.МаскаКода <> "@@@.@@@.@@"
    Или Описание.АвтоПорядокПоКоду Или Описание.МаксКоличествоСубконто <> 2 Тогда
    ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.ВидыСубконто = Неопределено Тогда
    ВызватьИсключение "Назначьте собственный план аналитик";
КонецЕсли;
Если Описание.ВидыСубконто.Имя <> "УчебныеАналитики85" Тогда
    ВызватьИсключение "Нужны только собственные учебные аналитики";
КонецЕсли;
Менеджер = ПланыСчетов.УчебныеСчета85;
Для Каждого Поле Из Описание.СтандартныеРеквизиты Цикл
    Сообщить("Стандартное поле: " + Поле.Имя);
КонецЦикла;
Для Каждого Часть Из Описание.СтандартныеТабличныеЧасти Цикл
    Сообщить("Стандартная часть: " + Часть.Имя);
КонецЦикла;
Сообщить(Описание.Реквизиты.Количество() = 0);
Сообщить(Описание.ТабличныеЧасти.Количество() = 0);
Сообщить(Описание.ПризнакиУчета.Количество() = 0);
Сообщить(Описание.ПризнакиУчетаСубконто.Количество() = 0);
Сообщить(Описание.ДополнительныеИндексы.Количество() = 0);
Сообщить(Описание.Команды.Количество() = 0);
Сообщить(Описание.Макеты.Количество() = 0);
Сообщить(Описание.МодульОбъекта = Неопределено);
Сообщить(Описание.МодульМенеджера = Неопределено);
Сообщить(Описание.Справка = Неопределено);
Сообщить(Описание.Предопределенные = Неопределено);
Сообщить(Описание.ПолучитьИменаПредопределенных().Количество() = 0);
Сообщить(Описание.КонтрольУникальности);
Сообщить("Описаний характеристик: " + Строка(Описание.Характеристики.Количество()));
Для Каждого ПолеБлокировки Из Описание.ПоляБлокировкиДанных Цикл
    Сообщить("Поле блокировки: " + ПолеБлокировки.Имя);
КонецЦикла;
Сообщить("Режим блокировки: " + Строка(Описание.РежимУправленияБлокировкойДанных));

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

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

  2. ПризнакиУчета и ПризнакиУчетаСубконто — определения схемы, не сами виды субконто и не движения.

  3. МодульОбъекта/МодульМенеджера/Справка/Предопределенные имеют текущий контракт Неопределено. Для списка имён предопределённых используем специальный метод.

  4. КонтрольУникальности читаем по подготовке; не записываем два одинаковых кода для проверки.

  5. ПоляБлокировкиДанных и режим только читаются. Установка блокировки не выполняется.

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

  1. Тринадцать логических проверок дают Истина.

  2. В выводе стандартной части видны ВидыСубконто, хотя коллекция пользовательских ТабличныеЧасти пуста.

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

Показан состав схемы счёта и отделены стандартные, пользовательские и недоступные через API данные.

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

  1. Неопределено у свойства модуля не доказывает отсутствие BSL.

  2. Пустая пользовательская коллекция не означает отсутствие стандартных полей/частей.

  3. Историю, регистр бухгалтерии и пользовательские права этот урок не анализирует.

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

Отличить описание ВидыСубконто от строк собственного незаписанного счета

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

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

Полный серверный общий модуль УчебныеСтандартныеЧасти85 собственной конфигурации и отдельный полный клиент-серверный модуль формы. В1С не запускался.

Подготовка

  1. НОВАЯ отдельная пустая файловая база платформы8.5.1.1343. Имя конфигурации УчебныеСтандартныеЧасти85, совместимость Не использовать, основной язык Русский. Не использовать БП/КА2/УТ/УНФ и другие рабочие базы. Это технический опыт метаданных, не настройка бухгалтерского учета.

  2. Конфигуратор → Планы видов характеристик → Добавить → УчебныеАналитики85: тип значения характеристик только Строка30, без дополнительных реквизитов, табличных частей, элементов и предопределенных значений. Все модули оставить пустыми.

  3. Конфигуратор → Планы счетов → Добавить → УчебныеСчета85. Длина кода10, длина наименования100, ВидыСубконто=ПланВидовХарактеристик.УчебныеАналитики85, максимальное количество субконто2. ВидыСубконто — стандартная часть платформы: не добавлять пользовательскую часть с таким же именем.

  4. В собственном плане не создавать реквизиты, пользовательские табличные части, признаки учета, признаки учета субконто, счета, предопределенные счета, формы, макеты и команды. Модуль объекта и модуль менеджера вручную проверить: полностью пусты. Не создавать регистры бухгалтерии, подписки, задания, общие реквизиты и расширения; других прикладных объектов нет.

  5. Общие модули → УчебныеСтандартныеЧасти85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить весь основной модуль. Собственная внешняя обработка → управляемая Форма → команда/кнопка Выполнить, действие Выполнить. Весь отдельный модуль формы приведен ниже. Будущая ручная подготовка: сохранить и обновить только собственную базу F7.

  6. Комментарий, синоним, подсказку и проверку заполнения стандартной части не подменять 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.ВыполнитьПример();
КонецФункции

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

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

  2. СтандартныеТабличныеЧасти возвращает ОписанияСтандартныхТабличныхЧастей. В этой коллекции справка не описывает Найти, Получить и Количество. Поэтому счетчик строится обычным обходом Для Каждого, а искомая часть выбирается по техническому Имя. Только после подтверждения одного описания допустимо обращение Части[0].

  3. Реальный элемент имеет тип ОписаниеСтандартнойТабличнойЧасти. У него нет используемого здесь конструктора: создавать Новый ОписаниеСтандартнойТабличнойЧасти или передавать неизвестный объект не требуется. Техническое имя ВидыСубконто отдельно от пользовательского Представление(), Синоним, Комментарий и Подсказка; каждый текст попадает в отчет.

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

  5. СтандартныеРеквизиты дает другую настоящую коллекцию — ОписанияСтандартныхРеквизитов. У нее Количество действительно есть. Перебор выводит имена и описания типов полей и сверяет число элементов со счетчиком. Это схема полей, а не значения аналитик и не строки табличной части.

  6. СоздатьСчет() создает только свой новый объект в памяти. Код85 и наименование заданы локально, Записать отсутствует. Его ВидыСубконто — уже специализированная коллекция строк, не описание метаданных. У собственного нового счета проверяется0 строк; в схеме при этом1 стандартная часть, а пользовательских частей0.

  7. Сервер возвращает одну строку отчета клиентской форме; объекты метаданных и новый счет клиенту не передаются. Отчет нельзя считать доказательством проводок, прав записи, наличия остатков или успешной записи счета.

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

  1. Будущий результат: в отчете есть техническое имя ВидыСубконто, реальные текстовые настройки, одна из двух веток политики заполнения и реальные имена/типы стандартных полей. Описаний стандартных частей1, пользовательских частей0, строк в собственном новом счете0. Количество полей не выдумано: оно вычисляется из настоящей коллекции.

  2. Будущий отрицательный контроль: в собственной конфигурации измените только имя плана УчебныеСчета85 на ИнойУчебныйПлан85 и обновите свой стенд. Проверка должна остановиться после Найти до чтения стандартной части и создания счета. Верните исходное имя после опыта.

  3. Будущий отрицательный контроль схемы: измените только МаксКоличествоСубконто с2 на1. Аудит должен отклонить отличающуюся схему до обхода частей и создания счета. После опыта вернуть2. Не проверять ошибку изменением рабочего плана.

  4. runtimeVerifiedScenarios=0: конфигуратор, форма, серверный модуль и СоздатьСчет здесь не запускались. Выполнены только проверки исходников и native-контрактов установленной справки. Код не записывает и не удаляет счета, аналитики, файлы или проводки.

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

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

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

  1. Все шесть свойств описания стандартной части readonly. Ни одно не присваивается; изменение схемы выполняется только будущей ручной подготовкой своего Конфигуратора, не заменой чтения на фиктивное значение.

  2. Коллекции стандартных частей, стандартных реквизитов и строк счета имеют разные API. Не переносить Количество/Найти одной коллекции на другую. Индекс0 используется только после доказанного количества1; имя здесь техническое и не зависит от синонима.

  3. Представление и Синоним могут зависеть от языка и настроек. У пустых Комментарий/Подсказка нет ошибки: это отсутствие текста, а не отсутствие стандартной части. Отчет не проверяет появление подсказки в интерфейсе.

  4. Чтение ПроверкаЗаполнения не запускает ПроверитьЗаполнение и не доказывает возможность записи счета. Здесь не проводится отрицательный опыт реальной записи и не проверяются бухгалтерские требования.

  5. Проверки состава и расширений не доказывают пустоту модулей. Поэтому подготовка требует вручную проверить пустые модуль объекта, менеджера и остальные модули собственного стенда. СоздатьСчет нельзя запускать в рабочем плане с чужими обработчиками.

  6. ВидыСубконто у объекта метаданных плана — ссылка на метаданные плана характеристик; у описания стандартной части — техническое имя; у объекта счета — строки настройки аналитик. Эти три одноименных смысла не заменяют друг друга.

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

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

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

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

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