Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с Регламентным заданием
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
DrLivsi
Всем привет!
Есть задача, автоматически снимать резервы на товары (документ ЗаказПокупателя), старше 14 дней.
1С 8.1, конфигурация "Управление торговым предприятием" дописанная
Добавил регламентное задание, задал рассписание, в общем модуле добавил процедуру которая будет отменять заказ:

Процедура СнятиеРезерва()

//запросом получаем список документов для отмены
Выборка = Запрос.Выполнить().Выбрать();

НачатьТранзакцию();
    
    Пока Выборка.Следующий() Цикл
                    
        Если Выборка.ДокументРезерва.Проведен Тогда
                ДокументРезерваОбъект = Выборка.ДокументРезерва.ПолучитьОбъект();
                
                //отменяем проведение документа
                ДокументРезерваОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

        КонецЕсли;     
                        
    КонецЦикла;
    
    ЗафиксироватьТранзакцию();
КонецПроцедуры


При выполнении регламентного задания вылетает ошибка:
Ошибка при вызове метода контекста (ПолучитьОбъект): При подписке на событие произошла ошибка. Метод обработчика события не найден.

Что не так? И зачем мне эта подписка?
DrLivsi
Что никто не сможет подсказать?
logist
Цитата(DrLivsi @ 22.05.12, 15:24) необходимо зарегистрироваться для просмотра ссылки
Что никто не сможет подсказать?

Ну а стать отладчиком и посмотреть чего там не хватает - никак? обязательно надо ждать гадалок? Ну давайте будем гадать, например у документа есть подписка на событие ПриОтменеПроведения, и проблема в этом событии.

p.s. и почему запросом сразу не выбрать только проведенные документы?
Ardi
Вообще то есть ОТДЕЛЬНЫЙ документ который отменяет резервы.
sava1
По всей видимости для ДокументРезерва создана подписка ПриЗаписи, а модуля нет - вот и орет
logist
Цитата(sava1 @ 22.05.12, 16:45) необходимо зарегистрироваться для просмотра ссылки
создана подписка ПриЗаписи

Там скорее создана подписка ПриОтменеПроведения, иначе он бы уже ругался на этапе записи, а тут пытаются отменить проведение.
sava1
Ну найти можно по-любому
DrLivsi
Цитата(logist @ 22.05.12, 15:53) необходимо зарегистрироваться для просмотра ссылки
Ну а стать отладчиком и посмотреть чего там не хватает - никак?

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

Цитата(logist @ 22.05.12, 15:53) необходимо зарегистрироваться для просмотра ссылки
обязательно надо ждать гадалок? Ну давайте будем гадать, например у документа есть подписка на событие ПриОтменеПроведения, и проблема в этом событии.

Есть только подписка "ПередЗаписьюДокументаДатаЗапретаРедактирования", где проверяется возможность записи, в зависимости от даты запрета редактирования. Только не пойму чем эта подписка мешает.
Vofka
Цитата(DrLivsi @ 22.05.12, 17:27) необходимо зарегистрироваться для просмотра ссылки
Есть только подписка "ПередЗаписьюДокументаДатаЗапретаРедактирования", где проверяется возможность записи, в зависимости от даты запрета редактирования. Только не пойму чем эта подписка мешает.

Если документ находится в закрытом период - то ничего сделать с ним без полных прав нельзя.
logist
Цитата(DrLivsi @ 22.05.12, 17:27) необходимо зарегистрироваться для просмотра ссылки
Отладить регламентное задание у меня не получилось...

Как это не получилось?

Поставить точку останова в "ДокументРезерваОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); " и смотреть куда дальше будет идти.
DrLivsi
Цитата(Vofka @ 22.05.12, 17:29) необходимо зарегистрироваться для просмотра ссылки
Если документ находится в закрытом период - то ничего сделать с ним без полных прав нельзя.


Если я не ошибаюсь, то регламентное задание порождает фоновое задание, которое выполняется по умолчанию от имени пользователя, у которого есть административные права. А если так, то дата запрета не должна же мешать отмене?
logist
Я вот что подумал, а свойство модуля в котором располагается задание имеет все необходимые флажки? Сервер, Клиент(обычное), и т.п.?

Ну и вот есть еще такое решение как почистить кэш у всех пользователей (C:\Documents and Settings\<Имя_пользователя>\Local Settings\Application Data\1C\1Cv81 )
Vofka
Цитата(DrLivsi @ 22.05.12, 18:19) необходимо зарегистрироваться для просмотра ссылки
А если так, то дата запрета не должна же мешать отмене?

Для чистоті єксперимента - убрать дату запрета редактировании (возможно на копии)
DrLivsi
Цитата(logist @ 22.05.12, 18:46) необходимо зарегистрироваться для просмотра ссылки
Я вот что подумал, а свойство модуля в котором располагается задание имеет все необходимые флажки? Сервер, Клиент(обычное), и т.п.?


Да, флажки стоят все.

Цитата(logist @ 22.05.12, 18:46) необходимо зарегистрироваться для просмотра ссылки
Ну и вот есть еще такое решение как почистить кэш у всех пользователей (C:\Documents and Settings\<Имя_пользователя>\Local Settings\Application Data\1C\1Cv81 )

Кэш почистил, результата нет.

Цитата(Vofka @ 22.05.12, 19:36) необходимо зарегистрироваться для просмотра ссылки
Для чистоті єксперимента - убрать дату запрета редактировании (возможно на копии)


Дату убрал, ошибка та же: При подписке на событие произошла ошибка.


Какие еще есть идеи?
logist
Цитата(DrLivsi @ 23.05.12, 22:43) необходимо зарегистрироваться для просмотра ссылки
Какие еще есть идеи?

Ну, таки, отладчиком пройтись. Иначе можно гадать бесконечно.
DrLivsi
Цитата(logist @ 24.05.12, 8:53) необходимо зарегистрироваться для просмотра ссылки
Ну, таки, отладчиком пройтись. Иначе можно гадать бесконечно.


Смотрел отладчиком, после строки ...ПолучитьОбъект(), выполняется код, который находится вне процедур в модуле документа.
Поместил этот код в #Если клиент тогда ... #КонецЕсли, и даже весь закомментировал, но ошибка не исчезла.
А в подписках не нашел события, которое вызывается методом ПолучитьОбъект().
DrLivsi
Разобрался! Если кому интересно:
Подписка на событие вызывала функцию из общего модуля, и в строке:
Источник.Ответственный = глТекущийПользователь;

возникала ошибка, т.к. переменная глТекущийПользователь = Неопределено. Добавив перед строкой определение переменной
глТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;

все заработало.
Правда что-бы до этого дойти, пришлось создавать тестовую базу на SQL.

Всем спасибо за помощь!
Vofka
Интересней, как же всё же нашли это место?
DrLivsi
Цитата(Vofka @ 31.05.12, 17:23) необходимо зарегистрироваться для просмотра ссылки
Интересней, как же всё же нашли это место?


Путем исключения.
Создал новую тестовую базу на SQL, убрал свой документ из всех подписок, запустил - работает. Дальше добавлял по-очереди в подписку и проверял нет ли ошибки, когда определил где ошибка, полез в обработчик и там уже добавил определение переменной глТекущийПользователь.

Правда одного не понял, почему код в обработчике выполняется если он находится в условии:
   Если Источник.ЭтоНовый() Тогда
     ....
      глТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;
     ....
    КонецЕсли;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.