Вход | Регистрация

1С:Предприятие ::

Метки:

Как очистить справочник?

Я
   ganesha
 
26.04.04 - 17:36
Здасте, дамы и Господа!
Заранее извиняюсь за ограниченную компетентность.

Начинаю осваивать 1Сv8 и вот столкнулся с необходимостью очистить справочник. Пишу проц. в модуле обработки:
   Процедура ПрОчисткаСправочникаВрачей() Экспорт
      СпрВрачей = Справочники.Врачи;
      Для каждого стр из СпрВрачей Цикл
         стр.Удалить();
      КонецЦикла;
  КонецПроцедуры
Готов поспорить экспертам сразу видны ошибки, но у меня проблемы.
Интуитивно мне кажется, что в цикле каждому "стр" необходимо передавать ссылку на элемент справочника, а дальше уж удалять.
Но как это сделать? И дальше, есть сомнения правильно ли я указываю на коллекцию элементов справочника "СпрВрачей"?

Или вообще это принципиально неверно, и надо действовать через выборку и т.д.?
Заранее благодарен.
 
  Рекламное место пустует
   Zubr
 
1 - 26.04.04 - 22:20
Для каждого стр из СпрВрачей Цикл 
   стр.ПолучитьОбъект().Удалить(); 
КонецЦикла;
   ganesha
 
2 - 27.04.04 - 08:44
Спасибо за ответ, однако...
1С ругается на новый вариант (впрочим как и на старый), говорит:

{Обработка.ОчисткаСправочникаВрачей(3)}: Итератор для значения не определен
  Для каждого стр из СпрВрачей Цикл

Надо ли написать строку определяющую переменную "стр" или в циклах "Для каждого" платформа сама разберется, что это объект коллекции?
   GrayT
 
3 - 27.04.04 - 09:57
А справочник то же коллекцией является?
может так получиться.
СпрВрачей = Справочники.Врачи;
Выб = СпрВрачей.Выбрать();
Пока Выб.Следующий() Цикл
  Выб.ПолучитьОбъект().Удалить();
КонецЦикла;
   VlVikTim
 
4 - 27.04.04 - 10:20
Ни в коем случае не вздумай перебирать элементы справочника в 8-ке, как здесь советуют.
1. Всегда и везде ссылки на элементы справочника получай только запросом.
2. Помни, что команда ПолучитьОбъект() - незамедлительно перегонит все данные этого объекта на пользовательскую станцию и во что это выльется по времени - объяснять не вижу смысла.
3. Желательно такой фокус проводить в общем модуле и с указанием, что его следует выполнять на Сервере.
Например:
Запрос = Новый запрос("
|Выбрать
| Ссылка
|ИЗ
| справочник.МойСправочник КАК МойСпр");
ТЗ = Запрос.Выполнить().Выгрузить();
Для каждого стр из ТЗ
 Объект = стр.Ссылка.ПолучитьОбъект();
 Объект.Удалить();
КонецЦикла;

все вышеописанное разместить в процедуре которую обрасопить:
#Если Сервер тогда
   здесь расместить процедуру, куда можно передать и вид справочника, который надо очистить
#КонецЕсли
   GrayT
 
5 - 27.04.04 - 13:31
(4) Спорить не буду - только учусь. Но вот поясни
"команда ПолучитьОбъект() - незамедлительно перегонит все данные ..."
и
Для каждого стр из ТЗ
Объект = стр.Ссылка.ПолучитьОбъект();//???????????? Это не одно и то же 

Объект.Удалить(); 
КонецЦикла; 

Но главное не в этом
Объясни, лучше, вот что
#Если Сервер тогда ...
Вот этого я не совсем допонимаю. Даже сформулировать вопрос толком затрудняюсь...
Если блок выполняется на сервере предприятия тогда она выполняется (сорри за тавтологию). Так где надо писать этот код и как вызывать, чтоб "тяжелые" куски выполнялись на сервере?
   ganesha
 
7 - 28.04.04 - 11:08
Спасибо всем! У меня получилось!
Особое большое спасибо VlVikTim за компетентный совет.

P.S. Только 2 вопроса к VlVikTim, если не в напряг:
 1) Что такое "обрасопить"?  ;)
 2) В файловом варианте работы, и в данном контексте, когда удаляются все элементы справочника, получая в обработке не все объекты целиком и скопом для удаления, а по одному (ведь в этом принципиальная разница описанной выше процедуры?), что мы выигрываем? Операции обработки удаления будут чередоваться с другими операциями пользователей и у них не возникнит эффекта зависания?
   VlVikTim
 
14 - 28.04.04 - 12:52
to Ganesha 

>1) Что такое "обрасопить"?  ;)
 Здесь имелось ввиду, что надо разместить процедуру с кодом, который я предложил, в #условие, которое предлагает, по-возможности, исполнять ее на сервере.

>2) В файловом варианте работы, и в данном контексте, когда удаляются все >элементы справочника, получая в обработке не все объекты целиком и скопом для >удаления, а по одному (ведь в этом принципиальная разница описанной выше >процедуры?), что мы выигрываем? Операции обработки удаления будут чередоваться >с другими операциями пользователей и у них не возникнит эффекта зависания?
Проблема у 8-ки следубщая - она живет изначально как клиент-серверная задача и даже выполняясь локально в файл-серверном виде, хранит данные в формате SQL, однако в данном случае мои советы в большей степени относятся к трехзвенке, ибо именно там и выявляются все преимущества этой версии, хотя и в твоем варианте д.б. преимущество в скорости, ибо ты обращаешься за выборкой данных один раз, а не сколько у тебя ссылок в справочнике, все остальное очевидно совпадает с первым вариантом.


Список тем форума
Рекламное место пустует   Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует