Вход | Регистрация

1С:Предприятие ::

Метки: 

v7: Отобрать товары, которых было продано =10 шт за месяц

Я
   Umka2008
 
23.12.17 - 21:39
Коллеги, прошу не пинать - затупил под вечер ))
Есть простой запрос - по регистру ОстаткиТМЦ. В последней строчке его условие

    "//{{ЗАПРОС(Сформировать)

    |с НачДата по КонДата1; 
    |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент;    
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ ");
    |Группировка Номенклатура;
    |Условие(Номенклатура в СН);
    |Условие(КоличествоРасход < 10);"; 

Ставлю условие в последнюю строку - ругается на КоличествоРасход 
типа нет такой переменной!
А как можно иначе сделать? Чтобы в отборе было всегда 10 шт
 
 
   Бертыш
 
3 - 23.12.17 - 22:44
Где группировка по документу стесняюсь спросить
   Umka2008
 
4 - 24.12.17 - 13:52
(3) зачем по документу? Нужно отобрать номенклатуру, которой за месяц было продано (не перемещено) ровно 10 шт. Документов продаж  при этом может быть сколько угодно, главное суммарно должно быть 10
   Vladal
 
5 - 24.12.17 - 15:04
   opus70
 
6 - 24.12.17 - 15:30
у 7.7 нет heving можно эмулировать функцией вызываемой из запроса тогда дикие тормаза будут
поэтому проще запросить все продажи из Регистра.Продажи(оборотный регистр в ТИС) и потом уже в цикле выбрать что тебе нужно
   Umka2008
 
7 - 24.12.17 - 15:46
(5) - мне по виду документа отбирать не надо, ссылка не помогла
(6) - циклом конечно некошерно, так как итоги по группам будут неверные
   opus70
 
8 - 24.12.17 - 16:25
Функция ААА(Кол)
    если Кол<10 тогда
        возврат Кол
иначе
Возврат 0
Конецесли;
КонецФункции


    |с НачДата по КонДата1; 
    |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент;    
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоРасход = сумма(ААА(Количество)) когда ((Док.Вид() = ""Реализация"") "+Условие+ ");
    |Группировка Номенклатура;
    |Условие(Номенклатура в СН);

точно не помню лень искать но примерно вот в такой парадигме
   opus70
 
9 - 24.12.17 - 16:26
но быстрей будет как я писал тем более что у тебя уже есть ограничивающее условие |Условие(Номенклатура в СН);
   opus70
 
10 - 24.12.17 - 16:31
Функция ААА(Кол)
    если Кол<10 тогда
        возврат 1
иначе
Возврат 0
Конецесли;
КонецФункции

    |с НачДата по КонДата1; 
    |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент;    
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ ");
    |Группировка Номенклатура;
    |Условие(Номенклатура в СН);
    |Условие(ААА(Количество)=1)


//

вот так должно быть правильно 
смысл нужно в условие загнуть фукнцию которая будет проверять то что тебе нужно
 
 Рекламное место пустует
   Umka2008
 
11 - 24.12.17 - 16:48
(10) - как ты написал работает, но отбирает все товары, которые в документе продавались <10 штук
В итоге получается результат за месяц
Товар1 = 10
Товар2 = 30
Товар3 = 20 
А надо чтобы вышли товары у которых
Товар1 = 10
Товар2 = 10
Товар3 = 10
   Vladal
 
12 - 24.12.17 - 17:26
(11) Так в условии и написано "меньше 10". Поставь условие "равно 10".
   Umka2008
 
13 - 24.12.17 - 17:51
(12) как раз и поставил - и выводит все товары, которых в месяц продали 10,20,100 - то есть кратно 10
   opus70
 
14 - 24.12.17 - 17:54
чтоб получить правильный ответ нужно знать 70% ответа а в 30% сомневаться
вроде дал ответ согласно вопроса даже (6) пояснил что нет having в запросах 7.7 можно его с эмулировать но результат плох
я бы выбрал все что мне нужно 
применил бы фильтр ккокой мне нужен
затем полученные данные загнал бы втаблицузначений
а дальше используя любимый 1c++ и класс "ТаблицаГруппировок"
получил бы свои итоги и по группам и по иерархи справочника
   Остап Сулейманович
 
15 - 24.12.17 - 17:55
(13) Нифига у тебя не получится. В семерочном запросе условие можно ставить НА ЗАПИСЬ. А не на ИТОГ. Посему сначала нужно выбрать все итоги. И только потом фильтровать ту выборку, которая получилось.
   opus70
 
16 - 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
   opus70
 
18 - 24.12.17 - 18:09
|с НачДата по КонДата1; 
    |Док = Регистр.ОстаткиТМЦ.ТекущийДокумент;    
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоРасход = Расход(Количество) когда ((Док.Вид() = ""Реализация"") "+Условие+ ");
    |Группировка Номенклатура;
    |Условие(Номенклатура в СН);

запрос.выполнить();
Тзн = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(Тзн);
Тз1 = СоздатьОбъект("ТаблицаЗначений");
Тзн.Выгрузить(Тзн1);
Тзн1.УдалитьСтроки();
Тзн.ВыбратьСтроки();
Пока Тзн.Получитьстроку()=1 Цикл
 если Тзн1.КоличествоРасход =10 Тогда
     Тзн1.НоаяСтрока();
     Тзн1.Номенклатура  =Тзн.Номенклатура ;
 конецесли;
Конеццикла;

ТзнИтог = СоздатьОбъект("ТаблицаГруппировок");
        Тзн1.Выгрузить(ТЗИтог.ПолучитьБазовыйКласс());


ТзнИтог.Сгруппировать("Номенклатура","..,..");

Пока ТзнИтог.ВНачалоВыборки()
Пока ТзнИтог.Группировка(1)=1 Цикл
    .... вывод в отчет
Конеццикла;
   Umka2008
 
19 - 24.12.17 - 18:37
С 1cpp нет времени разбираться )))
Ок, раз нельзя Условие на Итоги  - сделал так
1.Выбрал все продажи в разрезе
Номенклатура, КолвоМесяц
2.Отобрал в СписокЗначений все товары = 10 шт из п.1
3.Наложил фильтр на свой отчет = |Условие(Номенклатура в СписокЗначений);
В итоге получился запрос с нужной Номенклатурой и правильными итогами по иерархии


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует