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


1С:Предприятие :: 1С:Предприятие 8 общая

Выполнение запросов в расширении

Выполнение запросов в расширении
Я
   mremin
 
24.05.18 - 15:09
Всем доброго времени суток!
В типовую УТ 11 добавил расширение, а в расширение - http-сервис. Опубликовал на IIS, все работает. Проблема в том, что при попытке выполнить любой запрос появляется ошибка. Пробовал создавать (в расширении) общий модуль и переносил запрос туда, но ничего не изменилось.

Запрос писал к справочнику Склады.
В итоге, добавив этот справочник в расширение, удалось выбрать элементы обычной выборкой (Справочники.Скалады.Выбрать()), но не удается получить код, только наименование.

Вопрос заключается в том какие есть варианты выполнения полноценных запросов к справочникам/регистрам и т.д. внутри расширения?

Спасибо.
 
 
   Волшебник
 
1 - 24.05.18 - 15:09
какая ошибка?
   Жан Пердежон
 
2 - 24.05.18 - 15:15
(1) так слишком просто будет
   mremin
 
3 - 24.05.18 - 15:17
(1) Поместил команду выполнения запроса в Попытка ... Исключение. Выяснилось, что ошибка возникает на этом этапе:

Пока Выборка.Следующий() Цикл

Текст ошибки:
Значение не является значением объектного типа (Следующий)

Попробую под отладчиком посмотреть...
   mehfk
 
4 - 24.05.18 - 15:19
Стаж: 12 лет 3 месяца 23 дня
   mremin
 
5 - 24.05.18 - 15:20
(4) это к чему? с запросами как таковыми проблем нет. А в расширении возникла непонятная сложность.
   mehfk
 
6 - 24.05.18 - 15:21
Спорим, что дело не в расширении.
   mehfk
 
7 - 24.05.18 - 15:21
?
   Фрэнки
 
8 - 24.05.18 - 15:21
(5) а как удалось текст запроса составить?

наверняка же, что вы это сделали без использования расширения
   mremin
 
9 - 24.05.18 - 15:22
(6) я пока не знаю в чем причина. Запрос элементарный:

    ЗапросСклады = Новый Запрос;
    ЗапросСклады.Текст = 
    "ВЫБРАТЬ
    |    Склады.Код КАК Код,
    |    Склады.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Склады КАК Склады
    |ГДЕ
    |    НЕ Склады.ПометкаУдаления";
   mremin
 
10 - 24.05.18 - 15:24
(8) после добавления в расширение справочника Склады он появляется в конструкторе запросов. Нор запрос был написан до того, как справочник был добавлен в расширение. Сейчас попробую снова.
 
 Рекламное место пустует
   mehfk
 
11 - 24.05.18 - 15:24
Покажи весь код.
   mremin
 
12 - 24.05.18 - 15:26
(8) сделал запрос заново (конструктором) из расширения, ничего не изменилось.
   mremin
 
13 - 24.05.18 - 15:27
(11)

Функция ПолучитьМассивСтруктурСкладов() Экспорт
    
    МассивСкладов = Новый Массив;
    
    ЗапросСклады = Новый Запрос;
    ЗапросСклады.Текст = 
    
    "ВЫБРАТЬ
    |    Склады.Код КАК Код,
    |    Склады.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Склады КАК Склады
    |ГДЕ
    |    НЕ Склады.ПометкаУдаления";
    
    Попытка
        Выборка = ЗапросСклады.Выполнить().Выбрать();
    Исключение    
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
    КонецПопытки;
    
    Пока Выборка.Следующий() Цикл
        МассивСкладов.Добавить(Новый Структура("title, id", СокрЛП(Выборка.Наименование), СокрЛП(Выборка.Код)));
    КонецЦикла;    
    
    Возврат МассивСкладов;
    
КонецФункции
   mehfk
 
14 - 24.05.18 - 15:28
Ну вот, все понятно.

 Попытка
        Выборка = ЗапросСклады.Выполнить().Выбрать();
    Исключение    
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Возврат;
    КонецПопытки;
   mremin
 
15 - 24.05.18 - 15:29
(14) что именно?
   Фрэнки
 
16 - 24.05.18 - 15:30
если конструктор срабатывает нормально, то нужно смотреть так называемый контекст модуля - что это за модуль, как объявлен и т.д...

делаешь через массив, значит этот контекст подразумевается, как на сервере без контекста.
Странно, почему запрос по такому справочнику не работает?
   mehfk
 
17 - 24.05.18 - 15:31
Некорректо отрабатываешь исключительные ситуации.
   mehfk
 
18 - 24.05.18 - 15:31
Сравни свой код и мой и узри, что я добавил.
   Фрэнки
 
19 - 24.05.18 - 15:31
(15) исключение было, но возврата из процедуры не было
   mremin
 
20 - 24.05.18 - 15:32
(16) Массив был выбран просто в качестве примера. Данная функция находится в общем модуле (внутри расширения) с флагом "Вызов сервера".
   mremin
 
21 - 24.05.18 - 15:32
(19) да, тут вы правы. Значит, не работает сам запрос, но это не меняет сути дела.
   mehfk
 
22 - 24.05.18 - 15:33
Точнее, так, это же функция.
 Попытка
        Выборка = ЗапросСклады.Выполнить().Выбрать();
    Исключение    
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Возврат Неопределено;
    КонецПопытки;
   mremin
 
23 - 24.05.18 - 15:33
(18) я видел (Возврат)
   mehfk
 
24 - 24.05.18 - 15:33
(21) Меняет. Суть вопроса меняется в корне.
   mehfk
 
25 - 24.05.18 - 15:34
Убирай попытку и показывай настоящее сообщение об ошибке.
   mremin
 
26 - 24.05.18 - 15:34
(21) Это не так. Вопрос был такой: почему не работает запрос?

Я убрал Попытка...Исключение...
Ошибка такая:
Ошибка при вызове метода контекста (Выполнить)
то есть в момент выполнения самого запроса.
   Жан Пердежон
 
27 - 24.05.18 - 15:35
(12)
>> стаж 12 лет;
стыдно должно быть, товарищ
   mehfk
 
28 - 24.05.18 - 15:35
(26) Полный текст ошибки.
   mremin
 
29 - 24.05.18 - 15:36
(27) Возможно, но причину пока все равно не вижу.
   mremin
 
30 - 24.05.18 - 15:36
(28) {Расширение ОбщийМодуль.Расш_ОбщийМодуль.Модуль(26)}: Ошибка при вызове метода контекста (Выполнить)
   Фрэнки
 
31 - 24.05.18 - 15:38
(30) а если явным образом перед функцией указать &НаСервере ?
   jsmith82
 
32 - 24.05.18 - 15:38
(30) Корифеи посрамлены
   mremin
 
33 - 24.05.18 - 15:39
(27) Опиши причину, если ты ее видишь. Тогда, возможно, будет стыдно.
 
 
   mremin
 
34 - 24.05.18 - 15:39
(31) это было сделано в самом начале.
   mehfk
 
35 - 24.05.18 - 15:40
(30) А слов "По причине" в тексте ошибки нет?
   jsmith82
 
36 - 24.05.18 - 15:41
Безопасный режим отключен?
   Жан Пердежон
 
37 - 24.05.18 - 15:43
у автора просили текст ошибки еще в (1) - он кинул текст совсем другой ошибки; не удивлюсь, если сейчас окажется, что он не перезашёл в базу после обновления расширения или проигнорил сообщения безапосности.
   mremin
 
38 - 24.05.18 - 15:43
(37 что за глупости?
   mremin
 
39 - 24.05.18 - 15:44
(35) я написал полный текст ошибки, полнее он уже не станет. Вижу, что Миста за прошедшие годы нисколько не изменилась: по делу мало кто отвечает, в основном троллят.
Буду сам решать проблему. Всем спасибо за участие.
   jsmith82
 
40 - 24.05.18 - 15:45
(39) Оставайся. Может быть ценная недокументированная инфа.
   mehfk
 
41 - 24.05.18 - 15:45
(39) Решай, за 12 с лихуем лет уже пора научиться программировать.
   jsmith82
 
42 - 24.05.18 - 15:50
1. Проверить код во внешней обработке
2. Максимально разложить код
РезультатЗапроса = Запрос.Выполнить() - что тут?
И т.д.
3. Отключить безопасный режим, если стоит
   jsmith82
 
43 - 24.05.18 - 15:51
4. Попробовать на другой платформе
Потом можно строчить гневные письма
   jsmith82
 
44 - 24.05.18 - 15:51
Ну и про кэш забыл
   RKx
 
45 - 24.05.18 - 15:55
(0) Реструктуризация иб иногда помогает, когда с расширением проблема.
   AlvlSpb
 
46 - 24.05.18 - 16:27
(0) Внутри расширения запрос отрабатывает как и в обычной конфигурации. Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура.
Ваша ошибка, скорей всего, в отсутствии вызова сервера. Т.е. попытка выполнить запрос не на сервере. Читал что галка установлена, но все-равно, что-то именно в этом. Где-то не хватает &НаСервере
   Aleksandr N
 
47 - 24.05.18 - 16:46
(46) — Даже переносить справочник не надо в расширение. Будет выдавать ошибку конструктор запросов, но сам запрос отработает на ура.

Я бы не был столь категоричным. Поведение платформы очень чувствительно к ее версии.
   AlvlSpb
 
48 - 24.05.18 - 16:54
(47) Буду категоричен, т.к. расширений написано немерено. Открываю новую внешнюю обработку, делаю в ней запрос и переношу его в расширение, ничего из объектов запроса не переношу в расширение. Сбоев не было с 8.3.8 и по сей день
   mehfk
 
49 - 24.05.18 - 17:13
(46) &НаСервере не имеет смысла вне модуля формы.

Код в модуле http-сервиса выполняется на сервере.
 
 Рекламное место пустует
   Сияющий в темноте
 
50 - 24.05.18 - 19:27
Контроля доступа на уровне записей точно нет?


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