Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 1cpp, dbf, delete + Регистр

v7: 1cpp, dbf, delete + Регистр
Я
   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 - тоже не работает

Как заставить?
   CaIIIka
 
1 - 06.09.20 - 11:04
При "delete r" пишет "Command contains unrecognized phrase/keyword"
При "delete" пишет "Syntax error"
   CaIIIka
 
2 - 06.09.20 - 11:05
Неужели в dbf join при удалении низя?
   CaIIIka
 
3 - 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'}
   CaIIIka
 
4 - 06.09.20 - 11:36
Он и без join не работает. Что за хрень? У регистров что, таблицы особенные?

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

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

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

Мдя, на sql какие только выкрутасы не выписывал, а тут такой примитив задолбал уже....
   Sserj
 
6 - 06.09.20 - 11:47
(4)(5) delete .. from это чисто MSSQL расширение, нет такого в стандартах SQL.
Используй стандартный синтаксис:
delete ...
where
iddoc in (select....)
   CaIIIka
 
7 - 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.
   CaIIIka
 
8 - 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 )

Чет не пойму, куда ему скобку воткнуть.
   CaIIIka
 
9 - 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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.