Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 04:26
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как получить параметры из запроса.  (Прочитано 7482 раз)

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

Оффлайн vdn

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Здравствуйте!

Необходимо получить параметры из текста запроса.
Запрос.НайтиПараметры  дает список параметров. Как потом оттуда вытащить имя параметра и его тип? Запрос.НайтиПараметры.ИмяПараметра не работает, метод Получить тоже.

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

Анализ текста запроса не подходит(поиск &ИмяПараметра), т.к. в последствии может поменяться синтаксис запросов в 1С.

Помогите пожалуйста.


Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
А где формируется текст запроса? Если на Делфи, то порви его и засунь параметры, какие надо. А вобще конкретней опиши, что делаешь.

Оффлайн vdn

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Запрос либо ручками пишется, либо вставляется как текст.
Например: ВЫБРАТЬ Банки.Наименование, Банки.Город, Банки.Адрес ИЗ Справочник.Банки КАК Банки ГДЕ Банки.Город = &Город

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

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

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

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Из текста запроса на выборку из другого приложения ты не получишь типы данных. Ибо это запрос на выборку и в этом случае предполагается, что тип данных известен просителю.  :D Это касается всех видов реляционных БД. Для выяснения структуры БД и типов данных таблиц следует оперировать другим языком запросов - запросами по структуре. В любом языке запросов к любой БД язык делится на две части. Одна занимеестя данными, а другая структурой. В 1С это зовется таинственным словом - метаданные. Так вот текстового языка запросов по работе с метаданными (структурой) в 1С нет.  :fdbsdfbsd: Но к метаданным можно достучаться. В 1С это делается средствами языка 1С. Если надо получить структуру БД 1С извне, то следует использовать, что-то вроде ADO.
В общем для твоего проекта, следует структуру 1С ч/з ADO сохранить в БД с которой работает твое Делфи - приложение. А потом соорудить мастер запросов для 1С, в котором пользователь не пишет ручками, а выбирает из сохраненной структуры.

Оффлайн vdn

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Чет тогда я не пойму...

Есть такой тип в 1С:
ОписаниеПараметраЗапроса (QueryParameterDescription)
Свойства:
Имя (Name)
ТипЗначения (ValueType)

Описание:
Содержит описание параметра запроса.
Сериализуется.

У него есть имя и тип значения. Мне вот это и надо, то что со структурой БД в 1С через АДО работать это тоже понятно.

По идеи же в 1С есть Запрос.НайтиПараметры - эта функция работает, видно по количеству и если осуществить поиск по названию параметра тоже все проходит. Да вот только в том и проблема что имен параметров я могу не знать.

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

Оффлайн vdn

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Сейчас пишется класс который обрабатывает запросы к 1С. Работать должен примерно так:
Получил запрос - Обработал - Вывел список параметров и тип(можно как строку все равно в тексте запроса это будет строка) - получил значения параметров - подставил значения в запрос - отправил 1С - получил ответ. Все

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Чет тогда я не пойму...

ОписаниеПараметраЗапроса (QueryParameterDescription)


Ага  :D Так вот эта штука работает, когда у тебя есть объект в оперативке из 1С под названием Запрос.
Т.е. этот объект должен быть создан в 1С. А у тебя, как я понимаю все иначе...  :D

Оффлайн vdn

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Ole1C := CreateOleObject(Edit1.Text);
Resopen := Ole1C.Connect(Edit2.Text);
Ole1C.visible := true;
query := Ole1C.NewObject('Запрос');
vv := query.FindParameters;
ShowMessage(vv.Count) показывает число равное количеству параметров.
Если сделать так:
vv1 := vv.find('параметр1');
то
ShowMessage(vv1.name); выдает параметр1

У меня вот так  :mellow:

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Сейчас пишется класс который обрабатывает запросы к 1С. Работать должен примерно так:
Получил запрос - Обработал - Вывел список параметров и тип(можно как строку все равно в тексте запроса это будет строка) - получил значения параметров - подставил значения в запрос - отправил 1С - получил ответ. Все

Ну вот ты сам и пишешь. "Получил запрос". Получил от кого - от создателя! А создатель и определяет типы данных. Если средствами ADO создаешь объект в 1С - Запрос. То и параметры с типами прийдется создавать. А из голого текста запроса, без стравнения со структурой и подавно не получишь типы данных.

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Ole1C := CreateOleObject(Edit1.Text);
Resopen := Ole1C.Connect(Edit2.Text);
Ole1C.visible := true;
query := Ole1C.NewObject('Запрос');
vv := query.FindParameters;
ShowMessage(vv.Count) показывает число равное количеству параметров.
Если сделать так:
vv1 := vv.find('параметр1');
то
ShowMessage(vv1.name); выдает параметр1

У меня вот так  :mellow:


Ключевая фраза - query := Ole1C.NewObject('Запрос');
Ты создал объект.
vv := query.FindParameters; - эта штука в тексте смотрит значки &Параметр
Т.о. ты получаешь количество параметров.
Однако создав объект ты не задал значения параметров.
Поэтому их тип не известен.
НЕТУ ТУТ ТИПОВ ПАРАМЕТРОВ
В конце концов ты можешь ошибочно задать не тот параметр и во
время выполнения запроса получишь ошибку...


Теги:
 

Из запроса не выводятся значения полей - выводятся пустые значения

Автор Alex1111Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 24
Просмотров: 12237
Последний ответ 14 Июн 2012, 17:44
от Alex1111
Получить номер недели в месяце в запросе [номер недели]

Автор MuI_I_IkaРаздел Алгоритмы

Ответов: 0
Просмотров: 4147
Последний ответ 15 Июл 2015, 18:24
от MuI_I_Ika
как получить значение реквизита "Код" в обработке "ПодборНоменклатуры" в УТ10.3

Автор JalibРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1086
Последний ответ 02 Дек 2016, 12:58
от Jalib
"ПОДОБНО" в условие связи запроса

Автор Станиславъ ЗверевъРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 8
Просмотров: 3271
Последний ответ 11 Май 2016, 15:29
от LexaK
"Таблица значений" в результате запроса - 1С

Автор mvk843Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 8
Просмотров: 738
Последний ответ 15 Июн 2017, 07:53
от mvk843

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
154 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
46 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
BuhRust
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 138
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal