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

Содержание:

1.       Набор записей регистра сведений

2.       Менеджер записи регистра сведений

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

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

1.       Набор записей регистра сведений

Для того чтобы выполнить данную задачу, можно воспользоваться функцией набора записей регистра сведений с помощью объекта «НаборЗаписей». Для создания объекта «НаборЗаписей» необходимо обратиться к регистру сведений и вызвать метод «СоздатьНаборЗаписей()». В результате мы получим пустую коллекцию объектов типа «ЗаписьРегистраСведений».

Создание набора записей регистра сведений

Создание набора записей регистра сведений

Представим, что у нас есть некоторые начальные данные, и нам необходимо получить записи, в которых значения полей равны нашим начальным данным. Для этого воспользуемся свойством «Отбор» у полученного ранее объекта, после чего вызовем метод «Установить (Параметр отбора)». Данный метод можно вызывать несколько раз в случае, если нужно установить отбор записей регистра сведений по нескольким полям. Если отборов несколько, то связь будет осуществляться при помощи логического «И».

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

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

После того как установлен отбор регистра, чтобы получить записи с установленным отбором, потребуется вызвать метод «Прочитать()», читающий записи регистра сведений с отбором, который был установлен ранее. После выполнения данного метода коллекция «Набор записей» заполнится данными отобранными из регистра сведений.

Метод чтения набора записей

Метод чтения набора записей

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

Цикл набора записей

Цикл набора записей

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

команда записи

Команда записи в регистр сведений

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

Особенность отбора в регистре сведений заключается в том, что его можно установить только на равенство, соответственно нельзя, например, установить отбор «Записи в которых поле «Количество» больше чем 4», можно использовать только «Записи в которых «Количество» равно 5».

В том случае, если необходимо выбрать записи по какому-либо другому условию, например, записи, в которых поле «количество» имеет значение больше 4, либо если нужно воспользоваться связью отличной от логического «И», например, «ИЛИ»: «Физическое лицо = ФИО» ИЛИ «Год рождения < 31.08.2000», придется написать запрос регистра сведений

запрос к регистру сведений

Запрос у регистру сведений

Результатом этого будет подобная таблица:

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

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

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

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

2.       Менеджер записи регистра сведений

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

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

Метод СоздатьМенеджерЗаписией()

Метод СоздатьМенеджерЗаписией()

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

Действия с записью после возвращения менеджера в регистр сведений

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

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

Действия с записью после возвращения менеджера

Действия с записью после возвращения менеджера в регистр сведений

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

Специалист компании «Кодерлайн»

Айдар Фархутдинов

 0 

   

Распечатать

Как выполнить отбор в регистре сведений по значениям измерений и затем создать запись?

Код 1C v 8.х

 // создаем НаборЗаписей
НаборД = РегистрыСведений.НашРегистр.СоздатьНаборЗаписей();

// устанавливаем параметры отбора по полному набору Измерений регистра:
НаборД.Отбор.Измерение1.Установить(Значение1);
НаборД.Отбор.Измерение2.Установить(Значение2);
НаборД.Отбор.Измерение3.Установить(Значение3);

// Создаем новую строку в этом наборе записей:
СтрокаДанных = НаборД.Добавить();

// определяем значения Измерений этой строки:
СтрокаДанных.Измерение1 = Значение1;
СтрокаДанных.Измерение2 = Значение2;
СтрокаДанных.Измерение3 = Значение3;

// определяем значения Ресурсов
СтрокаДанных.Ресурс1 = Значение4;
СтрокаДанных.Ресурс2 = Значение5;

// определяем значения Реквизитов
СтрокаДанных.Реквизит1 = Значение6;

// пример другого варианта присвоения значения, когда, например, внутри цикла нужно указать значение ресурса, перебирая в цикле разные имена ресурсов (ИмяПоля):
СтрокаДанных[ИмяПоля] = Значение7; // где ИмяПоля - наименование измерения, ресурса или реквизита регистра

НаборД.Записать();

В предыдущей статье Работа с набором записей регистра сведений мы узнали, как использовать объект набор записей регистра сведений для группового создания записей. В процессе записи набора наш регистр или полностью очищается, или добавляются новые записи, сохраняя при этом старые. Причем контроль уникальности по измерениям во втором случае не ведется, и может возникнуть ошибка «Запись с такими ключевыми полями существует!»

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

