Имя: Пароль:
1C
1C 7.7
v7: Помогите с прямым запросом, плиз ламеру
0 Злопчинский
 
21.01.14
14:31
delete
from  ra1410 as Рег
where Рег.sp1418 in
   (select Жур.iddoc from 1sjourn as Жур
    inner join dh196 as Счет on Cчет.iddoc = Жур.iddoc and Счет.sp1472 = 1
    where Жур.iddocdef = '  5G' and
     dtos(Жур.date)+Жур.time+Жур.iddoc
     between  dtos({d '1980-01-01'})+'      '+'         '
     and dtos({d '2013-03-31'})+'ZZZZZZ'+'ZZZZZZZZZ'  
   )
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\BASES\ДОРАБОТКИ\КОПИЯ СПЕЦОДЕЖДА3\EXTFORMS\ОЧИСТКАРЕГИСТРЗАЯВКИ.ERT(28)}: FAILED! ICommandText::Execute(): Syntax error.
.
где ошибка
1 МихаилМ
 
21.01.14
14:37
неужели нужны данные ранее 1980-01-01 ?
2 Злопчинский
 
21.01.14
14:38
данные в диапазоне с начала времен до ВыбДата
Проблем все равно не в этом, а в синтаксисе
3 Злопчинский
 
21.01.14
14:40
ааа блин пропадаю... рятуйте хлопцы...
4 dk
 
21.01.14
14:41
шо как маленький - комментишь построчно пока не найдешь нехорошую строчку
5 МихаилМ
 
21.01.14
14:41
зачем  
join c dh ?

нет условия в between
6 Ёпрст
 
гуру
21.01.14
14:42
fkbzcs e,thb c ltktnt b ghbdtn//
7 Ёпрст
 
гуру
21.01.14
14:42
я ж на коленке пишу, мне проверять не на чем.
8 Ёпрст
 
гуру
21.01.14
14:44
delete
from
ra1410
where
sp1418 in
   (select Жур.iddoc from 1sjourn as Жур
    inner join dh196 as Счет on Cчет.iddoc = Жур.iddoc and Счет.sp1472 = 1

    where Жур.iddocdef = '  5G' and
     dtos(Жур.date)+Жур.time+Жур.iddoc
     between  dtos({d '1980-01-01'})+'      '+'         '
     and dtos({d '2013-03-31'})+'ZZZZZZ'+'ZZZZZZZZZ'  
   )
9 trad
 
21.01.14
14:44
либо так

delete ra1410
from  ra1410 as Рег
where Рег.sp1418 ...

либо так

delete
from  ra1410
where ra1410.sp1418 ...
10 Злопчинский
 
21.01.14
14:44
ща попытаем
11 Ёпрст
 
гуру
21.01.14
14:46
(9) ага, типа того

delete Рег

from  ra1410 as Рег
where Рег.sp1418 ..
12 Ёпрст
 
гуру
21.01.14
14:46
:)
13 Злопчинский
 
21.01.14
14:50
не фурычит блин никак...
14 МихаилМ
 
21.01.14
14:51
помнится в журнале
iddocdef имеет тип "число"
15 Ёпрст
 
гуру
21.01.14
14:52
(13) ты хоть не монопольно запущаешь ?
16 Ёпрст
 
гуру
21.01.14
14:52
(14) дбф
17 Ёпрст
 
гуру
21.01.14
14:54
Чебур, заменяешь delete на select и в консоли за 5 минут находишь решение..
18 Злопчинский
 
21.01.14
14:54
Задача:
.
структура регистра, измерения - реквизиты от "ДатаПоставки" до "Склад"
.
Измерение "Счет" - Документ.Счет
Есть реквизит Документ.Счет.Отключен = Число(1,0)
.
Требуется удалить все записи движенйи регистра по условию дата счета в диапазоне 01.01.1980 до ВыбДата и где Счет.Отключен=1
.
На регистре стоит галка БыстраОбработкаДвиженйи = 1
.
#===============================================================================
#==TABLE no 375    : Регистр Заявки
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable  
T=RG1410  |Регистр Заявки                |A          |RG1410     |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=PERIOD    |Period Registr      |D   |8     |0        
F=SP1411    |(P)ДатаПоставки     |D   |8     |0        
F=SP1418    |(P)Счет             |C   |9     |0        
F=SP1412    |(P)Поставщик        |C   |9     |0        
F=SP1414    |(P)Товар            |C   |9     |0        
F=SP1413    |(P)Клиент           |C   |13    |0        
F=SP1432    |(P)Склад            |C   |9     |0        
F=SP1415    |(P)Количество       |N   |12    |3        
F=SP1416    |(P)Сумма            |N   |20    |2        
F=SP1434    |(P)КоличествоЗаказан|N   |12    |3        
F=SP1435    |(P)СуммаЗаказано    |N   |20    |2        
F=SP1469    |(P)КоличествоПоставл|N   |12    |3        
F=SP1470    |(P)СуммаПоставлено  |N   |20    |2        
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=PROP     |PERIOD+PROP   |0     |PERIOD,SP1411,SP1418,SP1412,SP1414,SP1413,SP1432            |PROP      
I=VIA1414  |VIA1414       |0     |PERIOD,SP1414                                               |VIA1414    
#
#===============================================================================
#==TABLE no 376    : Регистр (Дв.) Заявки
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable  
T=RA1410  |Регистр (Дв.) Заявки          |A          |RA1410     |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=IDDOC     |ID Document's       |C   |9     |0        
F=LINENO    |LineNo              |N   |4     |0        
F=ACTNO     |Action No           |N   |6     |0        
F=DEBKRED   |Flag Debet/Kredit   |N   |1     |0        
F=IDDOCDEF  |ID Def Document     |C   |4     |0        
F=DATE      |date                |D   |8     |0        
F=TIME      |Time                |C   |6     |0        
F=SP1411    |(P)ДатаПоставки     |D   |8     |0        
F=SP1418    |(P)Счет             |C   |9     |0        
F=SP1412    |(P)Поставщик        |C   |9     |0        
F=SP1414    |(P)Товар            |C   |9     |0        
F=SP1413    |(P)Клиент           |C   |13    |0        
F=SP1432    |(P)Склад            |C   |9     |0        
F=SP1415    |(P)Количество       |N   |12    |3        
F=SP1416    |(P)Сумма            |N   |20    |2        
F=SP1434    |(P)КоличествоЗаказан|N   |12    |3        
F=SP1435    |(P)СуммаЗаказано    |N   |20    |2        
F=SP1469    |(P)КоличествоПоставл|N   |12    |3        
F=SP1470    |(P)СуммаПоставлено  |N   |20    |2        
F=SP1417    |(P)ВидОперации      |N   |11    |0        
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=IDLINE   |of IDDOC+LineN|0     |IDDOC,LINENO,ACTNO                                          |IDLINE    
I=DATETIME |Date+Time+ID+L|0     |DATE,TIME,IDDOC,LINENO,ACTNO                                |DATETIME  
I=VIA1414  |VIA1414       |0     |SP1414,DATE,TIME,IDDOC,LINENO,ACTNO                         |VIA1414    
#
19 Злопчинский
 
21.01.14
14:55
Епрст - я тут бли почту текстовки таскаяю через три шлюза под чужими именами - пока я буду ставить консоль и ее качать - это уже завтра утро будет.
20 Злопчинский
 
21.01.14
14:56
исходный текст запроса
.
  ТекстЗапроса ="
        |delete
        |from $Регистр.Заявки as Рег
        |where $Рег.Счет in
        |   (select Жур.iddoc from 1sjourn as Жур
        |    inner join $Документ.Счет as Счет on  Cчет.iddoc = Жур.iddoc and $Счет.Отключен = 1
        |    where Жур.iddocdef = $ВидДокумента.Счет and
        |     dtos(Жур.date)+Жур.time+Жур.iddoc
        |     between  dtos(:НачДата~~)+'      '+'         '
        |     and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'  
        |   )
        |";
    Запрос.УстановитьТекстовыйПараметр("НачДата", '01.01.80');
    Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбДата);
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
21 Злопчинский
 
