Проверка изменения реквизита

1. Stella_K 13.11.13 11:23 Сейчас в теме
Всем привет! На форме документа есть реквизит, при изменении которого выходит сообщение Вопрос("Реквизит изменен! Сохранить изменения?", РежимДиалогаВопрос.ДаНет, 0); Где взять значение этого реквизита, чтобы при положительном ответе сохранить новое значение, а при отрицательном - старое? Использую обработчик события При изменении, в него передается Элемент с типом ПолеФормы. Думала использовать свойства ПутьКДанным, но его значение "Ошибка чтения значения".
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. krasavcheg2 13.11.13 11:37 Сейчас в теме
(1) Stella_K, а где этот код вызывается Вопрос("Реквизит изменен! Сохранить изменения?", РежимДиалогаВопрос.ДаНет, 0); в модуле формы или в общем модуле?
39. Artemka20121 6 13.11.13 12:41 Сейчас в теме
(1) в объекте - старое значение, в ссылке - текущее значение.
40. Artemka20121 6 13.11.13 12:42 Сейчас в теме
(39) тьфу ты .. наоборот :) в ссылке - предыдущее значение , в объекте - текущее
user640247; idiked; +2 Ответить
41. user640247 21.02.21 21:15 Сейчас в теме
2. Alximikkk 20 13.11.13 11:36 Сейчас в теме
А какой тип данных? Если строка или число, то можно попробовать использовать обработчик "ОкончаниеВводаТекста", а если ссылочный тип, то обработка выбора.
4. Stella_K 13.11.13 11:41 Сейчас в теме
(2) Alximikkk, Булево
(3) krasavcheg2, в модуле формы
7. krasavcheg2 13.11.13 11:47 Сейчас в теме
(4) Stella_K, реквизит на форме к примеру "Реквизит1" код обращения к реквизиту формы:
Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"
код обращения к реквизиту объекта:
Объект.Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"
10. krasavcheg2 13.11.13 11:54 Сейчас в теме
12. Stella_K 13.11.13 11:59 Сейчас в теме
(10) krasavcheg2, Разбираюсь. Я сделала так:
Режим = РежимДиалогаВопрос.ДаНет;
	Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
	Если Ответ = КодВозвратаДиалога.Да Тогда
		Если Объект.РаспределятьСумму= Истина Тогда
			Объект.РаспределятьСумму = Истина;
		Иначе
			Объект.РаспределятьСумму = Ложь;
		КонецЕсли;
	Иначе 
		Если Объект.РаспределятьСумму = Истина Тогда
			Объект.РаспределятьСумму = Ложь;
		Иначе
			Объект.РаспределятьСумму = Истина;
		КонецЕсли;
	КонецЕсли;
Показать

Но думаю, что не так это делается.
16. Alximikkk 20 13.11.13 12:03 Сейчас в теме
(12) Stella_K, а у вас реквизит, который вы меняете это реквизит объекта или реквизит формы?
Просто если это реквизит формы, тогда вариант:

13. krasavcheg2 13.11.13 12:00
(11) Stella_K, ок не вопрос событие ПриИзменении(Элемент)
код обращения к реквизиту формы:
Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"
код обращения к реквизиту объекта:
Объект.Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"

не прокатит.
17. mrmasson 57 13.11.13 12:04 Сейчас в теме
(12) Stella_K,
Ваш код можно проще сделать (смотрел только этот код!)
  Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда        
      Объект.РаспределятьСумму = Элемент;       
    Иначе   
        Объект.РаспределятьСумму = не Объект.РаспределятьСумму;        
    КонецЕсли;
18. krasavcheg2 13.11.13 12:04 Сейчас в теме
(12) Stella_K, как имя реквизита и где он объявлен на форме или в объекте?
21. Stella_K 13.11.13 12:08 Сейчас в теме
(18) krasavcheg2, Имя реквизита - РаспределятьСумму, это реквизит объекта. И он выведен на форму.
22. krasavcheg2 13.11.13 12:09 Сейчас в теме
5. krasavcheg2 13.11.13 11:43 Сейчас в теме
(2) Alximikkk, Я так понимаю можно завязаться на событие "ОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка);" в зависимости от задачи сохранить старое значение в переменой и после твоей проверки присвоить либо старое либо новое значение для реквизита (формы/объекта)
8. Alximikkk 20 13.11.13 11:47 Сейчас в теме
(5) krasavcheg2, да я предлагаю нечто подобное.
9. krasavcheg2 13.11.13 11:48 Сейчас в теме
(8) Alximikkk, я видел) но позже
11. Stella_K 13.11.13 11:56 Сейчас в теме
(5) krasavcheg2, но я же меняю не текстовый реквизит, а булевый
13. krasavcheg2 13.11.13 12:00 Сейчас в теме
(11) Stella_K, ок не вопрос событие ПриИзменении(Элемент)
код обращения к реквизиту формы:
Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"
код обращения к реквизиту объекта:
Объект.Реквизит1 = "Та переменная с значением которое тебе необходимо оставить"
6. Alximikkk 20 13.11.13 11:44 Сейчас в теме
Скорее всего в модуле формы. Но в принципе может быть и отсылка на какой-то клиентский общий модуль. Я думал, что вы в обработчике его вызываете сами. В обработчике "ПриИзменение" в значение "Элемент" уже хранятся измененные данные.
14. krasavcheg2 13.11.13 12:02 Сейчас в теме
Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        Если Реквизит1 = Истина Тогда
            Объект.РаспределятьСумму = Истина;
        Иначе
            Объект.РаспределятьСумму = Ложь;
        КонецЕсли;
    Иначе 
        Если Объект.РаспределятьСумму = Истина Тогда
            Объект.РаспределятьСумму = Ложь;
        Иначе
            Объект.РаспределятьСумму = Истина;
        КонецЕсли;
    КонецЕсли;
Показать
15. krasavcheg2 13.11.13 12:02 Сейчас в теме
Или для реквизита объекта
Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        Если Объект.Реквизит1 = Истина Тогда
            Объект.РаспределятьСумму = Истина;
        Иначе
            Объект.РаспределятьСумму = Ложь;
        КонецЕсли;
    Иначе 
        Если Объект.РаспределятьСумму = Истина Тогда
            Объект.РаспределятьСумму = Ложь;
        Иначе
            Объект.РаспределятьСумму = Истина;
        КонецЕсли;
    КонецЕсли;
Показать
19. mrmasson 57 13.11.13 12:07 Сейчас в теме
(15) krasavcheg2, Упростите код!!!! зачем эти лишние условия и проверки?!
Режим = РежимДиалогаВопрос.ДаНет;
 Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда
         Объект.РаспределятьСумму = Объект.Реквизит1;
    Иначе 
       Объект.РаспределятьСумму = НЕ Объект.РаспределятьСумму;      
    КонецЕсли;
25. krasavcheg2 13.11.13 12:12 Сейчас в теме
(19) mrmasson, пока не вижу в этом смысла дабы не пудрить человеку мозги ps: не задумывался об этом)
20. Alximikkk 20 13.11.13 12:08 Сейчас в теме
Вообщем если реквизит объекта, тогда вариант krasavcheg2 подходит, а если это реквизит формы, тогда возможно(как один из вариантов) использовать еще один реквизит, который будет хранить старое значение нужного вам реквизита)
23. Alximikkk 20 13.11.13 12:09 Сейчас в теме
Если Вопрос("Текст Вопроса", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да тогда
	иначе
	КонецЕсли;
	

Я обычно вопрос так пишу...
It-developer; +1 Ответить
24. krasavcheg2 13.11.13 12:09 Сейчас в теме
Элемент формы к которому привязано событие его имя мне нужно.
26. Stella_K 13.11.13 12:13 Сейчас в теме
(24) krasavcheg2, имя такое же РаспределятьСумму
27. krasavcheg2 13.11.13 12:16 Сейчас в теме
(26) Stella_K,
Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Признак распределения изменен! Сохранить изменения?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Нет Тогда
        Объект.РаспределятьСумму = ложь;
    КонецЕсли;
29. Stella_K 13.11.13 12:20 Сейчас в теме
(27) krasavcheg2, Спасибо, работает)
32. krasavcheg2 13.11.13 12:22 Сейчас в теме
33. Stella_K 13.11.13 12:22 Сейчас в теме
(29) Stella_K, нет, не во всех случаях
36. krasavcheg2 13.11.13 12:27 Сейчас в теме
(33) Stella_K, ну тогда замените "Ложь" на "НЕ Объект.РаспределятьСумму" в этой строке "Объект.РаспределятьСумму = ложь;"
28. Alximikkk 20 13.11.13 12:18 Сейчас в теме
Вообщем я сейчас попробовал варианты разные.
1)При изменение булевского реквизита будь то реквизит объекта, или реквизит формы, в обработчике "При Изменение" уже хранится измененное значение. Тогда необходимо обращаться не к реквизиту объект, а к ссылке в БД, т.е. к Объект.Ссылка.ИмяРеквизита. Вот там хранится старое значение.
30. Alximikkk 20 13.11.13 12:20 Сейчас в теме
(28) Alximikkk, Но обращение к реквизиту ссылки возможно только на сервере, и придётся делать серверный вызов.
31. krasavcheg2 13.11.13 12:21 Сейчас в теме
(28) Alximikkk, Похоже что автору не нужно востанавливать первоначальное значение, если и нужно то на момент уже открытой формы и если при отказе вернуть галочку надо просто
34. mymyka 13.11.13 12:23 Сейчас в теме
Если значение БУЛЕВО и обрабатывается событие его изменения, то в чем проблема догадаться какое было предыдущее? Вполне логично, что Не Элемент.Значение
35. krasavcheg2 13.11.13 12:24 Сейчас в теме
37. Stella_K 13.11.13 12:30 Сейчас в теме
Сделала так:
Если Вопрос("Признак распределения изменен! Сохранить изменения?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
		Объект.РаспределятьСумму = НЕ Объект.РаспределятьСумму;
	КонецЕсли;

Всем большое спасибо за помощь и советы))))
38. krasavcheg2 13.11.13 12:32 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот