Вход | Регистрация
 

ПолучитьОБъект() В фоновом задании отрабатывает с ошибкой

ПолучитьОБъект() В фоновом задании отрабатывает с ошибкой
Я
   Vlaloplo
 
03.06.21 - 10:19
Всем привет, сразу к делу, есть регламентное задание, которое запускается каждые 180 сек, ищет определенный документ в регистре и если находит, то записывает его. Все кажется просто
Код:
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ASP_ПроведениеТребованиеСклад.СсылкаТребование.Ссылка КАК СсылкаТребование,
        |    ASP_ПроведениеТребованиеСклад.СсылкаСчетФактура КАК СсылкаСчет
        |ИЗ
        |    РегистрСведений.ASP_ПроведениеТребованиеСклад КАК ASP_ПроведениеТребованиеСклад";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Док = ВыборкаДетальныеЗаписи.СсылкаТребование;
        Документ = Док.ПолучитьОБъект();
        Реквизит = Документ.УПД;

Но на строке, где получаю объект, пишется ошибка в журнал регистрации, что метот объекта не обнаружен. Такая же конструкция вне регламентного срабатывает..
Обычные формы, свойства общего модуля - Сервер, клиент (обычное приложение)
 
 Партнерская программа EFSOL Oblako
   Vlaloplo
 
1 - 03.06.21 - 10:20
Прошу прощения, Метод*
   Vlaloplo
 
2 - 03.06.21 - 10:21
Галка Вызов сервера установлена
   RomanYS
 
3 - 03.06.21 - 10:23
битые ссылки?
   Vlaloplo
 
4 - 03.06.21 - 10:25
(3), нет ссылка нормальная
   fisher
 
5 - 03.06.21 - 10:26
Ошибка воспроизводится? На повторном запуске регламента падает там же?
   Vlaloplo
 
6 - 03.06.21 - 10:28
(5) Да
   RomanYS
 
7 - 03.06.21 - 10:34
(6) может права? Попробуй привилегированный режим включить
   Ногаминебить
 
8 - 03.06.21 - 10:35
На первом же шаге рушится?
На одной и той же строке регистра падает?
   Vlaloplo
 
9 - 03.06.21 - 10:36
(7) Под полными правами делаю
Да и как права могут связанны с методом получитьОбъект()?
   Vlaloplo
 
10 - 03.06.21 - 10:37
(8) В регистре всегда только одна строка, после того, как регламентое выполнится (сейчас не выполняется), записи из регистра удаляются
   Vlaloplo
 
11 - 03.06.21 - 10:38
Пробовал вручную удалять запись из регистра и добавлять туда другие ссылки, все равно нет, проверил теорию (3) )
   Vlaloplo
 
12 - 03.06.21 - 10:39
Есть предположение, что общий модуль не глобальный, может из за этого быть?
Но я пробовал переносить процедуру в глобальный модуль, её почему то не могу указать в имени метода для регламентного..
   Ногаминебить
 
13 - 03.06.21 - 10:41
В порядке бреда. Выполнить().Выгрузить() и перебирать тз потом.
   Галахад
 
14 - 03.06.21 - 10:42
А отладка что показывает?
   Vlaloplo
 
15 - 03.06.21 - 10:45
(13) Не совсем понял, при чем тут порядок? В результате запросе я получаю только две ссылки из одного регистра
   piter3
 
16 - 03.06.21 - 10:47
скопируй из доки ПолучитьОБъект,может там буква не та
   Ногаминебить
 
17 - 03.06.21 - 10:47
(15) В смысле бредовое предположение, но мало ли. :) А вообще отладку конечно смотреть и все ясно станет скорее всего.
   lodger
 
18 - 03.06.21 - 10:49
Вангую, что в общем модуле документа "СсылкаТребование" есть вызовы методов\модулей недоступных на сервере. он на ПолучитьОБъект() комплит модуль и выпадает с ошибкой.
   RomanYS
 
19 - 03.06.21 - 10:52
(18) если бы ошибка компиляции была до выполнения кода бы не дошло
   Vlaloplo
 
20 - 03.06.21 - 10:53
В модуле объекта "СсылкаТребование" есть клиентские методы, например предупреждение, но это в обработке проведения, а я до неё не дохожу, останавливаюсь на получение объекта
   Vlaloplo
 
21 - 03.06.21 - 10:53
(17), да вот отладкой понять как раз и не мог, поэтому решил у спецов спросить) Может кто сталкивался
   lodger
 
22 - 03.06.21 - 10:54
(20) а это совершенно не важно. обрами эти эти методы #Если Клиент Тогда #Конец
   Василий Алибабаевич
 
23 - 03.06.21 - 10:54
(0) Зачем вот это все ?:
"
Док = ВыборкаДетальныеЗаписи.СсылкаТребование;
Документ = Док.ПолучитьОБъект();
Реквизит = Документ.УПД;
"

Реквизит УПД можно
1. получить напрямую от ссылки.
2. получить сразу в запросе.
   fisher
 
24 - 03.06.21 - 10:55
(6) Очень странно. Убери тавтологию "ASP_ПроведениеТребованиеСклад.СсылкаТребование.Ссылка". У тебя же ASP_ПроведениеТребованиеСклад.СсылкаТребование и так ссылка, то есть обращение через точку к реквизиту "Ссылка" - лишнее. Не понимаю, как это может влиять, но вдруг. Хотя бы глаз резать не будет :)
Больше всего на права похоже. Но каким образом они могут быть порезаны для регламента - не понимаю.
   Vlaloplo
 
