![]() |
![]() |
![]() |
|
v7: Как узнать - доступен ли документ для модификации...? | ☑ | ||
---|---|---|---|---|
0
Злопчинский
13.10.11
✎
11:28
|
программно модифицируем документ, надо его записать - как узнать - заблокирован или нет документ (открыт для редактирования)...? никак кроме как в Попытке..?
|
|||
1
orefkov
13.10.11
✎
11:34
|
Если Блокировка(1) = 0 Тогда
Сообщить("Уже заблокирован"); |
|||
2
Mikeware
13.10.11
✎
11:35
|
Если Блокировка(1)=1 ?
Хотя с этим, помнится, тоже были проблемы... |
|||
3
Злопчинский
13.10.11
✎
12:35
|
а код, исполняющийся в процедуре ПриЗаписи() - выполняется в транзакции...?
|
|||
4
Vladal
13.10.11
✎
12:36
|
(3) В неявной?
|
|||
5
ДенисЧ
13.10.11
✎
12:37
|
(2) мимо.
|
|||
6
Ёпрст
гуру
13.10.11
✎
12:40
|
(3) нет
|
|||
7
Ёпрст
гуру
13.10.11
✎
12:44
|
http://infostart.ru/public/74138/
тут можешь узнать кто держит док и при программной записи |
|||
8
Злопчинский
13.10.11
✎
12:59
|
(6) спсб!
. Тогда получается что если Процедура ПриЗаписи() Записать(); СтатусВозврата(0); КонецПроцедуры . - документ запишется? |
|||
9
Ёпрст
гуру
13.10.11
✎
13:15
|
(8) да.
|
|||
10
Злопчинский
13.10.11
✎
13:18
|
ууу блин...
программлю херню... если херня сделана - перепрограммить ее на правильное - это блин реенжиниринг всего... |
|||
11
Злопчинский
13.10.11
✎
13:22
|
Процедура ПриЗаписи()
НАЧАТТРАНЗАКЦИЮ(); //ибо модифицируется куча связанных документов Записать(); //условия и модификация связанных документов... Если УсловиеНеВыполнено Тогда ОТМЕНИТЬТРАНЗАКЦИЮ(); СтатусВозврата(0); //вот тут статус возврата уживется с отменой транзакции??? ВОЗВРАТ; КонецЕсли; ЗафиксироватьТранзакцию(); КонецПроцедуры . |
|||
12
Злопчинский
13.10.11
✎
13:42
|
(7) спсб! раньше видел, но не использовал.. затерялось...
внедрю у себя сегодня вечером в дбфбазу... обычно по справочникам иногда проходит занятость объекта... |
|||
13
Ёпрст
гуру
13.10.11
✎
13:52
|
уживется
|
|||
14
Злопчинский
13.10.11
✎
13:55
|
(13) спасибо тебе, добрый человек!
|
|||
15
Mikeware
13.10.11
✎
14:01
|
(7) Тут нюанс - ОбработкаБлокировки сработает, если объект держат... Но даже если уже не днржат - в таблице блокировок все равно будет запись
|
|||
16
Ёпрст
гуру
13.10.11
✎
14:04
|
(15) ну и ?
Если объект не держит никто, то и ОбработкаБлокировки не сработает :)) И пофик, что запись там есть. |
|||
17
Ёпрст
гуру
13.10.11
✎
14:04
|
+ я там в коде чищу табличку при монопольном входе, так, для красоты.
|
|||
18
Mikeware
13.10.11
✎
14:23
|
(17) у меня монопольно по 3-4 месяца не входят. Сейчас глянул - в этой табличке 18408 записей...
Не, все-таки это решение только для метода Записать() |
|||
19
Злопчинский
13.10.11
✎
14:33
|
(17) это у меня сработает.. ибо блин класс РедакторТЗ косячит - работает все нормально, но при завершении программы - абнормал дает
|
|||
20
Ёпрст
гуру
13.10.11
✎
14:45
|
(18) та ну.. 20 тыщ - это савсем детская табличка :)
|
|||
21
Злопчинский
13.10.11
✎
15:07
|
почти по 12 блокировок в рабочий день
|
|||
22
Злопчинский
14.10.11
✎
00:43
|
(7) если база в терминале, вот так д.б.?
запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL"); //это прописать, ежели база в терминале //запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=OFF"); . ??? |
|||
23
Злопчинский
14.10.11
✎
00:44
|
т.е. по уму надо вставить определение в каком режиме работаем с базой - в терминале или локально/по сетке...
??? |
|||
24
Ёпрст
гуру
14.10.11
✎
01:01
|
(23) можешь просто выключить. У меня нет баз не в терминале.
|
|||
25
Злопчинский
14.10.11
✎
02:14
|
(24) запускаю базы в терминале, поставить вот так:
запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=OFF"); . ? |
|||
26
Злопчинский
14.10.11
✎
02:15
|
вроде работает...
. но вот при первом тестовом запуске удалось добиться зацикливания.. остался активным оджин экземпляр проги. все окна закрыты прога стоит в цикле . фл = 0; Пока фл=0 Цикл Попытка запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса); фл=1; Исключение КонецПопытки; КонецЦикла; |
|||
27
Злопчинский
14.10.11
✎
02:16
|
воспроищзвести пока не удалось...
|
|||
28
Злопчинский
14.10.11
✎
02:37
|
ух..
1. я правильно понял, что если монопольно базу не запускать - то во вспомогательной табличке блокировок будут копиться записи обо всез объектах заблокированных всеми пользователями...? 2. по самому принципу работы, нереально туплю.. не втыкаю..: например - Пользователь1 открыл на редактирование Документ1; - в табличку записалась инфа о заблокированном объекте П1-Д1; - Польз1 закрыл документ1 - в табличке запись осталась; - Польз2 открыл Док1: объект своюоден, платформа не генерит "объект заблокирован"; - в табличку блокировок записалась инфа о заблокированном объекте П2-Д1; теперь в табличке две записи П1-Д1; П2-Д1; - Польз3 пытается открыть документ1 - платформа генерит "объект заблокирован" - отрабатывается предопределенная формекспроцедура ОбработкаБлокировкиОбъекта() - отрабатывает запрос: почему он вернет что д1 заблокирован п2...? если в табличке две записи о блокировке этого объекта..? |
|||
29
Злопчинский
14.10.11
✎
02:40
|
из=за 25 не рискнул запустить сейчас вработу.. запущу в ПНД, при личном присутствии...
|
|||
30
Mikeware
14.10.11
✎
07:29
|
(28) Об одном объекте - одна запись. Делается апдейт, если запись о блокировке есть, или инсерт, еси ее нет...
|
|||
31
Злопчинский
14.10.11
✎
12:09
|
(30) > Делается апдейт, если запись о блокировке есть, или инсерт, еси ее нет...
- а как это определяется? самим синтаксисом запроса? |
|||
32
Mikeware
14.10.11
✎
13:18
|
(31) ну дык смотри запрос
IF Exists (SELECT * FROM Blocks WHERE ИДОбъекта = '"+ИДОбъекта+"') -- если есть запись об объекте с этим идом UPDATE Blocks -- заменяем юзверя ELSE INSERT INTO Blocks (ИДОбъекта, Пользователь) -- иначе добавляем запись |
|||
33
Злопчинский
14.10.11
✎
18:19
|
(32)О! в такой нотации - понятно.. в эскюлайт нотация другее...
INSERT or REPLACE INTO БазаБлокировок | VALUES ('"+ИДОбъекта+"','"+ПолноеИмяПользователя()+"') . как-то тут с трудом вылавливаю "мысль" типа.. WHERE ИДОбъекта = '"+ИДОбъекта+"' (из скуля) . т.е. эскюлайтная нотация "эквивалентна" упомянутой скульной..? |
|||
34
Ёпрст
гуру
14.10.11
✎
18:32
|
(33) яя натюрлих..
У тя 2-ка что ли по англицкому была ? INSERT or REPLACE прочитать не можешь шо ли ? :) |
|||
35
Злопчинский
14.10.11
✎
22:59
|
(34) спакуха! инсертореплэйс это я прочитаю без проблем... если по скудлю чисто понятно, то по эскюлайту непонятно чем определяется запись на которую реплэйс будут делать.?
|
|||
36
Ёпрст
гуру
14.10.11
✎
23:25
|
||||
37
Злопчинский
14.10.11
✎
23:51
|
(36) Ё!
. The first form (with the "VALUES" keyword) creates a single new row in an existing table. If no column-list is specified then the number of values must be the same as the number of columns in the table. In this case the result of evaluating the left-most expression in the VALUES list is inserted into the left-most column of the new row, and so on. If a column-list is specified, then the number of values must match the number of specified columns. Each of the named columns of the new row is populated with the results of evaluating the corresponding VALUES expression. Table columns that do not appear in the column list are populated with the default column value (specified as part of the CREATE TABLE statement), or with NULL if no default value is specified. . вот нигде здесь не втыкнул - где задается условие по которому заменяется существующая запись на новую..? . я так полагаю, что сначала производится поиск записи по значениям индекса (индекс строится по значениям внутри VALUES) в соответствии с описанием БД: ИДОбъекта varchar(13) primary key. т.е. из вэлью берется ИД, если запись с таким индексом в БД не найдена - вставляется новая, если найдена - то заменяется... . у глубоко втыкнул??? |
|||
38
Злопчинский
14.10.11
✎
23:55
|
Ёпрст! а вот такой вопрос: я например задание для ТСД храню просто в виде файла (который строится из базы1С), т.е. грубо говоря - заявка выгружается в ТЗ, ТЗ в файл, файлы читаются ТСД; все ок работает; имеет ли смысл хранить задания для ТСД в базе1С или в базе "сбоку" от рабочей базы 1С? - даст ли выигрыш/замедление использование БД вместо файловой системы..?
|
|||
39
Ёпрст
гуру
15.10.11
✎
00:31
|
||||
40
Ёпрст
гуру
15.10.11
✎
00:32
|
(38) смотря что за субд это будет.
ТЗ сама по себе не быстро и жрёт оперативку и тем более, ТЗ в файл. |
|||
41
Злопчинский
15.10.11
✎
00:41
|
(40) ну допустим тот же эскюлайт..
. ТЗ у меня небольшие, скидывается в файл 0.003-0.004 сек... периодически скидываю насканированное... |
|||
42
Злопчинский
15.10.11
✎
00:42
|
самая большая ТЗ - строк 50.. вдобавок там никаких агрегатных данных нет, чистые строки...
|
|||
43
Ёпрст
гуру
15.10.11
✎
00:51
|
тогда пофик.
Если б твой тсд имел драйвер, чтоб напрямую с субд забирать инфу, а не импорт с файла, тогда стоило бы заморачиваться. |
|||
44
Злопчинский
15.10.11
✎
00:57
|
(43) ТСД работает с вайфая приямиком в базе 1С
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |