|
Выполнение запросов в расширении | ☑ | ||
---|---|---|---|---|
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
24.05.18
✎
16:27
|
(0) Внутри расширения запрос отрабатывает как и в обычной конфигурации. Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура.
Ваша ошибка, скорей всего, в отсутствии вызова сервера. Т.е. попытка выполнить запрос не на сервере. Читал что галка установлена, но все-равно, что-то именно в этом. Где-то не хватает &НаСервере |
|||
47
Aleksandr N
24.05.18
✎
16:46
|
(46) — Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура.
Я бы не был столь категоричным. Поведение платформы очень чувствительно к ее версии. |
|||
48
AlvlSpb
24.05.18
✎
16:54
|
(47) Буду категоричен, т.к. расширений написано немерено. Открываю новую внешнюю обработку, делаю в ней запрос и переношу его в расширение, ничего из объектов запроса не переношу в расширение. Сбоев не было с 8.3.8 и по сей день
|
|||
49
mehfk
24.05.18
✎
17:13
|
(46) &НаСервере не имеет смысла вне модуля формы.
Код в модуле http-сервиса выполняется на сервере. |
|||
50
Сияющий в темноте
24.05.18
✎
19:27
|
Контроля доступа на уровне записей точно нет?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |