|
v7: Отобрать товары, которых было продано =10 шт за месяц | ☑ | ||
---|---|---|---|---|
0
Umka2008
23.12.17
✎
21:39
|
Коллеги, прошу не пинать - затупил под вечер ))
Есть простой запрос - по регистру ОстаткиТМЦ. В последней строчке его условие "//{{ЗАПРОС(Сформировать) |с НачДата по КонДата1; |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ "); |Группировка Номенклатура; |Условие(Номенклатура в СН); |Условие(КоличествоРасход < 10);"; Ставлю условие в последнюю строку - ругается на КоличествоРасход типа нет такой переменной! А как можно иначе сделать? Чтобы в отборе было всегда 10 шт |
|||
3
Бертыш
23.12.17
✎
22:44
|
Где группировка по документу стесняюсь спросить
|
|||
4
Umka2008
24.12.17
✎
13:52
|
(3) зачем по документу? Нужно отобрать номенклатуру, которой за месяц было продано (не перемещено) ровно 10 шт. Документов продаж при этом может быть сколько угодно, главное суммарно должно быть 10
|
|||
5
Vladal
24.12.17
✎
15:04
|
Посмотри эту тему: Отбор по виду документа в запросе 7.7 ?
|
|||
6
opus70
24.12.17
✎
15:30
|
у 7.7 нет heving можно эмулировать функцией вызываемой из запроса тогда дикие тормаза будут
поэтому проще запросить все продажи из Регистра.Продажи(оборотный регистр в ТИС) и потом уже в цикле выбрать что тебе нужно |
|||
7
Umka2008
24.12.17
✎
15:46
|
(5) - мне по виду документа отбирать не надо, ссылка не помогла
(6) - циклом конечно некошерно, так как итоги по группам будут неверные |
|||
8
opus70
24.12.17
✎
16:25
|
Функция ААА(Кол)
если Кол<10 тогда возврат Кол иначе Возврат 0 Конецесли; КонецФункции |с НачДата по КонДата1; |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоРасход = сумма(ААА(Количество)) когда ((Док.Вид() = ""Реализация"") "+Условие+ "); |Группировка Номенклатура; |Условие(Номенклатура в СН); точно не помню лень искать но примерно вот в такой парадигме |
|||
9
opus70
24.12.17
✎
16:26
|
но быстрей будет как я писал тем более что у тебя уже есть ограничивающее условие |Условие(Номенклатура в СН);
|
|||
10
opus70
24.12.17
✎
16:31
|
Функция ААА(Кол)
если Кол<10 тогда возврат 1 иначе Возврат 0 Конецесли; КонецФункции |с НачДата по КонДата1; |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ "); |Группировка Номенклатура; |Условие(Номенклатура в СН); |Условие(ААА(Количество)=1) // вот так должно быть правильно смысл нужно в условие загнуть фукнцию которая будет проверять то что тебе нужно |
|||
11
Umka2008
24.12.17
✎
16:48
|
(10) - как ты написал работает, но отбирает все товары, которые в документе продавались <10 штук
В итоге получается результат за месяц Товар1 = 10 Товар2 = 30 Товар3 = 20 А надо чтобы вышли товары у которых Товар1 = 10 Товар2 = 10 Товар3 = 10 |
|||
12
Vladal
24.12.17
✎
17:26
|
(11) Так в условии и написано "меньше 10". Поставь условие "равно 10".
|
|||
13
Umka2008
24.12.17
✎
17:51
|
(12) как раз и поставил - и выводит все товары, которых в месяц продали 10,20,100 - то есть кратно 10
|
|||
14
opus70
24.12.17
✎
17:54
|
чтоб получить правильный ответ нужно знать 70% ответа а в 30% сомневаться
вроде дал ответ согласно вопроса даже (6) пояснил что нет having в запросах 7.7 можно его с эмулировать но результат плох я бы выбрал все что мне нужно применил бы фильтр ккокой мне нужен затем полученные данные загнал бы втаблицузначений а дальше используя любимый 1c++ и класс "ТаблицаГруппировок" получил бы свои итоги и по группам и по иерархи справочника |
|||
15
Остап Сулейманович
24.12.17
✎
17:55
|
(13) Нифига у тебя не получится. В семерочном запросе условие можно ставить НА ЗАПИСЬ. А не на ИТОГ. Посему сначала нужно выбрать все итоги. И только потом фильтровать ту выборку, которая получилось.
|
|||
16
opus70
24.12.17
✎
17:59
|
ну или если близок к душе sql разбирайся с классом
http://www.1cpp.ru/forum/YaBB.pl?num=1273512019 |
|||
17
Остап Сулейманович
24.12.17
✎
18:00
|
+ (15) В SQL это выглядело бы примерно так :
Select * from select summ(varname) as fieldname from datasource where fieldname = 10 |
|||
18
opus70
24.12.17
✎
18:09
|
|с НачДата по КонДата1;
|Док = Регистр.ОстаткиТМЦ.ТекущийДокумент; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ "); |Группировка Номенклатура; |Условие(Номенклатура в СН); запрос.выполнить(); Тзн = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Тзн); Тз1 = СоздатьОбъект("ТаблицаЗначений"); Тзн.Выгрузить(Тзн1); Тзн1.УдалитьСтроки(); Тзн.ВыбратьСтроки(); Пока Тзн.Получитьстроку()=1 Цикл если Тзн1.КоличествоРасход =10 Тогда Тзн1.НоаяСтрока(); Тзн1.Номенклатура =Тзн.Номенклатура ; конецесли; Конеццикла; ТзнИтог = СоздатьОбъект("ТаблицаГруппировок"); Тзн1.Выгрузить(ТЗИтог.ПолучитьБазовыйКласс()); ТзнИтог.Сгруппировать("Номенклатура","..,.."); Пока ТзнИтог.ВНачалоВыборки() Пока ТзнИтог.Группировка(1)=1 Цикл .... вывод в отчет Конеццикла; |
|||
19
Umka2008
24.12.17
✎
18:37
|
С 1cpp нет времени разбираться )))
Ок, раз нельзя Условие на Итоги - сделал так 1.Выбрал все продажи в разрезе Номенклатура, КолвоМесяц 2.Отобрал в СписокЗначений все товары = 10 шт из п.1 3.Наложил фильтр на свой отчет = |Условие(Номенклатура в СписокЗначений); В итоге получился запрос с нужной Номенклатурой и правильными итогами по иерархии |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |