РегистрРасчетаМенеджер.<Имя регистра расчета>.ПолучитьМакет

Методы · GetTemplate

Получает макет регистра расчета.

Синтаксис

ПолучитьМакет(<Макет>)
Полное описание, параметры и ограничения

РегистрРасчетаМенеджер.<Имя регистра расчета>.ПолучитьМакет (CalculationRegisterManager.<Calculation register name>.GetTemplate)

РегистрРасчетаМенеджер.<Имя регистра расчета> (CalculationRegisterManager.<Calculation register name>)

ПолучитьМакет (GetTemplate)

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

Синтаксис:
ПолучитьМакет(<Макет>)
Параметры:

<Макет> (обязательный)
Тип: Строка, ОбъектМетаданных: Макет.
Имя макета, как оно задано в конфигураторе, или объект описания метаданного требуемого макета.
Возвращаемое значение:
Тип: ТабличныйДокумент, ТекстовыйДокумент; другой объект, который может быть макетом.

Описание:

Получает макет регистра расчета.

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

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

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

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

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

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

Ключ сохранённого движения B, собственные формы и макет регистра расчёта

После полного паспорта своего стенда получаем ключ реальной строки 2 документа 001; отдельно создаём закрытые собственные формы и читаем свой макет по имени и метаданным.

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

Полный обычный клиентский общий модуль УчебнаяВыборкаРасчета85 → УчебныеПаспортаРасчета85. Свои реальные движения читаются, окна не открываются, макет не печатается; не выполнялся.

Подготовка

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

  2. План видов расчёта Уч85ВидыПаспорта: строковый код 10, наименование 100, ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуРегистрации. Единственный предопределённый вид УчебноеНачисление с кодом DEMO и именем Учебное начисление. Базовые/ведущие/вытесняющие виды пусты. Модули плана пустые. Этот вид не содержит формулу зарплаты.

  3. Регистр расчёта Уч85Паспорта: периодичность Месяц, план Уч85ВидыПаспорта, Период действия=Да, Базовый период=Да. Единственное измерение Участник: Строка(10), Индексировать, базовое; ресурс Сумма: Число(15,2). Без графика, перерасчётов и других полей; модуль набора пустой. В этом варианте обязательные флаги периодов включены, не переиспользуйте стенд предыдущего урока с выключенными периодами.

  4. Документ Уч85Паспорт: номер Строка(3), длина 3, без реквизитов и табличных частей, Проведение=Разрешить; в Движения включите только Уч85Паспорта. В модуль ОБЪЕКТА вставьте полный отдельный ОбработкаПроведения ниже. Остальные обработчики пустые. Сначала F7 и обновление только своего стенда.

  5. Вручную создайте ровно один документ: номер 001, дата 15.10.2026 12:00:00. Проведите его только в своей новой учебной базе. Это БУДУЩАЯ реальная запись подготовки: платформа запишет две строки движений и рассчитает фактические периоды. Здесь никакая запись или проведение не выполнялись. Основной урок ниже только читает уже сохранённые строки.

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

  7. После собственного проведения откройте Пульт. Не создавайте второй документ, не меняйте движения вручную и не добавляйте Записать в основной модуль. Две строки имеют реальную ссылку 001, номера 1/2, участников A/B, суммы 100/200, общую регистрацию октябрь и базу сентябрь; действие A — 1–15 октября, B — 16–31 октября.

  8. Дополнительно в собственном регистре Уч85Паспорта создайте обычную форму списка Список85 стандартным мастером, назначьте основной формой списка; модуль пустой. Это НЕ управляемая форма. Собственный макет Паспорт85: Табличный документ, R1C1 содержит ровно Учебный паспорт расчета, без параметров. Сначала F7 своего стенда.

  9. Основной общий модуль замените целиком этим уроком; отдельные ОбработкаПроведения и Пульт те же полные модули ниже. Уже проведённый собственный 001 и две его строки остаются подготовкой: этот основной модуль не перепроводит документ, не открывает формы, не печатает и не сохраняет макет.

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

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

Процедура ПроверитьСвоюПодготовку()
    ПроверитьСвойКонтекст();
    Регистр = Метаданные.РегистрыРасчета.Уч85Паспорта;
    План = Метаданные.ПланыВидовРасчета.Уч85ВидыПаспорта;
    Если Метаданные.Документы.Количество() <> 1 Или Метаданные.РегистрыРасчета.Количество() <> 1
        Или Метаданные.ПланыВидовРасчета.Количество() <> 1
        Или Регистр.ПланВидовРасчета <> План Или Регистр.Периодичность <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраРасчета.Месяц
        Или Не Регистр.ПериодДействия Или Не Регистр.БазовыйПериод
        Или Не План.ИспользованиеПериодаДействия
        Или План.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуРегистрации
        Или Регистр.Измерения.Количество() <> 1 Или Регистр.Измерения.Найти("Участник") = Неопределено
        Или Регистр.Ресурсы.Количество() <> 1 Или Регистр.Ресурсы.Найти("Сумма") = Неопределено
        Или Регистр.Перерасчеты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен собственный регистр с включёнными действием и базой, а не другой стенд без этих свойств";
    КонецЕсли;
    ДокументыПодготовки = Документы.Уч85Паспорт.Выбрать();
    Если Не ДокументыПодготовки.Следующий() Тогда
        ВызватьИсключение "Сначала вручную сохраните и проведите собственный 001";
    КонецЕсли;
    СвойРегистратор = ДокументыПодготовки.Ссылка;
    Если ДокументыПодготовки.Номер <> "001" Или ДокументыПодготовки.Дата <> Дата(2026, 10, 15, 12, 0, 0)
        Или Не ДокументыПодготовки.Проведен Или ДокументыПодготовки.ПометкаУдаления
        Или СвойРегистратор.Пустая() Тогда
        ВызватьИсключение "Нужен настоящий проведённый собственный документ 001 без пометки";
    КонецЕсли;
    Если ДокументыПодготовки.Следующий() Тогда
        ВызватьИсключение "Не должно быть других документов собственного стенда";
    КонецЕсли;
    СвойВид = ПланыВидовРасчета.Уч85ВидыПаспорта.УчебноеНачисление;
    ОбъектВида = СвойВид.ПолучитьОбъект();
    Если ОбъектВида = Неопределено Тогда
        ВызватьИсключение "Нужен реально созданный собственный предопределённый вид";
    КонецЕсли;
    Если ОбъектВида.БазовыеВидыРасчета.Количество() <> 0
        Или ОбъектВида.ВедущиеВидыРасчета.Количество() <> 0
        Или ОбъектВида.ВытесняющиеВидыРасчета.Количество() <> 0 Тогда
        ВызватьИсключение "Этот опыт не допускает базовых, ведущих или вытесняющих зависимостей";
    КонецЕсли;
    ПрочитатьПаспорта(РегистрыРасчета.Уч85Паспорта.Выбрать(), СвойРегистратор, СвойВид, "A,B");
    ПрочитатьПаспорта(РегистрыРасчета.Уч85Паспорта.ВыбратьПоРегистратору(СвойРегистратор), СвойРегистратор, СвойВид, "A,B");
    ПрочитатьПаспорта(РегистрыРасчета.Уч85Паспорта.Выбрать(Дата(2026, 10, 1), Дата(2026, 10, 31, 23, 59, 59),
        Новый Структура("Участник", "B"), "Возр"), СвойРегистратор, СвойВид, "B");
    Пустая = РегистрыРасчета.Уч85Паспорта.Выбрать(Дата(2026, 11, 1), Дата(2026, 11, 30, 23, 59, 59));
    Если Пустая.Следующий() Тогда
        ВызватьИсключение "В ноябре собственных движений нет";
    КонецЕсли;
    Сообщить("Прочитаны реальные движения 001, вариант по регистратору и один индексированный отбор. Записать в этом общем модуле нет.");
КонецПроцедуры

Процедура ПрочитатьПаспорта(Выборка, СвойРегистратор, СвойВид, ОжидаемыеКлючи)
    Если ТипЗнч(Выборка) <> Тип("РегистрРасчетаВыборка.Уч85Паспорта") Тогда
        ВызватьИсключение "Нужна настоящая специализированная выборка своего регистра";
    КонецЕсли;
    НайденныеКлючи = Новый Массив;
    Пока Выборка.Следующий() Цикл
        Ключ = Выборка.Участник;
        Если Ключ = "A" Тогда
            Номер = 1;
            Начало = Дата(2026, 10, 1);
            Конец = Дата(2026, 10, 15, 23, 59, 59);
            Сумма = 100;
        ИначеЕсли Ключ = "B" Тогда
            Номер = 2;
            Начало = Дата(2026, 10, 16);
            Конец = Дата(2026, 10, 31, 23, 59, 59);
            Сумма = 200;
        Иначе
            ВызватьИсключение "Неизвестное движение своего стенда";
        КонецЕсли;
        Если НайденныеКлючи.Найти(Ключ) <> Неопределено Или Выборка.Регистратор <> СвойРегистратор
            Или Выборка.НомерСтроки <> Номер Или Выборка.ВидРасчета <> СвойВид
            Или Не Выборка.Активность Или Выборка.Сторно Или Выборка.Сумма <> Сумма
            Или Выборка.ПериодРегистрации <> Дата(2026, 10, 1)
            Или Выборка.ПериодДействия <> Дата(2026, 10, 1)
            Или Выборка.ПериодДействияНачало <> Начало Или Выборка.ПериодДействияКонец <> Конец
            Или Выборка.БазовыйПериодНачало <> Дата(2026, 9, 1)
            Или Выборка.БазовыйПериодКонец <> Дата(2026, 9, 30, 23, 59, 59) Тогда
            ВызватьИсключение "Не совпал паспорт собственной сохранённой строки расчёта";
        КонецЕсли;
        ФактическиеИнтервалы = Выборка.ФактическийПериодДействия;
        Если ТипЗнч(ФактическиеИнтервалы) <> Тип("ФиксированныйМассив") Тогда
            ВызватьИсключение "Фактический период — фиксированный массив, не одна пара дат";
        КонецЕсли;
        Если ФактическиеИнтервалы.Количество() <> 1 Тогда
            ВызватьИсключение "В собственном опыте без вытеснения ожидается один фактический интервал";
        КонецЕсли;
        Для Каждого Интервал Из ФактическиеИнтервалы Цикл
            Если ТипЗнч(Интервал) <> Тип("ЭлементФактическогоПериодаДействия")
                Или Интервал.ДатаНачала <> Начало Или Интервал.ДатаОкончания <> Конец Тогда
                ВызватьИсключение "Фактический интервал без вытеснения должен совпасть с заданным действием";
            КонецЕсли;
            Сообщить(Ключ + ": фактический интервал " + Строка(Интервал.ДатаНачала) + " — " + Строка(Интервал.ДатаОкончания));
        КонецЦикла;
        НайденныеКлючи.Добавить(Ключ);
        Сообщить("Строка " + Строка(Выборка.НомерСтроки) + ": регистрация " + Строка(Выборка.ПериодРегистрации)
            + "; месяц действия " + Строка(Выборка.ПериодДействия) + "; база " + Строка(Выборка.БазовыйПериодНачало)
            + " — " + Строка(Выборка.БазовыйПериодКонец));
    КонецЦикла;
    Если СтрСоединить(НайденныеКлючи, ",") <> ОжидаемыеКлючи Тогда
        ВызватьИсключение "Количество и порядок собственных строк отличаются от подготовленных";
    КонецЕсли;
КонецПроцедуры

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

УчебнаяВыборкаРасчета85 → Документы → Уч85Паспорт → Модуль объекта

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Или ЭтотОбъект.Номер <> "001" Или ЭтотОбъект.Дата <> Дата(2026, 10, 15, 12, 0, 0) Тогда
        Отказ = Истина;
        ВызватьИсключение "Проводить можно только собственный учебный 001 в подготовленном стенде";
    КонецЕсли;
    Набор = ЭтотОбъект.Движения.Уч85Паспорта;
    Набор.Записывать = Истина;
    Набор.Очистить();
    Для Номер = 1 По 2 Цикл
        Запись = Набор.Добавить();
        Запись.Активность = Истина;
        Запись.Сторно = Ложь;
        Запись.ПериодРегистрации = ЭтотОбъект.Дата;
        Запись.ВидРасчета = ПланыВидовРасчета.Уч85ВидыПаспорта.УчебноеНачисление;
        Запись.БазовыйПериодНачало = Дата(2026, 9, 1);
        Запись.БазовыйПериодКонец = Дата(2026, 9, 30, 23, 59, 59);
        Если Номер = 1 Тогда
            Запись.Участник = "A";
            Запись.Сумма = 100;
            Запись.ПериодДействияНачало = Дата(2026, 10, 1);
            Запись.ПериодДействияКонец = Дата(2026, 10, 15, 23, 59, 59);
        Иначе
            Запись.Участник = "B";
            Запись.Сумма = 200;
            Запись.ПериодДействияНачало = Дата(2026, 10, 16);
            Запись.ПериодДействияКонец = Дата(2026, 10, 31, 23, 59, 59);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
УчебныеПаспортаРасчета85.Пульт

УчебнаяВыборкаРасчета85 → Обработки → УчебныеПаспортаРасчета85 → Формы → Пульт → Модуль

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

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

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

  1. Полная ПроверитьСвоюПодготовку повторяет проверенный паспорт 001 и всех его движений A/B, включая базу, действие и фактические интервалы. Ссылка регистратора реально прочитана, ключ не строится для отсутствующего документа.

  2. СоздатьКлючЗаписи получает структуру ровно из двух полей Регистратор и НомерСтроки, прочитанных у фактической строки B. Возвращается прикладной РегистрРасчетаКлючЗаписи, не строка, не UUID и не Запись. Свойства ключа только читаются и сверяются с сохранённым 001/2.

  3. Ключ — адрес движения; создание ключа само не сохраняет и не доказывает существование записи. В этом уроке наличие доказывает предшествующее чтение и паспорт. Не используйте непустой ключ как универсальную проверку наличия данных.

  4. ПолучитьФорму использует собственный объект метаданных формы, ПолучитьФормуСписка — её собственное имя. Для каждой задан отдельный UUID уникальности, чтобы не получить уже открытое окно. UUID здесь относится только к форме, не заменяет реального регистратора.

  5. Оба результата проверяются на nullable, тип обычной формы, закрытое состояние и точный ключ уникальности. Получение формы не равно её открытию: Открыть не вызывается и видимый список/выделение строки не обещаются.

  6. ПолучитьМакет вызывается по собственному имени и по объекту метаданных. Заранее задан тип Табличный документ; R1C1 сравнивается с точной учебной надписью. Макет — отдельный документ представления, не данные движений и не печать.

  7. Общий модуль не выполняет Записать/Удалить/проведение, не перенастраивает открытые окна и не вызывает сеть. Будущая сохраняющая подготовка 001 вынесена в самостоятельный модуль документа и честно отмечена в уроке.

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

  1. Будущий тест F7 и собственный Пульт обычного толстого клиента: паспорт A/B проходит, ключ имеет конкретный прикладной тип, реальный 001 и номер строки 2.

  2. Обе формы существуют, обычные, не открыты и имеют разные переданные UUID. Никакие видимые окна списка или автоматическое выделение B не заявляются.

  3. Оба полученных макета — ТабличныйДокумент и имеют точный текст R1C1. Не печатать и не записывать файлы для проверки.

  4. Если своей формы/макета нет, тип неверен, запись исчезла или паспорт не совпал, опыт должен остановиться; здесь результат в 1С ещё не получен.

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

Будущий результат: проверенный адрес реального движения 001/2, два закрытых собственных окна и свой макет; никаких записей основного модуля или вывода на печать. Не выполнялся.

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

  1. Не конструируйте Новый РегистрРасчетаКлючЗаписи: ключ возвращает менеджер. Два поля идентификации readonly и не заменяются ссылкой документа без номера строки.

  2. В native примере СоздатьКлючЗаписи встречается структура измерений; контракт параметра для регистра расчёта явно требует регистратор и номер строки. Урок следует этому контракту и использует реально прочитанные значения.

  3. Получение формы допускает переадресацию глобальному контексту и nullable результат. Подготовка обычной формы и толстый клиент обязательны; не переносите опыт на управляемый/веб-клиент.

  4. UUID ключа уникальности окна не является идентификатором записи регистра. Макет не является формой и не содержит автоматического результата расчёта.

  5. Основной модуль только читает, но отдельное будущее проведение подготовки сохраняет свои движения. Рабочие базы запрещены; runtimeVerifiedScenarios=0.

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

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

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

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

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