Имя: Пароль:
1C
1С v8
Пропали движения документов
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, а то без пива не отвертелся бы)))