|   |   | 
| 
 | Выполнение запросов в расширении | ☑ | ||
|---|---|---|---|---|
| 0
    
        mremin 24.05.18✎ 15:09 | 
        Всем доброго времени суток!
 В типовую УТ 11 добавил расширение, а в расширение - http-сервис. Опубликовал на IIS, все работает. Проблема в том, что при попытке выполнить любой запрос появляется ошибка. Пробовал создавать (в расширении) общий модуль и переносил запрос туда, но ничего не изменилось. Запрос писал к справочнику Склады. В итоге, добавив этот справочник в расширение, удалось выбрать элементы обычной выборкой (Справочники.Скалады.Выбрать()), но не удается получить код, только наименование. Вопрос заключается в том какие есть варианты выполнения полноценных запросов к справочникам/регистрам и т.д. внутри расширения? Спасибо. | |||
| 1
    
        Волшебник 24.05.18✎ 15:09 | 
        какая ошибка?     | |||
| 2
    
        Жан Пердежон 24.05.18✎ 15:15 | 
        (1) так слишком просто будет     | |||
| 3
    
        mremin 24.05.18✎ 15:17 | 
        (1) Поместил команду выполнения запроса в Попытка ... Исключение. Выяснилось, что ошибка возникает на этом этапе:
 Пока Выборка.Следующий() Цикл Текст ошибки: Значение не является значением объектного типа (Следующий) Попробую под отладчиком посмотреть... | |||
| 4
    
        mehfk 24.05.18✎ 15:19 | 
        Стаж: 12 лет 3 месяца 23 дня     | |||
| 5
    
        mremin 24.05.18✎ 15:20 | 
        (4) это к чему? с запросами как таковыми проблем нет. А в расширении возникла непонятная сложность.     | |||
| 6
    
        mehfk 24.05.18✎ 15:21 | 
        Спорим, что дело не в расширении.     | |||
| 7
    
        mehfk 24.05.18✎ 15:21 | 
        ?     | |||
| 8
    
        Фрэнки 24.05.18✎ 15:21 | 
        (5) а как удалось текст запроса составить? 
 наверняка же, что вы это сделали без использования расширения | |||
| 9
    
        mremin 24.05.18✎ 15:22 | 
        (6) я пока не знаю в чем причина. Запрос элементарный:
 ЗапросСклады = Новый Запрос; ЗапросСклады.Текст = "ВЫБРАТЬ | Склады.Код КАК Код, | Склады.Наименование КАК Наименование |ИЗ | Справочник.Склады КАК Склады |ГДЕ | НЕ Склады.ПометкаУдаления"; | |||
| 10
    
        mremin 24.05.18✎ 15:24 | 
        (8) после добавления в расширение справочника Склады он появляется в конструкторе запросов. Нор запрос был написан до того, как справочник был добавлен в расширение. Сейчас попробую снова.     | |||
| 11
    
        mehfk 24.05.18✎ 15:24 | 
        Покажи весь код.     | |||
| 12
    
        mremin 24.05.18✎ 15:26 | 
        (8) сделал запрос заново (конструктором) из расширения, ничего не изменилось.     | |||
| 13
    
        mremin 24.05.18✎ 15:27 | 
        (11)
 Функция ПолучитьМассивСтруктурСкладов() Экспорт МассивСкладов = Новый Массив; ЗапросСклады = Новый Запрос; ЗапросСклады.Текст = "ВЫБРАТЬ | Склады.Код КАК Код, | Склады.Наименование КАК Наименование |ИЗ | Справочник.Склады КАК Склады |ГДЕ | НЕ Склады.ПометкаУдаления"; Попытка Выборка = ЗапросСклады.Выполнить().Выбрать(); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки()); КонецПопытки; Пока Выборка.Следующий() Цикл МассивСкладов.Добавить(Новый Структура("title, id", СокрЛП(Выборка.Наименование), СокрЛП(Выборка.Код))); КонецЦикла; Возврат МассивСкладов; КонецФункции | |||
| 14
    
        mehfk 24.05.18✎ 15:28 | 
        Ну вот, все понятно.
 Попытка Выборка = ЗапросСклады.Выполнить().Выбрать(); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки()); Возврат; КонецПопытки; | |||
| 15
    
        mremin 24.05.18✎ 15:29 | 
        (14) что именно?     | |||
| 16
    
        Фрэнки 24.05.18✎ 15:30 | 
        если конструктор срабатывает нормально, то нужно смотреть так называемый контекст модуля - что это за модуль, как объявлен и т.д...
 делаешь через массив, значит этот контекст подразумевается, как на сервере без контекста. Странно, почему запрос по такому справочнику не работает? | |||
| 17
    
        mehfk 24.05.18✎ 15:31 | 
        Некорректо отрабатываешь исключительные ситуации.     | |||
| 18
    
        mehfk 24.05.18✎ 15:31 | 
        Сравни свой код и мой и узри, что я добавил.     | |||
| 19
    
        Фрэнки 24.05.18✎ 15:31 | 
        (15) исключение было, но возврата из процедуры не было     | |||
| 20
    
        mremin 24.05.18✎ 15:32 | 
        (16) Массив был выбран просто в качестве примера. Данная функция находится в общем модуле (внутри расширения) с флагом "Вызов сервера".     | |||
| 21
    
        mremin 24.05.18✎ 15:32 | 
        (19) да, тут вы правы. Значит, не работает сам запрос, но это не меняет сути дела.     | |||
| 22
    
        mehfk 24.05.18✎ 15:33 | 
        Точнее, так, это же функция.
 Попытка Выборка = ЗапросСклады.Выполнить().Выбрать(); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; | |||
| 23
    
        mremin 24.05.18✎ 15:33 | 
        (18) я видел (Возврат)     | |||
| 24
    
        mehfk 24.05.18✎ 15:33 | 
        (21) Меняет. Суть вопроса меняется в корне.     | |||
| 25
    
        mehfk 24.05.18✎ 15:34 | 
        Убирай попытку и показывай настоящее сообщение об ошибке.     | |||
| 26
    
        mremin 24.05.18✎ 15:34 | 
        (21) Это не так. Вопрос был такой: почему не работает запрос?
 Я убрал Попытка...Исключение... Ошибка такая: Ошибка при вызове метода контекста (Выполнить) то есть в момент выполнения самого запроса. | |||
| 27
    
        Жан Пердежон 24.05.18✎ 15:35 | 
        (12) 
 >> стаж 12 лет; стыдно должно быть, товарищ | |||
| 28
    
        mehfk 24.05.18✎ 15:35 | 
        (26) Полный текст ошибки.     | |||
| 29
    
        mremin 24.05.18✎ 15:36 | 
        (27) Возможно, но причину пока все равно не вижу.     | |||
| 30
    
        mremin 24.05.18✎ 15:36 | 
        (28) {Расширение ОбщийМодуль.Расш_ОбщийМодуль.Модуль(26)}: Ошибка при вызове метода контекста (Выполнить)     | |||
| 31
    
        Фрэнки 24.05.18✎ 15:38 | 
        (30) а если явным образом перед функцией указать &НаСервере ?     | |||
| 32
    
        jsmith82 24.05.18✎ 15:38 | 
        (30) Корифеи посрамлены     | |||
| 33
    
        mremin 24.05.18✎ 15:39 | 
        (27) Опиши причину, если ты ее видишь. Тогда, возможно, будет стыдно.     | |||
| 34
    
        mremin 24.05.18✎ 15:39 | 
        (31) это было сделано в самом начале.     | |||
| 35
    
        mehfk 24.05.18✎ 15:40 | 
        (30) А слов "По причине" в тексте ошибки нет?     | |||
| 36
    
        jsmith82 24.05.18✎ 15:41 | 
        Безопасный режим отключен?     | |||
| 37
    
        Жан Пердежон 24.05.18✎ 15:43 | 
        у автора просили текст ошибки еще в (1) - он кинул текст совсем другой ошибки; не удивлюсь, если сейчас окажется, что он не перезашёл в базу после обновления расширения или проигнорил сообщения безапосности.     | |||
| 38
    
        mremin 24.05.18✎ 15:43 | 
        (37 что за глупости?     | |||
| 39
    
        mremin 24.05.18✎ 15:44 | 
        (35) я написал полный текст ошибки, полнее он уже не станет. Вижу, что Миста за прошедшие годы нисколько не изменилась: по делу мало кто отвечает, в основном троллят.
 Буду сам решать проблему. Всем спасибо за участие. | |||
| 40
    
        jsmith82 24.05.18✎ 15:45 | 
        (39) Оставайся. Может быть ценная недокументированная инфа.     | |||
| 41
    
        mehfk 24.05.18✎ 15:45 | 
        (39) Решай, за 12 с лихуем лет уже пора научиться программировать.     | |||
| 42
    
        jsmith82 24.05.18✎ 15:50 | 
        1. Проверить код во внешней обработке
 2. Максимально разложить код РезультатЗапроса = Запрос.Выполнить() - что тут? И т.д. 3. Отключить безопасный режим, если стоит | |||
| 43
    
        jsmith82 24.05.18✎ 15:51 | 
        4. Попробовать на другой платформе
 Потом можно строчить гневные письма | |||
| 44
    
        jsmith82 24.05.18✎ 15:51 | 
        Ну и про кэш забыл     | |||
| 45
    
        RKx 24.05.18✎ 15:55 | 
        (0) Реструктуризация иб иногда помогает, когда с расширением проблема.     | |||
| 46
    
        AlvlSpb naïve 24.05.18✎ 16:27 | 
        (0) Внутри расширения запрос отрабатывает как и в обычной конфигурации. Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура. 
 Ваша ошибка, скорей всего, в отсутствии вызова сервера. Т.е. попытка выполнить запрос не на сервере. Читал что галка установлена, но все-равно, что-то именно в этом. Где-то не хватает &НаСервере | |||
| 47
    
        Aleksandr N 24.05.18✎ 16:46 | 
        (46) — Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура.
 Я бы не был столь категоричным. Поведение платформы очень чувствительно к ее версии. | |||
| 48
    
        AlvlSpb naïve 24.05.18✎ 16:54 | 
        (47) Буду категоричен, т.к. расширений написано немерено. Открываю новую внешнюю обработку, делаю в ней запрос и переношу его в расширение, ничего из объектов запроса не переношу в расширение. Сбоев не было с 8.3.8 и по сей день     | |||
| 49
    
        mehfk 24.05.18✎ 17:13 | 
        (46) &НаСервере не имеет смысла вне модуля формы.
 Код в модуле http-сервиса выполняется на сервере. | |||
| 50
    
        Сияющий в темноте 24.05.18✎ 19:27 | 
        Контроля доступа на уровне записей точно нет?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |