Имя: Пароль:
1C
1С v8
v8: Периодически не выполняется регламентное задание
, ,
0 Lancer666
 
11.12.13
07:19
Здравствуйте, подскажите, пожалуйста, есть регламентное задание, запускаемое раз в сутки, проблема в том, что переодически оно не выполняется, при этом если открыть его в консоли заданий, затем просто нажать ОК, оно немедленно выполнится. Непонятно, что иногда мешает ему выполняться. Само регламентное задание собирает помеченные на удаление документы одного вида и удаляет их. Документы никуда движений не делают. В конфигураторе для регламентного задания  стоит флажок Использовать, для модуля, содержащего функцию, вызываемую регламентным заданием, стоят флажки: Сервер, Внешнее соединение, Клиент (Обычное приложение), Вызов сервера. Подскажите, в чем может быть проблема.
1 Wobland
 
11.12.13
07:25
а оно правда не выполняется?
2 Lancer666
 
11.12.13
07:40
(1) Помеченные на удаление документы, так и висят.
3 Wobland
 
11.12.13
07:41
(2) из этого делаем вывод, что у тебя документы не удаляются
4 Lancer666
 
11.12.13
07:47
(3) Да, но стоит только подпинуть регламентное задание (открыв в консоли и закрыв, нажав ОК), как тут же помеченные на удаление элементы исчезают, успешно удаленные.
5 Wobland
 
11.12.13
07:48
меня это не убеждает в том, что регзадание без пинка не выполняется
6 craxx
 
11.12.13
07:54
(0) журнал работы смотри там ошибка видать что-то клиентское пытаешься на сервере выполнить
7 Wobland
 
11.12.13
08:01
(6) есть волшебное слово "иногда". где-то в коде ГСЧ зарыт ;)
8 Lancer666
 
11.12.13
08:08
(6) Как же тогда оно время от времени выполняется, по настроению системы?
9 Lancer666
 
11.12.13
08:09
(7) ))) там такой простой код, что хоть убейся не запрячешь никаких рэндомов...
10 Wobland
 
11.12.13
08:11
ну доставай, показывай. потыкаем палочкой
11 Lancer666
 
11.12.13
08:16
Запрос=Новый Запрос();
    Запрос.Текст=
     "ВЫБРАТЬ
     |    ЗаявкаНаВводНоменклатуры.Ссылка
     |ИЗ
     |    Документ.ЗаявкаНаВводНоменклатуры КАК ЗаявкаНаВводНоменклатуры
     |ГДЕ
     |    ЗаявкаНаВводНоменклатуры.ПометкаУдаления
     |    И ЗаявкаНаВводНоменклатуры.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗаявки.Утвержден)";

    
    
     Выборка=Запрос.Выполнить().Выбрать();
    
    
     Пока Выборка.Следующий() Цикл
        Ссылка = Выборка.Ссылка;
        Объект = Ссылка.ПолучитьОбъект();        
        Объект.Удалить();
    КонецЦикла;
12 MiniMuk
 
11.12.13
09:04
что будет
      Объект = Ссылка.ПолучитьОбъект();        
когда документ открыт?
13 Lancer666
 
11.12.13
09:30
(12) Может ничего хорошего и не получится, но кто бы ночью открывал помеченный на удаление документ? Может поместить всё в Попытку Исключение, и в случае срабатывания исключения, помещать информацию в журнал регистрации, либо еще куда-то, может удасться что-то отловить...
14 Wobland
 
11.12.13
09:32
и ещё уведомление "оно стартовало!"
15 Lancer666
 
11.12.13
10:18
Хорошо, спасибо всем за помощь, о результатах отпишусь.
16 MiniMuk
 
11.12.13
13:56
(13) я бы две попытки включил, одну на выполнение запроса, вторую    

Пока Выборка.Следующий() Цикл
  попытка
   Ссылка = Выборка.Ссылка;
   Объект = Ссылка.ПолучитьОбъект();        
   Объект.Удалить();
  конецпопытки;
КонецЦикла;
[\1c]
17 Lancer666
 
15.12.13
22:51
Ну в общем поместил в процедуру регламентного задания конструкцию попытка исключение, несколько раз регламентное задание успешно выполнилось, о чем были записи в журнале изменений, затем один документ помеченный на удаление, не удалился и соответствующих записей даже о запуске регламентного задания в журнале регистраций на оказалось. Не понятно, как так происходит... Получается просто со временем регламентное задание перестает выполняться.
Текст процедуры регламентного задания выглядит следующим образом:
Процедура УдалениеПомеченныхЗаявокНаВводНоменклатуры() Экспорт
    
    
    ЗаписьЖурналаРегистрации("РегламентноеЗаданиеУдалениеПомеченныхОбъектов",УровеньЖурналаРегистрации.Информация,,,"Запуск регламентного задания");

    Попытка
        
        Запрос=Новый Запрос();
        Запрос.Текст=
        "ВЫБРАТЬ
        |    ЗаявкаНаВводНоменклатуры.Ссылка
        |ИЗ
        |    Документ.ЗаявкаНаВводНоменклатуры КАК ЗаявкаНаВводНоменклатуры
        |ГДЕ
        |    ЗаявкаНаВводНоменклатуры.ПометкаУдаления
        |    И ЗаявкаНаВводНоменклатуры.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗаявки.Утвержден)";
        
        
        
        Выборка=Запрос.Выполнить().Выбрать();
        
        
        Пока Выборка.Следующий() Цикл
            Ссылка = Выборка.Ссылка;
            Объект = Ссылка.ПолучитьОбъект();        
            Объект.Удалить();
        КонецЦикла;
        
        
    ЗаписьЖурналаРегистрации("РегламентноеЗаданиеУдалениеПомеченныхОбъектов",УровеньЖурналаРегистрации.Информация,,,"Выполнение успешно завершено");
    
    Исключение
        
    ЗаписьЖурналаРегистрации("РегламентноеЗаданиеУдалениеПомеченныхОбъектов",УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());
    
КонецПопытки;


КонецПроцедуры
18 hhhh
 
16.12.13
02:19
ну в процедурах при записи, перед записью какую-нибудь фигню пишете. Они же все вызываются. Попробуйте

          Ссылка = Выборка.Ссылка;
            Объект = Ссылка.ПолучитьОбъект();  
            Объект.ОбменДанными.Загрузка = Истина;      
            Объект.Удалить();
19 Анютик
 
16.12.13
02:23
может, выполняется какое-то другое задание, которое работает дольше положенного. А у этого в расписании стоит прекратить выполнение после определенного времени? Я бы туда еще заглянула
20 Анютик
 
16.12.13
02:23
например, быкап дольше делался. Или сервер предприятия перегружали.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс