| 
    
        
     
     | 
    
  | 
ПолучитьОБъект() В фоновом задании отрабатывает с ошибкой | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        В итоге перенос в регламенты вообще всегда без проблем, так как серверный код и так всегда явно прописывается.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |