Имя: Пароль:
1C
1С v8
не работает "Заблокировать()" в попытке
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
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс