Как изменить модифицированность 1с

Как изменить признак модифицированности документа?

Как изменить признак модифицированности документа?

Я
   pececillo

06.03.09 — 20:23

Здравствуйте.

При входе в форму документа производятся некоторые действия, которые устанавливают признак модифицированности документа в 1.

А как можно этот признак отменить, с тем чтобы при нажатии на кнопку «Закрыть» не было запроса о сохранении документа?

   АЛьФ

1 — 06.03.09 — 20:25

2(0) Не производить «некоторые действия».

   pececillo

2 — 06.03.09 — 20:26

Аа! Понятно!

А если всё-таки?

   Cthulhu

3 — 06.03.09 — 20:29

НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); // :[|||||||||]:

   pececillo

4 — 06.03.09 — 20:32

Нет, мне надо, чтобы если форма была просто открыта, документ не записывался. А если клиент что-то менял, то чтобы всё происходило как обычно-задавался вопрос о сохранении.

   pececillo

5 — 06.03.09 — 20:38

Мне надо какую-нибудь простая хрень типа

Форма.Модифицированность(0)

   KRV

6 — 06.03.09 — 20:41

ЖКК

   pececillo

7 — 06.03.09 — 20:42

Что такое ЖКК?

   Cthulhu

8 — 06.03.09 — 20:42

(4): «мальчег, ты не тормаzzz.. ты — йакарь!»

в (3) нифига и не записывается…

   pececillo

9 — 06.03.09 — 20:47

(8) спасибо. Для такого Ньютона как ты ещё раз поясняю:

НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); — вообще никогда ничего не запишет.

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

Но вот если он что-то изменил, тогда при нажатии кнопки «закрыть» его спросили, сохранять ли документ.

   KRV

10 — 06.03.09 — 20:53

фотку в студию!

   pececillo

11 — 06.03.09 — 20:55

(10) Я тебя поцелую. Потом. Если захочешь.

   KRV

12 — 06.03.09 — 20:55

не, не надо…

   Cthulhu

13 — 06.03.09 — 21:06

(9): пожалуйста. Для такой альтернативно одаренной личности как ты поясняю.

в (3) дан предельно корректный и верный ответ на вопрос, который задан («Как изменить признак модифицированности документа?»).

в (9) выясняется, что на самом деле(!) интересует вопрос «как узнать, поменял ли пользователь что-нибудь в документе?».

Задавай правильные вопросы.

   Classic

15 — 06.03.09 — 22:51

(9)
»
НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); — вообще никогда ничего не запишет.
»

А флаг модифицированности снимет?

   pececillo

17 — 06.03.09 — 23:13

(16) Офигительную траву куришь!

   pececillo

18 — 06.03.09 — 23:17

(15) Это работает, только прибавляет секунд 10-15 к времени открытия документа. Неприемлемо.

   los_hooliganos

19 — 06.03.09 — 23:24

особо тяжелый случай.

создай копию и открой её. при записи сравнивай.

   FN

20 — 07.03.09 — 00:14

В FormEx по-моему есть команда снятия модифицированности формы…

   zak555

22 — 07.03.09 — 01:26

(0)

1. какие действия?

2. что за конфа?

3. типовая или как?

   1Сергей

23 — 07.03.09 — 07:41

Если юзверь ничего не делал в документе, а флаг модифицированности (звездень) всё-таки появился, то ошибка в коде. Меняй её

   Mikeware

24 — 07.03.09 — 08:01

Ошибка там же, где и обычно? :-)

   1Сергей

25 — 07.03.09 — 08:27

точно

   ДенисЧ

26 — 07.03.09 — 08:53

А всё-таки в (1) самый правильный ответ. Что это за ПриОткрытии() такое, что документ меняет?

   Cthulhu

27 — 07.03.09 — 12:05

(23),(26): дело в том, что это совершенно не обязательно именно «ошибка».. модифицированность взводит иногда код, который качается только интерфейса и фактически не изменяет данных..

   ДенисЧ

28 — 07.03.09 — 12:10

(27) Когда код не меняет данные, он не меняет модифицированность.

   Cthulhu

29 — 07.03.09 — 12:25

(28): даже если не спорить с тобой (при твоей неправоте;)): вариант документа с двумя таб.частями загнанными в данных в композитную таб.часть, и при визуализации раскидываемыми по закладкам (в зависимости от закладки в мн.части изменяется состав показываемых колонок МнЧ и строки) — нука сделай без изменения модифицированности?..

   Mikeware

30 — 07.03.09 — 12:58

(29) Это не совсем хороший метод представления второй табчасти

   Cthulhu

31 — 07.03.09 — 13:04

(30): это как раз совсем хороший метод для подходящих случаев… если под «хорошестью» понимать достижение желаемого результата (полное сохранение штатной функциональности работы с МнЧ) при минимуме трудозатрат затрат (как на рисование работы с ТЗ на морде, например).. ))))

   Mikeware

32 — 07.03.09 — 13:15

(31)Есть объект ДопРеквизиты, и допТабЧасть,в которых хранятся реквизиты и доп.табчасти. Для работы с доп. табчастями используется ТабличноеПоле.

   Cthulhu

33 — 07.03.09 — 13:48

(32): мы об 1с вроде бы а не о сторонних поделках..

   Mikeware

34 — 07.03.09 — 13:50

(33) Ну, и «множественность ТЧ» штатно не предусмотрена.

Я с тем же успехом могу сказать про (29)- «мы говорим не об извратах». :-)

   Cthulhu

35 — 07.03.09 — 14:16

(34): «множественность ТЧ» — это не функционал, а задача, которая достаточно часто встречается в предметной области, и которую нужно решать в 1с.. способов шения немного, и я привел достаточно реальный способ решения этой задачи в рамках 1с, при реализации которого возникает проблема, являющаяся темой топика… так что мух и котлеты сваливай в кучу и занимайся передёргиваниями с другими собеседниками, умник..

   pececillo

36 — 07.03.09 — 14:57

Я же не прошу дать мне совет, как лучше сделать? Также я не прошу опытных определить степень моих знаний и умений.

Я просто спрашиваю:

Можно ли программно установить признак модифицированности в «0»?

(3) — это один из вариантов, но он очень затормаживает выход из документа.

Вот и всё. Если кто-то умеет, подскажите, а не умеете (или это невозможно) — не надо.

   Злопчинский

37 — 07.03.09 — 14:59

формексом можно!

   Mikeware

38 — 07.03.09 — 15:01

(35) Я тоже привел достаточно удобный и многократно реализованый.

зы. закусывать надо…

(36) Агрессивность дятлов возрастает. ключевое слово — FormEx. Если это не поможет  — то «aпстена»

   pececillo

39 — 07.03.09 — 15:02

(37) я формексом только кое-какие данные подсвечиваю, другими возможностями не пользуюсь. Если знаете как, подскажите. (Конечно не поленюсь и почитать :) )

   Злопчинский

40 — 07.03.09 — 15:13

СбросМодифицированности / ResetModify

Синтаксис: СбросМодифицированности()

Описание: Сбрасывает флаг модифицированности для текущей формы.

   Cthulhu

41 — 07.03.09 — 15:27

(38): привел только на словах и вне штатніх средств, я тебе єто уже говорил… советы свои непрошенные совершенно спокойно можешь засунуть обратно в организьм..

(36): вполне возможно ускорить запись в отменяемой транзакции — если ввести переменную модуля — флаг отказа от проверок при записи.. к тому же замедление записи — это само по себе проблема которую неплохо бы решить вне(!) зависимости от использования данного метода решения совсем другой проблемы…

   pececillo

42 — 07.03.09 — 16:21

(40) Спасибо :)

  

Злопчинский

43 — 07.03.09 — 16:25

Пжста..

Определяем модифицированность объекта на сервере.

Задача для примера:

При записи документа «Заказ клиента», если у него при редактировании изменилось значение реквизита «Пометка удаления», нужно выполнить какой-то программный алгоритм. Если значение не изменилось, то алгоритм выполнять не нужно. В общем, цель – определить, изменилось ли значение реквизита «Пометка удаления» перед тем, как документ будет записан.

У управляемой формы есть свойство Модифицированность. Но в данном случае оно вряд ли пригодится, так как пометка удаления может устанавливаться не из формы документа. Дальше приходит на ум использовать метод объекта метаданых «ДокументОбъект» Модифицированность(). Однако в отладчике видно, что даже если ничего не менять в документе, то при записи метод Модифицированность() всё равно принимает значение Истина.

Но выход есть. Отследить и обработать изменение реквизита «Пометка удаления» можно с помощью метода ДополнительныеСвойства. Для этого нам понадобится внести небольшие дополнения в процедуры модуля объекта документа.

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

В процедуре ПередЗаписью() мы сравниваем значение реквизита «Пометка удаления» редактируемого документа с значением, которое записано в базе. Если значения не равны, то записываем признак изменённости в дополнительные свойства, и далее используем его в процедуре ПриЗаписи():

Процедура ПриЗаписи(Отказ)
	
	Если ДополнительныеСвойства.Свойство("ПометкаУдаленияИзменена", Истина) Тогда
		// Произвольная обработка условия...
	КонецЕсли;
	
КонецПроцедуры
Информация о материале
Категория: Программирование 1С

Опубликовано: 12 сентября 2018

Если надо проверить, были ли изменены данные на форме, то поможет свойство формы управляемой формы «Модифицированность», доступный НаКлиенте.

Например

&НаКлиенте

Если Модифицированность Тогда

КонецЕсли;

Это свойство можно установить программно:

Модифицированность = Истина 

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

Если 

Не надо путать с методом объекта Объект.Модифицированность(). Этот метод доступен НаСервере. С его использованием могут возникнуть проблемы, если мы хотим проверить были ли изменены данные на форме, так как если мы будем получать объект по ссылке, то Объект.Модифицированность() всегда вернет Ложь, так как мы только что считали его из базы. Если будем получать объект из реквизита формы, то этот метод всегда вернет Истина, так как изначально реквизит был пустой, а потом мы его заполнили контекстом.

Метод Объект.Модифицированность() возможно использовать только в том случае, если все манипуляции с объектом происходят программно: сначала получили, потом что-то поделали, а потом можно и проверить, изменился ли загруженный ранее объект.

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

Функция ОбъектМодифицирован(Объект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) 
 
 Ссылка = Объект.Ссылка;
 Метаданное = Ссылка.Метаданные();
 
 Для каждого Реквизит из Метаданное.Реквизиты Цикл
 Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 
 Если ПроверятьСтандартные Тогда
 Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл
 Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 КонецЕсли;
 
 
 Если ПроверятьТабличныеЧасти Тогда
 Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл
 
 Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда
 Возврат Истина;
 КонецЕсли;
 
 Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл
 ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс];
 СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс];
 Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл
 Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 КонецЦикла;
 
 КонецЦикла; 
 КонецЕсли;
 
 Возврат Ложь;
 
КонецФункции

Допустим, стоит задача, необходимо в справочнике хранить дорожную карту в виде графической схемы и её описание в виде табличного документа. Для решения этой задачи необходимо создать в справочнике два реквизита с типом ХранилищеЗначений. В форме элемента справочника создать реквизиты с типами ГрафическаяСхема и ТабличныйДокумент. При открытии формы данные из реквизитов объекта загружаются в реквизиты формы, при записи выполняется обратная операция. Теперь давайте разберемся, нужно ли устанавливать для реквизитов формы свойство «Сохраняемые данные» или нет?

Для эксперимента создадим два реквизита формы с разным состоянием свойства «Сохраняемые данные» (см. рисунок 1):

  • ДорожнаяКарта — тип ГрафическаяСхема, свойство «Сохраняемые данные» установлено;
  • ОписаниеДорожнойКарты — тип ТабличныйДокумент, свойство «Сохраняемые данные» не установлено.
Рисунок 1. Реквизиты формы

В режиме 1С:Предприятие откроем элемент справочника, если мы изменим описание дорожной карты, то ничего не произойдет, но, если мы изменим дорожную карту, то в заголовке формы увидим звездочку (*) — признак модифицированности (см. рисунок 2). Данная звездочка означает, что данные, сохраняемые в базу данных, изменены.

Рисунок 2. Признак модифицированности у формы

Формы с установленным признаком модифицированности перед закрытием предупреждают пользователя о возможности потери изменений в данных и предлагают сохранить изменения (см. рисунок 3).

Рисунок 3. Вопрос о сохранении изменений

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

Установим для пользователя на уровне прав только просмотр элементов справочника (см. рисунок 4).

Рисунок 4. Право только просмотра справочника

В режиме 1С:Предприятие реквизит ДорожнаяКарта не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы не должны быть доступны для редактирования, так как нет смысла пользователю разрешать редактировать реквизиты формы, если элемент справочника доступен только для просмотра.

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

	
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	
    ЭтотОбъект.ТолькоПросмотр = Истина;	
КонецПроцедуры
  

В режиме 1С:Предприятие реквизит ДорожнаяКарта так же не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы должны быть доступны только для просмотра, так как форма, открытая только для просмотра, не позволит сохранить изменения в их данных.

Вывод

Свойство «Сохраняемые данные» у реквизита формы следует устанавливать, если его данные сохраняются в базу данных. В рамках нашей задачи нужно для обоих реквизитов формы установить свойство «Сохраняемые данные».

Реквизит с установленным свойством «Сохраняемые данные»:

  • Устанавливает признак модифицированности у формы после редактирования;
  • Не доступен для редактирования при отсутствии права редактирования объекта;
  • Не доступен для редактирования в форме, которая открыта только на просмотр.

Понравилась статья? Поделить с друзьями:
  • Как изменить модель флешки
  • Как изменить модель семьи
  • Как изменить модель игрока майнкрафт
  • Как изменить модель игрока mcreator
  • Как изменить модель дубленки