Нужно удалить все подчинённые элементы из регистра сведений. В данном случае удалить ручки, бумагу и тд из справочника канцтовары. Проблема в том что первый цикл удаляет только одно значение, при этом в ходе цикла остальные записываются, но заменяются или удаляются. Я думаю это из за того что прочитать удаляет прошлые записи из набора. Как можно изменить, что бы он сохранял все вписанное?
А еще как из строчки "| ИЗ Справочник.канцтовары";" "канцтовары" заменить на объект.строчка (переменная на клиенте)?
А еще как из строчки "| ИЗ Справочник.канцтовары";" "канцтовары" заменить на объект.строчка (переменная на клиенте)?
&НаСервере
Процедура ОчиститьНаСервере1()
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать Ссылка, Наименование
| ИЗ Справочник.канцтовары";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СсылкаНаЭлемент = Выборка.Ссылка;
НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(СсылкаНаЭлемент);
НаборЗаписей.Прочитать();
КонецЦикла;
для а = 1 по НаборЗаписей.Количество() цикл
НаборЗаписей.Удалить(0);
Объект.колво = НаборЗаписей.Количество();
конеццикла;
НаборЗаписей.Записать();
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Готовое решение для протоколирования записи и удаления данных в регистре сведений
- Порядок записи движений регистров при проведении документа
- СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
- Быстрое формирование наборов данных Объект схемы СКД
- Массовое изменение записей регистров сведений и накопления (слияние, обновление, удаление)
Найденные решения
(24) нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Чтоб удалить что-то из регистра сведений надо записать пустой набор записей с нужным отбором. Вооружившись этой информацией попробуйте разобраться что надо изменить в вашей программе для получения нужного результата. Подсказка: все что для этого надо в вашей программе есть, но надо расставить по своим местам и убрать лишнее.
(2) Я наверно плохо сформулировал или не понял
Если после НаборЗаписей.Прочитать(); поставить Сообщить( НаборЗаписей.Количество());
то он напишет 110, 1, 1 а по идее должен писать 110,111,112, каждый раз запоминать что прочитано.
И уже второй цикл на удаление.
Если после НаборЗаписей.Прочитать(); поставить Сообщить( НаборЗаписей.Количество());
то он напишет 110, 1, 1 а по идее должен писать 110,111,112, каждый раз запоминать что прочитано.
И уже второй цикл на удаление.
(4)
P.S. затея с прогресс-баром с таким подходом весьма жухлая и, если это не учебное задание, то при приме на работу даже с рабочим прогресс-баром вы пролетите как фанера над Парижем.
а по идее должен
Боюсь вас огорчить, хоть в 1С и бывают глюки, но платформа вам ничего не должна и делает ровно то что вы запрограммировали. Да, я не понимаю вашу задачу. Сформулируйте что надо-то?
P.S. затея с прогресс-баром с таким подходом весьма жухлая и, если это не учебное задание, то при приме на работу даже с рабочим прогресс-баром вы пролетите как фанера над Парижем.
(18)
Есть справочник канцтовары в нем записи бумага, карандаш, ручка.
И регистр независимый периодический с записями цены и номенклатуры.
Нажав на кнопку в внешней обработке должны удалиться все записи с бумагой, карандашами, ручками в регистре.
Но он удаляет только ручки, то есть последнюю запись в справочнике канцтоваров. И если ручек нет в регистре то и он не удалит ничего.
Насчет прогресс бара мне просто советовали
"Получить массив данных обработки. Вызывать в цикле очистку на сервере по порциям. По счетчику отображать состояние." Я вот и сделал очистку по циклу.
Есть справочник канцтовары в нем записи бумага, карандаш, ручка.
И регистр независимый периодический с записями цены и номенклатуры.
Нажав на кнопку в внешней обработке должны удалиться все записи с бумагой, карандашами, ручками в регистре.
Но он удаляет только ручки, то есть последнюю запись в справочнике канцтоваров. И если ручек нет в регистре то и он не удалит ничего.
Насчет прогресс бара мне просто советовали
"Получить массив данных обработки. Вызывать в цикле очистку на сервере по порциям. По счетчику отображать состояние." Я вот и сделал очистку по циклу.
(21) попробуйте сами пройти по коду и представить, что получается.
Первый цикл:
Взяли корзинку, положили 3 бумаги.
Взяли новую корзинку, положили 5 карандашей.
Взяли новую корзинку, положили 6 ручек.
Конец цикл
Второй цикл:
из корзинки в руках удалили содержимое.
Конец цикла
Так понятно?
Первый цикл:
Взяли корзинку, положили 3 бумаги.
Взяли новую корзинку, положили 5 карандашей.
Взяли новую корзинку, положили 6 ручек.
Конец цикл
Второй цикл:
из корзинки в руках удалили содержимое.
Конец цикла
Так понятно?
(22)
Это понятно, но не понятно как сделать что бы в туже самую корзину клали а не новую брали.
Все работает если сделать вот так
Но тогда прогресс бар работать не будет
Это понятно, но не понятно как сделать что бы в туже самую корзину клали а не новую брали.
Все работает если сделать вот так
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Ссылка);
НаборЗаписей.Записать();
КонецЦикла;
КонецПроцедуры
ПоказатьНо тогда прогресс бар работать не будет
(24) нельзя в одну и туже корзинку (в данном случае) класть все подряд. Можно положить и очистить сразу же. Вот как и в приведенном примере, не считая сколько положили, сразу очистить.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
По поводу прогресс бара. Прогресс бар не будет работать в принципе внутри цикла на сервере. Отображение на клиенте будет только по возвращению на клиент.
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
(25)
тесть Объект.колво(переменная для прогресс бара) просто передает на клиент конечное число, а не 1.2.3.4 и тд до числа каждый раз.
Просто человек снизу сказал "То есть ты ради прогресс-бара каждый раз с клиента дергаешь сервер".
тесть Объект.колво(переменная для прогресс бара) просто передает на клиент конечное число, а не 1.2.3.4 и тд до числа каждый раз.
Просто человек снизу сказал "То есть ты ради прогресс-бара каждый раз с клиента дергаешь сервер".
(25)
вот как раз обязательно нужно сделать по заданию. Попробую таким способом сделать
Можно конечно замутить фоновое задание с опросом с клиента и отображение прогресса. Но в данном случае это вообще ... ни к чему.
вот как раз обязательно нужно сделать по заданию. Попробую таким способом сделать
(32) да там все тривиально.
Запускается фоновое задание, в котором в цикле (в нужно месте) создается СообщениеПользователю с нужным текстом и вызывается его метод Сообщить.
На клиенте в запускается ПодключитьОбработчикОжидания. В указанной процедуре обработчика находится фоновое задание и опрашивается методом фонового задания ПолучитьСообщенияПользователю.
Запускается фоновое задание, в котором в цикле (в нужно месте) создается СообщениеПользователю с нужным текстом и вызывается его метод Сообщить.
На клиенте в запускается ПодключитьОбработчикОжидания. В указанной процедуре обработчика находится фоновое задание и опрашивается методом фонового задания ПолучитьСообщенияПользователю.
(33)
типо такого? Сложно с фоновыми заданиями там либо БСП либо с общим модулем примеры
типо такого? Сложно с фоновыми заданиями там либо БСП либо с общим модулем примеры
&НаКлиенте
Процедура Команда1(Команда)
ОчиститьНаСервере2();
ПодключитьОбработчикОжидания("фоновая",1,Истина)
КонецПроцедуры
&НаСервере
Процедура ОчиститьНаСервере2()
ФоновыеЗадания.Выполнить("ФоновоеВыполнение.Фоновая");
ПолучитьСообщенияПользователю();
КонецПроцедуры
Процедура Фоновая() экспорт
НаборЗаписей = РегистрыСведений.ГруппаНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидЦен.Установить(Объект.ГруппаНоменклатуры);
НаборЗаписей.Записать();
цикл
СообщениеПользователю = "нужный текст";
КонецЦикла;
СообщениеПользователю.Сообщить();
КонецПроцедуры
Показать
(5)
У меня до этого так было
Потом я добавил Удалить с циклом для прогресс бара (для задания нужно). Без НаборЗаписей.Прочитать(); вроде не работает уже и не помню.
И потом вставил запрос для того что бы группу удалять.
У меня до этого так было
&НаСервере
Процедура ОчиститьНаСервере3()
НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидЦен.Установить(Объект.ВидЦен);
НаборЗаписей.Прочитать();
НаборЗаписей.Записать();
КонецПроцедуры
ПоказатьПотом я добавил Удалить с циклом для прогресс бара (для задания нужно). Без НаборЗаписей.Прочитать(); вроде не работает уже и не помню.
И потом вставил запрос для того что бы группу удалять.
(11)
Перебираю и удаляю все записи в цикле, да
А как еще если по заданию нужен прогресс бар?
А сейчас хочу что бы он загружал записи. Добавлял или сохранял к загруженным еще записи. И потом циклом по одному удалял.
Я на 15000 записей тестил, он меньше чем за секунду удалил. Не знаю сколько в компаниях таких записей, но мне нужно просто сделать задание.
Перебираю и удаляю все записи в цикле, да
А как еще если по заданию нужен прогресс бар?
А сейчас хочу что бы он загружал записи. Добавлял или сохранял к загруженным еще записи. И потом циклом по одному удалял.
Я на 15000 записей тестил, он меньше чем за секунду удалил. Не знаю сколько в компаниях таких записей, но мне нужно просто сделать задание.
зачем вообще прочитать??
p.s. еще момент
если регистр подчинен регистратору, то отбор нужно делать по регистратору и там уже прочитать, удалить ненужные записи и записать
&НаСервере
Процедура ОчиститьНаСервере1()
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать Ссылка, Наименование
| ИЗ Справочник.канцтовары";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.Ценыноменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Ссылка);
НаборЗаписей.Записать();
КонецЦикла;
КонецПроцедуры Показатьp.s. еще момент
если регистр подчинен регистратору, то отбор нужно делать по регистратору и там уже прочитать, удалить ненужные записи и записать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
