Очистка базы данных 1С от данных по организациям прямыми SQL-запросами к СУБД

09.10.20

База данных - Чистка данных

Работа с помощью прямых запросов в случае, когда нельзя, но очень необходимо.

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

Наименование Файл Версия Размер
Очистка БД 1С от данных по организациям прямыми SQL-запросами к СУБД
.epf 31,55Kb
184
.epf 1.5.1 31,55Kb 184 Скачать

Преамбула:

Довелось мне как-то поддерживать БД 1С БП 2.0, в которой вели учет 100+(более СТА, КАРЛ!!!) организаций. Последующий перевод на 3.0 повлек за собой необходимость разделения этой БД на несколько. Разделение обуславливалось возможностью ведения учета ЗП в БП. В БП 2.0 система не ограничивала видимость объектов БД в зависимости от глобальной настройки ведения учета ЗП в БП, а тут - стала. Было принято решение о разделении БД.

База была клиент-серверной, на базе MS SQL.

Естественно, сразу было принято решение о том, что бы создать узел РИБ, и выгрузить в него данные по нужным организациям. Как оказалось, в данном случае появляются префиксы в номерах документов, чего категорически было делать нельзя + сам процесс формирования начального образа узла завершался ошибкой после 10-15 часов непонятных действий.

Попробовав пару раз таким образом создать узел, я оставил эту затею. Решил сделать копию, с надеждой, что в дальнейшем я почищу базы от не нужных организаций.

Пометил на удаление данные по не нужным организациям. Удаляемых объектов оказалось ~500к в одной базе и ~200к - в другой. Оставив процесс удаления на ночь, с утра я обнаружил, что прогресс не шибко продвинулся.

Не прерывая процесса удаление производилось в течении недели и скорость этого процесса была крайне низкая.

После примерно месяца мытарств с типовым удалением, которое так и не выполнилось до конца, мне пришлось создать данную обработку.

 

Амбула:

Обработка генерирует текст скрипта, соблюдая ссылочную целостность.

Ссылочная целостность соблюдается следующим образом: если есть запись в таблице, в полях которой содержатся ссылки на удаляемый объект, то такая запись так же удаляется из таблицы.

Другими словами:

Нужно удалить ОрганизацияА, значит нужно удалить все банковские счета, где есть ссылка по владельцу ОрганизацияА, значит нужно удалить все документы, в реквизитах которых есть ссылки на все удаляемые банковские счета и т.д.

 

С помощью сгенерированного скрипта весь процесс удаления длился 30-40 минут для каждой из баз.

Особенно актуально, если БД доступна в режиме 24/7.

 

Алгоритмы могут быть использованы более универсально, т.е. для удаления других объектов или в условиях других СУБД, но для этого придется доработать самостоятельно. 

Использование скрипта, естественно на свой страх и риск.

К версии платформы не чувствительна, т.е. должна и на 8.0 и на 8.3.16 работать одинаково.

 

P.S. я прекрасно знаю про лицензионные ограничения, но 1С не предоставляет никаких других типовых средств очистки БД сравнимой производительности.

UPD: Версия 1.5.1. Исправлена ошибка приводящая к конфликту типов в конструкции ВЫРАЗИТЬ() запроса наличия данных в БД. Добавлена возможность указать версию pgAdmin при формировании скрипта для PostgreSQL.

UPD: Версия 1.5.0. Добавлена возможность проверять наличие данных в таблицах, чтобы не обрабатывать все возможные комбинации. Добавлена возможность отключать вывод количества удаляемых записей в основных таблицах при выполнении скрипта - это сэкономит время выполнения скрипта в ~2 раза. Добавлено удаление данных из таблиц итогов. Исправлены недочеты/ошибки в формировании текста скрипта, а так же выполнены некоторые дополнительные оптимизации.

UPD: Версия 1.4.0. Добавил возможность указывать максимальный уровень вложенности проверки ссылочной целостности. Внесены некоторые оптимизации в текст скрипта.

UPD: Версия 1.3.0 Добавлена возможность формирования скрипта для PostgreSQL. Исправлены ошибки сформированного скрипта версии 1.2.0.

UPD: Версия 1.2.0 Существенно переработан и оптимизирован алгоритм формирования скрипта. Добавлена возможность сохранять скрипт сразу в файл *.sql.

UPD: Версия 1.1.0 позволяет сохранять структуру метаданных и хранения данных в файлы и читать из файлов. Сделано для возможности отладки формирования скрипта в условиях, когда нет доступа к конфигурации.

Обработка SQL 1C MSSQL PostgreSQL

См. также

Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0

Чистка данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление торговлей 11 Платные (руб)

Данные обработки помогут Вам легко и, главное быстро, выполнить удаление любых данных в Ваших базах 1С на платформах 8.1-8.3. Обработки помогут легко просмотреть связи ссылок в виде дерева, выбрать что удалять, а что нет, используя любые отборы. Это позволит уменьшить объем лишней и не нужной информации в справочниках и документах, планах видов характеристик и др. объектах и облегчит работу с данными пользователям и Вам. Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. (Обновление от 04.10.2023, версия 4.2)

9600 руб.

22.02.2013    135911    248    144    

418

Универсальное выборочное удаление данных из базы 1С (любые конфигурации на упр.формах: БП 3.0, УТ 11, КА 2, ERP, УНФ, ЗУП 3, Розница и т.д.)

Чистка данных Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Обработка позволяет удобно выборочно удалить данные из базы 1С. Это могут быть как неиспользуемые элементы справочников, так и неактуальные организации. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся.

3350 руб.

28.11.2019    24309    46    16    

58

SALE! 10%

Выборочное удаление организаций из баз (управляемые формы), с удалением всех ссылающихся на эти организации данных

Чистка данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Позволяет удалить организации из любых программ на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3.0, УНФ, Розница 2.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.

3980 3582 руб.

16.03.2015    113703    181    75    

217

Замена Номенклатуры+Характеристики

Чистка данных Логистика, склад и ТМЦ Платформа 1С v8.3 План видов характеристик 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Настраиваемая обработка, позволяющая заменить пару: Номенклатура+Характеристика в документах, их движениях и независимых регистрах сведений. Без перепроведения. Поможет, если вы по каким-то причинам решили отказаться от характеристик

3600 руб.

04.08.2015    41109    88    70    

49

Удаление битых ссылок 1С в базе без монопольного режима

Чистка данных Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если в вашей информационной базе крутится очень много данных, или база должна быть доступна 24/7 (как в моем случае), или же вы боитесь запускать тестирование и исправление, НО существует потребность удалить битые ссылки, тогда эта обработка сможет Вам помочь. Обработка выявляет битые ссылки как в самих объектах метаданных, так и в их табличных частях(!), а так же может их удалить.

2400 руб.

23.08.2021    9258    15    3    

20

Очистка дублей в синхронизированных базах (УТ, БП, РТ, УНФ)

Чистка данных Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Решение по удалению дублей позволяет определить связанные элементы в двух синхронизированных базах в качестве оригиналов и избежать необходимости ручного сравнения объектов в базах перед синхронизацией.

3960 руб.

27.06.2018    18804    10    3    

15

Очистка регистров сведений от записей по помеченным на удаление элементам

Чистка данных Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

в современных конфигурациях стало очень много регистров сведений, хранящих вспомогательную и периодическую информацию и администраторы информационных систем стали сталкиваться с проблемой удаления помеченных на удаление объектов, так как ссылки на них хранятся в многочисленных регистрах сведений. Помочь почистить базу от ненужных записей предназначенная данная внешняя обработка на управляемой форме, которая ищет записи во всех регистрах сведений по помеченным на удаление объектах и очищает по ним записи их после использования данной обработки дальше можно смело пользоваться типовой обработкой удаление помеченных на удаление и проблем с удалением не возникнет! Удачи всем!

1200 руб.

21.01.2022    7122    5    6    

9

Очистка кэша 1С. Исполнитель

Чистка данных Инструментарий разработчика Платформа 1С v8.3 Абонемент ($m)

Очередная вариативная очистка кэша 1С с помощью Исполнителя 3.0.2.2.

1 стартмани

25.10.2023    4531    4    SerVer1C    25    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 92 20.09.19 15:50 Сейчас в теме

Обработка генерирует текст скрипта, соблюдая ссылочную целостность.

Ссылочная целостность соблюдается следующим образом: если есть запись в таблице, в полях которой содержатся ссылки на удаляемый объект, то такая запись так же удаляется из таблицы.

Другими словами:

Нужно удалить ОрганизацияА, значит нужно удалить все банковские счета, где есть ссылка по владельцу ОрганизацияА, значит нужно удалить все документы, в реквизитах которых есть ссылки на все удаляемые банковские счета и т.д.

Скрипт учитывает, когда в регистре имеется запись со складом/договором удаляемой организации?:)
2. nomad_irk 71 20.09.19 15:53 Сейчас в теме
(1)Да, чистится все, включая таблицы оборотов и остатков регистров.
Пересчет итогов после выполнить все же рекомендую, как и проверить на ссылочную/логическую целостность средствами конфигуратора 1С.
3. Indgo 338 20.09.19 16:18 Сейчас в теме
Классная обработка, может на пару дней скинете цену на одного шейкеля для бетатеста, я так сказать одним глазком гляну )
Плюс поставил.

Она только в Бух 2 работает? для бухи 2-ой не очень актуально, там можно через план обмена по организации обменяться - правда хвосты остаются.
4. nomad_irk 71 20.09.19 16:25 Сейчас в теме
Нет, работает для любой конфигурации вообще.
Лично тестировал на БП3.0, ЗУП2.5, ERP2.5, УТ10.3, УПП 1.3.

Даже в файловом варианте формирует скрипт, ессно применять его не к чему и негде :)
5. Indgo 338 20.09.19 16:29 Сейчас в теме
(4)
ЗУП2.5, ERP2.5, УТ10.3, УПП 1.3.

Круто, давай еще сделай восстановление последовательности в ERP на MSSQL
6. nomad_irk 71 20.09.19 16:31 Сейчас в теме
(5)это шибко круто в контексте изменения данных БД 1С прямыми запросами в СУБД :)
7. lunjio 66 20.09.19 18:27 Сейчас в теме
(5)
новление последовательности в ERP на MSSQL

На самом деле, когда база под > 200 ГБ, да что там 200, > 100-150 даже, другого выхода очистить быстро данные по определенным организациям не предоставляется возможным. Это трудно понять/осознать, пока не столкнешься. На этот случай обработку пришлось дорабатывать, которая покруче текущей.
8. nomad_irk 71 20.09.19 18:53 Сейчас в теме
(7)куда там еще может быть круче? :)
9. lunjio 66 20.09.19 19:11 Сейчас в теме
(8) Там далее нажимаешь удалить, он по отборам генерирует SQL скрипт на удаление, с учетом наложенных отборов, если галочка удалить движения документа, левым соединением соединяется по регистратору и удаляет из всех связаных регистров движения.
Прикрепленные файлы:
77. ChessCat 12.01.21 18:05 Сейчас в теме
(7)
На самом деле, когда база под > 200 ГБ, да что там 200, > 100-150 даже, другого выхода очистить быстро данные по определенным организациям не предоставляется возможным. Это трудно понять/осознать, пока не столкнешься.


Это не так.

Предоставляется еще как.

Пометить на удаление документы / справочники труда не составляет.

Основные проблемы возникают при удалении очень большого количества объектов. Но если удалять порциями (даже с поиском ссылок перед удалением объектов) то все прекрасно отрабатывает.
78. nomad_irk 71 12.01.21 18:23 Сейчас в теме
(77)Вопрос: сколько по времени займет удаление объектов таким способом: месяц/квартал/год?
Скрипт формируется порядка суток-двое на базе в 100-200Гб, исполнение скрипта - ну пусть еще сутки-двое, в итоге - пусть неделя на вычищение базы в 200Гб разом от всех(1/5/100...) не нужных организаций.
79. ChessCat 15.01.21 21:06 Сейчас в теме
(78) Я на прошлогодние новогодние праздники удалял данные в базе размером 100 Гб.

Удалял исключительно методами 1С Предприятия (без использования SQL запросов, прямого доступа в таблицы и т.п.).

Основные затраты времени были на удаление помеченных на удаление объектов поскольку их было под 500 тысяч.

Менее чем за неделю сделал в расслабленном режиме.

Причем это делал первый раз и на решение всех моментов ушло время. Сейчас уже этот опыт приобретен, поэтому думаю сделал бы за пару дней.

С учетом

Скрипт формируется порядка суток-двое на базе в 100-200Гб, исполнение скрипта - ну пусть еще сутки-двое, в итоге - пусть неделя на вычищение базы в 200Гб


не вижу в чем выигрыш в вашем случае.


Да метод интересный но штатными методами (без использования SQL запросов, прямого доступа в таблицы и т.п.) можно добиться ничуть не худшего результата.

При этом штатные методы гарантируют отсутствие ошибок типа (29), (31), (44) или (60).
80. user1503726 15.01.21 21:10 Сейчас в теме
(79) вот и я не вижу....
Почему нельзя указать длину гуида справочника или перечисления (а ему-то зачем столько?) ,как это возможно с кодом и наименованием справочника?
Хотя для составных типов это не поможет, но не все же они составные....
Можно же не использовать в составных типах, если гуид не подходит...
10. nomad_irk 71 20.09.19 19:15 Сейчас в теме
Дык моя обработка все тоже самое делает сразу, таблицы изменений/таблицы остатков и оборотов чистятся так же, т.е. выносится с базы вообще все, что связано с удаляемыми организациями.
Ваша обработка гибче, согласен, но у меня не было задачи частично вынести данные по организациям в БД.
11. lunjio 66 20.09.19 19:22 Сейчас в теме
(10) Все верно, только эта для очень тонкой очистки используется, я могу выбирать какие документы обрабатывать, удалять не удалять из журнала и доп отборы, допустим удалять только отраженные в упр учете данные. При помощи этой обработки так же осуществляется сборка, разработчик ozaycev, я же ее сильно доработал под свои нужды исправив ошибки.
Прикрепленные файлы:
12. nomad_irk 71 20.09.19 19:28 Сейчас в теме
(11)впринципе, я заложил универсальность, при необходимости можно распространить на любой тип объектов с отборами, но повторюсь - обработка написана под конкретную задачу - вынести все по организациям.
13. lunjio 66 20.09.19 20:03 Сейчас в теме
(12) А тут можно и свернуть и удалить данные только по упр учета, оставив бух и вынести по организациям и много чего ) Как правило, часто требуется и свертка данных, наряду с удалением других организаций. Ни в коем случае не принижаю вашу разработку, но есть разработка которая охватывает более широкий спектр задач, т.к вы спросили куда круче. Вы молодец что выложили, я время не найду текущую сделать универсальной и под УФ и под ОФ и выложить, предварительно конечно с разрешения автора исходной, хотя она сильно перелопачена.
14. nomad_irk 71 20.09.19 20:46 Сейчас в теме
(13)да, согласен, погорячился я на счет "куда круче", я просто это в контексте только тотальной зачистки имел ввиду, если говорить в общем, то конечно же можно творить чудеса круче :)
15. DrZombi 286 21.09.19 16:32 Сейчас в теме
10 стар мани? да вы жмот с большой буквы...
DimaP; mikele_bes; artfa; +3 Ответить
16. Fox-trot 156 21.09.19 20:35 Сейчас в теме
17. nomad_irk 71 22.09.19 10:37 Сейчас в теме
(16) Да вы прям вообще свои знания и умения не цените :)
acanta; YPermitin; +2 Ответить
18. Fox-trot 156 22.09.19 10:39 Сейчас в теме
делай добро и бросай его в воду (с)
19. nomad_irk 71 22.09.19 13:14 Сейчас в теме
(18)Если все добро бросать в воду, можно и без штанов остаться.....
den_marino90; +1 Ответить
20. DoctorRoza 23.09.19 08:53 Сейчас в теме
(19) Делай добро и бросай его в воду. Оно не пропадет — добром к тебе вернется (Ух ты, говорящая рыба!)
21. пользователь 23.09.19 08:56
Сообщение было скрыто модератором.
...
22. nomad_irk 71 23.09.19 09:06 Сейчас в теме
42. Andrewww_www 28.12.19 09:06 Сейчас в теме
Ещё есть ошибка. Для ERP 2.4 формируется вот такой кусок при удалении зависимых объектов для документов, являющихся регистраторами регистра накопления "ВыручкаИСебестоимостьПродаж":
DECLARE @n INT
SEL ECT _RecorderRRef AS Ref INTO #tt3 FR OM _AccumRgChngR59004 WHERE _RecorderRRef IN (SEL ECT Ref FR OM #tt2)
SET @n = (SEL ECT COUNT(*) FROM #tt3)
IF @n > 0 PRINT ' РегистрНакопления.ВыручкаИСебестоимостьПродаж. ЗАПИСЕЙ: ' + CAST(@n AS NVARCHAR(20))
BEGIN TRANSACTION
DELETE FROM _AccumRgChngR59004 WH ERE _RecorderRRef IN (SELECT Ref FR OM #tt3)
DELETE FR OM _AccumRg58937 WH ERE _RecorderRRef IN (SELECT Ref FR OM #tt3)
COMMIT
DR OP   TABLE #tt3
GO
Показать

Здесь выбираются регистраторы из таблицы изменений регистра, а не из основной таблицы. В итоге из основной таблицы записи не удалились.
23. zubanovpavel 23.09.19 15:44 Сейчас в теме
Добрый день.

Нетиповая УПП 125.1
Ошибка после нажатия кнопки "Сформировать скрипт SQL":

{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(541)}: Метод объекта не обнаружен (НайтиСтроки)
Массив = ТекСХД.НайтиСтроки(Отбор);

Что дальше делать?
24. nomad_irk 71 23.09.19 15:48 Сейчас в теме
Платформа 1С какой версии?
Предлагаю перевести общение в личные сообщения.
25. zubanovpavel 23.09.19 15:58 Сейчас в теме
26. nomad_irk 71 23.09.19 16:05 Сейчас в теме
(25)Ответил личным сообщением.
27. nomad_irk 71 19.10.19 15:49 Сейчас в теме
Результаты нагрузочного тестирования:

БД ERP 2.4, доработанная, размер файла БД - 175ГБ на момент начала очистки.
Удаление данных 1 организации из 7.
Размер сгенерированного скрипта SQL - 48МБ, время выполнения - 2 часа 30 минут.
Размер освобожденного пространства в файле БД - 63ГБ.
корум; DimaP; +2 Ответить
28. nomad_irk 71 22.10.19 15:34 Сейчас в теме
Обновил обработку. Скачавшим вышлю новую версию по запросу в личку с указанием e-mail.
29. vik80111 37 30.10.19 00:26 Сейчас в теме
1С:Предприятие 8.2 (8.2.19.130)
Комплексная автоматизация, редакция 1.1 (1.1.4.1)

Удаляю по Одной организации.

Сразу выдает:

Справочник.БанковскиеСчета. ЗАПИСЕЙ: 2
Сообщение 207, уровень 16, состояние 1, строка 10
Недопустимое имя столбца "Ref".
Сообщение 137, уровень 15, состояние 1, строка 19
Необходимо объявить скалярную переменную "@n".
Сообщение 137, уровень 15, состояние 2, строка 20
Необходимо объявить скалярную переменную "@n".
Сообщение 137, уровень 15, состояние 1, строка 22
Необходимо объявить скалярную переменную "@n".

... и т.д.

Сообщение 137, уровень 15, состояние 1, строка 124783
Необходимо объявить скалярную переменную "@n".
Сообщение 137, уровень 15, состояние 2, строка 124784
Необходимо объявить скалярную переменную "@n".
Сообщение 137, уровень 15, состояние 1, строка 124791
Необходимо объявить скалярную переменную "@n".
Сообщение 137, уровень 15, состояние 2, строка 124792
Необходимо объявить скалярную переменную "@n".

Файл скрипта прикрепил
Прикрепленные файлы:
Гес.sql
30. nomad_irk 71 30.10.19 14:00 Сейчас в теме
(29) Обновил обработку. Если не сможете бесплатно обновиться, сообщите личным сообщением с указанием е-mail.
32. vik80111 37 30.10.19 18:34 Сейчас в теме
(30) Продолжим отладку...

Сообщение 2714, уровень 16, состояние 1, строка 17
В базе данных уже существует объект с именем "#tt3".
Сообщение 2714, уровень 16, состояние 1, строка 30
В базе данных уже существует объект с именем "#tt5".
Сообщение 2714, уровень 16, состояние 1, строка 44
В базе данных уже существует объект с именем "#tt5".

и т.д.

Сообщение 2714, уровень 16, состояние 1, строка 109548
В базе данных уже существует объект с именем "#tt2".
Сообщение 2714, уровень 16, состояние 1, строка 109555
В базе данных уже существует объект с именем "#tt2".
Сообщение 2714, уровень 16, состояние 1, строка 109562
В базе данных уже существует объект с именем "#tt2".
Прикрепленные файлы:
Вариант3_Гес.sql
31. user1137549 30.10.19 18:15 Сейчас в теме
Конфигурация ЗУП 3.1.9. Ошибка при выполнении запроса:
Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты. ЗАПИСЕЙ: 4
Msg 207, Level 16, State 1, Line 50
Invalid column name 'Ref'.
Msg 137, Level 15, State 1, Line 2
Must declare the scalar variable "@n".
Msg 137, Level 15, State 2, Line 3
Must declare the scalar variable "@n".
Msg 137, Level 15, State 1, Line 5
...........................
Прикрепил отрывок скрипта.
Прикрепленные файлы:
SQLQuery2.sql
33. nomad_irk 71 01.11.19 16:01 Сейчас в теме
34. Andrewww_www 06.12.19 04:16 Сейчас в теме
Купили обработку, в ней есть проблема: количество "BEGIN TRANSACTION" больше, чем "COMMIT".
35. Andrewww_www 06.12.19 05:13 Сейчас в теме
Исправил ошибку, если надо - могу выслать обработку. Только как? Написать личное сообщение на этом сайте не могу
36. nomad_irk 71 06.12.19 07:05 Сейчас в теме
(35) можете указать место исправления, я исправлю и обновлю обработку.
37. Andrewww_www 06.12.19 09:40 Сейчас в теме
(36) в процедуре "ОбработатьЭлементыРекурсивно" после первого блока, начинающегося с "Если ЗначениеЗаполнено(ТекСХД_1) Тогда" не хватает:"
Если ВывелиНачалоТранзакции И ЗначениеЗаполнено(ТекСХД_1) Тогда
Текст.ЗаписатьСтроку("COMMIT" + ?(ТипСУБД = 0, "", ";"));
КонецЕсли;

ВывелиНачалоТранзакции = Ложь;"
И далее в блоке "Если НЕ ТекЗависимыйОбъект.ВидОбъекта = "РегистрСведений" Тогда" два раза встречается "Текст.ЗаписатьСтроку("BEGIN TRANSACTION");", после них надо добавить "ВывелиНачалоТранзакции = Истина;".
38. nomad_irk 71 06.12.19 09:53 Сейчас в теме
(37) Спасибо. В ближайшее время обновлю обработку.
39. Wefast 27.12.19 03:40 Сейчас в теме
А куда нажать, чтобы скрипт применить?
41. Andrewww_www 28.12.19 06:52 Сейчас в теме
(39)
(40)
Это скрипт для Microsoft SQL Server, он не в 1С выполняется.
40. compaud 27.12.19 10:42 Сейчас в теме
Я думал данные именно удаляться а не пометятся на удаление.
51. nomad_irk 71 16.01.20 08:41 Сейчас в теме
(40) обработка вообще ничего не помечает на удаление......
43. Andrewww_www 28.12.19 09:19 Сейчас в теме
Моё сообщение прикрепилось к сообщению номер 20, там описание ошибки.
44. Andrewww_www 29.12.19 10:13 Сейчас в теме
Ещё ошибка. При удалении записей регистра бухгалтерии игнорируется таблица со значениями субконто.
45. Andrewww_www 29.12.19 10:38 Сейчас в теме
Еще одна.. На БП 3.0 воспроизводил, но будет еще на куче типовых с БСП. Когда обрабатывается любой документ или справочник, для регистра сведений "ВерсииОбъектов" не генерируется запрос на удаление записей данного регистра по полю "Объект" для текущего документа или справочника, потому что в этом поле могут быть ссылки и на справочник "Организации". Код пропускает этот зависимый регистр, потому что считает что он является объектом верхнего уровня. Надеюсь что понятно изложил.
46. nomad_irk 71 30.12.19 13:13 Сейчас в теме
(45) Да, спасибо, поправлю.
47. suhoi 25 01.01.20 15:26 Сейчас в теме
(46) А будет возможность оперативно исправить - нужна обработка, хотелось бы скачать уже исправленную?
48. nomad_irk 71 02.01.20 13:35 Сейчас в теме
(47) Не раньше, как закончатся выходные.
49. Andrewww_www 10.01.20 10:38 Сейчас в теме
Табличные части справочника "Организации" не удаляются.
50. nomad_irk 71 10.01.20 17:03 Сейчас в теме
Ага, проблема более "глубокая", чем казалась с начала. Разбираюсь....
52. badrvic 17 27.01.20 07:52 Сейчас в теме
(50)
Разобрались с проблемой, можно скачивать с учетом всех исправлений?
53. nomad_irk 71 28.01.20 08:10 Сейчас в теме
Нет еще. Основная проблема - поиск циклических ссылок при наличии реквизитов объектов составного типа или еще хуже с типом ЛюбаяСсылка, никак не могу придумать более менее внятный механизм.
54. nomad_irk 71 29.01.20 11:16 Сейчас в теме
В общем ничего не придумал, кроме проверки наличия данных. Сейчас в процессе тестирования на УПП, по успешному завершению выложу обновление.
55. nomad_irk 71 28.02.20 09:01 Сейчас в теме
Выложил обновление. Тестим на копиях своих баз, сообщаем об ошибках.

Лично тестил на ЗУП 2.5, УПП 1.3, БУХ 3.0, поэтому, собссно так долго не выкладывал обновление.
56. Diversus 2306 23.07.20 11:12 Сейчас в теме
Добрый день. Скажите, а вы используете функцию ПолучитьСтруктуруХраненияБазыДанных или как-то по другому сопоставляете метаданные и данные СУБД?
Просто эта функция появилась только в 8.3.1, а у вас заявлено что все универсально и работает даже для 8.0
57. nomad_irk 71 23.07.20 11:26 Сейчас в теме
(56)Именно эту функцию использую. Эта функция работает если не с 8.0, то с 8.1 - точно.
Прямого доказательства не нашёл. Вот косвенное доказательство.
Прикрепленные файлы:
58. Diversus 2306 23.07.20 11:28 Сейчас в теме
(57) Понял, спасибо.
Похоже не верная информация в справке.
Прикрепленные файлы:
59. nomad_irk 71 23.07.20 11:29 Сейчас в теме
(58)ага, тоже глянул С-П, возможно там должно быть 8.1.3
60. biz-intel 942 02.10.20 17:14 Сейчас в теме
Платформа 8.3.17.15.49
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.83.25)

{(6, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
<<?>>ВЫРАЗИТЬ(Ссылка КАК Справочник.ПодразделенияОрганизаций) В(&Массив)
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1380)}:	Результат = Запрос.Выполнить();
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(684)}:		Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(747)}:					ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(602)}:	ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(6)}:	ОбработкаОбъект.СформироватьСкриптSQL(, "УП");
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(14)}:	СформироватьСкриптSQLНаСервере();

по причине:
{(6, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
<<?>>ВЫРАЗИТЬ(Ссылка КАК Справочник.ПодразделенияОрганизаций) В(&Массив)
Показать


Я так понимаю, это где-то битые ссылки?
61. nomad_irk 71 02.10.20 22:03 Сейчас в теме
(60)Нет, это значит, что ссылка на элементы справочника ПодразделенияОрганизаций используется в каком-то другом объекте, но тип у реквизита - ОпределяемыйТип.

В таком случае Выразить() не нужно.
Я пока не устранял этот недочет, как будет время - обновлю версию обработки. Либо самостоятельно доработайте, если ждать не хотите.
62. biz-intel 942 05.10.20 10:17 Сейчас в теме
63. biz-intel 942 05.10.20 11:50 Сейчас в теме
Без Выразить() сработало. Только один момент: у Postgres нет инструкции "PRINT", соответственно скрипт будет кидать ошибки. Нужно использовать что-то такое:

do $$ BEGIN raise notice 'Справочник такой-то'; END; $$;
64. nomad_irk 71 05.10.20 12:01 Сейчас в теме
(63)ээээ...я проверял Postgres в PgAdmin - там было, если в новых версиях убрали, тогда переделать нужно.
65. biz-intel 942 05.10.20 12:13 Сейчас в теме
12-й постгрес, там уже на работает
66. nomad_irk 71 05.10.20 12:14 Сейчас в теме
(65)Хорошо. Учту при обновлении версии обработки.
68. nomad_irk 71 07.10.20 15:47 Сейчас в теме
(66)Че-т я плохо себе представляю, каким образом формировать скрипт, чтобы он начал работать в условиях pgAdmin4.х

с сообщением - понятно, не понятно, что со всем остальным делать :)
67. biz-intel 942 05.10.20 12:23 Сейчас в теме
Пришлось два раза прогонять, но это видимо у меня настройки Постгреса такие, что он чистит временные таблицы, кидало ошибку, что таблица tt2 не существует.

А в целом, все получилось, спасибо! Отличное решение!
nomad_irk; +1 Ответить
69. nomad_irk 71 09.10.20 11:29 Сейчас в теме
Обновил версию обработки.
70. slavia43 29.10.20 12:13 Сейчас в теме
База КА 2.4.12.91, платформа 8.3.16.1224, база 50Гб, около 10 организаций. Пытаюсь удалить одну организацию - во время созания SQL скрипта через 40-50 минут работы 1С вылетает по ошибке:
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
server_addr=tcp://srv-sql01:1560 descr=10054(0x00002746): Удаленный хост принудительно разорвал существующее подключение. line=1593 file=src\DataExchangeTcpClientImpl.cpp

Вадим, как побороть проблему?
71. nomad_irk 71 29.10.20 12:20 Сейчас в теме
(70)Какие-то проблемы с сервисом 1С. Возможно, сервис 1С просто перезапустили.
Включайте технологический журнал для регистрации событий EXCP и проводите анализ проблемы по нему.
72. slavia43 29.10.20 13:04 Сейчас в теме
(71) Сервис 1С точно не перезагружали, пробовал разные организации удалять - все время одинаковая проблема примерно через одно и то же время, при этом на кластере не настроена перезагрузка и отключение зависших процессов. Попробую через ТЖ поискать, спасибо за подсказку.
73. suhoi 25 07.11.20 16:38 Сейчас в теме
ЗКГУ
При выполнении скрипта вываливается в ошибку.
Скрипт и ошибка во вложении
Прикрепленные файлы:
query.txt
error_query.txt
74. nomad_irk 71 07.11.20 18:53 Сейчас в теме
(73)Судя по тексту скрипта и тексту ошибки, не совсем понятно, почему ошибка отсутствия временной таблицы tt3 проявляется именно в строке 1654, т.к. ошибка возникла бы ранее, в строке 1609, например. Между строками 1609 и 1654 нет операции DR OP TABLE tt3.

Если бы таблица tt3 не создалась вообще по какой-то причине, то ошибка появилась бы в строке 1523, в которой формируется сама tt3 и в строке 1527, где происходит первое обращение к tt3.

или все же ошибка не одна и начались ошибки не со строки 1654?
75. suhoi 25 08.11.20 11:04 Сейчас в теме
(74)
Ошибка одна.
Лог остановился на 1 ошибке и дальше не пошло.
76. nomad_irk 71 08.11.20 12:59 Сейчас в теме
(75)Т.к. ошибка странная, то не могу предложить ничего другого, как выложить копию БД, чтобы я смог проверить на своей машине.
81. Glonas73 09.04.21 23:28 Сейчас в теме
Туплю чета , сформировал скрипт, сохранил как 12.sql, открыл менеджер студио, правой кнопкой по базе , создать скрипт , вставляю туда скрипт и нажимаю выполнить?
82. nomad_irk 71 10.04.21 08:38 Сейчас в теме
(81)да, при этом необходимо выбрать базу, к которой будет применен скрипт.
Дальше ждать выполнения скрипта.
83. Glonas73 10.04.21 09:26 Сейчас в теме
(82)Все сделал , спасибо , осталось проверить корректность удаления , так реально шустро чистит.
84. Glonas73 10.04.21 11:53 Сейчас в теме
Быстро то быстро но по осв 6 лямов расход со старой базой
85. nomad_irk 71 10.04.21 12:08 Сейчас в теме
(84)проверяйте соответствие аналитик организациям(договоры контрагентов/склады/подразделения/документы расчетов). Если аналитики были связаны с удаленными организациями, то проводки так же удалились.
86. Glonas73 10.04.21 21:05 Сейчас в теме
(85)
проверяйте соответствие аналитик организациям

Прошу прощения за наглость , но как это проще сделать ? Не перелапачивать же сто тысяч пятьсот документов .
87. nomad_irk 71 10.04.21 21:13 Сейчас в теме
(86)запросом можно попробовать выяснить. Для начала нужно определить, какая аналитика зависит от организации и потом проверить наличие проводок, где проводка.Организация <> Проводка.Субконто[N].Организация.

Еще желательно перед удалением данных выполнить ТиИ с контролем логической и ссылочной целостности + пересчетом итогов, чтобы быть уверенным, что в этом плане все хорошо с данными в БД.
88. Glonas73 13.04.21 13:09 Сейчас в теме
Хотел попробовать на постгресе 13 , ERROR: syntax error at or near "BYTEA"
LINE 1: ...false, SETTINGS false) CREATE TEMP TABLE tt1 (Ref BYTEA NOT ...
89. nomad_irk 71 13.04.21 13:13 Сейчас в теме
(88)Какая версия PGAdmin используется и для какой версии сгенерирован скрипт?
90. Glonas73 13.04.21 13:26 Сейчас в теме
91. nomad_irk 71 13.04.21 13:49 Сейчас в теме
(90)При версии PGAdmin 4.13 и версии Postgre 11.5-12.1 имеющейся у меня ошибка не воспроизводится
Хорошо, попробую более свежую версию Postgre поставить, поразбираться.
Прикрепленные файлы:
92. Glonas73 13.04.21 13:53 Сейчас в теме
Можно конечно попробовать версию postgres понизить , но я чет боюсь , база не заведется
93. max_vorzhev 16 25.05.21 13:48 Сейчас в теме
Ошибка преобразования
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1383)}: Запрос.УстановитьПараметр("Массив", ЗначениеИзФайла(ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов));
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(686)}: Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(604)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(6)}: ОбработкаОбъект.СформироватьСкриптSQL(, "УП");
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(14)}: СформироватьСкриптSQLНаСервере();

по причине:
Ошибка преобразования
94. nomad_irk 71 25.05.21 14:30 Сейчас в теме
(93)Скорее всего, место в папке TEMP закончилось во время формирования скрипта при сохранении в файл очередной порции(массива) ссылок на объекты.

Использование TEMP зависит от вида приложения:
1. для управляемого - пользовательская папка пользователя, под которым запущен сервис на сервере 1С.
2. для обычного - пользовательская папка пользователя, запустившего обработку.

Если с местом все хорошо, то какая-то специфическая ошибка, нужна отладка.
95. user1274184 28.06.21 08:37 Сейчас в теме
96. nicolaj2 6 04.05.22 17:59 Сейчас в теме
После сформировать скрипт появляется ошибка

Ошибка при вызове метода контекста (ЗначениеИзФайла)
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1383)}: Запрос.УстановитьПараметр("Массив", ЗначениеИзФайла(ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов));
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(686)}: Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(604)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.Форма.Форма(45)}: СформироватьСкриптSQL(Текст, "ОП");
по причине:
Ошибка преобразования
Прикрепленные файлы:
97. nomad_irk 71 04.05.22 21:39 Сейчас в теме
(96)места на диске с TEMP хватает?
98. nicolaj2 6 05.05.22 04:38 Сейчас в теме
А сколько примерно места надо в TEMP для базы около 28 Гб? Для удаления одной небольшой организации скрипт создается.
99. nomad_irk 71 05.05.22 06:23 Сейчас в теме
(98)Все зависит от количества записей в таблицах. Думаю, 1Гб должно хватить.
Для контроля данных приходится хранить массивы ссылок на объекты в виде файлов на диске в TEMP.
Оставьте свое сообщение