Встроенный язык
Типообразующие объекты, их свойства, методы и события
Наряду с типами данных, которые определены на уровне платформы, конкретное прикладное решение может использовать уникальные типы данных, существующие только в этом конкретном прикладном решении. Причем технологическая платформа 1С:Предприятия 8.0 будет полностью поддерживать работу с этими типами данных точно так же, как и с типами, которые определены на уровне самой платформы.
Как правило, появление новых типов данных в прикладном решении связано с использованием прикладных объектов. На уровне технологической платформы поддерживается несколько классов прикладных объектов, которые сами по себе не могут быть использованы в конкретном прикладном решении. Например, можно перечислить такие классы прикладных объектов как Справочники, Документы, Регистры сведений, Планы видов характеристик и пр.
Для каждого класса прикладных объектов определена соответствующая ему базовая функциональность: типы таблиц базы данных, которые должны быть созданы для хранения данных, типовые формы, типовые объекты языка, наборы прав и пр.
Разработчик, создавая прикладное решение, не имеет возможности использовать эти классы напрямую, однако может добавить в свое прикладное решение новый объект конфигурации, наследующий всю функциональность того или иного класса.
Например, разработчик может добавить в свое прикладное решение новый справочник Номенклатура, который будет наследовать функциональность класса Справочники, или новый документ КассовыйОтчет, который будет наследовать функциональность класса Документы.
Сразу же после такого добавления разработчику становятся доступны новые типы данных, состав которых определяется принадлежностью объекта к тому или иному классу прикладных объектов.
Например, после создания нового справочника Номенклатура, становятся доступны следующие типы данных:
- СправочникМенеджер.Номенклатура;
- СправочникСсылка.Номенклатура;
- СправочникОбъект.Номенклатура;
- СправочникВыборка.Номенклатура;
- СправочникСписок.Номенклатура.
Еще один момент, на котором следует акцентировать внимание, проще всего продемонстрировать на примере.
Допустим, в прикладном решении созданы два новых справочника: Номенклатура и Цены. Несмотря на то, что оба эти объекта унаследовали функциональность соответствующего класса Справочники, и для них в прикладном решении был создан один и тот же состав типов данных, одноименные типы данных будут являться различными типами данных. Например, СправочникОбъект.Номенклатура и СправочникОбъект.Цены - это различные типы данных.
Так происходит потому, что разработчик может дополнительно к базовой функциональности, унаследованной от соответствующего класса, добавить свою, особенную для каждого объекта конфигурации. Например, оба упомянутых выше справочника могут содержать табличные части (это унаследовано от класса Справочники). Однако для справочника Цены разработчик не создаст ни одной табличной части, в то время как для справочника Номенклатура он создаст, например, три табличные части. Очевидно, что структура хранения данных типа СправочникОбъект.Номенклатура будет значительно отличаться от структуры хранения данных типа СправочникОбъект.Цены.
Для работы с такими типами данных (классами прикладных объектов) в системе реализована единая схема работы через объекты ":Менеджер". Объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументыМенеджер, ОбработкиМенеджер и аналогичные им предназначены для обращения к коллекции значений соответствующих менеджеров объектов конфигурации. Свойствами этих объектов являются другие объекты типа КонстантаМенеджер, СправочникМенеджер, ДокументМенеджер, которые, в свою очередь, предоставляют доступ к конкретным объектам (справочник, документ, константа).
Например:
СправочникиМенеджер - объект, обеспечивает доступ к менеджерам всех справочников конфигурации.
ВсеСправочники=Справочники; //в данном случае тип переменной ВсеСправочники будет СправочникиМенеджер.
"Справочники" - это свойство глобального контекста, с помощью которого идет обращение к менеджеру справочников конфигурации.
СправочникМенеджер.<имя> - объект, обеспечивает доступ к конкретному справочнику конфигурации.
СправочникКлиенты=Справочники.Клиенты; //тип переменной СправочникКлиенты будет СправочникМенеджер.
СправочникОбъект.<имя> - объект, обеспечивает доступ к конкретному элементу справочника, его свойствам и методам.
ЭлементСКодом1 = Справочники.Клиенты.НайтиПоКоду(1).ПолучитьОбъект(); //тип переменной ЭлементСКодом1 будет СправочникОбъект.
СправочникСписок.<Имя> - объект, предназначен для управления списком элементов справочника, отображаемых в табличном поле. Данный объект используется для визуального представления списка справочника.
Такая схема обращения является единой для всех объектов конфигурации.
Для выбора множества объектов используются объекты типа "СправочникВыборка", "ДокументВыборка" и т.д.
ВыборкаСправочника = Справочники.Клиенты.Выбрать(); //тип переменной ВыборкаСправочника будет СправочникВыборка.
Для объекта "КонстантыМенеджер" в системе предусмотрен метод СоздатьНабор() с возвращаемым значением типа "КонстантыНабор". Объект "КонстантыНабор" предназначен для управления набором указанных в параметрах метода СоздатьНабор() констант. Используя данный объект, можно прочитать и записать в одной транзакции значения для выбранных констант.
Набор = Константы.СоздатьНабор("Руководитель, ИНН"); Набор.Прочитать(); Набор.Руководитель = "Иванов И.И."; Набор.ИНН = "1234567890"; Набор.Записать();
Для объектов "РегистрСведенийМенеджер", "РегистрНакопленияМенеджер", "РегистрБухгалтерииМенеджер", "РегистрРасчетаМенеджер" предусмотрен метод СоздатьНаборЗаписей() с возвращаемыми значениями РегистрСведенийНаборЗаписей, РегистрНакопленияНаборЗаписей и т.д.
К свойствам, реквизитам и методам описанных выше объектов обращаемся через точку. Например:
Код = Справочники.Контрагенты.НайтиПоКоду(1).Код; //в данном примере мы обратились к методу справочника "НайтиПоКоду()" //и к реквизиту элемента справочника "Код".
Рассмотрим подробнее работу с набором записей регистра сведений. Основная задача регистра сведений - хранить информацию, которая развернута по определенной комбинации измерений и, при необходимости, по времени. Из принципов работы регистра сведений вытекает то, что в системе может быть только одна запись с определенным набором и периодом измерений. Уникальность записей по набору измерений принципиально отличает регистры сведений от регистров накоплений, которые позволяют вводить несколько записей с одинаковым значением измерений и периодом. Строки регистра сведений, содержащие информацию о значениях ресурсов для определенных значений измерений, конкретного периода, регистратора, называются записями. Для считывания и занесения набора записей в базу данных служит объект "РегистрСведенийНаборЗаписей".
Некоторые методы объекта "РегистрСведенийНаборЗаписей":
- Добавить() - добавляет новую запись в набор.
- Количество() - получает количество записей в наборе.
- Прочитать() - считывает записи из базы данных по установленному отбору.
- Удалить() - удаляет запись из набора записей регистра сведений.
- Записать(<замещать>) - записывает набор записей в базу данных. В зависимости от переданного параметра, может быть выполнено добавление записей или их замещение. Если для регистра сведений, подчиненного регистратору, выполняется добавление записей, то после выполнения записи набор очищается. Для регистров сведений, у которого в конфигураторе установлен режим записи "Подчинение регистратору", при записи значение регистратора всегда устанавливается той ссылкой, по которой был установлен отбор этого набора записей, независимо от того, что было назначено в процессе работы с набором
Следует отметить, что если вызвать метод "Записать" с параметром Истина для набора записей регистра сведений, у которого независимый режим записи, не установив перед этим отбор, то все записи регистра сведений будут удалены и замещены на те записи, которые мы добавили в набор. Записать набор записей регистра сведений, у которого режим записи "Подчинение регистратору", не установив предварительно отбор нельзя, и в данном случае возникнет ошибка.
Для работы с классами прикладных объектов в системе также предусмотрены предопределенные процедуры-обработчики, которые автоматически выполняются при наступлении различных событий. Например, процедуры: "ПриЗаписи", "ПередЗаписью", "ПриУдалении", "ОбработкаПроведения" и др. Такие процедуры располагаются в модулях объектов. При этом следует отметить, что такие предопределенные процедуры-обработчики вызываются на выполнение независимо от того, как было вызвано указанное событие, программно или интерактивно.
При выполнении некоторых предопределенных процедур, например, "ОбработкаПроведения", выполняется неявная транзакция. Для отмены неявной транзакции используется выражение:
Отказ = Истина;
Где Отказ - это параметр предопределенной процедуры
Задание 10
В документе "Приказ об изменении цен" создайте в процедуре "ОбработкаПроведения" движения по регистру сведений "ЦеныРеализации".