Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л3-4 - Язык программирования 1С.DOC
Скачиваний:
17
Добавлен:
14.08.2019
Размер:
231.94 Кб
Скачать

Агрегатные типы данных

Агрегатными типами данных в системе 1С: Предприятие называют такие специфические типы данных, которые сильно приближены к объектам предметной области как по перечню атрибутов, так и по методам работы с ними. Действительно, если базовые типы содержат абстрактную информацию, то агрегатные объекты как бы моделируют предметную область. Скажем, справочник сотрудников предприятия содержит: ФИО сотрудника, данные об образовании, месте жительства, стаже работы, паспортные данные и т.д.

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

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

а = 34;

С агрегатными объектами дело обстоит несколько сложнее. Они могут иметь множество атрибутов, и простое размещение идентификатора объекта слева от оператора «=» ни к чему не приведет (во всяком случае, приведет не к тому, что нам требуется). Поэтому для таких объектов существует свой подход к адресации. Он выражается в том, что все атрибуты и методы записываются через точку после имени объекта:

<объект> [<атрибут> | <метод()>]

Пример:

Спр = СоздатьОбъект("Справочник.Товары");

Спр = НайтиПоНаименованию ("Булка");

Спр.Цена.ИспользоватьДату('01.05.02');

Спр.Цена = 325;

Кроме того, во встроенном языке системы 1С: Предприятие связь между объектами формируется в момент выполнения кода программы. Это значит, что ошибка неправильного доступа к объекту выявится только при запуске соответствующего алгоритма.

Для любого объекта агрегатного типа данных можно выделить типовую последовательность действий при работе с ним, состоящую из четырех основных этапов:

  • создание (в памяти компьютера) требуемого объекта при помощи функции СоздатьОбъект() и одновременное присвоение ссылки на него какой-либо переменной при помощи оператора присваивания;

  • позиционирование объекта на нужном элементе данных. Дело в том, что «просто» созданный объект не определен, а значит, не содержит никакого значения. Поэтому его нужно позиционировать на каком-нибудь интересующем нас элементе справочника, на документе и т.д. в зависимости от типа объекта. Это делается при помощи соответствующих методов поиска и перемещения на искомый элемент;

  • осуществление нужных действий с объектом (получение информации, ее обработка, запись новых данных и т.д.);

  • необязательный пункт. Если объект больше не нужен, то его можно отсоединить от переменной, содержащей ссылку на него. Этой переменной можно просто присвоить какое-либо значение базового типа (например, число 0). Таким способом можно увеличить объем свободной оперативной памяти.

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

//Создадим объект типа "Справочник.Номенклатура"

товар = СоздатьОбъект("Справочник.Номенклатура");

//Переместим ссылку на товар, нужный нам ("Шоколад");

товар.НайтиПоНаименованию("Шоколад");

//этот метод позиционирует ссылку на искомом элементе

Если товар.Выбран()=1 Тогда //если товар найден.

//Метод Выбран() возвращает 1, если переменная товар позиционирована

//на элементе

Сообщить("Цена товара " + товар.Наименование + " " + товар.Цена);

Иначе //если товар не найден

Сообщить("Товар не найден в справочнике!");

КонецЕсли;

товар = 0; //наконец, отсоединяем объект от переменной

Приведем список всех возможных агрегатных типов данных: «Константа», «Справочник», «Перечисление», «Документ» «Регистр», «ПланСчетов», «Вид субконто», «Операция», «Счет», «БухгалтерскиеИтоги», «ЖурналРасчетов», «ВидРасчета», «Календарь», «Запрос», «Периодический», «Текст», «Таблица», «СписокЗначений», «ТаблицаЗначений», «Картинка», «ФС» и «XBase». Все типы с «Константы» по «Календарь» включительно можно встретить в дереве метаданных. Следовательно, они соответствуют объектам конфигурации. Остальные агрегатные типы являются служебными и расширяют возможности программиста при работе с системой.

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

  • глобальная область видимости. Ей обладают переменные, объявленные в разделе определения переменных глобального модуля с ключевым словом Экспорт. Такие переменные могут использоваться в любом модуле конфигурации (и любой его подпрограмме);

  • переменные модуля. Такую видимость имеют переменные, объявленные в разделе объявления переменных некоторого модуля. Они доступны в пределах того же модуля;

  • локальные переменные. Ими являются такие переменные, которые объявлены в теле процедуры или функции.

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

Листинг 3.2. Пример совпадения имен переменных

Перем а; //объявляем переменную модуля ‘a’

Процедура Проц()

Перем а; //объявляем локальную переменную ла'

а = 5;

Сообщить("Значение переменной 'а' в теле процедуры Проц() равно " + а);

КонецПроцедуры;

а = 10;

Таким образом, как и было сказано, переменные с меньшей областью видимости перекрывают переменные с большей, если их идентификаторы совпали.