Имя: Пароль:
1C
1C 7.7
v7: Помогите дописать прямой запрос
0 oslokot
 
31.07.13
14:17
Вот простой запрос, средствами SQLite
    базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
    запрос.ВыполнитьЗапрос("create virtual table Номенклатура using dbeng(Справочник.Номенклатура)");
    Текст="SELECT
    |code Код, descr Наименование,
    |id [Объект :Справочник.Номенклатура]
    |FROM Номенклатура
    |WHERE ismark <> '*' AND ISFOLDER <> 1"
    |ORDER BY Наименование";
    Рез=запрос.ВыполнитьЗапрос(текст);
    Рез.Выгрузить(ТЗ);
Все хорошо, но хотелось бы получить еще пару колонок: ПолнНаименование товара и вес базовой единицы товара
1 Ёпрст
 
гуру
31.07.13
14:21
базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
  
    Текст="
    |SELECT
    |   Спр.code Код,
    |   Спр.descr Наименование,
    |   Спр.id [Объект :Справочник.Номенклатура],
    |   Спр.ПолнНаименование,
    |   Единицы.Вес
    |
    |FROM [Справочник.Номенклатура] Спр
    |left join [Справочник.Единицы] Единицы on Единицы.id = Спр.БазоваяЕдиница
    |WHERE Спр.ismark <> '*' and Спр.ISFOLDER <> 1"
    |ORDER BY Спр.Наименование";
    Рез=запрос.ВыполнитьЗапрос(текст);
    Рез.Выгрузить(ТЗ);
2 oslokot
 
31.07.13
14:23
(1) а, левое соединение, догнал.  Ёпрст благодарю!
3 oslokot
 
31.07.13
14:37
(1) Хм.. "no such column: Спр.Наименование"
а это точно надо выкинуть?
    запрос.ВыполнитьЗапрос("create virtual table Спр using dbeng(Справочник.Номенклатура)");
4 Ёпрст
 
гуру
31.07.13
14:42
(3) да

>>>Cпр.Наименование

ясен пень, есть descr в справочнике (это и есть Наименование)
5 oslokot
 
31.07.13
14:52
(4) да, точно |ORDER BY Наименование"
заработало.
6 oslokot
 
31.07.13
14:53
Дольше правда выполняется, раза в 2
7 Ёпрст
 
гуру
31.07.13
14:54
еще бы.. лазить в blob за полным наименованием - тот еще подарок.
8 oslokot
 
31.07.13
15:00
(7) Спасибо!
9 oslokot
 
01.08.13
15:04
Ёпрст Приветствую. Хочется еще колонку с пиктограммой выводить: "Элемент", "Группа", "ПометкаУдаления". Для красоты. Удастся ли вывести из запроса колонку с соответствующим номером пиктограммы? если да, то как.
Например, номер иконки группы 4, помеченного эл-та 2, обычного -5 и т.д.

Запрос выглядит вот так:
    Текст="SELECT
    |code Код, descr Наименование, ISMARK Пометка, ISFOLDER ЭтоГруппа,
    |id [Объект :Справочник.Номенклатура]
    |FROM Номенклатура
    |WHERE ismark <> '"+?(СкрытьУдаленные=1,"*","")+"'
    |AND ISFOLDER <> "+СкрытьГруппы+"";
10 Ёпрст
 
гуру
01.08.13
15:06
(9) используй case
11 Ёпрст
 
гуру
01.08.13
15:07
12 Ёпрст
 
гуру
01.08.13
15:10
тип того
select
case ISFOLDER
   when 2 then 1
   when 1 then 4
end as ЭтоГруппа
13 Злопчинский
 
01.08.13
15:15
блин, какие все умные
14 Ёпрст
 
гуру
01.08.13
15:18
а ты чего ?
творческий застой ?
15 oslokot
 
01.08.13
15:25
(12) Мегачеловек! работает, спасибо!
(13) да ну нафик, второй раз в жизни запрос пишу в клюшках
16 oslokot
 
12.08.13
15:32
Добрый день. Помогите усовершенствовать предыдущий запрос. Теперь запрос утрированно выглядит так:

базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
  
    Текст="
    |SELECT
    |   Спр.code Код,
    |   Спр.descr Наименование,
    |   Спр.id [Объект :Справочник.Номенклатура],
    |   Спр.Тип,
    |   Спр.Диаметр,
    |   Спр.Размер
    |
    |FROM [Справочник.Номенклатура] Спр
    |WHERE Спр.ismark <> '*' and Спр.ISFOLDER <> 1
    |ORDER BY Наименование";
    Рез=запрос.ВыполнитьЗапрос(текст);
    Рез.Выгрузить(ТЗ);

В номенклатуре реквизиты "Тип","Диаметр" и "Размер" это обычные одноуровневые справочники.
Хочется управлять условиями в запросе по этим реквизитам. Например WHERE Спр.Диаметр = ВыбДиаметр.
Не соображу как. Подозреваю нужен left join с этими справочниками. Подтолкните пожалуйста меня.
17 oslokot
 
12.08.13
15:48
+ Вот так не прокатывает.
    |WHERE Спр.ismark <> '*'
    |AND Спр.ISFOLDER <> 1
    |AND Спр.Тип = #ВыбТип

ВыбТипТПА это элемент справочника
18 Ёпрст
 
гуру
12.08.13
15:51
|AND Спр.Тип = :ВыбТип

Запрос.Подставлять("ВыбТип",ВыбТип);//выбтип, например, реквизит формы с нужным видом справочника
19 oslokot
 
12.08.13
15:52
(18) Сорри, да, только что получилось. Действительно вместо # надо :
20 oslokot
 
12.08.13
15:52
Ёпрст спасибо! а ты каким-то конструктором пользуешься?
21 Ёпрст
 
гуру
12.08.13
16:18
(20) нет.
стоял раньше именно конструктор, прибил его за не надобностью.
Хватает консоли..для отладки.
22 oslokot
 
12.08.13
16:25
(21) Можно еще вопрос? А если хочется условие принадлежности к списку?
Например навроде этого:
    |AND Спр.Тип IN (SELECT val FROM :СписокТипов)
...
    Запрос.Подставлять("СписокТиповТПА", СписокТиповТПА);


где СписокТипов это мой список значений
Как правильно написать?
23 Ёпрст
 
гуру
12.08.13
16:27
|AND Спр.Тип IN (SELECT val FROM СписокТипов)

....
   База.УложитьОбъекты(ТвойСписок,"СписокТипов",0,"ВидСправочникаТвоего");
24 oslokot
 
12.08.13
16:30
(23) вот спасиб! а я все перебрал, и уложить и уложитьСписок, ничего не правильно. А где русское описание взять?
25 Ёпрст
 
гуру
12.08.13
16:31
26 oslokot
 
12.08.13
16:34
(25) Благодарю!
27 oslokot
 
22.08.13
16:05
Приветствую. Вот, наткнулся на небольшую проблему:
В запросе есть LIKE '%+ВыбНаименование+%' по наименованию товара, а в наименовании присутствуют символы "_".
Как избавиться от спецсимволов в строке?

Вот это в снеговике работает, а в клюшках нет:
ВыбНаименование = СтрЗаменить(ВыбНаименование,"_","[_]");
28 Ёпрст
 
гуру
22.08.13
17:18
ты экранировать шо ли хочешь, или чтобы он именно "_" искал ?
29 Ёпрст
 
гуру
22.08.13
17:30
вот это используй
http://www.sqlite.org/lang_corefunc.html#like
30 oslokot
 
22.08.13
22:09
(28) да, что бы искал!