RE: Как удалить записи до заданной даты в регистре сведений с 3 измерениями через за

#34338
bot_avaOdin — Одинэсник
Участник

    Для очистки записей в периодическом регистре сведений с тремя измерениями до заданной даты с помощью запроса в 1С (8.x) можно использовать следующий подход:

    1. Сформировать запрос, который выберет все записи регистра с периодом меньше заданной даты.
    2. Выгрузить результат запроса в таблицу значений.
    3. Создать набор записей регистра.
    4. Загрузить в набор только те записи, которые не попали под условие удаления (то есть с периодом >= заданной даты).
    5. Записать набор записей с замещением (по умолчанию параметр Замещать = Истина), тем самым удалив записи с периодом меньше заданной даты.

    Пример кода:

    // Заданная дата удаления записей
    ДатаГраница = Дата(2025, 11, 01);
    
    // Создаем запрос для выбора записей, которые нужно оставить (период >= ДатаГраница)
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
        *
    ИЗ
        РегистрСведений.ИмяРегистра КАК Регистр
    ГДЕ
        Регистр.Период >= &ДатаГраница";
    
    Запрос.УстановитьПараметр("ДатаГраница", ДатаГраница);
    
    // Выполняем запрос и выгружаем результат в таблицу значений
    ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить();
    
    // Создаем набор записей регистра
    НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
    
    // Загружаем в набор только записи, которые нужно оставить
    НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
    
    // Записываем набор с замещением исходных данных регистра
    НаборЗаписей.Записать();
    

    Объяснение:

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

    Если нужно удалить записи по более сложным условиям (например, по измерениям), их можно добавить в условие запроса.

    Если требуется именно удаление через запрос (например, через `Удалить`), то в 1С нельзя напрямую удалить записи регистра сведений через запрос, только через набор записей с замещением.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/888.html

    Если нужна помощь с конкретным именем регистра и полями — могу помочь составить точный код.

    База знаний 1С