Имя: Пароль:
1C
1С v8
При запуске фонового задания не срабатывает ".СоздатьДокумент()"
0 Natulea27
 
21.04.15
08:46
здраствуйте. Помогите пожалуйста. Есть фоновое задание, которое запускает обработку которая перекачивает из базы персонала в базу по зарплате все данные. Если я запускаю обработку вручную все работает, а ечли в фоновом режиме документы "Начисление отпускных" не закачивают. запустила отладку для фоновых заданий и обнаружила что в фовом режиме для документа "начисление отпускных" отладчик выбивает при вызове метода "СоздатьДокумент()". Помогите пожалуйста разобраться в чем дело?
1 alexei366
 
21.04.15
09:27
(0) Красавица, ты хоть опиши какую ошибку тебе выдает, какое её описание?
2 Natulea27
 
21.04.15
15:07
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    НачислениеОтпускаРаботникамОрганизаций.Ссылка КАК НачислениеОтпуска
                   |ИЗ
                   |    Документ.НачислениеОтпускаРаботникамОрганизаций КАК НачислениеОтпускаРаботникамОрганизаций
                   |ГДЕ
                   |    НачислениеОтпускаРаботникамОрганизаций.докУвольнения.Ссылка = &докУвольнения
                   |И   НачислениеОтпускаРаботникамОрганизаций.ВидРасчетаКомпенсацияОтпуска = &ВидРасчета";
    Запрос.УстановитьПараметр("докУвольнения", докУвольнения.Ссылка);
    Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.НайтиПоКоду(7));
    резЗапроса = Запрос.Выполнить().Выгрузить();
    Если резЗапроса.Количество() = 0 Тогда
        
        
        Возврат Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
    Иначе
        Возврат резЗапроса[0].НачислениеОтпуска.ПолучитьОбъект();
    КонецЕсли;

На строке окументы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДоку отладчик зависает и не заканчивает процедудуру, а выбивает......в ручном режиме обработка отрабатывает хорошо
3 Natulea27
 
21.04.15
15:08
Ошибку никаю не выдает просто не отрабатывает создатьДокумент
4 D_E_S_131
 
21.04.15
16:49
(3) Сделайте там следующее:

Попытка
   ДокОбъект = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
Исключение
   СтрОшибки = ОписаниеОшибки();
   ЗаписьЖурналаРегистрации("ФонЗадание",
        УровеньЖурналаРегистрации.Ошибка,,, СтрОшибки);
КонецПопытки;


Потом смотрите результат в ЖР.
5 piter3
 
21.04.15
16:53
что это за реквизит докУвольнения?ваши дописки?
6 piter3
 
21.04.15
16:55
гм а пол-ля,который запускает задание права-то есть?
7 DrShad
 
21.04.15
16:55
резЗапроса = Запрос.Выполнить();
    Если резЗапроса.Пустой() Тогда

и это переделать
8 D_E_S_131
 
21.04.15
16:57
(7) Тогда уж и в текст запроса добавить "ВЫБРАТЬ ПЕРВЫЕ 1".
9 Natulea27
 
21.04.15
17:37
Функция ПолучитьДокНачислениеНеиспОтпуска (докУвольнения)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    НачислениеОтпускаРаботникамОрганизаций.Ссылка КАК НачислениеОтпуска
                   |ИЗ
                   |    Документ.НачислениеОтпускаРаботникамОрганизаций КАК НачислениеОтпускаРаботникамОрганизаций
                   |ГДЕ
                   |    НачислениеОтпускаРаботникамОрганизаций.докУвольнения.Ссылка = &докУвольнения
                   |И   НачислениеОтпускаРаботникамОрганизаций.ВидРасчетаКомпенсацияОтпуска = &ВидРасчета";
    Запрос.УстановитьПараметр("докУвольнения", докУвольнения.Ссылка);
    Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.НайтиПоКоду(7));
    резЗапроса = Запрос.Выполнить().Выгрузить();
    Если резЗапроса.Количество() = 0 Тогда
        Попытка
          Возврат Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
        Исключение
           ИнфоОбОшибке = ОписаниеОшибки();
          ИнформацияОСобытии = ""+ИнфоОбОшибке.Описание+" в строке ("+ИнфоОбОшибке.НомерСтроки+"): """+
                            СокрЛП (ИнфоОбОшибке.ИсходнаяСтрока)+""" в модуле: "+ИнфоОбОшибке.ИмяМодуля;
           ЗаписьВРегистрСобытийЗагрузкиИзПерсонала (Перечисления.ТипыСобытий.Ошибка, Перечисления.ТипыСобытийЗагрузки.ЗагрузкаОбъекта,
                                                  ИнформацияОСобытии, , );
         КонецПопытки;    
    
        
    Иначе
        Возврат резЗапроса[0].НачислениеОтпуска.ПолучитьОбъект();
    КонецЕсли;
        
КонецФункции
10 Natulea27
 
21.04.15
17:39
вы понимаете не доходит он до "Исключение", а просто вылетает и ошибку ек выдает не входит в исключение
11 D_E_S_131
 
21.04.15
17:40
ИМХО не надо делать "Возврат" в "Попытке". Просто получи новый объект, а уже при успешном получении возвращай его.
12 Natulea27
 
21.04.15
17:54
переделала, но все равно доходит до  
докОтпуск=  Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();  и выходит ипроцедура
13 Natulea27
 
21.04.15
17:54
в ручном режиме все отлтчно, может прав каких-то не хватает?
14 dauster
 
21.04.15
18:00
(13) имхо, тут либо права, либо система не может нормально скомпилировать модуль документа (возможно, добавлено что-то, использующее глобальные переменные, не инициализированные для РЗ).
15 Natulea27
 
21.04.15
18:03
дело в том что так жке закачиваються и другие доки, приказы о приеме и увольнее, кадровые перемещения....А этот документ меня просто достал....С правами не знаю где уже искатьб права вроде как и у остальных документах
16 dauster
 
21.04.15
18:06
(15) модуль документа типовой? ничего не добавлено в область инициализации переменных модуля?
17 Natulea27
 
21.04.15
18:13
да типовой
18 dauster
 
21.04.15
18:17
(17) значит права проверьте, можно программно вилку сделать.

Если НЕ ПравоДоступа("Добавление", Метаданные.Документы.НачислениеОтпускаРаботникамОрганизаций) Тогда

  ЗаписьЖурналаРегистрации(...);

Иначе
... СоздатьДокумент();
КонецЕсли;
Основная теорема систематики: Новые системы плодят новые проблемы.