21.01.14
14:56
дает ошибку
.
delete
from  ra1410 as Рег
where Рег.sp1418 in
   (select Жур.iddoc from 1sjourn as Жур
    inner join dh196 as Счет on Cчет.iddoc = Жур.iddoc and Счет.sp1472 = 1
    where Жур.iddocdef = '  5G' and
     dtos(Жур.date)+Жур.time+Жур.iddoc
     between  dtos({d '1980-01-01'})+'      '+'         '
     and dtos({d '2013-03-31'})+'ZZZZZZ'+'ZZZZZZZZZ'  
   )
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\BASES\ДОРАБОТКИ\КОПИЯ СПЕЦОДЕЖДА3\EXTFORMS\ОЧИСТКАРЕГИСТРЗАЯВКИ.ERT(28)}: FAILED! ICommandText::Execute(): Syntax error.
22 Ёпрст
 
гуру
21.01.14
14:57
убери табуляцию всю из текста запроса + условие на вид документа выкинь..

+ ты именно мой код запущаешь, с моим соединением ? + не монопольно, надеюсь ?
23 Злопчинский
 
21.01.14
14:58
(17) да и как я наййду в консоли решение если там будет та же самя ошибка...?
24 Ёпрст
 
гуру
21.01.14
14:58
ТекстЗапроса ="
        |delete
        |from $Регистр.Заявки
        |where sp1418 in
        |(select Жур.iddoc from 1sjourn as Жур
        |inner join $Документ.Счет as Счет on  Cчет.iddoc = Жур.iddoc and $Счет.Отключен = 1
        |where Жур.iddocdef = $ВидДокумента.Счет and
        |dtos(Жур.date)+Жур.time+Жур.iddoc
        |between  dtos(:НачДата~~)+'      '+'         '
        |and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'  
        |)
        |";
так, че пишет ?
25 Злопчинский
 
21.01.14
14:59
(22)да, именно твой вариант - описан выше
ща пробую с табуляциям убрать
и почему на вид убрать условие - лишнее?
26 Злопчинский
 
21.01.14
14:59
не так быстро - метаюсь между компами и шлюзами
27 Ёпрст
 
гуру
21.01.14
15:01
условие не лишнее, у меня теперь комплекс из-за trad, я всегда теперь путаю, как писать
$ВидДокумента.Счет и
$ВидДокумента36.Счет

:)))))))))))))))))))))))
28 Злопчинский
 
21.01.14
15:08
delete
from ra1410
where sp1418 in
(select Жур.iddoc from 1sjourn as Жур
inner join dh196 as Счет on  Cчет.iddoc = Жур.iddoc and Счет.sp1472 = 1
where Жур.iddocdef = '  5G' and
dtos(Жур.date)+Жур.time+Жур.iddoc
between  dtos({d '1980-01-01'})+'      '+'         '
and dtos({d '2010-01-01'})+'ZZZZZZ'+'ZZZZZZZZZ'  
)
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\BASES\ДОРАБОТКИ\КОПИЯ СПЕЦОДЕЖДА3\EXTFORMS\ОЧИСТКАРЕГИСТРЗАЯВКИ.ERT(31)}: FAILED! ICommandText::Execute(): SQL: Column '     ' is not found.
29 Ёпрст
 
гуру
21.01.14
15:12
это, а ты через что этот запрос выполняешь хоть ?
Через oledb ?
30 Ёпрст
 
гуру
21.01.14
15:14
Даже не знаю.. а так ?

ТекстЗапроса ="
        |delete рег
        |from $Регистр.Заявки as Рег
        |where $Рег.Счет in
        |(select Жур.iddoc from 1sjourn as Жур
        |inner join $Документ.Счет as Счет on Cчет.iddoc = Жур.iddoc and $Счет.Отключен = 1
        |where
        |dtos(Жур.date)+Жур.time+Жур.iddoc
        |between  dtos(:НачДата~~)+'      '+'         '
        |and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'  
        |)
        |";
31 Ёпрст
 
гуру
21.01.14
15:16
Соединение у тя такое хоть ?


    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Exclusive=Yes;Mode=ReadWrite;Collating Sequence=MACHINE";
    ДБ = СоздатьОбъект("OLEDBData");
    Рез = ДБ.Соединение(Соединение);
    Запрос = ДБ.СоздатьКоманду();
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
    Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");    
    
    Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
32 Ёпрст
 
гуру
21.01.14
15:31
Чебур, я нашел ошибку.. она в синтаксисе-где-то рус/лат буква была
:)
33 Ёпрст
 
гуру
21.01.14
15:32
в присоединении таблиц
34 Злопчинский
 
21.01.14
15:36
В итоге-то какой текст запроса..?
35 Злопчинский
 
21.01.14
15:37
Запрос четко как ты написал копипастом первоначальный
36 Злопчинский
 
21.01.14
15:42
перебил в первоначальном запросе после inner join - пофиг анрекогназ кейворд... буду перебивать вообще весь запрос
37 Ёпрст
 
гуру
21.01.14
15:43
ТекстЗапроса ="
        |delete Рег
        |from $Регистр.Заявки as Рег
        |where $Рег.Счет in
        |(select Жур.iddoc from 1sjourn as Жур
        |inner join $Документ.Счет as Док on Док.iddoc = Жур.iddoc and $Док.Отключен = 1
        |where
        |dtos(Жур.date)+Жур.time+Жур.iddoc
        |between  dtos(:НачДата~~)+'      '+'         '
        |and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'  
        |)
        |";
38 trad
 
21.01.14
15:45
(27)
применительно к iddocdef
в sql - $ВидДокумента.Счет
в dbf - $ВидДокумента36.Счет
39 Ёпрст
 
гуру
21.01.14
15:47
вот, в консоли работает в типовой

|delete Рег
|from $Регистр.Заявки as Рег
|where $Рег.ЗаявкаПокупателя in
|(select Жур.iddoc from 1sjourn as Жур
|inner join $Документ.ЗаявкаПокупателя as Док on Док.iddoc = Жур.iddoc
|where
|dtos(Жур.date)+Жур.time+Жур.iddoc
|between  dtos(:НачДата~~)+'      '+'         '
|and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ')
|
40 Ёпрст
 
гуру
21.01.14
15:48
(38) на самом, деле , в дбф нет разницы с 36..в данном случае :)
41 Злопчинский
 
21.01.14
15:49
беру (37) сейчас прорверю
42 Ёпрст
 
гуру
21.01.14
15:50
+40 а может и есть..блин
%)
43 Ёпрст
 
гуру
21.01.14
15:51
посмотрел, точно нет разницы для дбф..
!
:)
44 Злопчинский
 
21.01.14
15:52
(37) вроде пошел, буду смотреть ща аккуратно
45 Злопчинский
 
21.01.14
15:53
ты блин скажи в каком слове ошибка была, а тоя  до половину запрос побуквенно перебил - и никак... ;-)
46 trad
 
21.01.14
15:54
(43)
в дбф $ВидДокумента.Счет = $ВидДокумента36.Счет ?
не знал
47 Ёпрст
 
гуру
21.01.14
16:02
(46) ага..
48 Ёпрст
 
гуру
21.01.14
16:02
(45) в on
49 Ёпрст
 
гуру
21.01.14
16:02
хотя, пришлось консоль открыть и слепить аналог в демке тиса
50 Злопчинский
 
21.01.14
16:07
(49) хз... я вроде перебил on - все равно ругалось на нераспознанное ключевое слово.
.
в консоли показывает ошибку более адресно?
.
сумму за запрос озвучь на почту.
51 Ёпрст
 
гуру
21.01.14
16:13
(50) не показывает
ничего не надо
52 Злопчинский
 
21.01.14
17:41
(51) ну как это так ничего не надоююю
.
проверил, работает нормально период подчистила, НО ОСТАЛИСЬ ЗАПСИ за последний месяц заданного периода...
.
ьт.е задавал период выборки счетов Кондата - 31.03.2013 0 все предыдущие месяц убила, а движения за 03 месяц - осталисьюю
.
???
53 Ёпрст
 
гуру
21.01.14
17:44
(52) ^))
54 Ёпрст
 
гуру
21.01.14
17:46
Ты же сам сказал, удаляем не по дате записей регистра, а по дате Документа-измерения..
Разве нет ?

Если нужно было бы по дате движения регистра, там запрос другой был бы.
55 Ёпрст
 
гуру
21.01.14
17:47
сейчас у тебя запрос выкашивает записи, где измерение счет  имеет такой то реквизит и дата этого счета из диапазона такого то..
56 Злопчинский
 
21.01.14
17:48
(54) удаляем все движени и все итоги относящиеся к счету, находящемуся в определенном периодею
то есть удалить все записи в регистре пор счетам, находящимся в периоде с НачДата по КонДата
57 Злопчинский
 
21.01.14
17:48
(55) угу так и должно быть по идее
58 Злопчинский
 
21.01.14
17:49
в принципе ок, модет там флажок не 1 а 2 или три - подправлю сам, это некритично...
59 Ёпрст
 
гуру
21.01.14
17:50
(57) и ?

хочешь сказать, что у тебя сейчас в регистре остались записи со счетами, которые в этом диапазоне дат ?
Не верю
:)
60 Ёпрст
 
гуру
21.01.14
17:52
(58) а...
ты селект натрави, т.е выполни вложенный подзапрос - увидишь все записи (документы твои), которые будут "удаляться"
61 Злопчинский
 
21.01.14
21:03
(59) предварительно - да.
(60) которые будут удаляться - они и удалятся.. проблема (предварительно) в том, что какие-то хвосты остались...
.
вменяемо ответить не могу, бо доступа нет, на месте - жуткий цейтнот, заадменено так что жпс, права имхо кривые, никакого инструментария нет - регпринт пришлось самому запросом ваять - на исследование времени не остается..
.
удастся выяснить - ок, не удастся - пока что клинч по размеру файла ликвидирован, разборки потом. Обрезать сегодня хотели - оттренернул уже, все ок. но перенесли на четверг - бо толком никто сказать не может где скажется обрезка - на каких отчетах/документах - бо конфа - изумительный утконос-ехидна, развивавшийся в полной изоляции лет наверное 12-15... никто не имеет представления как оно работает что с чем и почему куда зависит ... аудировать и восстанавливать схему учета - пока что нет никакой возможности.. пока что огромными дозами "антибиотиков" пытаюсь оперативно купировать метастазы... - бо файл вплотную подобрался к 2гигам, открытие февраля обрушит все гарантированно.. вдобавок движок не подправлен под проблему 1гига.. но судя по первому диагнозу - отчетами по этому регистру не пользуются.. отчет вообще тотально незакрыт. удаление нулевых итогов по первоначальному варианту ВООБЩЕ ни ужало ни на 1 байт... жпс полный короче
62 Злопчинский
 
21.01.14
21:10
..предел файла для ДБФной версии = ровно 2 гига? кратно 1024 (степень двойки), то есть 2.147.483.648 байт? или какой-то другой размер?
63 Ёпрст
 
гуру
22.01.14
08:24
(62) дасистак!
64 Ёпрст
 
гуру
22.01.14
08:26
Если заявками не пользуются, то проще выкосить его в конфе... насовсем.
65 Ёпрст
 
гуру
22.01.14
08:26
%)
66 DrZombi
 
гуру
22.01.14
08:47
(0) Прямые запросы лучше всего отлаживать в QA на сервере SQL.
А не в 1С :)
67 trad
 
22.01.14
09:07
(66) даже к dbf?
68 Злопчинский
 
22.01.14
22:31
(63) фантастиш практиш гут ;-)
69 Злопчинский
 
22.01.14
22:37
(64). пользуются или нет по документам (по крайней мере на запись в регистр) - это можно сказать выяснено
.
но вот в каких отчетах что-то берется из регистра и в где в других местах читается что-то из этого регистра - уже проблематичней:
.
реально ща никто не представляет в каких отчетах это юзается и юзается ли вообще (по моим телепатиям - как верно написано выше - большое подозрение что можно "снести" нафиг).
.
как искать - где используется этот регистр? - пока ничего вголову кроме как тупым поиском по всем текстам строки ".Заявки" - не приходит... Вдобавок наблюдается картинка, что обработки/отчеты могут лежать вне каталога базы - где именно и какие - на данный момент однозначно сказать никто не может.
.
вот акой вот зоопарк...
.
какие мысли еще есть как поискать где регистр используется на чтение..?
70 Ёпрст
 
гуру
23.01.14
10:37
(69) поиск во всех текстах ищет в любой папке на диске.. можешь хоть весь комп прошерстить.. это не долго.
А проще, turbomd, выкашивание регистра.
Ждешь.. если всплывет сообщение от пользователей - правишь.
Хотя 100% - никто этим не пользуется....вообще.
71 Злопчинский
 
23.01.14
22:10
(70) ваще пипец.. база в запущенном сотяонии ужас на... но как-то все работают - кучей галочек в документах и прочем...
.
поковырял по моей "претензии" что не все подчистило.. все работает как надо - ясен пень было в запросе ограничивающее условие, которое должно срабатывать на доках - а не срабатывало, потому как если флажок не взведен в документе - то хоть уссыся..;-)
.
вдобавок база вдребезги покурочена судя по всему прямыми запросами - в бешеных колиечтсвах присутсвуют движеняи в помеченных на удаление доках и прчего еще всякого... судя по всему система выродилась в "подокументный" учет с флажками, кнопочками, кучей вводов на основаниях, а регистры где-то как-то вспомогательно.. никто толком не знает что как и почему... общую идею примерно по крупицам собрать можно, но в частностях - жпс ;-) не смертельно, конечно, но удовольствия мало ковырятьс ов всем этом - имеет смысл только если реинжиниринг БП для перехода...
.
все - как обычно.. спрашивается - в большой (?) конторе - кто должен досконально знать идею постороения учета и как это преломляется в имеющемся конфигураци-фейсах для юзверей - 1сник и все..?
72 Z1
 
23.01.14
22:27
(71)
>>>вдобавок база вдребезги покурочена судя по всему прямыми >>>запросами - в бешеных колиечтсвах присутсвуют движеняи в >>>помеченных на удаление доках и прчего еще всякого...

Переводи базу на sql.
Как бы если не захотят покупать sql сервер ( железо софт )
то и не стоит начинать разбираться (ИХМО )
В sql гораздо комфортней выявишь целостность базы данных.
73 Злопчинский
 
23.01.14
22:34
(72) не те объемы чтобы в скуль пихать.
а насчет удобства - я всеми этими скульями и прямыми владею слабо - так, простенькие выборки накатать да какое-нить одно соединение - так что мне комфортность - пофиг.. посавлю если что - консоль запросов на ДБФ и все
74 Z1
 
23.01.14
22:41
(73) знание дело наживное.
как бы на реальном сложном примере освоишь sql.
ну и как бы второй скрытый смысл если большая контора не захочет купить софт и железо под сервер то и тебе
вряд ли адекватно заплатят за работу.
75 Злопчинский
 
23.01.14
22:44
(74) да я особо не парюсь - работа неинтересная и временно-разовая...
.
а "большая контора" - понятие растяжимое...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс