0. Ёпрст 1036 01.01.70 03:00 Сейчас в теме

Кто заблокировал объект ? 7.7 (SQL/DBF)

Обработка блокировки объекта в базе для SQL/DBF варианта.


Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. JohnyDeath 294 13.08.10 11:35 Сейчас в теме
Хорошо!
Я по аналогии давно хочу сделать "журналирование изменений", но меня терзает один вопрос. Что будет происходить, если один пользователь записывает данные в базу Sqlite и одновременно второй пользователь также начнет писать свои данные.
Не попадал на такое? Как бы красиво и без потерь разрулить подобные ситуации?
3. Ёпрст 1036 13.08.10 11:40 Сейчас в теме
(1) попадал, поэтому и все выполнения запросов обёрнуты в цикл + попытка

А так ошибка будет "database is locked"
И т.к таких ошибок по ЖР было за день не так много (штук 10 всего) при 50 пользователях, то такое решение оправдано..

Щас вроде проблем нет.
+ новая версия ВК и режим "PRAGMA journal_mode=WAL" ускорили процессс записи в базу.


5. JohnyDeath 294 13.08.10 11:51 Сейчас в теме
(3)
новая версия ВК и режим "PRAGMA journal_mode=WAL" ускорили процессс записи в базу.

Этот режим вряд ли ускорил запись в базу, просто теперь читатели и писатели не мешают друг другу.
Вот кусок с офф. сайта:
WAL might be very slightly slower (perhaps 1% or 2% slower) than the traditional rollback-journal approach in applications that do mostly reads and seldom write.

Хотя это очень маленькая погрешность и ей можно пренебречь.
6. Ёпрст 1036 13.08.10 12:06 Сейчас в теме
(5) да один хрен.. тут в табличке 2 поля всего.. быстро обновляет табличку.
я забил на блокировку - ошибок блокировок мало цикл вполне оправдан.
2. JohnyDeath 294 13.08.10 11:37 Сейчас в теме
Извиняюсь, толком не посмотрел твой код.
Оказывается, у тебя идет бесконечный цикл попыток записи. Да, это решение проблемы, но какое-то тяжелое (для процессора).
4. Ёпрст 1036 13.08.10 11:42 Сейчас в теме
(2) не.. норм.
Я ж проверил на живых пользователях методу сперва ... и без цикла с попыткой
:)
7. Арчибальд 2708 13.08.10 12:54 Сейчас в теме
Вот если бы система еще сама стучала по голове блокировальщику...
9. Ёпрст 1036 13.08.10 13:18 Сейчас в теме
Добавлю, аналогично можно проверить, кто блокировал объект и при програмной записи..
сделав тот же самый запрос , что и в ОбработкаБлокировкиОбъекта
10. venger 2086 13.08.10 13:29 Сейчас в теме
Можно подумать, но это так, - фантазии, чтобы тому, кто заблокировал объект, выскакивало предупреждение о том, что надо бы объект освободить, так как уже очередь...;-)
11. prolancer 106 13.08.10 15:10 Сейчас в теме
(10) когда известен автор проблемы, можно и по телефону ему позвонить, или докладную шефу на стол...
12. Ёпрст 1036 13.08.10 15:30 Сейчас в теме
(11) да и, если терминалка (или радмин какой-нить), самому закрыть объект..
или сессию срубить..
13. Свой 164 13.08.10 16:21 Сейчас в теме
класс... твои юзеры наверное катаются в масле, окруженные такой заботой программиста :)
14. Ёпрст 1036 13.08.10 16:57 Сейчас в теме
(13) по крайней мере, перестали мне звонить по этой ерунде - рулят сами
15. venger 2086 13.08.10 17:02 Сейчас в теме
(13),(14) Я еще хотел сказать, что он просто о себе заботится, чтоб не дергали по ерунде, а не о пользователях, но опередил в 14-м посте;-)
16. Abadonna 3833 13.08.10 18:31 Сейчас в теме
А ежели просто ограничить время, которое юзер может держать объект открытым?
Одним формексом можно обойтись
17. venger 2086 13.08.10 19:00 Сейчас в теме
(16) Как-бы это через чур жестко;-) Еще таймер обратного отсчета большими красными буквами: "До взрыва осталось: 00:00:03";-) Да и с программной блокировкой тогда как быть?
18. hogik 429 13.08.10 21:12 Сейчас в теме
(16)
"Одним формексом можно обойтись"
- Эту задачу можно решить, вообще, без ВК. ;-)
(0)
Хорошее решение проблемы.
Но, думаю, еще имеет смысл устранять не следствие, а причину. Т.е. запретить пользователю открывать объекты БД в режиме редактирования по двойному щелчку в списках, журналах. Т.е. открывать в режиме просмотра объекта. И случайных проблем с "задним числом" будет меньше... Ведь чаще всего пользователи хотят только посмотреть объект БД, а не изменить его одновременно. Первичный документ, чаще всего, существует в одном экземпляре, на одном рабочем месте... Или не так? ;-)
Dolly_EV; kozorez; +2 Ответить
19. Abadonna 3833 14.08.10 03:54 Сейчас в теме
(18)
- Эту задачу можно решить, вообще, без ВК. ;-)

Что-то сомневаюсь, если только прописывать код в каждый объект, а это не комильфо
20. hogik 429 14.08.10 15:22 Сейчас в теме
(19)
Прописывать надо. Но не в каждый объект. Т.к. до появления "формекса", уже давно, прописано во все объекты вызов глобальной функции решающей схожие алгоритмы в схожих местах. Типа:
Процедура ПриОткрытии() хПриОткрытии(Контекст); КонецПроцедуры
Процедура ПриЗакрытии() хПриЗакрытии(Контекст); КонецПроцедуры
Нас самом деле, еще проще - используется общая функция, типа:
хУсё(КодДействия,Контекст).
Ну, а в конкретном случае данной темы, выполняются по смыслу следующий код, но расширенный на всё типы объектов 1С-а. Еще есть обработка показа списка всех заблокированных объектов.
Процедура ПриОткрытии()
	Если (Форма.ТолькоПросмотр()=0) И (Выбран()=1) Тогда 
		ЗначениеВФайл(КаталогИБ()+СтрЗаменить(ЗначениеВСтрокуВнутр(ТекущийДокумент()),"""","_")+".xxx",ИмяПользователя(),0);
	КонецЕсли;
КонецПроцедуры
Процедура ПриЗакрытии()
	Если (Форма.ТолькоПросмотр()=0) И (Выбран()=1) Тогда 
		ФС.УдалитьФайл(КаталогИБ()+СтрЗаменить(ЗначениеВСтрокуВнутр(ТекущийДокумент()),"""","_")+".xxx");
	КонецЕсли;
КонецПроцедуры        
Процедура Кнопка()
	Если ТекущийДокумент.Выбран()=1 Тогда 
		Предупреждение(ЗначениеИзФайла(КаталогИБ()+СтрЗаменить(ЗначениеВСтрокуВнутр(ТекущийДокумент.ТекущийДокумент()),"""","_")+".xxx",,0));  
	КонецЕсли;
КонецПроцедуры
Показать
21. Abadonna 3833 14.08.10 16:08 Сейчас в теме
(20)
Т.к. до появления "формекса", уже давно, прописано во все объекты вызов глобальной функции решающей схожие алгоритмы в схожих местах. Типа:
Процедура ПриОткрытии() хПриОткрытии(Контекст); КонецПроцедуры

Вот и я про то же. У меня тоже было прописано глПриОткрытии() глПризаписи.
Но ты, по ходу, лет 10 на одной базе сидишь, а у меня их сейчас чуть не по паре новых в день (не считая еще 8х). А прописать формекс у меня сейчас всего две строчки в ГМ, которые не фиг восстановить после обновления. Все остальное работает в ДопГМ, который правь на лету - не хочу
22. Abadonna 3833 14.08.10 16:15 Сейчас в теме
+(21)Вот считай:
Перем Сервис Экспорт; // раз строчка
Процедура ПриНачалеРаботыСистемы()
//....................................
ОткрытьФорму("Отчет",Контекст,КаталогИБ()+"СтартСистемы.ert"); // два строчка
КонецПроцедуры // ПриНачалеРаботыСистемы()
Все остальное делается "на лету"
23. hogik 429 15.08.10 00:51 Сейчас в теме
(21)(22)
Аркадий.
Я же не против "формекса". Естественно, когда много разных конфигураций. Требуется делать обновления. Хочется не заниматься тупой работой. Надо использовать средства, типа, "формекса". А у меня, действительно 10 лет, всего, две конфигурации. Одна в бухгалтерии, в которую я не лезу. И одна, полностью самописная, для основной сферы деятельности конторы. Но эта конфигурация одна на все задачи конторы. От автосервиса до проходной. И база одна на всех. Мне легче, чем тебе, но ооо-чень скучно... :-(
24. Ёпрст 1036 15.08.10 21:19 Сейчас в теме
Ну да.. можно было бы обойтись одним формексом:
ид-объекта получать через ЗначениеВСтрокуУнутрь, а блокировки писать в файло (коть в текстовик, хоть в дбф) и поиск там же..

Вот только без ВК совсем не отловить интерактивное возникновение блокировки объекта. В лучшем случае, во всех формах списка /журналах документа прописать рукописное открытие формы через ОткрытьФорму() + смотреть, что возвращает метод.
ежели нуль - искать в файле блокировок юзверя, открывшего объект.
Но это как-то не очень.

25. hogik 429 15.08.10 23:20 Сейчас в теме
(24)
"Но это как-то не очень."(с)
Да, "без ВК совсем не отловить интерактивное возникновение блокировки"(с). Надо либо "прописывать"(с) в списках/журналах, либо делать кнопку в списках/журналах, либо делать отдельную обработку с кнопкой в панели инструментов. Но пользователю не важно как это сделано если блокировки, такого рода возникают, один раз в неделю. Т.е., скажу еще раз, надо устранять причину. Открывать, по умолчанию, объекты в режиме "только просмотр". А если пользователям необходимо работать одновременно с одним объектом, то в схеме базы данных этот объект уже не один объект. Простой пример. Шапку документа забивает "бухгалтер", а строки документа "кладовщик". Сделать форму документа с закладками - это самое примитивное решение задачи. На самом деле (в нашем примере) шапка документа и строки - это разные объекты. Это в теории... ;-) И не в 1С... :-(
P.S. Повторю еще раз. Вы предложили очень хорошее решение проблемы. И использование этих ВК оправдано на 100%. Т.к., думаю, эти ВК используются в вашей системе не только для решения данной задачи. А, тогда, почему бы их не использовать и в этой задаче... ;-)
26. Ёпрст 1036 16.08.10 08:05 Сейчас в теме
(25) Да, так и есть - вк не только для этой задачи используются.
По-поводу правки, документ может иметь несколько состояний (распечатан/собран/и т.д и т.п) + разные схемы отгрузки.. Все эти доп флаги-реквизиты документа проставляются как правило, обработками. Но документ может быть открыт аналитиком в это время, для правки самого документа. Вот и возникают коллизии.
Не часто, но есть.
31. hogik 429 16.08.10 18:22 Сейчас в теме
(26)
"доп флаги-реквизиты документа проставляются ... обработками"
"документ может быть открыт ... в это время ... для правки самого документа"
Об этом и говорю. Это и означает, что "доп флаги-реквизиты" не должны являются реквизитами документа. Т.е. наблюдается ошибка в проектировании схемы БД.
32. Ёпрст 1036 17.08.10 10:40 Сейчас в теме
(31)Намекаешь, что состояния документов нужно хранить в подчиненном документе ? Или еще где ?
Изменяются не только флаги, но и ключевые реквизиты типа Контрагент/договор/Фирма..
Долго объяснять почему, связано с разными схемами учета.





33. hogik 429 17.08.10 22:07 Сейчас в теме
(32)
Намекаю на, немного, другое. ;-)
Проблемы блокировки документов, последовательности, проведение задним числом, закрытие периодов, само понятие "провести", свертка БД, регистры и т.д. возникает при попытки "автоматизировать" предметную область документами и бух.проводками. Но эта предметная область называется - бухгалтерский учет (и все его разновидности). Судя по Вашим текстам из (26)(32) сообщений, делается попытка автоматизировать не бух.учет, а реальную жизнь конторы. И использовать, для этого, структуры схемы БД типа документ - не совсем логично. Думаю, документ должен появляться на конечном этапе всей "хоз.операции" исключительно для взаимодействия с внешним контрагентом, в виде распечатки, а не в БД как единое целое. Но, это, опять не про 1С... :-(
34. Ёпрст 1036 18.08.10 13:40 Сейчас в теме
(33) почитал ваши посты в других обсуждениях, примерно понял, об чем речь..
К сожалению, в данный момент переделывать всё и уходить от логики, заложенной еще самой 1с не представляется возможным..
Да и на снеговик пытаются упорно толкнуть.
27. victuan 3444 16.08.10 08:27 Сейчас в теме
Аж три ВК! Для такой рутинной задачи
28. Ёпрст 1036 16.08.10 08:53 Сейчас в теме
(27) см. (24)... достаточно одной.. - формекс.
29. victuan 3444 16.08.10 09:31 Сейчас в теме
(28) "можно было бы обойтись одним формексом"
Так ведь не обошелся же :D
30. Ёпрст 1036 16.08.10 09:35 Сейчас в теме
(29) мне важна скорость работы и максимальное удобство, тем более, что 1cpp и 1sqlite используются в других местах кода, зачем лишать себя этого - не ясно.

А так, можно и вообще всё без ВК сделать, только оно надо ?
35. GenTay 19.08.10 09:47 Сейчас в теме
Скачал, поставил +. Внедрил - база стала неустойчивой, подвержена вылетам и медленной.
36. Ёпрст 1036 19.08.10 12:35 Сейчас в теме
(35) ВК каких версий поставил ?

И на счет медленной.. есть сомнения.
У вас терминал, или чисто файловая ?
40. GenTay 20.08.10 13:47 Сейчас в теме
(36) Релиз 7.70.266. Прога основательно доработана. Есть центральная и 2 периферийки. Периферийки на терминалах. Вылеты случались на разных периферийных базах. Причем по времени обновил вечером, утром следующего дня начало вылетать. День непоняток, на сл.день глушу в конфе текст доработки и два дня тьфу-тьфу. В принципе нет и нет, не парюсь по этому поводу.
42. Ёпрст 1036 20.08.10 17:17 Сейчас в теме
(40) заремь 2 процы ОбработкаБлокировкиОбъекта и ПриНачалеБлокировки, проблема осталась ?

попробуй заремить запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");
если юзвери работают не на 1 сервере терминалов.

(41) у меня так и есть...
37. Ёпрст 1036 19.08.10 12:38 Сейчас в теме
+36 скажем так, терминалка, пользователей от 40 до 70 в одной базе, проблем с падением производительности и нагрузкой на проц не наблюдается.
Ну и вылетов, тем более нет.
38. Ёпрст 1036 19.08.10 12:39 Сейчас в теме
+37 на счет, чисто файловой не скажу, не тестил под нагрузкой, ибо таких баз не имею.
39. JohnyDeath 294 19.08.10 21:33 Сейчас в теме
Да и для "чисто файловой" (вне терминала) базы директива sqlite
PRAGMA journal_mode=WAL

бесполезна
41. orefkov 1975 20.08.10 14:26 Сейчас в теме
+(39)
Я бы даже добавил, что
запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");

можно делать ТОЛЬКО если все юзеры этой базы сидят в ней на одном терминальном сервере. Если хотя бы один заходит в базу с другого компа - чревато неизвестным поведением, и лучше этого не делать.
43. Ёпрст 1036 20.08.10 17:19 Сейчас в теме
+42 .. По-поводу частых блокировок Sqllite базы во время записи, их и не так много за целый день.
Смотрел за 2 дня, тупо выкинув цикл с попыткой в ЖР.. При 50 пользователях, таких записей было ~15 за два дня.
Так что.. загон в цикл с попыткой оправдан.

44. Борода 21.10.10 16:48 Сейчас в теме
ОбработкаБлокировкиОбъекта не цепляет константы хотя ПриНачалеБлокировкиОбъекта отрабатывает. Это нормально ?
45. Ёпрст 1036 21.10.10 16:57 Сейчас в теме
(44) нормально, я не ставил целью обработку констант, если нужно - дописать недолго.
46. Борода 21.10.10 17:04 Сейчас в теме
плюс однозначный.
модифицировал малость:
Если МонопольныйРежим()=1 Тогда
запросSQLLite.ВыполнитьЗапрос("delete from БазаБлокировок");
Иначе
запросSQLLite.ВыполнитьЗапрос("delete from БазаБлокировок Where Пользователь = '"+Пользователь.Наименование+"'");
КонецЕсли;

(45) в чем нормальность, просветите.
48. Ёпрст 1036 21.10.10 17:16 Сейчас в теме
(46) я бы не удалял сведения о пользователе - лишнее это.
Там всегда при начале блокировки - INSERT or REPLACE - всегда эта запись "перезапишется", если была.

47. Ёпрст 1036 21.10.10 17:13 Сейчас в теме
"Нормальность"
в том, что лень было константы анализировать еще :)

49. Борода 21.10.10 17:17 Сейчас в теме
(47) нет, "ненормальность" в том, что при попытке вторым юзером зайти в константу процедура ОбработкаБлокировкиОбъекта не отрабатывает вообще и 1С сразу выдаёт ошибку.
Может это только у меня так ?
50. Ёпрст 1036 21.10.10 17:37 Сейчас в теме
(49)Я не помню уже, ловит или нет, надо у АЛьФа спросить.
51. Ёпрст 1036 21.10.10 17:43 Сейчас в теме
+50, для красоты, можно еще так сделать:

//Сообщить("" + Объект + " открыт пользователем " + ИмяВредителя,"!");
ДопТекст ="" + Объект + " открыт пользователем " + ИмяВредителя;
52. Борода 21.10.10 18:04 Сейчас в теме
(51) Это я уже сделал. Таки супер! :D
53. dranzerf 04.03.11 19:35 Сейчас в теме
Вещь классная, тока, у меня почему-то наоборот не получается. Когда один пользователь заходит в справочник к примеру, то у другого выдает сообщение, а если этот другой откроет элемент справочника, а первый зайдет в него, то пишет только "объект открыт пользователем", а имя пользователя не пишет.
В чем причина и как ликвидировать?
54. Ёпрст 1036 09.03.11 13:43 Сейчас в теме
(53) Кто куда и откуда ?
Нипонятна..
55. dranzerf 10.03.11 07:12 Сейчас в теме
Тут оказывается дело только в одном пользователе. Система блокировки не хочет определять его,тока не понятно почему. А с остальными все впорядке.
56. Ёпрст 1036 10.03.11 09:19 Сейчас в теме
(55) как "определяешь" пользователя ?
Через ИмяПользователя() или через глПользователь ?
58. dranzerf 10.03.11 20:02 Сейчас в теме
(56) глПользователь.
(57) Мы работаем через терминал, база на серваке, т.ч. да.
59. Ёпрст 1036 11.03.11 08:57 Сейчас в теме
(58) И ? наименование есть у него ?
Мот он без рабочего каталога входит, как "не авторизован" ?
Тогда и не пишется ему ничего..
57. Ёпрст 1036 10.03.11 13:10 Сейчас в теме
+56 да еще, у этого пользователя, ВК загружены ?
60. Ёпрст 1036 11.03.11 08:58 Сейчас в теме
+59 у этого пользователя открой табло и напиши глПользователь.Наименование, что возвращает ?
61. dranzerf 11.03.11 18:49 Сейчас в теме
Пишет - Ошибка в вырожении.
63. Ёпрст 1036 14.03.11 09:15 Сейчас в теме
(61) ну вот и ответ.
(62) проще пользователю создать нормальный рабочий каталог и проверить его наименование/код в справочнике Пользователи.
62. dranzerf 11.03.11 18:50 Сейчас в теме
Может стоит использовать ИмяПользователя а не глПользователь?
64. dranzerf 14.03.11 19:43 Сейчас в теме
Да нет. Все нормально. Просто тот, кто изначально заводил пользователей, не прописал им полное наименование. Т.ч. все работает, но все равно спасибо.
65. dranzerf 16.03.11 19:48 Сейчас в теме
Не. Все равно проблемы. Что-то со строкой: ИДОбъекта = глМД.ЗначениеВДлиннуюСтрокуБД(Объект);
Вопрос такой - есть ли ограничения по версиям dll и конфигурации?
66. Ёпрст 1036 17.03.11 08:15 Сейчас в теме
(65) есть.
1cpp желательно иметь 3-ей версии
67. vitapi 21.04.11 17:17 Сейчас в теме
А почему это решение не подходит для 1С SQL? Мне для SQL надо...
68. Ёпрст 1036 21.04.11 18:10 Сейчас в теме
(67) потому, что на 1sqlite написано, а так, в SQL сделать намного проще - создал табличку для хранения заблокированных объектов в самом скуле + всё тоже самое + синтаксис запроса подправить.
69. vitapi 21.04.11 18:15 Сейчас в теме
(68) То есть, как я понимаю, это вопрос целесообразности? Я было подумал, что это несовместимо с SQL.
70. Ёпрст 1036 21.04.11 18:41 Сейчас в теме
(69) для скуля это просто можно сделать разными способами, (на софтпоинте есть одно из решений, например)
а вот для дбф никто не удосужился, вот я и выложил.

А так, для скуля всё сделать по-аналогии, только заместо базы в sqlite использовать свою табличку в скуле.
проверяешь есть ли она, если нет , то create table и всё собственно, так же в ПриНачалеБлокировки пишешь в неё того кто заблокировал, потом так же обрабатываешь блокировку.
Короче, тот же код, только синтаксис запроса чуть другой.
71. Ёпрст 1036 22.04.11 15:57 Сейчас в теме
+70 добавил для скуля.. пробуйте.
72. Sergafan10 25.04.11 11:49 Сейчас в теме
На скуле не показывает пользователя, но мне кажется это у тех, у кого права в системе "овощные" или же библиотека не зарегана. Заходил под админом на двух разных тачках - всё путем.
73. Ёпрст 1036 25.04.11 11:54 Сейчас в теме
(72) Это, использовал ПолноеИмяПользователя() или глПользователь.Наименование ?
74. Ёпрст 1036 25.04.11 11:56 Сейчас в теме
+(73) ну и 1cpp и formex желательно грузить в ПриНачалеРаботыСистемы ( и регистрить их спецом не надо, они уже сто лет в обед в этом не нуждаются)
ЗЫ: ставмит только последних версий желательно 3 и выше для 1cpp и ..101 и выше для формекса.
Sergafan10; +1 Ответить
75. Sergafan10 25.04.11 12:38 Сейчас в теме
Судя по всему ПолноеИмяПользователя(), т.к. у того, кем блокировал, как раз его и не было(причём только у одного). ;)))
Рад, что регать не надо, у меня версии свежие, а то я уж способы регания библиотек в домене наскоблил)))
Спасибо!!! Плюсанул.
76. sCHTASS 49 25.04.11 14:04 Сейчас в теме
Могет кому будет полезно и мое творение http://infostart.ru/public/19782/.
Отличие от этой разбработки:
1) использует 2 компоненты: 1с++ и formex
2) работает _ТОЛЬКО_ на sql-базах
3) чтобы все заработало, нужно прописать в глобальнике только одну строку.
4) в любой момент можно отключить/включить приблудку.
77. Ёпрст 1036 25.04.11 17:44 Сейчас в теме
(76) публикация не активна, а так, моя поделка использует 2 ВК для скуля и 3 для ДБФ, хотя можно и 1-ой обойтись - формексом, но не удобно.
78. sCHTASS 49 25.04.11 21:20 Сейчас в теме
(77) Странно. Когда-то была активной...
79. Ёпрст 1036 26.04.11 09:42 Сейчас в теме
(78) посмотрел, всё тоже самое, отличие - все действия в доп глобальнике, минус - не проверяется, был ли он(доп глобальник) уже загружен ранее.

:)

Методе то сто лет в обед
80. Ёпрст 1036 26.04.11 09:45 Сейчас в теме
81. natalika1601 137 17.05.11 11:19 Сейчас в теме
После подключения данной обработки при закрытии базы стала выскакивать ошибка отложенной записи Windows. И база стала тормозить. Что с этим делать? База dbf.
82. Ёпрст 1036 17.05.11 15:08 Сейчас в теме
(81)
база по сети ?
в терминале ?
ВК каких версий поставили ?
83. cabat 19.05.11 13:28 Сейчас в теме
Использую данную схему некоторое время (база DBF, база блокировок в SQLite-файле), все гуд.
Но тут наткнулся на такой момент - при массовой обработке объектов получаем большой поток блокировок объектов
и соответствующее кол-во запросов вставок в базу блокировок.
И что то как то подтормаживает все это некисло..
Пока обошел так - добавил методы начала и фиксации транзакции при записи в SQLite, перед массированной обработкой объектов начинаю транзакцию, после фиксирую..
Ускорение на порядок, но как то некузяво это..
Может какое более красивое решение есть?
84. Ёпрст 1036 19.05.11 18:42 Сейчас в теме
(83) база в терминале или по сети ?
У меня, даже при массовых операций тормозов не замечено.
85. Ёпрст 1036 19.05.11 18:42 Сейчас в теме
база в терминале, правда.
86. cabat 20.05.11 09:16 Сейчас в теме
боевая база в терминале, для разработки локальная - результат одинаковый
по профайлеру получается, что 80% времени выполнения массовой обработки объектов занимает запись в таблицу заблокированных объектов..
если обернуть процедуру в транзакцию SQLite, то время выполнения сокращается на порядок..
88. Ёпрст 1036 20.05.11 14:30 Сейчас в теме
(86) странно, у меня в худшем случае, если кто-то ужо пишет туда.. но по логам в ЖР, когда цикла с попыткой выполнения запроса не было, таких случаев в день при 70 юзверей, не так и много..
А с попыткой в цикле и так влёт влетает.
1sqlite какой версии хоть ?
Покажи, как свою транзакцию ставишь.
87. cabat 20.05.11 10:32 Сейчас в теме
попробовал на всякий случай сначала один раз подготовить запрос, а потом вызывать с параметрами - результат тот же..
причем ведь файлик базы SQLite весит то всего 10-20Кб, а скорость вставки записей очень низкая получается..
наверное я просто не умею ее готовить :(
89. cabat 20.05.11 14:54 Сейчас в теме
1sqlite версия: 1.0.2.3

транзакция ставится выполнением запроса "BEGIN TRANSACTION", фиксируется "COMMIT TRANSACTION"
в остальном код по работе с таблицей блокировок почти один в один взят из твоего примера..
только у меня используется класс-обертка над объектом 1sqlite для выполнения запросов
90. Ёпрст 1036 20.05.11 16:30 Сейчас в теме
(89) странно..
Ладно, попобую поиграться на досуге..
Ты кстати, отключение журналирования делал ?
91. cabat 20.05.11 17:05 Сейчас в теме
(90) а то..
даже спецом добавил в класс метод, который возвращает текущий режим - думал, может не срабатывает..
пробовал даже режим MEMORY ставить..
может конечно, имеет смысл с Сашей Орефковым посоветоваться, может я что то не так делаю при работе с 1sqlite..
92. kozorez 6 06.05.12 12:26 Сейчас в теме
Хорошее решение проблемы.
Но, думаю, еще имеет смысл устранять не следствие, а причину. Т.е. запретить пользователю открывать объекты БД в режиме редактирования по двойному щелчку в списках, журналах. Т.е. открывать в режиме просмотра объекта. И случайных проблем с "задним числом" будет меньше... Ведь чаще всего пользователи хотят только посмотреть объект БД, а не изменить его одновременно. Первичный документ, чаще всего, существует в одном экземпляре, на одном рабочем месте... Или не так? ;-)

тоже считаю что очень правильное решение, плюс настроенные права пользователей, не открывать что не нужно или не редактировать.
93. Rockman 17.05.12 12:42 Сейчас в теме
95. phstranger 06.06.12 14:04 Сейчас в теме
97. qwe_QWE 06.07.12 14:03 Сейчас в теме
Не могу понять - Процедура ОбработкаБлокировкиОбъекта() вызывается уже из объекта конфигурации?
99. Ёпрст 1036 13.07.12 12:07 Сейчас в теме
(97) ?
что значит "из объекта" ?
98. aimerlive 13.07.12 11:52 Сейчас в теме
Интересная идея спасибо!
100. Ёпрст 1036 13.07.12 12:07 Сейчас в теме
это всего лишь предопределенная проца глобальника из формекс
101. Dolly_EV 267 01.11.12 07:14 Сейчас в теме
Прикрутил... при групповом проведении на писание в SQLite тратится 1% времени. А как бы сделать так, что при групповых операциях в таблички не писалось?. Т.е. как узнать в ПриНачалеБлокировкиОбъекта(), что это групповой проведение?
102. andrewks 1268 01.11.12 07:34 Сейчас в теме
(101) Dolly_EV, если я правильно помню подноготную 7.7, то можно в модуле проведения дока в разделе осн. программы установить переменную ЭтоГрупПров=0, а в самой процедуре проведения в самом конец ЭтоГрупПров=1.

тогда по тексту процедуры проведения можно будет опираться на эту переменную, за исключением самого первого дока данного вида, но, думаю, 1 док - это не показатель.

только проверьте сначала эту фишку
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Специалист внедрения и сопровождения 1С
Омск
зарплата от 25 000 руб. до 50 000 руб.
Полный день

Ведущий 1С консультант по БГУ
Омск
зарплата от 50 000 руб. до 95 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день

Ведущий программист 1С
Омск
зарплата от 70 000 руб. до 110 000 руб.
Полный день