Имя: Пароль:
1C
1С v8
Почему может не работать СУММА() в СКД?
0 jk3
 
09.11.11
15:36

ВЫБРАТЬ
   СУММА(1) КАК Количество,
   Потребители.ПотребительУслугПодразделение,
   Потребители.ПотребительУслугНоменклатурнаяГруппа
ИЗ
   ВТРазличныеПоставщики КАК РазличныеПоставщики
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПотребители КАК Потребители
       ПО РазличныеПоставщики.ПоставщикУслугПодразделение = Потребители.ПотребительУслугПодразделение
           И РазличныеПоставщики.ПоставщикУслугНоменклатурнаяГруппа = Потребители.ПотребительУслугНоменклатурнаяГруппа

СГРУППИРОВАТЬ ПО
   Потребители.ПотребительУслугПодразделение,
   Потребители.ПотребительУслугНоменклатурнаяГруппа

В консоли запросов Количество = разные числа
В консоли отчетов с группировкой Детальные записи = везде единичка

КАК такое может быть?
1 jk3
 
09.11.11
15:49
Хотя бы идею какую-нибудь подкиньте ...
2 Господин ПЖ
 
09.11.11
15:50
>с группировкой Детальные записи

кагбынамекает...
3 g_frost
 
09.11.11
15:52
А может просто 1 как количество
а в СКД добавь количество в ресурс
4 acsent
 
09.11.11
15:53
Количество - ресурс?
5 jk3
 
09.11.11
15:53
(2) Чего намекает?
Такой же вывод простым списком, как в консоли запросов.
6 jk3
 
09.11.11
15:55
(3)(4) пробовал добавлять Количество в ресурс с выражением МАКСИМУМ(Количество) с нулевым эффектом.

Мне не надо ресурсом ничего суммировать, просто вывести линейным списком то, что получилось в результате запроса.
7 AAlexandra
 
09.11.11
16:01
(0) а ВТРазличныеПоставщики и ВТПотребители как формируются?
Отборы накладываешь в запросе?
8 jk3
 
09.11.11
16:03
(7) А эти обе таблицы формируются из другой общей временной таблицы, только по разному группируются.

Кому интересно, вот так:

ВЫБРАТЬ РАЗЛИЧНЫЕ
   База.ПоставщикУслугПодразделение,
   База.ПоставщикУслугНоменклатурнаяГруппа
ПОМЕСТИТЬ ВТРазличныеПоставщики
ИЗ
   ВТБаза КАК База
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   База.ПоставщикУслугПодразделение,
   База.ПоставщикУслугНоменклатурнаяГруппа,
   База.ПотребительУслугПодразделение,
   База.ПотребительУслугНоменклатурнаяГруппа
ПОМЕСТИТЬ ВТПотребители
ИЗ
   ВТБаза КАК База
ГДЕ
   База.ПотребительУслугСчет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ВспомогательныеПроизводства)

СГРУППИРОВАТЬ ПО
   База.ПоставщикУслугПодразделение,
   База.ПоставщикУслугНоменклатурнаяГруппа,
   База.ПотребительУслугПодразделение,
   База.ПотребительУслугНоменклатурнаяГруппа
;
9 DmitrO
 
09.11.11
16:03
может просто так:
Количество(*) КАК Количество,
то что надо будет? :)
10 jk3
 
09.11.11
16:07
(9) Нет. Не помогает.
Результат тот же: в конструкторе запросов всё нормально, в СКД косяк.
11 jk3
 
09.11.11
16:10
(2) Ваш выход, Маэстро.
12 Amiralnar
 
09.11.11
16:12
Используйте консоль СКД, и проанализируйте запрос формируемый в макете. Телепаты в отпуске.
13 AAlexandra
 
09.11.11
16:14
(10) База.ПоставщикУслугНоменклатурнаяГруппа, База.ПотребительУслугНоменклатурнаяГруппа из ВТПотребители где-то дальше используются? Если нет, СКД их уберет из запроса и при формировании твоей ВТПотребители получится запрос:

ВЫБРАТЬ
   База.ПоставщикУслугПодразделение,
   База.ПотребительУслугПодразделение,
ПОМЕСТИТЬ ВТПотребители
ИЗ
   ВТБаза КАК База
ГДЕ
   База.ПотребительУслугСчет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ВспомогательныеПроизводства)

СГРУППИРОВАТЬ ПО
   База.ПоставщикУслугПодразделение,
   База.ПотребительУслугПодразделение
;

Действительно единички останутся..
14 jk3
 
09.11.11
16:18
(13) Первый раз о таком самовольстве слышу.
ПотребительУслугНоменклатурнаяГруппа дальше используется, см (0)
15 AAlexandra
 
09.11.11
16:24
(13) В запросе: ПоставщикУслугПодразделение -> ПотребительУслугНоменклатурнаяГруппа

В принципе, лечится, например, добавлением в запрос (0) полей:
 КОЛИЧЕСТВО(Потребители.ПотребительУслугНоменклатурнаяГруппа) КАК Количество2,  
 КОЛИЧЕСТВО(Потребители.ПоставщикУслугНоменклатурнаяГруппа) КАК Количество3  

(14) СКД перед выполнением запроса анализирует его на предмет использования полей временных таблиц. И если поля в дальнейшем не используются - она их не вычисляет, "оптимизируя" запрос.
Все это на практике можно посмотреть в консоли СКД, как правильно посоветовали в (12), там на какой-то из вкладок можно увидеть итоговый запрос, который будет реально выполняться - он 100% отличается от твоего кода в (8).
16 AAlexandra
 
09.11.11
16:27
(15) надо 2 поля про поставщика добавить.. Опять промахнулась 8(
 КОЛИЧЕСТВО(Потребители.ПоставщикУслугПодразделение) КАК Количество2,  
 КОЛИЧЕСТВО(Потребители.ПоставщикУслугНоменклатурнаяГруппа) КАК Количество3
17 jk3
 
09.11.11
16:29
(15)(16) Да не помогает это всё.
ОК, буду пробовать в консоли СКД ковырять где там что "оптимизируется".
18 AAlexandra
 
09.11.11
16:31
(17) и в итоговую таблицу с детальными записями ты поля эти вывел, и все равно не помогает?
Значит обрезано еще выше, где твоя ВТБаза формируется.. Но смысл в том же.
19 jk3
 
09.11.11
16:53
(18) Всё верно. СКД слишком "умная".

Из таблицы ВТПотребители автоматически вырезаются поля

База.ПоставщикУслугПодразделение,
База.ПоставщикУслугНоменклатурнаяГруппа

т.к. они далее не используются.

Причем добавление в последний запрос строк

КОЛИЧЕСТВО(Потребители.ПоставщикУслугПодразделение) КАК КоличествоДляСКД1,
КОЛИЧЕСТВО(Потребители.ПоставщикУслугНоменклатурнаяГруппа) КАК КоличествоДляСКД2,

недостаточно!!!

Нужен именно вывод этих полей в результирующий табличный документ.

Как избежать этой оптимизации без вывода юзеру этих ничего не значащих полей?
20 acsent
 
09.11.11
16:58
Автозаполнение????
21 IronDemon
 
09.11.11
16:59
(19) Указать насильно эти поля.
{ВЫБРАТЬ
   ПоставщикУслугПодразделение,
   ПоставщикУслугНоменклатурнаяГруппа
22 jk3
 
09.11.11
17:20
(20) Автополе вы имеете ввиду? Не помогает.
(21) В какой именно запрос?
23 IronDemon
 
09.11.11
17:23
Выключи автозаполнение и укажи сам поля.
24 jk3
 
09.11.11
17:26
(23) Так я и так сам всегда вручную указываю поля.
Если в вовод включены колонки КоличествоДляСКД1 и КоличествоДляСКД2, то и Количество правильно считается.
Если в вывод НЕ включены колонки КоличествоДляСКД1 и КоличествоДляСКД2, то Количество везде = 1
25 unregistered
 
09.11.11
17:28
(24) Ты не понял.
Речь не об Автополе, а о галке Автозаполнение. Это в конструкторе СКД под текстом запроса.
26 jk3
 
09.11.11
17:34
(25) Ээээ, я просто эту галку никогда не снимал.
Когда снимаю, не могу добавить элемент вручную, только папку можно.
Что нужно сделать?
27 IronDemon
 
09.11.11
17:38
Закладка "Компоновка данных". Поля и Условия. Ну и для ВТ условия.
28 jk3
 
09.11.11
17:45
(27) Спасибо.
Всё получилось и со включенным автозаполнением.

Нужно только на полях КоличествоДляСКД1 и КоличествоДляСКД2 установить в колонке Роль галочку Обязательное.
Тогда даже без вывода этих колонок пользователю всё работает.

Всем спасибо за помощь!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший