Книга: Настольная книга 1С:Эксперта по технологическим вопросам
Назад: 4.19.Работа с ЦУП. Регламентный мониторинг
Дальше: Пояснение к правилу 3 («ДЛЯ ИЗМЕНЕНИЯ»)

4.20.Работа в конфигураторе. Исправление запросов

Список правил

При написании запросов могут быть допущены методические ошибки. Ниже перечислены правила, которых следует придерживаться. Большинство из них надо соблюдать всегда, вырабатывая правильный стиль написания кода. Однако есть правила, соблюдение которых требуется только при переписывании проблемных запросов (почему – станет ясно при ознакомлении с правилами), и для таких случаев в списке указано: «При возникновении проблем на данном участке кода».

  1. Выбирать в запросе только то, что нужно.
  2. Понимать, что запрос через объектную модель может не соответствовать правилу 1. Зафиксирован случай, когда при получении ДокументСсылка.Проведен из базы на самом деле запрашивались все реквизиты документа. Один из реквизитов имел тип ХранилищеЗначения и большой размер данных в хранилище, поэтому запрос ДокументСсылка.Проведен выполнялся очень долго. Обычно, однако, это не мешает работе, но при возникновении проблем на данном участке кода надо писать запросы на языке запросов, а не пользоваться объектной моделью.
  3. При работе в автоматическом режиме блокировок при использовании конструкции ДЛЯ ИЗМЕНЕНИЯ надо указывать, какие таблицы блокировать, если в запросе участвует больше одной таблицы. Пояснения – в этой же главе ниже.
  4. Условия в запросе и индексы в базе должны друг другу соответствовать (при возникновении проблем на данном участке кода). Пояснения – в этой же главе ниже.
  5. При работе с виртуальными таблицами нужно использовать параметры виртуальных таблиц, а не выносить условия в секцию ГДЕ.
  6. Не применять избыточное агрегирование. Механизм виртуальных таблиц сам считает сумму, и так, как в примере, делать не надо:

СУММА(Остатки.СуммаВзаиморасчетовОстаток) КАК СуммаВзаиморасчетовОстаток

- лучше бы не пользоваться (при возникновении проблем на данном участке кода), а использовать явное соединение;

- совершенно точно не пользоваться для получения данных от полей составного типа (при возникновении проблем на данном участке кода). Пояснения – в этой же главе ниже;

- для сравнения ссылок сравнивать только ссылки, если от этого не страдает логика (при возникновении проблем на данном участке кода менять логику):

ПО ФИО.ФизЛицо = ФизЛица.Ссылка // правильно

ПО ФИО.ФизЛицо.Наименование = ФизЛица.Ссылка.Наименование // неправильно

- не получать еще раз .Ссылка:

ПО ФИО.ФизЛицо = ФизЛица.Ссылка // правильно

ПО ФИО.ФизЛицо.Ссылка = ФизЛица.Ссылка // неправильно

- никогда не использовать конструкцию Ссылка.Ссылка. Это всегда ошибка.

Далее будут даны пояснения к некоторым из перечисленные правил.

Назад: 4.19.Работа с ЦУП. Регламентный мониторинг
Дальше: Пояснение к правилу 3 («ДЛЯ ИЗМЕНЕНИЯ»)