gifts2017

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

Опубликовал Роман Зиновьев (Широкий) в раздел Обработки - Свертка базы

Пометка документов на удаление посредством прямых SQL-запросов.
Имеется возможности расширенного фильтра по документам, выборочной очистки движений.
Основное назначение - подготовка для свертки базы.

Пояснения:

  • Реквизит - "Пометка документов на дату". В режиме стандартного отбора - будут помечаться документы ДО указанной даты, не включая ее.
  • Расширенный режим отбора будет работать медленнее, так как приходится штатными методами получать ссылки документов и напрямую грузить их в cкуль. Загрузка полученных ссылок реализована через BULK INSERT - поэтому требуется указать каталог (реквизит "Каталог SQL"), который будет доступен непосредственно с сервера SQL.
  • Реквизит "Удалять регистрацию изменений регистра". Имеет смысл если удаляемые движения участвует в планах обмена. Очистка регистраций изменений самого документа не выполняется.
  • Перед запуском обработки рекомендуется сделать бэкап базы.
  • После запуска обработки, если документы помечались с очисткой движений, нужно обязательно сделать пересчет итогов.

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

Наименование Файл Версия Размер
Быстрая пометка документов на удаление (8.2)
16.06.2015
1200 руб.

Моментальная
доставка

Быстрая пометка документов на удаление (8.1)
16.06.2015
1200 руб.

Моментальная
доставка

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Rabajaba Caspersky (Rabajaba) 04.02.10 10:37
Плюс поставил, только в чём выигрыш устанавливать пометку прямыми запросами? Что мешает это делать штатными средствами?
2. Роман Зиновьев (Широкий) 04.02.10 10:45
(1) В скорости обработки ессно :)
В моем случае 3 часа прямых запросов против 12 суток штатной пометки.
3. Rabajaba Caspersky (Rabajaba) 04.02.10 12:24
Я бы рекомендовал это в описании указать :)
4. Роман Зиновьев (Широкий) 04.02.10 12:26
(3) Не понял.. что именно указать?
Если имеется ввиду скорость, то с прямыми запросами это само собой разумеющееся.
5. vip (vip) 04.02.10 12:48
(4) Магические "прямые запросы" очень часто (при определенном уровне знаний и умений) превращаются в "исключительно кривые запросы".
"Прямые" - это совсем не эквивалент "Грамотные" и "Эффективные".
6. Роман Зиновьев (Широкий) 04.02.10 13:19
(5)
"Хороший человек может иногда совершать плохие поступки"

Я тоже знаю много изречений.
По делу что нить есть?
7. vip (vip) 04.02.10 13:28
(6) Есть.
> В моем случае 3 часа прямых запросов против 12 суток штатной пометки.

Это что ж за база такая?
Огласи количество помечаемых документов, если не секрет.
И чем 12 суток занимаются пользователи? :o
8. Роман Зиновьев (Широкий) 04.02.10 13:37
(6) :)
Свертка нашей 5-летней базы.
Количество помечаемых документов около 3 лямов, количество движухи около 70 лямов (возможно и больше).

Стандартное удаление примерно 5 док/сек (отключенные итоги, ОбменДанными.Загрузка=Истина, в транзакции,отключен журнал регистрации)
Расчетное время около 10-12 суток

Пометка данной обработкой - 2,5 часа, пересчет итогов 0,5-1 час.
9. Константин Соболевский (Константин С.) 05.02.10 10:19
а как она работаеть в базах с УРБД
10. Роман Зиновьев (Широкий) 05.02.10 10:23
11. Роман Зиновьев (Широкий) 05.02.10 10:26
Пометка на удаление и очистка движений регистрацию изменений не производят. Если это нужно - потом руками надо будет зарегистрировать
12. Константин Соболевский (Константин С.) 05.02.10 10:38
(11). т.е. после обрабоки измения не уйдут по обменам, придется вносить изменения в планы обмена.
Ну или просто перезаписать документ уже пользовательском режиме.
13. Роман Зиновьев (Широкий) 05.02.10 10:45
(12) Типа того..
Я же не могу отследить какую регистрацию должен сделать тот или иной объект. Вдруг она модуле как то по-хитрому регится :)
Перезаписывать документ я не вижу смысла - лучше написать обработку по пакетной записи в изменениях помеченных доков.
Ну или как вариант такую же свертку сделать и в филиалах, без доп. регистрации (расширенный фильтр по докам есть).
14. Константин Соболевский (Константин С.) 09.02.10 15:25
А такое, для 8.2?
Выдается такое сообщение:
Начало обработки 09.02.2010 15:26:59
Неудачная попытка изменения данных.
{Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца "_RecorderRRef".
Окончание обработки 09.02.2010 15:27:04
15. Роман Зиновьев (Широкий) 09.02.10 15:32
Забавно.. не думал что в 8.2 структуру хранения данных поменяли.


16. Роман Зиновьев (Широкий) 09.02.10 15:33
(14) Под 8.1 тестил? Есть замечания?
17. Константин Соболевский (Константин С.) 09.02.10 15:34
Угу, ошибку в (14) приложил
18. Роман Зиновьев (Широкий) 11.02.10 10:50
(17) Под 8.2 обработку сделаю чуть позже
21. Илья Маркус (marcus57) 29.05.13 17:37
Что там в параметрах SQL вбивать надо? Какой логин и пароль? Какой сервер?
Вбиваю из параметров базы, пароли все перепробовал. Все время пишет "Неудачная попытка соединения с SQL-сервером"
22. Роман Зиновьев (Широкий) 29.05.13 22:04
(21) Нужно указать параметры подключения базы не серверу приложений 1с, а именно к MS SQL.
Самое простое - открыть консоль управления 1с и посмотреть параметры подключения вашей базы там.
23. Денис Луцик (NAKIS) 18.12.13 12:06
Прошу прощения, под 8.2 еще не появилась?
24. Денис Луцик (NAKIS) 18.12.13 12:07
Под 8.1, просто, работает классно, а вот для 8.2 тоже очень бы пригодилась)
25. Роман Зиновьев (Широкий) 18.12.13 13:58
под 8.2, если сконвертировать обработку, разве ошибки выбивает?
26. Андрей Козлов (AndruShik) 19.12.13 17:19
Под 8.2 при удалении с помощью расширенного отбора по Организации вот такая ошибка вываливается (конфигурация Бухгалтерия Предприятия, работаю под sa):
Начало обработки 19.12.2013 17:04:03
Неудачная попытка изменения данных.
Текст запроса: IF EXISTS (SEL ECT * FR OM TEMPDB..SYSOBJECTS AS T WH ERE T.NAME LIKE '#tDocRef%' AND T.TYPE='U') TRUNCATE TABLE #tDocRef
ELSE CRE ATE TABLE #tDocRef (RRef binary(16))

BULK INSERT #tDocRef FR OM 'P:\Input.txt'
WITH(CODEPAGE='RAW',FIRSTROW=2)

{Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot bulk load because the file "P:\Input.txt" could not be opened. Operating system error code 3(failed to retrieve text for this error. Reason: 15105).
Окончание обработки 19.12.2013 17:06:19
Прикрепленные файлы:
27. Роман Зиновьев (Широкий) 19.12.13 18:30
Это требование выполняется?
..поэтому требуется указать каталог (реквизит "Каталог SQL"), который будет доступен непосредственно с сервера SQL.


Путь к файлу должен сетевым, чтобы сам скуль мог по указанному адресу обратиться и забрать файл к себе.
28. Андрей Козлов (AndruShik) 19.12.13 18:51
Да требование выполняется, только не было включен доступ к xp_cmdshell.
Включил вот так:
USE master
GO
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'xp_cmdshell', 1

после этого ошибка пропала, но появилась новая (при стандартном режиме отбора):
Начало обработки 19.12.2013 18:33:25
Неудачная попытка изменения данных.
Текст запроса: DELETE _AccumRg8263
WHERE _RecorderRRef IN (SEL ECT RRef FR OM #tDocRef)
AND _RecorderTRef=CAST(119 AS BINARY(4))
...
{Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '_RecorderRRef'.
Окончание обработки 19.12.2013 18:33:26

29. Андрей Козлов (AndruShik) 19.12.13 18:59
Ошибка выше вываливается например при:
DELETE _AccumRgOpt10339
WHERE _RecorderRRef IN (SEL ECT RRef FR OM #tDocRef)

колонки RecorderRRef в таблице AccumRgOpt10339 нет.




30. Роман Зиновьев (Широкий) 19.12.13 18:59
Два предположения:
Либо версия 1с 8.3, либо путь к базе прописан неверно
31. Роман Зиновьев (Широкий) 19.12.13 19:18
Хотя нет. Буду разбираться
32. Андрей Козлов (AndruShik) 19.12.13 19:24
Разобрался!
29 появляется если помимо списка документов указать еще и все реквизиты.
Просто с документами все работает без ошибок.

1С:Предприятие 8.2 (8.2.19.68)
33. Роман Зиновьев (Широкий) 19.12.13 19:31
Тоже пару слов скажу:
AccumRgOpt[Х] - таблица хранения настроек регистра. Ее надо из перебора исключить.
Обработка похоже сильно отстала по версиям 1с.
34. Роман Зиновьев (Широкий) 19.12.13 19:49
Процедура ДополнитьТекстЗапросаПоРегистрам
ДОбавь заглушку:

Если СтруктураРегистра.Поля.Найти("_RecorderRRef","ИмяПоляХранения")=Неопределено Тогда
  Продолжить;
КонецЕсли;	
35. Lena Lesnik (lelusha) 06.02.14 23:05
Многовато ошибок за такую цену. Но задумка очень хорошая.
36. Роман Зиновьев (Широкий) 07.02.14 09:28
(35) lelusha, ценник - это час работы программиста.
Насчет ошибок - в 8.1 работает все ок.
В 8.2 зависит от релиза, т.к. 1с постоянно структуру хранения переделывает.
37. Александр Тарасюк (Aletar) 11.03.15 13:45
Добрый день, купил обработку - помогла. Спасибо.
Но, есть ряд замечаний:
1. Почему-то не сработал отбор на документ, т.е. то ли как-то некорректно он восстанавливается из строки внутренней, времени разбираться не было, обошел этот момент. Но из бекапа восстанавливаться пришлось. Если что, платформа 8.2.19.121
2. Лучше проверку на вхождение ссылки во временную таблицу сделать не через IN (SELECT *, а через INNER JOIN во всех запросах, и при этом проиндексировать временную таблицу.

Ещё раз спасибо.
38. Роман Зиновьев (Широкий) 16.03.15 11:05
(37) Замечания учту. Спасибо
39. Anton (kasx) 15.06.15 12:50
Расширенный режим отбора не работает корректно, т.к. если сделать отбор и выбрать все регистры, то выборка идет по всем документам без учета фильтров
40. Anton (kasx) 17.06.15 19:01
Все ок, автор ошибку исправил
41. Hromov Anton (hromovanton) 08.12.15 12:27
(12) Константин С., было бы интересно посмотреть как будет работать обмен (по времени), когда "Количество помечаемых документов около 3 лямов" ?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа