Получает макет регистра расчета.
Синтаксис
ПолучитьМакет(<Макет>)Полное описание, параметры и ограничения
РегистрРасчетаМенеджер.<Имя регистра расчета>.ПолучитьМакет (CalculationRegisterManager.<Calculation register name>.GetTemplate)
РегистрРасчетаМенеджер.<Имя регистра расчета> (CalculationRegisterManager.<Calculation register name>)
ПолучитьМакет (GetTemplate)
Доступен, начиная с версии 8.0.
Синтаксис:
ПолучитьМакет(<Макет>)
Параметры:
<Макет> (обязательный)
Тип: Строка, ОбъектМетаданных: Макет.
Имя макета, как оно задано в конфигураторе, или объект описания метаданного требуемого макета.
Возвращаемое значение:
Тип: ТабличныйДокумент, ТекстовыйДокумент; другой объект, который может быть макетом.
Описание:
Получает макет регистра расчета.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Ключ сохранённого движения B, собственные формы и макет регистра расчёта
После полного паспорта своего стенда получаем ключ реальной строки 2 документа 001; отдельно создаём закрытые собственные формы и читаем свой макет по имени и метаданным.
Где и как запускать
Полный обычный клиентский общий модуль УчебнаяВыборкаРасчета85 → УчебныеПаспортаРасчета85. Свои реальные движения читаются, окна не открываются, макет не печатается; не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебнаяВыборкаРасчета85, совместимость НеИспользовать, обычное приложение/толстый клиент. Не рабочая ЗУП/КА2/УТ/БП и не их копия. Нет расширений, общих реквизитов, разделителей, подписок, обмена, истории и фоновых прикладных заданий. Одна сессия. Здесь 1С не запускалась: runtimeVerifiedScenarios=0.
План видов расчёта Уч85ВидыПаспорта: строковый код 10, наименование 100, ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуРегистрации. Единственный предопределённый вид УчебноеНачисление с кодом DEMO и именем Учебное начисление. Базовые/ведущие/вытесняющие виды пусты. Модули плана пустые. Этот вид не содержит формулу зарплаты.
Регистр расчёта Уч85Паспорта: периодичность Месяц, план Уч85ВидыПаспорта, Период действия=Да, Базовый период=Да. Единственное измерение Участник: Строка(10), Индексировать, базовое; ресурс Сумма: Число(15,2). Без графика, перерасчётов и других полей; модуль набора пустой. В этом варианте обязательные флаги периодов включены, не переиспользуйте стенд предыдущего урока с выключенными периодами.
Документ Уч85Паспорт: номер Строка(3), длина 3, без реквизитов и табличных частей, Проведение=Разрешить; в Движения включите только Уч85Паспорта. В модуль ОБЪЕКТА вставьте полный отдельный ОбработкаПроведения ниже. Остальные обработчики пустые. Сначала F7 и обновление только своего стенда.
Вручную создайте ровно один документ: номер 001, дата 15.10.2026 12:00:00. Проведите его только в своей новой учебной базе. Это БУДУЩАЯ реальная запись подготовки: платформа запишет две строки движений и рассчитает фактические периоды. Здесь никакая запись или проведение не выполнялись. Основной урок ниже только читает уже сохранённые строки.
Общий модуль УчебныеПаспортаРасчета85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет; остальные клиентские флаги=Нет. Вставьте полный основной модуль. Обработка УчебныеПаспортаРасчета85 → обычная форма Пульт → кнопка Выполнить → действие ВыполнитьНажатие; её полный отдельный модуль ниже. Не смешивайте три модуля в одном.
После собственного проведения откройте Пульт. Не создавайте второй документ, не меняйте движения вручную и не добавляйте Записать в основной модуль. Две строки имеют реальную ссылку 001, номера 1/2, участников A/B, суммы 100/200, общую регистрацию октябрь и базу сентябрь; действие A — 1–15 октября, B — 16–31 октября.
Дополнительно в собственном регистре Уч85Паспорта создайте обычную форму списка Список85 стандартным мастером, назначьте основной формой списка; модуль пустой. Это НЕ управляемая форма. Собственный макет Паспорт85: Табличный документ, R1C1 содержит ровно Учебный паспорт расчета, без параметров. Сначала F7 своего стенда.
Основной общий модуль замените целиком этим уроком; отдельные ОбработкаПроведения и Пульт те же полные модули ниже. Уже проведённый собственный 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.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Полная ПроверитьСвоюПодготовку повторяет проверенный паспорт 001 и всех его движений A/B, включая базу, действие и фактические интервалы. Ссылка регистратора реально прочитана, ключ не строится для отсутствующего документа.
СоздатьКлючЗаписи получает структуру ровно из двух полей Регистратор и НомерСтроки, прочитанных у фактической строки B. Возвращается прикладной РегистрРасчетаКлючЗаписи, не строка, не UUID и не Запись. Свойства ключа только читаются и сверяются с сохранённым 001/2.
Ключ — адрес движения; создание ключа само не сохраняет и не доказывает существование записи. В этом уроке наличие доказывает предшествующее чтение и паспорт. Не используйте непустой ключ как универсальную проверку наличия данных.
ПолучитьФорму использует собственный объект метаданных формы, ПолучитьФормуСписка — её собственное имя. Для каждой задан отдельный UUID уникальности, чтобы не получить уже открытое окно. UUID здесь относится только к форме, не заменяет реального регистратора.
Оба результата проверяются на nullable, тип обычной формы, закрытое состояние и точный ключ уникальности. Получение формы не равно её открытию: Открыть не вызывается и видимый список/выделение строки не обещаются.
ПолучитьМакет вызывается по собственному имени и по объекту метаданных. Заранее задан тип Табличный документ; R1C1 сравнивается с точной учебной надписью. Макет — отдельный документ представления, не данные движений и не печать.
Общий модуль не выполняет Записать/Удалить/проведение, не перенастраивает открытые окна и не вызывает сеть. Будущая сохраняющая подготовка 001 вынесена в самостоятельный модуль документа и честно отмечена в уроке.
Как проверить результат
Будущий тест F7 и собственный Пульт обычного толстого клиента: паспорт A/B проходит, ключ имеет конкретный прикладной тип, реальный 001 и номер строки 2.
Обе формы существуют, обычные, не открыты и имеют разные переданные UUID. Никакие видимые окна списка или автоматическое выделение B не заявляются.
Оба полученных макета — ТабличныйДокумент и имеют точный текст R1C1. Не печатать и не записывать файлы для проверки.
Если своей формы/макета нет, тип неверен, запись исчезла или паспорт не совпал, опыт должен остановиться; здесь результат в 1С ещё не получен.
Ожидаемый результат
Будущий результат: проверенный адрес реального движения 001/2, два закрытых собственных окна и свой макет; никаких записей основного модуля или вывода на печать. Не выполнялся.
На что обратить внимание
Не конструируйте Новый РегистрРасчетаКлючЗаписи: ключ возвращает менеджер. Два поля идентификации readonly и не заменяются ссылкой документа без номера строки.
В native примере СоздатьКлючЗаписи встречается структура измерений; контракт параметра для регистра расчёта явно требует регистратор и номер строки. Урок следует этому контракту и использует реально прочитанные значения.
Получение формы допускает переадресацию глобальному контексту и nullable результат. Подготовка обычной формы и толстый клиент обязательны; не переносите опыт на управляемый/веб-клиент.
UUID ключа уникальности окна не является идентификатором записи регистра. Макет не является формой и не содержит автоматического результата расчёта.
Основной модуль только читает, но отдельное будущее проведение подготовки сохраняет свои движения. Рабочие базы запрещены; runtimeVerifiedScenarios=0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.