Имя: Пароль:
1C
1С v8
условие в тексте запроса
0 Alex1979rak
 
03.06.12
16:32
Уважаемые коллеги.
Заранее прошу вас сильно не ругаться.
Но... Помогите, пожалуйста, разобраться.
В условии запроса можно применять две конструкции: В и В ИЕРАРХИИ.
Внимательно читал ИТС, Синтакс-Помощник. Но так и не понял в каких случаях применяется В, а в каких В ИЕРАРХИИ. Первое условие, вроде, создано для того чтобы сравнить выражение со списком значений, а второе условие применяется, если сравниваю ссылку со списком, составленным из ссылок на объекты иерархического справочника.
Объясните, пожалуйста, нюансы использования данной конструкции.
1 GROOVY
 
03.06.12
16:38
Открой консоль запросов (на ИТС есть), попробуй выбрать элементы справочника, в качестве условия попробуй применять обе конструкции в параметр которых передавай группы, списки групп, списки элементов.
2 aleks-id
 
03.06.12
16:40
если используешь "В" то в качестве параметра передаешь список значений или массив
если используешь "В ИЕРАРХИИ" то в качестве параметра передаешь группу иерархического справочника
3 GROOVY
 
03.06.12
16:41
Оператор В позволяет проверить, совпадает ли значение выражения, указанного справа от него, с одним из значений, описанных слева. Если совпадает хотя бы с одним – результатом оператора будет Истина, иначе – Ложь. Применение НЕ изменяет действие оператора на обратное. Сравнение значений производится по правилам сравнения значений.

Пример:
ВЫБРАТЬ
  Справочник.Номенклатура.Наименование

ГДЕ
  Справочник.Номенклатура.Родитель.Наименование
  В ("Бытовая техника", "Оргтехника")



--------------------------------------------------------------------------------

Для справочников проверка может осуществляться и на принадлежность по иерархии. Результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве:

Пример:
// В качестве параметра Группа в запрос передается ссылка
// на какую-либо группу справочника Номенклатура.

ВЫБРАТЬ
  Справочник.Номенклатура.Наименование

ГДЕ
  Справочник.Номенклатура.Ссылка В ИЕРАРХИИ (&Группа)

В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса.

Пример:
ВЫБРАТЬ
  Справочник.Номенклатура.Наименование

ГДЕ
  Справочник.Номенклатура.Ссылка В ИЕРАРХИИ
  (
     ВЫБРАТЬ
        Справочник.Номенклатура.Ссылка
     ГДЕ
        Справочник.Номенклатура.Наименование = "Одежда"
  )



--------------------------------------------------------------------------------
Конфигуратор 1С:Предприятие 8

Форма оператора В для проверки совпадения значения с одним из результата запроса
Примером применения данного оператора может послужить следующее:

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

Результат запроса:

Товары

Кран

Вантус

Стол

Стул


Для получения противоположного результата, то есть, если нужно определить, что значение не совпадает ни с одним из результата запроса, запрос выглядит следующим образом:

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

Результат запроса:

Товары

Сантехника

Мебель


Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.

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

Результат запроса:

Товары

Кран

Вантус

Стол

Стул




--------------------------------------------------------------------------------

© ООО "1С", 1996-2011. Все права защищены.
4 aleks-id
 
03.06.12
16:42
(3) ядрен-батон... хоть бы скрыл такое полотенце
5 GROOVY
 
03.06.12
16:44
Такое полотенце должен по идеи скрывать движок форума.
6 aleks-id
 
03.06.12
16:45
стало еще хуже :)))
7 Alex1979rak
 
03.06.12
17:11
Объясню, почему встал такой вопрос.
Конечно, это для другого сайта.
Решаю задачу 2.1 по специалисту.
Там в доке ПриходДенег нужно составить запрос, в котором используется виртуальная таблица остатков регистра бухгалтерии. В параметрах этого регистра нужно указать условие с участием субконто Договор и Контрагент. Вот.
8 Alex1979rak
 
03.06.12
17:13
(1, 2) спасибо
9 GROOVY
 
03.06.12
17:20
(7) Не забудь сначала отбор по видам субконто сделать.
10 Alex1979rak
 
03.06.12
17:38
Раз пошла такая пьянка...
В общем вот он сам "не совсем понятный, а точнее правильный ли" запрос:
ВЫБРАТЬ
   УправленческийОстатки.Счет,
   УправленческийОстатки.Субконто1,
   УправленческийОстатки.Субконто2,
   ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК СумОст,
   Табл.Сумма
ИЗ
   Документ.ПриходДенег.Таблица КАК Табл
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
               &Дата,
               Счет В ИЕРАРХИИ (&Счет),
               ,
               Субконто1 В ИЕРАРХИИ
                       (ВЫБРАТЬ РАЗЛИЧНЫЕ
                           ТЧ.Контрагент
                       ИЗ
                           Табл КАК ТЧ
                       ГДЕ
                           ТЧ.ссылка = &Ссылка)
                   И Субконто2 В ИЕРАРХИИ
                       (ВЫБРАТЬ РАЗЛИЧНЫЕ
                           ТЧ.Договор
                       ИЗ
                           Табл КАК ТЧ
                       ГДЕ
                           ТЧ.ссылка = &Ссылка)) КАК УправленческийОстатки
       ПО Табл.Контрагент = УправленческийОстатки.Субконто1
           И Табл.Договор = УправленческийОстатки.Субконто2
ГДЕ
   Табл.Ссылка = &Ссылка


Запрос.УстановитьПараметр("Дата",МоментВремени());
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Управленческий.Покупатели);
Запрос.УстановитьПараметр("Ссылка",Ссылка);

Т.е. получается, что в этом запросе есть ошибка, что не указан отбор по видам субконто.
Плюс на форуме уважаемого Павла Чистова один из форумчан высказался и по поводу параметра МоментВремени(), что его надо задавать как НОВЫЙ Граница(МоментВремени(), ВидГраницы.Включая).
Насколько это правильно?
11 aleks-id
 
03.06.12
17:40
Субконто1 В (ВЫБРАТЬ РАЗЛИЧНЫЕ
запрос не изучал. лень.
12 GROOVY
 
03.06.12
17:46
(10) Не... ваапще все не так...

1. условие на значение счета, зачем Иерархия?
2. Нет отбора по видам субконто.
3. Условие на субконто правильнее накладывать как (Субконто1, Субконто2) В (ВЫБРАТЬ блаблабла), где "блаблабла" - это выбор заначения фильтра для отбора. В противном случае парсер запросов составит 2 условия и оно будет накладываться в 2 разе дольше.
4. Про моментВремени - тут надо понять какие остатки нужны с движениями или без? По регистрам бухгалтерии это маловероятно. Хотя зависит от задачи.

Рекомендую: http://www.spec8.ru/dev-attestation-training
13 Alex1979rak
 
03.06.12
17:50
(12) спасибо. вроде кое-что прояснилось. а на счет подготовки к аттестации, так я бы и рад, но... как всегда напряг со временем, ну и денег пока маловато. вот.
Закон Брукера: Даже маленькая практика стоит большой теории.