Имя: Пароль:
1C
1С v8
Выполнение запросов в расширении
,
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
Контроля доступа на уровне записей точно нет?
Программист всегда исправляет последнюю ошибку.