Имя: Пароль:
1C
 
Можно ли удалить историю периодического реквизита?
0 gafsa
 
24.03.09
10:49
Можно ли удалить историю периодического реквизита справочника программно?
1 andrewalexk
 
24.03.09
10:49
:)
ты удивишься...
2 Нуф-Нуф
 
24.03.09
10:49
да. но платно
3 Восточный Парень
 
24.03.09
10:49
Можно
4 Восточный Парень
 
24.03.09
10:50
Только после фотки.
5 Нуф-Нуф
 
24.03.09
10:50
могу сделать всего за 1000р без ограничения на количество значений реквизитов
6 ДенисЧ
 
24.03.09
10:50
Нельзя. Это нарушение правил информационной безопасности.
7 zak555
 
24.03.09
10:50
(0) у всего справочника?
8 Попытка1С
 
24.03.09
10:56
Пример:

Процедура ЧисткаКурсов()
  Вал = СоздатьОбъект("Справочник.Валюты");
  // Позиционируем созданный объект Вал по известному коду
  Вал.НайтиПоКоду(1);
  Если Вал.Выбран() = 1 Тогда
     Доллар = Вал.ТекущийЭлемент();
  Иначе
     Предупреждение("Не найдена валюта!");
     Возврат;
  КонецЕсли;
  ПерВал = СоздатьОбъект("Периодический");
  ПерВал.ИспользоватьОбъект("Текущ_курс".Доллар);
  ПерВал.ВыбратьЗначения();
  Пока ПерВал.ПолучитьЗначение() = 1 Цикл
     Курс = ПерВал.Значение;
     ДатаКурса = ПерВал.ДатаЗнач;
     Если Курс < 1000 Тогда
        ПерВал.Удалить();
     КонецЕсли;
  КонецЦикла;
КонецПроцедуры
9 gafsa
 
24.03.09
10:56
У всего справочника.
10 SUA
 
24.03.09
10:58
(9) Просьба обратьть внимание на (4). По многочисленным наблюдениям, после публикации фотографии в личных данных шансы на получение конструктивного (и даже в виде уже готового кода) ответа резко возрастают.
11 mikecool
 
24.03.09
11:00
(5) чет подумалось - а установленные документом как убрать? туплю :)
12 zak555
 
24.03.09
11:01
(9) можно и проще...
заходим в конфигуратор ищем справочник -> реквизиты, у которых не должно быть истории - снимай галку - сохраняемся - обрабно высталяем - сохраняемся и радуемся!
НО останется на последную дату значения - дата будет 1980 г, если изменить  дату столетия 2024 - то тогда будут уставнолены реквизиты на новую дату!
13 zak555
 
24.03.09
11:01
(11) распроводить!
14 mikecool
 
24.03.09
11:01
(13) это понятно... вот как без распроведения?
delete from 1sconst не предлагать :)
15 zak555
 
24.03.09
11:02
+ (12) - делать на копиии!
(14) - (12)
16 1st
 
24.03.09
11:03
Приведенный выше пример подойдет, но нужно будет учесть моменты: если элемент -группа, или если значение установлено документом? Удаление нужно поместить в блок "Попытка Исключение КонецПопытки;"

Для свертки баз широко используется такая процедура:

Процедура УдалениеЗначенийПериодическихРеквизитов(ДатаСвертки)
   Сообщить(Строка(ТекущееВремя())+" Удаляем значения периодических реквизитов в справочниках до даты свертки");        
   
   Периодический = СоздатьОбъект("Периодический");
   
   Для т = 1 По Метаданные.Справочник() Цикл
       Состояние("Удаление значений периодических реквизитов справочника "+Метаданные.Справочник(т).Идентификатор);
       // Список периодических реквизитов
       ПериодическиеРеквизиты = СоздатьОбъект("СписокЗначений");
       Для п = 1 По Метаданные.Справочник(т).Реквизит() Цикл
           Если Метаданные.Справочник(т).Реквизит(п).Периодический = 1 Тогда
               // Есть периодический реквизит
               ПериодическиеРеквизиты.ДобавитьЗначение(Метаданные.Справочник(т).Реквизит(п).Идентификатор);
           КонецЕсли;
       КонецЦикла;
       
       Если ПериодическиеРеквизиты.РазмерСписка() > 0 Тогда  
           Сообщить("Удаление значений периодических реквизитов справочника "+Метаданные.Справочник(т).Идентификатор);
           Справ = СоздатьОбъект("Справочник."+Метаданные.Справочник(т).Идентификатор);
           Если Метаданные.Справочник(т).Владелец.Выбран() = 1 Тогда
               // подчиненный справочник (необходимо сначала выбрать владельца)
               Владельцы = СоздатьОбъект("Справочник." + Метаданные.Справочник(т).Владелец.Идентификатор);
               Владельцы.ВыбратьЭлементы();
               Пока Владельцы.ПолучитьЭлемент() = 1 Цикл
                   
                   Справ.ИспользоватьВладельца(Владельцы.ТекущийЭлемент());
                   
                   Справ.ВыбратьЭлементы();
                   Пока Справ.ПолучитьЭлемент() = 1 Цикл
                       Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл
                           СтрокаСостояния();
                           ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);
                           //Сообщить("Текщий период. реквизит = "+ИдРекв);
                           Периодический.ИспользоватьОбъект(Строка(ИдРекв), Справ.ТекущийЭлемент());
                           
                           // оставляем только одно значение периодического реквизита до даты свертки
                           // остальные удаляем
                           
                           Периодический.ОбратныйПорядок(1);
                           Периодический.ВыбратьЗначения(, ДатаСвертки);
                           
                           СчетчикЗначений = 0;
                           
                           Пока Периодический.ПолучитьЗначение() = 1 Цикл
                               Если СчетчикЗначений > 0 Тогда
                                   Периодический.Удалить();    
                               КонецЕсли;
                               
                               СчетчикЗначений = СчетчикЗначений + 1;
                           КонецЦикла;
                           
                       КонецЦикла;
                       
                   КонецЦикла;
               КонецЦикла;
               
           Иначе
               // обычный справочник
               Справ.ВыбратьЭлементы();
               Пока Справ.ПолучитьЭлемент() = 1 Цикл
                   Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл
                       СтрокаСостояния();
                       ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);
                       //Сообщить("Текщий период. реквизит = "+ИдРекв);
                       Попытка //т.к. для групп многие реквизиты не доступны
                           Периодический.ИспользоватьОбъект(ИдРекв, Справ.ТекущийЭлемент());
                       Исключение
                           //Сообщить("Невозможно получить реквизит ["+ИдРекв+"] для элемента "+ Справ.Код);
                           Продолжить;
                       КонецПопытки;
                       // оставляем только одно значение периодического реквизита до даты свертки
                       // остальные удаляем
                       Периодический.ОбратныйПорядок(1);
                       Периодический.ВыбратьЗначения(, ДатаСвертки);
                       СчетчикЗначений = 0;
                       Пока Периодический.ПолучитьЗначение() = 1 Цикл
                           Если СчетчикЗначений > 0 Тогда
                               Попытка //нельзя удалить значения, установленные документами
                                   Периодический.Удалить();        
                               Исключение
                                   //ОписаниеОшибки()    
                               КонецПопытки;
                           КонецЕсли;
                           СчетчикЗначений = СчетчикЗначений + 1;
                       КонецЦикла;
                   КонецЦикла;
               КонецЦикла;
           КонецЕсли;
           
       КонецЕсли;
       
   КонецЦикла
   
КонецПроцедуры // УдалениеЗначенийПериодическихРеквизитов()
17 zak555
 
24.03.09
11:05
(16) а если Спр3 подчинен Спр2, подчиненный Спр1 ???
18 1st
 
24.03.09
11:07
(17)
В приведенной процедуре обрабатываются все справочники независимо от подчинености.
Да и подчиненность здесь не причем, мы же просто значения периодических реквизитов очищаем.
19 andrewalexk
 
24.03.09
11:09
:)
ну все
прощай база Дарьи..
20 mikecool
 
24.03.09
11:09
(15) это не катит для выборочного удаления
21 у лю 427
 
24.03.09
11:11
приложил совет zak555 из (13) к Ж.пе соседа - ой, нехорошо будет.... бедный сосед(ка)
22 gafsa
 
24.03.09
11:15
спасибо,друзья!
23 zak555
 
24.03.09
11:16
(21) в (12) ?
24 zak555
 
24.03.09
11:16
(21) а (12) ?
25 у лю 427
 
24.03.09
11:22
(12) - фигня, обычная секир-башка....
26 FAM
 
24.03.09
11:24
угу, особенно после перепроведения документов
27 zak555
 
24.03.09
11:26
(25) почему?
(26) про перепроведение доков ничего не говорил!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн