|
Пропали движения документов | ☑ | ||
---|---|---|---|---|
0
MadHead
16.05.12
✎
13:43
|
У нас в ночное время перепрововдятся документы (обработкой не восстановлением последовательности) в фоновом задании. И в момент перепроведения была запущена другая обработка которая перепроводит документы (документы в 1 и 2-й обработке не пересекаются) после чего у некоторых документов пропали движения. Если єти документы перепровести руками то движения появляются. Нормально ли такое поведение системы или причина в другом?
|
|||
1
DrShad
16.05.12
✎
13:44
|
все норм
|
|||
2
Лоботряс
16.05.12
✎
13:47
|
Была такая же фигня, весь косяк был в криво написанной процедуре проведения.
|
|||
3
Лоботряс
16.05.12
✎
13:47
|
ИМХО обработка тут непричем
|
|||
4
DrShad
16.05.12
✎
13:48
|
да вот как раз обработка и причем
|
|||
5
Лоботряс
16.05.12
✎
13:50
|
(4) ну так освети своим знанием мою темную душу
|
|||
6
spu79
16.05.12
✎
13:51
|
блокировки регистров?
|
|||
7
MadHead
16.05.12
✎
13:52
|
(6) Блокировки вероятнее всего были.
|
|||
8
MadHead
16.05.12
✎
13:53
|
Фоновое задание при блокировках ведет себя непредсказуемо? почему не откатывается транзакция?
|
|||
9
spu79
16.05.12
✎
13:54
|
документы разные, а в проведении регистры одинаковые и "кто раньше встал, того и тапки"
|
|||
10
MadHead
16.05.12
✎
13:57
|
(9) Я согласен, но документ был проведен и у него были проводки, после перепроведения (возможно блокировки) у документа пропадают проводки и документ остается проведенным. Вот это настораживает. Может ли так произойти, если в пользовательском режиме у 2-х пользователей будут перепроводится некоторые документы
|
|||
11
spu79
16.05.12
✎
14:05
|
// Вначале сторнируем
ТаблицаДвижений = НаборДвижений.Выгрузить(); ТаблицаДвижений.Очистить(); // Заполним таблицу движений. ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(КопияТаблицыТоваров, ТаблицаДвижений); |
|||
12
spu79
16.05.12
✎
14:05
|
первый попавшейся пример проведения
|
|||
13
MadHead
16.05.12
✎
15:17
|
(12) я верю что такое в коде можно сделать, мне интересно возможно ли такое поведение системі при условии что в коде все нормально. Просто этот механизм работал уже год без единого сбоя.
|
|||
14
spu79
16.05.12
✎
15:21
|
(13) ты/вы не понял. пример - это не можно сделать! А пример кода Типовой конфигурации УПП 1.3.25.1 док Авансовый отчет (первый в списке). А то что год работал...ну звезды так сошлись. Контролируйте время запуска этих обработок (фоновых заданий).
|
|||
15
MadHead
16.05.12
✎
15:38
|
(14) Можно на ты. Выходит если 2 пользователя одновременно перепроводят документы которые попадают в блокировку, то у документов могут пропасть движения, а документ останется проведенным?
|
|||
16
MadHead
16.05.12
✎
15:38
|
Предположим пользователи делают перепроведение документа программно
|
|||
17
spu79
16.05.12
✎
15:44
|
вот эта строка ТаблицаДвижений.Очистить(); срабатывает, а когда доходит до ТаблицаДвижений.Добавить() срабатывает блокировка => движения пропали, статус документа - проведен. 2 разных документа в один момент времени (секунда) пытаются добавить движение, кто первый захватил регистр, тот проведен с движением, второй - курит.
|
|||
18
MadHead
16.05.12
✎
15:49
|
Дык обработка проведения проходит в транзакции и при конфликте блокировок она должна откатится
|
|||
19
hhhh
16.05.12
✎
15:52
|
(15) ну если логически подумать, даже без блокировок, ты пришел с утра, поменял документ, провел, у тебя записались движения. После обеда другой чувак открыл документ, изменил и провел.
Вечером ты открываешь документ - твои движения пропали. То есть это обычная ситуация, если пользователи тупые. |
|||
20
MadHead
16.05.12
✎
16:00
|
(19) Вопросы у меня возникают, если ошибка блокировок возникате почему не откатывается транзакция обработки проведения
|
|||
21
spu79
16.05.12
✎
16:13
|
"Возможные проблемы при многопользовательском доступе к одним и тем же данным
Работа в многопользовательской среде требует соблюдения определенного компромисса между требованиями предсказуемости, целостности и непротиворечивости данных информационной базы и требованиями параллельности работы. Как известно, при одновременном чтении и изменении одних и тех же данных конкурирующими транзакциями могут возникнуть следующие проблемы одновременного доступа: * Проблема потерянного изменения (англ. The Lost Update Problem) - если две транзакции изменяют одни и те же данные, взяв в качестве первоисточника начальное значение этих данных, то в системе останутся изменения внесенные той транзакцией, которая записала свои изменения последней, поскольку эти изменения заменят собой все изменения, внесенные до этого." |
|||
22
spu79
16.05.12
✎
16:13
|
взял здесь http://1cexpo.ru/informacziya/27-blokirovki-dannyx-v-1spredpriyatii-8.html
очень подробно про блокировки, кури на здоровье |
|||
23
MadHead
16.05.12
✎
17:05
|
(22) спасибо почитал. Єксперементальным путем выяснили, что даннаое поведение системы наблюдается при конфликтах блокировок в фоновом задании, если проделать те же действия на 2-х толстых клиентах, то транзакции откатываются правильно
|
|||
24
spu79
16.05.12
✎
17:07
|
(23) я ж с этого и начал (пост 6)
|
|||
25
MadHead
16.05.12
✎
17:09
|
(24) да, но остается непонятным чем клиент лучше сервера. Ведь и там и там блокировки одинаковые
|
|||
26
spu79
16.05.12
✎
17:13
|
сам механизм программной (фоновое задание) и ручной (кнопка Ок в доке) обработки данных различаются. в программной обработки возможностей больше (точнее меньше ограничений) и это просто надо учитывать, можно получить "обратный" эффект, как в твоем случае.
|
|||
27
MadHead
16.05.12
✎
17:16
|
(26) спасибо за разъяснения на будущее буду учитывать
|
|||
28
spu79
16.05.12
✎
17:31
|
(27) повезло тебе, я в Киеве в крайний раз был в году 92, а то без пива не отвертелся бы)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |