Имя: Пароль:
1C
1C 7.7
v7: 1С 7.7 ТИС ДБФ УРИБ 40 юзеров. Надо победить блокировки транзакций
,
0 tgu82
 
28.10.20
13:18
1С 7.7 ТИС ДБФ УРИБ 40 юзеров.

В понедельник вообще с утра работать не могли. И так почти полтора часа.
Только когда я стал по очередности выгонять всех ввидимо отцепилась блокировка и
и все наконец заработали.

Заметил что 3 варианта блокировок:
1. при обмене урбд, попытка захвата доступа к 1SUPDTS
2. При попытке создать новый документ - попытка захвата 1SJOURN
3. При поытке создать элемент справочника - попытка заквата SC214 или 1SDNLOCK
3.1 Блокировка 1SDNLOCK возникает и при создании нового документа (видимо из-за нумерации что ли)

Ну с обменами не так часто и понятно потому что обмен я вижу.
С остальным все на так ясно.

Базы не малые, регистр RA328 подходит к 1.7 ГБ
Я так понимаю что многие проблемы из-за проведения документов задним числом ну и перепроведения если надо
Время ожидания захвата БД сброшено в ноль у всех вроде бы, но уточню. Может кого прозевал.
Заметил что в понедельник много потому что делают много приходов и в пятницу тоже.
Причем всем надо с утра.

На ПБ как-то особенно с этим всем проблем и нет а вот на ЦБ бывают, и неприятные
Мне бы хотя бы четко понимать из-за кого в любой конкретный момент времени возникает блокировка (за исключением обмена)
Тогда бы можно было его притормозить а другие бы работали дальше.
В ЦБ банк касса розница енвд перемещения поступления оптовые реализации комплектации и т.д.
Магазины для себя в ЦБ делают большие перемещения с Центрального склада.

Мне бы хотя бы четко понимать из-за кого в любой конкретный момент времени возникает блокировка (за исключением обмена)
Тогда бы можно было его притормозить а другие бы работали дальше !!!
647 Duke1C
 
07.11.20
11:12
(645) Смотря что ты хочешь поиметь с этого архива
Одно дело, если он нужен только для "разбора полетов" за конкретные дни, тогда и твоя схема покрывает это нормально
Другое дело, если ты какую статистику хочешь по ним собирать за произвольные периоды, тут уже варианты есть разные...
можно и отдельную базу для этого держать
И про вот это: " (тогда ТЧ опять в строках неограниченной длины)" - забудь ты уже как страшный сон.
ТЧ для справочника - это подчиненный справочник.
За строки неогр. длины - руки надо отрывать, особенно пейсателям типовых, которые напихали такой байды в Платёжные поручения и хранят там километровые бесполезные портянки. У некоторых клиентов файл BLOB в разы превышает размер файла с проводками
648 Duke1C
 
07.11.20
11:35
(645) Вон в (646) послушай умного человека, он на этом деле такую собаку съел, что Павлов нервно курит в сторонке)
649 tgu82
 
07.11.20
16:07
(646) А она как к базе 1С цепляется?
650 tgu82
 
07.11.20
16:12
(649) Да это было бы замечательно, хотя 1С может взять через sqlite большие объемы данных?
Можно было бы конечно в DBF но чего-то я не стал - по-сути надо таблицу где шапки и таблицу где табличные части обычные и табличные части разбухтовки.
651 tgu82
 
07.11.20
16:15
Не получилось на 10 дней переделать - регистр заявок хоть изначительно позже чем раньше - но вылетел за 2 гб.
Можно конечно закрывать этот регистр последовательно по годам тогда проблема бы решилась
652 Djelf
 
07.11.20
16:26
(646) Да, причем безшовно. C 1sqlite можешь подцепить внешнюю базу sqlite3 и в одном и том же запросе обращаться и ко внешней базе и к базе 1С.
А во внешнюю базу можешь записывать внутренние идентификаторы из 1С и при запросе их типизировать в свою баз 1С.
(650) Что значит большие объемы данных? Максимальный объем базы sqlite3 громадный - 140Tb и 1С тут совсем ни причем, от 1С это не зависит.
А если открывать базу не в памяти ОткрытьБазу(":memory:"), а в файле, общее потребление памяти для запроса может быть значительно больше оперативной памяти 1С. Ну а если подразумевается что итоговый результат больше чем памяти в 1С, ну тогда конечно обрушится.
По скорости примерно так: 272621 записей (xml`ки егаис), средний объем записей 2740 байт, чтение со скоростью ~260 мбпс
В принципе 35% скорости в + подтверджается: https://www.sqlite.org/fasterthanfs.html
653 Djelf
 
07.11.20
16:27
(651) А тебе точно нужен 3х валютный учет? Я давно вырезал... Ну и подрезать размеры числовых полей тоже можно.
654 tgu82
 
07.11.20
16:29
(651) А, управленчкая, бухгалтерская а еще какая? Нет, 100 лет не нужен.
655 tgu82
 
07.11.20
16:31
(652) Ну я прикинул - за 5 лет примерно 800000*5=4000000 записей. Врядли больше
656 tgu82
 
07.11.20
16:33
(655)+ 1 таблица шапки и две таблицы табличные части увязанные с шапкой по ключу. Единственный момент - я же сейчас пишу в файлики списокзанчение и две тз но при этом вся номенклатура хранится как номенклатура и т.д., то есть как бы в естественном виде. А в таблицах внешних это уже будут коды наименования и т.д.
657 Djelf
 
07.11.20
16:39
(655) sqlite все равно будет сколько записей.
Только учти следующее:  для объемных данных, у меня это xml-егаис делается отдельная таблица Хранилище с полями - ключ и значение, ключ должен быть описан явно, т.к. rowid при vacuum слетает. И отдельная таблица с твоими параметрами для поиска и со ссылкой на Хранилище. Это если сырые данные хранить.
А если как (656), то это не сильно отличается от принципа работы с 1С. Таблицы и таблицы... Разве что наименование в sqlite можно компактнее хранить.
658 tgu82
 
07.11.20
16:47
(657)+ так может мне лучше просто через 1с сделать пока что? А попутно поразбираться с sqlite. Просто у меня так файлики мизерные я их и из магазинов для надежности копирую в папки в ЦБ. А ДБФ получается, хотя можно просто копировать их как-то отдельно зато все из одного места а то сейчас у меня архиы чеков - это тысячи небольших файликов с информаицей из 1С. Там нет по-сути никаких индексов, ищется медленновато
659 Mikeware
 
07.11.20
16:54
(650) может. и в дбф может (ограничивает-то размер всего лишь система блокировки, а не сама структура дбф)
другое дело, что через иксбэйс можешь только монопольно файл открывать. а открывая-закрывая, получишь блокировки похлеще. ну а работая через фоксовый драйве - сможешь,Ю но почему б тогда не чере 1склайт?
660 Mikeware
 
07.11.20
16:55
(658) ну так это считается элементарно: размер записи умножить на количество :-)))) меньше 2г - в справочнике, больше - во внешней базе
661 tgu82
 
07.11.20
16:59
(659) Так уа уменя же все это пишется при закрытии кассовой смены - работает один юзер - откуда блокировки возьмутся. Я учет работанков склада веду в 2 ДБФ. Чищу изредка предыдущие годы и веду потихоньку при закрытии смены и они тоже апдейт. Просто учет работы склада (время и т.д., кол. собранных строк) начался лет 5 назад а архив чеков с 2005 года а то и раньше
662 Mikeware
 
07.11.20
17:03
(661) "каждый - сам кузнец своего геморроя!"©
663 tgu82
 
07.11.20
17:09
(662) ДА логика простая - у меня впн - получается общая для всех точек сеть и удобно при закрытии смены в свою папоску файлик с чеками за день записать и тут же скопировать по сети этой в папку соответствующую на ЦБ. Руководство часто смотрит отчеты по куче магазинов сразу в ЦБ - и тогда это очень удобно, а с ДБФ уже так не получится хранить дбф по дням - это глупо
664 Djelf
 
07.11.20
17:11
(658) Зачем тогда спрашивал? Ты же знаешь первое правило - "Работает - Не трожь"!
Сделай параллельно для теста.
А вот 1000 небольших файлов это ЗЛО, 1С это перевариваривает, действительно, слишком медленно.
665 tgu82
 
07.11.20
17:13
(664) Правильно спрашивал. Чтобы как раз спросить про вот это дело. Может через фтп их отправлять заменяя те что есть каждый раз?
666 tgu82
 
07.11.20
17:17
(664) sqlite - базу тоже надо ведь архивировать. А я даже не пойму где она хранится-то и как
667 tgu82
 
07.11.20
19:47
нельзя ли примерчик команды для bat-файла которая долго выполняется но задержки всякие не используются.
может цикл с какой-ниубдь ерундовой операцией

никак не получается понять когда call bat1 call bat2 в файле bat3.bat выполняются одновременно а когда последовательно.
668 ДенисЧ
 
07.11.20
20:33
(667) ping -n 10 -w 20000 <несуществующий в твоей сети адрес>
669 tgu82
 
07.11.20
20:49
(668) То есть при этом второй батник будет выполняться или же только после пинга? Мне-то надо чтоб понять они параллельно выполняются
670 ДенисЧ
 
07.11.20
21:07
(669) Ты просил длинный батник )))
А там сам проверяй...
671 tgu82
 
07.11.20
21:12
(670) ну это да - в миллисекундах спасибо
672 tgu82
 
08.11.20
13:01
Обрезал иротги по заявкам жа с 2016 года. Но регистр итогов заявок изменился только на 15 мб, с 918144 до 903115 мб
А ведь я закрыл регистр заявок полностью на 30.06.2020. И там десятки тысяч таких заявок закрытых теперь
673 Duke1C
 
08.11.20
15:10
(672) Нулевые из регистра удалил?
674 tgu82
 
08.11.20
15:50
(673) Удалил обработкой что мне Злопчинский дал
675 tgu82
 
08.11.20
15:51
Обработку смотрел - вроде как работает правильно исходя из ее текста
676 Duke1C
 
08.11.20
15:51
(673) + Упаковку таблиц ИБ после?
677 tgu82
 
08.11.20
16:02
(676) Да и переиндексацию обязательно. Но это регистр итогов (заявки), который с начала базы и не закрывался толком. Вот теперь я его закрыл до 30 июня 2020.
678 Duke1C
 
08.11.20
16:54
(677) Закрытие закрытию рознь.
Насколько размер *RG твоего "закрытого" регистра отличается от его *RA?
679 tgu82
 
08.11.20
17:37
(678) RA 116 mb, RG 903,101 mb
Регистр остатков больше регистра движений потому что долго не было закрытия. Но вот сегодняшним днем же закрыл
680 ДенисЧ
 
08.11.20
17:48
(679) Сегодняшним закрыл. А старые периоды так и висят открытыми... Вот если бы ты закрывал последовательно - удовлетворили заказ - в тот же период и закрыл. А то у тебя картина с размерами - ненормальная.
681 tgu82
 
08.11.20
18:23
(680) Я согласен но вот так получилось. Теперь контролирую. Просто надо этот регистр по возможности как-то еще уменьшить. Можно как-то? А то ситуация можно вылезти сильно плохой и без регистра движения партий
682 tgu82
 
08.11.20
18:26
(681)+ В конце концов заявки покупателя которые неподтвержденные - можно в итогах спокойно убить вообще правда до 30.06.2020
683 Злопчинский
 
08.11.20
18:33
(672) если ты закрыл - то у тебя уменьшится только на сейчас. а все хвосты которые тянулись несколько лет - ника кне изменились, поэтому закрытие длао маленький эффект. если бы ты сделал помесчное закрытие неактуальных заявок последним днем месяца, то получил бы в итоге намного более ощутимый выигрыш. потому что не тянулись бы хвосты постоянно.
684 Злопчинский
 
08.11.20
18:33
вот в (680) то же самое сказали
685 Злопчинский
 
08.11.20
18:35
(681) если история заявок не интересует - можно тупо порезать движения и итоги по "неактуальным" заявкам, например на 01.07.20
686 tgu82
 
08.11.20
18:38
(685) А та обработка что ты мне прислал может так сделать? Или это надо еще что-то? В-принципе может сверну и перед созданием перифериек сделаю помесячное закрытие с переносом итогов - долго будет, но все равно так лучше. Ну может не помесячно а поквартально уже бы было хорошо
687 tgu82
 
08.11.20
18:41
(686)+ Поулчается что для меня неактуальными являются те заявки которые раньше 01.07.2020 и к сегодняшнему дню они незакрыты. И обрезать их надо конечно так чтоб обменов не было, то есть прямыми запросами на каждом магазине отдельно
688 Злопчинский
 
08.11.20
19:03
есть у меня обрезка регистров заявок. ща гляну.
отослал
689 tgu82
 
08.11.20
19:11
(688) спасибо
690 tgu82
 
08.11.20
19:35
Пытаюсь заменить транзакцию попыткой. Но у мнея почти явно начать транзакцию и нет. Не нравится когда несколько операций с документами в одной попытке - как-то криво получается. Сложно понять куда наверх уходить. Благо что почти все в ПриЗаписи так что можно уходить прямо на СтатусВозврата(0) и ничего по идее ужасного не случится
691 Злопчинский
 
08.11.20
20:22
"Не нравится когда несколько операций с документами в одной попытке - как-то криво получается."
ну как написано, так и получается ;-)
692 Mikeware
 
08.11.20
20:24
(691) "чем удобряли - то и выросло"©
693 Злопчинский
 
08.11.20
20:26
икс = 0;
    игрек = 1;
    зет = 2;

    Сообщить("икс игрек зет "+икс+" "+игрек+" "+зет);
    
    попытка
        икс = икс+1;
        игрек = игрек+1;
        зет = зет+1;
        зет = зет/0;
    исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

    Сообщить("икс игрек зет "+икс+" "+игрек+" "+зет);
694 Злопчинский
 
08.11.20
20:27
(690) ты, главное, не путай транзакцию и попытку...
по идее ситуация как в примере выше - будет отрабатывать и при работе с документами...
695 tgu82
 
08.11.20
20:30
(694) Теперь не попутаю. Мне такой ликбез провели на эту тему серьезный.
Как раз не в попытке а в транзакции у мня несколько операций с документом. Попыток у меня вообще мало
где есть. А вообще считал что это почти тоже что транзакции. Жуть. Что значит экономический программист.
Ну теперь вот не совсем уже
696 Злопчинский
 
08.11.20
20:33
(695) "Погромисты 1С"
то же самое что
"на работу на склад требуются крадовщики и товароеды"
697 tgu82
 
08.11.20
20:40
(696) Точно. Но вот все же функционирует, денежки выручаются себестоимость примерно по строительным делам ну и по оптовым накладным считается как-то ну и т.д. Считаю что в определенном смысле программист себя окупает. (О присутстствующем не говорят:) )
698 Злопчинский
 
08.11.20
20:50
да похрен окупает или нет.
у меня есть мое чувство прекрасного. пока оно не начинает возмущаться - я работаю...
699 tgu82
 
08.11.20
21:32
(698) Да мне как-то проще отчетность сдать хотя и этого я не люблю. Но что делать - партия сказала надо комсомол ответил есть :)
сайт так сайт мобильный продавец так продавец
Главное чтобы по космосу ничего делать не заставили :)
700 victuan1
 
10.11.20
05:45
Насколько помню Транзакция и Попытка друг в друге плохо дружат.
Если Попытка внутри Транзакции неудачная, то и вся Транзакция отменяется (или наоборот, не помню уже - давно было).
701 Злопчинский
 
10.11.20
10:34
нормально они дружат.
702 tgu82
 
12.11.20
15:28
(701) НачатьТранзакцию пытается заблокировать журнал(как я теперь понял), не знаю мне кажется что попытка и начатьтранзакцию все-таки плохо совмещаются по крайней мере в моей голове
703 tgu82
 
12.11.20
15:34
(702) Тут вопрос в том что при ОтменитьТранзакцию не происходит выполнения ЗафиксироватьТранзакцию. То есть если на НачатьТранзакцию система показала большую фигу то в ЖР пойдет красная запись об ошибке. Если сначала Попытка а потом НачатьТранзакцию то при невозможности ее начать по исключению будет откат наверх. А если сначала НачатьТранзакцию а потом попытку то получается что чего-то пытаешся в начавшейся транзакции но непонятно куда уходить тогда по исключению получается опять внутрь транзакции или в исключение ставить ОтменитьТранзакцию? Короче малость туманно
704 Mikeware
 
12.11.20
15:34
(702) кроме журнала еще много чего может быть заблокировано.
705 tgu82
 
12.11.20
15:43
(704) Ну это да. Но речь о том что во что обертывать и надо ли это. Транзакцию в попытку или попытку в транзакцию?
706 Mikeware
 
12.11.20
15:45
(705) смотря что надо сделать....
707 tgu82
 
12.11.20
16:08
(706) Например? Вот просто хочу понять. ну скажем формирую я массово какие доки - например РКО по премии по сотрам. Юзеры другие работают ддокументы проводят всякие - вот как здесь правильно когда в цикле РКО создаются? НачатьТранзакцию перед циклом? И нужна ли здесь попытка и где?
708 tgu82
 
12.11.20
16:15
(707)+ Мне кажется так. Если документ проводится очень быстро то создать полсотни проведенных доков это фигня, а вот если не очень быстро тогда лучше паузы с попыткой опять провести данный документ чтобы другие могли работать в это время тоже
709 Злопчинский
 
12.11.20
20:20
(702) "НачатьТранзакцию пытается заблокировать журнал"
- нет.
откуда в самом начале транзакции транзакция знает какие объекты в ней будут юзатся чтобы их заблокировать?
710 Злопчинский
 
12.11.20
20:21
(703) нормально там все уходит/приходит. аккуратно писать и все.
711 Злопчинский
 
12.11.20
20:24
(705) НачатьТранзакцию ничего не блокирует.\Поэтому ситуация когда рухнет именно на НачатьТранзакцию - представляется мне ооочень маловерятной. Рухнуть при начале транзакции может тогда когда внутри открытой транзакции ты попытался взять заблокированный объект - тут транзакция твоя и навернулась. Но именно на попытке взять заблокированный объект. Но не на "НАчатьТранзакцию".
.
могу конечно ошибаться.
пусть спецы меня поправят содержательно
712 Злопчинский
 
12.11.20
20:25
(707) "например РКО по премии по сотрам." неудачный пример. это явно можно сделать вне рабочего времени. даже не роботом.
713 Злопчинский
 
12.11.20
20:30
(707) нахера в этом примере транзакция? Премия Петрова (РКО на премию ПетровУ) зависит от премии Сидорова (от РКО на Сидорова) что ли?
.
закрутил цикл. в цикле захерачил Попытку на каждый документ (будет медленее чем без попытки). Если создаваемый документ свалился в исключение - да и хрен с ним, пропустил, подождал и дальше херачишь (можно попытку вне цикла, а по исключению - переход на голову цикла к продолжению работы).
.
в результате сгенерил не 50, а 47 доков. ну и зашибись. следующим проходом (через час или как-то же ты понимаешь что РКО у тебя еще не созданы) сгенеришь оставшиеся 3
714 tgu82
 
12.11.20
22:47
(713) Ну на самом деле так и есть. Ну а что тогда делает НачатьТранзакцию? Она же объявляет всем что будет что-то писаться в базу данных?
715 Вуглускр1991
 
12.11.20
23:17
Написал для этой проблемы следующий слоеный пирог:
1) Сервис сообщений и регистрации подписчиков на сообщения.
2) Внешнюю компоненту для приема сообщений с этого сервиса - технологии COM.
3) Консольную утилиту с командами "109" - выйти немедленно всем, "107" - остановить работу и "108" - продолжить работу.
4) Ввел глобальные переменные - как "параметры сеанса", типа можно работать или нельзя.
В момент когда начинался обмен УРБД - отправлял из скрипта (обмен автоматический) 107 и все клиенты изменяли значения параметров сеанса. Когда кто-то из них пытался сделать запись в базу данных, до того, как произойдет блокировка, проверялось при помощи этих параметров: а не начат ли УРБД обмен, и если начат - вываливалось модальное окно, блокирующее его работу. Затем обмен кончался, всем отправлялось 108 и люди продолжали работать.
5) Настроил Formex.dll на события открытия форм и прописал логику, критическую к блокировкам.
6) Настроил глобальные вызовы ПриЗаписи, ПриОткрытии, ПриСозданииНового, ПриВводеНаОсновании при помощи ActiveMD - зашел во все формы всех метаданных и расставил процедуры.
7) Работает уже более 10 лет.
716 tgu82
 
12.11.20
23:27
(715) Интересно, собственно я об этом и говорил все время
Правад вот насчет написания внешней компоненты - сложно это )
717 hogik
 
12.11.20
23:53
(711)
«пусть спецы меня поправят содержательно»(с)
Открой, наконец, файл «ПроТранзакции.odt».
Я это написал специально для ТЕБЯ в январе 2019 года.
А если лень открывать, то читай тут:
=====================================
Положение № 1.
Транзакции запускаются/активизируются:
1) Явно, оператором языка 1С НачатьТранзакцию().
2) Неявно, в модуле проведения документа.
3) Неявно, в любом операторе языка 1С вызывающем модификацию таблицы БД. Например: Новый(), Записать().
Положение № 2.
Вложенные транзакции являются фикцией - на "поведение" блокировок они не влияют. Реальной транзакцией является транзакция "верхнего" уровня.
Положение № 3.
Блокировки накладываются на всю таблицу, а не на отдельные записи таблицы.
Положение № 4.
При выполнении операций внутри транзакции чтения или модификация (изменение записи или добавлении записи) "возникают" следующие блокировки:
1) До первого оператора обращения к таблице никаких блокировок не накладывается.
2) При (перед/до) выполнении первого оператора чтения таблицы накладывается блокировка по записи.
3) При (перед/до) выполнении первого оператора модификации таблицы накладывается блокировка по чтению (или подымается уровень с "по записи" на и "по чтению", если чтение таблицы уже было ранее в этой транзакции).
Положение № 5 (спорное).
Первый оператор (по логики алгоритма) языка 1С выполняющий обращение к таблице внутри транзакции "возбуждает флаг" т.н. "групповой блокировки". Основное назначение этого "инструмента" - запомнить имя таблицы, используемое в выдачи "системного" сообщения о невозможности начать очередную транзакцию. Думаю, что по задумки разработчиков 1С-а этот "флаг" должен обеспечить последовательное выполнение транзакций в различных сессиях 1С. Данная задумка сможет работать, если разработчик на языке 1С будет во всех транзакциях придерживаться единой последовательности в алгоритме на порядок  обращения к таблицам. Примером успешного срабатывания данной задумки - модуль проведения документов. Т.к. такой "первой" таблицей является "Журнал документов" для всех видов документов.
Положение № 6.
1) Операторов модификации БД вне транзакции не существует в 1С (см. пункт № 3 в положении № 1). И если выполняется модификация таблицы БД этим неявным способом активизации транзакции, а таблица заблокирована в транзакции другой сессии 1С, то операция модификации сваливается "мгновенно" и настройка "Время ожидания захвата таблицы..." на это не влияет.
2) Чтение вне транзакции не накладывает никаких блокировок. Но, производится проверка блокировки таблицы по чтению сделанная из транзакции другой сессии 1С. И если таблица заблокирована модификацией в транзакции другой сессии 1С, то данное чтение перейдёт в длительное ожидание не зависящее от настройки "Время ожидания захвата таблицы...".
Положение № 7 (общее).
В 1С 7.7 DBF-ая версия обеспечивается на 100% требования ACID (SQL-ная не обеспечивает). Т.е. все изменения выполняемые в транзакции "нашей" сессии не видны в других сессиях и не могут изменится другими сессиями. В "нашей" сессии повторное чтение данных не даст разный результат (если не использовать прямые запросы на FoxPro). Но, существует проблема не "описанная" требованиями ACID. Это случай когда две разные сессии читают данные и на основании их анализа делают выводы о дальнейшем поведении алгоритма. Если не выполнить блокировку по чтению всех читаемых данных, то сессии будут делать вывод на основании информации, которая может быть изменена в другой сессии уже после выводов сделанных в "нашей" сессии. Классический пример этой ситуации - обновление итогов:
1) Читаются данные в оперативную память (переменная Х) старого значения итогов.
2) Выполняется Х=Х+Добавка.
3) Записывается Х в базу данных.
Если одна сессия выполнит пункт № 1 до выполнения пункта №3 в другой сессии, то итог будет неверным. И транзакции 1С никак не решают эту проблему. Кроме обеспечения инструмента "флага", как это существует при проведении документов.
718 hogik
 
13.11.20
01:03
Вопрос к участникам темы.
Ниже привожу код из глобального модуля.
Возникала ли проблема в вашей системе решаемая подобным кодом?

//--------------------------------------
Процедура ШальнаяТранзакция()
   Пока (0=0) Цикл
      Попытка
         ОтменитьТранзакцию();
         ЗаписьЖурналаРегистрации("Шальная транзакция: "+ИмяПользователя(),,,,5);
      Исключение
         Прервать;
      КонецПопытки;
   КонецЦикла;
КонецПроцедуры
//--------------------------------------
ОбработкаОжидания("ШальнаяТранзакция",1);
//--------------------------------------
719 tgu82
 
13.11.20
07:31
(717) То есть если я выбираю ВыгрузитьИтоги или РассчитатьИтогиНа или По то в таблица регистра которую я анализирую или даже несколько таблиц регистров - блокируются и по записи и по чтению? И тогда чем хуже закрыты регистры тем больше времени требуется на чтение итогов?
720 tgu82
 
13.11.20
07:41
(718) транзакция может выполняться в данный конкретный момент только одна? ведь не обязательон же проводить документ, иожно создать или модифицировать документы и справочники в разных сессиях разные. новый, записать. Тогда какую транзакция отменяет ваша процедура ожидания каждую секунду?
721 Mikeware
 
13.11.20
07:52
(713) премиальный фонд вычисляется по объему продаж за педыдущий период , насчитанному ровно в 16:28:37 четверга четной недели, следующего за отчетным периодом; и распределяется по отделам, а внутри отделов по сотрудникам методом Монте-Карло.
722 tgu82
 
13.11.20
08:04
(721) Да нет у нас такого фонда давно, я просто пример привел. Вот из (720) какая транзакция отменится? Ведь есть же транзакции блокирующие и по записи и по чтению (самый высокий уровень), при этом транзакционные операции производятся как с документами так и со справочниками. При этом блокируется или Журнал или днлок или упдтс кстати больше и не помню никаких других вариантов блокировок когда ошибки в ЖР пишутся
723 Вуглускр1991
 
13.11.20
09:43
(716) Если интересно, то могу все передать.
724 tgu82
 
13.11.20
09:56
(716) Интересно даже очень. А это для ДБФ или без разницы?Я хотел на почту написать но у вас она скрыта
725 Злопчинский
 
13.11.20
11:31
(714) "Ну на самом деле так и есть" - премия одного сотрудника влияет на премию другого сотрудника?
726 Злопчинский
 
13.11.20
11:43
(720) " Тогда какую транзакция отменяет ваша процедура ожидания каждую секунду?"
скорее всего, это подстраховка от повисшей незакрытой транзакции где-то (только транзакция открытая в своем сеансе?)
.
а вот действует ли ОтменитьТранзакцию() на открытые транзакции которые были открыты в других сеансах? - вот не знаю.
по здравому размышлению - ОтменитьТранзакцию действует только на транзакции своего сеанса..
727 Злопчинский
 
13.11.20
11:44
(723) и мне можно прислать? [email protected]
728 Злопчинский
 
13.11.20
11:45
Кстати.
у  hogik есть весьма полезная приблуда, которая позволяет тормознуть 1С в тот момент когда нет никаких транзакций
729 tgu82
 
13.11.20
15:08
(728) Какая?
730 tgu82
 
13.11.20
17:56
(726) Транзакции именно своего сеанса. И как бы теперь более менее понятно что к чему
731 hogik
 
13.11.20
21:39
(720) (726)
В сообщении (43) написано:

«Или кто-то долбит документы а все стоят, а долбит впустую ибо один вид дока наезжает на другой. Увидел это - тут же его отключил и все заработали. Но как сделать чтобы аж визжал комп и ругался что Сидоров лупит черт что в одиночку»(с)

Допускаю, что в сессии «Сидорова» образовалась незакрытая транзакция (на уровне движка БД) из-за сбоя в неком алгоритме. И последующие транзакции выполняются как написано в положении № 2 сообщения (717), давая возможность работать «Сидорову» в диалоговом режиме. Тогда код из (718) сообщения может решить проблему.
732 Злопчинский
 
13.11.20
23:27
(731) " образовалась незакрытая транзакция (на уровне движка БД) из-за сбоя в неком алгоритме. "
-то есть тутречь о том, что именно прогрраммистом открытая транзакция где-то незакрывается..
но вроде как если форму закрыли или процедура, в которой открыта транзакция заканчивается - выход из процедуры - то транзакция должна закрыться или отмениться автоматом.
733 hogik
 
14.11.20
00:42
(732)
Должна. :-) Но, я написал выше «из-за сбоя в неком алгоритме»(с). Я вспомнил, что за 15 лет эксплуатации мы имели пару похожих случаев, как описывает Юрий. Причину мы не смогли найти. А у Юрия, по его словам, это возникает раз в три месяца. Те. разглядывая журнал событий, можно будет попытаться найти «точку» в действиях пользователя/системы с которой пошла эта бяка.
Это если код из (718) сообщения сработает. Ну, и автоматизировать снятие проблемной сессии без ручных действий.
734 tgu82
 
14.11.20
09:03
(732) Понимаешь - вся идея открытой мной ветки заключалась именно в том чтобы
1. Понять вот все эти сбои - это следствие каких-то моих устанвок типа "секретных" релизов или патчения каких-то библиотек, либо падения периодического - журнала или же это вполне объяснимые и даже управляемые в рамках штатной (или с добавлением формекса) 1с и тогда вопросы в скорости проведения документов, тормоза из-за незакрытых регистров и т.д.
2. Чтобы все-таки отделить транзакции от попытки - у меня это понятия смешивались в голове как-то.
3. .....Что-то еще попутно узнать и применить типа кэш по константам.

Я получил очень сильную серию консультаций (даже где-то натаскиваний) от hogik. И многое в голове прояснилось. За что я ему очень благодарен!
Ну и массу полезнейших советов и подсказок от остальных форумчан за что вам всем большое спасибо

Просто первые ветки о том что только под скуль можно что-то выяснить по транзакциям - не совсем верные и штатные механизмы платформы 1С и его встроенный язык имеют очень большие и достаточно прозрачные возможнсти которыми в большой степени можно штатно или почти штатно управлять
735 tgu82
 
14.11.20
09:34
(734)+ Ну и как я понял - что все-таки при всех нюансах лучше использовать ОбработкуОжидания одну на сенс, тогда все намного прозрачнее ну и обработку внещнего события - тоже одну - и тоже именно в глобальном контексте. Эти же процедуры в локальном контексте мне кажется для таких не очень сложных алгоритмов как у меня - применять не стоит потому что как вообще работает вся эта "адская" смесь глобального и локального контекста особенно в плане когда есть глабальная обработка ожидания (точнее с ипспользованием Формекса - их несколько же можно делать) и обработки ожидания из локальных контекстов. Конечно в этом случае глобальная процедура ожидания - штатная - получается довольно сложной и длинной но тут уж ничего не поделаешь. Ну и выгонялка пользователей - возможно толкьо с помощью жесткого киллера а до это отправки сообщения во все сеансы
736 Djelf
 
14.11.20
09:49
Да, к сожалению бывает такое как описано в (733). Редко, но бывает. Кто-то один работает, но в параллельной реальности т.к. документы у него по факту не сохраняются, а все остальные курят бамбук. Синтетическими тестами добиться такого не удалось.
А вот взаимоблокировки получить - легко! Код, конечно идиотский, но зато одна сессия четко залипает на захвате таблицы Журнала, а другая на Номерах документов.

Процедура СоздатьВзаимоблокировки()
  Система=СоздатьОбъект("Система");
  НачатьТранзакцию(); // без этого взаимоблокировки не будет!
  Для ии=1 По 100 Цикл
    Состояние(ии);
    Попытка
      ОтменитьТранзакцию();
      Сообщить(1/0);    
    Исключение
      Попытка
        НачатьТранзакцию();
        Реализаиця=СоздатьОбъект("Документ.Реализация");
        Реализаиця.Новый();
        ОтменитьТранзакцию();
      Исключение
      КонецПопытки;
    КонецПопытки;
    Система.Уснуть(100);
  КонецЦикла;
КонецПроцедуры
737 tgu82
 
14.11.20
10:35
(736) И все это в обработке ожидания глобальной должно быть?
Каждую секунду будет запускаться?
738 Djelf
 
14.11.20
10:51
(737) Во внешнюю обработку засунь. И запусти в 2х сессиях. Честно говоря не очень понимаю как это работает, но обе сессии зависнут.
Это не лечилка от hogik, это наоборот - убивалка!
739 tgu82
 
14.11.20
15:40
(738) Я понял кадется. Это как пример вот такого поведения базы как я описывал
740 Eeeehhhh
 
14.11.20
16:13
8 страниц ни о чем ... Ау Ромикс ты где?
741 Mikeware
 
14.11.20
16:37
(740) ромикса похитили инопланетяне с Нибиру за разоблачение эфирно-кефирного заговора мирового правительства иллюминатов. Только тс-с-с!
742 Вуглускр1991
 
14.11.20
17:22
(741) А ведь тебе не платят за забалтывание и сокрытие сведений о деятельности верхушки глобального управления. Зачем ты льёшь воду на их мельницу?
743 Mikeware
 
14.11.20
17:49
(742) это не вода! :-)
744 Злопчинский
 
14.11.20
18:02
(743) Главное - после того ка котлил - не забыть про ширинку...
745 tgu82
 
14.11.20
19:31
(740) Еще как о чем!

Ведь здесь по-сути вообще затрагивались как практические так и теоретические основы работы с транзакциями
и способы устранения ошибок и способы корректного управления транзакциями
746 tgu82
 
14.11.20
19:33
(745)+ Я например набрался наглости и некоторые проблемные места уже проработал и кое-какие задачки
за которые никак не мог взяться потому что висело мое непонимание всех этих вещей надо мной дамокловым мечом
Программист всегда исправляет последнюю ошибку.