Прямое удаление документов

Администрирование - Чистка базы

Здравствуйте, уважаемые коллеги.
Понимаю, что очередной велосипед, и опять без контроля ссылочной целостности, но надо же с чего-то начинать :)
Плюсы мне не нужны, но очень нужна критика опытных товарищей по цеху, ибо нештатные средства типа SQL-ных запросов 1С++ только начинаю осваивать.
Заранее благодарна.
Тем более буду счастлива, если это кому-нибудь пригодится :)

Чистит за период таблицы шапок и строк документов, движения регистров, таблицу проводок, таблицу операций, таблицу перекрестных ссылок и журнал.

Работает только с SQL-ной версией.

Скачать файлы

Наименование Файл Версия Размер
Удаление документов средствами SQL
.rar 16,37Kb
02.07.13
170
.rar 16,37Kb 170 Скачать бесплатно

См. также

Комментарии
1. Ёпрст (Ёпрст) 1021 26.10.09 13:52 Сейчас в теме
Цель то какая, в итоге ?
Порезать базёнку?..
И это... куча ссылок останется на доки..
Тут либо по всем табличкам шастать и прибивать, либо ТиИ делать потом.
3. A (My Precious) 14 26.10.09 14:25 Сейчас в теме
(1)
Основная цель - познание ранее неизвестного :)
В периодике, да, останется. Там так кардинально шуровать пока стремновато. А еще где? Прогуляться по справочникам?..
ТиИ само собой.

(2) Ага, удобный :)
4. Dmitry Afanasyev (afanasko) 35 26.10.09 18:39 Сейчас в теме
(3) А еще где?
Теоретически, ссылка на документ может быть в любом месте: в реквизите справочника, другого документа, в регистре, в проводке и т.д.
Практически, необходимо пробегать по метаданным и искать во всех реквизитах, типа "Документ", "Документ.ХХХХ", "Неопределенный"
5. Magus (magus) 26.10.09 20:01 Сейчас в теме
(4) Можно и по метаданным пробежать, можно и процедурой НайтиСсылки() воспользоваться.
8. A (My Precious) 14 27.10.09 09:52 Сейчас в теме
Спасибо за ответы :)

(4) Ссылки (IDDOC, да?), допустим, понахожу (хотя как сформулировать такой запросище пока не представляю, будем разбираться). Будет список доков, у которых есть хвосты. А дальше чего с ним делать? Запихивать в условия удаляющих запросов? Как быть, если в попавших в исключения документах есть ссылки на не попавшие? Возможно SQL-ными методами проследить цепочки связок?

(5) На больших тормознутых и фатально запущеных базах НайтиСсылки() работает слишком долго. Это ничем не будет отличаться от штатного удаления; для круглосуточного производства, на котором базу можно остановить максимум на час, к сожалению, не подходит.

(6) Понятное дело, знала бы все на свете - не просила б помощи зала :)
11. Dmitry Afanasyev (afanasko) 35 27.10.09 17:31 Сейчас в теме
(8). Да, IDDOC. Формулировать особо ничего не надо. Просто пробежать по метаданным и найти реквизиты нужного типа. Метапарсер в 1С++ автоматически преобразует имена объектов в соответствующие имена внутренних таблиц SQL.

Главное -- помнить, что длина поля типа "Документ" отличается от длины поля типа "Документ.ХХХХ". Аналогично с типом "Неопределенный". Т.е. если для типизированного поля поиск можно вести по "IDDoc" (9 симв), то для просто "Документ" поиск уже ведется по "RIGHT(IDDoc,9)" (13 симв).
А уж с неопределенным и того хуже "RIGHT(LEFT(PARENTVAL,15),9)" (по крайней мере в таблице подчиненных так).

Кстати, ваша обработка не учитывает ссылку в поле PARENTVAL таблицы CRCDOC.

Цепочки связок проследить не удастся, т.к. не стоит ограничение целостности на уровне SQL.

Вообще я тут подумал, муторное это дело и, в принципе, бесполезное )))).
Лучше вам потренироваться на чем-нибудь другом. Например переписать ведомость по партиям на прямых запросах.

My Precious; +1 Ответить
12. A (My Precious) 14 28.10.09 00:21 Сейчас в теме
(11) Спасибо!

длина поля типа "Документ" отличается от длины поля типа "Документ.ХХХХ". Аналогично с типом "Неопределенный".
Ага, про это я читала, теперь еще понятней :)
ваша обработка не учитывает ссылку в поле PARENTVAL таблицы CRCDOC.
Принято к сведению :)

муторное это дело и, в принципе, бесполезное )))
Свою-то базу я таким образом уже секвестировала: зная связки между доками и что цепочек длиннее суток нет, срезала до дня Икс-1, а дальше шринк и штатными. Но ведь хочется, чтобы все было идеально... :D
2. Альтаир (Altair777) 639 26.10.09 14:07 Сейчас в теме
(0) Знакомый диалог на скриншоте.... :-)
6. Сергей Коцюра (CheBurator) 3407 27.10.09 01:52 Сейчас в теме
в итоге автору - если в целом - незачет...
7. Михаил Ражиков (tango) 476 27.10.09 07:52 Сейчас в теме
ага, полигон нашли, блин, для упражнений. на кошечках тренируйтесь
10. Альтаир (Altair777) 639 27.10.09 10:39 Сейчас в теме
(7) Если мне не изменяет память (см.комм.2), она не только на кошечках тренируется. :)
9. Андрей Зайцев (zaic) 112 27.10.09 10:30 Сейчас в теме
Можно еще добавить одну кнопочку чтобы только "Пометить" на удаление или снять пометку. Так из тестовой обработки может со временем и полезная вещица получиться..
13. Вадим Скакун (UncleVader) 126 28.10.09 09:18 Сейчас в теме
Когда писал свой такой велосипед то пришел к комбинированному решению: прямым запросом выгребаю из под документов движения по регистрам, табличные части и помечаю сами доки на удаление; после этого делаю пакетное удаление штатной функцией с проверкой. В конце пересчет регистров. В итоге все очень быстро и аккуратно.
14. Александр Зубцов (iov) 363 28.10.09 17:11 Сейчас в теме
ага разок воспользовался подобным творением после того как свормировал итоговые документы свертки (на свертку базы выделели 13 часов максимум а 500 000 доков с кучей движений ну никак не хотели так быстро удалятся пришлось рубануть потом ссылки вычищал месяц). В итоге светка начинается за неделю до дня X и закрывается помесячно формирую на конец месяца остатки, и после сворачиваю уже остатки на конец года. используя по 3-4 часа в день (максимум) или во время формирований документов (без контроля остатков или иных контролей).
заодно и ссылки проверяю (так как товар и контрагенты тоже чистятся то заодно помечаю их на удаление и тех кого можно будет удалить - добавляю префикс для понятности).
p.s. не уникальное решение, но работает а так как тут просят именно совета то вот как-бы алгоритм.
16. A (My Precious) 14 30.10.09 11:14 Сейчас в теме
(14), (15) - Спасибо!

(15) Да, мы тоже так поступаем, но все равно слишком долго (документооборот 2000+ в день). Пользователи имеют неприятную манеру игнорировать предупреждения, а потом вопить в духе "я тут полдня документы задним числом правил, куда моя работа делась?!" и писать докладные наверх...

Так что это изобретение велосипеда полезно только для развития мозгов.
Да, и это прекрасно :)
17. Евгений Б (johnicjs) 104 30.10.09 11:23 Сейчас в теме
(16) Дата запрета редактирования на время свертки. :D

Сам не пробовал, но вроде как, можно резать регистры по одному на живую. Утверждать не буду, не пробовал.

Да, и это прекрасно
Никто и не спорит.
15. Евгений Б (johnicjs) 104 28.10.09 22:42 Сейчас в теме
Что касается всяких-разных сверток (урезок) и невозможности получить необходимое время, то я использую примитивно простой способ: делаю копию базы, режу ее, а потом перегружаю все свежие документы стандартной обработкой перегрузки в идентичную конфигурацию Таким образом остановка базы занимает минимум времени. Так что это изобретение велосипеда полезно только для развития мозгов.
ev-kov; iov; arr; +3 Ответить
18. Ирина Нечаева (Arin) 29.09.11 18:36 Сейчас в теме
19. Евгений Долиновский (Dolly_EV) 264 29.11.12 16:04 Сейчас в теме
Автор, спасибо! очень помогло.. Только немного добавил, чтобы была возможность не наглухо удалять документы и движения, а только помечать на удаление:
1. на форму флаг "только пометка Х"
2. в модуль два условия "Если флТолькоПометка=0 Тогда"
при удалении шапок документов и перекрестных сслок
и вилку при удалении ссылок из _1SJourn
Если флТолькоПометка=0 Тогда"
 ... delete
Иначе
 ...ТекстЗапроса = "
	|UPDATE
	|	_1SJourn
	|SET
	|	_1SJourn.IsMark=1
....
КонецЕсли
Показать
Оставьте свое сообщение