СправочникОбъект.<Имя справочника>.Модифицированность

Методы · Modified

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

Синтаксис

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

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

Если Объект.Модифицированность() Тогда
    Объект.Записать();
КонецЕсли;
Полное описание, параметры и ограничения

СправочникОбъект.<Имя справочника>.Модифицированность (CatalogObject.<Catalog name>.Modified)

СправочникОбъект.<Имя справочника> (CatalogObject.<Catalog name>)

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

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

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

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

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

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

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

Если Объект.Модифицированность() Тогда
Объект.Записать();
КонецЕсли;

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

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

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

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

Создать товар в памяти и убедиться, что записи ещё нет

Новый объект справочника можно заполнить до записи. Различаем объект, ссылку и дополнительную служебную структуру.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.


Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;

Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.Наименование = "Учебная книга";
Товар.Артикул = "A-01";
Товар.Цена = 250;
Товар.ДополнительныеСвойства.Вставить("ИсточникУчебныхДанных", "Пример в памяти");
Сообщить(Товар.ЭтоНовый());
Сообщить(Товар.Ссылка.Пустая());
Сообщить(Не Товар.ЭтоГруппа);
Сообщить(Не Товар.ПометкаУдаления);
Сообщить(Товар.Метаданные().Имя = "УчебныеТовары");
Сообщить(Товар.Наименование);
Сообщить(Товар.ДополнительныеСвойства.ИсточникУчебныхДанных);
Сообщить(Товар.Модифицированность());
Сообщить("Записать не вызывался: товар существует только как объект в памяти");

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

  1. СоздатьЭлемент создаёт объект, но не выполняет запись. Наименование, Артикул и Цена присваиваются его реквизитам в памяти.

  2. До записи у этого нового объекта ссылка пустая. ЭтоНовый проверяет состояние объекта, Пустая — состояние ссылки.

  3. ДополнительныеСвойства — служебная Структура, не новый реквизит справочника и не автоматическое сохранение в базе.

  4. Модифицированность показывает изменения этого экземпляра, не проверяет параллельные действия других пользователей.

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

  1. ЭтоНовый, Пустая ссылки, проверки группы/пометки и имени метаданных дают Истина.

  2. В сообщениях Учебная книга и Пример в памяти; экземпляр заполнен.

  3. Откройте список УчебныеТовары: новая строка не появилась, поскольку Записать отсутствует.

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

Заполнен один новый объект справочника без изменения данных базы.

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

  1. Создание экземпляра не выполняет бизнес-проверки записи и не гарантирует, что объект можно сохранить.

  2. Нельзя вызывать Прочитать у нового объекта: в базе пока нет строки для чтения.

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

Перечитать свой товар и отбросить несохранённое изменение

Прочитать загружает данные из базы в существующий экземпляр. Различаем локальную правку, записанное значение и непрозрачную строку ВерсияДанных.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

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

  7. Отмена транзакции выполняется и при успехе, и при ошибке. Не заменяйте её фиксацией и не запускайте внутри транзакции вызывающего кода.

  8. Откат базы не отменяет письма, HTTP-запросы и другие внешние действия обработчиков. Поэтому копия рабочей конфигурации с неизвестными обработчиками не заменяет эту подготовку.


Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Запустите учебную задачу вне чужой транзакции";
КонецЕсли;
Ссылка = Справочники.УчебныеТовары.ПолучитьСсылку(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
    Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
    Товар.УстановитьСсылкуНового(Ссылка);
    Товар.Наименование = "Записанная учебная книга";
    Товар.Артикул = "A-01";
    Товар.Цена = 250;
    Товар.Записать();
    Наблюдаемый = Ссылка.ПолучитьОбъект();
    Если Наблюдаемый = Неопределено Тогда
        ВызватьИсключение "Собственный записанный товар не найден";
    КонецЕсли;
    ВерсияДо = Наблюдаемый.ВерсияДанных;
    Наблюдаемый.Наименование = "Только в памяти";
    Сообщить(Наблюдаемый.Модифицированность());
    Наблюдаемый.Прочитать();
    Сообщить(Наблюдаемый.Наименование = "Записанная учебная книга");
    Сообщить(Не Наблюдаемый.Модифицированность());
    Сообщить(Наблюдаемый.ВерсияДанных = ВерсияДо);
    Сообщить(ТипЗнч(ВерсияДо) = Тип("Строка"));
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(Ссылка.ПолучитьОбъект() = Неопределено);

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

  1. Записываем только собственный новый объект в отменяемой транзакции и получаем отдельный экземпляр по его ссылке.

  2. Сохраняем строку версии как непрозрачное значение. Это не дата и не номер выпуска конфигурации.

  3. Присваивание Наименование изменяет объект в памяти; Записать для этой правки не вызывается.

  4. Прочитать заменяет локальные значения записанными. В этом уроке других записей между чтениями нет, поэтому версия остаётся прежней.

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

  1. Пять сравнений внутри транзакции Истина; после отката собственный товар отсутствует.

  2. Несохранённое Только в памяти исчезло, записанное наименование восстановлено.

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

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

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

  1. Не вызывайте Прочитать до записи нового объекта: строки в базе ещё нет.

  2. Прочитать может уничтожить несохранённые изменения пользователя; в интерфейсе это требует явного решения.

  3. Сравнение версий здесь не моделирует гонку двух реальных сеансов.

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

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

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

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

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