При работе с формами в 1С:Предприятии, свойство Модифицированность является ключевым индикатором для пользователя о том, что данные, отображаемые в форме, были изменены и требуют сохранения. Когда этот признак взведен, в заголовке формы мы видим характерный символ "*", сигнализирующий о необходимости записи изменений.
Платформа 1С автоматически устанавливает признак модифицированности формы в определенных случаях. Рассмотрим подробнее эти сценарии:
Однако, нередко возникают ситуации, когда мы вносим изменения в данные формы программно, но автоматического взведения флага Модифицированность не происходит. Выясним причину такого поведения и разберем, как с этим работать.
Проанализируем ситуацию, когда встроенный механизм не срабатывает, даже если данные объекта на форме были изменены кодом. Это часто вызывает недоумение, но является штатным поведением платформы, имеющим под собой логичные основания:
Модифицированность формы. Особенно это актуально, если изменения происходят на сервере и не имеют прямого "отражения" в клиентской части формы. Мы можем наблюдать, что изменение объекта не равносильно изменению данных формы в контексте механизма модифицированности.Объект.Модифицированность(): Не следует путать свойство формы Модифицированность с методом объекта Объект.Модифицированность(). Метод объекта, доступный на сервере, может возвращать Истина даже при отсутствии интерактивных изменений, например, из-за версионности данных перед записью. Этот метод имеет свою область применения, но он не управляет признаком модифицированности самой формы.Таким образом, когда мы сталкиваемся с тем, что "встроенный механизм не работает" при программных изменениях, это не является ошибкой, а скорее особенностью архитектуры. Нам приходится самостоятельно заботиться об установке флага модифицированности формы, чтобы обеспечить корректное поведение интерфейса для пользователя.
В большинстве случаев, когда автоматическое взведение флага Модифицированность не происходит, единственным надежным решением является его ручная установка. Разберем по шагам, как это сделать, и в каких сценариях это необходимо.
Модифицированность значение Истина. Это делается с помощью следующего кода:
ЭтаФорма.Модифицированность = Истина;
Данный код должен быть вызван после того, как мы программно изменили данные формы или объекта, находящегося на форме.
Модифицированность = Истина;.
Посмотрим на пример изменения табличной части документа:
&НаСервере
Процедура ЗаполнитьТоварыНаСервере()
// Предположим, что Объект - это основной реквизит формы типа ДокументОбъект
Объект.Товары.Очистить();
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("ПримерНоменклатуры");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 100;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
// После программного изменения табличной части
// устанавливаем признак модифицированности формы
ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры
ЭтаФорма.Модифицированность = Истина;.Многие типовые конфигурации 1С активно используют ручную установку Модифицированность = Истина;, что подтверждает этот подход как стандартную практику при программном изменении данных.
После успешной записи измененного объекта, нам часто требуется сбросить флаг модифицированности, чтобы форма перестала сигнализировать о незаписанных изменениях. Рассмотрим, как это сделать:
Для сброса флага модифицированности, мы устанавливаем его в Ложь:
ЭтаФорма.Модифицированность = Ложь;
Обычно это делается в обработчиках событий, которые срабатывают после записи объекта, например, в ПриЗаписиНаСервере() или после вызова команды "Записать". Платформа также автоматически сбрасывает этот признак после успешной записи объекта.
Проанализируем некоторые важные аспекты, связанные с признаком модифицированности формы:
ПередОткрытием() vs ПриОткрытии():
ПередОткрытием(). Изменения, сделанные здесь, обычно не взводят флаг модифицированности.ПриОткрытии().Модифицированность формы доступно для чтения и записи как на клиенте, так и на сервере (если форма открыта).Таким образом, понимание механизмов работы свойства Модифицированность и умение его корректно использовать позволяет нам создавать более надежные и удобные интерфейсы для пользователей 1С.