новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Работа раздела "ГДЕ" для сравнения "В" таблиц более 1-го поля с использованием "ПЕРВЫЕ 1"

  • Добавить свою публикацию
  • для этого требуется регистрация

Столкнулся с одной проблемой. Для примера упрощу максимально запрос. Есть два запроса:


Первый запрос:


ВЫБРАТЬ
   Пользователи.Код,
   Пользователи.Наименование
ПОМЕСТИТЬ Таб
ИЗ
   Справочник.Пользователи КАК Пользователи
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Пользователи.Код,
   Пользователи.Наименование
ИЗ
   Справочник.Пользователи КАК Пользователи
ГДЕ
   (Пользователи.Код, Пользователи.Наименование) В
           (ВЫБРАТЬ ПЕРВЫЕ 1
               Пользователи.Код,
               Пользователи.Наименование
           ИЗ
               Таб КАК Пользователи)

 

Второй запрос (переставим ПЕРВЫЕ 1 во временную таблицу)

 

ВЫБРАТЬ ПЕРВЫЕ 1
   Пользователи.Код,
   Пользователи.Наименование
ПОМЕСТИТЬ Таб
ИЗ
   Справочник.Пользователи КАК Пользователи
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Пользователи.Код,
   Пользователи.Наименование
ИЗ
   Справочник.Пользователи КАК Пользователи
ГДЕ
   (Пользователи.Код, Пользователи.Наименование) В
           (ВЫБРАТЬ
               Пользователи.Код,
               Пользователи.Наименование
           ИЗ
               Таб КАК Пользователи)

 

В результате, первый запрос даст все элементы справочника, второй только 1 элемент. В тоже время, если в этом запросе делать только по одному полю, а не по двум, сработает одинаково (правильно) в обоих случаях.
Например такой запрос даст 1 элемент справочника:

ВЫБРАТЬ
   Пользователи.Код,
   Пользователи.Наименование
ИЗ
   Справочник.Пользователи КАК Пользователи
ГДЕ
   Пользователи.Код В
           (ВЫБРАТЬ ПЕРВЫЕ 1
               Пользователи.Код
           ИЗ
               Справочник.Пользователи КАК Пользователи)

 

Получается что, ПЕРВЫЕ 1 транслируется в разные подзапросы в зависимости от количества полей сравнения. Скорее всего, когда несколько полей, оно транслируется в SQL-ный Exists, поэтому и получаем разницу в логике работы запроса. Учитывая это, призываю вас осторожно работать с данной конструкцией и по возможности помещать такое во временные таблицы.
P.S. Такое происходит и на файловой базе и на клиент-серверной.

 
0
Читайте также
Услуги 1С программиста
Услуги удаленного 1Спрограммиста на несколько дней невероятно выгодны. Вы не будете платить ежемесячную зарплату, а заплатите за фактически сделанную работу, без затрат на покупку дорогостоящего оборудования для штатного работника.
Общие реквизиты и серверная SQL-база
"Снижают ли общие реквизиты производительность конфигурации"
Разработки
Поиск повторяющихся элементов справочников. ДЛЯ ЛЮБОЙ КОНФИГУРАЦИИ 7.7
Обработка для поиска дубляжей элементов справочников для 1С7.7(любой)
МОЗГОДЕР - универсальное решение для пользователей
Решение практически любого вопроса и проблемы в 1С
Доступ к реквизитам справочника в 1с7.7 для каждого пользователя
Разработка разграничивает доступ к реквизитам справочника в 1С 7.7
Еще от автора
≡ к списку статей