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

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

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

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

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

Перед тем как начать основную тему замечу: для того чтобы программно работать непосредственно с регистром сведений: создать новую запись, удалить или редактировать имеющуюся, получать выборку или срез первых (последних) и т.п., — необходимо работать с объектом Менеджер регистров, а после уже можно проводить различные вышеперечисленные манипуляции с регистром сведений.

Создать менеджер регистра сведений достаточно просто, например

МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо;

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

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

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

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

МенеджерЗаписи.Период           = ТекущаяДата();
МенеджерЗаписи.ВидТоплива       = ВидТоплива;
МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива;
МенеджерЗаписи.Цена             = Цена;
МенеджерЗаписи.Записать();

Объект РегистрСведенийМенеджерЗаписи позволяет управлять записью регистра сведений и применим только для независимых регистров. Доступ к записи обеспечивается путем присвоения значений полям объекта, которые соответствуют измерениям, ресурсам и реквизитам регистра. В Вашем примере это измерения Период, ВидТоплива и Поставщик, а также ресурс Цена.

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

Переменные, которые присваиваются полям регистра в моем случае это реквизиты управляемой формы 1С.

Относительно периода замечу, что платформа самостоятельно изменит текущую дату на дату начала периода, который установлен в свойстве периодичность регистра сведений (если периодичность месяц, а в период передана дата 21.12.2017, то запишется 01.12.2017).

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

Как сделать так, чтобы регистр ЦеныНаТопливо не перезаписывался при одинаковых измерениях и периоде? Для этого нам понадобятся два метода объекта РегистрСведенийМенеджерЗаписи — метод Прочитать и метод Выбран.

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

В этом случае наш код изменится.

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

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

В этом случае мы присваиваем значения ключевым полям (измерениям) и периоду. А после применяем метод Прочитать. Данный метод считывает записи с регистра по указанным ключевым полям (измерениям) и периоду. Если есть записи с данным набором полей, то метод Выбран возвращает Истину, иначе – Ложь. В Вашем примере, если метод Выбран вернул значение Ложь (записей нет), то мы  присваиваем значения измерениям и ресурсу и записываем.

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

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

Если МенеджерЗаписи.Выбран() Тогда
   
МенеджерЗаписи.Период           = ТекущаяДата();
   
МенеджерЗаписи.ВидТоплива       = ВидТоплива;
   
МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива;
   
МенеджерЗаписи.Удалить();
КонецЕсли;

 

Изучайте основы конфигурирования в 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 не будет опубликован. Обязательные поля помечены *

восемь + 20 =