1с как удалить запись из регистра сведений
Перейти к содержимому

1с как удалить запись из регистра сведений

  • автор:

Добавление, изменение, удаление записей регистра сведений

Регистр сведений в 1С Предприятии, предназначен для хранения периодической или не периодической информации в разрезе измерений. Данные в другие типы регистров могут быть записаны только с использованием "Документа регистратора". А в Регистр сведений данные могут быть записаны как с "Регистратором" так и без него.

Выбрать записи из регистра сведений

Используя метод "Выбрать" можно установить отборы и задать период для выбора записей, а также задать сортировку записей.

Добавить, изменить, удалить запись

Менеджер записи позволяет добавлять, изменять, удалять запись регистра сведений не подчиненного регистратору.

Добавить, изменить, удалить набор записей

Через набор записей регистра сведений можно добавить или изменить сразу несколько записей. Набор записей позволяет устанавливать отборы.

Очистить регистр сведений

Полностью очистить регистр сведений можно несколькими способами.
Один из самых простых способов — это удалить регистр сведений из дерева метаданных, а затем заново его создать. В таком варианте перед удалением

необходимо запомнить или записать структуру данных и настройки регистра, чтобы потом создать аналогичный.
Если необходимо удалить все записи регистра сведений программно, то можно воспользоваться пустым набором записей.

Комментарии (0)

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Удаление записи регистра сведений

Подскажите пожалуйста. Имея запись регистра сведений, как ее удалить?

ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.АналитикаУчетаПопартнерам") Тогда

Учитывая что регистр такой

Как правильно будет сделать удаление?

(2) Через менеджер записи? Не через набор записей?

Имея только Партнера.

Запись = РегистрыСведений.АналитикаУчетаПоПартнерам.СоздатьМенеджерЗаписи();
Запись.Партнер = Партнер;
Запись.Удалить();

Будет ли это правильно? учитывая что для удаления есть только партнер?

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

Как лучше? Так, или (6) ?

(3) Что значит "имея только Партнёра"? У тебя КлючЗаписи. Он содержи все необходимые поля.

В СП:
Описание:
РегистрСведенийКлючЗаписи
Набор значений, однозначно идентифицирующих запись регистра.

(9) Да в Элем.Данные, есть ещё организация .

Запись = РегистрыСведений.АналитикаУчетаПоПартнерам.СоздатьМенеджерЗаписи();
Запись.Партнер = Партнер;
Запись.Организация = Организация;
Запись.Удалить();

Как будет лучше? Правильнее, (12), или так?

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

Почему может не удаляться запись в регистре.
По коду проходит. останавливаю отладку. запускаю. Эта запись осталась. почему не удаляется?

Запись = РегистрыСведений.ГруппыЗначенийДоступа.СоздатьМенеджерЗаписи();
Запись.ЗначениеДоступа = Элем.Ссылка;
Запись.Удалить();

Подскажите пожалуйста. почему не могу программно удалить запись регистра сведений? Так же есть некоторые другие.

Запись = РегистрыСведений.ИерархияПартнеров.СоздатьМенеджерЗаписи();
Запись.Партнер = Элем.Ссылка;
Запись.Удалить();

Запись = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьМенеджерЗаписи();
Запись.УникальныйИдентификаторИсточника = Элем.Ссылка;
Запись.Удалить();

ЗначениеДоступа — тип ОпределяемыйТип.ЗначениеДоступа

Как мне его установить на партнера?

(19) Входит. Все входит. Но запись не могу программно очистить. Подскажите в чем дело? Как попробовать?

Вот по этим регистрам. по коду проходит. Но запись остаются ((9 Что я не так делаю?

ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.ГруппыЗначенийДоступа") Тогда
// РегистСведений.ГруппыЗначенийДоступа (Не периодический, не зависимый)
Запись = РегистрыСведений.ГруппыЗначенийДоступа.СоздатьМенеджерЗаписи();
Запись.ЗначениеДоступа = Элем.Ссылка;
Запись.ГруппаДанных = Элем.Данные.ГруппаДанных;
Запись.Удалить();
ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.ИерархияПартнеров") Тогда
// РегистрСведений.ИерархияПартнеров (Не периодический, не зависимый)
Запись = РегистрыСведений.ИерархияПартнеров.СоздатьМенеджерЗаписи();
Запись.Партнер = Элем.Ссылка;
Запись.Родитель = Элем.Ссылка;
Запись.Удалить();
ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.КлючиДоступаКОбъектам") Тогда
// РегистрСведений.КлючиДоступаКОбъектам (Не периодический, не зависимый)
Запись = РегистрыСведений.КлючиДоступаКОбъектам.СоздатьМенеджерЗаписи();
Запись.Объект = Элем.Ссылка;
Запись.Удалить();
ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.ПартнерыСегмента") Тогда
// РегистрСведений.ПартнерыСегмента (Не периодический, не зависимый)
Запись = РегистрыСведений.ПартнерыСегмента.СоздатьМенеджерЗаписи();
Запись.Партнер = Элем.Ссылка;
Запись.Сегмент = Элем.Данные.Сегмент;
Запись.Удалить();
ИначеЕсли ТипЗнч(Элем.Данные) = Тип("РегистрСведенийКлючЗаписи.СоответствияОбъектовИнформационныхБаз") Тогда
// РегистрСведений.СоответствияОбъектовИнформационныхБаз (Не периодический, не зависимый)
Запись = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьМенеджерЗаписи();
Запись.УникальныйИдентификаторИсточника = Элем.Ссылка;
Запись.Удалить();
КонецЕсли;
//

Программная работа с регистрами сведений

Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.

При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:

Регистры сведений, для которых указана периодичность, называются периодическими.

Изменение данных в регистре может осуществляться как вручную, так и при помощи документов. Режим записи в регистр определяет разработчик на этапе проектирования:

Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:

  • измерения — описывают разрезы, в которых хранится информация;
  • период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
  • регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
  • ресурсы — непосредственно хранят информацию для комбинации измерений;
  • реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.

Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).

Добавление записей

Программно добавить записи в регистр сведений можно при помощи:

  • объекта НаборЗаписей ;
  • объекта МенеджерЗаписи .

Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Объект предназначен в основном для интерактивной работы, но программно с ним также можно работать. На системном уровне МенеджерЗаписи использует объект НаборЗаписей .

Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:

  • создание объекта НаборЗаписей ;
  • наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
  • добавление и заполнение значений полей записей;
  • запись набора записей.

Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:

  • создание объекта МенеджерЗаписи ;
  • заполнение значений полей записи;
  • запись записи.

Изменение записей

Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи . Ограничения объекта МенеджерЗаписи были описаны выше.

Общая схема редактирования записей регистров сведений:

  • создание объекта НаборЗаписей или МенеджерЗаписи ;
  • наложение отборов;
  • чтение записей базы данных, соответствующих наложенным отборам;
  • редактирование прочитанных записей;
  • запись отредактированных записей.

Чтение записей

Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.

Для периодических регистров сведений есть возможность получить наиболее поздние записи, период которых меньше указанной даты — срез последних, и наиболее ранние записи, период которых больше указанной даты — срез первых. Для получения среза первых и среза последних запросом необходимо использовать одноименные виртуальные таблицы, в параметрах которых сразу можно задать дату среза и отборы. Отборы, если они необходимы, рекомендуется накладывать именно в параметрах виртуальных таблиц, т.к. это позволяет ускорить выполнение запроса.

Кроме чтения запросом возможно использование методов объектной модели.

Для непериодических регистров сведений:

  • Выбрать(Отбор, Порядок) — выбирает записи с указанным отбором;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Отбор) — получает ресурсы записи с отбором по всем измерениям.

Для периодических регистров сведений:

  • Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок) — выбирает записи с указанным отбором, у которых период находится между НачалоИнтервала и КонецИнтервала ;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Период, Отбор) — получает ресурсы записи с отбором по всем измерениям и периоду;
  • ПолучитьПервое(НачалоПериода, Отбор) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
  • ПолучитьПоследнее(КонецПериода, Отбор) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
  • СрезПервых(НачалоПериода, Отбор) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
  • СрезПоследних(КонецПериода, Отбор) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.

Удаление записей

Для удаления записи (записей) в независимом регистре сведений необходимо:

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

  • создать набор записей;
  • наложить отбор на регистратора;
  • записать набор записей без предварительного чтения.

Очистка регистра сведений

Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:

Запись в регистр сведений, подчиненный регистратору, возможна только при установке отбора по регистратору, поэтому для очистки таких регистров необходимо:

Очистка регистра сведений

Программисту 1с в работе не редко нужно очистить регистр сведений от записей. В этой заметке разберу примеры очистки различных вариантов регистров сведений.

Регистр сведений – объект конфигурации, позволяющий хранить произвольные данные в разрезе нескольких измерений. Например, в регистре сведений можно хранить цены в разрезе номенклатуры и виде цен, или курсы валют в разрезе валюты.

Очистка регистра сведений без регистратора

Что бы удалить все записи из регистра достаточно написать две строчки кода.

  1. Выбрать регистр сведений для удаления.
  2. Создать набор записей.
  3. Записать пустой набор записей.

Удаление записей в независимом регистре сведений с отбором. В примере удаляются все записи из регистра сведений “СтатусыЗаданий” по определенной организации.

  1. Считаем что в переменную Орг установлена нужная для очистки организация.
  2. Создаем набор записей.
  3. Устанавливаем отбор по организации.
  4. Записываем пустой набор данных.

Удаление записей из регистра сведений подчиненного регистратору

Для очистки регистра сведений подчиненного регистратору в отборе обязательно указывать регистратор, в остальном работает так же как удаление записей в регистре сведений с отбором.

Удаление записей из регистра сведений подчиненного регистратору с дополнительным отбором

Для удаления части записей из регистра сведений в пределах одного регистратора нужно сделать отбор по регистратору, а потом отобрать записи для удаления. Например если мы хотим удалить из регистра цены только по определенной номенклатуре. Важно помнить, что при перепроведении документа удаленные записи появятся снова.

В этом примере установив отбор по регистратору, я добавляю обход полученных записей и создаю список записей подходящих по условию, а после удаляю их из набора. Набор записывается уже без этих записей.

Удаление записей из регистра с большим количеством записей

В больших высоконагруженных базах бывает необходимо удалить миллионы или даже десятки миллионов записей, очень часто перечисленные выше способы вылетают с ошибкой памяти или не могут выполнится по другим причинам.

В этом примере я выберу все записи которые нужно удалить запросом, а потом буду удалять по одной, это позволит не блокировать таблицу на долгое время и не потреблять много памяти за один раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *