РегистрРасчетаНаборЗаписей.<Имя регистра расчета>.Модифицированность

Методы · Modified

Определяет, были ли изменены записи в наборе после последнего считывания или записи.

Синтаксис

Модифицированность()

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

Если НаборЗаписей.Модифицированность() Тогда
    Попытка
        НаборЗаписей.Записать();
    Исключение
        Предупреждение(НСтр("ru = 'Не удалось записать: ';"
           + " en = 'Can't write: '") + ОписаниеОшибки());
        Отказ = Истина;
    КонецПопытки;
КонецЕсли;
Полное описание, параметры и ограничения

РегистрРасчетаНаборЗаписей.<Имя регистра расчета>.Модифицированность (CalculationRegisterRecordSet.<Calculation register name>.Modified)

РегистрРасчетаНаборЗаписей.<Имя регистра расчета> (CalculationRegisterRecordSet.<Calculation register name>)

Модифицированность (Modified)

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

Синтаксис:
Модифицированность()
Возвращаемое значение:
Тип: Булево.
Истина - записи изменены; Ложь - в противном случае.
Описание:

Определяет, были ли изменены записи в наборе после последнего считывания или записи.

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

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

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

Если НаборЗаписей.Модифицированность() Тогда
// Запись набора записей.

Попытка
НаборЗаписей.Записать();
Исключение
Предупреждение(НСтр("ru = 'Не удалось записать: ';"
+ " en = 'Can't write: '") + ОписаниеОшибки());
Отказ = Истина;
КонецПопытки;
КонецЕсли;

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

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

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

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

Создать две записи расчётного регистра и отличить сумму от начисления

Вид расчёта и период — поля записи. Итог числового ресурса 750+50 не является алгоритмом зарплаты или остатком базы.

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

Полный серверный общий модуль собственной учебной конфигурации. Набор в памяти и собственная плановая ссылка; объект документа не создаётся. Без расчёта зарплаты; запуск в 1С не проверен.

Подготовка

  1. Создайте новую пустую файловую базу с именем корня УчебныеНаборыРасчета85. Это отдельный учебный стенд, не ЗУП, КА2, УНФ, УТ или БП. Других документов, регистров и справочников в нём не должно быть.

  2. Создайте план видов расчёта УчебныеВиды85: тип кода Строка, длина кода 10, наименования 100; использование периода действия выключено, зависимость от видов расчёта Не использовать. Реквизиты и табличные части не добавляйте.

  3. В предопределённых видах плана создайте УчебноеНачисление с кодом DEMO и наименованием Учебная сумма. Не задавайте зависимости или вытесняющие виды. Это вид учебного расчёта, не формула зарплаты.

  4. Создайте документ УчебныйРегистратор85 без реквизитов и табличных частей. Создайте регистр расчёта УчебныеСуммы85: периодичность Месяц, план УчебныеВиды85; период действия и базовый период выключены; график и перерасчёты не задавайте. На вкладке Движения собственного документа отметьте только этот регистр.

  5. Добавьте в регистр измерение МеткаОперации: Строка(80), Проверка заполнения — Выдавать ошибку; единственный ресурс Сумма: Число(15,2). Других измерений, ресурсов и реквизитов не добавляйте. Обновите конфигурацию учебной базы, чтобы создать предопределённый вид.

  6. Оставьте модули документа и набора пустыми, без подписок на события. Создайте серверный общий модуль УчебныеЗаписиРасчета с флагом Сервер, без Привилегированный. Вставьте полный модуль выбранного урока и вызовите ВыполнитьПример из своей серверной команды учебной обработки.

  7. ПолучитьСсылку своего менеджера с новым UUID формирует непустое ссылочное значение собственного типа. Объект документа не создаётся и не записывается; непустая ссылка не доказывает существование документа. Наборы меняются только в памяти; вызовов Записать нет. Отдельный урок чтения ограничен своими новыми плановыми ссылками.

  8. Код не вычисляет зарплату, налоги, базу или фактический период действия. Примеры сверены со справкой установленной платформы, но автоматически в 1С не исполнялись.

Процедура ВыполнитьПример() Экспорт
    Набор = СоздатьСвойНабор();
    Сообщить(Набор.Количество() = 2);
    Сообщить(Набор.Итог("Сумма") = 800);
    Сообщить(Набор.Метаданные().Имя = "УчебныеСуммы85");
    Первая = Набор.Получить(0);
    Сообщить(ТипЗнч(Первая) = Тип("РегистрРасчетаЗапись.УчебныеСуммы85"));
    Сообщить(Первая.ПериодРегистрации = Дата(2026, 10, 1));
    Сообщить(Первая.МеткаОперации = "Книга" И Первая.Сумма = 750);
    Сообщить(Первая.ВидРасчета = ПланыВидовРасчета.УчебныеВиды85.УчебноеНачисление);
    Сообщить(Первая.Активность И НЕ Первая.Сторно);
    Сообщить(ТипЗнч(Первая.НомерСтроки) = Тип("Число"));
    Сообщить("Модифицированность своего набора: " + Строка(Набор.Модифицированность()));
КонецПроцедуры

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

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

Процедура ЗаполнитьСвоюЗапись(Запись, СвояСсылка, Метка, Сумма)
    Запись.Регистратор = СвояСсылка;
    Запись.ПериодРегистрации = Дата(2026, 10, 3);
    Запись.ВидРасчета = ПланыВидовРасчета.УчебныеВиды85.УчебноеНачисление;
    Запись.Активность = Истина;
    Запись.Сторно = Ложь;
    Запись.МеткаОперации = Метка;
    Запись.Сумма = Сумма;
КонецПроцедуры

Функция СоздатьСвойНабор()
    ПроверитьУчебнуюСхему();
    СвояСсылка = СоздатьСвоюСсылкуРегистратора();
    Набор = РегистрыРасчета.УчебныеСуммы85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    ЗаполнитьСвоюЗапись(Набор.Добавить(), СвояСсылка, "Книга", 750);
    ЗаполнитьСвоюЗапись(Набор.Добавить(), СвояСсылка, "Ручка", 50);
    Возврат Набор;
КонецФункции

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

  1. Проверить свою схему до создания объектов.

  2. Создать свою непустую плановую ссылку ПолучитьСсылку своего менеджера с новым UUID; проверить конкретный тип и поставить ссылку в отбор набора и в каждую запись. Объект документа не создаётся.

  3. Добавить две полностью заполненные строки Книга=750 и Ручка=50, указав собственный предопределённый вид.

  4. Для помесячного регистра 03.10.2026 приводится к 01.10.2026. Индекс 0 и НомерСтроки — разные понятия.

  5. Посчитать ресурс в памяти, показать фактическую модифицированность, ничего не записывать.

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

  1. Девять булевых проверок Истина, затем фактический флаг модифицированности.

  2. Документ и движения не появились в базе.

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

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

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

  1. НомерСтроки только читается; не присваивайте ему индекс массива.

  2. Итог не вызывает формулу расчёта и не проверяет наличие выплат.

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

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

Прочитать пустой набор только по новой собственной ссылке и проверить Выбран

Чтение ограничено будущим незаписанным документом. Отбор задан до Прочитать, а смена отбора снимает признак считанного набора.

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

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

Подготовка

  1. Создайте новую пустую файловую базу с именем корня УчебныеНаборыРасчета85. Это отдельный учебный стенд, не ЗУП, КА2, УНФ, УТ или БП. Других документов, регистров и справочников в нём не должно быть.

  2. Создайте план видов расчёта УчебныеВиды85: тип кода Строка, длина кода 10, наименования 100; использование периода действия выключено, зависимость от видов расчёта Не использовать. Реквизиты и табличные части не добавляйте.

  3. В предопределённых видах плана создайте УчебноеНачисление с кодом DEMO и наименованием Учебная сумма. Не задавайте зависимости или вытесняющие виды. Это вид учебного расчёта, не формула зарплаты.

  4. Создайте документ УчебныйРегистратор85 без реквизитов и табличных частей. Создайте регистр расчёта УчебныеСуммы85: периодичность Месяц, план УчебныеВиды85; период действия и базовый период выключены; график и перерасчёты не задавайте. На вкладке Движения собственного документа отметьте только этот регистр.

  5. Добавьте в регистр измерение МеткаОперации: Строка(80), Проверка заполнения — Выдавать ошибку; единственный ресурс Сумма: Число(15,2). Других измерений, ресурсов и реквизитов не добавляйте. Обновите конфигурацию учебной базы, чтобы создать предопределённый вид.

  6. Оставьте модули документа и набора пустыми, без подписок на события. Создайте серверный общий модуль УчебныеЗаписиРасчета с флагом Сервер, без Привилегированный. Вставьте полный модуль выбранного урока и вызовите ВыполнитьПример из своей серверной команды учебной обработки.

  7. ПолучитьСсылку своего менеджера с новым UUID формирует непустое ссылочное значение собственного типа. Объект документа не создаётся и не записывается; непустая ссылка не доказывает существование документа. Наборы меняются только в памяти; вызовов Записать нет. Отдельный урок чтения ограничен своими новыми плановыми ссылками.

  8. Код не вычисляет зарплату, налоги, базу или фактический период действия. Примеры сверены со справкой установленной платформы, но автоматически в 1С не исполнялись.

Процедура ВыполнитьПример() Экспорт
    ПроверитьУчебнуюСхему();
    СвояСсылка = СоздатьСвоюСсылкуРегистратора();
    Набор = РегистрыРасчета.УчебныеСуммы85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    Набор.Записывать = Ложь;
    Набор.ДополнительныеСвойства.Вставить("Назначение", "Чтение своей будущей ссылки");
    Сообщить(Не Набор.Выбран());
    Сообщить(Не Набор.Записывать);
    Сообщить(Не Набор.ОбменДанными.Загрузка);
    Сообщить(Набор.ДополнительныеСвойства.Назначение = "Чтение своей будущей ссылки");
    Набор.Прочитать();
    Сообщить(Набор.Количество() = 0);
    Сообщить(Набор.Выбран());
    Сообщить(Не Набор.Модифицированность());
    ДругаяСвояСсылка = СоздатьСвоюСсылкуРегистратора();
    Набор.Отбор.Регистратор.Установить(ДругаяСвояСсылка);
    Сообщить(Не Набор.Выбран());
КонецПроцедуры

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

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

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

  1. Проверить отдельный стенд и создать новый случайный UUID своего незаписанного документа.

  2. Создать пустой набор, установить отбор по этому регистратору. До чтения Выбран=Ложь.

  3. Записывать=Ложь относится к записи движений документа, не является запретом вызова собственного Записать. Безопасность урока обеспечена отсутствием любой записи.

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

  5. Изменить отбор на другую новую собственную ссылку. Выбран снова Ложь; второе чтение не вызывается.

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

  1. Восемь сообщений Истина, в том числе пустой прочитанный набор и сброс Выбран после изменения отбора.

  2. Чтение не перечисляет чужие документы и не использует пустой отбор. Дополнительная метка хранится лишь в структуре своего экземпляра.

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

Признаки чтения и изменения показаны на безопасном конкретном отборе без получения рабочих расчётных данных.

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

  1. Ноль записей не означает, что набор не прочитан: это отдельные вопросы.

  2. Модифицированность не обнаруживает изменения, выполненные другими пользователями.

  3. Свойство ОбменДанными только читается; не включайте Загрузка для обхода проверок.

  4. Флаг Записывать не является защитой от прямого Записать у отдельного набора. Такой вызов в коде отсутствует.

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

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

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

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

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