Помните, что манипулирование данными посредством SQL-запросов запрещено политикой фирмы 1С.
Итак, описание обработки.
Бывают нередко случаи, когда ваши базы данных хранятся на SQL-сервере и необходимо подготовить одну из баз определенным образом, очистив не нужные данные из нее. И тут на помощь придет данная обработка. С ее помощью вы сможете:
1) Удалить документы:
— Удалить все документы из базы, либо интересующий вас вид документов.
— Удалить документы за определенный период
— Удалить документы по Организации
2) Удалить справочники
3) Удалить регистры сведений
4) Удалить регистры накопления, регистры бухгалтерии, регистры расчета.
5) Очистить последовательность документов, бизнес-процессы, задачи
Обновление (03.04.2012)
Обновлена обработка.
Добавлено удаление по определенному документу!!!. Вид документа можно выбирать, либо из списка документов, либо, если отмечено все, то самим выбирать вид документа при выборе.
Обновление (28.11.2012)
Добавлена версия для платформы 1С 8.1
Обновление (13.12.2012)
Добавлены дополнения к объектам метаданных выводимых на форме, а именно:
— Добавлено наименование таблицы в терминах СУБД (имя таблицы в SQL-сервере)
— Добавлен размер занимаемый таблицей в SQL-сервере
Обновление (23.10.2013)
— Добавлено удаление элементов справочников с отбором по реквизитам удаляемого справочника
— Добавлено удаление записей регистров накопления за период
— Исправлены некоторые ошибки при работе
Обновление (18.11.2013)
— Добавлено удаление документов «Только помеченные на удаление», т.е. удаление документов с признаком ПометкаУдаления = ИСТИНА
Обновление (09.02.2025)
Небольшая доработка:
— Добавлена возможность «Не ограничивать время ожидания выполнения команды SQL», понадобится тем, у кого большие объемы данных хранятся в регистрах и при попытке их удалить приходит ответ от сервера SQL «… время ожидания истекло …»
Обновление (27.05.2025)
Доработка:
— Добавлена возможность «Не ограничивать время ожидания выполнения команды SQL» для всех объектов конфигурации, а не только для регистров накопления.
Обновление (06.06.2025)
Доработка:
— Исправлена ошибка с удалением справочников.
— Добавлена возможность предварительно проверить соединение с SQL не выполняя каких-либо удалений.
— Исправлены мелкие недочеты.
Обновление (15.09.2025)
Доработка:
— Изменен механизм удаления документов, теперь документы можно удалять по произвольным отборам.
— Исправлены ошибки с запросом размеров таблиц SQL по регистрам сведений, накопления, бухгалтерии.
— Исправлены мелкие недочеты.
Обновление (16.09.2025)
Доработка:
— Добавлено удаление табличных частей справочников при удалении элементов справочников.
Обновление (07.02.2025)
Доработка:
— Добавлена обработка для управляемых форм ( также для режима такси).
— Механизм отборов реализован через средства СКД
Ограничения в версии для управляемых форм:
— На данный момент работает лишь удаление с произвольным отбором документов и справочников.
Добавление удаления с произвольным отбором регистров сведений, накопления, бухгалтерии будет добавлено позже.
Обновление (16.03.2025)
Доработка:
— Исправлена ошибка: при выборе всех регистров сведений они не очищались сразу.
Обновление (28.03.2025)
Доработка:
— Исправлена ошибка: при удалении без отбора не удалялись сразу необходимые таблицы, обработка пыталась очистить таблицы базы по записям, а не всю сразу.
Обновление (30.03.2025)
Доработка:
— Исправлена ошибка: при удалении без отбора не удалялись сразу таблицы табличных частей документов и справочников, удалялись данные из табличных частей, только если был установлен хоть какой-то отбор.
Обновление (10.08.2025)
Доработка:
— Исправлена ошибка: при удалении регистров бухгалтерии за период, не удалялись данные из таблиц.
Важное: После того, как удалите какие-либо данные из базы, с помощью данной обработки, необходимо обязательно выполнить «Тестирование и Исправление» конфигурации.
А нас рать 🙂
очень поможет если нужна «голая» конфа
(2) На самом деле, вариантов применения данной обработки может быть несколько. Вот еще один вариант применения: Есть база в которой 2 (или более организаций) организации и вам необходимо разделить базу на количество организаций. Делаете копию базу и в каждой из баз очищаете все по нужным организациям.
Где-то уже пробегала похожая обработка, правда только по чистке документов. Называлась вроде «БыстроеУдалениеДокументов.epf». Но там только документы можно было удалять. А тут видно функционал расширен. Надо будет попробовать как-нибудь.
что то не пойму, документы удаляются по организации, за период. А регистры? такого отбора нет???
смысл тогда удаления документов по организации?
Молодец хорошая вещь
Вот еще заметил, что нету отбора расширенного. Если б можно было отборы настраивать, так вообще бы обработка была «МастХев»
(5)В описании же сказано, что после использования обработки необходимо ТиИ, если удаляешь документы, то в регистрах остаются записи, после ТиИ в регистрах этих записей уже не остается, только тестирование и исправление надо делать с параметрами «Очищать ссылки», «Удалять объект»
Конечно же не забываем делать копии баз предварительно…
(4)Видел данную обработку, именно она и сподвигла меня написать эту обработку с разными отборами.
(7)В планах все это конечно же есть )))
Первым в списке очередности выполнения сейчас стоит «отбор в документах по определенному документу или нескольким документам» и удаление всех ссылающихся на этот документ(ы) записей из регистров и т.д., чтобы не надо было ТиИ делать ради одного документа например или списка документов ))
Вышло обновление обработки (03.04.2012)
Появилась возможность удаления определенного документа!
А после Truncate table например справочника как потом восстанавливаются предопределенные элементы? ТиИ помогает?
При попытке выполнить очистку базы, вот такая ошибка:
{ВнешняяОбработка.ОчисткаБазы.МодульОбъекта(245)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL-сервер не существует, или отсутствует доступ.
Подскажите, как решить данную проблему…
(13) Djonny,
Это говорит о том что у вас нету доступа к серверу SQL, к серверу локально подключаетесь или удаленно где он находится? Серверная проверка подлинности на SQL-сервере настроена как?
(14)есть два сервера: сервер sql и сервер 1с. Оба сервера в одной сети. Обработку запускаю на сервере 1с, указываю сервер sql и пользователя sql. Серверная политика — смешанная (SQL и windows).
(14) сейчас попробовал запустить обработку с того сервера, где стоит sql — эффект тот же…
(16) Djonny,
Проверьте открыты ли порты, может брандмауэр не пускает.
Еще вариант, попробуйте там, где имя сервера стоит набрать ip-адрес сервера SQL, если на самом сервере SQL пробуете, то попробуйте в имени сервера указать 127.0.0.1
(17) Спасибо. Но все оказалось гораздо проще: По умолчанию в параметры подключения проставляются данные сервера 1С. (Имя сервера и имя БД). Так вот менял только название сервера, а имя БД не трогал. Оказалось что на сервере БД и на сервере 1С просто по разному называется база:) вот поэтому и возникала эта ситуация…
Спасибо.
Спасибо, отличная обработка. 300 тысяч записей удалила очень быстро 🙂
Правда, я думаю стоило бы выложить сюда также версию для 8.1, так как обратного конвертирования обработок нету.
Однозначно! Версия под 8.1 нужна!
А то не удается схему СКД 8.2 перенести в 8.1
Автор, организуй пожалуйста версию под 8.1!
(20) kondrat1C,
Здравствуйте.
Ок, постараюсь перенести, но пока даже не знаю когда смогу это сделать, завал на работе…
ну а может тогда хотя бы подскажете как макет с СКД из 8.2 перенести в 8.1?
со всем остальным сложности не должно быть
а кстати, а как очищаются движения в зависимых регистрах накопления?
Первое сообщение должно быть обязательным к прочтению, ибо Вы не разработчик и можете что нибудь упустить при таком вмешательстве в структуру SQL. Обидно будет если ошибка обнаружится через определенное время когда будет уже поздно использовать откат на предыдущую копию. Как говорится Скорость тут не помощьник.
Здравствуйте.
Выбираю:
— Очистить за период документы, журналы документов
— выставляю период
— в списке документов убираю галки с документов которые не нужно очищать
Запускаю, в итоге все документы за период удалены (и те которые были не отмечены)
Что я сделал не так ?
Отличные вещи порою находятся на инфостарте
(25) knowikDen, ну это как вариант, но только более медленный
(21)
Ок, постараюсь перенести, но пока даже не знаю когда смогу это сделать, завал на работе…
Пока не получилось под 8.1 версию сделать?
Для очень больших баз это незаменимая обработка.
Добавлена версия для платформы 1С 8.1
Прошу пожалуйста пробовать, если будут ошибки, пишите, буду исправлять по мере возможностей ))
Однозначно плюс! Для «киломентовых» баз она незаменима! Особенно когда надо облегчить базу (удалить документы, а база ~200 Гб)
обработка зверь )
добавить что ли во внешние отчеты и обработки? 🙂
(34) adhocprog, Молодец! Какая МЫСЛЬ!!!!!)))
(2) Если нужна «голая» конфа, не проще cf загрузить в новую базу?
(36) Abadonna,
Если нужна «голая» конфа с текущими релизами, то да, проще cf накатить.
А если нужна точно такая же без документов, например еще одну организацию заводим (еще встречаются клиенты кто разные фирмы в разных базах ведет)? с помощью данной обработки мы как раз и сможем создать довольно быстро такую конфигурацию сохранив нужные нам справочники. Конечно, вариантов использования данной обработки довольно много ))
(37) мой коммент относился к конкретно «голой», как и написано в /2/
А товарищи восьмерочники заново изобретают то, что давно было в 7.7 «изобретено».
Скуль — он и в Африке скуль.
(38) Abadonna, я и писал как раз для случаев когда нужно «без документов»
Я читаю, что написано:
очень поможет если нужна «голая» конфа
Без всяких там «этим стихотворением Пушкин хотел сказать…»
Как альтернатива мне ещё два года назад помоглаhttp://infostart.ru/public/59489/ (тоже удаляет, но там информация в полном объеме), если и работать напрямую с SQL необходимы данные по именам таблиц и их размерам, и есть не только таблицы самих объектов конфигурации, но и связанные, иногда перед очисткой интересно посмотреть. Как Ваша поступает с ними?
(41)
В представленной вами обработке, она удаляет целиком данные из всей таблицы базы SQL, у меня в обработке такое тоже можно делать, например с документами это пункт 1. (Выбираете интересующий вас вид документа и удаляете целиком таблицу).
1. Для чего вам видеть объем таблиц базы SQL ?
2. Для чего вам имена таблиц? Вы хотите 1С-ными средствами обращаться к определенным именам таблиц SQL ?
Это немного другая область работы с SQL (определение узких мест в базе, посмотреть насколько разрослись таблицы базы) — вот для чего нужна обработка на которую вы ссылаетесь.
Можно их например, в паре использовать. Смотрите объем таблицы документов и с помощью моей обработки удаляете либо за период, либо по фирме данные определенной вами ранее таблицы.
При удалении например определенного документа (выбранных журнала документов и вида документов) удалятся также записи из таблиц регистров по которым проходят движения по данному документу.
Обновление (13.12.2012)
Добавлены дополнения к объектам метаданных выводимых на форме, а именно:
— Добавлено наименование таблицы в терминах СУБД (имя таблицы в SQL-сервере)
— Добавлен размер занимаемый таблицей в SQL-сервере, а также можно просмотреть размер занимаемый таблицей с обновлением сведений об использовании места на диске.
Хорошая обработка, вот ещеб добавил чтоб удалялись движения документа вмести с самим документом и вобщеб цены небыло…
(44) Арах,
На самом деле движения при удалении документа тоже удаляются ))
Попробуйте удалить какой-либо документ и найти в регистрах по которым он проводился движения по этому документу))) Вы их не найдете.
при попытке удалить определенный документ
{ВнешняяОбработка.ОчисткаБазы.МодульОбъекта(797)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца «_IDRRef».
(46) Арах,
Какой вид документа пытаетесь удалить? в какой конфигурации?
Дайте больше данных пожалуйста.
(45)
на самом деле движения = записи в регистрах, все остаются только удаляются ссылки на регистратор:)
щас посмотрим что будет после ТиИ….
(47)
пытаюсь удалить определенную РеализациюТоваровУслуг в УТ11, документ не проведен.
(48) Арах,
Сейчас специально проверил еще раз, удаются записи в регистре целиком, а не только ссылка на регистратор.
Ну в любом случае после ТиИ если будет стоять удалять объекты, то он удалит их.
(50)
вот результат в регистре после удаления документов:
{ВнешняяОбработка.ОчисткаБазы.МодульОбъекта(797)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца «_IDRRef».
такая ошибка возникает только при попытке удалить определенный док. если удалять за период то все ок.
когда поправшишь ошибки то?:)
Спасибо. Обработка очень помогла. Быстро, удобно.
О, хорошая обработка, нужная.
А кто нибудь делала замеры производительности? во сколько раз быстрее чем обычная чистка базы?
Как автор данной обработки, отвечаю, что специально замеров не делал.
А что вы сомневаетесь в том, что удаление данных посредством SQL запросов будет медленнее, чем очистка базы средствами 1С ?
Проделан большой труд, за что и СПАСИБО, но не хватает одной мелочи. Для полного счастья еще нужно чистить регистры накопления по периоду. В моем случае обрезается база с 2009 по 01,01,2013 года, за день по 500 реализаций одних только. И что мы имеем в итоге:
1) Документов нет(то что нужно)
2) Движения все остались, теперь нужно мудохатся с тестированием, либо делать доки не проведенными(тогда смысел этой обработки???Можно просто запустить непосредственное удаление и за неделю удалить), а вот если бы еще регистр почистился бы за период то было бы просто ВАВВВВ(даже если просто без привязки к документам)!!!
(57)
Сомневаюсь в том что Тестирование и исправление будет быстро ковырять три года, чую что надо будет еще писать SQL запрос по чистке регистра, хотя в этом полный нОль 🙁
(58) Мысль хорошая добавить возможность по удалению движений за период из регистров накопления. Сделаю себе пометку к реализации данного функционала.
(60)
DELETE FROM [Имя_Базы].[dbo].[Имя_Таблицы]
WHERE _Period < ‘01.01.2013 00:00:00’
Решила всю проблему, при чем за пару сек(в отличии от тестирования, которое за пол часа ничего не сделал, а что бы сделать нужно будет сутки), но так как с Скулой не дружу то как то стремает там что то делать да и изучать ее лень, а было бы не плохо все запускать из 1С… В любом случае СПС за труды
{ВнешняяОбработка.ОчисткаБазы.МодульОбъекта(464)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver]Время ожидания истекло
Как то удаляет выборочно… если помесячно то удаляет если за пару месяцев(4) то ошибка
(62)Недостаточно данных…
Что именно удаляете, что выбираете и т.д.
(63)
Удаляется док.»Реализация товаров» период — год , выдает вот такую ошибку, когда делаю помесячно прожовывает, может большой массив данных… хз. Конфа самописная, за месяц 23 тонны документов в среднем.(только реализации)
Новое обновление обработки от 23.10.2013
— Добавлено удаление элементов справочников с отбором по реквизитам удаляемого справочника (если хотите удалить целиком весь справочник, то выставляете галочку рядом с этим справочником и в отборе ничего не указываете, тогда удалятся все элементы справочника)
— Добавлено удаление записей регистров накопления за период
— Исправлены некоторые ошибки при работе
Доброго времени суток!
Замечательная обработка. Несколько вопросов:
1) Как я понимаю никакого контроля целостности в данном случае нет?
2) Можно ли добавить в отбор по справочникам и документам еще условие на «Пометка Удаления» (ну например чтобы можно было задать так: документы «Реализация товаров и услуг» за 2012 год с пометкой на удаление)?
(66) mzelensky,
1) Совершенно верно понимаете, никакого контроля целостности нету, обработка сразу удаляет данные из базы.
2) По справочникам такой отбор можно установить самостоятельно для каждого вида справочника. Общие реквизиты для всех справочников делать не удобно, да и редко кому требуется, поэтому и были сделаны отборы для каждого вида справочника. А вот по документам сделать удаление по реквизиту «ПометкаУдаления» можно над этим подумать, как лучше реализовать.
Вообще конечно в планах и для документов сделать отборы как со справочниками для каждого вида документов свои отборы. Просто сейчас сделал для справочников, чтобы посмотреть будет ли актуально такое и будет ли народ пользоваться такими отборами.
Отборы в любом случае лишними не будут, так что делать нужно однозначно!
А про пометку говорю т.к. это удобно при свертке. Свернули базу — получили кучу доков помеченных на удаление. Можно конечно и без пометки их удалить (чисто периодом), но все же я лучше бы еще перестраховался. Чтобы лишнего не удалить.
Вышло очередное обновление обработки (18.11.2013)!!!
Добавлено удаление документов с пометкой на удаление.
(68) Приятная для вас новость, реализовал то, что вы просили 🙂
Обработка нужная.
Скажите с какими базами SQL она работает?
(70) m0r0z,
Не совсем понял вопрос
, если вас интересует версии MS SQL Server, то проверял на 2008 SP3 думаю что на 2005 тоже нормально отработает, никаких спец.операций выпущенных только с SQL 2008 не использую.
Будет ли она работать на PostgreSQL?
(72) m0r0z,
нет, на PostgreSQL работать не будет, потому что используется драйвер SQL Server
Спасибо, очень выручила!
(1.3.2) есть 2 ошибки:
1. целиком справочник не удаляет, т.к. в коде:
КомандаВыполненияSQL = «TRUNCATE TABLE «+ТекСтрока.ИмяТаблицыХранения;
а дальше ничего…
чтобы работало, добавить:
Connection.Execute(КомандаВыполненияSQL);
2. ОчиститьОбъектыНаУровнеSQL(Отказ, ПричинаОтказа, ИндикаторСостояния, СтрокаПодключения, МассивОбъектов, мПометкаУдаления = Неопределено)
мПометкаУдаления = Неопределено, а в коде проверка на Булево, выдает ошибку,
можно исправить заменив на:
мПометкаУдаления = Ложь
Спасибо за ошибки. Обязательно проверю! и выложу новую версию.
(62) angy, CommandTimeout=0
Вылетает ошибка. Скрин приложил.
(77) oplachko, Процедура ОчиститьОбъектыНаУровнеSQL(Отказ, ПричинаОтказа, ИндикаторСостояния, СтрокаПодключения, МассивОбъектов, мПометкаУдаления = Ложь) так заработало
(0) Справочники не удаляет!!!
04.03.2014
Вышло обновление обработки (1.3.3), исправлены мелкие замеченные ошибки.
А зачем при очистке регистров накопления за период формируется таблица значений «ТЗДвоичныхДанных»?
Там идет выборка записей регистра, насколько я понял (Пока RecordSet.Eof() = Ложь Цикл) и весь эффект скорости сводит на нет. Перебираются миллионы записей. Я дождался только сообщения об ошибке связанной с SQL, ругалось на «MoveNext» и никакой очистки не случилось.
Если цикл закомментировать, то вываливает вот такое:
Маладец! Труд просто титанический. А еще и регулярная поддержка. Просто респект…
Автор я извиняюсь что тревожу вас но так сложились обстоятельства. Ві не могли бі скинуть обработку на емайл electronik@ukr.net просто кровь из носу.
Огромное Спасибо. Выручили очень и очень сильно. Есть еще на свете добрые люди!!!!!!!!!!!!
На 8.1 вылетает ошибка на пустые поля в SQL
Выполнение тестирования и исправления инфобазы предполагает, что происходит повреждение данных?
(58)
1) Документов нет(то что нужно)
2) Движения все остались, теперь нужно мудохатся с тестированием, либо делать доки не проведенными(тогда смысел этой обработки???Можно просто запустить непосредственное удаление и за неделю удалить), а вот если бы еще регистр почистился бы за период то было бы просто ВАВВВВ(даже если просто без привязки к документам)!!!
У меня в 8.1 тоже движения по документам оставались — чистил обработкой для удаления проводок удаленных документов, ссылки к сожалению не сохранилось..
последовательности пометил на удаление, но они почему-то остались.
Извиняюсь, все работает, спасибо!
А контроля уникальности в обработке нет?
Добрый день!
Смотрю обработка на обычных формах, для управляемых будет работать, если запустить в обычном режиме ?
Конфигурация БП 3.0
Спасибо за ответ за ранее !!!
Как победить такую проблему: в регистре заказы покупателей почти 4 млн записей, обработка отваливается по таймауту, как с этим бороться? Еще почему то не очищается регистр накопления Товары на складах. Выбрал очистить за период по 31.12.2014 обработка проходит, пишет выполнено, захожу в регистр — записи на месте. У меня глаза на лоб полезли после того как провел оприходование и сформировал ведомость по товарам на складах)))
(93) qwed557,
Попробуйте новую версию обработки 1.3.4 с установленной галочкой на странице регистров «Не ограничивать время ожидания выполнения команды SQL»
Обработка отличная, спасибо автору, хорошо было вы еще добавить отбор, к примеру удалить все помеченные документы по организациям.
Здравствуйте!
Тестируем вашу обработку, удаляем пока документы за предыдущие периоды, вроде бы пока удачно, но есть пара пожеланий.
В настройках SQL добавить кнопку Проверка соединения.
Добавить к прогресс-бару текстовую строку с текущим видом удаляемых объектов, а то при удалении большого количества документов индикатор замирает на 15% или на 77% и не совсем понятно то ли висит, то ли удаляется или может второй прогресс-бар по текущему виду, было бы совсем замечательно, если возможно такое.
У нас все документы за год удалялись часа полтора-два, окончание не удалось застать, поэтому неплохо было бы по окончании узнать время удаления, для оценки следующих удалений и примерного ожидания на рабочей базе.
И в последней версии в заголовке окна остался номер 1.3.3
(96) permnets,
Здравствуйте. Пожелания приняты, буду думать как лучше добавить на форму ))
В крайней версии реквизит «Организация» вдруг стал строковым.
При удалении документов — Истекло время ожидания запроса.
1) Режим разделения данных понимает?
2) Процесс транзакционный? Что будет, если в середине процесса возникнет исключение?
3) При полной очистке таблицы — delete from или truncate table?
Добрый день, приобрели Вашу разработку, воспользовались.
Нет ли возможности удаления Регистров Бухгалтерии за период.
У нас после удаления документов, почему то остались движения (проводки) по регистру бухгалтерии. ТиИ не спасло. Проводки на месте.
Ошибка при тестировании и исправлении.
Какие мысли?
(14) Скажите пожалуйста, а обязательна ли смешанная проверка подлинности? Или можно только по Windows-аутентификации подключиться? В этом случае надо ли что-то заполнять в поля «Имя/пароль пользователя SQL» ? Спасибо
UPD Уже разобрался. Неправильно было заполнено имя сервера (с портом, пришло из параметров подключения к серверу 1С), убрал порт — windows-аутентификация в SQL без указания имени-пароля пользователя — нормально отработало, подключилось.