8.х Запрос

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

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура РасходныеМатериалыМатериалПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.РасходныеМатериалы.ТекущиеДанные;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ХозрасчетныйДвиженияССубконто.Период,
    |    ХозрасчетныйДвиженияССубконто.СубконтоДт1,
    |    ХозрасчетныйДвиженияССубконто.Сумма,
    |    ХозрасчетныйДвиженияССубконто.КоличествоДт,
    |    ХозрасчетныйДвиженияССубконто.СчетДт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
    |ГДЕ
    |    ХозрасчетныйДвиженияССубконто.СчетДт = &СчетДт
    |    И ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &СтрМатериал";
    
    СчетДебет = ПланыСчетов.Хозрасчетный.СырьеИМатериалы;
    Запрос.УстановитьПараметр("СчетДт", СчетДебет);
    Запрос.УстановитьПараметр("СтрМатериал", СтрокаТабличнойЧасти.Материал);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    ЗапросСумма = Выборка.Сумма;
    ЗапросКолво = Выборка.КоличествоДт;
    КонецЦикла;
    
    СтрЦена = ЗапросСумма / ЗапросКолво;
    СтрокаТабличнойЧасти.Цена = СтрЦена;
    КонецПроцедуры
    
    Почему то этот запрос сильно тормозит. Тормоза возникают при его выполнении на строке Результат = Запрос.Выполнить();
    Как можно его оптимизировать?

    CPU 2.6GHz
    RAM 2GB
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Рекомендую ознакомиться с понятием виртуальных таблиц и их параметров. В данном случае - конструкция ГДЕ - корень зла.

    ЗЫ. Период установить бы не помешало.
    ЗЗЫ. Да и цену в запросе можно рассчитать.
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Да, в 1С хоть и попытались реализовать свой такой SQL но конструкция ГДЕ работает следующим образом:

    Сначала отбираются ВСЕ записи таблицы, а потом на них накладывается фильтр ГДЕ, это естесственно тормозит работу, попробуйте указать явно в параметрах таблицы:
    Код:
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто(ЗДЕСЬ ВАШИ ПАРАМЕТРЫ)
    
    И не забудьте ставить период!!!
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ну, вообще, ГДЕ и использование параметров могут дать разные результаты. Поэтому 1С правильно сделала :)

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