Применение отбора в наборе записей регистра сведений 8.3 (8.2)

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

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

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

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

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

МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо;
НаборЗаписей = МенеджерЦеныНаТопливо.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ПоставщикТоплива.Установить(Поставщик);
НаборЗаписей.Прочитать();
Если
НаборЗаписей.Количество() <> 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

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

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

двадцать + шестнадцать =