Имя: Пароль:
1C
1C 7.7
v7: 1C++ Покажите пример запроса к DBF базе за период по позицию документа
0 totparen
 
09.11.12
15:08
Ребята, киньте пожалуйста примером запроса. Мне нужно выбрать все документы с указанной даты до указанной позиции документа (не на конец даты)
1 totparen
 
09.11.12
15:14
Текущий текст запроса:

"
|SELECT
| *
|
|FROM
| 1SJourn Жур
|INNER JOIN
| $Документ.ПоступлениеТМЦ as Док ON Док.IDDoc = Жур.IDDoc AND
|          Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ AND
|          Жур.Closed = 1
|
"
2 akaBrr
 
09.11.12
15:19
3 Ёпрст
 
09.11.12
15:20
дык передавай позицию и привет
4 totparen
 
09.11.12
15:23
(3) Дык ведь в ДБФ ке дата и время документа хранится разных полях. Или сработает?
5 МихаилМ
 
09.11.12
15:24
в базе документы только опер учета?
(намек на Closed = 1)
6 totparen
 
09.11.12
15:27
Только опер. Но вопрос не в этом.

Как-то нужно период по указанный документ.
7 Ёпрст
 
09.11.12
15:29
эх.ё..
8 totparen
 
09.11.12
15:31
(3) (4)+
Попытался впихнать в параметр КонДата позицию документа - ругается.

       Запрос.УстановитьТекстовыйПараметр("КонДата", Докум.ПолучитьПозицию());
9 totparen
 
09.11.12
15:35
МОЖно конечно через объединение сперва получить данные на начало даты, потом данные за текущий день до позиции. Но проще можно?
10 Ёпрст
 
09.11.12
15:40
(0)
ОлеДБКоманда = глОлеДБ.СоздатьКоманду();
ОлеДБКоманда.Выполнить("EXECSCRIPT('SET ANSI OFF')");

...........

|where dtos(Жур.date)+Жур.time+Жур.iddoc between
|dtos(:НачПериод~~)+'      '+'         '
|And dtos(:КонПериод~~)+'ZZZZZZ'+'ZZZZZZZZZ'

это для дат, для позиции, заместо dtos(кон период)+... втыкаешь позицию документа.
11 totparen
 
09.11.12
15:45
(10) Мерси. Буду пробывать.
12 Ёпрст
 
09.11.12
15:46
позицию получаешь через
ПолучитьДатуВремяИдДок
13 Ёпрст
 
09.11.12
15:47
объекта метадатаворк.
14 Ёпрст
 
09.11.12
15:47
пример лень рисовать
15 Ёпрст
 
09.11.12
15:49
+ строка для подключения должна быть такая:
ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Collating Sequence=MACHINE";
ОлеДБ.Соединение(Соединение);
Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
// Устанавливаем время ожидания захвата таблиц , если во время выполнения запроса кто то проводит документы
// Очень полезная функция - аналогична времени ожидания в 1С
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
// Убираем буфепизацию, чтобы данные возвращаемые запросам всегда были актуальны
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");    
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// Отключили блокировки
16 totparen
 
12.11.12
07:45
(10)
Я так понимаю 'ZZZZZZ'+'ZZZZZZZZZ', это будет на конец периода, а как с позицией документа применять эти ЗЗЗЗ?
17 totparen
 
12.11.12
08:13
(10) Спасибо друг!

Условие получилось следующее

|dtos(Жур.Date)+Жур.Time+Жур.IdDoc BETWEEN dtos(:НачДата~~)+'      '+'         ' AND :КонДата


       Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
       Запрос.УстановитьТекстовыйПараметр("КонДата", МД.ПолучитьДатуВремяИдДок(Докум.ПолучитьПозицию()));
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший