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


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
Контроля доступа на уровне записей точно нет?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует