В этой статье мы научимся программно работать с регистром сведений, используя объект Менеджер записи регистра сведений.
Периодические регистры сведений
Перед тем как начать основную тему замечу: для того чтобы программно работать непосредственно с регистром сведений: создать новую запись, удалить или редактировать имеющуюся, получать выборку или срез первых (последних) и т.п., — необходимо работать с объектом Менеджер регистров, а после уже можно проводить различные вышеперечисленные манипуляции с регистром сведений.
Создать менеджер регистра сведений достаточно просто, например:
МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо;
Хочу заметить, что работать с менеджером регистра сведений можно или в толстом клиенте, или в серверном контексте. В тонком клиенте код, написанный в этой статье работать не будет!
Для того, чтобы программным способом создать, редактировать или удалить конкретную запись независимого регистра сведений, необходимо использовать объект РегистрСведенийМенеджерЗаписи. С помощью данного объекта можно получить доступ к записи с необходимым набором полей. Создается менеджер записи с помощью функции менеджера регистров СоздатьМенеджерЗаписи.
МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо; МенеджерЗаписи =МенеджерЦеныНаТопливо.СоздатьМенеджерЗаписи();
Переменная МенеджерЗаписи, которую мы создали, имеет тип РегистрСведенийМенеджерЗаписи, этот тип предназначен для чтения, редактирования и удаления конкретной записи. Мы можем обращаться к измерениям, ресурсам и реквизитам регистра сведений как к свойствам данного объекта. Заполним созданную запись.
МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.ВидТоплива = ВидТоплива; МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива; МенеджерЗаписи.Цена = Цена; МенеджерЗаписи.Записать();
Объект РегистрСведенийМенеджерЗаписи позволяет управлять записью регистра сведений и применим только для независимых регистров. Доступ к записи обеспечивается путем присвоения значений полям объекта, которые соответствуют измерениям, ресурсам и реквизитам регистра. В Вашем примере это измерения Период, ВидТоплива и Поставщик, а также ресурс Цена.
Переменные, которые присваиваются полям регистра в моем случае это реквизиты управляемой формы 1С.
Относительно периода замечу, что платформа самостоятельно изменит текущую дату на дату начала периода, который установлен в свойстве периодичность регистра сведений (если периодичность месяц, а в период передана дата 21.12.2017, то запишется 01.12.2017).
В данном примере я не выясняю, есть ли уже запись с заданным набором ключевых полей (измерений), а просто записываю ее, поэтому если такая запись уже есть, то она перезапишется.
Как сделать так, чтобы регистр ЦеныНаТопливо не перезаписывался при одинаковых измерениях и периоде? Для этого нам понадобятся два метода объекта РегистрСведенийМенеджерЗаписи — метод Прочитать и метод Выбран.
Метод Прочитать считывает данные регистра по указанным измерениям и периоду, а метод Выбран возвращает Истину, если есть запись с указанными полями, и Ложь, если такой нет.
В этом случае наш код изменится.
МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо; МенеджерЗаписи =МенеджерЦеныНаТопливо.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.ВидТоплива = ВидТоплива; МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива; МенеджерЗаписи.Прочитать(); Если Не МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.ВидТоплива = ВидТоплива; МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива; МенеджерЗаписи.Цена = Цена; МенеджерЗаписи.Записать(); КонецЕсли;
В этом случае мы присваиваем значения ключевым полям (измерениям) и периоду. А после применяем метод Прочитать. Данный метод считывает записи с регистра по указанным ключевым полям (измерениям) и периоду. Если есть записи с данным набором полей, то метод Выбран возвращает Истину, иначе – Ложь. В Вашем примере, если метод Выбран вернул значение Ложь (записей нет), то мы присваиваем значения измерениям и ресурсу и записываем.
Если же нам нужно будет удалить запись с заданным набором измерений, то код немного поменяется.
МенеджерЦеныНаТопливо = РегистрыСведений.ЦеныНаТопливо; МенеджерЗаписи =МенеджерЦеныНаТопливо.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.ВидТоплива = ВидТоплива; МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива; МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Период = ТекущаяДата(); МенеджерЗаписи.ВидТоплива = ВидТоплива; МенеджерЗаписи.ПоставщикТоплива = ПоставщикТоплива; МенеджерЗаписи.Удалить(); КонецЕсли;
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 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
В наборе записей можно установить значение свойства ОбменДанными.Загрузка, которое в дальнейшем повлияет на логику записи. А как установить значение этого свойства в менеджере записи?