25 - 03.06.21 - 10:58
(23) Ну уж ругаться на одну переменную думаю, не стоит)
не совсем понял про 2 пункт, как я получу объект в запросе? не слышал про такие методы
   Вафель
 
26 - 03.06.21 - 10:58
в модуле есть клиентские функции скорее всего для толстого клиента.
их надо тегами оформить
   Василий Алибабаевич
 
27 - 03.06.21 - 10:58
(21) Отладка бывает еще такой ;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  Док = ВыборкаДетальныеЗаписи.СсылкаТребование;
  Если ЗначениеЗаполнено(Док) Тогда
    Документ = Док.ПолучитьОБъект();
    Реквизит = Документ.УПД;
  Иначе
    Сообщить("Как то так сложилось что в " + СсылкаТребование + " нифига нет.");
    Продолжить;
  КонецЕсли;
   Vlaloplo
 
28 - 03.06.21 - 10:59
(24), да спасибо) Не заметил, убрал лишнее обращение)
   Vlaloplo
 
29 - 03.06.21 - 10:59
(27) Да заполнена ссылка, проверял я её отладкой
   lodger
 
30 - 03.06.21 - 11:00
(27) только не 
    Сообщить("Как то так сложилось что в " + СсылкаТребование + " нифига нет.");
а
    ЗаписьЖурналаРегистрации(
    НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()),
    УровеньЖурналаРегистрации.Примечание, , , НСтр("ru = 'Как то так сложилось что в " + СсылкаТребование + " нифига нет.'"));
 
 
   Василий Алибабаевич
 
31 - 03.06.21 - 11:01
(25) Например так
"ВЫБРАТЬ
|    ASP_ПроведениеТребованиеСклад.СсылкаТребование.Ссылка КАК СсылкаТребование,
|    ASP_ПроведениеТребованиеСклад.СсылкаСчетФактура КАК СсылкаСчет,
|    //Вотъ оно:

|    ASP_ПроведениеТребованиеСклад.СсылкаТребование.УПД КАК УПД
|    //

|ИЗ
|    РегистрСведений.ASP_ПроведениеТребованиеСклад КАК ASP_ПроведениеТребованиеСклад";
   fisher
 
32 - 03.06.21 - 11:03
(28) Кстати, походу lodger прав. ИМХО, должно было бы записать в ЖР ошибку при компиляции, но вполне и так могло быть.
   fisher
 
33 - 03.06.21 - 11:04
(19) Компиляция модулей в 1С "ленивая" - выполняется при первом обращении к модулю.
   fisher
 
34 - 03.06.21 - 11:06
Можно в конфигураторе запустить синтаксическую проверку серверных модулей. И 1С по-идее должна рассказать все что ей в этом модуле не по нраву.
   wertyu
 
35 - 03.06.21 - 11:07
(29) тогда у тебя (16)
   fisher
 
36 - 03.06.21 - 11:08
Конфигурация - проверка конфигурации - синтаксический контроль модулей - галка на "Сервер"
   fisher
 
37 - 03.06.21 - 11:10
Хотя не. Гоню. Не могло в этом случае писать ошибку "метод не обнаружен".
   Вафель
 
38 - 03.06.21 - 11:13
можено тег поставить Если Сервер Тогда на весь модуль и сразу видно будет
   Вафель
 
39 - 03.06.21 - 11:14
А еще могут подписки быть в модулях без сервера
   fisher
 
40 - 03.06.21 - 11:16
Тогда была бы "ошибка при выполнении метода" или как там. Но не "метод объекта не обнаружен".
   lodger
 
41 - 03.06.21 - 11:16
(37) так это тебе человек пересказал, а не скриншот ошибки. делаем поправки и допуски.
   Vlaloplo
 
42 - 03.06.21 - 11:19
Крч разобрался 
ПолучитьОбъект() серверный метод, при получении он обходил весь модуль объекта документа и натыкался на предупреждение, которое выполнялось на клиенте
В модуле объекта добавил условие #Если НаКлиенте Тогда .."Выполняем клиентский метод"

Все заработало без ошибок. Всем спасибо за хорошее обсуждение 

Так что (18) Был прав, я просто не знал, что при получении объекта он обходит все методы
   ДенисЧ
 
43 - 03.06.21 - 11:19
(37) Запросто мог.

(0) Сделай просто. Закомментируй ВЕСЬ модуль объекта и раскрывай по одной процедуре. Если уже проверку синтаксиса не хочешь делать...
   fisher
 
44 - 03.06.21 - 11:21
(43) Точно. Он же модуль не скомпилировал, а значит метод найти шансов не было :)
   fisher
 
45 - 03.06.21 - 11:22
(43) Тьфу. Это же платформенный метод. Тогда странно. Не знал, что так писать может в этом случае.
   fisher
 
46 - 03.06.21 - 11:24
Теоретически, если компиляция модуля объекта является частью инициализации всего класса объекта, тогда логично. Класс инициализироваться не смог, до его методов добраться не получается.
   ДенисЧ
 
47 - 03.06.21 - 11:28
У нас тут в одной конфе подобная ситуация есть...
ОФ. В модуле объявлена процедура (разумеется, без &Клиент-&Сервер). Проверку проходит.
А одно фоновое задание постоянно ругается... Вот освобожусь - буду разбираться...
   fisher
 
48 - 03.06.21 - 11:30
Насколько же шелковистее в этом плане стало при УФ.
Там модуля объектов всегда только сервер и проведение привилегированное. Красота.
   fisher
 
49 - 03.06.21 - 11:32
В итоге перенос в регламенты вообще всегда без проблем, так как серверный код и так всегда явно прописывается.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.