1.
G_117874606564250923862
03.03.23 18:30 Сейчас в теме
Нужно удалить все подчинённые элементы из регистра сведений. В данном случае удалить ручки, бумагу и тд из справочника канцтовары. Проблема в том что первый цикл удаляет только одно значение, при этом в ходе цикла остальные записываются, но заменяются или удаляются. Я думаю это из за того что прочитать удаляет прошлые записи из набора. Как можно изменить, что бы он сохранял все вписанное?
А еще как из строчки "| ИЗ Справочник.канцтовары";" "канцтовары" заменить на объект.строчка (переменная на клиенте)?
&НаСервере
Процедура ОчиститьНаСервере1()
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать Ссылка, Наименование
| ИЗ Справочник.канцтовары";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СсылкаНаЭлемент = Выборка.Ссылка;
НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(СсылкаНаЭлемент);
НаборЗаписей.Прочитать();
КонецЦикла;
для а = 1 по НаборЗаписей.Количество() цикл
НаборЗаписей.Удалить(0);
Объект.колво = НаборЗаписей.Количество();
конеццикла;
НаборЗаписей.Записать();
КонецПроцедуры
(24) нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
(1) Чтоб удалить что-то из регистра сведений надо записать пустой набор записей с нужным отбором. Вооружившись этой информацией попробуйте разобраться что надо изменить в вашей программе для получения нужного результата. Подсказка: все что для этого надо в вашей программе есть, но надо расставить по своим местам и убрать лишнее.
4.
G_117874606564250923862
03.03.23 19:58 Сейчас в теме
(2) Я наверно плохо сформулировал или не понял
Если после НаборЗаписей.Прочитать(); поставить Сообщить( НаборЗаписей.Количество());
то он напишет 110, 1, 1 а по идее должен писать 110,111,112, каждый раз запоминать что прочитано.
И уже второй цикл на удаление.
Боюсь вас огорчить, хоть в 1С и бывают глюки, но платформа вам ничего не должна и делает ровно то что вы запрограммировали. Да, я не понимаю вашу задачу. Сформулируйте что надо-то?
P.S. затея с прогресс-баром с таким подходом весьма жухлая и, если это не учебное задание, то при приме на работу даже с рабочим прогресс-баром вы пролетите как фанера над Парижем.
21.
G_117874606564250923862
04.03.23 10:36 Сейчас в теме
(18)
Есть справочник канцтовары в нем записи бумага, карандаш, ручка.
И регистр независимый периодический с записями цены и номенклатуры.
Нажав на кнопку в внешней обработке должны удалиться все записи с бумагой, карандашами, ручками в регистре.
Но он удаляет только ручки, то есть последнюю запись в справочнике канцтоваров. И если ручек нет в регистре то и он не удалит ничего.
Насчет прогресс бара мне просто советовали
"Получить массив данных обработки. Вызывать в цикле очистку на сервере по порциям. По счетчику отображать состояние." Я вот и сделал очистку по циклу.
(21) попробуйте сами пройти по коду и представить, что получается.
Первый цикл:
Взяли корзинку, положили 3 бумаги.
Взяли новую корзинку, положили 5 карандашей.
Взяли новую корзинку, положили 6 ручек.
Конец цикл
Второй цикл:
из корзинки в руках удалили содержимое.
Конец цикла
(24) нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
26.
G_117874606564250923862
04.03.23 13:20 Сейчас в теме
(25)
тесть Объект.колво(переменная для прогресс бара) просто передает на клиент конечное число, а не 1.2.3.4 и тд до числа каждый раз.
Просто человек снизу сказал "То есть ты ради прогресс-бара каждый раз с клиента дергаешь сервер".
(32) да там все тривиально.
Запускается фоновое задание, в котором в цикле (в нужно месте) создается СообщениеПользователю с нужным текстом и вызывается его метод Сообщить.
На клиенте в запускается ПодключитьОбработчикОжидания. В указанной процедуре обработчика находится фоновое задание и опрашивается методом фонового задания ПолучитьСообщенияПользователю.
(1) По второй части вопроса. Либо так прямо в строке и заменить (СтрЗаменить(), СтрШаблон) на нужный справочник, либо воспользоваться объектом ПостроительЗапроса.
Потом я добавил Удалить с циклом для прогресс бара (для задания нужно). Без НаборЗаписей.Прочитать(); вроде не работает уже и не помню.
И потом вставил запрос для того что бы группу удалять.
12.
G_117874606564250923862
03.03.23 20:43 Сейчас в теме
(11)
Перебираю и удаляю все записи в цикле, да
А как еще если по заданию нужен прогресс бар?
А сейчас хочу что бы он загружал записи. Добавлял или сохранял к загруженным еще записи. И потом циклом по одному удалял.
Я на 15000 записей тестил, он меньше чем за секунду удалил. Не знаю сколько в компаниях таких записей, но мне нужно просто сделать задание.
14.
G_117874606564250923862
03.03.23 20:53 Сейчас в теме
(13)
так я тестил
для а = 1 по НаборЗаписей.Количество() -1 цикл
- 1 добавлял и 1 запись оставалась
И на клиенте у меня стоит +1 потому что когда записей становится 0 он не может на 0 делить