Восстановление последовательностей интервалами

Бывают ситуации, когда необходимо восстановить последовательность в рабочее время при работающих пользователях или запущенное на ночь восстановление последовательностей не завершилось и приходиться его отменять, и граница последовательностей остаётся там же, где и была, и приходится запускать всё сначала.
Восстановление выбранных последовательностей с помощью данной обработки выполняется интервалами, указанными в реквизите "Интервалы восстановления последовательностей" и при прерывании выполнения обработки границы последовательностей устанавливаются на начало последнего восстанавливаемого интервала.

Обработка выполняется в разделенном режиме. Для того чтобы дать возможность пользователям проводить документы предусмотрен реквизит «Пауза между интервалами восстановления». При возникновении ошибок (когда пользователи блокируют данные проведением документов) возможен повторный автоматический перезапуск процедуры восстановления (реквизит «Время ожидания повторного запуска…»). Перезапуск активируется с помощью обработчика ожидания. Так же можно указать максимальное количество попыток восстановления при возникновении ошибок и выводить данные о границах последовательностей и ошибках в лог файл. А для того чтобы пользователи не смогли сдвинуть границы последовательностей назад, рекомендуется установить дату запрета редактирования.

Функция модуля обработки «ВыполнитьВосстановлениеПоследовательностей» разработана так, чтобы её можно было перенести в общий модуль и использовать на сервере в регламентных заданиях. Пример восстановления последовательностей с помощью регламентных заданий уже был описан в статье //infostart.ru/public/20592/

Ну и по времени восстановление последовательностей небольшими периодами с помощью данной обработки оказалось быстрее, чем восстановление стандартной обработкой.

Добавил реквизит время запуска, теперь можно нажать кнопку и автоматическое восстановление запустится в указанное время.

Добавил реквизит время завершения восстановления, теперь процедура автоматического восстановления будет прервана после наступления указанного времени.

