Имя: Пароль:
1C
 
Один запрос. Результат консоли <> Результат в СКД
,
0 dudell
 
07.06.16
17:47
Привет всем. С проблемой столкнулся. Вот такой запросик в консоли и в СКД выдает разные результаты. Происходит подсчет строк номенклатуры из документа. А затем происходит группировка по пользователю. Консоль выдает верный результат. А в СКД отражаются данные, будто строчки помеченной * в запросе нет. Т.е. будто в первом подзапросе различные строки номенклатуры сгруппировывались только по пользователю. Здесь нет виртуальных таблиц. Кто-нибудь сталкивался с подобным поведением? Версия платформы 8.3.7.2008

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

СГРУППИРОВАТЬ ПО
    ЗаписиТСД.Пользователь,
    ЗаписиТСД.ИсходныйДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Данные.Пользователь,
    СУММА(ВТ_Данные.СтрокНоменклатур) КАК СтрокНоменклатур
ИЗ
    ВТ_Данные КАК ВТ_Данные

СГРУППИРОВАТЬ ПО
    ВТ_Данные.Пользователь
1 Nuobu
 
07.06.16
17:50
(0) СКД удаляет эту строчку, т.к. она НЕ используется в результирующем запросе.
2 profitmaker
 
07.06.16
17:50
А ты посмотри структуру отчета в СКД, если там это поле не выбрано, то СКД прежде чем выполнить запрос в момент когда происходит КомпоновщикМакета.Выполнить() меняет сам запрос в Наборе данных, и просто напросто выкинет это поле из запроса, потому как оно в отчете не используется.
3 mehfk
 
07.06.16
17:51
Воспользуйся консолью СКД, которая покажет тебе реальный запрос.
4 profitmaker
 
07.06.16
17:51
Чтобы этого избежать, если используешь Автозаполнение, необходимо у роли этого поля в СКД поставить птичку "Обязательное". Тогда СКД его выкидывать не будет.
5 xxTANATORxx
 
07.06.16
17:51
(0)это нормально, просто фича
в чем вопрос?
6 dudell
 
07.06.16
19:46
(4) Запрос состоит из временной таблицы, (где я подготавливаю данные и сворачиваю ресурс по двум измерениям) и итогового подзапроса (где я сворачиваю ресурс только по одному измерению). В СКД соответственно отображаются данные итогового подзапроса. Там присутствует только поля Пользователь и СтрокНоменклатур. ИсходныйДокумент мы там не отображаем. Соответственно как я могу поставить для этого поля галочку "Обязательное"?
7 dudell
 
07.06.16
20:18
(2)(3) Действительно, в консоли СКД в итоговом запросе формируемом системе в первом моем подзапросе поле ИсходныйДокумент удалено. О_о. Только я не понял - как указать системе что это нужное поле и чтобы она его не трогала?
8 dudell
 
07.06.16
21:10
В общем, насколько я понял, нужно каким-то образом эти незначимые для итогового отображения поля протащить до итогового подзапроса и тогда они отобразятся в наборе данных и тогда можно будет установить для них флаг автозаполнения  "Обязательный". В моем случае например в итоговом подзапросе добавить агрегатную функцию Максимум(ИсходныйДокумент)
Но это идиотизмом попахивает.
9 vicof
 
08.06.16
01:07
И зачем тебе этот исходный документ,  если ты его все равно не выводишь?
10 dudell
 
08.06.16
08:52
(9) В разрезе этого измерения в первой таблице высчитываются количества различных строк. Это измерения влияет на итоговый результат агрегатной функции первого подзапроса.
11 1dvd
 
08.06.16
08:57
(10) не должен влиять. Это не виртуальная таблица.

У тебя скорее всего не попадают Документы на конец дня :59:59
12 1dvd
 
08.06.16
08:58
Хотя, если он и из группировок удаляет, то влияет, да
13 catena
 
08.06.16
09:09
(10)Добавь документ во второй запрос, поставь ему обязательность, группируй при выводе
14 dudell
 
08.06.16
13:26
(13) Спасибо. В посте (8) я уже итог написал. Остается вопрос только WTF? Что за неожиданное поведение системы такое? Как она может удалять поле, которое является измерением по групповым полям? Т.е. она заведомо превращает твой запрос в неверный. Запрос, который я привел - это уже максимально локализованный участок большого запроса. А в огромном запросе - как найти вот такие фокусы системы? Да и ваще почему я должен искать такие фокусы? не знаю риторические это вопросы или есть какой-то методический ответ.
15 catena
 
08.06.16
13:39
(14)СКД - система универсальная и, как любая универсальная система, имеет свои недостатки. Например, во имя оптимизации, выбрасывает неиспользуемые поля. Все претензии к разработчикам.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.