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

Методы · Presentation

Получает строковое представление объекта метаданных. Как правило, в качестве строкового представления выступает синоним, а при его отсутствии - имя объекта метаданных, как оно задано в Конфигураторе.

Синтаксис

Представление()

Примеры платформы

Для каждого Объект Из Метаданные.Справочники Цикл
    Сообщить(Объект.Представление());
КонецЦикла;
Полное описание, параметры и ограничения

ОбъектМетаданных: Перерасчет.Представление (MetadataObject: Recalculation.Presentation)

ОбъектМетаданных: Перерасчет (MetadataObject: Recalculation)

Представление (Presentation)

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

Синтаксис:
Представление()
Возвращаемое значение:
Тип: Строка.

Описание:

Получает строковое представление объекта метаданных. Как правило, в качестве строкового представления выступает синоним, а при его отсутствии - имя объекта метаданных, как оно задано в Конфигураторе.

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

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

Пример:

Для каждого Объект Из Метаданные.Справочники Цикл
Сообщить(Объект.Представление());
КонецЦикла;

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

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

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

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

Проверить описание перерасчёта и связь его измерения с регистром

Убедимся, что Очередь85 относится к нужному регистру, имеет подготовленный режим блокировок и использует настоящее родительское измерение. Записи очереди и расчётные данные не читаются.

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

Полный обычный клиентский общий модуль УчебныеСтруктуры85, только толстый клиент; полный модуль своей формы отдельным блоком. Не выполнялся.

Подготовка

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

  2. Общий модуль УчебныеСтруктуры85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, прочие клиентские флаги=Нет. Вставьте полный основной модуль одного выбранного урока. Для следующего урока заменяйте весь текст, поскольку точка входа одинакова.

  3. Создайте обработку УчебныеСтруктуры85, обычную основную форму Пульт, кнопку Выполнить с действием ВыполнитьНажатие. Полный модуль формы приведён отдельным блоком ниже. После подготовки выполните F7 и обновите только собственный стенд; документы не создавайте и не проводите.

  4. Общие → Интерфейсы: УчебныйПереключаемый85, Переключаемый=Да, и УчебныйПостоянный85, Переключаемый=Нет. Синонимы Учебный переключаемый/Учебный постоянный, комментарии guide-switchable-85/guide-always-85. Это обычные интерфейсы, не подсистемы управляемого приложения. Не назначайте интерфейс чужому пользователю.

  5. Документы → УчебныйДокумент85: проведение Разрешить, модуль объекта пустой. Реквизит Ключ85, только Строка(20), переменная длина. Табличная часть Строки85, синоним Учебные строки, комментарий guide-section-85; единственный реквизит Название85, только Строка(40). Движения включают два собственных регистра, описанных далее; код проведения не пишите.

  6. Регистры накопления → УчебныеОстатки85, вид Остатки, измерение Ключ85 только Строка(20), ресурс Количество85 только Число(10,0). Регистратор только УчебныйДокумент85. Последовательности → УчебнаяОчередь85: Документы только УчебныйДокумент85, Движения только УчебныеОстатки85, перемещение границы НеПеремещать. Измерение Ключ85 только Строка(20). В настройке соответствия документам выберите реквизит Ключ85 своего документа; в соответствии движениям — измерение Ключ85 своего регистра накопления. Никаких записей, границ или восстановлений последовательности урок не создаёт.

  7. Планы видов расчёта → УчебныеНачисления85: период действия выключен, зависимость НеИспользовать, без базовых планов, предопределённых видов и кода. Регистры расчёта → УчебныйРасчет85: план УчебныеНачисления85, периодичность Месяц, период действия и базовый период выключены, измерение Ключ85 Строка(20), ресурс Результат85 Число(12,2), регистратор УчебныйДокумент85. Перерасчеты → Очередь85: режим блокировок Автоматический, одно измерение Ключ85, ИзмерениеРегистра=Ключ85 родительского регистра; данные ведущих регистров пустые, модуль набора пустой. Это определения, не расчёт зарплаты.

  8. Для урока CFE только в Конфигураторе своего стенда подготовьте собственное новое расширение УчебноеРасширение85 с префиксом Уч85_ и одним собственным справочником Уч85_Заметки, синоним Учебные заметки. Без заимствованных объектов, модулей, подписок и заданий. Сохраните ЕГО в локальный файл C:\1CStudy85\УчебноеРасширение85.cfe через команду сохранения расширения; папку создайте самостоятельно. Не применяйте расширение к конфигурации базы и не активируйте. Этот файл не приложен и здесь не создавался; код читает только файл, конструктор не устанавливает расширение.

  9. Будущий запуск — только Пульт своего толстого клиента. Отчёт открывается в новом табличном документе в памяти; не печатайте и не сохраняйте через команды окна. Статический аудит структуры не подтверждает расчёты, проведение, границы последовательности или применение расширения.

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

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеСтруктуры85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Процедура ДобавитьСвойПаспорт(Таблица, МД, ОжидаемоеИмя, ОжидаемыйРодитель)
    Если МД.Имя <> ОжидаемоеИмя Или МД.Родитель() <> ОжидаемыйРодитель Тогда
        ВызватьИсключение "Не совпало имя или родитель собственного объекта метаданных";
    КонецЕсли;
    Если МД.ПринадлежностьОбъекта <> Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный
        Или МД.РасширениеКонфигурации() <> Неопределено Или МД.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Опыт предназначен только для своих объектов без расширений";
    КонецЕсли;
    ПолноеИмя = МД.ПолноеИмя();
    Если ПустаяСтрока(ПолноеИмя) Или ПустаяСтрока(МД.Представление()) Тогда
        ВызватьИсключение "У собственного объекта нет полного имени или представления";
    КонецЕсли;
    ДобавитьСтроку(Таблица, ПолноеИмя, "Имя", МД.Имя);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Синоним", МД.Синоним);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Представление", МД.Представление());
    ДобавитьСтроку(Таблица, ПолноеИмя, "Комментарий", МД.Комментарий);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Принадлежность", МД.ПринадлежностьОбъекта);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Привязка заимствованного объекта", МД.ОбъектРасширяемойКонфигурации);
КонецПроцедуры

Процедура ДобавитьСтроку(Таблица, Объект, Свойство, Значение)
    СтрокаПаспорта = Таблица.Добавить();
    СтрокаПаспорта.Объект = Объект;
    СтрокаПаспорта.Свойство = Свойство;
    СтрокаПаспорта.Значение = Строка(Значение);
КонецПроцедуры

Функция СоздатьСвоюТаблицу()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Объект");
    Таблица.Колонки.Добавить("Свойство");
    Таблица.Колонки.Добавить("Значение");
    Возврат Таблица;
КонецФункции

Процедура ПоказатьСвойПаспорт(Таблица, Заголовок)
    Если Таблица.Количество() = 0 Тогда
        ВызватьИсключение "Собственный паспорт пуст";
    КонецЕсли;
    Документ = Новый ТабличныйДокумент;
    Документ.Область("R1C1").Текст = "Объект";
    Документ.Область("R1C2").Текст = "Свойство";
    Документ.Область("R1C3").Текст = "Значение";
    Номер = 2;
    Для Каждого Запись Из Таблица Цикл
        Документ.Область(Номер, 1).Текст = Запись.Объект;
        Документ.Область(Номер, 2).Текст = Запись.Свойство;
        Документ.Область(Номер, 3).Текст = Запись.Значение;
        Номер = Номер + 1;
    КонецЦикла;
    Документ.Показать(Заголовок, "", Истина);
КонецПроцедуры
УчебныеСтруктуры85.Пульт

УчебныеСтруктуры85 → Обработки → УчебныеСтруктуры85 → Формы → Пульт → Модуль

Полный модуль обычной формы собственного стенда; не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеСтруктуры85.ВыполнитьПример();
КонецПроцедуры

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

  1. ПроверитьСвойКонтекст требует точную 8.5.1.1343, свой стенд, отключённую совместимость и отсутствие активной транзакции. Работаем с описаниями, не бизнес-объектами.

  2. ДобавитьСвойПаспорт разделяет программное Имя, Синоним и Представление. ПолноеИмя нужно для отчёта, Родитель сравнивается с фактическим объектом, а не с подписью.

  3. ПринадлежностьОбъекта, РасширениеКонфигурации и ЕстьИзмененияРасширениямиКонфигурации проверяются отдельно. ОбъектРасширяемойКонфигурации выводится как привязка заимствования, не выдаётся за самостоятельную проверку отсутствия расширений.

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

  5. Перерасчеты находится у МДРегистра. Родитель Очередь85 должен быть найденный УчебныйРасчет85, не корень конфигурации.

  6. МодульНабораЗаписей всегда Неопределено, даже если исходный текст существует. Не вызываем его и не объявляем неопределённость ошибкой отсутствующего модуля.

  7. РежимУправленияБлокировкойДанных — настройка объекта. Проверяем значение Автоматический из правильного перечисления, не текущую блокировку или режим чужой транзакции.

  8. КлючПерерасчета и КлючРегистра — два разных описания. ИзмерениеРегистра у первого должно ссылаться именно на второе; совпадение текста Ключ85 недостаточно.

  9. ДанныеВедущихРегистров по подготовке пусты. Ни набор записей, ни изменения очереди перерасчёта урок не создаёт.

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

  1. Будущий тест: подготовить свой стенд, F7 и Выполнить в толстом клиенте. Проверить программные имена, подписи и фактические связи в новом отчёте; здесь запуск не проводился.

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

  3. Будущий отчёт содержит Очередь85, неопределённый МодульНабораЗаписей, Автоматический и полное имя Ключ85 регистра УчебныйРасчет85.

  4. В собственной подготовке выберите иной режим блокировок: аудит должен отказать. Это не опыт работы блокировок под нагрузкой.

  5. Измените в своём Конфигураторе связь ИзмерениеРегистра: если схема допускает такую связь, аудит должен отказать. Проверку конфигурации нельзя обходить ради негативного теста.

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

Будущий результат — паспорт реальной структуры собственного определения и её проверенных связей. Бизнес-данные не записываются. Код не выполнялся в 1С: runtimeVerifiedScenarios=0.

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

  1. Метаданные — описания. Их наличие не доказывает существование записей базы, успешное проведение или отсутствие ошибок прикладного алгоритма.

  2. Readonly-свойства и коллекции не заменяются присваиванием. Подготовка через Конфигуратор относится только к новой собственной базе.

  3. Ни F7, ни выполнение BSL здесь не происходили. Сверка справки, Python-тесты и HTML-поиск не заменяют проверку в 1С.

  4. Описание перерасчёта не пересчитывает начисления автоматически при чтении. Урок не реализует зарплату, исправление движений или расчёт сумм.

  5. Native ИзмерениеРегистра описывает измерение, но строка Тип называет регистр расчета. Поэтому сравниваем фактическую ссылку с подготовленным родительским измерением, не угадываем его строку ТипЗнч.

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

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

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

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

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