Очистка периодических реквизитов справочников

9 Comments

  1. бубух

    + за работу — она работает. Вопрос (если можно) от простого буха — что, кроме порядка в истории, дает проге такая чистка?

    Reply
  2. UrbSI

    В 1С для хранения ВСЕХ периодических реквизитов ВСЕХ справочников и констант используется только ОДНА таблица 1SCONST.DBF. Соответственно, если эта таблица будет заполнена различным «мусором», то на считывание из нее нужных данных будет требоваться больше времени. Поэтому чистка периодических реквизитов нужна в первую очередь для ускорения работы.

    Reply
  3. bserge

    Проверил, работает. Единственное выдает ошибку, когда реквизит установлен документом.

    Пер.Удалить();

    {CLEANPERIODIC.ERT(193)}: Значение установлено документом!

    Reply
  4. бубух

    спасибо за ответ. займусь теперь и своими ОСами там этого…

    Reply
  5. Dozgd

    Благодарю. Удалили неверно установленные цены… 🙂

    Reply
  6. jsmith

    Неплохо

    Reply
  7. TrinitronOTV
    bserge пишет:

    Проверил, работает. Единственное выдает ошибку, когда реквизит установлен документом.

    Пер.Удалить();

    {CLEANPERIODIC.ERT(193)}: Значение установлено документом!

    как по поводу этого сообщения? это я к автору, т.к. хотелось бы перед скачиванием уточнить этот момент

    Reply
  8. vcspektr

    Процедуру удаления лучше сделать с перебором значений за дату, и пропуском значений, введённых документом..

    Reply
  9. 19autumn82
    // УДАЛЕНИЕ **********************************************************************************************************************
    //
    Процедура ПоКнУдалить()
    
    // ОБНУЛИМ ПЕРЕМЕННЫЕ
    Перем Пер;
    Перем СтрСЗ;
    // СОЗДАДИМ ПЕРИОДИЧЕСКИЙ
    Пер = СоздатьОбъект(«Периодический»);
    // ОБНУЛИМ ПЕРЕМЕННЫЕ
    ТекКоличество =0;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    СтрокаСостояния();
    // ПРОВЕРКА
    Если ТЗ.Пометка = МеткиНет Тогда
    Продолжить;
    КонецЕсли;
    // ОБНУЛИМ ПЕРЕМЕННЫЕ
    ТекОбъект = «»;
    // ЗАПОМНИМ ПЕРЕМЕННЫЕ
    ТекОбъект = ТЗ.Спр;
    // ОБНУЛИМ ПЕРЕМЕННЫЕ
    ТекРеквизит = «»;
    // ЗАПОМНИМ ПЕРЕМЕННЫЕ
    ТекРеквизит = СЗ_Рекв.ПолучитьЗначение(СЗ_Рекв.ТекущаяСтрока(), СтрСЗ);
    // ФИЛЬТР
    Пер.ИспользоватьОбъект(ТекРеквизит, ТекОбъект);
    // ПЕРЕБОР ЗНАЧЕНИЙ
    Если Пер.ВыбратьЗначения(ТЗ.Дата, ТЗ.Дата) = 1 Тогда
    Пока Пер.ПолучитьЗначение() = 1 Цикл
    // ОБНУЛИМ ПЕРЕМЕННЫЕ
    ТекДокумент = «»;
    // ЗАПОМНИМ ПЕРЕМЕННЫЕ
    ТекДокумент = Пер.ТекущийДокумент();
    // ПРОВЕРКА
    Если ПустоеЗначение(ТекДокумент) = 0 Тогда
    // СООБЩЕНИЕ
    глпВыводСообщение(«Пропущено значение » + СокрЛП(Пер.Значение) + » на дату » + СокрЛП(ТЗ.Дата) + «, введено документом » + глПредставлениеДокумента(ТекДокумент), глфВозвратФлагОтладка(ФлагОтладка));
    Продолжить;
    КонецЕсли;
    // ПРОВЕРКА
    Если Пер.Значение <> ТЗ.ЗнРекв Тогда
    // СООБЩЕНИЕ
    глпВыводСообщение(«Пропущено значение » + СокрЛП(Пер.Значение) + » на дату » + СокрЛП(ТЗ.Дата) + «, отличается от выбранного значения » + СокрЛП(ТЗ.ЗнРекв), глфВозвратФлагОтладка(ФлагОтладка));
    Продолжить;
    КонецЕсли;
    // ПОПЫТКА
    Попытка
    Пер.Удалить();
    // СООБЩЕНИЕ
    глпВыводСообщение(«Удалено значение — » + СокрЛП(ТЗ.ЗнРекв) + » на дату » + СокрЛП(ТЗ.Дата), 1);
    // СЧЕТЧИК
    ТекКоличество = ТекКоличество + 1;
    Исключение
    // СООБЩЕНИЕ
    глпВыводСообщение(ОписаниеОшибки(), 1, «!»);
    КонецПопытки;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    // ЗАПОЛНИМ ТЗ
    Сформировать(РежимТЗ, 0);
    // ПРЕДУПРЕЖДЕНИЕ
    Предупреждение(«Выполнено!», 60);
    // СООБЩЕНИЕ
    глпВыводСообщение(«Удалено — «+ Строка(ТекКоличество) +» значений», 1);
    
    КонецПроцедуры // ПоКнУдалить()

    Показать

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *