Формат программного модуля




Выше было отмечено, что программный модуль пакета 1С: Предприятие не является самостоятельной программой в общепринятом смысле этого слова. Это связано с тем, что он не может быть выполнен независимо от конфигурации. Более того, он, как правило, и не имеет в себе целостного алгоритма работы, а лишь содержит набор процедур и функций, которые вызываются в определенные моменты времени (например, при нажатии кнопки, при открытии формы, из какой-либо другой процедуры модуля). В этом смысле процедуры и функции в значительной степени независимы друг от друга.

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

Пример:

Контр = док.Контрагент; //в переменную контр будет

//скопировано наименование контрагента

//это тоже комментарий, занимающий всю строку до конца

Затронем два важных понятия языка: константы и переменные.

Константа – это постоянная величина, значение которой не может изменяться во время выполнения программы. Тип константы соответствует некоторому базовому типу. Следовательно, константы подразделяются на:

- числовые – это не что иное, как десятичное число, например: 235, -5, 54.8;

- строковые – это произвольные последовательности символов, заключенные в кавычки.

Пример: "Это и есть строковая константа";

- константы типа «дата » – это взятые в одинарные кавычки три двухразрядных числа, разделенных точками, например: '23.04.03', '10.01.99'. Для записи года разрешается использовать четыре цифры: '15.02.1995';

- системные строковые константы. К ним относятся РазделительСтраниц, РазделительСтрок и СимволТабуляции.

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

Обращение в программах к объектам, строкам и т.д., осуществляется посредством имен (идентификаторов) переменных. Именем переменной, процедуры или функции может быть любая последовательность букв, знаков подчеркивания «_» и цифр, начинающаяся с буквы или со знака подчеркивания. Как и в любом языке программирования, вновь создаваемые имена не должны совпадать с теми, которые уже существуют; кроме того, они должны отличаться и от зарезервированных слов языка, имен существующих процедур и функций. Регистр букв значения не имеет. Переменная абв – это то же самое, что и АБВ, АбВ, абВ и т.д.

В любом языке программирования существуют зарезервированные слова. Это такие слова, которые не могут использоваться в качестве имен переменных и процедур (функций) и несут свою предопределенную смысловую нагрузку. В языке 1С они имеют два представления – русское и английское. Как и в именах переменных, регистр букв не учитывается. В табл. 3.2 приведен полный список ключевых слов встроенного языка в обоих вариантах представления (русско- и англоязычном).

Таблица 3.2 Ключевые слова встроенного языка 1С: Предприятие

Если If Или Or
Тогда Then He Not
ИначеЕсли Elslf Знач Val
Иначе Else СтрДлина StrLen
КонецЕсли Endlf СокрЛ TrimL
Цикл Do СокрП TrimR
Для For Лев Left
По To Прав Right
Пока While Сред Mid
КонецЦикла EndDo Цел Int
Процедура Procedure Окр Round
Функция Function Число Number
КонецПроцедуры EndProcedure Строка String
КонецФункции EndFunction Дата Date
Перем Var Формат Format
Перейти Goto Разм Dim
Возврат Return Вопрос DoQueryBox
Продолжить Continue Предупреждение DoMessageBox
Прервать Break Контекст Context
И And    

Любой программный модуль 1С: Предприятия имеет одну и ту же структуру. Программный модуль состоит из следующих разделов:

- раздел определения переменных;

- раздел описания процедур и функций;

- раздел выполняемой части, т.е. основной программы.

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

Раздел описания переменных содержит в себе операторы объявления переменных Перем, разделенные символом «;». Заканчивается он с началом описания первой процедуры или функции (словом Процедура или Функция с последующим идентификатором таковой),

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

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

Наконец, приведем перечень специальных символов встроенного языка.


Таблица 3.3 – Специальные символы встроенного языка

Написание символа Значение символа  
// Начинает комментарий. Комментарий продолжается до конца строки  
; Символ разделения операторов  
() В круглые скобки мы заключаем список параметров процедур, функций и методов  
, Запятой разделяют параметры в списке параметров функций, процедур, методов  
| Символ переноса строки. Используется только в начале строки и означает, что данная строка есть продолжение предыдущей  
[ ] В квадратных скобках задается размерность массива  
  «» В двойные кавычки заключаются строковые константы
  ‘ ’ В одинарные кавычки заключаются константы типа «Дата»
  . Десятичная точка в константах типа «Число». Служит также разделителем при обращении к атрибутам и методам объектов
  ? Системная процедура «условное выполнение»
  : Двоеточие служит последним символом в имени метки
  = Логическая операция «равно» или символ присвоения значения
  + Знак операции арифметического сложения. Знак конкатенации строк
  - Знак операции арифметического вычитания. Унарный минус
  * Знак операции умножения
  / Операция деления
  % Знак «процент» означает остаток от деления
  > Знак логической операции «больше»
  < Знак логической операции «меньше»
  >= Знак логической операции «больше или равно»
  <= Знак логической операции «меньше или равно»
  ¹ Знак логической операции «не равно»
  ~ Тильда. Этим знаком начинается метка оператора
         

Типы данных системы

В любом языке программирования существует свой набор типов данных. Их обычно классифицируют по таким признакам, как набор допустимых операций, вид сохраняемой информации (числовые типы, строковые и т.д.), диапазон возможных значений.

Во встроенном языке программирования системы 1С: Предприятие типы данных принято подразделять на базовые и агрегатные.

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

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

Базовые типы данных

К базовым типам данных в 1С относятся:

- числовой. В данных числового типа разрешается хранить любое десятичное число. Над ним определены арифметические и логические операции, операция присваивания. Явных ограничений на диапазон возможных значений переменных числового типа не накладывается;

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

- дата. В переменных типа «дата» можно сохранять календарные даты в формате ДД.ММ.ГГ или ДД.ММ.ГГГГ (здесь ДД – это две цифры для представления дня месяца, ММ – номер месяца, ГГ (ГГГГ) – последние цифры (или полный номер) года).

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

1) Число®Строка. Строковым преобразованием числа является его полное представление с учетом десятичной точки. Например, если у нас было число -34.5, то в результате такого преобразования мы получим строку "-34.5".

2) Дата®Строка. При преобразовании даты в строку сохраняются разделители в виде точек. Если имелась дата '23.12.02', то она перейдет в строку "23.12.02".

3) Строка®Число. При попытке (это не всегда возможно) преобразовать строку в число анализируются ее первые символы. Если они являются десятичными цифрами, то они и используются в качестве результата преобразования, иначе результирующее число равно 0. Например, строка "5 рублей" перейдет в число 5, а строка "пять рублей" – в 0.

4) Дата®Число. В результате мы получаем численное представление даты.

5) Строка®Дата. Ситуация несколько напоминает преобразование строки в число. Если в начале строки есть нечто, что могло бы быть строковым представлением даты в формате ДД.ММ.ГГ, то преобразование будет осуществлено. В противном случае мы получим нулевую дату '00.00.00'.

6) Число®Дата. При этом вновь делается попытка проинтерпретировать целую часть числа как численное представление даты Оно и будет результатом; если же число отрицательно, то получится нулевая дата ('00.00.00').

Важно отметить, что, помимо рассмотренного неявного преобразования типов в языке, есть возможность преобразовывать типы явно. Для этого служат специальные системные функции Число( <выражение> ), Строка( <выражение> ) и Дата( <выражение> ). В результате их применения значения выражений, переданных в качестве параметров функций, преобразуются в заданные типы (см. листинг 3.1).

Листинг 3.1. Пример программного модуля

//Объявляем явно переменные модуля, т.е. начинается раздел

//описания переменных

Перем a;

Перем б;

Перем стр;

Перем дат;

//Основная программа, (процедур и функций нет)

а=5; б=6; //Присваиваем значения двум переменным.

//Они, соответственно, приобретают числовой тип

стр = "Это строка"; //присваиваем значение переменной стр

дат = '01.01.03'; //то же соответственно

а = стр; //теперь а = "Это строка" и имеет строковый тип

б = 1*дат; //после выполнения этой строки б = 2452641

б = "" + б; //теперь б = "2452641", обратите

//внимание на способ приведения типа

стр = стр + " " + дат; //стр = "Это строка 01.01.03"

б = 1*стр; //б = 0

дат = Дата( 2452640 ); //дат = '31.12.02'

//Применим специальные функции

а = Число( дат ); //а = 2452641

стр = Строка( (123+453)/5 ); //стр = "115.2"

дат = Дата ("23.45.ыва"); //дат = '.. ', т.е.

//преобразование не получилось

//конец программы (модуля)

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

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

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

Перем Элементы[5]; //объявлен массив из пяти элементов

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

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

Элементы[1] = 234; //первый элемент - число

Элементы[2] = "второй элемент имеет строковой тип";

Определенным (инициализированным) считается такой массив, в котором для всех элементов заданы значения. Инициализацию элементов массива удобно производить при помощи цикла:

Перем М[10];

Для i = 1 По 10 Цикл

M[i] = 1; //все элементы массива будут равны 1

КонецЦикла;"

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

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

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

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

а = 34;

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

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

Пример:

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

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

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

Спр.Цена = 325;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

а = 5;

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

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

а = 10;

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: