|
не работает "Заблокировать()" в попытке | ☑ | ||
---|---|---|---|---|
0
assasu
13.02.18
✎
06:42
|
Добрый день.
вот эта конструкция Попытка ДокументОбъект.Заблокировать(); Исключение Сообщить("блаблабла"); КонецПопытки вдруг перестала работать в попытке, т.е. исключения нет , я виду окно с красным крестом и вариант только закрыть приложение. кто то встречал может? |
|||
1
assasu
13.02.18
✎
06:46
|
работаем на 8.3.9.1850, УТ 10.3
|
|||
2
Мимохожий Однако
13.02.18
✎
07:31
|
Отладчик до слова Попытка доходит?
|
|||
3
rphosts
13.02.18
✎
07:36
|
(1) УТ 10? Это та, что на старых формах?
|
|||
4
assasu
13.02.18
✎
07:37
|
да,доходит.
пробовал менять режим блокировок на автоматический - тоже самое. |
|||
5
assasu
13.02.18
✎
07:37
|
(3) да
|
|||
6
catena
13.02.18
✎
07:59
|
Что написано в окне с красным крестом и в каком стратегическом месте выполняется конструкция?
Режим блокировок - это из другой оперы. |
|||
7
assasu
13.02.18
✎
08:32
|
(6) написано что объект уже заблокирован .
конструкция как раз и задумывалась как предупреждение, вновь открывающему документ. А оказалось что не работает оно |
|||
8
assasu
13.02.18
✎
08:35
|
(6) "Ошибка блокировки объекта, объект уже заблокирован"
|
|||
9
Сияющий в темноте
13.02.18
✎
08:39
|
Оно же,насколько я помню,возвращает успешность блокировки,то есть исключения не будет
|
|||
10
assasu
13.02.18
✎
08:40
|
(9) посмотри инет. везде только про эту конструкцию и пишут
|
|||
11
Гипервизор
13.02.18
✎
08:44
|
У меня все работает. Ну не отрабатывает у вас в попытке, сделайте без попытки. Проверяйте успешность через Заблокирован().
|
|||
12
assasu
13.02.18
✎
08:50
|
(11) собственно, написал потому что оно и работало ранее. и работало на той же платформе . появилось недавно и внезапно.
|
|||
13
Сти
13.02.18
✎
09:36
|
(12) режим совместимости не меняли?
|
|||
14
patria0muerte
13.02.18
✎
09:42
|
(11) Ну не совсем эти методы совместимы, если мне память не изменяет.
Там идея в том, что метод Заблокирован() определяет только объекты, заблокированные методом Заблокирован(), т.е. если объект просто открыт и изменен пользователем - то Заблокирован() все равно вернет Ложь. Заблокировать() в Попытке я например юзаю в случаях когда мне нужно обработать пачку документов, но при этом - не трогать объекты, которые сейчас заблокированы пользователями. |
|||
15
patria0muerte
13.02.18
✎
09:42
|
+(14) *метод Заблокирован() определяет только объекты, заблокированные методом ЗаблокироваТЬ()
|
|||
16
patria0muerte
13.02.18
✎
09:46
|
(0) А нафига вообще эти свистопляски? 1С же сама блокирует объект, если юзер его модифицировал
|
|||
17
catena
13.02.18
✎
10:15
|
(16)Это как раз, когда надо, чтобы юзер не модифицирнул в процессе.
|
|||
18
patria0muerte
13.02.18
✎
10:36
|
(17) А как он его модифицирует, если объект уже заблокирован?
|
|||
19
assasu
13.02.18
✎
11:58
|
(16) свистопляска началась с того что два человека открыли один и тот же документ. ранее у одного из них всплывало окно, он его закрывал и все. Теперь все можно только закрыть аварийно. Т.е. главная проблема - аварийное завершение сеанса,хотя сам метод в попытку обернут
|
|||
20
catena
13.02.18
✎
12:00
|
(18)Так вот его и надо заблокировать, чтобы пользователь его не трогал во время обработки
|
|||
21
assasu
13.02.18
✎
12:02
|
(13) стоит Версия 8.2.16. кажется не менялся вообще
|
|||
22
assasu
13.02.18
✎
12:09
|
(15) проверил только что. метод вернул Ложь. хотя под другим пользователем я выполнил Заблокировать()
в общем не так оно как то работает |
|||
23
PiotrLoginov
13.02.18
✎
12:10
|
(21) ох уж это "кажется"...
|
|||
24
assasu
13.02.18
✎
12:13
|
(23) я прежде полистал инет. ничего не нашел по поводу изменения поведения "Заблокировать()" с изменением платформы.
|
|||
25
Мимохожий Однако
13.02.18
✎
12:14
|
(19) Сделай проверку ПередОткрытием() и Сообщить() при неудаче
|
|||
26
assasu
13.02.18
✎
12:15
|
(25) я ее в (0) и сделал...
|
|||
27
Мимохожий Однако
13.02.18
✎
12:17
|
(26) В каком событии разместил?
|
|||
28
assasu
13.02.18
✎
12:22
|
(27) модуль формы, Перед открытием.
пробовал так же и При открытии |
|||
29
Мимохожий Однако
13.02.18
✎
12:46
|
Какая платформа? Управляемая форма или обычная?
у меня в УТ10.3 для внешней обработки работает такая конструкция Спр=Справочники.ВнешниеОбработки.НайтиПоНаименованию(ЭтотОбъект.Метаданные().Представление()); Если Спр.Пустая() Тогда Возврат; КонецЕсли; НайдОбъект=Спр.ПолучитьОбъект(); Попытка НайдОбъект.Заблокировать(); Исключение Предупреждение("Обработка "+НайдОбъект+"уже открыта ранее");// + "!"+ ОписаниеОшибки()); Отказ=Истина; КонецПопытки; |
|||
30
assasu
13.02.18
✎
12:54
|
(29) работаем на 8.3.9.1850, УТ 10.3, формы обычные.
этот код выдаст "Обработка...уже открыта ранее", т.к. сработал о исключение. Мой код аналогичен, только не доходит дело до попытки, фатальная ошибка сразу на .Заблокировать() |
|||
31
Мимохожий Однако
13.02.18
✎
12:56
|
Покажи код как получаешь ДокументОбъект
|
|||
32
assasu
13.02.18
✎
12:56
|
(31) ЭтотОбъект
|
|||
33
Мимохожий Однако
13.02.18
✎
12:57
|
(32) Это не код
|
|||
34
assasu
13.02.18
✎
13:01
|
(33)
Если не ЭтоНовый() тогда Попытка ЭтотОбъект.Заблокировать(); Исключение Предупреждение("Документ открыт другим пользователем"); КонецПопытки; КонецЕсли; |
|||
35
Timon1405
13.02.18
✎
13:29
|
#Если Клиент Тогда
Предупреждение("Документ открыт другим пользователем"); #КонецЕсли |
|||
36
assasu
13.02.18
✎
13:30
|
(35) код не выходит в исключение. все заваливается на
ЭтотОбъект.Заблокировать(); |
|||
37
catena
13.02.18
✎
13:36
|
(36)А если написать Попытка к=1/0 Исключение КонецПопытки;
|
|||
38
assasu
13.02.18
✎
13:44
|
(37) это работает в сотне мест конфигурации
|
|||
39
patria0muerte
14.02.18
✎
02:51
|
(19) Так, пажжжи.
У тебя есть документ и два пользователя, которые работают с ним. - Пользователь1 открывает документ. - Пользователь2 открывает документ. - Пользователь1 модифицирует документ, при этом - происходит блокирование объекта средствами платформы. - Пользователь2 при попытке изменить реквизит - получает ошибку о том, что запись уже заблокирована и не может поменять ничего в документе Внимание вопрос: нахрена тебе его еще и кодом блокировать? |
|||
40
assasu
14.02.18
✎
04:57
|
(39)
"- Пользователь2 при попытке изменить реквизит - получает ошибку о том, что запись уже заблокирована и не может поменять ничего в документе " Пользователь получает ошибку о том что документ заблокирован и не может ничего поменять в документе И (внимание!) у него на экране нет кнопки "Продолжить работать", он видит только окно с красным крестом и вариант закрыть приложение |
|||
41
assasu
14.02.18
✎
04:57
|
(39) я и хотел кодом предупредить его о том что кто то сидит в документе..так и код не работает тут ,все валится в аварийное завершение.
|
|||
42
DrZombi
гуру
14.02.18
✎
06:53
|
(41) Любопытненько, получается, что если хотите устойчивую работу кода, то не стоит гнаться за обновлениями клиента 1С :)
|
|||
43
assasu
14.02.18
✎
06:59
|
(42) да, согласен.
|
|||
44
DrZombi
гуру
14.02.18
✎
07:05
|
(43) Остается иметь возможность разворачивать несколько серверов 1С, различных версий.
Полюбому у вас еще бухия есть? |
|||
45
assasu
14.02.18
✎
07:23
|
у нас все есть
|
|||
46
DrZombi
гуру
14.02.18
✎
07:27
|
(45) Предложи админам установить еще один сервер 1С
|
|||
47
DrZombi
гуру
14.02.18
✎
07:29
|
+ Может сейчас уже не поможет, но в будущем сможешь в торговой БД работать с ошибками одной и той же версии клиента. А не ловить новые баги от новых релизов :)
|
|||
48
patria0muerte
14.02.18
✎
07:55
|
(40) "Пользователь получает ошибку о том что документ заблокирован и не может ничего поменять в документе И (внимание!) у него на экране нет кнопки "Продолжить работать", он видит только окно с красным крестом и вариант закрыть приложение"
Это (появление окна с красным крестом) происходит в тот момент, когда выполняется строчка: ДокументОбъект.Заблокировать(); Верно? |
|||
49
patria0muerte
14.02.18
✎
07:56
|
+(48)Я просто понять не могу немного: Валится в такую же ошибку и в том случае, когда в коде нет никаких Заблокировать()?
|
|||
50
assasu
14.02.18
✎
08:53
|
(48) нет. изначально такого кода не было.
нормальная реакция к которой все привыкли : открываешь повторно документ, получаешь предупреждение что открыто уже кем то , закрываешь документ и работаешь дальше. Тут нет предупреждения , можно только закрыть всю программу целиком. |
|||
51
assasu
14.02.18
✎
08:54
|
(49) да, верно... валится. а код появился как я написал в (41)
|
|||
52
Timon1405
14.02.18
✎
09:42
|
(50) а в ЖР что пишет в этот момент? может прав нет на реквизиты документа или что-то подобное.
|
|||
53
assasu
14.02.18
✎
09:51
|
(52) пусто в ЖР
|
|||
54
Мимохожий Однако
14.02.18
✎
10:12
|
Документ открывается из формы списка. Значит блокировку надо делать в этой форме в момент события выбора документа, а не через ЭтотОбъект.
|
|||
55
assasu
14.02.18
✎
10:26
|
не влияет это ни на что
|
|||
56
strrike
14.02.18
✎
10:28
|
ТиИ сделай
|
|||
57
Фрэнки
14.02.18
✎
10:38
|
(55) // работаем на 8.3.9.1850, УТ 10.3
вроде нормальный выбор платформы. Наверное и работаете давно. А копию базы поднять не пробовал? Может в копии этот глюк не проявит себя никак? Ну и прогнать все мыслимые надругательства на базой в плане тестирования на ошибки. Кстати, в файловом режиме как она? |
|||
58
assasu
14.02.18
✎
10:57
|
(57) на копии и тестируем . в файле ее запустить нет возможности - размер большой.
Сейчас думаю как эту копию можно унизить и надругать. |
|||
59
Мимохожий Однако
14.02.18
✎
11:02
|
(55) Краткость - сестра таланта. Видимо, не в твоём случае. Как партизан-подробности и клещами не выцепить.
(58) Создай пустую базу из файла конфигурации, заполни несколько строк и проверь. |
|||
60
assasu
14.02.18
✎
11:06
|
(60) прочти внимательно все что было выше.
еще раз для тебя : попытка к = 1/0; исключание сообщить("ты делишь на ноль!"); конецпопытки; выдает "ты делишь на ноль" а вот это попытка Этотобъект.Заблокировать() исключение сообщить("ты делишь на ноль"); конецпопытки закрывает сеанс и не идет в исключение |
|||
61
Фрэнки
14.02.18
✎
11:16
|
(60) но не на всех видах документов, правильно?
Или на любых видах, где только эту конструкцию применили? |
|||
62
assasu
15.02.18
✎
06:26
|
(61) ситуация получила развитие вчера.
такая проблема наблюдается на всех видах документов. кроме того - само собой перестало работать динамическое обновление. даже если просто добавить пару строк в код динамически не обновиться - изменился вход в конфигуратор , если ты вторым пользователем заходишь то сразу появляется окно с кнопкой "ОК" и предупреждением что конфигуратор занят. Ранее там была кнопка "Попробовать еще раз" |
|||
63
assasu
28.02.18
✎
06:29
|
кому интересно :
все вылечилось с переходом на 8.3.10.2699 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |