Тип: ФиксированныйМассив. Фактический период действия. Отличается от периода действия, задаваемого датами начала и окончания периода действия. Период действия - это свойство учетной записи, которое отражает тот факт, что данная учетная запись пытается получить такой период действия. Фактический период действия - это тот период, который сложился за счет правил взаимной конкуренции учетных записей за период действия, определяемых списками вытесняющих видов расчета плана расчетов данного регистра расчета.
Доступность
Сервер, толстый клиент, внешнее соединение.
Полное описание, параметры и ограничения
Тип: ФиксированныйМассив.
Фактический период действия.
Отличается от периода действия, задаваемого датами начала и окончания периода действия.
Период действия - это свойство учетной записи, которое отражает тот факт, что данная учетная запись пытается получить такой период действия.
Фактический период действия - это тот период, который сложился за счет правил взаимной конкуренции учетных записей за период действия, определяемых списками вытесняющих видов расчета плана расчетов данного регистра расчета.
Практические примеры
Паспорт движений расчёта: регистратор, три периода и фактические интервалы
Читаем реальные сохранённые движения собственного документа 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ВидыПаспорта;
Если Метаданные.Документы.Количество() <> 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.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
В подготовке участвует собственное настоящее проведение, а не плановый UUID. ОбработкаПроведения заполняет выбранный набор Движения и ставит Записывать=Истина; платформа сохранит его в транзакции проведения. В обработчик не переносится guard с запретом любой активной транзакции, НачатьТранзакцию и ручной Записать отсутствуют.
Основной модуль проверяет флаги действия/базы и периодичность. У необязательных полей нет универсального существования: БазовыйПериод* доступны лишь при включённой базе, ПериодДействия* и ФактическийПериодДействия — лишь при включённом действии.
Читаем единственный сохранённый проведённый 001 и сохраняем его Ссылка. Это документ-регистратор, не номер документа и не случайная ссылка. Наличие лишнего документа, неправильной даты, пометки или отсутствующих зависимостей подготовки останавливает урок.
Выбрать формирует специализированную выборку, не массив и не объект записи. Следующий надо вызвать перед первым чтением свойств и далее до False; после False текущую строку не читаем.
Сравниваем Активность=True, Сторно=False, НомерСтроки=1/2 и ВидРасчета с настоящим своим предопределённым видом. НомерСтроки начинается с 1, а не с индекса 0. Ресурс Сумма сам по себе не доказывает вычисление зарплаты.
Документ датирован серединой октября, но ПериодРегистрации помесячного регистра — 01.10.2026. ПериодДействия тоже месяц начала действия, хотя сами начало/конец A и B разные. Базовый период — весь сентябрь; он не обязан совпадать ни с регистрацией, ни с действием.
ФактическийПериодДействия — ФиксированныйМассив элементов ЭлементФактическогоПериодаДействия. Читаем readonly ДатаНачала/ДатаОкончания каждого. У собственного стенда без вытесняющих зависимостей один интервал совпадает с заданным действием; при реальном вытеснении это предположение уже неверно.
ВыбратьПоРегистратору получает настоящую ссылку 001 и повторяет A/B. Общий Выбрать получает календарный интервал регистрации и Структура ровно с одним индексированным измерением Участник=B; порядок только Возр/Убыв, не произвольный список полей. Ожидается лишь B с исходным номером строки 2.
Ноябрьская выборка пуста и проверяется только через Следующий. После обхода сверяем точный состав/порядок ключей: неизвестные и повторные строки не допускаются. Все свойства выборки только читаются.
Как проверить результат
Будущий тест: F7 всех трёх модулей, проведение только своего 001, запуск Пульта. Общий и по-регистратору обходы дают A/B; одноэлементный отбор даёт B; ноябрь пуст.
ПериодРегистрации и ПериодДействия обеих строк — 01.10.2026. База — 01.09–30.09 23:59:59. Фактический интервал A — 01.10–15.10 23:59:59, B — 16.10–31.10 23:59:59 только в этом стенде без вытеснения.
Реальный регистратор совпадает с сохранённым 001, НомерСтроки 1/2, активность True, сторно False, вид настоящий. Суммы 100/200 — заданные учебные значения, не расчёт зарплаты.
Если фактический массив пуст, не совпал или движения отсутствуют, опыт НЕ успешен: проверить собственное проведение, выбранный набор и флаги, не подменять проверку захардкоженным массивом.
При выключенном действии/базе основной guard должен остановить опыт до чтения условных полей. При добавленном втором документе или непредусмотренной зависимости урок также отказывает.
Ожидаемый результат
Будущий результат: три согласованных обхода реально сохранённых движений и различие регистрации/действия/базы/фактических интервалов. Главный модуль ничего не записывает; подготовка требует своего ручного проведения. В 1С не проверялось.
На что обратить внимание
Это технический опыт паспорта строк, не методология зарплаты и не вычисление базы. Для ПолучитьБазу/графика нужен другой полностью подготовленный урок.
ФиксированныйМассив и его элементы readonly; никакого Новый ЭлементФактическогоПериодаДействия и присвоения свойств выборки нет.
Фактический период может состоять из нескольких непересекающихся интервалов из-за вытеснения. Равенство одному заданному интервалу — проверка только нашего стенда без таких правил.
В экспорте два пункта ФактическийПериодДействия: второй содержит технический суффикс. Обе исходные страницы установленной справки описывают тот же член. В BSL используется одно настоящее имя, суффикс не является API и не вставляется в код.
Основной модуль только читает, но самостоятельная подготовка через проведение реально сохраняет данные. Поэтому весь урок не помечен как полностью беззаписный; рабочие базы запрещены.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.