Имя: Пароль:
1C
1С v8
Построенный запрос к СУБД использует слишком много таблиц
0 Adecvator
 
02.08.13
10:46
Что за ерунда, обыкновенный запрос -
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    Объект,
|    Значение
|    ТипЗначения(Объект) КАк ТипОбъекта
|ИЗ
|    РегистрСведений.ЗначенияСвойствОбъектов
|Где
|    ТипЗначения(Объект) = ТИП(Документ.СчетНаОплатуПокупателю) и
|    Значение = &СтрПоиска и
|    Объект.ПометкаУдаления = Ложь";

Запрос.УстановитьПараметр("СтрПоиска",Идентификатор);        Результат = Запрос.Выполнить().Выгрузить();

а выдает ошибку :(
1 GROOVY
 
02.08.13
10:49
Вместо типа используй оператор ССЫЛКА. Типизируй поле ОБЪЕКТ перед проверкой на ПометкаУдаления.
2 Bronislav Pupkov
 
02.08.13
10:49
используй ВЫРАЗИТЬ() для значения
3 GROOVY
 
02.08.13
10:49
А то ".ПометкаУдаления" тебе левых соединений со всеми таблицами БД видать налепило.
4 Adecvator
 
02.08.13
10:52
(2) ВЫРАЗИТЬ(Значение) = &СтрПоиска, как правильно употреблять функцию ВЫРАЗИТЬ() ?
5 Adecvator
 
02.08.13
10:53
(3) как? это же измерение регистра.
6 Adecvator
 
02.08.13
10:53
тип у которой - ДокументСсылка, СправочникСсылка
7 GROOVY
 
02.08.13
10:54
(5) (6) Ну тип то составной.
8 Лефмихалыч
 
модератор
02.08.13
10:55
на читая (0): нужно ВЫРАЗИТЬ() или/и отбор по типу субконтно

угадал?
9 GROOVY
 
02.08.13
10:55
К какой таблице думаешь запрос обращается для проверки пометки удаления? Вооот...
10 Лефмихалыч
 
модератор
02.08.13
10:56
почи. только ВЫРАЗИТЬ()
11 GROOVY
 
02.08.13
10:56
(8) Промахнулся :)
12 Adecvator
 
02.08.13
10:58
(10) ну как использовать ВЫРАЗИТЬ()? Подскажите плз.
13 GROOVY
 
02.08.13
10:59
Конфигуратор 1С:Предприятие 8

Приведение типа
Поля исходных таблиц могут иметь составной тип. Для таких полей возникает необходимость привести значения поля к какому-либо определенному типу.

<Приведение типа>
      |
      ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> )
                                                    |
                                                    БУЛЕВО |
ЧИСЛО [(Длина[, Точность])] |
СТРОКА [(Длина)] |
ДАТА |
<Имя таблицы>
                                                                 <Длина> - ЧИСЛО; <Точность> - ЧИСЛО


<Выражение> приводится к одному из примитивных типов, или к ссылочному типу данных; в последнем случае <Имя таблицы> указывает на соответствующую таблицу информационной базы.

Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL.

Если <Выражение> не содержит в составном типе требуемый <Тип значения>, то выполнение данного запроса завершится ошибкой из-за принципиальной невозможности совершить приведение типов.

Для <Тип значения> СТРОКА с указанием длины максимальный размер строки составляет 1024.

см. также: Использование выражений в языке запросов



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

© ООО "1С", 1996-2013. Все права защищены.
14 GROOVY
 
02.08.13
11:04
О! Универсальный подсказыватель, гугл: https://www.google.ru/search?q=1с+выразить
15 Adecvator
 
02.08.13
11:43
может подскажите, как связать с одной только таблицей - "СчетНаОплатуПокупателю", потому что
ВЫРАЗИТЬ(Значение КАК СТРОКА(300)) = &СтрПоиска
не работает :(
16 Adecvator
 
02.08.13
12:37
Решил проблему так -     
Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ЗначенияСвойствОбъектов.Значение     КАК Значение
|  , ЗначенияСвойствОбъектов.Объект         КАК Объект
|ИЗ
|    Документ.СчетНаОплатуПокупателю КАК Счет
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|        ПО Счет.Ссылка = ЗначенияСвойствОбъектов.Объект
|ГДЕ
|    ЗначенияСвойствОбъектов.Значение = &СтрПоиска
|    И Счет.ПометкаУдаления = ЛОЖЬ";
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс