Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос к базе 1С 7.7(sql) с использованием 1С++
0 Leo_2012
 
29.08.14
13:58
Описание проблемы:
В базе есть справочник "ДокиДляОбработки" у него два реквизита:
Документ - тип "ДОКУМЕНТ" (т.е. любой док.из конфы)
ПризнакОбработки - число 1-разряд (0 - обработан, 1 - надо обработать)

У нас есть текущий список значений (СпВидыДоков), в котором перечислены требуемые для отбора виды документов и период (с Дата1 по Дата2) который нас интересует.

Надо получить список документов из этого справочника по условиям
(признак "ПризнакОбработки" равен 1) И (рек."Документ" - вид документа принадлежащий списку "СпВидыДоков") И (рек."Документ" - дата документа <Дата2 и >Дата1, т.е. принадлежит требуемому периоду).

Раньше было так:

ТекстЗапроса =
"ТекДок = Справочник.ДокиДляОбработки.Документ;
|Признак = Справочник.ДокиДляОбработки.ПризнакОбработки;
|Условие((ТекДок.ДатаДок >= Дата1)И(ТекДок.ДатаДок <= Дата2)И(ПризнакОбр = 1));
|Условие(ВыбранныеДокументы.Принадлежит(ТекДок.Вид()) = 1);
";

Но теперь запрос стал тупить (на сегодня в справочнике больше 200тыс.элементов)...
Хочу сделать прямой запрос, но не знаю как ограничить результат по всем условиям:

ТекстЗапроса = "
|SELECT
| $ТекТаб.Документ as [ТекДок $Документ],
| $ТекТаб.Документ as [ДокВид $ВидДокумента],
| $ТекТаб.ПризнакОбработки as Признак
|FROM
| $Справочник.ДокиДляОбработки as ТекТаб
|WHERE
| $ТекТаб.ПризнакОбработки = 1

// как огранить по периоду и списку?

|";
1 Ёпрст
 
29.08.14
14:07
(0)
иннер джоин _1sjourn on left($ТекТаб.Документ,9)  = Жур.iddoc
and Жур.iddocdef in (select val from :СписокДоков) and
Жур.date_time_iddoc between :НачДата and :КонДата~

Токма еще типизация в селекте у тебя не верная..
2 Leo_2012
 
29.08.14
15:47
Спасибо, с периодом получилось.
Не понял как список значений засунуть в свой запрос?
3 Chum
 
29.08.14
15:50
(2) уложитьсписокобъектов
4 Chum
 
29.08.14
15:51
+(3) еще есть уложитьсписокобъектов13 - угадай для чего
5 Ёпрст
 
29.08.14
15:53
или так

Жур.iddocdef in ($ВидДокумента.Реализация,$ВидДокумента.Перемещение,...)
6 Leo_2012
 
01.09.14
11:09
Ёпрст, спасибо!

Все получилось, прямой запрос выполняется за секунду, старый выполнялся около 40 секунд.