46 Comments

  1. hanio

    Вот три недели назад бы ты обработину выложил, а так я уже свою аналогичную сделал, впрочем это не отменяет мой плюс 😉

    Reply
  2. hanio

    Кстати молодец отлично все учел и паузы и транзакцию, маленькое уточнение — паузу в своей обработке я повесил на расписание по одной той причине что в течении суток у меня есть пики работы операторов и ограничиться только одной паузой я не смог — как пример с 16 часов до 21 часа пауза составляет 15 секунд (проведение реализаций и прочих документов максимально в это время), с 21 часа по 3 ночи пауза 5 секунд (проверено что достаточно), с 3 ночи до 7 утра — паузы нет вообще, остальное время пауза 2 секунды. Все выверено экспериментально. Если сможешь допиши свою обработку и я тогда даже свою не буду выкладывать, потому что у тебя очень грамотно. И вопрос вдогонку — у меня почему то встречалось в последовательности реализации помеченные на удаление, у тебя не встречалось? Мне просто не понятно — движения нет, есть конечно документ-основание — проведенный заказ, но на этом у меня останавливалась граница последовательности.

    Reply
  3. hanio

    Да и вставь Обработку прерывания — это уже норма в программировании 😉

    Reply
  4. hrip

    (3) hanio, ОбработкаПрерыванияПользователя() там стоит аж в нескольких местах 🙂

    Reply
  5. hrip

    (2) hanio, У меня есть мысль сделать реквизит время запуска т.е. нажал кнопу и пошел, а обработка сама стартует в обозначенное время. А вообще планирую функцию(ВыполнитьВосстановлениеПоследовательностей), которая восстанавливает последовательность поместить в общий модуль и там уже запускать по расписанию регламентным заданием. Различные варианты запуска обработки можно сохранить в настройках

    Про помеченные на удаление документы в последовательностях ничего не могу сказать, я же выборку документов из последовательностей не делаю — использую Последовательности.Восстановить()

    Reply
  6. kapustinag

    (2) hanio,

    hanio пишет:

    … И вопрос вдогонку — у меня почему то встречалось в последовательности реализации помеченные на удаление, у тебя не встречалось? Мне просто не понятно — движения нет, есть конечно документ-основание — проведенный заказ, но на этом у меня останавливалась граница последовательности.

    Это, возможно, известный баг в УПП, до сих пор не устраненный (по крайней мере, в 1.2.39.1 он все еще наблюдается):

    — если пометить на удаление проведенный документ (т.е. не отменять проведение, а сразу пометить на удаление), то в некоторых ситуациях движения остаются.

    Кроме того, если конфигурация с исправлениями, то могут быть и другие причины.

    Reply
  7. hanio

    в регламентах так то можно но тогда надо делать дополнительные телодвижения а так было бы удобно прямо тут настроить паузы. И кстати я немного по другому реализовал — я запросом вытягивал те документы которые есть в последовательности и начинал их перепроводить, здесь понимаешь какой плюс есть — четко можно видеть весь список документов последовательности и ручками в случае некорректной ситуации ставить на следующий документ ГП.

    (6) А насчет бага что помеченный на удаление лезет в последовательность то у меня УТ 10.3.12.3 а платформа 1С:Предприятие 8.2 (8.2.11.236). В ней наблюдается такое? и еще если бы такой косяк имел место то это бы всплыло ведь в регистрах раз движения не ушли…

    Reply
  8. hrip

    (7) hanio, Последовательности.Восстановить() блокирует для пользователей возможность проведения документов которые входят в последовательность, поэтому некорректной ситуации не будет (ну а для уверенности можно дату запрета поставить :-)), может ошибкой завершиться только попытка запуска восстановления нового интервала, поэтому и нужен перезапуск, и ручками не надо ничего править.

    А насчет регламентных заданий. Раньше мне приходилось запускать постоянно ручками различные обработки, после того как сделал вместо них регламентные задания я уже и забыл что такие обработки существуют.

    А про баг с помеченными на удаление не знал — надо будет проверить.

    Reply
  9. hrip

    (7) hanio, Будет время попробую расписание сделать

    Reply
  10. hanio

    именно дата запрета редактирования и отследит за тем что не получится у пользователей влезть в последовательность. У меня была задача с января протащить границу последовательности, а как протащил там и твой вариант будет нормально работать.

    Reply
  11. Evgeny2009

    Супер!!! Просто находка!! Можно мне на sotikom@bk.ru отправить а то плюсиков не хватает (. За реализацию идеи «+»!!

    Reply
  12. adeich

    Во, блин……….. Сидел вчера сам ваял, так была нужна……….. Но однозначно «ПЛЮС»

    Reply
  13. hrip

    Добавил реквизит время запуска, теперь можно нажать кнопку и автоматическое восстановление запустится в указанное время.

    Reply
  14. curys

    Огромное спасибо за грамотную разработку и грамотный код!

    Reply
  15. hrip

    (14) curys, Пожалуйста 🙂

    Reply
  16. a-novoselov

    (5) А зачем переносить процедуру в общий модуль? что мешает добавить в общий модуль процедуру для фонового задания с единственной строчкой:

    ВнешниеОбработки.Создать(«С:Путь до моей обработкиВосстановлениеПоследовательности.epf»).ВыполнитьВосстановлениеПоследовательностей();
    
    Reply
  17. hrip

    (16) a-novoselov, можно и так сделать. Программирование тем и хорошо что можно одну и ту же задачу выполнить разными способами. Главное чтобы в функции ВыполнитьВосстановлениеПоследовательностей() не было вызовов клиентских процедур (например Сообщить(), Состояние()).

    А по моему мнению если изменять конфигурацию и создавать новое регламентное задание, то всё равно в каком то модуле придется создать процедуру которая запускает это задание, там же например можно разместить и ВыполнитьВосстановлениеПоследовательностей(), а не полагаться на наличие обработки где то на диске (ведь есть вариант что база может быть перенесена в другое место или на другой сервер, а про обработку можно элементарно забыть, ну или например удалит ее кто нибудь случайно).

    Reply
  18. vartos

    очень полезная обработка, спасибо автору. Только вопрос — как она отработает, если в базе ведется учет в разрезе нескольких организаций?

    Reply
  19. hrip

    (19) vartos, Восстанавливает последовательности по всем организациям сразу. Мысль была сделать отбор по организациям, но потребности у меня такой небыло. Попробую сделать.

    Reply
  20. irapronira

    подскажите, как установить определенный период для расчетов НУ УСН, допустим, только за январь 2012 (при установленной дате актуальности 01.01.0001.

    Reply
  21. hrip

    (21) irapronira, Не совсем понял вопрос насчет периода расчетов. Если имеется ввиду граница последовательности, то надо либо перепровести все документы, или скачать обработку которая может установить произвольную границу последовательности.

    Reply
  22. irapronira

    А не подскажите ссылку, где есть обработка с установкой произвольной границы последовательности?

    Reply
  23. hrip

    (23) irapronira, Здесь же на инфостарте

    напрмер

    http://infostart.ru/public/16525/

    http://infostart.ru/public/20953/

    ну или поиском воспользуйся

    Reply
  24. irapronira

    спасибо

    Reply
  25. OlegrVasil

    Всё прекрасно отрабатывает. Спасибо большое разработчику.

    Reply
  26. jack_kkm

    Автор, спасибо тебе, прям от души! Прям ваще! 🙂

    Очень полезная обработка оказалась, днем ставлю запуск на вечер и спокойно иду домой.

    Reply
  27. hrip

    (27) jack_kkm, Пожалуйста 🙂

    Reply
  28. jack_kkm

    hrip, скажи пожалуйста, где найти сообщение об ошибке списания по партионному учету, кроме окна сообщений? В логе нет, а хотелось бы. Получается, очистил окно и все ошибки потеряны?

    Reply
  29. hrip

    y(29) jack_kkm, насколько я знаю, то нигде

    Reply
  30. 1cinfo1

    Уже пару дней мучаюсь над тем, как запустить автоматически перепроведение в час ночи. Надеюсь ваша обработка поможет в этом

    Reply
  31. 1cinfo1

    Вот тоже интересный вариант http://infostart.ru/public/20238/

    Буду пробовать допиливать под КОРП бухгалтерию

    Reply
  32. a1ex4ndr

    Под 8.1 никому не попадалась такая обработка?

    Reply
  33. ssvetusik

    Хорошая обработка, как я поняла если будут транзакции то она остановиться?

    Reply
  34. hrip

    (34) ssvetusik, Остановиться только если вручную ограничить количество попыток запуска

    Reply
  35. dyak84

    Автор работа клнечно зачетная слов нет но как быть с таким дело как последовательности. при работе твоей обработки все потом не будет красным.второй вопрос могу ли я выбрать 3 типадокументов и устанавить отбор по табличной части номенклатура.Зарание спасибо за ответ

    Reply
  36. hrip

    (36) dyak84, так обработка как раз и занимается тем что восстанавливает последовательности.

    а как можно восстановить последовательность с отбором по типу документа(ов), если другие виды документов не перепроводить? Тогда в ней просто весь смысл теряется.

    Reply
  37. nikser

    Ваша обработка не работает .Ставлю время когда начинать и когда заканчивать. Прихожу .База закрыта . Последовательность не восстановлена. какая причина .

    1С:Предприятие 8.2 (8.2.18.82)

    «Управление торговлей», редакция 10.3 (10.3.18.3) (http://v8.1c.ru/trade/)

    Copyright (С) ООО «1C», 2003-2012. Все права защищены

    (http://www.1c.ru)

    Reply
  38. hrip

    (38) nikser, Вашу проблему вероятно надо искать не в обработке т.к. в ней нигде не предусмотрено закрытие информационной базы. Да и описание проблемы никакое «Прихожу .База закрыта .» Попробуйте проследить что происходит во время запуска и выполнения обработки.

    Reply
  39. nikser

    Спасибо за ответ . Проследить невозможно -по причине того, что прога просто закрывается .

    Зашёл в монопольном режиме. Запустил. Результат на скрине вы видите . Что может быть ???

    Везде ставил разное время — результат тот же.

    Reply
  40. nikser

    Спасибо за ответ . Проследить невозможно -по причине того, что прога просто закрывается .

    Зашёл в монопольном режиме. Запустил. Результат на скрине вы видите . Что может быть ???

    Везде ставил разное время — результат тот же.

    Reply
  41. ewqewqewq

    Огромное спасибо.

    Такой вопрос отменить обработку нельзя корректно? Только ждать окончание по времени?

    Уточните что значит «запустить обработку в» при этом в это время должна быть открыта программа 1с или достаточно включенного компьютера ? спасибо.

    Reply
  42. SAshock

    (20)hrip, по организациям не получилось сделать? очень надо )

    Reply
  43. jo0506

    Допилить еще время окончания, если чек бокс не стоит на времени окончания, обработка не стартует…

    Reply
  44. WellMaster

    (44) jo0506,

    кстати, да.

    Скачал, запустил — не работает.

    Прочитал коммент, поставил время окончания — запустилась.

    Reply
  45. fixin

    Скачал сегодня в надежде, что за ночь отработает.

    Ибо обычное восстановление вылетает по ошибке «Конфликт блокировок» и не делает повторных попыток.

    Посмотрим, если эта софтина отработает до утра, то большое человеческое спасибо.

    Reply
  46. WWWolfy

    Если не установить дату «Завершить выполнение обработки после», то берёт дефолтное «мДатаЗавершения = Дата(1, 1, 1, 0, 0, 0)»

    и всегда срабатывает условие:

    Если ТекущаяДата() >= ДатаЗавершенияВосстановления Тогда

    т.е. сразу выходит из проведения.

    Косячок..

    исправить можно так:

    дефолтДата = Дата(1, 1, 1, 0, 0, 0);
    
    // ■ Восстановление последовательностей
    // ■ периодами укаазанными шагом восстановления (в секундах)
    Пока ВосстанавливатьПоследовательность Цикл
    
    Если ТекущаяДата() >= ДатаЗавершенияВосстановления И (ДатаЗавершенияВосстановления<>дефолтДата) Тогда
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *