Очистка базы данных 1С от данных по организациям прямыми SQL-запросами к СУБД
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Преамбула:
Довелось мне как-то поддерживать БД 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 позволяет сохранять структуру метаданных и хранения данных в файлы и читать из файлов. Сделано для возможности отладки формирования скрипта в условиях, когда нет доступа к конфигурации.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83676 431 171
Информационная безопасность Чистка данных Системный администратор Разработчик Руководитель проекта 1С 8.3 1С:Бухгалтерия 3.0 Платные (руб)
Обезличивает копию рабочей базы 1С перед передачей наружу и возвращает настоящие данные обратно, когда база вернулась. Это обратимая псевдонимизация: соответствия «исходное - псевдоним» пишутся в отдельный зашифрованный датасет, который остаётся у владельца. Работает на любой конфигурации - обходит метаданные и находит персональные данные сам, без списка реквизитов под конкретную базу. Суммы, количества, даты и номера документов не трогает никогда, оборотно-сальдовая до и после совпадает до копейки. Проверено на трёх конфигурациях: 106 031 объект, 215 642 замены, ноль ошибок, возврат 100 процентов.
42700 руб.
18.08.2026 1605 4 0
Чистка данных Системный администратор Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Update 2026: добавили многопоточное удаление данных по организациям. Ускорение х6 по сравнению с однопоточным алгоритмом! Позволяет удалить организации из любых из информационных баз 1С на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3, УНФ, Розница 3.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.
12139 руб.
16.03.2015 282962 272 84
Чистка данных Разработчик Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)
Обработка позволяет удобно и выборочно удалить данные из базы 1С на управляемых формах например БП 3.0, УТ 11, КА 2, ERP, УНФ, ЗУП 3, Розница и др. Это могут быть неактуальные организации или другие перечни объектов. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся. Объекты нужно выбирать вручную и после этого запускать команду удаления. Будут удалены все ссылки на них.
5000 руб.
28.11.2019 31429 86 21
Оптовая торговля Логистика, склад и ТМЦ Чистка данных Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)
Если вы начали работать в программном продукте Управление Торговлей, редакция 11 или Комплексная Автоматизация редакция 2 и включили механизм учёта серий, то перейти обратно в учёт без серий будет не так-то просто. Сложность заключается в том, что нужно очистить серии в табличной части документа, например, Реализация Товаров и услуг. Предлагаем алгоритм перехода на учет без серий для программного продукта УТ11. (Очистка серий.)
5084 руб.
09.04.2019 32968 51 15
Чистка данных Инструменты администратора БД Администрирование 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)
Решение представляет собой набор из 6 обработок для 1С по удалению организаций и справочников из базы по фильтрам, документов по фильтрам, универсальное сжатие данных, очистка битых движений регистратора, удаление устаревших регистров сведений, удаление устаревших документов "Электронное письмо входящее" и "Электронное письмо исходящее"
23999 руб.
20.02.2026 2422 1 0
Чистка данных Инструменты администратора БД Разработчик Пользователь 1С 8.3 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Абонемент ($m)
Хочешь выборочно удалить одну организацию, тестовую номенклатуру или «мусорного» контрагента, любую ссылку - без ручного поиска ссылок и часовых разборок зависимостей? Этот инструмент сам строит дерево связей, каскадно чистит с "глубоким поиском" документы, справочники, пвх, любые ссылки, регистры, движения в так же делает резервную копию и за пару минут оставляет базу чистой и полностью работоспособной (Управляемые формы, обычный интерфейс)
1 стартмани
03.02.2026 4794 153 war41k 0
Корректировка данных Чистка данных Разработка Инструментарий разработчика 1С:Предприятие 8 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:ДО Отраслевые 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Универсальная обработка для быстрой и эффективной корректировки записей любых регистров сведений, накопления и бухгалтерии
12200 руб.
25.11.2025 4498 6 0
Обработка генерирует текст скрипта, соблюдая ссылочную целостность.
Ссылочная целостность соблюдается следующим образом: если есть запись в таблице, в полях которой содержатся ссылки на удаляемый объект, то такая запись так же удаляется из таблицы.
Другими словами:
Нужно удалить ОрганизацияА, значит нужно удалить все банковские счета, где есть ссылка по владельцу ОрганизацияА, значит нужно удалить все документы, в реквизитах которых есть ссылки на все удаляемые банковские счета и т.д.
Скрипт учитывает, когда в регистре имеется запись со складом/договором удаляемой организации?:)
Плюс поставил.
Она только в Бух 2 работает? для бухи 2-ой не очень актуально, там можно через план обмена по организации обменяться - правда хвосты остаются.
На самом деле, когда база под > 200 ГБ, да что там 200, > 100-150 даже, другого выхода очистить быстро данные по определенным организациям не предоставляется возможным. Это трудно понять/осознать, пока не столкнешься. На этот случай обработку пришлось дорабатывать, которая покруче текущей.
Это не так.
Предоставляется еще как.
Пометить на удаление документы / справочники труда не составляет.
Основные проблемы возникают при удалении очень большого количества объектов. Но если удалять порциями (даже с поиском ссылок перед удалением объектов) то все прекрасно отрабатывает.
Скрипт формируется порядка суток-двое на базе в 100-200Гб, исполнение скрипта - ну пусть еще сутки-двое, в итоге - пусть неделя на вычищение базы в 200Гб разом от всех(1/5/100...) не нужных организаций.
Удалял исключительно методами 1С Предприятия (без использования SQL запросов, прямого доступа в таблицы и т.п.).
Основные затраты времени были на удаление помеченных на удаление объектов поскольку их было под 500 тысяч.
Менее чем за неделю сделал в расслабленном режиме.
Причем это делал первый раз и на решение всех моментов ушло время. Сейчас уже этот опыт приобретен, поэтому думаю сделал бы за пару дней.
С учетом
не вижу в чем выигрыш в вашем случае.
Да метод интересный но штатными методами (без использования SQL запросов, прямого доступа в таблицы и т.п.) можно добиться ничуть не худшего результата.
При этом штатные методы гарантируют отсутствие ошибок типа (29), (31), (44) или (60).
Почему нельзя указать длину гуида справочника или перечисления (а ему-то зачем столько?) ,как это возможно с кодом и наименованием справочника?
Хотя для составных типов это не поможет, но не все же они составные....
Можно же не использовать в составных типах, если гуид не подходит...
Ваша обработка гибче, согласен, но у меня не было задачи частично вынести данные по организациям в БД.
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 ПоказатьЗдесь выбираются регистраторы из таблицы изменений регистра, а не из основной таблицы. В итоге из основной таблицы записи не удалились.
Нетиповая УПП 125.1
Ошибка после нажатия кнопки "Сформировать скрипт SQL":
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(541)}: Метод объекта не обнаружен (НайтиСтроки)
Массив = ТекСХД.НайтиСтроки(Отбор);
Что дальше делать?
БД ERP 2.4, доработанная, размер файла БД - 175ГБ на момент начала очистки.
Удаление данных 1 организации из 7.
Размер сгенерированного скрипта SQL - 48МБ, время выполнения - 2 часа 30 минут.
Размер освобожденного пространства в файле БД - 63ГБ.
Комплексная автоматизация, редакция 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".
Файл скрипта прикрепил
Сообщение 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".
Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты. ЗАПИСЕЙ: 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
...........................
Прикрепил отрывок скрипта.
Если ВывелиНачалоТранзакции И ЗначениеЗаполнено(ТекСХД_1) Тогда
Текст.ЗаписатьСтроку("COMMIT" + ?(ТипСУБД = 0, "", ";"));
КонецЕсли;
ВывелиНачалоТранзакции = Ложь;"
И далее в блоке "Если НЕ ТекЗависимыйОбъект.ВидОбъекта = "РегистрСведений" Тогда" два раза встречается "Текст.ЗаписатьСтроку("BEGIN TRANSACTION");", после них надо добавить "ВывелиНачалоТранзакции = Истина;".
Просто эта функция появилась только в 8.3.1, а у вас заявлено что все универсально и работает даже для 8.0
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.83.25)
{(6, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
<<?>>ВЫРАЗИТЬ(Ссылка КАК Справочник.ПодразделенияОрганизаций) В(&Массив)
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1380)}: Результат = Запрос.Выполнить();
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(684)}: Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(747)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(602)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(6)}: ОбработкаОбъект.СформироватьСкриптSQL(, "УП");
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(14)}: СформироватьСкриптSQLНаСервере();
по причине:
{(6, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
<<?>>ВЫРАЗИТЬ(Ссылка КАК Справочник.ПодразделенияОрганизаций) В(&Массив) ПоказатьЯ так понимаю, это где-то битые ссылки?
В таком случае Выразить() не нужно.
Я пока не устранял этот недочет, как будет время - обновлю версию обработки. Либо самостоятельно доработайте, если ждать не хотите.
А в целом, все получилось, спасибо! Отличное решение!
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
server_addr=tcp://srv-sql01:1560 descr=10054(0x00002746): Удаленный хост принудительно разорвал существующее подключение. line=1593 file=src\DataExchangeTcpClientImpl.cpp
Вадим, как побороть проблему?
При выполнении скрипта вываливается в ошибку.
Скрипт и ошибка во вложении
error_query.txt
Если бы таблица tt3 не создалась вообще по какой-то причине, то ошибка появилась бы в строке 1523, в которой формируется сама tt3 и в строке 1527, где происходит первое обращение к tt3.
или все же ошибка не одна и начались ошибки не со строки 1654?
Еще желательно перед удалением данных выполнить ТиИ с контролем логической и ссылочной целостности + пересчетом итогов, чтобы быть уверенным, что в этом плане все хорошо с данными в БД.
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1383)}: Запрос.УстановитьПараметр("Массив", ЗначениеИзФайла(ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов));
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(686)}: Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(604)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(6)}: ОбработкаОбъект.СформироватьСкриптSQL(, "УП");
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.ФормаУправляемая.Форма(14)}: СформироватьСкриптSQLНаСервере();
по причине:
Ошибка преобразования
Использование TEMP зависит от вида приложения:
1. для управляемого - пользовательская папка пользователя, под которым запущен сервис на сервере 1С.
2. для обычного - пользовательская папка пользователя, запустившего обработку.
Если с местом все хорошо, то какая-то специфическая ошибка, нужна отладка.
Ошибка при вызове метода контекста (ЗначениеИзФайла)
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1383)}: Запрос.УстановитьПараметр("Массив", ЗначениеИзФайла(ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов));
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(686)}: Если КонтрольНаличияДанных И ЕстьДанные(ПараметрыТекущегоОбъекта, ТекЗависимыйОбъект, ТекущийЭлементДерева, ИмяФайлаХраненияОбъектов) Тогда
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(761)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ТекЗависимыеОбъекты, СтрокаДерева, НомерТаблицы + 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(604)}: ОбработатьЭлементыРекурсивно(Текст, СтруктураОбъекта, ЗависимыеОбъекты, ТекущийЭлементДерева, 1, Ложь);
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.Форма.Форма(45)}: СформироватьСкриптSQL(Текст, "ОП");
по причине:
Ошибка преобразования
{ВнешняяОбработка.ОчисткаОтДанныхОрганизации.МодульОбъекта(1383)}: Запрос.УстановитьПараметр("Массив", ЗначениеИзФайла(ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов));
Ошибка говорит о том, что невозможно прочитать файл, путь которого в ТекущийЭлементДерева.ИмяФайлаХраненияОбъектов.
Возможно, файл был удален сторонней программой, возможно, занят антивирусом.
С применение данной обработки в сумме за сутки отработало, внешне все норм.
Реквизиты шапки все заполнены. Судя по скрипту отбор идет по договорам контрагентов. Хотя договоры в документах остались.
да, точно. В ТЧ поступления есть еще раз "договор контрагента". На форме, в отчетах, даже в типовых отборах он не доступен. Однако во всех документах заполнен каким то "левым" договором.
БП 3.0 Корп типовая, учет с 15го года, никак не проявило себя.
Пока починил, перенеся исходную таблицу в SQL в порезанную базу.
Наконец-то я заполучил её :D
ЗЫ: проверил ссылочную целостность через конфигуратор - ошибок нет.
Зачем нужен уровень вложенности?
Спасибо.
Можете добавить в справочник "Контрагенты" реквизит "Организация", заполнить у нужных контрагентов организации и почистить таким образом.
"Уровень вложенности" нужен для ограничения обработки вложенности метаданных/данных.
Допустим есть такая взаимосвязь метаданных:
Справочник.МойСправочник2
|_Справочник.МойСправочник1
|_Справочник.ПодразделенияОрганизаций
|_Справочник.ОрганизацииПри уровне вложенности 3 Справочник.МойСправочник2 не будет обрабатываться.
SEL ECT _IDRRef AS Ref INTO #tt3 FR OM _Reference159 WHERE _Fld23224RRef IN (SEL ECT Ref FR OM #tt2)
PRINT '2.1.Справочник.Подразделения'
SEL ECT _IDRRef AS Ref INTO #tt4 FR OM _Reference78 WH ERE _Fld23259RRef IN (SEL ECT Ref FROM #tt3)
PRINT '3.1.Справочник.ДоговорыКонтрагентов'
SELECT _IDRRef AS Ref INTO #tt5 FR OM _Document294 WH ERE _Fld5036RRef IN (SELECT Ref FR OM #tt4)
PRINT '4.2.Документ.ГТДИмпорт'
DELETE FR OM _Document294 WH ERE _IDRRef IN (SELECT Ref FR OM #tt5)
Если в документе нет Договора или в Договоре не выбрали подразделение они не удаляются?
Такого рода оптимизации можете реализовать самостоятельно.
Если учет ведется не корректно, то будут удалятся казалось бы не нужные объекты.
Если такое произойдет, то да, ситуация возможна, но с ней вполне можно разобраться штатными механизмами.
Чтобы ситуация повторилась, то в одной ТЧ должно оказаться что-то, что принадлежит удаляемой и не удаляемой организациям.
Я пока слабо себе представляю такую ситуацию в условиях корректного ведения учета, разве что интеркомпани в УТ11.х
И еще вопрос - я правильно понимаю, что если некий, к примеру, документ имеет "НекийРеквизит" с типом Организации, то обработка удалит такой документ, если НекийРеквизит = УдаляемаяОрганизация? Или это настраивается? Имею в виду, что с точки зрения логики конфигурации этот реквизит может и не быть ключевым для принятия решения об удалении объекта.
И еще один момент - поля _RTRef, _RecorderTRef не используете? Можно нарваться, если в разных таблицах одинаковые ссылки, после обменов каких-то, например...
Да, именно так.
Не настраивается. Основная логика работы: если не нужна организация, то и все, что связанно с ней прямо/косвенно тоже не нужно.
Лично я пока слабо себе представляю, для чего в одном типе документа может понадобится наличие нескольких разных организаций.
Если у вас какая-то сильно не типовая конфигурация, где такое практикуется, то можете доработать обработку самостоятельно.
в регистрах тип ссылки не проверяется, т.к. вероятность того, что несколько РАЗНЫХ ТИПОВ ДОКУМЕНТОВ у РАЗНЫХ ОРГАНИЗАЦИЙ будут иметь одинаковый UID(без учета типа) - исчезающе низкая. В пределах одной организации - высоковероятно, но мы избавляемся от всего, что связано с организацией, поэтому не страшно.
БП Корп.
Я правильно понимаю, если в движениях документа Корректировка реализации указан в субконто документ Поступление, а в Поступлении ошибочно указан договор удаляемой организации, то у Корректировки будет удалено все движение, а не одна строка с этим Поступлением?
1. MS SQL Server 2008 R2, Бухгалтерия предприятия 3.0
2. В базе 35 организаций, оставляем 4 организации, удаляем 31 организацию. Скрипт формируется около 18 часов, метаданные перед этим заполнены
3. После запуска скрипта в справочнике остаются нужные организации, но документы при этом остаются только у первой организации из списка, у остальных организаций документы удаляются. Сначала подумал, что что-то неправильно сделал, восстановил базу, повторил - результат аналогичный. Навскидку, чтобы долго не искать в коде - в чём может быть проблема, куда посмотреть? Предположение, что нужные документы затрагиваются по какой-то аналитике, которая связана с удаляемыми организациями, но тогда почему остаются документы именно у первой организации из списка?
4. В ОСВ данные отображаются, данные в расшифровке ОСВ отсутствует, 1С пишет о необходимости пересчёта итогов. Это следствие удаления документов, скорее всего
Скрипт не удалял, могу прислать.
PS: При разделении одной базы на две, с одновременным запуском обработки в обоих базах, во временных файлах происходит конфликт доступа к файлам с именем типа GUID. Имеет смысл добавить в путь к временным файлам идентификатор базы, из которой запускалась обработка.
Удаляемые организации являются обособленными подразделениями в виде организаций неудаляемой?
Если нет, то скорее всего удаленные документы содержат аналитику, которая ссылается на удаленные организации.
"Если нет, то скорее всего удаленные документы содержат аналитику, которая ссылается на удаленные организации."
Смущает то, что остаются документы от первой указанной в списке организации, а все остальные удаляются целиком. Базу восстановил, попробую найти аналитику связанную
Рейтинг: 84
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1125435
Создание 20.09.19 15:30
Обновление 09.10.20 11:29
Просмотры 34968
Загрузки 266
Рейтинг
53
Комментарии 142
Код открыт Да
Рубрики Чистка данных
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)