Рассмотрим следующую задачу: в моей конфигурации есть независимый периодический регистр сведений «ЦеныНаТопливо», который имеет следующую структуру.

Структура независимого регистра сведений

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

МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо;
НаборЗаписей = МенеджерЦеныНаТопливо.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ПоставщикТоплива.Установить(Поставщик);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда
    Для Каждого стрНабора из НаборЗаписей Цикл
        стрНабора.Цена = стрНабора.Цена * Коэффицент;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецЕсли;

Переменные Поставщик и Коэффициент это реквизиты управляемой формы 1С.

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

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

Когда мы обращаемся к свойству объекта Отбор посредством названия измерения, то мы получаем объект Элемент отбора, у данного объекта только один метод — Установить. Данный метод устанавливает значение отбора.

Можно производить отбор по одному полю, а можно и по нескольким. В случае отбора по нескольким полям логическая связь между полями будет осуществляться с помощью булевой операции «И».

Имейте в виду, что отбор в регистрах сведений можно устанавливать только на равенство!

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

Как Вы уже знаете, объект Набор записей является коллекцией объектов Запись регистров сведений.  Поэтому после того, как мы с помощью метода Количество проверили, есть ли в принципе записи по данному отбору, мы обходим данную коллекцию с помощью цикла: Для каждого…Цикл. Где переменная НормаЗапись является объектом Запись регистров сведений. С помощью этого объекта мы получаем доступ ко всем полям записи регистра сведений и можем их изменять на свое усмотрение. После того, как мы поменяли все нужные нам записи, необходимо записать набор. Обращаю внимание, что записывается именно набор в целом, а не конкретная запись по отдельности.

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

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

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

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

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

МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо;
НаборЗаписей = МенеджерЦеныНаТопливо.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидТоплива.Установить(ВидТоплива);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();

В этом коде мы получаем данные для определенного набора и очищаем их.

Некоторые способы программного изменения регистра сведений

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Можно ли для выборки из регистра указать множественный отбор?

Я
   МдаУж

15.02.07 — 12:55

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

  

Партнерская программа EFSOL Oblako

   Три буквы

1 — 15.02.07 — 12:56

на каждое измерение по одному значенибю

   МдаУж

2 — 15.02.07 — 13:00

Не так спросил. Хочу отобрать по двум измерениям. На каждое измерение нужно указать по одному значению. В структуре прописываю два измерения — ругается…

   МдаУж

3 — 15.02.07 — 13:01

Иначе: в регистре есть измерение «Объект» и «Вид». Как установить отбор по двум этим измерениям?

   колодина

4 — 15.02.07 — 13:02

в структуру внесите два реквизита и присвойте каждой свое хначнеие…

   Ц_У

5 — 15.02.07 — 13:03

(4)+ если индексируются

   МдаУж

6 — 15.02.07 — 13:04

В (2) я уже описал эту ситуацию :(

   МдаУж

7 — 15.02.07 — 13:04

(5) не индексируются, но ведущие

   колодина

8 — 15.02.07 — 13:05

(6) а у меня — не ругается………..

(7) отбор только по тем, которые индексируются…

   МдаУж

9 — 15.02.07 — 13:07

(8) Из СП — «В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». «

   Hadgehogs

10 — 15.02.07 — 13:07

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

   Рег.Отбор.Объект.Установить(ЗначениеОтбораПоОбъекту);

   Рег.Отбор.Вид.Установить(ЗначениеОтбораПоВиду);

   Рег.Прочитать();

   МдаУж

11 — 15.02.07 — 13:11

(10) Спасибо.

А есть что то типа

МоеЗначение = Регистрсведений.ХХХ.Получить(ЗначениеОбъекта,ЗначениеВида)

?

   TormozIT

12 — 15.02.07 — 13:11

Из (0)

«Можно ли ДЛЯ ВЫБОРКИ»

РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)

Выбрать (Select)



<Отбор> (необязательный)

Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». Вид сравнения может быть только Равно.

Важно! Структура МОЖЕТ СОДЕРЖАТЬ ТОЛЬКО ОДИН ЭЛЕМЕНТ.

Если параметр не указан, то отбор не используется.

   TormozIT

13 — 15.02.07 — 13:12

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

   dimoff

14 — 15.02.07 — 13:13

(11) Есть

Функция Регистрсведений_ХХХ_Получить(ЗначениеОбъекта,ЗначениеВида)

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

   Рег.Отбор.Объект.Установить(ЗначениеОбъекта);

   Рег.Отбор.Вид.Установить(ЗначениеВида);

   Рег.Прочитать();

Возврат Рег

КонецФункции

МоеЗначение = Регистрсведений_ХХХ_Получить(ЗначениеОбъекта,ЗначениеВида) ;

   МдаУж

15 — 15.02.07 — 13:14

(14) :) ценю

  

МдаУж

16 — 15.02.07 — 13:15

Вобщем ясно. Большое всем спасибо.

Ошибка? Это не ошибка, это системная функция.

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

Содержание

Регистры сведений в 1С 8

Что такое регистр сведений

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

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

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

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

Строки в многомерной таблице регистра сведений называются записями. Уникальность записей регистра сведений определяется как комбинация измерений и периода. В случае, если регистр сведений не периодический, то период будет не заполнен, и уникальные записи будут отличаться по комбинации измерений. Платформа не допускает создания двух записей с одинаковым набором измерений и периодом. Измерения и период образуют т.н. составной ключ, и называются ключевыми полями.

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

Свойства регистра сведений. Основные настройки

Основные свойства регистра сведений, уникальные только для этого объекта метаданных – это Периодичность и Режим записи. Рассмотрим создание и настройку регистра сведений на примере хранения тарифов работников.

Периодичность регистра сведений

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

  • В пределах секунды
  • В пределах дня
  • В пределах месяца
  • В пределах квартала
  • В пределах года

В случае, если регистр сведений подчинен регистратору (см. ниже), становится доступным еще один вариант периода – по позиции регистратора.

Поле Период входит в составной ключ записи; можно добавлять записи с одинаковым составом измерений, но с разным периодом. Если периодичность – по позиции регистратора, то дата документа может совпадать с точностью до секунды – все равно это будут разные записи, т.к. в этом случае позиция регистратора будет определяться как момент времени (Дата + ссылка на документ). В зависимости от выбранной периодичности, период записи будет автоматически приводиться к началу периода в свойстве Периодичность. Например, если указана периодичность “В пределах дня”, то к началу суток, если “В пределах месяца” – то соответственно к первому числу месяца, и т.д.

Режим записи регистра сведений 1С

Режим записи определяет, можно ли редактировать записи регистра сведений вручную, или они будут вноситься движениями документа-регистратора. Для регистров сведений с режимом записи “Независимый” можно указывать основной отбор для измерений. В случае, если при этом регистр сведений периодический, становится возможным указание флажка Основной отбор по периоду.

Что такое ведущее измерение и основной отбор?

Флаг Ведущее у измерения регистра сведений означает, то данная запись имеет смысл пока существует объект, ссылка на который хранится в данном измерении. Например, если удалить из базы данных сотрудника “Иванов Иван”, то автоматически из регистра сведений будут удалены все записи по тарифам, где в измерении “Сотрудник” был указан Иванов Иван. Если данный флаг не установлен, то при удалении объекта, записи остались бы в регистре с битой ссылкой на него.

Также свойство “Ведущее” у измерения отвечает за построение пользовательского интерфейса. В карточке объекта, который является ведущим измерением, появляется гиперссылка для быстрого перехода к регистру сведений с отбором по текущему объекту.

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

Проектирование структуры регистра сведений

Следует стараться избегать архитектурных решений, когда значение одного ресурса регистра сведений меняется значительно чаще чем значение другого. В этом случае целесообразно выделить такие ресурсы в отдельный регистр сведений. Это связано с тем, что в момент записи записываются все ресурсы, а не только измененный, что приводит к неоправданной нагрузке на СУБД.

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

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

Например, мы хотим знать, какие материально ответственные лица закреплены за тем или иным складским помещением. Если таких МОЛ более одного человека, то правильная архитектура регистра будет такая:

Измерения: МОЛ
Ресурсы: Склад

Если же нам требуется гарантировать, что у одного склада может быть только одно материально ответственное лицо, то состав регистра сведений будет следующий:

Измерения: Склад
Ресурсы: МОЛ

Примеры работы с регистрами сведений в 1С

Программная запись в регистр сведений 1С

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

//Использование менеджера записи регистра сведений
НоваяЗапись = РегистрыСведений.ТарифыРаботников.СоздатьМенеджерЗаписи();
//Сотрудник - это переменная, реквизит формы, параметр и т.п. с типом СправочникСсылка.Сотрудники
НоваяЗапись.Сотрудник = Сотрудник;
НоваяЗапись.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
НоваяЗапись.Тариф = 1500;
НоваяЗапись.Записать();

//Использование набора записей
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);

ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
ЗаписьНабора.Тариф = 1500;

ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.ПоДням;
ЗаписьНабора.Тариф = 6000;

НаборЗаписей.Записать();

Следует иметь в виду, что если не установить отбор для набора записей, при записи такого набора будет заменен весь регистр сведений!

Набор записей регистра сведений

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

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

Рассмотрим на примерах работу с набором записей средствами языка 1С

// работа с набором записей
	
//создание набора записей
НаборТарифы = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
 
//количество записей набора
Колво = НаборТарифы.Количество(); //0
 
//чтение набора записей из базы
//если не вызвать метод Прочитать и не добавить записи, то запишется пустой набор записей!
НаборТарифы.Прочитать();
Колво = НаборТарифы.Количество(); //вернет количество записей в наборе
 
//добавление записей
ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.ПоДням;
ЗаписьНабора.Период = ТекущаяДата();
ЗаписьНабора.Тариф = 6000;
 
//выгрузка в таблицу значений
ТаблицаТарифов = НаборТарифы.Выгрузить();
 
//удаление всех записей набора
НаборТарифы.Очистить();
 
//загрузка из таблицы значений
НаборТарифы.Загрузить(ТаблицаТарифов);
 
//удаление первой записи набора
НаборТарифы.Удалить(0);
 
//выгрузка одной колонки в массив
МассивТоваров = НаборТарифы.ВыгрузитьКолонку("Сотрудник");

//загружаем обратно
НаборТарифы.ЗагрузитьКолонку(МассивТоваров, "Сотрудник");
 
//сумма всех значений ресурса, если его тип содержит тип Число
Итог = НаборТарифы.Итог("СуммаТарифа");
 
//запись набора
НаборТарифы.Записать();

Изменение записей регистра сведений

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

Изменим, например, все часовые оклады, добавив 10%.

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

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

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

//1. Удалить записи с определенным отбором
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидТарифа.Установить(Перечисления.ВидыТарифов.ПоДням);
НаборЗаписей.Отбор.Период.Установить(ДатаФильтра);
//Запишем пустой набор записей
НаборЗаписей.Записать();

//2. Очистить регистр сведений программно
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
//Все записи регистра сведений будут удалены

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

Менеджер записи регистра сведений

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

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

Если ЗаписьМенеджер.Выбран() Тогда
	ЗаписьМенеджер.Тариф = 7000;
	ЗаписьМенеджер.Записать();
КонецЕсли;

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

Ключ записи регистра сведений

// создать ключ записи
//пустой ключ	
ПустойКлюч = Новый("РегистрСведенийКлючЗаписи.ТарифыРаботников");
//используя менеджер
ПустойКлюч = РегистрыСведений.ТарифыРаботников.ПустойКлюч();
 
//ключ на определенную запись регистра
ЗначенияКлюча = Новый Структура;
ЗначенияКлюча.Вставить("Период", Дата(2021,01,31));
ЗначенияКлюча.Вставить("Сотрудник", СсылкаНаСотрудника);
ЗначенияКлюча.Вставить("ВидТарифа", Перечисления.ВидыТарифов.ПоДням);
КлючЗаписи = РегистрыСведений.ТарифыРаботников.СоздатьКлючЗаписи(ЗначенияКлюча);

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

Рассмотрим пример. Допустим, у нас есть документ “Назначение материально ответственных лиц”, в котором мы в табличной части указываем склад и соответствующее ему МОЛ. Этот документ записывает движения в регистр сведений МОЛПоСкладам, со следующими настройками:

  • Измерения: Склад, тип СправочникСсылка.Склады
  • Ресурсы: МОЛ, тип СправочникСсылка.Сотрудники
  • Реквизиты: Примечание, тип Строка(100)
  • Периодичность: в пределах месяца
  • Режим записи: Подчинение регистратору

Для изменения записей регистра сведений, подчиненного регистратору, нужно иметь ссылку на документ-регистратор. После этого необходимо получить движения объекта по этой ссылке, по нужному регистру. Далее мы получаем набор записей, и работа с ним аналогична работе при использовании метода СоздатьНаборЗаписей. Для того чтобы изменить движения документа, также следует вызвать метод Прочитать. Второй вариант – заново добавить нужные записи в движения, в этом случае новый набор полностью заменит старый.

ОбъектРегистратор = СсылкаНаДокумент.ПолучитьОбъект();
ДвиженияПоРегистру =ОбъектРегистратор.Движения.МОЛПоСкладам;
ДвиженияПоРегистру.Прочитать();
Для Каждого ЗаписьДокумента Из ДвиженияПоРегистру Цикл
	ЗаписьДокумента.Примечание = "Запись обработана программно";
КонецЦикла;
ДвиженияПоРегистру.Записать();

Примеры работы с периодическим регистром сведений

Периодический регистр сведений позволяет получать данные о самых первых и самых последних записях. Для этого платформа предусматривает две виртуальные таблицы – СрезПервых и СрезПоследних. В определенных случаях можно включить итоги для среза первых и/или последних. Это может многократно ускорить получение данных, так как при этом будут созданы физические таблицы, откуда данные будут извлекаться гораздо быстрее, чем из виртуальных.

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

Получить самые ранние записи (Срез первых)

Получим самые ранние записи тарифов с видом тарифа “ПоДням”

//Как получить самые первые записи
Отбор = Новый Структура("ВидТарифа", Перечисления.ВидыТарифов.ПоДням);
СрезПервых = РегистрыСведений.ТарифыРаботников.СрезПервых(ДатаСреза, Отбор);
//Получим таблицу значений со структурой колонок, аналогичной структуре регистра сведений
//В результат попадут наиболее ранние записи регистра, соответствующие установленным значениям ключевых полей.
//Записи подбираются для каждой комбинации из всех имеющихся значений измерений регистра.
//При этом, если есть записи с датой реньше, чем начало периода, они учитываться не будут.
Для Каждого СтрСреза Из СрезПервых Цикл
	Сообщить(СтрШаблон("Самый ранний тариф по дням для сотрудника %1: %2", СтрСреза.Сотрудник, СтрСреза.Тариф)); 
КонецЦикла;

Получить самые поздние записи (Срез последних)

//Как получить последние записи регистра сведений на дату
//В случае работы с запросом, можно накладывать более сложные фильтры, и извлекать только необходимые данные,
// например, только сотрудника и тариф, без лишних полей
ЗапросПоследних = Новый Запрос("ВЫБРАТЬ
|	ПРЕДСТАВЛЕНИЕ(ТекущиеТарифы.Сотрудник) КАК Сотрудник,
|	ТекущиеТарифы.Тариф КАК Тариф
|ИЗ
|	РегистрСведений.ТарифыРаботников.СрезПоследних(&ДатаСреза, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ВидыТарифов.Почасовой)) КАК ТекущиеТарифы");
ЗапросПоследних.УстановитьПараметр(ДатаСреза, ДатаСреза);
Выборка = ЗапросПоследних.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(СтрШаблон("Текущий почасовой тариф для сотрудника %1: %2", Выборка.Сотрудник, Выборка.Тариф)); 
КонецЦикла;

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

/// Как прочитать записи регистра сведений
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиРегистраСведенийНаСервере()
 
    // Прочитаем все записи регистра сведений "ЦенаНаЕдуДляКлиентов"
    // для организации ООО "Ромашка", упорядоченные по дате.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентов.Период,
        |   ЦенаНаЕдуДляКлиентов.Регистратор,
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки,
        |   ЦенаНаЕдуДляКлиентов.Активность,
        |   ЦенаНаЕдуДляКлиентов.Номенклатура,
        |   ЦенаНаЕдуДляКлиентов.Контрагент,
        |   ЦенаНаЕдуДляКлиентов.Организация,
        |   ЦенаНаЕдуДляКлиентов.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов
        |ГДЕ
        |   ЦенаНаЕдуДляКлиентов.Активность = Истина И
        |   ЦенаНаЕдуДляКлиентов.Организация = &ВыбОрганизация
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентов.Период";
 
    Запрос.УстановитьПараметр(
        "ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            "[" + Записи.Период + "] " +
            Записи.Контрагент + " " +
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить наиболее поздние записи (срез последних)
/// регистра сведений на указанную дату (включительно)
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьНаиболееПоздниеЗаписиРегистраСведенийНаСервере()
 
    // За возможности выборки наиболее поздних записей регистра
    // сведений (среза последних) в разрезе заданной аналитики
    // отвечает виртуальная таблица СрезПоследних.
    // У неё есть следующие параметры:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)    
 
    // Получим цены на бананы для каждого контрагента
    // на конец 1 квартала 2014 года (включительно)
    // по организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Период,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Активность,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Номенклатура,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Организация,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПоследних(
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Активность = Истина И
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЦенаНаЕдуДляКлиентовСрезПоследних
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Контрагент + ", " + Записи.Период + "] " +            
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить наиболее ранние записи (срез первых)
/// регистра сведений на указанную дату (включительно)
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьНаиболееРанниеЗаписиРегистраСведенийНаСервере()    
 
    // За возможности выборки наиболее ранних записей регистра
    // сведений (среза первых) в разрезе заданной аналитики
    // отвечает виртуальная таблица СрезПервых.
    // У неё есть следующие параметры:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)    
 
    // ! Нужно внимательно вдуматься. СрезПервых получает по каждой
    // комбинации измерений наиболее раннюю запись, но НЕ БОЛЕЕ
    // РАННЮЮ, чем указанная дата.    
 
    // Получим самые первые цены, которые были установлены на бананы
    // для каждого контрагента в 2014 году (включительно)
    // по организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Период,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Активность,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Номенклатура,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Организация,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПервых(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       Активность = Истина И
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЦенаНаЕдуДляКлиентовСрезПервых
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Контрагент + ", " + Записи.Период + "] " +
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить програмно записи в регистр сведений
/// документа в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере()
 
    // Предположим, у нас есть ссылка на проведенный документ
    // "Установка цен на еду" № ВМБП-000001
 
    УстановкаЦенСсылка =
        Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру(
            "ВМБП-000001", '20141231'
        );
 
    // Мы знаем, что этот документ делает записи в регистр
    // сведений "ЦенаНаЕдуДляКлиентов":
    // [Организация, Контрагент, Номенклатура] [Цена]
 
    // Наша задача: найти эти записи и изменит их (например, удвоим
    // цену) и записать вместо старых.
 
    // Используем объектную технику получения записей,
    // ведь мы будем их изменять.
 
    УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект();
 
    // Получим набор записей этого документа в регистр
    // "ЦенаНаЕдуДляКлиентов"
 
    НаборЗаписей = УстановкаЦен.Движения.ЦенаНаЕдуДляКлиентов;
 
    // Прочитаем записи из базы данных.
 
    НаборЗаписей.Прочитать();
 
    Для Каждого Запись Из НаборЗаписей Цикл
 
        // Выведем старые значения.
        Сообщить(
            "[" + Запись.Организация + ", " +
            Запись.Контрагент + ", " + 
            Запись.Номенклатура + "] " +
            "[" + Запись.Цена + "]"
        );
 
        Запись.Цена = Запись.Цена * 2;
 
    КонецЦикла;
 
    // Добавим новую запись.
 
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Организация = 
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяЗапись.Контрагент =
        Справочники.Контрагенты.НайтиПоНаименованию("Петров Ю.В.");
    НоваяЗапись.Номенклатура =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяЗапись.Цена = 500;    
 
    // Разом запишем набор записей.
    НаборЗаписей.Записать(
        Истина // Удалим старые записи и запишем вместо них новые.
    );
 
    // Теперь записи регистра "ЦенаНаЕдуДляКлиентов" для документа
    // № ВМБП000001, отличаются от тех, что были записаны
    // документом при проведении. Чтобы вернуть их к начальному виду
    // нужно заново провести документ.
 
КонецПроцедуры
 
/// Как прочитать записи документа в регистр сведений запросом
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере()    
 
    // Этот прием используется, если не требуется изменять
    // найденные записи.
 
    // Предположим, у нас есть ссылка на проведенный документ
    // "Установка цен на еду" № ВМБП-000001
 
    УстановкаЦенСсылка =
        Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру(
            "ВМБП-000001", '20141231'
        );
 
    // Мы знаем, что этот документ делает записи в регистр
    // сведений "ЦенаНаЕдуДляКлиентов".
    // Прочитаем эти записи запросом.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентов.Период,
        |   ЦенаНаЕдуДляКлиентов.Регистратор,
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки,
        |   ЦенаНаЕдуДляКлиентов.Активность,
        |   ЦенаНаЕдуДляКлиентов.Номенклатура,
        |   ЦенаНаЕдуДляКлиентов.Контрагент,
        |   ЦенаНаЕдуДляКлиентов.Организация,
        |   ЦенаНаЕдуДляКлиентов.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов
        |ГДЕ
        |   ЦенаНаЕдуДляКлиентов.Регистратор = &ВыбРегистратор
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки";
 
    Запрос.УстановитьПараметр(
        "ВыбРегистратор",
        УстановкаЦенСсылка
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Организация + ", " +
            Записи.Контрагент + ", " + 
            Записи.Номенклатура + "] " +
            "[" + Записи.Цена + "] <" +
            Записи.Регистратор + ">"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать записи в регистр сведений без привязки к
/// документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьЗаписиБезПривязкиКДокументуНаСервере()
 
    // Создавать записи в регистре сведений без привязки
    // к документу можно только для регистров, у которых
    // выбран режим записи "Независимый". В нашей конфигурации
    // таким регистром является "КурсВалют".    
    // Если бы мы захотели проделать такую же штуку для
    // регистра "ЦенаНаЕдуДляКлиентов", то нам бы пришлось
    // воспользоваться документом "ОперацияБух" или им подобным
    // для ручных операций (см. аналогичный пример в регистрах
    // накопления).
 
    // Пример №1.
 
    // Для единичных записей удобно пользоваться менеджером
    // записей.
 
    НоваяЗапись = РегистрыСведений.КурсВалют.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = '20140101';
    НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар");
    НоваяЗапись.Курс = 30;
    НоваяЗапись.Записать(
        Истина // замещать, если уже есть запись с такими же измерениями
        // и таким же периодом
    );
 
    // Пример №2.
 
    // При помощи менеджера можно также легко
    // менять или удалять единичные записи.
    // Найдём, изменим, а затем удалим созданную запись.
 
    Выборка = РегистрыСведений.КурсВалют.Выбрать('20140101', '20140101');
    Если Выборка.Следующий() Тогда
        Запись = Выборка.ПолучитьМенеджерЗаписи();
        // изменим
        Запись.Прочитать();
        Запись.Курс = 25;
        // запишем
        Запись.Записать(Истина);
        // и тут же удалим
        Запись.Удалить();
    КонецЕсли;
 
    // Пример №3.
 
    // Если нужно изменить сразу много записей - 
    // удобнее всего использовать набор записей.
 
    // Запишем курсы валют за первые 3 дня 2014 года.
 
    Доллар = Справочники.Валюты.НайтиПоНаименованию("Доллар");
 
    НаборЗаписей = РегистрыСведений.КурсВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Валюта.Установить(Доллар);    
 
    Запись01 = НаборЗаписей.Добавить();
    Запись01.Период = '20140101';
    Запись01.Валюта = Доллар;
    Запись01.Курс = 30;
 
    Запись02 = НаборЗаписей.Добавить();
    Запись02.Период = '20140102';
    Запись02.Валюта = Доллар;
    Запись02.Курс = 40;
 
    Запись03 = НаборЗаписей.Добавить();
    Запись03.Период = '20140103';
    Запись03.Валюта = Доллар;
    Запись03.Курс = 60;
 
    // Запишем весь набор разом.
 
    НаборЗаписей.Записать(
        Истина // затрём все другие записи по 
        // доллару (мы установили его в отборе)
    );
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Отбор доступен для измерений и реквизитов, у которых установлено свойство «Индексировать» или стоит флажок «Ведущее». По ресурсам отбор делать нельзя.

Отбор по регистру сведений: Индексировать и ведущие

//

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

НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

НаборЗаписей.Прочитать();

Для каждого Запись из НаборЗаписей цикл

// Выполняем какие-то действия

Запись.Сумма = 1999; //меняем значение реквизита или измерения

КонецЦикла;

НоваяЗапись = НаборЗаписей.Добавить(); // Добавляем новую запись

НоваяЗапись.Сумма = 2700;

....

НаборЗаписей.Записать()

Понравилась статья? Поделить с друзьями:
  • Автомобильные бизнес идеи с минимальными вложениями
  • 1с получить дополнительный реквизит справочника бсп
  • Автомобильные страховые компании в санкт петербурге
  • 1с проверка заполнения реквизита объекта программно
  • Автомойка самообслуживания бизнес отзывы владельцев