|
v7: Простой запрос на SQLite напишите, плиз | ☑ | ||
---|---|---|---|---|
0
Злопчинский
18.04.13
✎
20:28
|
Простой запрос (сам слаб по регистрам)
Подсчет количества раз упоминаний номенклатурыв в документах продажи хочется получить плоскую ТЗ Артикул-Наименование-Количество упоминаний . 7.7 ТиС чорный запрос ТекстЗапроса = " |Период с ДатаН по ДатаК; |Артикул = Регистр.Продажи.Номенклатура.Артикул; |Номенклатура = Регистр.Продажи.Номенклатура; |Количество = Регистр.Продажи.Количество; |Функция КоличествоСумма = Сумма(Количество); |Функция Сколько = Счётчик(); |Группировка Номенклатура упорядочить по Номенклатура.Артикул без групп; |Группировка Документ; |"; //Регистр.Продажи - оборотный //именно продажи, т.е. где КоличестивоСумма >0 //в итоговой таблице колво штук продаж - не нужно. . Запрос = СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса) <> 1 Тогда Возврат; КонецЕсли; ТЗ = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ,1,1); // безвозмездно или возмездно за небольшую денежку на мобильный или WebMoney . Спсб |
|||
1
МихаилМ
18.04.13
✎
21:50
|
а потом на инфостарте появится статейка
некоего чебуратора, в которой интелекта чебуратора - 1% а остальное 99% копипаст с мисты. |
|||
2
mistеr
18.04.13
✎
22:02
|
Один я не понял, причем здесь SQLite?
|
|||
3
wladimir90
18.04.13
✎
22:07
|
(2) Я тоже задался этим вопросом. Может все таки - обычный SQL запрос к серверной БД?
|
|||
4
Злопчинский
18.04.13
✎
22:23
|
(1) Обязательно! с упоминанием учителей!
|
|||
5
Desna
18.04.13
✎
22:25
|
1 запрос выбрать все документы по регистру
2 запрос, руцями документы в поле номенклатура указать 3 выгрузить в тз, в тз добавить колонку "Количество", установить 1, свернуть тз. |
|||
6
viktor_vv
18.04.13
✎
22:28
|
(4) А разрез документ нужен, че-то непонятно, че ты там считать собрался.
|
|||
7
viktor_vv
18.04.13
✎
22:34
|
Ну как заготовка, проверить не могу, нету ТиС
ТекстЗапроса = " |Select | СпрНом.Артикул as Артикул, | Продажи.Номенклатура as [Номенклатура $Справочник.Номенклатура], | Count(СпрНом.ID) as КолПозиций |From | [Регистр.Продажи] as Продажи | Left join [Журнал] as Ж | on Ж.IDDOC = Продажи.IDDOC | Left join [Справочник.Номенклатура] as СпрНом | on СпрНом.ID = Продажи.Номенклатура |Where | Ж.date between :НачДата and :КонДата |Group by Продажи.Номенклатура , СпрНом.Артикул |"; Запрос = база.НовыйЗапрос(); Запрос.Подставлять("Начдата",НачГода(РабочаяДата())); Запрос.Подставлять("КонДата",РабочаяДата()); ТЗ = Запрос.ВыполнитьЗапрос(ТекстЗапроса) ; ТЗ.ВыбратьСтроку(); |
|||
8
viktor_vv
18.04.13
✎
22:36
|
Если стоит быстрая обработка движений, то можно соединение с журналом убрать.
Ну и я там точно не помню насчет, какой-то из них, то ли left, то ли inner сильно тормозит на SQLite. |
|||
9
viktor_vv
18.04.13
✎
22:43
|
И если я правильно понял насчет количества, то
|Where | Ж.date between :НачДата and :КонДата | and Продажи.Количество > 0 |
|||
10
Злопчинский
19.04.13
✎
01:45
|
(6) сами документы не нужны, док "привлекается" чтобы разделить количество продаж товара.
т.е. тупо отвечаем на вопрос: сколько раз продавался ТоварN? (где "раз" = упоминание номенклатуры в документе продажи). |
|||
11
Злопчинский
19.04.13
✎
01:46
|
(7) спсб, посмотрю.
|
|||
12
Dolly_EV
19.04.13
✎
07:05
|
(8) inner тормозит.
(0) А если взять класс "ПрямойЗапрос" от Vandalsvq, то можно писать практически на 8-рошном языке запросы и не зависеть (почти) от платформы - sql или dbf |
|||
13
Dolly_EV
19.04.13
✎
07:22
|
ТекстЗапроса = "
|ВЫБРАТЬ | $СпрНом.Артикул КАК Артикул | ,$Продажи.Номенклатура КАК [Номенклатура $Справочник.Номенклатура] | ,КОЛИЧЕСТВО($СпрНом.ТекущийЭлемент) КАК КолПозиций |ИЗ | Регистр.Продажи КАК Продажи $nolock | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Ж $nolock | ПО $Ж.ТекущийДокумент = $Продажи.ТекущийДокумент | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock | ПО $СпрНом.ТекущийЭлемент = $Продажи.Номенклатура |ГДЕ | $Ж.ДатаДокумента МЕЖДУ :НачДата И :КонДата | И $Продажи.Количество>0 |ГРУППИРОВАТЬ $Продажи.Номенклатура, $СпрНом.Артикул |"; Запрос.УстановитьТекстовыйПараметр("Начдата",НачГода(РабочаяДата())); Запрос.УстановитьТекстовыйПараметр("КонДата",РабочаяДата()); ТЗ = Запрос.ВыполнитьЗапрос(,ТекстЗапроса); ТЗ.ВыбратьСтроку(); красота! :-)) все по-русски |
|||
14
Злопчинский
19.04.13
✎
18:22
|
(13) спсб. посмотрю.
. меня смущает для чего левое соединение к журналу документов..? |
|||
15
Sereja
19.04.13
✎
18:48
|
(14) Что б отбор по датам делать
|
|||
16
Злопчинский
19.04.13
✎
20:11
|
(15)А, точно! спсб!
|
|||
17
Dolly_EV
20.04.13
✎
14:01
|
см (8) еще. "Если стоит быстрая обработка движений", то вот так тогда можно:
|ИЗ | Регистр.Продажи КАК Продажи $nolock | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock | ПО $СпрНом.ТекущийЭлемент = $Продажи.Номенклатура |ГДЕ | $Продажи.Дата МЕЖДУ :НачДата И :КонДата | И $Продажи.Количество>0 |
|||
18
Туц
22.04.13
✎
06:28
|
(10) коли так, то регистр тут причем? Нужно строки обрабатывать, т.к. не известно сворачивается ли табличка при записи в регистр.
|
|||
19
Туц
22.04.13
✎
06:34
|
Но если об (18) забыть, то как-то так
SELECT Рег.Номенклатура Номенклатура,Спр.Артикул Артикул,sum(1) Упоминаний FROM Регистр_Продажи Рег LEFT JOIN Справочник_Номенклатура Спр ON Спр.ID = Рег.Номенклатура GROUP BY Рег.Номенклатура,Спр.Артикул ORDER BY Спр.Артикул |
|||
20
Злопчинский
22.04.13
✎
16:47
|
(18) на такое загрубление иду сознательно. количество дублирующихся строк в документах реализации пренебрежимо мало и на конеынй результат не влияет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |