Имя: Пароль:
1C
1C 7.7
v7: Чёрный запрос - как отфильтровать лишнее
0 Злопчинский
 
02.11.16
16:48
77, файловая
Есть Регистр.Заказы, оборотный
есть запрос
    |Период с ДатаН;
    |
    |Заказ         = Регистр.Заказы.Заказ;
    |Номенклатура     = Регистр.Заказы.Номенклатура;
    |КолЗаказано     = Регистр.Заказы.Заказано;
    |КолОтгружено     = Регистр.Заказы.Отгружено;
    |
    |Функция Заказано = Сумма(КолЗаказано);
    |Функция НеОтгружено = Сумма(КолЗаказано-КолОтгружено);
    |
    |Группировка Номенклатура Без Упорядочивания Без Групп;
    |Условие(Заказ в ВыбДок);

вот это: Функция Заказано = Сумма(КолЗаказано);
введено потому что иначе результат запроса получается пустой.

в результате в итоге запроса имеем все записи по заказу, в т.ч. и отгруженные полностью (это вообщем-то понятно): http://screencast.com/t/yfQT7hm3W

вопрос: как сделать запрос, чтобы остались только те записи где НеОтгружено<>0
??
1 Волшебник
 
модератор
02.11.16
16:49
Переходи на восьмёрку, там это реализовано
2 aka AMIGO
 
02.11.16
16:51
(0) зачем загромождать запрос? ИМХО - обработка в цикле решит проблему..

(1) ты забыл копирайт: © :)
4 aka AMIGO
 
02.11.16
16:53
(0) извини, конец рабочего дня, туплю..
5 aka AMIGO
 
02.11.16
16:54
Еще раз ступлю:

|Условие((Заказ в ВыбДок) И (НеОтгружено<>0));

И - домой :)
6 Злопчинский
 
02.11.16
16:57
(5) проверял?
7 Злопчинский
 
02.11.16
16:58
(1) не нужен пока мне этот ваш неповоротливый и глючный монстр
8 Волшебник
 
модератор
02.11.16
16:58
(7) Да, восьмёрка ещё сыровата...
9 Джинн
 
02.11.16
17:00
Применение Когда в функции не помогает? Забыл уже это окаменелое дерьмо мамонта :(
10 Злопчинский
 
02.11.16
17:00
(5) не прокатит, поле не определено
11 Злопчинский
 
02.11.16
17:02
(9) а куда и какое (по смыслу) когда впихивать?

Ёпрст, ты где...?!
12 Slypower
 
02.11.16
17:02
(6) я проверят так: брал сумму из дока в запросе и пихал в условие: (сумма<>0). Обрабатывает. Только отдельным условием писал
13 Slypower
 
02.11.16
17:03
(11) пример
|Функция КонОстП = КонОст(Сумма)Когда((ПустоеЗначение(ДатаОплаты(КредДокумент)) = 0)и(ДатаОплаты(КредДокумент) < ДатаКонца));";
14 Slypower
 
02.11.16
17:05
|Функция НеОтгружено = Сумма(КолЗаказано-КолОтгружено)Когда(КолЗаказано<>КолОтгружено);
15 Злопчинский
 
02.11.16
17:07
(14) попробую...
16 Ёпрст
 
02.11.16
17:14
(0) тебе условие это нужно для группировки по номенклатуре ?
Не сделаешь просто так. В запросе нет havinga, там простое where будет для каждого движения регистра.

Делай прямой запрос. и там - что угодно
17 Ёпрст
 
02.11.16
17:16
даже
|Условие(Запрос.Неотгруженно<>0);
не спасёт, ибо это условие вычисляется при каждом вычислении функции
18 Злопчинский
 
02.11.16
17:20
(16) нет, просто для получения "признака" что заказ отгружен не полностью - для этого смотрю еслт ли неотгруженное
19 Злопчинский
 
02.11.16
17:20
(17) это я в самом начале выяснил
20 Ёпрст
 
02.11.16
17:21
в любом случая, в запросе не выйдет. Ну попробуй (17), так, на шару.
21 Ёпрст
 
02.11.16
17:21
а у тя там, примитивный select ...from group by having
22 Ёпрст
 
02.11.16
17:21
делай прямой запрос или фильтруй ТЗ.
23 Ёпрст
 
02.11.16
17:22
или ИТЗ
24 Джинн
 
02.11.16
17:22
(18) Структура регистра изначально неправильная. Достаточно было одного ресурса и приход/расход. Тогда КонОст по регистру выдал бы не отгруженные.
25 Злопчинский
 
02.11.16
17:22
(14) не взлетело
26 Злопчинский
 
02.11.16
17:25
(24) думал над этим в самом начале. но там еще ресурсы - запланировано, отобрано, промаркировано - все придется выводить в ноль, геморно имхо.
27 Злопчинский
 
02.11.16
17:25
(20) это я еще в самом начале попробовал...
28 Злопчинский
 
02.11.16
17:28
другой вопрос - нахрена в этом запросе из (0) обязательно должна быть
Функция Заказано = Сумма(КолЗаказано);
???
вопрос этот я уже подымал,
судя по всему если нет "прямой" функции как эта - которая вычисляется "на сервере", то есть при извлечении данных - то получается нулевой запрос, так как "сложные" функции типа
Функция НеОтгружено = Сумма(КолЗаказано-КолОтгружено);

вычисляются уже в темпах над полученным итогом запроса...
???
29 Злопчинский
 
02.11.16
17:28
(22) так и пришлось в итоге...
30 Ёпрст
 
02.11.16
17:33
(28)в клюшках, при запросе к регистру всегда должна быть функция, к оборотному Сумма, к останковому одна из НачОст/КонОст/Приход/Расход .. иначе считать нечего. Просто так записей запрос не выгребает
31 Ёпрст
 
02.11.16
17:34
ибо там идёт group by всегда (ибо обязательна группировка в тексте запроса), соответственна нужна функция. Ну, как-то так.
32 Злопчинский
 
02.11.16
17:38
(30) эээ в этом запросе (0) если выкинуть функцию
Функция Заказано = Сумма(КолЗаказано);

останется еще функция с Сумма - но при этом результат будет нулевой... условие наличия функции Сумма - не катит...
??
33 Джинн
 
02.11.16
17:39
(26) Одно измерение со статусом. И движения - ушло с одним-пришло с другим. В итоге в ноль выйдет.
34 Ёпрст
 
02.11.16
17:41
(32) нулевой, это какой? Когда что в запросе оставляешь ?
35 Злопчинский
 
02.11.16
17:42
(34)     |Период с ДатаН;
    |
    |Заказ         = Регистр.Заказы.Заказ;
    |Номенклатура     = Регистр.Заказы.Номенклатура;
    |КолЗаказано     = Регистр.Заказы.Заказано;
    |КолОтгружено     = Регистр.Заказы.Отгружено;
    |
    |Функция НеОтгружено = Сумма(КолЗаказано-КолОтгружено);
    |
    |Группировка Номенклатура Без Упорядочивания Без Групп;
    |Условие(Заказ в ВыбДок);


дает нулевой итог, что неверно
36 Ёпрст
 
02.11.16
17:46
И без условия Условие(Заказ в ВыбДок); тоже ?
Странно, должны быть данные
37 Ёпрст
 
02.11.16
17:47
Хотя не помню я уже, можно в профайлере посмотреть, какой запрос будет. Там усё понятно, почему так или иначе :)
38 Slypower
 
02.11.16
17:48
(35) Заказ - это документ? Может нужно
Заказ         = Регистр.Заказы.Заказ.ТекущийДокумент();
т.к. выбдок-явно реквизит Документ
39 Злопчинский
 
02.11.16
17:51
(38) не, тут все норм
40 Злопчинский
 
02.11.16
17:53
(36) можно и услвие по документу заремить, нулевой итог.
41 Злопчинский
 
02.11.16
17:53
дбфная база, не скульная. фиг ты там чего профайлером посмотришь... (?)
42 Кокос
 
02.11.16
17:57
вдруг неожиданно понял что забыл 77 :)
43 Злопчинский
 
02.11.16
18:06
(42) это свойственно людям. все ошибаются.. ;-)
44 Кокос
 
15.11.16
10:07
(43) эх. а были времена )
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.