[РЕШЕНО] Запрос долго выполняется

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 27 дек 2017.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Всем доброго времени суток.
    Платформа: 1С:Предприятие 8.3 (8.3.10.2561)
    Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.50.19) (http://v8.1c.ru/buhv8/)

    Есть запрос:

    Код:
    ВЫБРАТЬ
        ДополнительныеСведения.Объект.Ссылка КАК НоменклатураСсылка,
        ДополнительныеСведения.Значение КАК Артикул
    ИЗ
        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
        ДополнительныеСведения.Свойство = &ДопСвойство
        И ДополнительныеСведения.Значение В(&мАртикул)
    Запрос вроде бы примитивный. Но очень долго выполняется. Решил проверить в консоли запросов.
    В условие ДополнительныеСведения.Значение В(&мАртикул) вместо массива подставляю два артикула.
    Это когда запрос выполняется первый раз, при последующих время выполнения в среднем 0,15 сек.
    Хотел посмотреть план выполнения запросов (не знаю правда чем мне это поможет). Но при попытке поставить галочку получаю:

    upload_2017-12-27_12-35-29.png
    1С Запускаю от имени администратора.1С данный файл пытается создать на локальной машине или на сервере?

    И всё таки почему запрос так медленно работает?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.213
    Симпатии:
    961
    Баллы:
    204
    Вероятно, из-за:

    ДополнительныеСведения.Объект.Ссылка - за это на экзаменах сразу неуд ставят :)
    Dem0lisher нравится это.
  3. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.251
    Симпатии:
    100
    Баллы:
    104
    Действительно почему Объект.Ссылка?
    У вас там что может быть не только ссылка, но и сам объект? Перестраховались? =)
    Ну если нужно выбрать только ссылки на номенклатуру - "ГДЕ Объект ССЫЛКА Справочник.Номенклатура"
    Peroman нравится это.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.213
    Симпатии:
    961
    Баллы:
    204
    Еще и Значение выражать нужно в условиях отбора ибо там очень много типов может быть.
  5. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Да нет мне только ссылка на номенклатуру и нужна.
    --- Объединение сообщений, 27 дек 2017 ---
    В смысле? Как это можно выразить если Тип "Характеристика.ДополнительныеРеквизитыИСведения"?
    Последнее редактирование: 27 дек 2017
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.213
    Симпатии:
    961
    Баллы:
    204
    В прямом, делать:
    Код:
    ...И Выразить(ДополнительныеСведения.Значение, <НУЖНЫЙ_ТИП_Значения>) В(&мАртикул)
    Этот тип у Свойство, его выражать не нужно.
    Peroman нравится это.
  7. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Этот тип у значения:

    upload_2017-12-27_13-30-30.png
  8. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Всем спасибо за помощь. Вы, тут я смотрю знатоки запросов. А я полный ноль. Может есть ссылки на литературу, видео, сайт с рекомендациями, - как писать правильные и оптимальные запросы, в 1С.
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.213
    Симпатии:
    961
    Баллы:
    204
    Тип Характеристика.ДополнительныеРеквизитыИСведения - это составной тип.
    Определяется свойствами объекта ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения
  10. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    А как не использовать такую конструкцию? Вдруг буду когда-то сдавать экзамен. Мне же нужна ссылка.
    Я так понимаю, что даже если я делаю так:
    Код:
    ВЫБРАТЬ
        ДополнительныеСведения.Объект.Ссылка КАК НоменклатураСсылка,
        ДополнительныеСведения.Значение КАК Артикул
    ИЗ
        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
        Объект ССЫЛКА Справочник.Номенклатура
    
    то завалю экзамен или нет?
  11. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.832
    Симпатии:
    498
    Баллы:
    104
    Секция ГДЕ накладывает отбор на уже готовый набор данных.
    Нужно использовать конструкцию ВЫРАЗИТЬ

    Пишу на коленке. На память не помню как правильно надо. Что-то типа этого.
    Код:
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДополнительныеСведения.Объект.Ссылка КАК Справоник.Номенклатура) КАК НоменклатураСсылка,
        ДополнительныеСведения.Значение КАК Артикул
    ИЗ
        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
        Объект ССЫЛКА Справочник.Номенклатура
  12. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Данная конструкция не дает прироста к скорости запроса. Что так, ччто просто
    Код:
    ДополнительныеСведения.Объект.Ссылка  КАК НоменклатураСсылка,
    По времени одинаково выполняется
  13. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.349
    Симпатии:
    87
    Баллы:
    54
    Код:
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДополнительныеСведения.Объект КАК Справоник.Номенклатура) КАК НоменклатураСсылка,
    Карл !
    Peroman нравится это.
  14. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    В моём случае это Строка(100). Правильно я понимаю что в этом случае надо так:
    Код:
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДополнительныеСведения.Объект.Ссылка КАК Справочник.Номенклатура) КАК НоменклатураСсылка,
        ВЫРАЗИТЬ(ДополнительныеСведения.Значение КАК СТРОКА(100)) КАК Артикул
    ИЗ
        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
        ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура
        И ДополнительныеСведения.Свойство = &ДопСвойство
        И ДополнительныеСведения.Значение В (&мАрт)
  15. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.832
    Симпатии:
    498
    Баллы:
    104
    Уберите .Ссылка
  16. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.007
    Симпатии:
    24
    Баллы:
    29
    Ну да. Без обращения к ссылке быстрее, более чем в 4 раза
  17. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.349
    Симпатии:
    87
    Баллы:
    54
    И получаете ссылку на номенклатуру, в измерении "Объект" могут быть только ссылки (в данном случае) на объекты справочников и документов
  18. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.213
    Симпатии:
    961
    Баллы:
    204
    Скажу больше: в ИБ храняться ТОЛЬКО ссылки на объекты, а не сами объекты :)

    В вашем случае нужно делать так:

    Код:
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДополнительныеСведения.Объект КАК Справочник.Номенклатура) КАК НоменклатураСсылка,
    ИЗ
        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
        ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура
        И ДополнительныеСведения.Свойство = &ДопСвойство
        И ВЫРАЗИТЬ(ДополнительныеСведения.Значение КАК Строка(100)) В (&мАрт)

Поделиться этой страницей