Имя: Пароль:
1C
1C 7.7
v7: 1cpp, dbf, delete + Регистр
,
0 CaIIIka
 
06.09.20
11:02
Здравствуйте! Пытаюсь свернуть файловую базу, штатными средствами одно распроведение жуть какое долгое. Решил пойти через прямые запросы с чисткой таблиц.

|select r.IDDoc
|from $Регистр."+ИмяРег+" as r
|INNER JOIN 1Sjourn as j ON j.IDDoc = r.IDDoc and j.Date BETWEEN :НачДата~~ AND :КонДата~~

РАБОТАЕТ

|delete
|from $Регистр."+ИмяРег+" as r
|INNER JOIN 1Sjourn as j ON j.IDDoc = r.IDDoc and j.Date BETWEEN :НачДата~~ AND :КонДата~~

НЕ РАБОТАЕТ        

delete r - тоже не работает

Как заставить?
1 CaIIIka
 
06.09.20
11:04
При "delete r" пишет "Command contains unrecognized phrase/keyword"
При "delete" пишет "Syntax error"
2 CaIIIka
 
06.09.20
11:05
Неужели в dbf join при удалении низя?
3 CaIIIka
 
06.09.20
11:09
В отладке:
delete
from ra681 as r
INNER JOIN 1Sjourn as j ON j.IDDoc = r.IDDoc and j.Date BETWEEN {d '2000-01-01'} AND {d '2018-12-31'}
4 CaIIIka
 
06.09.20
11:36
Он и без join не работает. Что за хрень? У регистров что, таблицы особенные?

delete ra681
from ra681
_____
Command contains unrecognized phrase/keyword.

Че ему надо?
5 CaIIIka
 
06.09.20
11:43
Работает только
delete from ra681

Как тогда журнал привязать чтоб работало?

Мдя, на sql какие только выкрутасы не выписывал, а тут такой примитив задолбал уже....
6 Sserj
 
06.09.20
11:47
(4)(5) delete .. from это чисто MSSQL расширение, нет такого в стандартах SQL.
Используй стандартный синтаксис:
delete ...
where
iddoc in (select....)
7 CaIIIka
 
06.09.20
11:57
delete ra681 where IDDoc in (select IDDoc from 1Sjourn where 1Sjourn.Date BETWEEN {d '2000-01-01'} AND {d '2018-12-31'})
delete ra681 where IDDoc in (select j.IDDoc from 1Sjourn as j where j.1Sjourn.Date BETWEEN {d '2000-01-01'} AND {d '2018-12-31'})
______
Command contains unrecognized phrase/keyword.
8 CaIIIka
 
06.09.20
11:59
delete from ra681 where IDDoc in (select j.IDDoc from 1Sjourn as j where j.1Sjourn.Date BETWEEN {d '2000-01-01'} AND {d '2018-12-31'})
____
Function name is missing )

Чет не пойму, куда ему скобку воткнуть.
9 CaIIIka
 
06.09.20
12:23
За пару часов в "зючках" замылмся глаз уже

Так зарабюотало:

delete from ra681 where IDDoc in (select j.IDDoc from 1Sjourn as j where j.Date BETWEEN {d '2000-01-01'} AND {d '2018-12-31'})

(6) Спасибо тебе, добрый человек, за конструкцию с where. Сам как-то оторопел от проблем на таком примитиве, что зациклился на другом.
10 Ёпрст
 
06.09.20
15:02
(0) На вот, наслаждайся..
https://cloud.mail.ru/public/G1gJ/2WSg4TW8i

а своё..в топку.
11 CaIIIka
 
06.09.20
15:21
(10) Прям уж таки в топку :) Ваш вариант универсален и более продвинутый, но в рамках моей задачи почти такой же. Мой заработал и за час данные за 12 лет из регистров вычистил. Только не понял, для чего +'ZZZZZZZZZ'? У меня и без них отработал правильно.
И да... Спасибо большое! Приму как образец универсального рабочего кода.
12 Ёпрст
 
06.09.20
16:03