Нужно удалить все подчинённые элементы из регистра сведений. В данном случае удалить ручки, бумагу и тд из справочника канцтовары. Проблема в том что первый цикл удаляет только одно значение, при этом в ходе цикла остальные записываются, но заменяются или удаляются. Я думаю это из за того что прочитать удаляет прошлые записи из набора. Как можно изменить, что бы он сохранял все вписанное?

А еще как из строчки "| ИЗ Справочник.канцтовары";" "канцтовары" заменить на объект.строчка (переменная на клиенте)?

```1c
    &НаСервере
    Процедура ОчиститьНаСервере1()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "Выбрать Ссылка, Наименование
    | ИЗ Справочник.канцтовары";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    СсылкаНаЭлемент = Выборка.Ссылка;
    НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Номенклатура.Установить(СсылкаНаЭлемент);
    НаборЗаписей.Прочитать();
    КонецЦикла;
    для а = 1 по НаборЗаписей.Количество() цикл
    НаборЗаписей.Удалить(0);
    Объект.колво = НаборЗаписей.Количество();
    конеццикла;
    НаборЗаписей.Записать();
    КонецПроцедуры
```
---
нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.

Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
---
Чтоб удалить что-то из регистра сведений надо записать пустой набор записей с нужным отбором. Вооружившись этой информацией попробуйте разобраться что надо изменить в вашей программе для получения нужного результата. Подсказка: все что для этого надо в вашей программе есть, но надо расставить по своим местам и убрать лишнее.
---
Я наверно плохо сформулировал или не понял
Если после НаборЗаписей.Прочитать(); поставить Сообщить( НаборЗаписей.Количество());
то он напишет 110, 1, 1 а по идее должен писать 110,111,112, каждый раз запоминать что прочитано.
И уже второй цикл на удаление.
---
а по идее должен Боюсь вас огорчить, хоть в 1С и бывают глюки, но платформа вам ничего не должна и делает ровно то что вы запрограммировали. Да, я не понимаю вашу задачу. Сформулируйте что надо-то?

P.S. затея с прогресс-баром с таким подходом весьма жухлая и, если это не учебное задание, то при приме на работу даже с рабочим прогресс-баром вы пролетите как фанера над Парижем.
---
Есть справочник канцтовары в нем записи бумага, карандаш, ручка.
И регистр независимый периодический с записями цены и номенклатуры.
Нажав на кнопку в внешней обработке должны удалиться все записи с бумагой, карандашами, ручками в регистре.
Но он удаляет только ручки, то есть последнюю запись в справочнике канцтоваров. И если ручек нет в регистре то и он не удалит ничего.

Насчет прогресс бара мне просто советовали
"Получить массив данных обработки. Вызывать в цикле очистку на сервере по порциям. По счетчику отображать состояние." Я вот и сделал очистку по циклу.
---
попробуйте сами пройти по коду и представить, что получается.
Первый цикл:
Взяли корзинку, положили 3 бумаги.
Взяли новую корзинку, положили 5 карандашей.
Взяли новую корзинку, положили 6 ручек.
Конец цикл

Второй цикл:
из корзинки в руках удалили содержимое.
Конец цикла

Так понятно?
---
Сообщение было скрыто модератором.
---
Это понятно, но не понятно как сделать что бы в туже самую корзину клали а не новую брали.
Все работает если сделать вот так

```1c
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Ссылка);
    НаборЗаписей.Записать();
    КонецЦикла;
    КонецПроцедуры
```

Но тогда прогресс бар работать не будет
---
нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.

Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
---
тесть Объект.колво(переменная для прогресс бара) просто передает на клиент конечное число, а не 1.2.3.4 и тд до числа каждый раз.
Просто человек снизу сказал "То есть ты ради прогресс-бара каждый раз с клиента дергаешь сервер".
---
Объект.колво просто записывает в реквизит значения. А прогресс бар по этим данным будет обновлен только по возвращению на клиент.
---
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
вот как раз обязательно нужно сделать по заданию. Попробую таким способом сделать
---
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
А можно по подробнее как опрос сделать?
---
да там все тривиально.
Запускается фоновое задание, в котором в цикле (в нужно месте) создается СообщениеПользователю с нужным текстом и вызывается его метод Сообщить.
На клиенте в запускается ПодключитьОбработчикОжидания. В указанной процедуре обработчика находится фоновое задание и опрашивается методом фонового задания ПолучитьСообщенияПользователю.
---
все тривиальноТы его сейчас наповал убил, между прочим.
---
типо такого? Сложно с фоновыми заданиями там либо БСП либо с общим модулем примеры

```1c
    &НаКлиенте
    Процедура Команда1(Команда)
    ОчиститьНаСервере2();
    ПодключитьОбработчикОжидания("фоновая",1,Истина)
    КонецПроцедуры

    &НаСервере
    Процедура ОчиститьНаСервере2()
    ФоновыеЗадания.Выполнить("ФоновоеВыполнение.Фоновая");
    ПолучитьСообщенияПользователю();
    КонецПроцедуры

    Процедура Фоновая() экспорт
    НаборЗаписей = РегистрыСведений.ГруппаНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ВидЦен.Установить(Объект.ГруппаНоменклатуры);
    НаборЗаписей.Записать();
    цикл
    СообщениеПользователю = "нужный текст";
    КонецЦикла;
    СообщениеПользователю.Сообщить();
    КонецПроцедуры
```
---
ничего похожего.
В качестве примера:
https://infostart.ru/public/573761/

https://infostart.ru/1c/articles/1112877/

PS. Если нет БСП или нельзя изменять конфигурацию, то одной обработкой не обойтись и можете забыть про фоновые задания в данном случае.
---
По второй части вопроса. Либо так прямо в строке и заменить (СтрЗаменить(), СтрШаблон) на нужный справочник, либо воспользоваться объектом ПостроительЗапроса.
---
Сообщение было скрыто модератором.
---
У меня до этого так было

```1c
    &НаСервере
    Процедура ОчиститьНаСервере3()
    НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ВидЦен.Установить(Объект.ВидЦен);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Записать();
    КонецПроцедуры
```

Потом я добавил Удалить с циклом для прогресс бара (для задания нужно). Без НаборЗаписей.Прочитать(); вроде не работает уже и не помню.
И потом вставил запрос для того что бы группу удалять.
---
Сообщение было скрыто модератором.
---
Очистить удаляет все записи, а мне нужно было по одному что бы прогресс бар работал
---
Сообщение было скрыто модератором.
---
Он на клиенте, это внешняя обработка
---
Сообщение было скрыто модератором.
---
Перебираю и удаляю все записи в цикле, да
А как еще если по заданию нужен прогресс бар?
А сейчас хочу что бы он загружал записи. Добавлял или сохранял к загруженным еще записи. И потом циклом по одному удалял.
Я на 15000 записей тестил, он меньше чем за секунду удалил. Не знаю сколько в компаниях таких записей, но мне нужно просто сделать задание.
---
Сообщение было скрыто модератором.
---
так я тестил
 для а = 1 по НаборЗаписей.Количество() -1 цикл
- 1 добавлял и 1 запись оставалась
И на клиенте у меня стоит +1 потому что когда записей становится 0 он не может на 0 делить
---
Сообщение было скрыто модератором.
---
С прогресс баром все в порядке(по крайней мере меня устраивает), да и вопрос был не про это
---
мне нужно просто сделать заданиеМы будем за тебя болеть!
Давай! Давай! Вперед!
---
Если надо все по отбору грохнуть, то прочитать() тут лишнее, никаких циклов не надо
---
зачем вообще прочитать??

```1c
    &НаСервере
    Процедура ОчиститьНаСервере1()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "Выбрать Ссылка, Наименование
    | ИЗ Справочник.канцтовары";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Ссылка);
    НаборЗаписей.Записать();
    КонецЦикла;
    КонецПроцедуры
```

p.s. еще момент
если регистр подчинен регистратору, то отбор нужно делать по регистратору и там уже прочитать, удалить ненужные записи и записать
---
Как внезапно-то (21)мне просто советовали превратилось в (28)обязательно нужно сделать
---
А, это все продолжение https://forum.infostart.ru/forum9/topic294712/...

Давай! Давай! У тебя все получится! Вперед! Вперед!
---
да,по заданию обязательно, а посоветовали как это реализовать тут