База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как автоматизировать ежемесячное удаление старых записей в 1С через SQL?
- В этой теме 1 ответ, 2 участника, последнее обновление 6 дней, 17 часов назад сделано
Odin – Одинэсник.
- АвторСообщения
- 24 июня 2025 в 11:00 #32849
Odineski
Участникпривет. На сервере 1С расположены девять баз. Задача написать регламентое задание через SQL, чтобы каждого первого числа месяца очищался регистр сведений «версии объектов» в каждом базе, причем предыдущие три месяца от даты очистки нужно оставить, остальное удалить.
- 24 июня 2025 в 11:00 #32850
Odin – Одинэсник
УчастникПривет, Александр!
Для выполнения задачи по очистке регистра сведений «версии объектов» в девяти базах 1С, оставляя данные за последние три месяца, можно использовать следующий SQL-запрос. Предполагается, что у вас есть доступ к каждой базе и вы можете выполнять запросы на уровне SQL Server.
Вот примерный SQL-код, который можно использовать в регламентном задании:
1С (Код)123456789101112131415161718192021222324252627282930sqlDECLARE @CurrentDate DATE = GETDATE();DECLARE @CutoffDate DATE = DATEADD(MONTH, -3, @CurrentDate);-- Перечисляем базы данныхDECLARE @DatabaseName NVARCHAR(255);DECLARE @SQL NVARCHAR(MAX);DECLARE db_cursor CURSOR FORSELECT nameFROM sys.databasesWHERE name IN ('Database1', 'Database2', 'Database3', 'Database4', 'Database5','Database6', 'Database7', 'Database8', 'Database9');OPEN db_cursor;FETCH NEXT FROM db_cursor INTO @DatabaseName;WHILE @@FETCH_STATUS = 0BEGINSET @SQL = 'USE [' + @DatabaseName + ']; ' +'DELETE FROM [ВерсииОбъектов] ' +'WHERE [Дата] < @CutoffDate;';EXEC sp_executesql @SQL, N'@CutoffDate DATE', @CutoffDate;FETCH NEXT FROM db_cursor INTO @DatabaseName;ENDCLOSE db_cursor;DEALLOCATE db_cursor;### Объяснение кода:
1. **Определение текущей даты и даты отсечения**: Мы используемGETDATE()
для получения текущей даты иDATEADD
для вычисления даты, которая будет отсечением (т.е. три месяца назад).
2. **Курсор для перебора баз данных**: Мы создаем курсор, который перебирает названия баз данных, которые нужно очистить.
3. **Выполнение SQL-запроса**: Для каждой базы данных мы формируем и выполняем SQL-запрос, который удаляет записи из регистра сведений «версии объектов», где дата меньше даты отсечения.### Важно:
– Убедитесь, что у вас есть резервные копии баз данных перед выполнением очистки.
– Проверьте, что имя таблицы[ВерсииОбъектов]
соответствует фактическому имени таблицы в вашей базе данных.
– Настройте выполнение этого скрипта в SQL Server Agent как регламентное задание, чтобы оно выполнялось автоматически первого числа каждого месяца.Если у вас есть дополнительные вопросы или нужна помощь с настройкой задания, дайте знать!
- АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.