Удалить выделенные строки регистра сведений

1. Johney20 25.05.18 15:28 Сейчас в теме
Ребят, как удалить выделенную запись регистра сведений?? Регистр периодический. Это внешняя обработка.


&НаКлиенте
Процедура УдалитьЗапись(Команда)
	
	Если Элементы.ЗаписиРегистра.ВыделенныеСтроки.Количество()>1 Тогда
		УдалитьЗаписьНаСервере();
	Иначе
		Сообщить("Не выбрана ни одна запись!");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьЗаписьНаСервере()
	
КонецПроцедуры

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 25.05.18 15:34 Сейчас в теме
А чем ПКМ - Удалить не устраивает?
4. Johney20 25.05.18 15:36 Сейчас в теме
5. TODD22 18 25.05.18 15:36 Сейчас в теме
(4)
Что такое ПКМ?

Правая кнопка мыши?
10. Johney20 25.05.18 15:42 Сейчас в теме
(5) Обработка нужна такая.
3. Slypower 2 25.05.18 15:36 Сейчас в теме
Создать набор записей и сохранить его. Только вроде отбор по регистратору
8. Johney20 25.05.18 15:39 Сейчас в теме
(3) Спасибо, а разве регистратора достаточно будет?
11. herfis 499 25.05.18 15:42 Сейчас в теме
(8) Для зависимых регистров сведений писать записи можно только целиком по регистратору.
Т.е. устанавливаешь отбор по нужному регистратору, читаешь весь набор его записей, удаляешь какие надо и записываешь набор (то есть по сути удаляются все старые записи регистратора и записываются новые, хотя потом на уровне платформы оптимизацию вроде прикрутили, а может и нет).
6. go_margaret 18 25.05.18 15:37 Сейчас в теме
Нужно через отбор по всем основным полям прочитать данную строку, удалить и записать... В параметрах к процедуре нужно все передать и потом примерно так:
НаборЗаписей = РегистрыСведений.[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Период);
НаборЗаписей.Отбор.[ДополнительноеУникальноеПоле].Установить([ДополнительноеУникальноеПоле]);
НаборЗаписей.Записать();
7. Johney20 25.05.18 15:39 Сейчас в теме
(6) основные поля - это период и регистратор?
9. go_margaret 18 25.05.18 15:41 Сейчас в теме
(7) Если подчиненный, то да, но тогда удалиться не только одна строка, а все строки по данному регистратору. Если есть к чему еще привязаться, типа номенклатура, склад и т.д., то можно использовать все по максимуму...
12. user705522_constantin_h 35 25.05.18 15:46 Сейчас в теме
(7)Удаление записей регистра сведений, подчинённого регистратору возможно только отменой проведения регистратора. А если регистр сведений независимый, выделяете нужные записи, ещё->удалить.
13. Johney20 25.05.18 15:55 Сейчас в теме
(6) Не устанавливает регистратор. Что я не так делаю??(

&НаКлиенте
Процедура УдалитьЗапись(Команда)
	
	ВыделеннаяСтрока = Элементы.ЗаписиРегистра.ВыделенныеСтроки; 
	
	Если ВыделеннаяСтрока.Количество()=1 Тогда
		Отбор = Новый Структура;
		Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
		УдалитьЗаписьНаСервере(Отбор);
	ИначеЕсли ВыделеннаяСтрока.Количество()>1 Тогда
		Сообщить("Выберите одну строку!");
	ИначеЕсли ВыделеннаяСтрока.Количество() = 0 Тогда
		Сообщить("Не выбрана ни одна запись!");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьЗаписьНаСервере(Отбор)
	НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор;
	НаборЗаписей.Прочитать();
	НаборЗаписей.Удалить();
КонецПроцедуры

Показать
14. go_margaret 18 25.05.18 16:02 Сейчас в теме
(13)
Если ВыделеннаяСтрока.Количество()=1 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
УдалитьЗаписьНаСервере(Отбор);

Вот тут лучше просто передать ссылку на сам регистратор

(13)
Процедура УдалитьЗаписьНаСервере(Отбор)
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор;
НаборЗаписей.Прочитать();
НаборЗаписей.Удалить();
КонецПроцедуры

Тут этот параметр указываете: НаборЗаписей.Отобор.Регистратор.Установить(Параметр переданный в процедуру)
15. Johney20 25.05.18 16:14 Сейчас в теме
(14) Спасибо! А в случае, если у меня в регистраторе несколько строк?

Получается, должно быть что-то вроде такого..?

        НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Значение = Отбор.Регистратор.Ссылка;
	НаборЗаписей.Прочитать();
	
	Для Каждого Стр ИЗ НаборЗаписей Цикл
		Если Стр.НомерСтроки =
	КонецЦикла;
16. starik-2005 3039 25.05.18 16:21 Сейчас в теме
(15) т.к. это кадровая история, то там не так много записей. Можно через набор запичей, можно через менеджер записей. Я, лично, делаю так:
  Рег = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьМенеджерЗаписей();
  Рег.Регистратор = Регистратор;
  Рег.Сотрудник = Сотр;
...
   Рег.Удалить();
Читать тут совсем не нужно. А для удаления набора записей его можно просто записать, создав, установив отбор и ничего не добавляя. Т.е. "Рег = СоздатьНаборЗаписей(); Рег.Отбор.Регистратор.Установить(Регистратор); Рег.Записеть();"
18. Johney20 25.05.18 16:28 Сейчас в теме
(16) Мне нужно именно удалить одну строку, если их несколько


&НаКлиенте
Процедура УдалитьЗапись(Команда)
	
	ВыделеннаяСтрока = Элементы.ЗаписиРегистра.ВыделенныеСтроки; 
	
	Если ВыделеннаяСтрока.Количество()=1 Тогда
		Отбор = Новый Структура;
		Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
		Отбор.Вставить("НомерСтроки", Элементы.ЗаписиРегистра.ТекущиеДанные.НомерСтроки);
		УдалитьЗаписьНаСервере(Отбор);
	ИначеЕсли ВыделеннаяСтрока.Количество()>1 Тогда
		Сообщить("Выберите одну строку!");
	ИначеЕсли ВыделеннаяСтрока.Количество() = 0 Тогда
		Сообщить("Не выбрана ни одна запись!");
	КонецЕсли;
	
	Элементы.ЗаписиРегистра.Обновить();
КонецПроцедуры

&НаСервере
Процедура УдалитьЗаписьНаСервере(Отбор)
	НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Значение = Отбор.Регистратор.Ссылка;
	НаборЗаписей.Прочитать();
	
	Для Каждого Стр ИЗ НаборЗаписей Цикл
		Если Стр.НомерСтроки = Отбор.НомерСтроки Тогда
			//Удалить строку из набора зписей
		КонецЕсли;
	КонецЦикла;
	НаборЗаписей.Очистить();
	НаборЗаписей.Записать();	
КонецПроцедуры

Показать


Но кааак?(
17. go_margaret 18 25.05.18 16:24 Сейчас в теме
(15) В данном случае конечно сложнее, с кадровым учетом я с этим сталкивалась. Я делала так, читала полностью все движения в таблицу значений, удаляла все строки по этому регистратору в регистре сведений, удаляла или изменяла в таблице значений, то что мне нужно было и потом таблицу записывала под данным регистратором в базу. Может конечно немного не совсем просто, но другого варианта на момент работы я тогда не нашла)))
19. Ditron 185 25.05.18 16:48 Сейчас в теме
Создавайте менеджер записи по ключевым полям (измерениям) выделенной строки (если подчинен, то и по регистратору, периоду), читайте и удалйте, а еще лучше по ключу который и есть текущаястрока элемента списка

МенеджерЗаписи = РегистрыСведений(Накопления).ИмяРегистра.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ТекущаяСтрока);
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
   МенеджерЗаписи.Удалить();
   МенеджерЗаписи.Записать();
КонецЕсли;
Показать


и фсе ))
20. Ditron 185 25.05.18 16:50 Сейчас в теме
А вообще, если регистр починен регистратору, удалять движения не из регистратора не есть хорошо )))
21. Ditron 185 25.05.18 16:57 Сейчас в теме
Вот
Прикрепленные файлы:
vynosmozga; +1 Ответить
22. VmvLer 25.05.18 17:02 Сейчас в теме
проще воспользоваться обработкой
"Универсальные подбор и обработка объектов (с возможностью обработки табличных частей)"

она дает возможность удалять записи регистров с хитрыми вывертами. Если речь о кадровом регистре ЗУП, то в нем поле "Регистратор" вполне может быть просто измерением, а сам регистр независимый. Еще в ЗУПе часто защищают независимые регистры от ручной правки - указанная обработка решает подобные задачи без мук "творчества".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот