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

08.07.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Быстрое удаление проводок и пометка удаления документов средствами MSSQL
.epf 24,13Kb ver:1.1
118
118 Скачать (1 SM) Купить за 1 850 руб.

Данная обработка средствами 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С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    8565    66    29    

76

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

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

3582 руб.

16.03.2015    177839    209    81    

244

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

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

9600 руб.

22.02.2013    138526    259    144    

430

Чистка данных Программист Пользователь Платформа 1С v8.3 Управляемые формы 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, Розница и др. Это могут быть как неиспользуемые элементы справочников, так и неактуальные организации. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся.

3350 руб.

28.11.2019    25938    60    16    

75

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

Если вы начали работать в программном продукте Управление Торговлей, редакция 11 или Комплексная Автоматизация редакция 2 и включили механизм учёта серий, то перейти обратно в учёт без серий будет не так-то просто. Сложность заключается в том, что нужно очистить серии в табличной части документа, например, Реализация Товаров и услуг. Предлагаем алгоритм перехода на учет без серий для программного продукта УТ11. (Очистка серий.)

2400 руб.

09.04.2019    29106    43    14    

45

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

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

3960 руб.

27.06.2018    19177    11    3    

16

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

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

2400 руб.

23.08.2021    9965    19    3    

25

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

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

1 стартмани

21.01.2022    7736    1    dmbal    6    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 2712 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 46 20.07.22 09:01 Сейчас в теме
Добрый день, а документы можно отобрать по реквизитам у которых надо очистить проводки?
25. AlexeyIsip 26 27.07.22 10:42 Сейчас в теме
(24)Добрый день! По-моему по некоторым реквизитам из шапки можно сделать отбор, но придется вручную по каждому типу документов заполнять эти отборы на форме обработки.
Оставьте свое сообщение