Имя: Пароль:
1C
1C 7.7
v7: Момент блокировки таблиц, DBF 7.7
0 Злопчинский
 
17.11.12
20:14
Прошу ответа на 2 вопроса.
.
1. Документ. Процедура ПриЗаписи(), вызывается интерактивно. Какие таблицы и в КАКОЙ МОМЕНТ блокируются и на какой период времени?
2. Аналогично - ВводНового...?
.
ползут длительные блокировки - непонятно откуда.
как вычислить на дБФ?
.
спсб?
1 Aleksey
 
17.11.12
20:21
общий журнал,константы, номера...
2 Злопчинский
 
17.11.12
20:23
(1) это понятно. - В КАКОЙ МОМЕНТ? исполняется код ПриЗаписи() - когда происходит блокировка с отражением изменений - непрсредственно псоле выхода из ПриЗаписи со статусом возврата()=1?
3 Mikeware
 
модератор
17.11.12
20:26
Блокировка - По сути, при начале процедуры "ПриПроведении"
4 Злопчинский
 
17.11.12
20:28
если ПриПроведении - обратились к какому-то объекту - даже на чтение - все пипец - таблица заблокирована - так?
5 Злопчинский
 
17.11.12
20:28
ПриЗаписи() - когда блокируется?
6 Mikeware
 
17.11.12
20:31
(5)Видимо, тоже при входе в процедуру...
неявная блокировка, потому как в ПриЗаписи должны быть "чистые" данные....
хотя, честно говоря, не уверен.
7 Злопчинский
 
17.11.12
20:34
(6) и закрывается уже после записи..?
8 Злопчинский
 
17.11.12
20:34
отается вопрос (5)
9 Mikeware
 
17.11.12
20:36
(7) после записи или после проведения...
блин, вроде и не так давно трассировал... а не помню....
"мартышка к старости..."©
10 Злопчинский
 
17.11.12
21:00
ну так вопрос (5) - ...?
11 Shaman100M
 
17.11.12
21:18
попробовать записать элемент с повторяющимся кодом (при установленной уникальности), отследить когда выдается предупреждение 1с, "до" исполнения процедуры ПриЗаписи() или "после"
12 polOwnik
 
17.11.12
21:27
(0) Имхо все таблицы, связанные с данным документом.
Это могут быть справочники клиентов, товаров, договоров и.т.д. (торговля). Кто-то может в них сидеть при твоей записи в режиме редактирования.
13 КонецЦикла
 
17.11.12
21:30
При записи тоже, конечно, блокирует
И журнал, и таблицу с номерами и таблицы документа
Очевидно что при записи и блокирует :)
Попробуй на SQL на простой базке позыреть в профайлере
14 PZh
 
17.11.12
21:38
(5) При выполнении ПриЗаписи() - никакой блокировки нет, если вы конечно в коде что-то не пишете или проводите.
Блокировка начинается сразу после выхода из процедуры ПриЗаписи()
15 PZh
 
17.11.12
21:40
+(14) Т.е. ПриЗаписи() - ничем принципиально не отличается от любой другой процедуры в модуле формы.
16 PZh
 
17.11.12
21:44
(0) С ВводНового - тоже самое, перед началом работы первой процедуры в модуле (ВводНового или ПриОткрытии?) происходит коротенькая блокировочка таблиц 1SDNLOCK и 1SUIDCTL и все.
17 polOwnik
 
17.11.12
21:51
Есть такое понятие:
"целостность баз данных". Считаю, что 1С это соблюдает. Поэтому обязана не позволять запись при открытых связанных таблицах в момент записи.
18 Злопчинский
 
17.11.12
23:17
спсб за пояснения.
19 Torquader
 
17.11.12
23:34
(17) Что значит "открытых таблицах". У семёрки есть только блокировки таблиц в момент записи.
Блокировка же объекта при открытии формы реализуется через специальную таблицу.
20 Злопчинский
 
17.11.12
23:58
(19) а в какой табличке в дбф базе можно это посмотреть?
21 Mikeware
 
18.11.12
10:16
(19) не через таблицу, а через механизм блокировочных файлов.
22 ptitsa-radio
 
18.11.12
10:21
(17) и всеже лочить весь журнал при проведении одного документа, на мой взгляд - излишество )))
Кстати, там еще с распределением ресурсов процессора при транзакциях в терминальном режиме есть дурка. Лекарство - vksleep.dll.
23 Злопчинский
 
18.11.12
10:25
(21) Посмотреть бы какая форма приводит к блокировке...
24 ptitsa-radio
 
18.11.12
10:28
(23) а вы уверены, что это - форма? Это может быть окошко предупреждения, например. Есть отдельные умельцы, которые лепят их в модули проведения. Да еще и без ограничения по таймауту.
25 Mikeware
 
модератор
18.11.12
10:32
(22) "лочить весь журнал" - защита от отдновременного проведения. т.е. защита целостности и достоверности. Уж "как шмогли", на 1996 год это было весьма неплохо. ну а потом исторически тянулось...
(21) "ты скажи - ты скажи, чо те надо - чо те надо..."
26 Злопчинский
 
18.11.12
10:57
(24) это тоже понятно...
27 Нуф-Нуф
 
18.11.12
11:00
переходите на 8ку
28 Mikeware
 
18.11.12
11:38
(27) там другие проблемы.
29 lift
 
18.11.12
12:00
(0) а зачем тебе углюбляться в эти проблемы!? Так и будет всегда!!! В 1с 7.7 при записи, при проведении блокируются как минимум 3 таблицы, делаю ударение на 3 таблицы полностью!!! Восьмерка, которая декларирует блокировку на уровне записей похоже буксует! По 7.7 ЗиК, юзер работающий один не монопольно, проводит расчет зп очень долго! Монопольно в разы быстрее! Так что забей!
30 Mikeware
 
18.11.12
12:10
(29) "Never say never again"©
Некоторыми методами эта проблема успешно решается. правда, не на файловой базе.
31 Torquader
 
18.11.12
23:36
(19) Чего-то я посмотрел в базу семёрки - там только новые номера документов 1sdnlock и количество открытых пользователем объектов в 1susers, я, видимо, с последней и спутал - там хранится количество открытых объектов для защиты целостности базы методом проверки этого количества при открытии базы - если не ноль, то где-то кто-то упал.
32 Злопчинский
 
18.11.12
23:38
итого: пока инструмента нет...
33 Cthulhu
 
18.11.12
23:41
(32): эээ... для чего их нет?
34 Torquader
 
18.11.12
23:41
Если уж очень интересно, то можно открыть базу по сети и посмотреть снифером - какие пакеты передаются при работе базы - сразу станет ясно, что она делает.

А вообще, ПриЗаписи и ВводНового ничего не блокируют.
Блокировка возникает в момент создания нового объекта, а это происходит до вызова "ВводНового".
Также и в ПриЗаписи - сначала система вызывает процедуру, которая определяет возможность записи (не забываем про СтатусВозврата(0), который позволяет отменить запись).
35 Злопчинский
 
19.11.12
00:00
(33) база дбф, 7.7, длительная блокировка где-то - попытки записать/провести документ вываливают занятость общего журнала. вопрос - кто?
36 Cthulhu
 
19.11.12
00:20
(35): дето-ктото-чтото делал, в виде вк вроде.
а так, "в лоб" - тупо решается программно, ручками и трудоемко.
37 Злопчинский
 
19.11.12
00:31
пичалька...
38 kiruha
 
19.11.12
00:36
(0)
Все ссылки документов хранятся в одной таблице 1SJourn
=1SJOURN |Журналы                       |A          |1SJOURN    |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=IDJOURNAL |ID of Journal       |C   |4     |0        
F=IDDOC     |ID Document         |C   |9     |0        
F=IDDOCDEF  |ID Def Document     |C   |4     |0        
F=APPCODE   |Application code    |N   |3     |0        
F=DATE      |date                |D   |8     |0        
F=TIME      |Time                |C   |6     |0        
F=DNPREFIX  |Prefix Document No  |C   |18    |0        
F=DOCNO     |Document No         |C   |10    |0        

Соответственно при любом изменении документа полей номер дата ссылка, например при вводе нового, будет заблокирована эта общая для всех таблица

Также блокировка накладывается в ЛЮБОЙ транзакции считывающей данные из этой таблицы
Например идиотическое создание быстрая Продажа

Необходимо убра
39 Злопчинский
 
19.11.12
00:52
и?
40 dedmoroz777
 
19.11.12
00:55
и умер. Прежде чем такое советовать, необходимо точно знать кто и зачем блокирует. Снятие блокировок чревато разрушением данных.
41 Злопчинский
 
19.11.12
00:56
(40) ну тут ка краз задачи и стоит - обнаружить почему блокировка получается.. а уж когда отловить - там все проще...
42 dedmoroz777
 
19.11.12
00:57
модальное окно скорей всего
43 dedmoroz777
 
19.11.12
01:01
по опере часто помогает опера-настройки-общие настройки-веб страницы-галочка подогнать по ширине
44 sttt
 
19.11.12
03:34
я этим пользуюсь http://technet.microsoft.com/ru-ru/sysinternals/bb896645 если нужно посмотреть что творит
45 kiruha
 
19.11.12
11:53
(39)
Собственно ответ был исчерпывающим - блокировка накладывается в любой транзакции ,в т.ч. при предопред процедур, кроме справочников

Основные причины - убрать все предупреждения, вопросы из транзакций(в т ч. призаписи и т.д.), убрать или модернезировать быструю продажу и ее аналоги, оптимизировать проведение - не должно быть запросов и проведения задним числом
Отладчиком протись по модулям - замерить время
46 kiruha
 
19.11.12
11:59
поправка - в любой транзакции где есть обращение хоть к одному документу
47 Злопчинский
 
19.11.12
18:36
(45) противоречие.
ранее другими пиплами сказано было, что, например при предопределенной в документе ПРиЗаписи() - никаких транзакций не накладывается, транзакция запускается после выхода из ПриЗаписи() со статусомвозврата=1
.
где правда?
48 Cthulhu
 
19.11.12
19:53
(47): правда - то, шо "ранее другими пиплами ..."
49 kiruha
 
19.11.12
20:18
(47)
Видимо ПриЗаписи не является транзакцией в 1С 7.7
50 kiruha
 
19.11.12
20:32
Добавил для эксперимента в ПриЗаписи

НачатьТранзакцию();
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Реализация = Документ.Реализация.ТекущийДокумент;
   |"    ;
   // Если ошибка в запросе, то выход из процедуры
   Запрос.Выполнить(ТекстЗапроса)  ;    
    Предупреждение("Задержка");    
   ЗафиксироватьТранзакцию();

Запустил "двух" пользователей. На одном пользователе запустил сохранение на Предупреждение не нажимаю, второй пользователь при попытке сохранения нарвался на ожидание захвата таблиц
51 Злопчинский
 
19.11.12
21:08
(50) ну так ты явно транзакцию запустил ;-)
убери транзакцию - по идее все пройдет...
52 kiruha
 
19.11.12
21:31
(51)
Ну так я и писал про транзакции.
Если убрать пройдет, так как в ПриЗаписи семерка запускает транзакцию только в момент записи, после кода
53 PZh
 
19.11.12
21:50
(50) а почему должно было быть иначе? Или что бы изменилось если добавить этот код во внешнюю обработку в процедуру с каким нибудь названием типа "Сформировать()"???
54 PZh
 
19.11.12
21:53
По сабжу. Проводи в монопольном режиме все тяжелые документы - тот который будет дольше всех тупить пробей по отладчику таймером. Найдешь там код жрущий большой кусок времени - его и думай.
55 Злопчинский
 
20.11.12
01:10
(54) это катит при простой логике... там куча действий при интерактивной записи дока...
56 МуМу
 
20.11.12
01:36
Еще 100 вопросов и буду вспоминать почему в 7-ке блокировки возникают. Откуда такие рудименты?;) Ну а если серьезно смотри операции на запись. Какие нибудь единые константы с номерацией?(например мод)
57 Злопчинский
 
20.11.12
01:44
(56) поржать и я могу... проблема вообщем не у меня.. ;-)
58 ptitsa-radio
 
20.11.12
02:06
(51)В модуле проведения транзакция возникает автоматически. И если там прописать  Предупреждение("Задержка"), то все будут висеть до победного. Я в такое наступала один раз (код был не мой, разумеется))))
59 Злопчинский
 
20.11.12
02:48
(58) эт понятно...
там у чела есть у меня подозрение на одну байду, посоветовал убрать, посмотрим...