|   |   | 
| 
 | Транзакции и Для изменения | ☑ | ||
|---|---|---|---|---|
| 0
    
        wladimir90 04.10.12✎ 09:35 | 
        Добрый день.
  Есть некий независимый регистр сведений в который записывают данные ряд документов. Раз в минуту данные регистра считываются и модифицируются во время обмена данными. Однажды во время исполнения запроса на считывание данных (во время Выполнить()) вышла ошибка "Конфликт блокировок при выполнении транзакции... Не удалось продолжить просмотр с NOLOCK вследствие перемещения данных.". Как я понимаю ошибка возникла из за того что считывания данных из регистра пошло в тот самый момент когда некий документ производил в него запись. Если я в текст запроса обмена вставлю Для изменения - решит ли это проблему? Или если я включу транзакцию на время выполнения обмена? | |||
| 1
    
        МихаилМ 04.10.12✎ 09:46 | ||||
| 2
    
        wladimir90 04.10.12✎ 09:51 | 
        (1) Будет ли выходом применить такую конструкцию прямо перед выполнением запроса?:
  Пока ТранзакцияАктивна() Цикл КонецЦикла; | |||
| 3
    
        МихаилМ 04.10.12✎ 09:58 | 
        (2)
  не знаю. я бы сначала воспользовался советом в (1) | |||
| 4
    
        pavig 04.10.12✎ 10:03 | 
        (0) Для Изменения не решит проблему, так как Для Изменения срабатывает только если запрос выполняется во время транзакции записи     | |||
| 5
    
        1Страх 04.10.12✎ 10:04 | 
        (4) просто транзакции, разве нет?     | |||
| 6
    
        wladimir90 04.10.12✎ 10:05 | 
        (3) Там сказано "отправьте запрос повторно" - то что я написал в (2) делает нечто подобное. Не отправляет заново, но ждет завершения всех транзакций на сервере. С другой стороны можно в цикл "пока" с обработкой исключения включить выполнить().
  Фраза "удалите подсказку блокировки NOLOCK" непонятна вообще. | |||
| 7
    
        pavig 04.10.12✎ 10:10 | 
        (6) а вот это может и прокатить     | |||
| 8
    
        pavig 04.10.12✎ 10:11 | 
        (7) хотя.... транзакции могут происходиьт постоянно, необходимо чтобы они становились в очередь если я правильно понимаю....     | |||
| 9
    
        pavig 04.10.12✎ 10:16 | 
        (5) если не в транзакции записи, то заблокируется исключительно на время выполнения запроса; если в транзакции записи, то на все время выполнения транзакции...
  (0) выход - перевод на упр блокировки плана обмена, выполнение записи в этот регистр порциями по немногу записей чтобы ожидание транзакцией чтения транзакции записи не превышало допустимый временной интервал | |||
| 10
    
        wladimir90 04.10.12✎ 10:23 | 
        (8) Тоже об этом подумал - если организация разрастется до нормального количества пользователей, то 1с из транзакций будет выходить в лучшем случае только во время обеда. 
  (9) Т.е. включить код обмена в транзакцию с управляемым режимом блокировок? | |||
| 11
    
        pavig 04.10.12✎ 10:30 | 
        (10) для начала все же попробуй разбить записываемые наборы на пачки по нескольку записей (несколько сот, несколько тысяч - я не могу кнкретно подсказать по скольку разбивать, надо анализировать опытным путем), потом - в упр режим блокировок (это гораздо более трудоемко чем первая часть, потому что просто НачатьТранзакцию(УпрРежим) не прокатит, выдаст ошибку: надо будет переводить регистр, а вместе с регистром - документы, которые делают записи в этот регистр, а еще перед этим изменить свойство конфы в Автом и Упр Режим, кроме этого, скорее всего, придется перевести план обмена (если используете его) в упр режим, а если переводим план обмена, то и все участвующие в нем объекты тоже должны быть в упр режиме. чтобы весь обмен заработал в упр режиме - и все это ради одного регистра...)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |