| 
    
            
         
         | 
    
  | 
не работает "Заблокировать()" в попытке | ☑ | ||
|---|---|---|---|---|
| 
    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  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |