Удалить выделенные строки регистра сведений
Ребят, как удалить выделенную запись регистра сведений?? Регистр периодический. Это внешняя обработка.
&НаКлиенте
Процедура УдалитьЗапись(Команда)
Если Элементы.ЗаписиРегистра.ВыделенныеСтроки.Количество()>1 Тогда
УдалитьЗаписьНаСервере();
Иначе
Сообщить("Не выбрана ни одна запись!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьЗаписьНаСервере()
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8) Для зависимых регистров сведений писать записи можно только целиком по регистратору.
Т.е. устанавливаешь отбор по нужному регистратору, читаешь весь набор его записей, удаляешь какие надо и записываешь набор (то есть по сути удаляются все старые записи регистратора и записываются новые, хотя потом на уровне платформы оптимизацию вроде прикрутили, а может и нет).
Т.е. устанавливаешь отбор по нужному регистратору, читаешь весь набор его записей, удаляешь какие надо и записываешь набор (то есть по сути удаляются все старые записи регистратора и записываются новые, хотя потом на уровне платформы оптимизацию вроде прикрутили, а может и нет).
Нужно через отбор по всем основным полям прочитать данную строку, удалить и записать... В параметрах к процедуре нужно все передать и потом примерно так:
НаборЗаписей = РегистрыСведений.[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Период);
НаборЗаписей.Отбор.[ДополнительноеУникальноеПоле].Установить([ДополнительноеУникальноеПоле]);
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Период);
НаборЗаписей.Отбор.[ДополнительноеУникальноеПоле].Установить([ДополнительноеУникальноеПоле]);
НаборЗаписей.Записать();
(6) Не устанавливает регистратор. Что я не так делаю??(
&НаКлиенте
Процедура УдалитьЗапись(Команда)
ВыделеннаяСтрока = Элементы.ЗаписиРегистра.ВыделенныеСтроки;
Если ВыделеннаяСтрока.Количество()=1 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
УдалитьЗаписьНаСервере(Отбор);
ИначеЕсли ВыделеннаяСтрока.Количество()>1 Тогда
Сообщить("Выберите одну строку!");
ИначеЕсли ВыделеннаяСтрока.Количество() = 0 Тогда
Сообщить("Не выбрана ни одна запись!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьЗаписьНаСервере(Отбор)
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор;
НаборЗаписей.Прочитать();
НаборЗаписей.Удалить();
КонецПроцедуры
Показать
(13)
Вот тут лучше просто передать ссылку на сам регистратор
(13)
Тут этот параметр указываете: НаборЗаписей.Отобор.Регистратор.Установить(Параметр переданный в процедуру)
Если ВыделеннаяСтрока.Количество()=1 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
УдалитьЗаписьНаСервере(Отбор);
Отбор = Новый Структура;
Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
УдалитьЗаписьНаСервере(Отбор);
Вот тут лучше просто передать ссылку на сам регистратор
(13)
Процедура УдалитьЗаписьНаСервере(Отбор)
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор;
НаборЗаписей.Прочитать();
НаборЗаписей.Удалить();
КонецПроцедуры
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор;
НаборЗаписей.Прочитать();
НаборЗаписей.Удалить();
КонецПроцедуры
Тут этот параметр указываете: НаборЗаписей.Отобор.Регистратор.Установить(Параметр переданный в процедуру)
(14) Спасибо! А в случае, если у меня в регистраторе несколько строк?
Получается, должно быть что-то вроде такого..?
Получается, должно быть что-то вроде такого..?
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Отбор.Регистратор.Ссылка;
НаборЗаписей.Прочитать();
Для Каждого Стр ИЗ НаборЗаписей Цикл
Если Стр.НомерСтроки =
КонецЦикла;
(15) т.к. это кадровая история, то там не так много записей. Можно через набор запичей, можно через менеджер записей. Я, лично, делаю так: Читать тут совсем не нужно. А для удаления набора записей его можно просто записать, создав, установив отбор и ничего не добавляя. Т.е. "Рег = СоздатьНаборЗаписей(); Рег.Отбор.Регистратор.Установить(Регистратор); Рег.Записеть();"
Рег = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьМенеджерЗаписей();
Рег.Регистратор = Регистратор;
Рег.Сотрудник = Сотр;
...
Рег.Удалить();
(16) Мне нужно именно удалить одну строку, если их несколько
Но кааак?(
&НаКлиенте
Процедура УдалитьЗапись(Команда)
ВыделеннаяСтрока = Элементы.ЗаписиРегистра.ВыделенныеСтроки;
Если ВыделеннаяСтрока.Количество()=1 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Регистратор", Элементы.ЗаписиРегистра.ТекущиеДанные.Регистратор);
Отбор.Вставить("НомерСтроки", Элементы.ЗаписиРегистра.ТекущиеДанные.НомерСтроки);
УдалитьЗаписьНаСервере(Отбор);
ИначеЕсли ВыделеннаяСтрока.Количество()>1 Тогда
Сообщить("Выберите одну строку!");
ИначеЕсли ВыделеннаяСтрока.Количество() = 0 Тогда
Сообщить("Не выбрана ни одна запись!");
КонецЕсли;
Элементы.ЗаписиРегистра.Обновить();
КонецПроцедуры
&НаСервере
Процедура УдалитьЗаписьНаСервере(Отбор)
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Отбор.Регистратор.Ссылка;
НаборЗаписей.Прочитать();
Для Каждого Стр ИЗ НаборЗаписей Цикл
Если Стр.НомерСтроки = Отбор.НомерСтроки Тогда
//Удалить строку из набора зписей
КонецЕсли;
КонецЦикла;
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецПроцедуры
ПоказатьНо кааак?(
(15) В данном случае конечно сложнее, с кадровым учетом я с этим сталкивалась. Я делала так, читала полностью все движения в таблицу значений, удаляла все строки по этому регистратору в регистре сведений, удаляла или изменяла в таблице значений, то что мне нужно было и потом таблицу записывала под данным регистратором в базу. Может конечно немного не совсем просто, но другого варианта на момент работы я тогда не нашла)))
Создавайте менеджер записи по ключевым полям (измерениям) выделенной строки (если подчинен, то и по регистратору, периоду), читайте и удалйте, а еще лучше по ключу который и есть текущаястрока элемента списка
и фсе ))
МенеджерЗаписи = РегистрыСведений(Накопления).ИмяРегистра.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ТекущаяСтрока);
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Удалить();
МенеджерЗаписи.Записать();
КонецЕсли;
Показатьи фсе ))
проще воспользоваться обработкой
"Универсальные подбор и обработка объектов (с возможностью обработки табличных частей)"
она дает возможность удалять записи регистров с хитрыми вывертами. Если речь о кадровом регистре ЗУП, то в нем поле "Регистратор" вполне может быть просто измерением, а сам регистр независимый. Еще в ЗУПе часто защищают независимые регистры от ручной правки - указанная обработка решает подобные задачи без мук "творчества".
"Универсальные подбор и обработка объектов (с возможностью обработки табличных частей)"
она дает возможность удалять записи регистров с хитрыми вывертами. Если речь о кадровом регистре ЗУП, то в нем поле "Регистратор" вполне может быть просто измерением, а сам регистр независимый. Еще в ЗУПе часто защищают независимые регистры от ручной правки - указанная обработка решает подобные задачи без мук "творчества".
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот