Быстрое удаление проводок и пометка удаления документов средствами MSSQL

08.07.21

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

При необходимости распровести и пометить на удаление большое количество документов средствами 1С требуется большое количество времени. Иногда это время измеряется месяцами. Это происходит из-за того, что платформа 1С производит манипуляции в БД с каждым из документов в цикле. Зачастую это неприемлемо, и выполнить работу нужно быстро.

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

Наименование Файл Версия Размер
Быстрое удаление проводок и пометка удаления документов средствами MSSQL
.epf 24,13Kb
106
.epf 1.1 24,13Kb 106 Скачать

Данная обработка средствами ADO (точнее ADOx)  подключается напрямую к базе данных MSSQL с возможностью отбора по индексированным полям.

Считает количество документов по заданным отборам, сравнивает с количеством документов полученных средствами 1С и при совпадении количества позволяет средствами MSSQL распровести документы и пометить их на удаление.

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

Краткая инструкция по работе:

!!!Перед манипуляцией с БД сделайте резервную копию!!!

1. На странице "Отбор документов" с помощью доступных элементов делаем отбор документов

2. Считаем количество документов средствами 1С

3. На странице "Действия с SQL" после занесения данных для подключения к БД проверяем соединение с помощью кнопки "Тестовое соединение с БД"

4. Устанавливаем галочку "Подключиться к БД" и нажимаем кнопку "Получить кол-во документов из БД напрямую"
(если галочка не будет установлена, то на страница "Отбор документов", "Журналы документов", "Регистры" вместо выполнения будут сохранены непосредственно запросы

5. Нажимаем кнопку "Получить кол-во документов из БД напрямую" (при установленной галочке "Подключиться к БД" вернет кол-во документов на страницы "Отбор документов", "Журналы документов", "Регистры" 

6. Если кол-во документов полученное напрямую из SQL совпало с кол-вом документов полученных средствами 1С, то нажимаем кнопку "Распровести и пометить на удаление (итоговое действие)  В режиме с подключением к БД проверка автоматическая  Для контроля корректности пометки удаления перезапишите один из документов помеченных на удаление.

7. Пересчитываем итоги в конфигураторе Администрирование->Тестирование и исправление  оставляем галочку "Пересчет итогов" и проверяем, что переключатель стоит на "Тестирование и исправление".

Рекомендуется проверить обработку на тестовой базе.

P.S. Гарантий нет. Всё делаете на свой страх и риск. 

Отработка тестировалась на 1С:Предприятие 8.3 (8.3.16.1063). В результате запуска обработки около 2 млн документов распровелись, пометились на удаление  и с 6 млн. движений  удалились за 8 минут. Расчетное время аналогичных действия средствами 1С -  174 дня (8 документов в минуту)

Алгоритм работы:

  1. При открытии собираются 3 таблицы: Документы, Журналы, Регистры
    1. Для каждого ДокументМетаданные из Метаданные.Документы цикл

    1. Для каждого журналМетаданные из Метаданные.ЖурналыДокументов цикл

Если НЕ журналМетаданные.РегистрируемыеДокументы.Содержит(ДокументМетаданные) Тогда
Продолжить;   
КонецЕсли;

    1. Для каждого РегистрМетаданные из ДокументМетаданные.Движения цикл
      1.  Если Метаданные.РегистрыНакопления.Содержит(РегистрМетаданные) Тогда

      1.  ИначеЕсли Метаданные.РегистрыСведений.Содержит(РегистрМетаданные) Тогда

      1.  ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(РегистрМетаданные) Тогда
  1. Подстчет средствами 1С осуществляется одним динамическими запросом по документам  и несколькими динамическими запросами по регистрам (наличие нескольких динамических запросов обусловлено, во-первых, ограничением кол-ва параметров 999 и, во-вторых, обрезанием слишком длинного текста запроса).
    1. Документы (пример запроса)

ВЫБРАТЬ

              ТИПЗНАЧЕНИЯ(ПоступлениеТоваровУслуг.Ссылка) КАК ТипДокумента,

              КОЛИЧЕСТВО(ПоступлениеТоваровУслуг.Ссылка) КАК Количество

ИЗ

              Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

ГДЕ ПоступлениеТоваровУслуг.Дата <=&ДатаОкончания И  ПоступлениеТоваровУслуг.Организация=&Параметр1

 

СГРУППИРОВАТЬ ПО

              ТИПЗНАЧЕНИЯ(ПоступлениеТоваровУслуг.Ссылка)

 

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

              ТИПЗНАЧЕНИЯ(ПриходныйКассовыйОрдер.Ссылка),

              КОЛИЧЕСТВО(ПриходныйКассовыйОрдер.Ссылка)

ИЗ

              Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер

ГДЕ ПриходныйКассовыйОрдер.Дата <=&ДатаОкончания И  ПриходныйКассовыйОрдер.Организация=&Параметр2

 

СГРУППИРОВАТЬ ПО

              ТИПЗНАЧЕНИЯ(ПриходныйКассовыйОрдер.Ссылка)

 

    1. Журналы информация берется из запроса по документам
    2. Регистры (Пример запроса)

ВЫБРАТЬ

              КОЛИЧЕСТВО(Регистр.Регистратор) КАК Количество,

              "ПоступлениеТоваровУслуг" КАК ТипДокумента,

              "ТС_ВзаиморасчетыПоПоставкамКомитентов" КАК НаименованиеРегистра

ИЗ

              РегистрНакопления.ТС_ВзаиморасчетыПоПоставкамКомитентов КАК Регистр

ГДЕ

              Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг)<>НЕОПРЕДЕЛЕНО

              И Регистр.Активность = ИСТИНА

 И Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Дата <= &ДатаОкончания

              И Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Организация = &Парам1

 

Объединить все

 

ВЫБРАТЬ

              КОЛИЧЕСТВО(Регистр.Регистратор),

              "ПоступлениеТоваровУслуг",

              "ПараметрыАмортизацииОСБухгалтерскийУчет"

ИЗ

              РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет КАК Регистр

ГДЕ

              Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг)<>НЕОПРЕДЕЛЕНО

              И Регистр.Активность = ИСТИНА

 И Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Дата <= &ДатаОкончания

              И Выразить(Регистр.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Организация = &Парам2

  1. Подсчет средствами MSSQL (имена таблиц в Вашей базе могут отличаться, структуру таблиц можно получить с помощью стандартной функции ПолучитьСтруктуруХраненияБазыДанных)
    1. По документам (Пример по документу ПоступлениеТоваровУслуг)

SELECT COUNT(*) FROM _Document528 WHERE       _Date_Time <=? and  _Fld16056RRef in (select _IDRRef from _Reference167 WHERE _Code=?)

    1. По журналам (Пример запроса по Журналу Деньги и документу ПриходныйКассовыйОрдер

SELECT COUNT(*) FROM _DocumentJournal21517 WHERE _DocumentRRef IN (SELECT _IDRRef FROM  _Document534 WHERE       _Date_Time <=? and  _Fld16692RRef in (select _IDRRef from _Reference167 WHERE _Code=?))

    1. По регистрам (Пример запроса по регистру НДСПредъявленный и документу ПоступлениеТоваровУслуг)

SELECT COUNT(*) FROM _AccumRg29658 WHERE _RecorderRRef IN (SELECT _IDRRef FROM  _Document528 WHERE       _Date_Time <=? and  _Fld16056RRef in (select _IDRRef from _Reference167 WHERE _Code=?))

  1. Пометка удаления, распроведение и удаление движений по регистрам осуществляется путем замены части соответствующих запросов на получение количества на правильные запросы
    1. По документам (пример для документа ПоступлениеТоваровУслуг)

UPDATE _Document528 SET _Marked = 0x01, _Posted = 0x00  WHERE       _Date_Time <=? and  _Fld16056RRef in (select _IDRRef from _Reference167 WHERE _Code=?)

    1. По Журналам (пример для документа ПоступлениеТоваровУслуг журнал Документы)

 

UPDATE _DocumentJournal21542 SET _Marked = 0x01, _Posted = 0x00  WHERE _DocumentRRef IN (SELECT _IDRRef FROM  _Document528 WHERE       _Date_Time <=? and  _Fld16056RRef in (select _IDRRef from _Reference167 WHERE _Code=?))

    1. По регистрам (Регистр бухгалтерии документ ПоступлениеТоваровУслуг)

DELETE FROM  _AccRg1238 WHERE _RecorderRRef IN (SELECT _IDRRef FROM  _Document528 WHERE       _Date_Time <=? and  _Fld16056RRef in (select _IDRRef from _Reference167 WHERE _Code=?))

ADO СУБД MSSQL Пометка удаление распроведение распровести

См. также

Удаление данных с отбором и построением дерева ссылок в базах 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    135922    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    24312    46    16    

58

SALE! 10%

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

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

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

3980 3582 руб.

16.03.2015    113707    181    75    

217

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

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

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

3600 руб.

04.08.2015    41112    88    70    

49

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

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

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

2400 руб.

23.08.2021    9260    15    3    

20

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

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

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

3960 руб.

27.06.2018    18807    10    3    

15

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

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

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

1200 руб.

21.01.2022    7125    5    6    

9

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

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

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

1 стартмани

25.10.2023    4532    4    SerVer1C    25    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 14.01.20 01:12 Сейчас в теме
эээ.. если удалять/распроводить средствами MS SQL - как отрабатывает логика, заложенная в конфигураторе в "модулях" распроведения/удаления?
или я что-то не понял?
2. AlexeyIsip 26 14.01.20 04:21 Сейчас в теме
(1) логика заложенная в модулях конфигуратора никак не отрабатывает, НО удаляются все возможные движения документа (при запуске обработки заполняется таблица регистры через перебор всех регистров содержащих регистратор соответствующий документ, затем по этой таблице строятся прямые запросы к базе для подсчета и удаления движений).
Если у Вас модуль делает какие-то движения в другой базе, то логику удаления этих движений нужно допиливать, например, если речь о распределенной базе, то в этой базе можно также эту обработку запустить
3. AlexeyIsip 26 14.01.20 13:22 Сейчас в теме
(1) Добавил более подробное описание
4. Aktorg1C 06.03.20 06:47 Сейчас в теме
Алексей, воспользовался Ваше обработкой на 1С КА 2.4. (ред.2.4.6.189) 1С:Предприятие 8.3 (8.3.15.1830)
Все сделал по алгоритму, документы (а их 19245 штук) не пометились на удаление и движения остались, даже после Пересчета итогов.
Но теперь обработка не выдает количество документов ни средствами 1С ни SQL, как будто доков нет. Что порекомендуете?
9. AlexeyIsip 26 06.03.20 07:55 Сейчас в теме
(4) Попробовал еще раз эту обработку у себя. Все сработало. Какие фильтры ставил?
5. Aktorg1C 06.03.20 06:59 Сейчас в теме
Я так понял, что документ помечен на удаление, только пиктограмма остается старая, т.к. при попытке перепровести он говорит что удаленный документ провести нельзя. Но не совсем понятно, почему движения не удалились?
6. AlexeyIsip 26 06.03.20 07:07 Сейчас в теме
Если обработка показала 0 причем двумя способами, то скорее всего документов 0. Посмотрите условия фильтрации Документов, которые Вы задали в обработке, возможно Вы в интерфейсе 1С Предприятия просматриваете по другим критериям (Период, организация, возможные доп.фильтры, которые Вы могли наложить в обработке)
7. AlexeyIsip 26 06.03.20 07:10 Сейчас в теме
Удаленный документ действительно провести и у меня не получается
8. AlexeyIsip 26 06.03.20 07:12 Сейчас в теме
На почту alex_isip@mail.ru сбрось скрины, которые обработка показывает и там, где видишь, что проводки остались (оборотку)
10. Aktorg1C 06.03.20 10:09 Сейчас в теме
Алексей, все отправил на почту
11. AlexeyIsip 26 06.03.20 11:12 Сейчас в теме
12. AlexeyIsip 26 09.03.20 12:36 Сейчас в теме
Исправлена ошибка, из-за которой помеченный на удаление это обработкой документ нельзя было заново провести.
13. sv_mikh 11 04.11.20 19:35 Сейчас в теме
Добрый день! Платформа 8.3.18.1128. Бухгалтерия предприятия 3.0. Сделал по инструкции. Документы помечены. Движения остались. В конфигураторе ТИ только с пересчетом итогов делал. Почему может быть так?
14. AlexeyIsip 26 04.11.20 22:27 Сейчас в теме
(13) Попробуй заново собрать информацию той же обработкой о количестве проводок и движений. Если в обработке показывает, что движений нет, то значит пересчет итогов не правильно сделал.
15. sv_mikh 11 05.11.20 05:04 Сейчас в теме
(14) Т.е. должен показать, что по данным SQL нет документов?
17. AlexeyIsip 26 05.11.20 10:31 Сейчас в теме
(15) Не документов, а проводок
16. sv_mikh 11 05.11.20 07:22 Сейчас в теме
(14) Попробовал. После обработки, пересчета итогов запустил еще раз и получил число документов по данным 1с и данным скуля. Количество равное. Попробовать поднять твою версию платформы и на ней протестить?
18. AlexeyIsip 26 05.11.20 10:35 Сейчас в теме
(16) Количество совпадет в любом случае. На вкладе "Регистры" должны быть нули. На остальных вкладках, если не ставил галочки "только проведенные" или "только помеченные на удаление" ничего поменять не должно, тк. физически в этих таблицах данные не удалялись
19. sv_mikh 11 05.11.20 15:24 Сейчас в теме
В целом пока не получилось. Все делаю по инструкции. После обработки ссылок на документы (по данным скуля) нет, прошло ТИ с пересчетом итогов, но проводки остались и видны в оборотках. Пока отказываюсь от этого варианта пометки. Может быть дело в новой платформе.

Проделал эксперимент пару раз. Причем заметил, что если первы раз обработка на достаточно большой базе выполнялась буквально минуту, то если тут же запустить еще раз, то это уже тяжело и надолго... Однако результата выполнения второго нажатия не дождался.
20. AlexeyIsip 26 06.11.20 12:16 Сейчас в теме
(19) Ок. Проблема получается именно в пересчете итогов. Попробуй погуглить. Я наткнулся на вот на такую обработку https://infostart.ru/public/689061/. Насколько она корректно работает не знаю, но судя по количеству скачиваний и относительно не большой количество негатива в отзывах что-то делает. Для мой базы такие танцы с бубнами не пригодились.
P.S Чтобы второй раз быстро удалить, нужно сначала индексы обновить, чтобы планы обменов стали оптимальными.
21. sv_mikh 11 06.11.20 15:44 Сейчас в теме
Спасибо за ответ. Возможно попробую еще поэкспериментировать с вашей обработкой.
22. mixsture 06.01.22 13:59 Сейчас в теме
Есть у меня подозрение, что такое залезание в базу делает серверный и клиентский кеш невалидными. И их надо бы чистить, во избежании труднодиагностируемых проблем ввиду закрытого механизма работы кеша. Причем у всех клиентов сразу.

Кроме всего, заказчикам надо каждый раз объяснять, что такое залезание - это нарушение лицензии 1с.

Очень легко привести базу в неконсистентное состояние (причем его и диагностировать не так то просто):

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

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

Очень рискованное решение, не уверен, что заказчики понимают все эти риски.
23. AlexeyIsip 26 06.01.22 14:59 Сейчас в теме
Подскажите, как по-другому решить проблему удаления большого количества данных за сжатый срок?
Проблема "Удаленный документ действительно провести и у меня не получается" решена, в первой версии забыл почистить записи субконто.
Насчет рисков - Вы правы: их никто не отменял и в публикации об этом написано. Но на мой взгляд это лучше, чем сидеть и ничего не делать с проблемой.
24. titanium2008 42 20.07.22 09:01 Сейчас в теме
Добрый день, а документы можно отобрать по реквизитам у которых надо очистить проводки?
25. AlexeyIsip 26 27.07.22 10:42 Сейчас в теме
(24)Добрый день! По-моему по некоторым реквизитам из шапки можно сделать отбор, но придется вручную по каждому типу документов заполнять эти отборы на форме обработки.
Оставьте свое сообщение