Имя: Пароль:
1C
1C 7.7
v7: Результат запроса - вывод нулевых группировок?
,
0 Злопчинский
 
31.01.13
16:00
Туплю по страшному..
.
Простой запрос
.
Период с ДатаНачала по ДатаНачала;
СвойствоКонтр                = Регистр.дВзаиморасчеты.Договор.Владелец.дМенеджер;
Контрагент                    = Регистр.дВзаиморасчеты.Договор.Владелец;
Договор                    = Регистр.дВзаиморасчеты.Договор;
КодОперации                = Регистр.дВзаиморасчеты.КодОперации;
ТипВзаиморасчета            = Регистр.дВзаиморасчеты.ТипВзаиморасчета;
ДолгПокупателя                    = Регистр.дВзаиморасчеты.СуммаРуб;
Функция ДолгПокупателяКонОст    = КонОст(ДолгПокупателя);
Условие(ТипВзаиморасчета=1);
Группировка Контрагент без групп;
Группировка Договор без групп;
.
Почему в результат запроса попадают группировки с нулевыми значениями функции..?
1 Ёпрст
 
31.01.13
16:01
не верю
2 Ёпрст
 
31.01.13
16:02
на какой группировке смотрешь останки то хоть ?
3 PALESIA
 
31.01.13
16:08
(0)Пробуй так:
Период с (ДатаНачала+1);
Функция ДолгПокупателяКонОст = НачОст(ДолгПокупателя);
4 Злопчинский
 
31.01.13
16:09
Ёпрст, ситуация такая:
.
по Фирме1 = долг=-100
по Фирме2 = долг= 100
.
но в запросе ни группировок, ничего по фирме - нет...
???
.
однако если вставить условие
Условие(Запрос.ДолгПокупателяКонОст>0);
- выводит положительные долги, если меньшенуля - выводит отрицательные...
...
по моему разумению вообще такого быть не должно..?
5 Злопчинский
 
31.01.13
16:10
Тестовый вывод такой:
.
   ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений");
   Запрос.Выгрузить(ТЗЗапрос,0,1);
   ПечатьТЗ(ТЗЗапрос);
   Т = СоздатьОбъект("Текст");
   Т.ДобавитьСтроку(ТекстЗапроса);
   Т.Показать("ТекстЗапроса",);
   Возврат;
6 Злопчинский
 
31.01.13
16:11
..ниччего не понимаю.. совсем тупой...
7 Vladal
 
31.01.13
16:12
Погодь... По разным фирмам разный остаток, а вместе ноль.
Добавь группировку по фирмам.
8 PALESIA
 
31.01.13
16:13
(6) котик, миленький ... ну сделай как в (3) : нет движухи - нет проблем)
9 Злопчинский
 
31.01.13
16:14
(7) ну так мне нужно как раз без группировки по фирмам!
10 Злопчинский
 
31.01.13
16:15
(8) неактуально. в результат попадает мертвый клиент, по которому движухи уже несколько месяцев нет, только хвосты висят..?
11 Злопчинский
 
31.01.13
16:16
м.б. мешает то, что в качестве измерения регитсра ТипВзаиморасчета - базовый тип число?
12 PALESIA
 
31.01.13
16:18
(10) О_О так он и в (0) паподет ... зачистить проблема?
13 Злопчинский
 
31.01.13
16:19
(7) с группировкой по фирмам - все получается как положено.. - плюсы на одной, минусы на другой...
14 Злопчинский
 
31.01.13
16:19
(12) это почему он в (0) должен попасть..?
15 PALESIA
 
31.01.13
16:21
(14) а счего бы нет? НачОст(Дата+1) = КонОст(Дата) ... м-да .. . точно тупишь ..
16 miki
 
31.01.13
16:25
имхо, условие всё портит.
17 Злопчинский
 
31.01.13
16:25
(3) не получится - период вывалится за ТА
18 Злопчинский
 
31.01.13
16:26
(16) пофиг, вообще упростил.
.

Период с ДатаНачала по ДатаНачала;
Контрагент                    = Регистр.дВзаиморасчеты.Договор.Владелец;
Договор                    = Регистр.дВзаиморасчеты.Договор;
ДолгПокупателя                    = Регистр.дВзаиморасчеты.СуммаРуб;
Функция ДолгПокупателяКонОст    = КонОст(ДолгПокупателя);
Группировка Контрагент без групп;
Группировка Договор без групп;
19 Злопчинский
 
31.01.13
16:26
результат тот же самый...
20 PALESIA
 
31.01.13
16:28
(17) мне бы твои проблемы с ТА ... вообщем как хочешь - мое дело предложить ...
21 Злопчинский
 
31.01.13
16:29
(20) ради тебя - попробую
22 miki
 
31.01.13
16:30
(19)т.е. вываливаются контрагенты, по которым пустые группировки по договорам? Контрагент есть, а вложенная группировка по договорам пустая?
23 Злопчинский
 
31.01.13
16:30
(20) -  Невозможно обращение к итогам после ТА
24 Злопчинский
 
31.01.13
16:31
(22) да, результат нулевой и на уровне контрагента и на уровне договора (и это правильно) - но вываливаются в итог запроса
25 PALESIA
 
31.01.13
16:32
(23) пля .... мать... мать ... да сдвинь ТА на день - норм челы ТА всегда на конец 1-го числа ставят - моло-ли ...
26 aka AMIGO
 
31.01.13
16:32
(24) условие поставь при обходе.. отбросишь нули
27 Злопчинский
 
31.01.13
16:32
убрать группировку по договору - вываливаются с нулевым итогом по клиенту...
28 miki
 
31.01.13
16:35
(27)Это нормально, если перекрывается +/- по договорам, у тебя же измерение не контрагент, а договор.
29 Злопчинский
 
31.01.13
16:36
Итого, на данный момент:
.
//
Период с ДатаНачала по ДатаНачала;
Контрагент                    = Регистр.дВзаиморасчеты.Договор.Владелец;
ДолгПокупателя                    = Регистр.дВзаиморасчеты.СуммаРуб;
Функция ДолгПокупателяКонОст    = КонОст(ДолгПокупателя);
Группировка Контрагент без групп;
//
// Если ошибка в запросе, то выход из процедуры    
Если Запрос.Выполнить(ТекстЗапроса) = 0
Тогда
   Возврат;
КонецЕсли;    
   
ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗЗапрос,0,1);
ПечатьТЗ(ТЗЗапрос);
Т = СоздатьОбъект("Текст");
Т.ДобавитьСтроку(ТекстЗапроса);
Т.Показать("ТекстЗапроса",);
Возврат;
//
Результат - в итогах по клиентам - записи с нулевым значением...
30 Злопчинский
 
31.01.13
16:38
(28) почему тогда с группировкой по договорам - та же самая хрень..?
31 shadowfiend10
 
31.01.13
16:38
(29) Сгруппируй еще по какомуто измерению регистра, может действительно перекрываются?
32 1Сергей
 
31.01.13
16:39
(29) сталкивался с таким на SQL, не победил
33 Злопчинский
 
31.01.13
16:40
(25) блин, ТА - стоит на 31.01
дата отчет ради тебя = 30.01
.

Период с (ДатаНачала+1) по (ДатаНачала+1);
Контрагент                    = Регистр.дВзаиморасчеты.Договор.Владелец;
Договор                    = Регистр.дВзаиморасчеты.Договор;
ДолгПокупателя                    = Регистр.дВзаиморасчеты.СуммаРуб;
Функция ДолгПокупателяКонОст    = НачОст(ДолгПокупателя);

Группировка Контрагент без групп;
Группировка Договор без групп;

- резултат тот же самый.
34 Злопчинский
 
31.01.13
16:41
(32) дбф ная база
35 shadowfiend10
 
31.01.13
16:42
(34) сгруппируй по другим измерениям, увидишь +/- если таковые есть
36 Злопчинский
 
31.01.13
16:42
как-тоя предполагал, что если на уровне группировки (самом нижнем) = функция возвращает ноль, то в результат запроса это не должно попасть...
.
туплю где-то или что-то не так в базе...?
37 PALESIA
 
31.01.13
16:44
(29) лан, убормотал - не поленись, допиши ремы - и будет тебе счастье:

ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений");
   // создание колонок таблицы
   
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса = "Период с ДатаНачала по ДатаНачала;
   |СвойствоКонтр                = Регистр.дВзаиморасчеты.Договор.Владелец.дМенеджер;
   |Контрагент                    = Регистр.дВзаиморасчеты.Договор.Владелец;
   |Договор                     = Регистр.дВзаиморасчеты.Договор;
   |КодОперации                 = Регистр.дВзаиморасчеты.КодОперации;
   |ТипВзаиморасчета             = Регистр.дВзаиморасчеты.ТипВзаиморасчета;
   |ДолгПокупателя                    = Регистр.дВзаиморасчеты.СуммаРуб;
   |Функция ДолгПокупателяКонОст     = КонОст(ДолгПокупателя);
   |Условие(ТипВзаиморасчета=1);
   |Группировка Контрагент без групп;
   |Группировка Договор без групп; ";
   
   Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
       Пока Запрос.Группировка(1) = 1 Цикл
           Пока Запрос.Группировка(2) = 1 Цикл
               Если Запрос.ДолгПокупателяКонОст <> 0 Тогда
                   
                   ТЗЗапрос.НоваяСтрока();
                   // заполнение строк таблицы
                   
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЕсли;
38 Злопчинский
 
31.01.13
16:44
(35) да так и есть - см.4 - если сделаю группировку по фирме - то все ок как и положено.
но я то хочу получить итоги в целом по "холдингу", без фирм - итог схлопывается в ноль, в выводе по идее - быть не должно..???
39 miki
 
31.01.13
16:44
(30)хз. Сделай с договорами, но без условия.
40 Злопчинский
 
31.01.13
16:45
(37) архимед, блин, это яи без тебя могу...
41 Злопчинский
 
31.01.13
16:46
(39) см.18 - пофиг
42 Злопчинский
 
31.01.13
16:47
срочно убегаю часа на полтора.
вся надежда на доктораДобро и супермозг Епрста, может глянет по тиму...
.
вернусь - выйду на связь
43 miki
 
31.01.13
16:48
(38)быть не должно, если  на этапе вычисления результат функции = 0, а не после наложения фильтров (если фильтры не по измерениям).
(41)хз. полтергейст...
44 Ёпрст
 
31.01.13
16:49
(0)
>>>однако если вставить условие
>>>Условие(Запрос.ДолгПокупателяКонОст>0);

это собственно ответ на твой вопрос
45 PALESIA
 
31.01.13
16:52
(44) и все уйдет на перса ... хотя на хрена ему скорость)
46 Ёпрст
 
31.01.13
17:34
Это пересчитай итоги + смотри, что возвращает ВыгрузитьИтоги()
47 Ёпрст
 
31.01.13
17:35
и не пользуйся чорными запросами
:)
48 Злопчинский
 
31.01.13
19:08
(47) я понимаю, что не прав, но что есть то есть...
49 Злопчинский
 
31.01.13
19:08
я почему в сомнениях - штатный Ведомость по контрагентам в этом случае выводит все правильно - свернутый ноль не выводится - сейчас буду смотреть - как это там...
50 Злопчинский
 
31.01.13
19:13
ВыгрузитьИтоги на ТА - показывает правильные данные
51 Злопчинский
 
31.01.13
19:31
(49) соврал, ведомость по контрагентам - аналогично...
52 Злопчинский
 
31.01.13
19:43
Значится получается так в итоге: в чорном запросе свернутые по одному из измерений нулевые итоги отфильтровать возможности нет, функция в запросе применяется не к сгруппированным данным, а записям исходной выборки и только после этого происходит группировка с выдачей результатов...
53 uno-group
 
31.01.13
19:59
Контрагент= Регистр.дВзаиморасчеты.Договор.Владелец;
замени на если там есть конечно такой реквизит
Контрагент= Регистр.дВзаиморасчеты.Контрагент
54 uno-group
 
31.01.13
20:00
и что эт у тебя за конфа такая что по разным фирмам 1 договор
55 Злопчинский
 
31.01.13
20:10
(53) нет там такого.
56 Злопчинский
 
31.01.13
20:12
(54) с точки зрения клиента - он видит одно юрлицо. и расчеты ведет с этим юрлицом. С точки зрения НУ в одном юрлице - есть отдельные субъекты налогообложения, и учет по каждому должен идти отдельно - такое объяснение тебя устроит?
2 + 2 = 3.9999999999999999999999999999999...