Эффективное обращение к виртуальной таблице «Остатки»
<em>Область применения: управляемое приложение, мобильное приложение, обычное приложение.</em>Пример.. НЕПРАВИЛЬНО. ПРАВИЛЬНО
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Эффективность обращения к виртуальным таблицам во многом зависит от того, как построено обращение к этой таблице. Стандарт Обращения к виртуальным таблицам описывает общие требования и рекомендации по работе с виртуальными таблицами. В этом стандарте изложены дополнительные рекомендации по повышению эффективности обращения к виртуальной таблице Остатки регистров накопления и бухгалтерии.
При обращении к любой виртуальной таблице платформа 1С:Предприятие генерирует запрос к СУБД, содержащий вложенный запрос. Самым эффективным вложенным запросом для чтения остатков будет чтение хранимой таблицы текущих остатков без применения группировки по измерениям. Платформа 1С:Предприятие сгенерирует такой запрос, если будут соблюдены все перечисленные ниже условия:
-
получение остатков ведется без указания даты;
-
не используется разделение итогов (необходимо учитывать при использовании такого режима может снижаться параллельность записи в регистр. См. также Режим разделения итогов для регистров накопления, Режим разделения итогов для регистров бухгалтерии);
-
внешний по отношению к виртуальной таблице запрос использует все измерения (в предложении ВЫБРАТЬ или в условиях соединения).
Пример.
Регистр накопления ОстаткиТовара содержит два измерения: Склад и Номенклатура, а также ресурс Количество. Необходимо запросом получить список всей номенклатуры, с указанием количества товаров на конкретном складе.
НЕПРАВИЛЬНО
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиТоваров.Остаток, 0 ) КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНИЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&СегодняшняяДата, Склад = &Склад) КАК ОстаткиТоваров ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка
В этом запросе:
-
в условия виртуальной таблицы передана дата, поэтому будет использована не только хранимые таблицы остатков, но и таблица движений. Т.к. необходимо получить текущие остатки, то дату в запрос передавать не нужно;
-
измерение Склад не используется во внешнем по отношению к виртуальной таблице запросе, поэтому вложенный запрос остатков будет содержать группировку этому измерению.
ПРАВИЛЬНО
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиТоваров.Остаток, 0 ) КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНИЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК ОстаткиТоваров ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка И ОстаткиТоваров.Склад = &Склад