Меню

Ошибка тип не определен запрос 1с

Тип не определен (Запрос)

Я
   GreenDay1986

07.11.12 — 12:51

Тип не определен (Запрос)

Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)

Всем здравствуйте. Создаю новую информационную базу, не из шаблона, для разработки. Создаю справочники, доки, регистры. Собственно вопрос. Если стоит параметр &НаКлиенте я так понимаю тип запрос на клиенте не определен, ставлю на сервере, ничего не происходит

&НаКлиенте

Процедура ПриОткрытии()

   Запрос = Новый Запрос();

   Запрос.Текст=»ВЫБРАТЬ

   |Рег.Цена КАК Цена,

   |Рег.Дата КАК Дата

   |ИЗ РегистрСведений.Цены КАК Рег

   |»;

   Рез = Запрос.Выполнить().Выбрать();

   Пока Рез.Следующий() Цикл

   Сообщить(Рез.Цена);

   Сообщить(Рез.Дата);

   КонецЦикла;

КонецПроцедуры

Что пишу неправильно?

   GreenDay1986

1 — 07.11.12 — 12:52

&НаСервере

Процедура ПриОткрытии()

   Запрос = Новый Запрос();

   Запрос.Текст=»ВЫБРАТЬ

   |Рег.Цена КАК Цена,

   |Рег.Дата КАК Дата

   |ИЗ РегистрСведений.Цены КАК Рег

   |»;

   Рез = Запрос.Выполнить().Выбрать();

   Пока Рез.Следующий() Цикл

   ЭтаФорма.Элементы.Цена = Рез.Цена;

   Сообщить(Рез.Цена);

   Сообщить(Рез.Дата);

   КонецЦикла;

КонецПроцедуры

или просто

Процедура ПриОткрытии()

   Запрос = Новый Запрос();

   Запрос.Текст=»ВЫБРАТЬ

   |Рег.Цена КАК Цена,

   |Рег.Дата КАК Дата

   |ИЗ РегистрСведений.Цены КАК Рег

   |»;

   Рез = Запрос.Выполнить().Выбрать();

   Пока Рез.Следующий() Цикл

   ЭтаФорма.Элементы.Цена = Рез.Цена;

   Сообщить(Рез.Цена);

   Сообщить(Рез.Дата);

   КонецЦикла;

КонецПроцедуры

ошибок не выдает но и запросы также не исполняются

   mikecool

2 — 07.11.12 — 12:53

с чего решил, что запросы не выполняются?

   GreenDay1986

3 — 07.11.12 — 12:54

С того что никакие сообщения не выводятся, точнее может и исполняются, однако результата нет

   mikecool

4 — 07.11.12 — 12:55

(3) сообщения выводятся, только на сервере

включай уже мосх )

   Magic Dick

5 — 07.11.12 — 12:56

Новый Запрос;

   Песец

6 — 07.11.12 — 12:56

Проверка: Тонкий клиент

   GreenDay1986

7 — 07.11.12 — 12:57

Процедура ПриОткрытии()

   Запрос = Новый Запрос();

   Запрос.Текст=»ВЫБРАТЬ

   |Рег.Цена КАК Цена,

   |Рег.Дата КАК Дата

   |ИЗ РегистрСведений.Цены КАК Рег

   |»;

   Рез = Запрос.Выполнить().Выбрать();

   Пока Рез.Следующий() Цикл

   ЭтаФорма.Элементы.Цена = Рез.Цена;

   Сообщить(Рез.Цена);

   Сообщить(Рез.Дата);

   КонецЦикла;

КонецПроцедуры

Здесь куда выводятся?

   vmv

8 — 07.11.12 — 12:57

тс — глупый тролль, уничтожиить!

   Magic Dick

9 — 07.11.12 — 12:58

(8) а может 86 год?

   GreenDay1986

10 — 07.11.12 — 12:58

брррр, да нет, не тролль, учусь маленько

   Песец

11 — 07.11.12 — 12:59

Запрос (Query)



Доступность:

Сервер, толстый клиент, внешнее соединение.

(с) СП

   GreenDay1986

12 — 07.11.12 — 12:59

(11) То есть мне нужно создавать новую базу на сервере, так понимаю?

   vmv

13 — 07.11.12 — 13:00

(10) открываем сп и в первой главе «директивы компиляции» изучаем, хотя может лучше порясят выращивать — ты подумай, что выгоднее

   Песец

14 — 07.11.12 — 13:00

(12) Не, базу не надо.

   Песец

15 — 07.11.12 — 13:01

(14+) Медитируй до просветления:

Тип не определен (Запрос)

Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)

   GreenDay1986

16 — 07.11.12 — 13:01

(14) То есть базу на локальном компьютере я правильно создал. Что дальше делать дабы в ней сожно было работать с запросами?

   Песец

17 — 07.11.12 — 13:03

(16) В тонком клиенте тип «Запрос» не определен.

   Sammo

18 — 07.11.12 — 13:03

Запрос это сущность или процедура?

   ptiz

19 — 07.11.12 — 13:03

(16) На сервере выполняешь запрос. На клиента возвращаешь сообщения.

   Песец

20 — 07.11.12 — 13:04

(17+) …в нем толко интерфейс, что-либо делать с базой надо на стороне сервера.

   GreenDay1986

21 — 07.11.12 — 13:04

(19) спасибо, счас попробую.

   GreenDay1986

22 — 07.11.12 — 13:06

(19) Как это с точки зрения синтаксиса будет выглядеть? 2 процедуры?

   GreenDay1986

23 — 07.11.12 — 13:12

Хм, можно пример как возвратить с сервера на клиент? Исполнение так понимаю

&НаСервере

Процедура ПриОткрытии()

   Запрос = Новый Запрос();

   Запрос.Текст=»ВЫБРАТЬ

   |Рег.Цена КАК Цена,

   |Рег.Дата КАК Дата

   |ИЗ РегистрСведений.Цены КАК Рег

   |»;

   Рез = Запрос.Выполнить().Выбрать();

КонецПроцедуры

   Шапокляк

24 — 07.11.12 — 13:16

(23) Запрос = Новый Запрос;

Убери скобочки! И — нескромный вопрос — а что на сервере открывают-то?

   Песец

25 — 07.11.12 — 13:16

(23) На клиенте этой процедуры просто не будет.

Как вариант — создать общий модуль с галочками «сервер» и «вызов сервера», в нем расположить твою функцию которая вернет данные, ее и вызывать из ПриОткрытии.

   GreenDay1986

26 — 07.11.12 — 13:20

(25) В общем все мои запросы исполнять в общих модулях, При открытии прописывать уже непосредственно передаваемые с сервера параметры?

   GreenDay1986

27 — 07.11.12 — 13:21

Мутновато пока укладывается, ну ладно, спасибо, будем разбираться 🙂

   le_

28 — 07.11.12 — 13:25

(27) Поищи видеокурс Гилева по управляемым формам.

   Xapac_2

29 — 07.11.12 — 13:27

на КЛИЕНТЕ же!!!

сделай на сервере

   Wobland

30 — 07.11.12 — 13:28

ТС как минимум уже год учится, никак не научится

   Aprobator

31 — 07.11.12 — 13:28

(27) чего тут укладываться то? УФ — видимость методов и т.п. смотреть обязательно, только и всего.

   GreenDay1986

32 — 07.11.12 — 13:35

Хм, как ИБ без управляемых форм сделать? Конфигурации подревнее поискать?

   Wobland

33 — 07.11.12 — 13:35

(32) нужно как-то себя заставить

   GreenDay1986

34 — 07.11.12 — 13:36

(33)Ога, я пока ток БП ковырял, без УФ.

   GreenDay1986

35 — 07.11.12 — 14:33

Для примера родил следующее. 🙂

&НаСервере

Функция ВыбратьДанные(Найм)

Запрос = Новый Запрос;

Запрос.Текст =»ВЫБРАТЬ

|Ном.Наименование КАК Наим

|ИЗ Справочник.Номенклатура КАК Ном

|ГДЕ Наим.Наименование=&Найм

|»;

Запрос.УстановитьПараметр(«Найм»,Найм);

Рез = Запрос.Выполнить().Выбрать();

Пока Рез.Следующий()Цикл;

   Сообщить(Рез.Наим);

КонецЦикла;

КонецФункции

&НаКлиенте

Процедура ПриОткрытии()

   Сообщить(ВыбратьДанные(Этаформа.Элементы.Наименование));  

КонецПроцедуры

Возвращает ошибку

{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(20)}: Ошибка при вызове метода контекста (ВыбратьДанные)

   Сообщить(ВыбратьДанные(Этаформа.Элементы.Наименование));  

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘param’:

   форма: Элемент

   имя: {http://v8.1c.ru/8.2/managed-application/modules}param

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘ПолеФормы’

   salvator

36 — 07.11.12 — 14:36

Если Рез.Следующий() Тогда;

   Возврат Рез.Наим;

КонецЕсли;

   GreenDay1986

37 — 07.11.12 — 14:39

(36) таже самая ошибка возвращается.

   Romich1981

38 — 07.11.12 — 14:44

Посмотри хоть какой тип у «Этаформа.Элементы.Наименование»

   GreenDay1986

39 — 07.11.12 — 14:44

(38) Поле ввода

   Romich1981

40 — 07.11.12 — 14:45

=) о чем и речь. Какие типы можно передавать?

   hhhh

41 — 07.11.12 — 14:45

(37) а вот этот бред как объясните? Что это за слово?

ГДЕ Наим.Наименование

   GreenDay1986

42 — 07.11.12 — 14:47

Где Ном.Наименование, простите

   samozvanec

43 — 07.11.12 — 14:48

все не читал. Что за прикол менять директиву компиляции у событий формы?

   GreenDay1986

44 — 07.11.12 — 14:49

Не ругайтесь шибко, УФ первый раз юзаю 🙁

   GreenDay1986

45 — 07.11.12 — 14:57

Уррра, нашел 🙂 ЭтаФорма.Объект.Наименование. Передалось таки 🙂

   sidalexsandr

46 — 07.11.12 — 14:58

Можно так:

&НаСервере

Функция ВыбратьДанные(Найм)

Запрос = Новый Запрос;

Запрос.Текст =»ВЫБРАТЬ

|Ном.Наименование КАК Наим

|ИЗ Справочник.Номенклатура КАК Ном

|ГДЕ Наим.Наименование=&Найм

|»;

Запрос.УстановитьПараметр(«Найм»,Найм);

РезультатЗапроса = Запрос.Выполнить();

   
   СпособОбхода = ОбходРезультатаЗапроса.Прямой;

   ТабЗнач = РезультатЗапроса.Выгрузить(СпособОбхода);  

   
   Возврат ТабЗнач;

КонецФункции

   GreenDay1986

47 — 07.11.12 — 14:59

(46) Спасибо! 🙂

   sidalexsandr

48 — 07.11.12 — 15:00

(46)+

Дальше

&НаКлиенте

Процедура ЗабратьССервера()

      ТаблЗначений =     ВыбратьДанные(Найм);

// Дальше получай на здоровье данные из Таблицы значений

КонецПроцедуры

   sidalexsandr

49 — 07.11.12 — 15:00

(47) Вот теперь можеш спасибо

   sidalexsandr

50 — 07.11.12 — 15:01

Напиши, что получилось.

   hhhh

51 — 07.11.12 — 15:05

(49) ТаблицаЗначений

Доступность:

Сервер, толстый клиент, внешнее соединение.

   GreenDay1986

52 — 07.11.12 — 15:11

(50) Соединяю с регистромСведений цены.Сообщение выдалось

   GreenDay1986

53 — 07.11.12 — 15:28

Получилось так

&НаСервере

Функция ВыбратьДанные(Найм)

Запрос = Новый Запрос;

Запрос.Текст =»ВЫБРАТЬ

|Ном.Наименование КАК Наим,

|ЕСТЬNULL(Рег.Цена,0) КАК Цена,

|ЕСТЬNULL(Рег.Период,0) КАК Период

|ИЗ Справочник.Номенклатура КАК Ном

|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза)КАК Рег

