Модуль менеджера регистра сведений 1с

Модуль менеджера регистра сведений 1с

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Что такое модули и для чего собственно они предназначены? В модуле располагается программный код. Причем, стоит отметить, что в отличие от платформы 7.7, где код мог располагаться и в свойствах элементов формы и в ячейках таблиц макета, в платформе 8.х любая строчка кода должна располагаться в каком-либо модуле. Обычно модуль состоит из трех разделов — это раздел описания переменных, раздел описания процедур и функций, а так же раздел основной программы. Такая структура характерна практически для всех модулей платформы, за некоторым исключением. В некоторых модулях нет раздела описания переменных и раздела основной программы. Например, Модуль сеанса и любой Общий модуль.

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

Модуль приложения

Модуль предназначен для того, чтобы отловить моменты запуска приложения (загрузки конфигурации) и завершения его работы. И в соответствующих событиях можно расположить процедуры проверки. Например, при начале работы приложения обновить какие-либо справочные данные конфигурации, при завершении работы поинтересоваться, а стоит ли вообще выходить из него, может день рабочий еще не закончился. Кроме того в нем перехватываются события от внешнего оборудования, например, торгового или фискального. Стоит отметить, что модуль приложения перехватывает описанные события только в случае интерактивного запуска. Т.е. когда создается само окно программы. Этого не происходит, если приложение запускается в режиме com- соединения.

В платформе 8.2 существует два различных модуля приложения. Это модуль Обычного приложения и модуль Управляемого приложения. Они срабатывают при запуске различных клиентов. Так модуль управляемого приложения срабатывает при запуске веб-клиента, тонкого клиента и толстого клиента в режиме управляемого приложения. А модуль обычного приложения срабатывает при запуске толстого клиента в режиме обычного приложения.

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

Как уже отмечалось выше, модуль приложения обрабатывает события запуска и завершения приложения. Для обработки каждого из этих событий в модуле приложения существует пара обработчиков Перед… и При… Отличия между ними таково, что при выполнении кода в обработчике Перед… действие еще не свершилось и мы можем отказаться от его выполнения. Для этого предназначен параметр Отказ. В обработчиках При.. действие уже свершилось, и отказаться от запуска приложения или выхода из него мы не можем.

Модуль внешнего соединения

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

Читайте также:  Doffler код для пульта

Как и в модуле приложения, здесь доступны разделы описания переменных, методов и раздел основной программы. Так же можно объявлять экспортные переменные и методы. Отличие заключается в том, что в режиме com- соединения вся работа с информационной базой происходит на стороне сервера, поэтому модуль внешнего соединения компилируется исключительно на сервере. Соответственно в нем не доступны экспортные переменные и методы общих клиентских модулей.

Модуль сеанса

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

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

Не стоит поддаваться соблазну того, что этот модуль выполняется при любом запуске приложения, и располагать в нем код не связанный напрямую с инициализацией параметров сеанса. Связано это с тем, что обработчик УстановкаПараметровСеанса может неоднократно вызываться в процессе работе системы. Например, это происходит в тех случаях, когда мы обращаемся к не инициализированным параметрам. И хотя отловить момент первого запуска этого события можно (ТребуемыеПараметры имеет тип Неопределенно), однако следует учесть, что данный модуль компилируется в привилегированном режиме, т.е. в нем не осуществляется контроль прав доступа. И второй момент, мы еще не можем быть на сто процентов уверены, что запуск системы будет произведен. Вдруг в модуле приложения произойдет отказ, а мы пытаемся выполнить какие-то действия с базой данных.

Общие модули

Модули предназначены для описания некоторых общих алгоритмов, которые будут вызываться из других модулей конфигурации. Общий модуль не содержит раздела описания переменных и раздела основной программы. В нем можно объявлять экспортные методы, контекст доступности которых будет определяться флагами компиляции. В связи с тем, что раздел описания переменных не доступен, определять глобальные переменные в общих модулях нельзя. Для этого нужно использовать функции общих модулей с кешированием возвращаемых значений или модуль приложения. Стоит иметь в виду, что даже если свойство повторного использования общего модуля установлено в значение "На время сеанса", то и в этом случае время жизни закешированных значений не превышает 20 минут, с момента последнего к ним обращения.
Поведение общего модуля зависит от выставленных параметров (глобальный или нет, различные флаги компиляции, доступен ли вызов сервера и т.д.). Не будем в данной статье рассматривать всевозможные настройки, а также особенности поведения и подводные камни, возникающие при неразумной установке флагов свойств. Это тема для отдельной статьи. Остановимся лишь на нескольких моментах, которыми стоит руководствоваться при выставлении флагов:

  • Хорошим правилом будет не использовать флаг «Глобальный» повсеместно. Это сократит время запуска приложения, а также улучшит читаемость кода (конечно если общий модуль имеет вполне осмысленное название).
  • Не желательно использовать больше одного флага компиляции. Методов, которые необходимо выполнять в разных контекстах не так много, и если все же такие методы потребуются, то для них можно выделить отдельный общий модуль.
  • Флаг «Вызов сервера» имеет смысл, только если модуль компилируется «На сервере». Поэтому все остальные флаги компиляции стоит снять во избежание различных проблем.
  • Если в методах модуля происходит массовая обработка данных, чтение и запись в базу данных, то для увеличения скорости работы лучше отключить контроль прав доступа, выставив флаг «Привилегированный». Этот режим доступен только для общих модулей, компилируемых на сервере.
Читайте также:  Как отключить режим экономии трафика в браузере

Модуль формы

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

Модуль объекта

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

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

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

Модуль менеджера объекта

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

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

Условные обозначения на схеме: О.М. Клиент – Клиентский общий модуль; О.М. Сервер – Серверный общий модуль; М.Ф. Клиент – Клиентские процедуры модуля формы; М.Ф. Сервер – Серверные процедуры модуля формы.

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

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

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

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

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

Ссылка на основную публикацию
Меч адского пламени герои 3
В сценарии « В поисках клинка », Ксерон по приказу короля демонов Эофола Люцифера, продолжает поиски трёх реликвий (« Меч...
Ленточный шрифт по клеткам
Разделы: МХК и ИЗО Мной создана модифицированная программа “Искусство шрифта на уроках ИЗО” по развитию оформительских навыков и умений выполнять...
Лимит получения лицензий исчерпан 1с
Не обнаружена лицензия для использования программы Недавно писал про аппаратные ключи защиты, а еще чуть раньше про программную защиту «1С:Предприятия»,...
Модель черного ящика радиоприемник пример
Черный ящик это система, в которой внешнему наблюдателю доступны лишь входные и выходные величины, а структура и внутренние процессы неизвестны....
Adblock detector