Конфликт блокировок, групповая обработка !

  1. 10 г. назад

    И так люди добрые !

    Восстанавливаю взаиморасчеты, написана мудрёная обработина. Естественно при проведении доков, работают другие люди и возникают блокировки. Как грамотно сделать, что бы обработниа упиралась и пока не проведет док успешно, долбилась в него до последнего тысячелетия ?

    В цикл запухнуть попытку проведения ? Это не сильно страшно ?

    Ответы: (1) (2)
  2. (0) Сделать распределенку, восстановить взаиморасчеты и получить в базу данные, которые сделали люди, затем рабочую базу подменить.

    Ответы: (3)
  3. (0) запускать обработину по ночам регламентным заданием.

    //в теории еще можно проверять заблокирован ли объект(регистр) для записи. Но, наверное, это дофига делов.

  4. (1) Блин, ну вопрос не в этом. А в том как добиться проведения документа в обработке. То есть документ должен быть проведен и баста.

  5. http://v8.1c.ru/overview/Term_000000642.htm

    Ответы: (5)
  6. (4) Там что то про управляемые блокировки, нах мне это ? Конфа типовая, мне просто нужно что бы документ провелся.
    Если я такой код замучу, это слишком быдловато будет:

    Пока Истина Цикл
       Попытка
           НачатьТранзакцию();
            Данные.Записать();
            ЗафиксироватьТранзакцию();
            Прервать;
        Исключение
             ОтменитьТранзакцию();
        КонецПопытки;
    КонецЦикла;
    
    Ответы: (7)
  7. Для восстановления взаиморасчетов нефиг проводить весь документ, достаточно записать движения в нужный регистр

  8. (5) вот как мне это теперь развидеть? )

    Ответы: (8) (10)
  9. (7) Что не так ?

    Ответы: (9)
  10. (8) Да все не так... Пока Истина Цикл одни и те же данные записать? Это чтобы наверняка? ))

  11. (7) Скажи спасибо, что Перейти ~Метка нет ...

    Ответы: (11)
  12. (10) Не, ну теоретически код рабочий, практически 100%-я загрузка проца будет, если не удается провести.

  13. Это фактически с ИТС взято, только там вместо ИСТИНА переменную используют. )))

    Ответы: (13)
  14. (12) Может в ней и фишка... Ну тут суть что ты этот документ будешь долбить безостановочно если он открыт, если открыт на том же ядре где и долбишь, закрыть его не смогут, ибо зависнет все нафик. Неграмотный это код, надо какой-нить sleep вставлять что ли...

  15. Слипы в транзакцию что ли ? или как ?

    http://its.1c.ru/db/metod81#content:2313:1

    Ответы: (15)
  16. (14) В исключение. При удачной попытке все нормально будет.

    Ответы: (16) (18)
  17. (15)+ По исключению у тебя бесконечный цикл закручивается, который грузит проц так, что хрен пробьешь. Не так чтобы в принципе невозможно, но трудно будет, будет висеть.

  18. К инет-версии у меня нет логина сейчас.

  19. (15) Ну в исключении у меня там еще куча всего будет, запись в ЖР и анализ ошибок, то есть у меня грубо говоря есть список ошибок по которым я долблюсь, а есть критичные по которым так же будет прерываться.

    Ответы: (19)
  20. (18) Да проверить-то несложно. Открой документ, да запусти эту шнягу в другом сеансе чтобы его провести попыталось. Если сможешь его нормально закрыть, значит все нормально, но по идее должно подвиснуть.

    Ответы: (20)
  21. (19)+ Ну правда оба сеанса должны быть на одном ядре, если на разных, то все нормально прокатит.

  22. Предлагаю
    Процедура ЗаписатьДокументСНесколькихПопыток(Документ, РежимЗаписи,РежимПроведения,КоличествоПопыток,ВременнойИнтервалМеждуЗаписями)
    Из названия понятен смысл процедуры. Заменить в своей обработке все Док.Записать, на эту процедуру.

    Есть еще усовершенствования, например делать временные интервалы между попытками экспоненциально
    1,2,4,8,16,32,64 секунды.Это позволит не делать большие паузы между записями если в них нет нужды и наоборот делать довольно большие паузы там, где надо.

    Ну и естественно выдавать исключение, если попытки исчерпаны.

    Ответы: (22)
  23. (21) Классика жанра. Браво-браво. Прогресс на марше.:)

или зарегистрируйтесь чтобы ответить!