gifts2017

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

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

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

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

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

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

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

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

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

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