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

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

Реквизит УПД можно
1. получить напрямую от ссылки.
2. получить сразу в запросе.
24 fisher
 
03.06.21
10:55
(6) Очень странно. Убери тавтологию "ASP_ПроведениеТребованиеСклад.СсылкаТребование.Ссылка". У тебя же ASP_ПроведениеТребованиеСклад.СсылкаТребование и так ссылка, то есть обращение через точку к реквизиту "Ссылка" - лишнее. Не понимаю, как это может влиять, но вдруг. Хотя бы глаз резать не будет :)
Больше всего на права похоже. Но каким образом они могут быть порезаны для регламента - не понимаю.
25 Vlaloplo
 
03.06.21
10:58
(23) Ну уж ругаться на одну переменную думаю, не стоит)
не совсем понял про 2 пункт, как я получу объект в запросе? не слышал про такие методы
26 Вафель
 
03.06.21
10:58
в модуле есть клиентские функции скорее всего для толстого клиента.
их надо тегами оформить
27 Василий Алибабаевич
 
03.06.21
10:58
(21) Отладка бывает еще такой ;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  Док = ВыборкаДетальныеЗаписи.СсылкаТребование;
  Если ЗначениеЗаполнено(Док) Тогда
    Документ = Док.ПолучитьОБъект();
    Реквизит = Документ.УПД;
  Иначе
    Сообщить("Как то так сложилось что в " + СсылкаТребование + " нифига нет.");
    Продолжить;
  КонецЕсли;
28 Vlaloplo
 
03.06.21
10:59
(24), да спасибо) Не заметил, убрал лишнее обращение)
29 Vlaloplo
 
03.06.21
10:59
(27) Да заполнена ссылка, проверял я её отладкой
30 lodger
 
03.06.21
11:00
(27) только не
    Сообщить("Как то так сложилось что в " + СсылкаТребование + " нифига нет.");
а
    ЗаписьЖурналаРегистрации(
    НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()),
    УровеньЖурналаРегистрации.Примечание, , , НСтр("ru = 'Как то так сложилось что в " + СсылкаТребование + " нифига нет.'"));
31 Василий Алибабаевич
 
03.06.21
11:01
(25) Например так
"ВЫБРАТЬ
|    ASP_ПроведениеТребованиеСклад.СсылкаТребование.Ссылка КАК СсылкаТребование,
|    ASP_ПроведениеТребованиеСклад.СсылкаСчетФактура КАК СсылкаСчет,
|    //Вотъ оно:
|    ASP_ПроведениеТребованиеСклад.СсылкаТребование.УПД КАК УПД
|    //
|ИЗ
|    РегистрСведений.ASP_ПроведениеТребованиеСклад КАК ASP_ПроведениеТребованиеСклад";
32 fisher
 
03.06.21
11:03
(28) Кстати, походу lodger прав. ИМХО, должно было бы записать в ЖР ошибку при компиляции, но вполне и так могло быть.
33 fisher
 
03.06.21
11:04
(19) Компиляция модулей в 1С "ленивая" - выполняется при первом обращении к модулю.
34 fisher
 
03.06.21
11:06
Можно в конфигураторе запустить синтаксическую проверку серверных модулей. И 1С по-идее должна рассказать все что ей в этом модуле не по нраву.
35 wertyu
 
03.06.21
11:07
(29) тогда у тебя (16)
36 fisher
 
03.06.21
11:08
Конфигурация - проверка конфигурации - синтаксический контроль модулей - галка на "Сервер"
37 fisher
 
03.06.21
11:10
Хотя не. Гоню. Не могло в этом случае писать ошибку "метод не обнаружен".
38 Вафель
 
03.06.21
11:13
можено тег поставить Если Сервер Тогда на весь модуль и сразу видно будет
39 Вафель
 
03.06.21
11:14
А еще могут подписки быть в модулях без сервера
40 fisher
 
03.06.21
11:16
Тогда была бы "ошибка при выполнении метода" или как там. Но не "метод объекта не обнаружен".
41 lodger
 
03.06.21
11:16
(37) так это тебе человек пересказал, а не скриншот ошибки. делаем поправки и допуски.
42 Vlaloplo
 
03.06.21
11:19
Крч разобрался
ПолучитьОбъект() серверный метод, при получении он обходил весь модуль объекта документа и натыкался на предупреждение, которое выполнялось на клиенте
В модуле объекта добавил условие #Если НаКлиенте Тогда .."Выполняем клиентский метод"
Все заработало без ошибок. Всем спасибо за хорошее обсуждение

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

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