|ПО Ном.Наименование = Рег.Наименование

|ГДЕ Ном.Наименование=&Найм

|»;

Запрос.УстановитьПараметр(«ДатаСреза», КонецДня(ТекущаяДата()));

Запрос.УстановитьПараметр(«Найм»,Найм);

Рез = Запрос.Выполнить().Выбрать();

Пока Рез.Следующий()Цикл

   Сообщить(Рез.Наим);

   Сообщить(Рез.Цена);

   Сообщить(Рез.Период);

КонецЦикла;

КонецФункции

&НаКлиенте

Процедура ПриОткрытии()

   ВыбратьДанные(ЭтаФорма.Объект.Наименование);  

КонецПроцедуры

Наименование обьекта текущей формы возвращает. Цену и Период возвращает почему-то пустыми. Хотя в регистресведений Цены эти данные заполнены

   DionisSergeevich

54 — 07.11.12 — 15:34

(53) Отладчик в руки и смотри что у тебя в Рез после Рез.Следующий. Попробуй запрос с твоими параметрами в консоли запросов. Так на глаз не вижу почему возвращает пустые значения

   Шапокляк

55 — 07.11.12 — 15:50

(53) Ну и кто там на сервере это читает

Пока Рез.Следующий()Цикл

   Сообщить(Рез.Наим);

   Сообщить(Рез.Цена);

   Сообщить(Рез.Период);

КонецЦикла;

Засовывай в структуру и возвращай клиенту

   DionisSergeevich

56 — 07.11.12 — 15:51

(55) суть то не в этом. суть то в другом

   GreenDay1986

57 — 07.11.12 — 15:55

(55) Рез.Наим возвращает и сообщает. Цену с периодом берет пустые

   Aprobator

58 — 07.11.12 — 15:56

(46) (48) не взлетит по той простой причине, что таблица значений не живет на клиенте.

   Aprobator

59 — 07.11.12 — 15:58

(53) дык у тебя соединения нет. Кто же соединение по наименованию делает? Самописка что ли полная?

   Шапокляк

60 — 07.11.12 — 15:58

(56) Суть… Интересно, какой кошмар у него затаился в регистре Цены? Неужто Измерение Наименование строкового типа?

  

   GreenDay1986

61 — 07.11.12 — 16:01

(60) Измерение Наименование типа СправочникСсылка.Номенклатура

   hhhh

62 — 07.11.12 — 16:02

(61) а измерение Номенклатура типа СправочникСсылка.Номенклатура значит безжалостно удалил?

   Шапокляк

63 — 07.11.12 — 16:02

(61) Да ну? А это как понимать?

|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза)КАК Рег

|ПО Ном.Наименование = Рег.Наименование

   Serginio1

64 — 07.11.12 — 16:02

Может ВыбратьДанные(ЭтаФорма.Объект.Наименование.ТекстРедактирования);

или что там еще

   GreenDay1986

65 — 07.11.12 — 16:03

(63) тут накосячил, Ном.Ссылка = Рег.Ссылка?

   salvator

66 — 07.11.12 — 16:04

(65) продолжайте наблюдения

   DionisSergeevich

67 — 07.11.12 — 16:07

(65) У записи регистра нет ссылки. Да открой ты консоль запросов

  

GreenDay1986

68 — 07.11.12 — 16:08

Извиняйте ребят, психологических отклонений нет,просто мудаг :))) Измерение Наименование сделал 🙁 В общем переименовал заработало все.

При запросе выдает ошибку.

Автор Серега16, 09 авг 2014, 13:54

0 Пользователей и 1 гость просматривают эту тему.

 в 1с 8.2 Почему выдает ошибку
Запрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)
а вот сам код

Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
                             | Покупатель.Наименование
                             |ИЗ
                             | Справочник.Покупатель КАК Покупатель
|Где
|Покупатель.Наименование = &Наименование" ;
   
       Запрос.УстановитьПараметр("Наименование"Наименование);
       Результат = Запрос.Выполнить();
       Если НЕ Результат.Пустой() Тогда

                   Сообщить( "Данный покупатель уже существует!");

              КонецЕсли;


РS Пробывал и на сервере и на клиенте везде выдает ошибку. Роботает только в модуле объекта. ПередЗаписью
А я хочу при НаименованиеОкончаниеВводаТекста.


Посмотрите описание этого события, по-моему из него запрещено обращаться на сервер.
Используйте событие ПриИзменении


Цитата: GRADUS от 09 авг 2014, 14:07
Посмотрите описание этого события, по-моему из него запрещено обращаться на сервер.
Используйте событие ПриИзменении

ПриИзменении вот такая ошибка.
Тип не определен (Запрос)
   Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)



Серега16, после «Наименование» в УстановитьПараметр вообще-то следует ставить запятую.



ЦитироватьРоботает только в модуле объекта

Это я видел;

а прежде сообщение об ошибке:

ЦитироватьЗапрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)

и далее код с этой ошибкой.

Тогда реально с чем работает автор темы? И что мы обсуждаем?


Цитата: pavl_vs от 09 авг 2014, 18:14

ЦитироватьРоботает только в модуле объекта

Это я видел;

а прежде сообщение об ошибке:

ЦитироватьЗапрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)

и далее код с этой ошибкой.

Тогда реально с чем работает автор темы? И что мы обсуждаем?

Запятую я потерял чуть позже когда пытался поменять параметры. Ща перепроверю все свои эксперименты с запятой.

Добавлено: 09 авг 2014, 19:41


&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Проверка();
КонецПроцедуры
&НаСервере
Процедура Проверка()экспорт

Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
                             | Покупатель.Наименование
                             |ИЗ
                             | Справочник.Покупатель КАК Покупатель
|Где
|Покупатель.Наименование = &Наименование" ;
   
       Запрос.УстановитьПараметр("Наименование",Наименование);
       Результат = Запрос.Выполнить();
       Если НЕ Результат.Пустой() Тогда

                   Сообщить( "Данный покупатель уже существует!");

              КонецЕсли;


{Справочник.Покупатель.Форма.ФормаЭлемента.Форма(17,49)}: Переменная не определена (Наименование)
       Запрос.УстановитьПараметр(«Наименование»,<<?>>Наименование); (Проверка: Сервер).
Может есть другой способ проверки на уникальность при создании. Хотелось чтоб при заполнении первого регистра была проверка, а не после заполнения всех данных.


И что же у нас в переменной наименование, выложите скрин значения переменной «Наименование» в отладчике. После скрина продолжаем разговор.


В форме элемента просто так ссылаться на поле по его названию нельзя.
Ссылка на значение поля идет через объект, то есть код будет таким:

Запрос.УстановитьПараметр(«Наименование», Объект.Наименование);

И, к тому же, если у вас весь код в модуле формы элемента справочника, а обращаться к серверной процедуре вы из других мест конфигурации не собираетесь, то слово «Экспорт» можно не писать.


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • При запросе выдает ошибку.

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

kosvo
02.04.2012 10:44 Прочитано: 9133

Доброго времени суток!
Помогите пожалуйста разобраться! При создании нового запроса выдает постоянно ошибку…, причем , даже если вводится пример из справки.

=========================
&НаКлиенте

Процедура сталь_055ПриИзменении(Элемент)

Запрос = Новый Запрос();
Запрос.Текст = «ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Услуга»;

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;

КонецПроцедуры
================================

Выдает ошибку:

{ОбщаяФорма.Вариант.Форма(6,16)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос();

Учусь в ДемоВерсии 1С.v8

Спасибо!

Yandex
Возможно, вас также заинтересует

Реклама на портале

Mokey
02.04.2012 11:31 Ответ № 1

Что первое в голову пришло, буквы Рус-Лат какие-то в слове «Запрос».


Изменено 02.04.12 11:31:47

E_Migachev
02.04.2012 11:42 Ответ № 2

(0) kosvo,
1. Пишется: Код 1C v 8.х

 Запрос = Новый Запрос;   

2. Если это УП, то Запрос можно выполнять только на сервере

Mokey
02.04.2012 11:43 Ответ № 3

(2) E_Migachev, вроде же и со скобками работает…

… проверил у себя (засомневался было), всё работает со скобками.


Изменено 02.04.12 11:45:04

kosvo
02.04.2012 11:53 Ответ № 4

т.е. причина в «&НаКлиенте» ?

E_Migachev
02.04.2012 12:04 Ответ № 5

(3) Mokey, хорошо ), я всегда без () пишу…
(4) kosvo, да

Mokey
02.04.2012 12:37 Ответ № 6

Ух ты.. а я и не обратил внимание на &НаКлиенте… сорри

kosvo
02.04.2012 12:47 Ответ № 7

Всем СПАСИБО!

kosvo
02.04.2012 12:47 Ответ № 8

Вопрос закрыт!

DJ_Serega
03.04.2012 11:59 Ответ № 9

(5) E_Migachev,
Я обычно так пишу запросы:
Код 1C v 8.х

 
Процедура БлаБлаБла
Запрос = Новый Запрос(ПолучитьТекстЗапроса());
КонецПроцедуры

Функция ПолучитьТекстЗапроса()
ТекстЗапроса =
"БлаБлаБла"
;
Возврат ТекстЗапроса;
КонецФункции

Текст получается компакнтым, и все запросы отдельно написаны в модуле объекта, изза чего можно их использовать из других объектов *07


Изменено 03.04.12 12:02:47

Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.

Содержание:

1.     Пример с внешней обработкой

2.     Исправление ошибки в 1С

3.     Новое условие при выполнении запроса

Данная ошибка выполнения запроса 1С может возникнуть при выполнении запроса, если в качестве параметра передается таблица значений с колонками, в которых не определен тип.

Разберем на примере почему данная ошибка программы 1С происходит, и как ее избежать при разработке.  

1. Пример с внешней обработкой

Для простоты создадим внешнюю обработку 1С 8, которая будет выгружать в табличную часть обработки номенклатуры.

Предположим, у вас есть таблица значений, заполняемая некоторыми данными, например, наименованием производителей (Рисунок 1).

Пример с внешней обработкой

Рис. 1

Теперь напишем запрос, который будет выводить номенклатуру данных производителей (Рисунок 2).

выводить номенклатуру данных

Рис. 2

При попытке запустить заполнение табличной части 1С 8.3 выдает ошибку «Тип не может быть выбран в запросе» (Рисунок 3).

Тип не может быть выбран

Рис. 3

Данная ошибка при выполнении операции в 1С возникла потому, что в таблице значений не указан тип колонки «Наименование».  

2. Исправление ошибки в 1С

Чтобы исправить ошибку, необходимо явно указать тип при добавлении колонки. Сделать это можно при помощи Описания типов. Укажем наименование строкового типа данных (Рисунок 4).

Тип выбран в запросе

Рис. 4

Также можно указать тип «СправочникСсылка.Производители», но тогда таблица значений не заполнится необходимыми данными, что, впрочем, можно исправить, воспользовавшись поиском по наименованию в справочнике, и подставив найденное значение в поле «Наименование» (Рисунок 5).

Исправление ошибки в 1С

Рис. 5

Но остановимся на типе «Строка».

При попытке выполнить код, возникает новая ошибка программы, говорящая о том, что нельзя сравнивать разные типы (Рисунок 6).

ошибки в 1С

Рис. 6 

3. Новое условие при выполнении запроса 1С

Вернемся к выполнению запроса 1С и изменим его, заменив жесткое сравнение на условие «Подобно».

Запрос примет следующий вид (Рисунок 7).

Новое условие 1С

Рис. 7

В результате мы получим список всей номенклатуры данных производителей (Рисунок 8).

при выполнении запроса 1С

Рис. 8

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Тип не может быть выбран в запросе

Ошибка при вызове возникает в запросе, когда тип не может быть выбран в качестве источника данных (таблицы), либо не инициализирован в процессе выборки из временной таблицы. Значит вы пытаетесь загрузить таблицу значений в запрос 1С.

Полный текст ошибки:

Ошибка при вызове метода контекста (Выполнить) 
ТЗ = Запрос.Выполнить().Выгрузить(); 
по причине: {(310, 32)}: Тип не может быть выбран в запросе

ТипНеМожетБытьВыбранВЗапросе

Сопутствующий ошибке код:

В качестве одного из параметров передается заполненная «Таблица значений», которая помещается во временную таблицу запроса, а затем уже производится ее выборка.

Например:

Запрос.УстановитьПараметр(«ТЗДеньги», Новый ТаблицаЗначений);

Сам текст запроса:

ВЫБРАТЬ * ПОМЕСТИТЬ ТДеньги ИЗ &ТЗДеньги КАК Т
;
ВЫБРАТЬ 
   ЗарплатныйПериод,
   Статья,
   Сотрудник,
   Подразделение,
   Сумма 
ИЗ 
   тДеньги

Ошибка возникает в версиях 8.2 и 8.3 платформы 1С.

Причина ошибки:

Не инициализированные типы колонок в таблице значений.

ТЗДеньги = Новый  ТаблицаЗначений;
ТЗДеньги.Колонки.Добавить("ЗарплатныйПериод");
ТЗДеньги.Колонки.Добавить("Статья");
ТЗДеньги.Колонки.Добавить("Сотрудник");
ТЗДеньги.Колонки.Добавить("Подразделение");
ТЗДеньги.Колонки.Добавить("Сумма");

Ошибка может проявится при значениях в таблице, которые не могут быть выбраны: объект Картинка, Диаграмма, Шрифт и прочие интерфейсные, либо не ссылочные типы.

Решение

Верная инициализация, каждой колонки в таблице значений:

ТЗДеньги = Новый ТаблицаЗначений;
ТЗДеньги.Колонки.Добавить("ЗарплатныйПериод",Новый ОписаниеТипов("Дата"));
ТЗДеньги.Колонки.Добавить("Статья",Новый ОписаниеТипов("Строка"));
ТЗДеньги.Колонки.Добавить("Сотрудник",Новый ОписаниеТипов("Строка"));
ТЗДеньги.Колонки.Добавить("Подразделение",Новый ОписаниеТипов("Строка"));
ТЗДеньги.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число"));

Если колонка должна содержать несколько типов, тогда используйте другой вариант инициализации ОписаниеТипов:

МассивТипов = Новый Массив;
МассивТипов.Добавить("Строка");
МассивТипов.Добавить("Число");
пОписаниеТипов = Новый ОписаниеТипов(МассивТипов);

Основное требование — точное указание для всех колонок.

Также смотрите про статью про тип «ЛюбаяСсылка»

Попутно может возникнуть ошибка, связанная с некорректным типом для агрегатных функций запроса:

«Неверные параметры Сумма», возникает, в случае хотя бы одно из значений в переданной таблице значений равно Null.

Люди кончают самоубийством оттого, что получают по почте одну рекламу.

Тема: Путаница в модулях! Откуда вызывать запрос?  (Прочитано 4757 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Всем доброго времени суток! Совсем запуталась в модулях! Объясните, пожалуйста, что делаю не так?

У документа реквизиты: Номер, Дата, СчетДенежныхСредств, ОстатокНаСчете, СуммаФактическая, такие-же на форме. Хочу при выборе счета автоматом получть остаток по нему. Пробовала так:

&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)
СуммаНаСчете = ВернутьОстатокПоСчету();
КонецПроцедуры

&НаСервере
Функция ВернутьОстатокПоСчету()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
           | ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
           |ИЗ
           | РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки";
Запрос.УстановитьПараметр("НаДату", Дата);
Запрос.УстановитьПараметр("Счет", СчетДенежныхСредств);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции

Орёт, что переменная не определена:

{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(13,38)}: Переменная не определена (Дата)
   Запрос.УстановитьПараметр(«НаДату», <<?>>Дата); (Проверка: Сервер)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(14,36)}: Переменная не определена (СчетДенежныхСредств)
   Запрос.УстановитьПараметр(«Счет», <<?>>СчетДенежныхСредств);    (Проверка: Сервер)

Пыталась передавать их в процедуру:

СуммаНаСчете = ВернутьОстатокПоСчету(Дата, СчетДенжныхСредств);Орёт уже на форму:

{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,39)}: Переменная не определена (Дата)
   СуммаНаСчете = ВернутьОстатокПоСчету(<<?>>Дата, СчетДенжныхСредств);       (Проверка: Тонкий клиент)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,45)}: Переменная не определена (СчетДенжныхСредств)
   СуммаНаСчете = ВернутьОстатокПоСчету(Дата, <<?>>СчетДенжныхСредств);       (Проверка: Тонкий клиент)

Перекинула эту функцию в модуль объекта, пыталась вызывать её из модуля формы, ругается, что функция не определена, хотя я даже добавила к функции «Экспорт».
А в самой процедуре СчетДенежныхСредствПриИзменении(Элемент) не даёт сделать запрос, ругается на запрос.

{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,17)}: Тип не определен (Запрос)
   Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)

Где что не так делаю? Как правильно и почему?  ???
Заранее благодарна!


Записан


&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)   тут надо в отладчике посмотреть и из элемента найти значение нового счета
   СуммаНаСчете = ВернутьОстатокПоСчету(ДАТА, СЧЕТ);   здесь надо передать значение даты и значение счета(или строку счета а в серверной функции найти счет по коду)   
КонецПроцедуры

&НаСервере
Функция ВернутьОстатокПоСчету(ДАТА, СЧЕТ)   
   Запрос = Новый Запрос;
   Запрос.Текст = «ВЫБРАТЬ
           |   ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
           |ИЗ
           |   РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
   Запрос.УстановитьПараметр(«НаДату», Дата);
   Запрос.УстановитьПараметр(«Счет», СчетДенежныхСредств);   
   Результат = Запрос.Выполнить().Выгрузить();   
   Возврат Результат.СуммаОстаток;   
КонецФункции


Записан



Ничё не поняла! Можно поподробней?
В отладчике смотрела, но значение даты и счета так и не нашла. :(


Записан


На клиенте определите переменную Дата И Счет

&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)   
        Дата = Объект.Дата;
        Счет = Объект. СчетДенежныхСредств;

//Затем передайте эти переменный в процедуру на сервер в качестве параметров

   СуммаНаСчете = ВернутьОстатокПоСчету(Дата, Счет);      
КонецПроцедуры

//После чего можно вызывать функцию на сервере без контекста
&НаСервереБезКонтекста
Функция ВернутьОстатокПоСчету(Дата, Счет)   
   Запрос = Новый Запрос;
   Запрос.Текст = «ВЫБРАТЬ
           |   ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
           |ИЗ
           |   РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
   Запрос.УстановитьПараметр(«НаДату», Дата);
   Запрос.УстановитьПараметр(«Счет», Счет);   
   Результат = Запрос.Выполнить().Выгрузить();   
   Возврат Результат.СуммаОстаток;   
КонецФункции


Записан



Данная ошибка возникает в том случае, когда вы пытаетесь использовать значение типа, о котором платформа не знает.

Вы зададитесь вопросом: «Как она может его не знать!?» Очень просто: либо используемый Вами релиз платформы ниже 1С:Предприятие 8.3.14, либо в свойствах конфигурации установлен режим совместимости ниже 8.3.14. Начиная с него тип УправляемаяФорма стал называться ФормаКлиентскогоПриложения. Это не означает, что старый тип не работает, но он устарел и фирма «1С» не дает никаких гарантий, что его не удалят в одном из будущих релизов.

Возможные варианты решений:

  1. Найти и заменить в коде все упоминания типа ФормаКлиентскогоПриложения на тип УправляемаяФорма
  2. Переключить режим совместимости в свойствах конфигурации на 8.3.14 и выше
  3. Выполнить апгрейд технологической платформы на версию 8.3.14 и выше

Внимание! В последних двух случаях не забывайте выполнить проверку остальных ключевых механизмов на тестовой среде перед обновлением платформы на рабочем контуре

Читайте также:

  1. Ошибка «Отсутствует отображение для типа (ФормаКлиентскогоПриложения)»

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка тип листа нетрудоспособности не соответствует фактическому типу листа
  • Ошибка тип serial не существует