Чей глюк?

  1. 9 г. назад

    Натолкнулся на неадекватное поведение запроса. Простейший пример:

    Снимок1.JPG

    Все правильно, получаю таблицу из 2 колонок и все записи. А теперь я хочу выбрать только одну колонку:

    Снимок2.JPG

    Вместо списка кодов я получаю всего один. Судя по скриншоту 1С "оптимизировала" запрос на создание ВТ.
    Не пойму или я дурак или разрабы платформы. Версия 1С:Предприятие 8.3 (8.3.5.1186)

    Ответы: (5) (10)
  2. Переходи на 7.7. Там такого млядства не было.

  3. Грешно смеяться над больными людьми.

  4. твой глюк

  5. В первом случае минимум существует для каждого контрагента из набора. Во-втором только один минимальный код из всех кодов.

  6. ТеньД Вместо списка кодов я получаю всего один.

    дык у тебя же там МИНИМУМ()

    Ответы: (7)
  7. 16.04.2015 15:51:34 отредактировано sf

    если ты хочешь только одну колонку с кодами - меняй только запрос выборки из ВТ, а не запрос создания ВТ

    Ответы: (8)
  8. (5)

    дык у тебя же там МИНИМУМ()

    У меня есть спр контрагентов с дублями. В ВТ собирается по одной твари с минимальным кодом. Дальше я эти коды хочу использовать для схлопывания дублей.

    Ответы: (10) (11)
  9. (6) Ничего не понял. Можешь пояснить?

    Ответы: (9) (10)
  10. (8) Формируешь виртуальную таблицу по варианту 1 и выбираешь из нее колонку Код без Минимум.

    Ответы: (12)
  11. 16.04.2015 15:58:45 отредактировано sf

    (8) то что ты хочешь в (0):

    Выбрать минимум (К.код) как код,
    К.Наименование
    Поместить ВТ
    ИЗ Справочник.Контрагенты КАК К
    Сгруппировать ПО Контрагенты.Наименование;
    Выбрать ВТ.Код Из ВТ

    ТеньД У меня есть спр контрагентов с дублями. В ВТ собирается по одной твари с минимальным кодом.

    какой-то странный подход ) а если два разных контрагента с одинаковым наименованием?
    Что дальше с кодами делать будешь?

  12. +(7) Пример
    В спр есть записи:
    "1" "Вася"
    "2" "Вася"
    "3" "Вася"
    "4" "Петя"
    "5" "Петя"
    "6" "Петя"

    В ВТ собирается:
    "1" "Вася"
    "4" "Петя"

    Хочу вынуть:
    "1"
    "4"

    а получаю:
    "1"

  13. (9) дык у него ВТ формируется одинаково, просто оптимизатор оптимизирует

  14. сделал код как в сабже. возвращает одну колонку с кодами.

    подозреваю, что построитель оптимизирует запрос

    Ответы: (14) (15) (18)
  15. (13) У тебя вернулись все коды или только один?

    Ответы: (18) (25)
  16. Stim подозреваю, что построитель оптимизирует запрос

    кэп? :)

    Ответы: (25)
  17. 16.04.2015 16:03:17 отредактировано alex_shkut
    ВЫБРАТЬ
    	МИНИМУМ(К.Код) КАК код,
    	К.Наименование
    {ВЫБРАТЬ
    	код,
    	Наименование}
    ПОМЕСТИТЬ ВТ
    ИЗ
    	Справочник.Контрагенты КАК К
    
    СГРУППИРОВАТЬ ПО
    	К.Наименование;
    Выбрать ВТ.Код Из ВТ
    Ответы: (17) (24)
  18. (16) И какой результат?

  19. ТеньД (13) У тебя вернулись все коды или только один?

    Все 100500 кодов, как и должно быть.
    Платформа 1443, обычная консоль запросов

    Ответы: (21)
  20. Не пойму, сегодня пятница?

  21. Офигеть! В обычной консоли все правильно!

    Ответы: (23)
  22. Stim Платформа 1443

    ?

  23. Фиксирую факт.
    Снимок3.JPG

    Ответы: (24) (25)
  24. (20) аккуратней надо быть с подобными мультитулами )

    Ответы: (26)
  25. 16.04.2015 16:12:42 отредактировано alex_shkut

    (22) -> (16) Попробуй мой вариант в своей консоли

    Ответы: (26)
  26. (22) так в (14), (15) - уже написали же, не?
    кстати, что за консоль? тип запроса с "построителя" можно поменять?

  27. (23) Впервые наступил на такой косяк с Инструментами Разработчика.
    (24) У меня аналогичный запрос, за минусом инструкций построителю в фигурных скобках.

    Ответы: (27)
  28. (26) Так вот я же и прошу попробовать с инструкциями, я где-то читал насчет оптимизатора.

    Ответы: (28)
  29. (27) Инструкции не изменили результат.

  30. Вот, нашел на devtrainigforum.v8.1c.ru:

    2) СКД исключает из запроса, создающего временную таблицу, все поля, которые не ипользуются в последующих запросах.

    Она исключает их отовсюду: из выборки, из группировки, из итогов. И удаляет именно из запроса, а не из итоговой (временной) таблицы.

    Зачем это сделано непонятно. Если ради оптимизации выборки из базы, то почему оптимизация не возложена на разработчика? Ведь в обычных запросах такого косяка нет. И управляемые блокировки тоже возложены на разработчика. А при создании запроса в СКД наверное фирма 1С решила что разработчик не в состоянии оптимизировать запросы сам и надо ему "помочь" :)))

    Решение: использовать хоть как то, хоть искуственным образом все поля из временных таблиц. Ну либо переделывать запрос, формирующий временные таблицы. Видимо разработчики платформы расчитывали на второй вариант.

    Ответы: (30)
  31. (29) Похоже ты нашел причину.
    Вот такой код работает как надо:

    ВЫБРАТЬ
    	МИНИМУМ(К.Код) КАК код,
    	К.Наименование КАК Наименование
    ПОМЕСТИТЬ ВТ
    ИЗ
    	Справочник.Контрагенты КАК К
    
    СГРУППИРОВАТЬ ПО
    	К.Наименование
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	ВТ.код КАК код
    ИЗ
    	ВТ КАК ВТ
    ГДЕ
    	ВТ.Наименование <> 0
  32. Ипать таких оптимизаторов! Ипать телеграфным столбом!

  33. а если завернуть в 100 виртуальных таблиц, смешивая их с реальными с соединениями и объединениями? ИИ скд не свихнется на оптимизации?

  34. Оптимизатор отслеживает поля, попавшие в выходную таблицу. Приключения 100 виртуальных таблиц игнорятся.

    Ответы: (34)
  35. (33) Правильно, все поля, которые не попали в выходную таблицу и не использовались для каких-либо вычислений (пустые запросы) будут просто вырезаны из предыдущих запросов.

или зарегистрируйтесь чтобы ответить!