|
v8.2 Флажок | ☑ | ||
---|---|---|---|---|
0
ms_ananas
08.09.14
✎
11:07
|
В справочнике в табличной части есть реквизит "Актуальность". У меня есть процедура, которая следит чтобы актуальной была только одна строка. Когда стоит актуальность на двух строках, появляется ошибка, я соглашаюсь с ней, а потом закрываю справочник и при этом нажимаю что не надо сохранять изменения. Но потом когда опять заходишь в справочник значение актуальности осталось на двух строках. Как сделать чтобы не сохранял изменения?
|
|||
1
Steini
08.09.14
✎
11:17
|
Мисс Ананас, как первый вариант могу предложить сделать в модуле справочника в обработчике ПередЗаписью эту вашу проверку, и, в случае не успеха, не позволять записывать элемент справочника.
|
|||
2
_fvadim
08.09.14
✎
11:18
|
или ловить установку флажка и сбрасывать его на всех строчках кроме текущей.
|
|||
3
ms_ananas
08.09.14
✎
11:29
|
(1) перед записью у меня и идет проверка. он проверяет. но если закрыть справочник то данные все равно остались( я не могу понять почему
|
|||
4
Timon1405
08.09.14
✎
11:35
|
Если кинете код в студию(какие формы, какой модуль, какое событие), публике станет понятнее что у вас там происходит.
|
|||
5
Steini
08.09.14
✎
11:43
|
(3) да ну не бывает такого)
могу назадавать наводящие вопросы: 1) формы обычные или управляемые? 2) действительно ли в обработчике модуля объекта (а не формы) ПередЗаписью находится примерно такой код: Если Не МояПроверка() Тогда Сообщить("Слишком много галочек"); Отказ = Истина; Возврат; КонецЕсли; 3) действительно ли на форме помещена табличная часть, а не какое-нибудь табличное поле, которое живет независимой жизнью? 4) действительно ли изначально в этом объекте стояло не больше одной галочки? |
|||
6
ms_ananas
08.09.14
✎
11:51
|
(5) Ааам. форма обычная.
Изменяю конфигурацию ЗИК. Да код находится именно в модуле объекта. Я сама создала эту колонку ссылаясь на реквизит. Никакой независимой жизни быть не может. Галочек не было. Потом например я добавила три галочки на все три строки. Нажимаю записать, появляется ошибка, окей я соглашаюсь. Потом ничего не изменяю, закрываю справочник и не сохраняю изменения. а потом захожу и они правда там остаются. Вот код: Процедура ПередЗаписью(Отказ) ФизическиеЛицаПереопределяемый.ПередЗаписью(ЭтотОбъект, Отказ); Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; #Если ТолстыйКлиентОбычноеПриложение Тогда ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений"); ОбработкаКомментариев.УдалитьСообщения(); #КонецЕсли //изменено админ // проверим дубли строк в таблице Стажи СписокДублейСтажа = Новый СписокЗначений; СписокСтажа = Новый СписокЗначений; Для каждого СтрокаСтажа Из Стажи Цикл Проверка = СтрокаСтажа.Актуальность; // админ Если Проверка = Истина Тогда // админ Если СписокСтажа.НайтиПоЗначению(СтрокаСтажа.ВидСтажа) = Неопределено Тогда СписокСтажа.Добавить(СтрокаСтажа.ВидСтажа); Иначе СписокДублейСтажа.Добавить(СтрокаСтажа.ВидСтажа); КонецЕсли; КонецЕсли; КонецЦикла; Если СписокДублейСтажа.Количество() <> 0 Тогда Отказ = Истина; СрокаСообщенияОбОшибке = "В списке ""Стажи общего характера"" обнаружены записи с повторяющимся видом стажа: " + СписокДублейСтажа; #Если ТолстыйКлиентОбычноеПриложение Тогда ОбработкаКомментариев.ДобавитьСообщение(СрокаСообщенияОбОшибке, Перечисления.ВидыСообщений.Ошибка); ОбработкаКомментариев.ДобавитьСообщение("Актульным может быть только один стаж!", Перечисления.ВидыСообщений.Ошибка); ОбработкаКомментариев.ДобавитьСообщение("Элемент не записан!", Перечисления.ВидыСообщений.Ошибка); ОбработкаКомментариев.ПоказатьСообщения(); #Иначе Сообщить(СрокаСообщенияОбОшибке, СтатусСообщения.Важное); #КонецЕсли КонецЕсли; КонецПроцедуры |
|||
7
ms_ananas
08.09.14
✎
11:55
|
||||
8
Steini
08.09.14
✎
11:55
|
Первое: а в ФизическиеЛицаПереопределяемый.ПередЗаписью(ЭтотОбъект, Отказ); объект, случайно, не записывается? точно? =)
|
|||
9
ms_ananas
08.09.14
✎
11:56
|
(7) это я не трогала, так было изначально в конфе)
|
|||
10
Steini
08.09.14
✎
11:58
|
(9) да, но все же, попробуй свою проверку переместить в самое начало процедуры. Перед ФизическиеЛицаПереопределяемый.ПередЗаписью(ЭтотОбъект, Отказ);
|
|||
11
Timon1405
08.09.14
✎
12:01
|
(10) Лучше прямо в подписку. переопределяемые модули для этого и сделаны, чтобы не править модуль исходного объекта
|
|||
12
ms_ananas
08.09.14
✎
12:06
|
(10) не вышло. ошибку опять выдал. Но после отмены сохранения данные все равно остались.
|
|||
13
break
08.09.14
✎
12:14
|
кеш почистите
|
|||
14
Steini
08.09.14
✎
12:15
|
Что-то мистическое. В таких случаях отладчик в помощь! Мое предложение:
1) ставим точку останова на первую строку в процедуре ПередЗаписью 2) добавляем в табло две переменные: ЭтотОбъект.ТвояТЧ и Ссылка.ТвояТЧ. 3) сравниваем, в Ссылка не должно быть галочек, в ЭтотОбъект - должно быть. 4) далее скрупулезно ищем момент, когда они становятся одинаковыми. |
|||
15
break
08.09.14
✎
12:17
|
(14) или просто Модифицированность()
|
|||
16
ms_ananas
08.09.14
✎
12:18
|
(15) и что даст этот метод? первый раз о нем слышу
|
|||
17
Steini
08.09.14
✎
12:19
|
(15) да это неинформативно, я вон выше немножко тоже ступил))) Ведь все дороги перед записью ведут в обработчик "ПередЗаписью" =)
|
|||
18
ms_ananas
08.09.14
✎
12:20
|
(14) выходит из-за того, что становятся одинаковыми этотобъект и ссылка, данные сохраняются даже при отмене сохранения?
|
|||
19
ms_ananas
08.09.14
✎
12:21
|
(17) у меня даже если я прост сейчас много строк создам и не сохраню их. они все равно сохранятся. Даже если они без галочки
|
|||
20
Один С
08.09.14
✎
12:21
|
(7) типа без палева выложила скрин?
это Мальков Александр Яковлевич.. |
|||
21
Steini
08.09.14
✎
12:22
|
(18) не, я бы так не стал говорить. Вообще, что-то странное, как будто данные записываются где-то еще, не попадая в обработчик ПередЗаписью. Сравнивая в отладчике ЭтотОбъект.Стажи с Ссылка.Стажи можно воочию увидеть, что в текущий момент изменено на форме, а что уже записано в базу данных.
|
|||
22
ms_ananas
08.09.14
✎
12:22
|
(20) ага не заметила. заработалась
|
|||
23
ms_ananas
08.09.14
✎
12:26
|
сейчас даже ради забавы протестировала. добавила 10 новых строк без галочки и две строки с галочкой. Выходит ошибка что должна быть только одна актуальная строка, я соглашаюсь, потом закрываю, не сохраняю, захожу опять, а он все оставил как есть. 12 строк. Почему он так хранит данные? Вдруг пользователь не заметит что копировал строки и сохранит.
|
|||
24
ms_ananas
08.09.14
✎
12:31
|
(21) ладно спасибо большое, буду разбираться)
|
|||
25
break
08.09.14
✎
12:41
|
комментируете весь код в ПередЗаписью(), в связанных подписках, оставляете только Отказ = истина, пробуете что происходит при (23). рекомендую еще кеш почикать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |