bdd2

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

Опубликовал A (My Precious) в раздел Администрирование - Чистка базы

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

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

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

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

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

См. также

Добавить вознаграждение
Комментарии
1. Ёпрст (Ёпрст) 1010 26.10.09 13:52 Сейчас в теме
Цель то какая, в итоге ?
Порезать базёнку?..
И это... куча ссылок останется на доки..
Тут либо по всем табличкам шастать и прибивать, либо ТиИ делать потом.
2. Альтаир (Altair777) 633 26.10.09 14:07 Сейчас в теме
(0) Знакомый диалог на скриншоте.... :-)
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) Можно и по метаданным пробежать, можно и процедурой НайтиСсылки() воспользоваться.
6. Сергей (Che) Коцюра (CheBurator) 3366 27.10.09 01:52 Сейчас в теме
в итоге автору - если в целом - незачет...
7. Михаил Ражиков (tango) 467 27.10.09 07:52 Сейчас в теме
ага, полигон нашли, блин, для упражнений. на кошечках тренируйтесь
8. A (My Precious) 14 27.10.09 09:52 Сейчас в теме
Спасибо за ответы :)

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

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

(6) Понятное дело, знала бы все на свете - не просила б помощи зала :)
9. Андрей Зайцев (zaic) 110 27.10.09 10:30 Сейчас в теме
Можно еще добавить одну кнопочку чтобы только "Пометить" на удаление или снять пометку. Так из тестовой обработки может со временем и полезная вещица получиться..
10. Альтаир (Altair777) 633 27.10.09 10:39 Сейчас в теме
(7) Если мне не изменяет память (см.комм.2), она не только на кошечках тренируется. :)
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 Ответить 1
12. A (My Precious) 14 28.10.09 00:21 Сейчас в теме
(11) Спасибо!

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

муторное это дело и, в принципе, бесполезное )))
Свою-то базу я таким образом уже секвестировала: зная связки между доками и что цепочек длиннее суток нет, срезала до дня Икс-1, а дальше шринк и штатными. Но ведь хочется, чтобы все было идеально... :D
13. UncleVader (UncleVader) 124 28.10.09 09:18 Сейчас в теме
Когда писал свой такой велосипед то пришел к комбинированному решению: прямым запросом выгребаю из под документов движения по регистрам, табличные части и помечаю сами доки на удаление; после этого делаю пакетное удаление штатной функцией с проверкой. В конце пересчет регистров. В итоге все очень быстро и аккуратно.
14. Александр Зубцов (iov) 358 28.10.09 17:11 Сейчас в теме
ага разок воспользовался подобным творением после того как свормировал итоговые документы свертки (на свертку базы выделели 13 часов максимум а 500 000 доков с кучей движений ну никак не хотели так быстро удалятся пришлось рубануть потом ссылки вычищал месяц). В итоге светка начинается за неделю до дня X и закрывается помесячно формирую на конец месяца остатки, и после сворачиваю уже остатки на конец года. используя по 3-4 часа в день (максимум) или во время формирований документов (без контроля остатков или иных контролей).
заодно и ссылки проверяю (так как товар и контрагенты тоже чистятся то заодно помечаю их на удаление и тех кого можно будет удалить - добавляю префикс для понятности).
p.s. не уникальное решение, но работает а так как тут просят именно совета то вот как-бы алгоритм.
15. Евгений Б (johnicjs) 103 28.10.09 22:42 Сейчас в теме
Что касается всяких-разных сверток (урезок) и невозможности получить необходимое время, то я использую примитивно простой способ: делаю копию базы, режу ее, а потом перегружаю все свежие документы стандартной обработкой перегрузки в идентичную конфигурацию Таким образом остановка базы занимает минимум времени. Так что это изобретение велосипеда полезно только для развития мозгов.
ev-kov; iov; arr; +3 Ответить 1
16. A (My Precious) 14 30.10.09 11:14 Сейчас в теме
(14), (15) - Спасибо!

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

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

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

Да, и это прекрасно
Никто и не спорит.
18. Ирина Нечаева (Arin) 29.09.11 18:36 Сейчас в теме
19. Евгений Долиновский (Dolly_EV) 262 29.11.12 16:04 Сейчас в теме
Автор, спасибо! очень помогло.. Только немного добавил, чтобы была возможность не наглухо удалять документы и движения, а только помечать на удаление:
1. на форму флаг "только пометка Х"
2. в модуль два условия "Если флТолькоПометка=0 Тогда"
при удалении шапок документов и перекрестных сслок
и вилку при удалении ссылок из _1SJourn
Если флТолькоПометка=0 Тогда"
 ... delete
Иначе
 ...ТекстЗапроса = "
	|UPDATE
	|	_1SJourn
	|SET
	|	_1SJourn.IsMark=1
....
КонецЕсли
...Показать Скрыть