Достаточно давно я писал о том, как можно быстро очистить регистр сведений, а сегодня поговорим о более общих способах работы с независимыми (режим записи — независимый) регистрами сведений.
Содержание
- Изменение существующей записи
- Удаление существующей записи
- Удаление группы записей
- Очистка независимого регистра сведений
Изменение существующей записи
Для работы с одной записью используется объект «МенеджерЗаписи».
Пример:
|
зСтавка = РегистрыСведений.СтавкиПоПроектам.СоздатьМенеджерЗаписи(); зСтавка.Сотрудник = ПараметрыСеанса.ТекущийСотрудник; зСтавка.Проект = ВыбПроект; зСтавка.Прочитать(); зСтавка.Ставка = НоваяСтавка; зСтавка.Записать(); |
В данном случае мы создаем менеджер записи и указываем ему поля, необходимые для точной идентификации записи. Затем изменяем одно из поле («Ставка») и записываем изменения.
Если запись не будет найдена по указанным полям, то будет создана новая запись с указанными полями.
Если по указанным полям запись нельзя точно идентифицировать (находиться две или больше записи с указанными полями), то будет создана новая запись, в которой поля, использовавшиеся для отбора будут пустыми, а изменяемые поля заполнены соответствующими значениями (при тесте получилось именно так, поправьте если не прав).
Удаление существующей записи
Удаление одной записи из независимого регистра сведений происходит практически так же, как и изменение этой записи:
|
зСтавка= РегистрыСведений.СтавкиПоПроектам.СоздатьМенеджерЗаписи(); зСтавка.Сотрудник = ПараметрыСеанса.ТекущийСотрудник; зСтавка.Проект = ВыбПроект; зСтавка.Прочитать(); зСтавка.Удалить(); |
Если по указанным полям не найдется записи, то, естественно, ничего удаляться не будет.
Если по указанным полям найдется несколько записей, то никакого удаления также не произойдет.
Удаление группы записей
Если есть необходимость удалить несколько записей, по какому-либо признаку, из независимого регистра сведений, то для этого удобно использовать объект «НаборЗаписей».
У данного объекта есть метод «Удалить()», не стоит его бояться, он удаляется записи из набора, а ни в коем случае не из регистра. Все возможные изменения непосредственно в регистре сведений происходят в результате работы метода «Записать()».
После создания набора записей, в него попадают все записи регистра. Для выбора каких-либо определенных записей можно воспользоваться свойством отбор (хотя существует еще множество методов для манипуляции набором записей).
Пример:
|
зСтавки = РегистрыСведений.СтавкиПоПроектам.СоздатьНаборЗаписей(); зСтавки.Отбор.Сотрудник.Установить(ВыбСотрудник); зСтавки.Прочитать(); зСтавки.Очистить(); зСтавки.Записать(); |
В данном случае будут удалены все записи по выбранному сотруднику.
1С настойчиво рекомендует использовать метод «Прочитать()» после установки отбора, хотя в большинстве случаев все работает и без него (поправьте, если я ошибаюсь).
Очистка независимого регистра сведений
Очистка независимого регистра сведений заключается в записи набора записей без каких-либо отборов:
|
зСтавки = РегистрыСведений.СтавкиПоПроектам.СоздатьНаборЗаписей(); зСтавки.Записать(); |
На этом все, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…
Анализируем вид регистра для выбора варианта редактирования записей
Регистры сведений по режиму записи подразделяются на независимые регистры и регистры с подчинением регистратору. Программная работа с этими регистрами имеет различия, поэтому вначале определите какой регистр Вам нужно изменить. Для этого откройте свойства регистра сведений и определите его режим записи:

Дополнительно обратите внимание на периодичность регистра сведений — если регистр периодический, все данные в нем записываются в разрезе по периоду. Более подробно этот момент мы рассмотрим ниже на примерах.
После того, как Вы определились с режимом записи изменяемого регистра сведений, Вы можете выбрать вариант изменения записей регистра.
Изменяем записи в независимом регистре сведений
Давайте рассмотрим пример изменения записей в регистре сведений КурсыВалют. Ниже показаны свойства этого регистра (сразу обращайте внимание на состав измерений регистра, режим записи и периодичность):

К примеру, нам необходимо перезаписать курс валюты. В первом варианте мы установим курс валюты без анализа уже записанных данных:
Процедура УстановитьКурсВалюты(Период, Валюта, Курс, Кратность)
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = Период;
Запись.Валюта = Валюта;
Запись.Курс = Курс;
Запись.Кратность = Кратность;
Запись.Записать();
КонецПроцедуры
Т.к. регистр сведений у нас периодический — дополнительно мы указываем период для курса валюты.
Теперь, используя объект МенеджерЗаписи, мы перезапишем только курс валюты. Для этого сперва установим отбор по периоду и валюте и прочитаем данные из регистра сведений:
Процедура УстановитьКурсВалюты(Период, Валюта, Курс)
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = Период;
Запись.Валюта = Валюта;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.Курс = Курс;
Запись.Записать();
КонецЕсли;
КонецПроцедуры
С помощью функции Выбран() мы проверяем, считана запись или нет. Если запись существует (по установленному периоду и валюте) — мы устанавливаем новый курс. В этом варианте уже не нужно устанавливать кратность т.к. ее значение не изменится и будет записано старое значение.
А теперь давайте выполним аналогичные действия с использованием объекта НаборЗаписей для изменения данных в регистре сведений:
Процедура УстановитьКурсВалюты(Период, Валюта, Курс)
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(Период);
Набор.Отбор.Валюта.Установить(Валюта);
Набор.Прочитать();
Если Набор.Количество() Тогда
Запись = Набор[0];
Запись.Курс = Курс;
Набор.Записать();
КонецЕсли;
КонецПроцедуры
В примере выше мы создаем набор записей и устанавливаем для него отбор по измерениям и периоду. После установки отбора считываем записи. В результате в наборе будут ранее записанные записи. Т.к. мы установили полный отбор по измерениям (периоду и валюте) — максимальное количество записей в отборе равно 1. Поэтому мы проверяем набор на количество и если запись есть — устанавливаем новый курс валюты.
Все примеры, описанные выше, выполнят одинаковые действия по установке нового курса валют. Выбирайте вариант, который Вам более удобен и понятен.
Изменяем записи в регистре с подчинением регистратору
В отличие от независимого регистра сведений, все записи в таком регистре подчиненны конкретному регистратору. Поэтому для редактирования записей Вам нужно установить отбор по регистратору и прочитать данные. После этого можно изменять запись в регистре. Давайте выполним эти действия на примерах.
В качестве примера будем использовать регистр сведений ЦеныНоменклатуры. Ниже показаны свойства этого регистра:

В примере ниже мы будем увеличивать оптовую цену номенклатуры в записях по одному заданному регистратору:
Процедура УвеличитьЦенуНоменклатуры(Регистратор, Номенклатура, ВидЦеныОптовая)
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Регистратор);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Если Запись.Номенклатура = Номенклатура И Запись.ВидЦены = ВидЦеныОптовая Тогда
Запись.Цена = Запись.Цена * 1.3;
КонецЕсли;
КонецЦикла;
Если Набор.Модифицированность() Тогда
Набор.Записать();
КонецЕсли;
КонецПроцедуры
Вначале мы устанавливаем отбор по регистратору. После указания отбора считываем записи по этому регистратору и в обходе набора записей ищем записи по определенной номенклатуре и с оптовым видом цен. Если цена хоть в одной записи будет изменена — набор будет модифицирован. Таким образом мы будем записывать только изменившиеся данные.
А теперь увеличим все оптовые цены без указания конкретного регистратора. Для этого будем использовать запрос, чтобы определить все регистраторы, по которым есть нужные нам записи в регистре сведений:
Процедура УвеличитьЦенуНоменклатуры(Номенклатура, ВидЦеныОптовая)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЦеныНоменклатуры.Регистратор КАК Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Номенклатура = &Номенклатура
| И ЦеныНоменклатуры.ВидЦены = &ВидЦеныОптовая");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ВидЦеныОптовая", ВидЦеныОптовая);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Если Запись.Номенклатура = Номенклатура И Запись.ВидЦены = ВидЦеныОптовая Тогда
Запись.Цена = Запись.Цена * 1.3;
КонецЕсли;
КонецЦикла;
Если Набор.Модифицированность() Тогда
Набор.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Если сравните этот пример с первым — изменилось только определение регистратора. Если первый пример изменял данные только в одном регистраторе — последний пример изменит записи по всем регистраторам в регистре сведений.
На этих небольших примерах мы рассмотрели основные особенности изменения отдельных записей в регистрах сведений. Каждый регистр требует своего особенного подхода — но если Вы поймете общую последовательность действий по изменению регистра сведений, сложностей по работе с регистрами у Вас не будет.
В дополнение приводим пример работы с нашей обработкой по изменению записей в произвольных регистрах сведений, скачать которую Вы можете по этой ссылке.
Наши разработки:
Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.
При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:

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

Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:
- измерения — описывают разрезы, в которых хранится информация;
- период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
- регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
- ресурсы — непосредственно хранят информацию для комбинации измерений;
- реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.
Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).
Добавление записей
Программно добавить записи в регистр сведений можно при помощи:
- объекта
НаборЗаписей; - объекта
МенеджерЗаписи.
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Объект предназначен в основном для интерактивной работы, но программно с ним также можно работать. На системном уровне МенеджерЗаписи использует объект НаборЗаписей.
Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:
- создание объекта
НаборЗаписей; - наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
- добавление и заполнение значений полей записей;
- запись набора записей.
// Добавление записи в независимый непериодический регистр сведений НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); // Этап 1 НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); // Этап 2 // Этап 3 НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.ИмяПодсистемы = ИмяПодсистемы; НоваяЗапись.Версия = НомерВерсии; НаборЗаписей.Записать(); // Этап 4
// Добавление записи в независимый периодический регистр сведений НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1 // Этап 2 НаборЗаписей.Отбор.Валюта.Установить(Доллар); НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата())); // Этап3 НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Валюта = Доллар; НоваяЗапись.Курс = 57.92; НоваяЗапись.Кратность = 1; НаборЗаписей.Записать(); // Этап 4
Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:
- создание объекта
МенеджерЗаписи; - заполнение значений полей записи;
- запись записи.
// Добавление записи в независимый непериодический регистр сведений Запись = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); // Этап 1 // Этап 2 Запись.ИмяПодсистемы = ИмяПодсистемы; Запись.Версия = НомерВерсии; Запись.Записать(); // Этап 3
// Добавление записи в независимый периодический регистр сведений Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1 // Этап 2 Запись.Период = ТекущаяДата(); Запись.Валюта = Доллар; Запись.Курс = 57.92; Запись.Кратность = 1; Запись.Записать(); // Этап 3
Изменение записей
Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи. Ограничения объекта МенеджерЗаписи были описаны выше.
Общая схема редактирования записей регистров сведений:
- создание объекта
НаборЗаписейилиМенеджерЗаписи; - наложение отборов;
- чтение записей базы данных, соответствующих наложенным отборам;
- редактирование прочитанных записей;
- запись отредактированных записей.
// Редактирование записей с использованием объекта НаборЗаписей НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1 // Этап 2 НаборЗаписей.Отбор.Период.Установить(ДатаКурса); НаборЗаписей.Отбор.Валюта.Установить(Доллар); НаборЗаписей.Прочитать(); // Этап 3 Для Каждого Запись Из НаборЗаписей Цикл Запись.Курс = 57.84; // Этап 4 КонецЦикла; НаборЗаписей.Записать(); // Этап 5
// Редактирование записей с использованием объекта МенеджерЗаписи Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1 // Этап 2 Запись.Период = ДатаКурса; Запись.Валюта = Доллар; Запись.Прочитать(); // Этап 3 Если Запись.Выбран() Тогда // Проверка, что запись существует Запись.Курс = 57.92; // Этап 4 Запись.Записать(); // Этап 5 КонецЕсли;
Чтение записей
Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалют.Период, | КурсыВалют.Валюта, | КурсыВалют.Курс |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл // обход результата выполнения запроса КонецЦикла;
Для периодических регистров сведений есть возможность получить наиболее поздние записи, период которых меньше указанной даты — срез последних, и наиболее ранние записи, период которых больше указанной даты — срез первых. Для получения среза первых и среза последних запросом необходимо использовать одноименные виртуальные таблицы, в параметрах которых сразу можно задать дату среза и отборы. Отборы, если они необходимы, рекомендуется накладывать именно в параметрах виртуальных таблиц, т.к. это позволяет ускорить выполнение запроса.
// Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» // и период МЕНЬШЕ или равен значению из переменной «ВыбраннаяДата» Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалютСрезПоследних.Период, | КурсыВалютСрезПоследних.Валюта, | КурсыВалютСрезПоследних.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних"; Запрос.УстановитьПараметр("Валюта", ВыбраннаяВалюта); Запрос.УстановитьПараметр("Период", ВыбраннаяДата); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл // обход результата выполнения запроса КонецЦикла;
// Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» // и период БОЛЬШЕ или равен значению из переменной «ВыбраннаяДата» Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалютСрезПервых.Период, | КурсыВалютСрезПервых.Валюта, | КурсыВалютСрезПервых.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПервых(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПервых"; Запрос.УстановитьПараметр("Валюта", ВыбраннаяВалюта); Запрос.УстановитьПараметр("Период", ВыбраннаяДата); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл // обход результата выполнения запроса КонецЦикла;
Кроме чтения запросом возможно использование методов объектной модели.
Для непериодических регистров сведений:
Выбрать(Отбор, Порядок)— выбирает записи с указанным отбором;ВыбратьПоРегистратору(Регистратор)— выбирает все записи указанного регистратора;Получить(Отбор)— получает ресурсы записи с отбором по всем измерениям.
Для периодических регистров сведений:
Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок)— выбирает записи с указанным отбором, у которых период находится междуНачалоИнтервалаиКонецИнтервала;ВыбратьПоРегистратору(Регистратор)— выбирает все записи указанного регистратора;Получить(Период, Отбор)— получает ресурсы записи с отбором по всем измерениям и периоду;ПолучитьПервое(НачалоПериода, Отбор)— получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;ПолучитьПоследнее(КонецПериода, Отбор)— получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;СрезПервых(НачалоПериода, Отбор)— получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;СрезПоследних(КонецПериода, Отбор)— получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.
Удаление записей
Для удаления записи (записей) в независимом регистре сведений необходимо:
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(Доллар); НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата())); НаборЗаписей.Записать();
Для удаления записей в подчиненном регистре сведений необходимо:
- создать набор записей;
- наложить отбор на регистратора;
- записать набор записей без предварительного чтения.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокументРегистратор); НаборЗаписей.Записать();
Очистка регистра сведений
Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Записать();
Запись в регистр сведений, подчиненный регистратору, возможна только при установке отбора по регистратору, поэтому для очистки таких регистров необходимо:
- получить перечень ссылок всех регистраторов регистра сведений;
- последовательно записать пустой набор записей с отбором по регистраторам из первого пункта.
Запрос = Новый Запрос( "ВЫБРАТЬ | ЦеныНоменклатуры.Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры" ); Выборка = Запрос.Выполнить().Выбрать(); НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Записать(); КонецЦикла;
Регистр сведений в 1С Предприятии, предназначен для хранения периодической или не периодической информации в разрезе измерений. Данные в другие типы регистров могут быть записаны только с использованием «Документа регистратора». А в Регистр сведений данные могут быть записаны как с «Регистратором» так и без него.
Выбрать записи из регистра сведений
Используя метод «Выбрать» можно установить отборы и задать период для выбора записей, а также задать сортировку записей.
Валюта = Справочники.Валюты.НайтиПоНаименованию("EUR");
Отбор = Новый Структура("Валюта");
Отбор.Валюта = Валюта;
Выборка = РегистрыСведений.КурсыВалют.Выбрать(,,Отбор);Пока Выборка.Следующий() Цикл МенеджерЗаписи
= Выборка.ПолучитьМенеджерЗаписи();
МенеджерЗаписи.Прочитать();//Изменить существующую запись
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Курс = 10.00;
МенеджерЗаписи.Записать();//Удалить существующую запись
МенеджерЗаписи.Удалить();КонецЦикла;
Добавить, изменить, удалить запись
Менеджер записи позволяет добавлять, изменять, удалять запись регистра сведений не подчиненного регистратору.
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Валюта = Справочники.Валюты.НайтиПоНаименованию("EUR");
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Прочитать();Если НЕ МенеджерЗаписи.Выбран() Тогда//Добавить новую запись
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Курс = 10.00;Иначе//Изменить существующую запись
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Курс = 10.00;КонецЕсли;//После добавления или изменения записи
//необходимо вызвать метод Записать
МенеджерЗаписи.Записать();//Удалить существующую запись
МенеджерЗаписи.Удалить();
Добавить, изменить, удалить набор записей
Через набор записей регистра сведений можно добавить или изменить сразу несколько записей. Набор записей позволяет устанавливать отборы.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Валюта = Справочники.Валюты.НайтиПоНаименованию("EUR");
НаборЗаписей.Отбор.Валюта.Установить(Валюта);
НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборЗаписей.Прочитать();Если НаборЗаписей.Количество() = 0 Тогда//Добавление новой записи
НоваяЗапсиь = НаборЗаписей.Добавить();
НоваяЗапсиь.Валюта = Валюта;
НоваяЗапсиь.Период = ТекущаяДата();
НоваяЗапсиь.Курс = 10.00;Иначе //Изменение существующей записи
НаборЗаписей[0].Валюта = Валюта;
НаборЗаписей[0].Период = ТекущаяДата();
НаборЗаписей[0].Курс = 10.00;КонецЕсли;//Удалить существующую запись
НаборЗаписей.Удалить(НаборЗаписей[0]);//После добавления, изменения, удаления записей
//необходимо вызвать метод Записать
НаборЗаписей.Записать();
Очистить регистр сведений
Полностью очистить регистр сведений можно несколькими способами.
Один из самых простых способов — это удалить регистр сведений из дерева метаданных, а затем заново его создать. В таком варианте перед удалением
необходимо запомнить или записать структуру данных и настройки регистра, чтобы потом создать аналогичный.
Если необходимо удалить все записи регистра сведений программно, то можно воспользоваться пустым набором записей.
//Удаление всех записей регистра сведений ЦеныНоменклатуры
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
+35
Как изменить запись регистра сведений?
НаборЗаписей = РегистрыСведений.НумерацияДоговоров.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(НачалоГода(Дата));
НаборЗаписей.Отбор.Организация.Установить(Организация);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НовыйНомер = НаборЗаписей.Добавить();
НовыйНомер.Организация = Организация;
НовыйНомер.Период = НачалоГода(Дата);
НовыйНомер.Номер = 2; ном=1;
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
НовыйНомер = НаборЗаписей[0];
ном = НовыйНомер.Номер;
НовыйНомер.Номер = ном+1;
КонецЕсли;
НаборЗаписей.Записать();
Номер = Организация.Префикс + "-" + Ном + "/" + Строка(Прав(Год(ТекущаяДата()),2));
Код 1C v 8.х
//Установить курс Валюты USD
КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
НовыйКурс = НаборКурсов[0];
Иначе
Предупреждение("Курс валюты задается один раз в день.", 60);
Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Код 1C v 8.х
//В регистр были ошибочно записаны штрихкоды.
// Нужно по заданным Номенклатуре (Товар) и Характеристике (ХарактеристикаТовара) найти эту запись и заменить там штрихкод.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура И
| ШтрихкодыНоменклатуры.Характеристика = &Характеристика";
Запрос.УстановитьПараметр("Номенклатура", Товар);
Запрос.УстановитьПараметр("Характеристика", ХарактеристикаТовара);
Выборка = Запрос.Выполнить().Выбрать();
Если НЕ Выборка.Следующий() Тогда
ТекЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
ТекЗапись.Номенклатура = Товар;
Если ЗначениеЗаполнено(ХарактеристикаТовара) Тогда
ТекЗапись.Характеристика = ХарактеристикаТовара;
Иначе
ТекЗапись.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
КонецЕсли;
ТекЗапись.Штрихкод = ?(ПустаяСтрока(ШтрихКод),РегистрыСведений.ШтрихкодыНоменклатуры.СформироватьШтрихкодEAN13(), Штрихкод);
Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;
Иначе
НайденныйШтрихкод = Выборка.Штрихкод;
ТекЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
ТекЗапись.Штрихкод = НайденныйШтрихкод;
ТекЗапись.Прочитать();
ТекЗапись.Штрихкод = Штрихкод;
Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;
КонецЕсли;
Регистры сведений позволяют хранить произвольные данные в разрезе нескольких измерений. Они позволяют получить срез информации (текущее значение показателей) на любой момент времени.
Для регистров сведений связь с регистраторами не всегда обязательна.
Добавление записей в регистр сведений
Программно добавить записи в регистр сведений можно двумя способами:
- с помощью объекта МенеджерЗаписи;
- с помощью объекта НаборЗаписей.
Добавление записей с помощью объекта МенеджерЗаписи
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:
КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); КурсыВалютМенеджерЗаписи.Период = ДатаУстановкиКурса; // Дата курса КурсыВалютМенеджерЗаписи.Валюта = Валюта; // СправочникСсылка.Валюты КурсыВалютМенеджерЗаписи.Курс = ЗначениеКурсаНаДату; // Устанавливаемый курс КурсыВалютМенеджерЗаписи.Кратность = 1; // Кратность КурсыВалютМенеджерЗаписи.Записать();
Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей
Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:
- Создание объекта НабораЗаписи;
- Установка отбора по измерениям и периоду (если регистр периодический);
- Добавление и заполнение значений полей записи;
- Запись набора.
Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.
КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта); КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса); Запись = КурсыВалютНаборЗаписей.Добавить(); Запись.Период = ДатаУстановкиКурса; Запись.Валюта = Валюта; // СправочникСсылка.Валюты Запись.Курс = ЗначениеКурсаНаДату; // Устанавливаемый курс Запись.Кратность = 1; // Кратность КурсыВалютНаборЗаписей.Записать();
Добавление записей в регистр сведений, подчиненный регистратору
Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:
- Создание объекта НаборЗаписей;
- Установка отбора по определенному регистратору;
- Заполнение записей набора;
- Запись набора.
// ДанныеДляПроведения - хранит данные для заполнения регистра сведений (например, выгрузка результата запроса) НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), ДанныеДляПроведения); НаборЗаписей.Записать();
Изменение записей в регистре сведений
Изменение записей в независимом регистре сведений
Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:
- Создание объекта МенеджерЗаписи или НаборЗаписи;
- Установить отборы;
- Чтение записей из базы данных, соответствующих наложенному отбору;
- Редактирование полученных записей;
- Запись измененных записей.
При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.
КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); КурсыВалютМенеджерЗаписи.Период = ДатаУстановкиКурса; // Дата курса КурсыВалютМенеджерЗаписи.Валюта = Валюта; // СправочникСсылка.Валюты КурсыВалютМенеджерЗаписи.Прочитать(); Если КурсыВалютМенеджерЗаписи.Выбран() Тогда КурсыВалютМенеджерЗаписи.Курс = ЗначениеКурсаНаДату; // Устанавливаемый курс КурсыВалютМенеджерЗаписи.Кратность = 1; // Кратность КурсыВалютМенеджерЗаписи.Записать(); КонецЕсли;
В отличии от менеджера записи, работа с набором записи позволяет изменять сразу несколько записей, полученных в результате установленного отбора. Поэтому изменение записей производим в цикле.
КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта); КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса); КурсыВалютНаборЗаписей.Прочитать(); Для Каждого Запись Из КурсыВалютНаборЗаписей Цикл Запись.Курс = ЗначениеКурсаНаДату; // Устанавливаемый курс Запись.Кратность = 1; // Кратность КонецЦикла; КурсыВалютНаборЗаписей.Записать();
Изменение записей в регистрах сведений подчиненных регистраторам
Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.
Изменение записей выполняется по следующему алгоритму:
- Создать объект НаборЗаписей;
- Установить отбор по определенному регистратору;
- Прочитать набор;
- Изменить записи набора;
- Записать набор.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | МероприятияТрудовойДеятельности.Регистратор КАК Регистратор |ИЗ | РегистрСведений.МероприятияТрудовойДеятельности КАК МероприятияТрудовойДеятельности"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(СтрШаблон("Изменение записей по регистратору: %1", Выборка.Регистратор)); НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); Для каждого Запись Из НаборЗаписей Цикл Запись.ДатаМероприятия = Дата(2021, 12, 12); КонецЦикла; НаборЗаписей.Записать(); КонецЦикла;
Удаление записи в регистре сведений
Удаление записи из независимого регистра сведений
Для удаления записи из независимого регистра сведений выполняется по следующему алгоритму:
- Создать объект НаборЗаписей;
- Установить нужные отборы по измерениям и, если регистр периодический, периоду;
- Записать набор без предварительного чтения.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(Валюта); НаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса); НаборЗаписей.Записать();
Удаление записи из регистра сведений подчиненного регистратору
- Создать объект НаборЗаписей;
- Установить отбор по определенному регистратору;
- Прочитать набор;
- Удалить записи из набора (по условию);
- Записать набор.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Если Запись.Валюта = Валюта Тогда // Предположим, что хотим удалить записи по регистратору // с определенной Валютой НаборЗаписей.Удалить(Запись); КонецЕсли; КонецЦикла; НаборЗаписей.Записать(); НаборЗаписей.Записать();
На чтение 7 мин Просмотров 14.9к. Опубликовано 12.10.2017
Регистры сведений в 1С предназначены для хранения произвольных данных в разрезе нескольких измерений и, при необходимости, в разрезе времени. Рассмотрим подробнее работу с этим прикладным объектом.
- Предназначение регистра сведений
- Добавление записей
- Изменение записей
- Чтение записей
- Удаление записей
- Очистка регистра сведений
Содержание
- Предназначение регистра сведений
- Добавление записей
- Изменение записей
- Чтение записей
- Удаление записей
- Очистка регистра сведений
Предназначение регистра сведений
Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.
При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:
Регистры сведений, для которых указана периодичность, называются периодическими.
Изменение данных в регистре может осуществляться как вручную, так и при помощи документов. Режим записи в регистр определяет разработчик на этапе проектирования:
Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:
- измерения — описывают разрезы, в которых хранится информация;
- период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
- регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
- ресурсы — непосредственно хранят информацию для комбинации измерений;
- реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.
Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).
Добавление записей
Программно добавить записи в регистр сведений можно при помощи:
- объекта НаборЗаписей;
- объекта МенеджерЗаписи.
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Объект предназначен в основном для интерактивной работы, но программно с ним также можно работать. На системном уровне МенеджерЗаписи использует объект НаборЗаписей.
Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:
- создание объекта НаборЗаписей;
- наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
- добавление и заполнение значений полей записей;
- запись набора записей.
// Добавление записи в независимый непериодический регистр сведений
НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); // Этап 1
НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); // Этап 2
// Этап 3
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ИмяПодсистемы = ИмяПодсистемы;
НоваяЗапись.Версия = НомерВерсии;
НаборЗаписей.Записать(); // Этап 4
// Добавление записи в независимый периодический регистр сведений
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1
// Этап 2
НаборЗаписей.Отбор.Валюта.Установить(Доллар);
НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
// Этап3
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Валюта = Доллар;
НоваяЗапись.Курс = 57.92;
НоваяЗапись.Кратность = 1;
НаборЗаписей.Записать(); // Этап 4
Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:
- создание объекта МенеджерЗаписи;
- заполнение значений полей записи;
- запись записи.
// Добавление записи в независимый непериодический регистр сведений
Запись = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); // Этап 1// Этап 2
Запись.ИмяПодсистемы = ИмяПодсистемы;
Запись.Версия = НомерВерсии;Запись.Записать(); // Этап 3
// Добавление записи в независимый периодический регистр сведений
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1// Этап 2
Запись.Период = ТекущаяДата();
Запись.Валюта = Доллар;
Запись.Курс = 57.92;
Запись.Кратность = 1;Запись.Записать(); // Этап 3
Изменение записей
Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи. Ограничения объекта МенеджерЗаписи были описаны в разделе Добавление записей.
Общая схема редактирования записей регистров сведений:
- создание объекта НаборЗаписей или МенеджерЗаписи;
- наложение отборов;
- чтение записей базы данных, соответствующих наложенным отборам;
- редактирование прочитанных записей;
- запись отредактированных записей.
// Редактирование записей с использованием объекта НаборЗаписей
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1
// Этап 2
НаборЗаписей.Отбор.Период.Установить(ДатаКурса);
НаборЗаписей.Отбор.Валюта.Установить(Доллар);
НаборЗаписей.Прочитать(); // Этап 3
Для Каждого Запись Из НаборЗаписей Цикл
Запись.Курс = 57.84; // Этап 4
КонецЦикла;
НаборЗаписей.Записать(); // Этап 5// Редактирование записей с использованием объекта МенеджерЗаписи
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1
// Этап 2
Запись.Период = ДатаКурса;
Запись.Валюта = Доллар;
Запись.Прочитать(); // Этап 3
Если Запись.Выбран() Тогда // Проверка, что запись существует
Запись.Курс = 57.92; // Этап 4
Запись.Записать(); // Этап 5
КонецЕсли;
Чтение записей
Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют»;Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// обход результата выполнения запроса
КонецЦикла;
Для периодических регистров сведений есть возможность получить наиболее поздние записи, период которых меньше указанной даты — срез последних, и наиболее ранние записи, период которых больше указанной даты — срез первых. Для получения среза первых и среза последних запросом необходимо использовать одноименные виртуальные таблицы, в параметрах которых сразу можно задать дату среза и отборы. Отборы, если они необходимы, рекомендуется накладывать именно в параметрах виртуальных таблиц, т.к. это позволяет ускорить выполнение запроса.
// Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» и период МЕНЬШЕ или равен значению из переменной «ВыбраннаяДата»
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КурсыВалютСрезПоследних.Период,
| КурсыВалютСрезПоследних.Валюта,
| КурсыВалютСрезПоследних.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних»;Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);
Запрос.УстановитьПараметр(«Период», ВыбраннаяДата);Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// обход результата выполнения запроса
КонецЦикла;// Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» и период БОЛЬШЕ или равен значению из переменной «ВыбраннаяДата»
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПервых»;Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);
Запрос.УстановитьПараметр(«Период», ВыбраннаяДата);Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// обход результата выполнения запроса
КонецЦикла;
Кроме чтения запросом возможно использование методов объектной модели.
Для непериодических регистров сведений:
- Выбрать(<Отбор>, <Порядок>) — выбирает записи с указанным отбором;
- ВыбратьПоРегистратору(<Регистратор>) — выбирает все записи указанного регистратора;
- Получить(<Отбор>) — получает ресурсы записи с отбором по всем измерениям.
Для периодических регистров сведений:
- Выбрать(<НачалоИнтервала>, <КонецИнтервала>, <Отбор>, <Порядок>) — выбирает записи с указанным отбором, у которых период находится между <НачалоИнтервала> и <КонецИнтервала>;
- ВыбратьПоРегистратору(<Регистратор>) — выбирает все записи указанного регистратора;
- Получить(<Период>, <Отбор>) — получает ресурсы записи с отбором по всем измерениям и периоду;
- ПолучитьПервое(<НачалоПериода>, <Отбор>) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
- ПолучитьПоследнее(<КонецПериода>, <Отбор>) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
- СрезПервых(<НачалоПериода>, <Отбор>) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
- СрезПоследних(<КонецПериода>, <Отбор>) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.
Удаление записей
Для удаления записи(записей) в независимом регистре сведений необходимо:
- создать набор записей;
- наложить требуемые отборы на измерения и период (если регистр периодический);
- записать набор записей без предварительного чтения.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(Доллар);
НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));НаборЗаписей.Записать();
Для удаления записей в подчиненном регистре сведений необходимо:
- создать набор записей;
- наложить отбор на регистратора;
- записать набор записей без предварительного чтения.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокументРегистратор);
НаборЗаписей.Записать();
Очистка регистра сведений
Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Запись в регистр сведений, подчиненный регистратору, возможна только при установке отбора по регистратору, поэтому для очистки таких регистров необходимо:
- получить перечень ссылок всех регистраторов регистра сведений;
- последовательно записать пустой набор записей с отбором по регистраторам из пункта 1.
Запрос = Новый Запрос(«ВЫБРАТЬ
| ЦеныНоменклатуры.Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры»);Выборка = Запрос.Выполнить().Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();
- АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
- ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Работа с регистрами сведений в 1С 8.x
- Как добавить запись в непериодический независимый регистр сведений?
- Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
- Как удалить все записи из независимого регистра сведений?
- Как удалить записи независимого регистра сведений с отбором по конкретной организации?
- Как добавить запись в периодический независимый регистр сведений?
- Как прочитать (изменить) записи в периодическом независимом регистре сведений?
- Как удалить записи в периодическом независимом регистре сведений?
- Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
- Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
- Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
- Как «сделать периодическим» реквизит уже заполненного справочника?
- Как добавить записи в регистр сведений, подчиненный регистратору?
- Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
- Как удалить записи из регистра сведений, подчиненного регистратору?
Как добавить запись в непериодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись. Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;
НаборЗаписей.Записать();
Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
НаборЗаписей = РегистрыСведений.СобственныеКонтрагенты.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
// Перебрать записи в цикле…
Для Каждого Запись из НаборЗаписей Цикл
РегистрКонтрагент = Запись.Контрагент;
РегистрВидСвязи = Запись.ВидСвязи;
РегистрОбъект = Запись.Объект;
КонецЦикла;
// … или выгрузить записи в таблицу значений.
ТаблицаЗаписей = НаборЗаписей.Выгрузить();
ВЫБРАТЬ
*
ИЗ
РегистрыСведений.СобственныеКонтрагенты
Как удалить все записи из независимого регистра сведений?
НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Как удалить записи независимого регистра сведений с отбором по конкретной организации?
НаборЗаписей = РегистрыСведений.ОбъектыСтроительстваОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация);
НаборЗаписей.Записать();
Как добавить запись в периодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта);
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата);
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Валюта = ТекущаяВалюта;
НовЗапись.Период = ТекущаяДата;
НовЗапись.Курс = ТекущийКурс;
НовЗапись.Кратность = ТекущаяКратность;
НаборЗаписей.Записать(Истина);
Как прочитать (изменить) записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс));
// Изменение данных полей записи.
Запись.Курс = 0;
КонецЦикла;
НаборЗаписей.Записать();
Как удалить записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| *
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1)
| ИЛИ
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"")
| И
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))";
ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
НаборЗаписей.Записать();
Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
Запрос = Новый Запрос;
МассивВалют = Новый Массив;
МассивВалют.Добавить(Валюта1);
МассивВалют.Добавить(Валюта2);
Запрос.УстановитьПараметр("МассивВалют", МассивВалют);
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения);
Запрос.Текст = "
|ВЫБРАТЬ
| ВалютыСрезПоследних.Валюта,
| ВалютыСрезПоследних.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних";
ТаблицаКурсов = Запрос.Выполнить().Выгрузить();
Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
Процедура ЗаменаПериода()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОтветственныеЛицаОрганизации.Период,
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница,
| ОтветственныеЛицаОрганизации.ОтветственноеЛицо
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации
|ГДЕ
| ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1)
| И
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг"
| И
| (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL
| ИЛИ
| НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец"
| ИЛИ
| ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи();
Пока Выборка.Следующий() Цикл
Запись.Период = Выборка.Период;
Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница;
Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.Период = Дата(2004, 1, 1);
Запись.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры;
Как «сделать периодическим» реквизит уже заполненного справочника?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &ДатаУстановки КАК Период,
| Проекты.Ссылка КАК Проект,
| Проекты.Ответственный
|ИЗ
| Справочник.Проекты КАК Проекты
|ГДЕ
| (НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))";
Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка());
Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1));
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаРезультат);
НаборЗаписей.Записать();
Как добавить записи в регистр сведений, подчиненный регистратору?
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПоставщика = 50;
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПокупателю = 25;
НаборЗаписей.Записать(Ложь);
Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) +
" " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки));
// Изменение данных полей записи.
Запись.ПроцентСкидкиНаценки = 0;
КонецЦикла;
НаборЗаписей.Записать();
Как удалить записи из регистра сведений, подчиненного регистратору?
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();
КонецЦикла;



