Имя: Пароль:
1C
1C 7.7
v7: Документ открыт на чтение или запись?
0 kalleka
 
11.07.13
10:23
Как определить это в форме документа?

Форма.ТолькоПросмотр(<?>) не подходит, ибо возможно программная установка при открытии.

Вообще мне нужно определить при открытии - блокирует пользователь текущий документ или нет
1 skunk
 
11.07.13
10:26
при открытии первый всегда лочит объект для изменения ... и пофих для чего он его открыл ...
2 mikecool
 
11.07.13
10:26
(1) даже если открыл на просмотр?
3 skunk
 
11.07.13
10:27
(2)вроде как да ... хотя сейчас не слишком в этом уверен
4 kalleka
 
11.07.13
10:28
(2) Нет. При открытии на чтение - не блокирует
5 mikecool
 
11.07.13
10:29
(4) думается у класса документа есть какой то признак, не доступный для использования в 1с
6 skunk
 
11.07.13
10:30
попытка
начатьтранзакцию
записать
отменитьтранзакцию
исключение
документ кто-то залочил
конецпопытки
7 Darych
 
11.07.13
10:30
тупа тогда.. думать лень..
в транзакции попытка записать..
8 skunk
 
11.07.13
10:32
(7)точно

начатьтранзакцию
попытка
 записать
исключение
 сообщить("кто-то лочит");
конецпопытки
отменитьтранзакцию
9 NS
 
11.07.13
10:33
А Блокировка() не катит?
10 Ёпрст
 
11.07.13
10:34
(9) еще как катит.
11 kalleka
 
11.07.13
10:35
(6), (7) , (8)

есть глобальная функция глПриОткрытииДокумента(Конт)

которая вызывается в приоткрытии() всех доков

как думаете корректно будет в нее вставить такую проверку с исключением?

(9),(10) Любой другой мог заблокировать
12 Ёпрст
 
11.07.13
10:37
(11) и че ?
13 Ёпрст
 
11.07.13
10:38
на вот, думаю, тебе нужно это
http://infostart.ru/public/74138/
14 NS
 
11.07.13
10:51
(11) Блокировка() и показывает - заблокирован ли документ кем-либо другим.
15 kalleka
 
11.07.13
10:57
(13) У меня как бы уже есть система, оказалось вот косячок такой в ней


попробовал сейчас ПриНачалеБлокировкиОбъекта, он срабатывает, но не находит объект

Объект = <Объект не найден>(303/Ґ{%)

сейчас ковыряюсь


(14) Блокировка() показывает заблокирован ли вообще документ или нет. А не конкретно этим пользователем
16 Darych
 
11.07.13
10:58
(15) тогда тебе лопата
17 Ёпрст
 
11.07.13
11:18
(15) не угадал, Блокировка как раз показывает, открыл его кто-то кроме тебя "на запись" или нет.
Ты просто неправильно применяешь сей метод.
18 kalleka
 
11.07.13
11:22
(17) Покажи как правильно?

я пробовал что то ворде

Процедура глПриОткрытииДокумента(Конт) Экспорт
       Док = СоздатьОбъект("Документ"+Конт.Вид());
Если док.найтидокумент(Конт.ТекущийДокумент()) Тогда

   Если док.Блокировка(1) = 1 Тогда
// заблокировал кто то другой. Так?
19 kalleka
 
11.07.13
11:27
сейчас все выглядит примерно так

Процедура глПриОткрытииДокумента(Конт) Экспорт
   Если Конт.Форма.ТолькоПросмотр() = 0 Тогда
//фиксирование что пользователь открыл документ, заблокировал


но не учитывается что если док открыт для редактирования, но например старый - программно Форма.ТолькоПросмотр(1) не дает его редактировать, но объект то заблокирован
20 Ёпрст
 
11.07.13
11:38
(18)

Если док.Блокировка(1) = 1 Тогда
   сообщить("Я его заблокировал!")
   док.Блокировка(0);//разблокируем
Иначе сообщить("его заблокировал кто-то еще..")
21 kalleka
 
11.07.13
12:10
(20) Спасибо, буду проверять
22 NS
 
11.07.13
12:12
А не проще распарсить с конца ЖР?
23 Ёпрст
 
11.07.13
12:14
(22) долго, + ЖР может быть отключен
24 NS
 
11.07.13
12:15
(23) Почему долго? Парсить не начала, а с конца.
Написать компоненту - это будет очень быстро.
25 Ёпрст
 
11.07.13
12:16
я понял, что с конца, просто ЖР может быть отключен, и если уж использовать ВК, то готовое решение в (13)
26 1Сергей
 
11.07.13
12:17
(24) а как можно читать текстовик с конца?
27 Ёпрст
 
11.07.13
12:18
(26) на ис есть решение готовое
28 Ёпрст
 
11.07.13
12:18
и тут, вроде, толи абрахамс, толт фрагстер решение приводил
29 kalleka
 
11.07.13
12:20
(20) в пустой базе открыл документ, в нем при открытии
вызывает глобальная процедура глПриОткрытииДокумента()

в ней

Если Док.найтиДокумент(Конт.текущийДокумент()) = 1 Тогда
       Если док.Блокировка(1) = 1 Тогда


в ней
док.Блокировка(1) = 0

то есть документу не удалось заблокировать
30 Ёпрст
 
11.07.13
12:21
(29) конечно, он ужо открыт
31 Ёпрст
 
11.07.13
12:21
вообше не ясен смысл того, что ты делаешь.
32 1Сергей
 
11.07.13
12:23
(29) если открыть только на чтение тоже не лочит?
33 kalleka
 
11.07.13
12:26
(31)

в приоткрытии() документа вызывается функция глобального модуля


Процедура глПриОткрытииДокумента(Конт) Экспорт
   Если Конт.Форма.ТолькоПросмотр() = 0 Тогда
       //фиксирование что документ открыт пользователем в такое то время
       
   КонецЕсли;




Она не не должна срабатывать если док открыт для чтения. Это нужно,в том числе, для определения кто открыл документ и не закрыл


Но упускается момент если документ открыт для редактирования, но программно в нем сделано Форма.ТОлькоПросмотр(1)

Вот как выловить этот момент
34 kalleka
 
11.07.13
12:28
То есть ситуация - пользователь открыл документ старый и не закрыл. Редактировать он его не может, но объект заблокирован


Другой пользователь хочет зайти в него подредактировать, но не может. И определить нельзя что кто то открыл
35 Ёпрст
 
11.07.13
12:33
(33) и нафига ?
Если в нём программно сделано Форма.ТОлькоПросмотр(1) , он всё равно будет заблокирован для других пользователей на редактирование.
36 Ёпрст
 
11.07.13
12:34
У тебя единственный вариант, это кода только сразу документ открыт на только просмотр (из журнала там, по лупе, или программно с флагом через ОткрытьФорму))
37 kalleka
 
11.07.13
13:19
(35) вот именно. мне надо выловить когда

форма.толькоПросмотр(1) и заблокирован объект этим пользователем
38 Ёпрст
 
11.07.13
13:24
(37) ты это и так ловишь в (33) всегда.
39 Ёпрст
 
11.07.13
13:25
Если у тебя глПриОткрытииДокумента вызывается в ПриОткрытии самой первой строчкой.
40 kalleka
 
11.07.13
13:28
(39) вот именно что не 1
41 Ёпрст
 
11.07.13
13:28
Если документ в момент открытия был как Конт.Форма.ТолькоПросмотр() = 0 , то он заблокирован всегда ужо, меняй ты там после этого в коде на Форма.ТолькоПросмотр(1), всё равно заблокирован.
42 Ёпрст
 
11.07.13
13:29
(40) меняй на первую, в чем проблема ? Или тупо запоминай, что было изначально в ПриОткрытии.
43 kalleka
 
11.07.13
13:30
(42) ну да, наверное пробегусь по документам, проверю.
44 Ёпрст
 
11.07.13
13:34
Если религия позволяет использовать ВК, то усё это не нужно.
Всё делается в перехватчике.
45 NS
 
11.07.13
13:37
(26) В каком языке? WinApi?
46 monsterZE
 
11.07.13
17:37
(0) тебе чего надо то? определить, кем заблокирован объект?
у formex есть:
ОбработкаБлокировкиОбъекта(Объект, Повторить, ДопТекст)
ПриНачалеБлокировкиОбъекта(Объект)

Номально отлавливает документы и справочники.
Основная теорема систематики: Новые системы плодят новые проблемы.