V8_2_Язык.ppt
- Количество слайдов: 20
Глава 2. Встроенный язык 2. 1. Программные модули Виды программных модулей Общие модули принадлежат всей конфигурации в целом, но в отличие от модуля приложения (см. ниже) их может быть несколько, например, модули Расчет. Налогов, Обработка. Документов. Общие модули не могут содержать объявлений переменных, и в них нет раздела основной программы, таким образом, они состоят только из процедур и функций. Модуль приложения. Это модуль, который относится ко всей конфигурации в целом и может быть только один. В нем располагаются процедуры - обработчики событий, которые инициализируются при старте и окончании работы системы. Возможно объявление переменных, описание процедур и функций, которые будут доступны в любом модуле конфигурации(кроме общих модулей и модуля внешнего соединения). В данном модуле могут вызываться экспортируемые проц. и ф-ции общих модулей.
(продолжение) Модуль внешнего соединения. Если конфигурация запускается не в режиме клиентской сессии, а через СОМ-соединение, то вместо модуля приложения используется модуль внешнего соединения, который в конфигурации может быть только один. Модули прикладных объектов. У некоторых прикладных объектов конфигурации могут быть собственные модули, например, модуль документа Расходная. Накладная, модуль справочника Номенклатура. Не следует их путать с модулями форм этих объектов. Модули форм. У каждой формы есть модуль, в котором определяется поведение формы и действия, выполняемые из нее, например, открытие других форм. Модуль сеанса - автоматически выполняется при старте системы и предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы. Исполнение модуля происходит после начала исполнения модуля приложения (до
Разделы программного модуля Любой программный модуль, за исключением общих модулей, состоит из следующих разделов Последний раздел исполняется в момент инициализации модуля.
(продолжение) Например, ниже приведен модуль документа: //экспортируемые переменные Перем Нач. Дата Экспорт; Перем Кон. Дата Экспорт; //локальная переменная модуля Перем м. Период. Строкой; Процедура Печать(Таб. Док=Неопределено) Экспорт //эта процедура будет доступна как метод объекта // Документ. Объект …. Конец. Процедуры Функция Получить. Группировку(Результат. Запроса, Имя. Группировки) //это локальная процедура модуля Конец. Функции
Контекст модулей Контекст обозначает окружение модуля, т. е. какие ему будут доступны переменные, объекты, свойства, методы и события. Виды контекстов : Глобальный контекст , доступный во всех модулях, состоит из следующих частей: • свойства, методы и события глобального контекста (например, свойство Рабочая. Дата), • системные перечисления и системные наборы значений (например, Код. Возврата. Диалога и Символы). В контексте модуля приложения (или модуля внешнего соединения) доступны экспортируемые переменные, процедуры и функции общих модулей.
(продолжение) В контексте модуля прикладного объекта есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям. Например, в модуле документа Расходная. Накладная доступны реквизиты документа и его табличные части, можно вызывать методы документа и обрабатывать события. В контексте модуля формы доступны реквизиты формы, а также ее свойства, методы и события. Если у формы назначен основной реквизит, то в модуле формы становятся доступны свойства и методы прикладного объекта, используемого в качестве основного реквизита.
2. 2. Конструкции встроенного языка 1. «Если <логич. выражение>Тогда …. Конец. Если Оператор Если может иметь ветви Иначе. Если, а также ветвь Иначе. //1 -й пример Если Выборка. Следующий() Тогда Предупреждение( «Есть данные в выборке!"); Конец. Если; //2 -й пример Если Сотр. Категория = Перечисления. Категории. Совместитель Тогда //обработаем как совместителя Иначе //обычный сотрудник Конец. Если;
(продолжение) В логических выражениях могут применяться знаки арифметических операций (+ - * / %-остаток от деления), операций сравнения (> >= < <= = <>), логических операций (НЕ, ИЛИ) (в порядке приоритета). Для задания правильного порядка вычисления рекомендуется расставлять скобки, например: Если (НЕ Страна = Выб. Страна) ИЛИ (Цена > 100 И Цена < 1000) Тогда В 1 С: Предприятии 8 введено сокращенное вычисление логических выражений. Это означает, что если по части выражения можно определить конечный результат, тогда остаток логического выражения не вычисляется. Например, Если Цена > 10 И Цена < 20 Тогда
(продолжение) 2. ? (. . . , . . . ) Данная конструкция позволяет записать условный оператор в одну строку и вычислить его как выражение. Пример: Комментарий = ? (Количество=0, "Пусто", Строка(Количество) + "шт. "); 3. Оператор присваивания <Назначение> = <Источник> <Назначение>- переменная или свойство объекта языка <Источник> - выражение Ф=И; Стр1=“ 2 s 8 dgааффф”; Дата. Документа=‘ 20080717’;
(продолжение) 4. Цикл «Для. . . По. . . Цикл» Цикл «Для. . . По» применяется для записи циклов с известным числом повторений. Например, следующий цикл 12 раз выведет номер месяца в окно служебных сообщений: Для Мес =1 По 12 Цикл Сообщить(Мес); Конец. Цикла; Переменная Мес называется переменной цикла или счетчиком цикла. Не следует изменять значение переменной цикла внутри него. Это нарушает принципы структурного программирования и может привести к трудно обнаруживаемым ошибкам.
(продолжение) 5. Цикл «Для Каждого. . . Из. . . Цикл» предназначен для обхода элементов коллекции. В качестве переменной цикла выступает не число, а объект - элемент коллекции, например, объект Строка. Таблицы. Значений в следующем примере: Пустая. Ссылка = Справочники. Номенклатура. Пустая. Ссылка(); // обрабатываем т. ч. док-та «Расходная. Накладная» для Каждого Строка. ТЗ Из тз. Состав Цикл //тело цикла Если Строка. ТЗ. Товар = Пустая. Ссылка Тогда Продолжить; //возьмем следующую строку Иначе Если Строка. ТЗ. Товар = Выб. Товар Тогда Прервать; //досрочный выход из цикла Конец. Если; Конец. Цикла;
(продолжение) 6. Цикл «Пока. . . Цикл» - для реализации циклов с неизвестным числом повторений. Цикл выполняется до тех пор, пока логическое выражение истинно. Пример: н = 0; Выборка = Справочники. Номенклатура. Выбрать(); Пока Выборка. Следующий() Цикл Если Выборка. Пометка. Удаления Тогда Продолжить; //возьмем следующий элемент Конец. Если; н = н + 1; Если н > 10 Тогда Прервать; //досрочный выход из цикла Конец. Если; Сообщить("Товар: " + Выборка. Наименование); Конец. Цикла;
(продолжение) 7. Обработка исключений : «Попытка. . . Исключение» Обработка исключений предназначена для перехвата ошибок (исключительных ситуаций), возникающих в процессе работы программы. Если возникла ошибка, и она не была перехвачена, то выдается системное сообщение об ошибке, и выполнение модуля прерывается. Однако разработчик может перехватывать возникающие ошибки и обрабатывать их по своему усмотрению, например: Попытка Средняя. Цена = Сумма. Всего / Количество; Исключение //Возникла ошибка деления на ноль. //Будем считать, что количество равно 1. Количество = 1 ; Средняя. Цена = Сумма. Всего; Конец. Попытки; Самостоятельно: Вызвать. Исключение, Выполнить, Добавить. Обработчик, Удалить. Обработчик
2. 3. Процедуры и функции Процедура Печать(Таб. Док) Макет = Получить. Макет("Основной"); Таб. Док. Вывести(Макет. Получить. Область("Бланк")) ; Конец. Процедуры Функция Есть. Право. Использования(Имя. Отчета) //возвращаемое значение функции Возврат Право. Доступа("Использование", Отчеты[Имя. Отчета]); Конец. Функции Процедура Кнопка. Печать. Нажатие(Элемент) Если НЕ Есть. Право. Использования(Имя. Отчета) Тогда Возврат; //досрочный выход из процедуры Конец. Если Таб. Док = Новый Табличный. Документ; Печать(Таб. Док); //вызов процедуры Печать Таб. Док. Показать(); Конец. Процедуры
(продолжение) Параметры у процедуры/функции могут быть необязательными. Тогда их можно будет опускать при вызове. Для необязательных параметров должно быть указано значение по умолчанию, например: Процедура Печать(Таб. Док = Неопределено) Экспорт Если Таб. Док = Неопределено Тогда Таб. Док = Новый Табличный. Документ; фл. Показывать = Истина; Иначе фл. Показывать = Ложь; Конец. Если; Макет = Получить. Макет("Основной"); Таб. Док. Вывести(Макет. Получить. Область("Бланк")); Если фл. Показывать Тогда Таб. Док. Показать(); Конец. Если; Конец. Процедуры Замечание 1. В 1 С: Предприятии 8 порядок следования процедур и функций в модуле не важен
(продолжение) Замечание 2. Параметры процедуры или функции по умолчанию передаются по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции приведет к изменению фактического параметра в том месте, где она вызывается. Чтобы гарантированно передать параметр по значению, нужно перед именем параметра вставить ключевое слово Знач.
2. 4. Примитивные типы данных Поддерживаются следующие примитивные типы данных: • число, • строка, • дата (включает в себя время), • булево (имеет два значения: Истина и Ложь), • значение Неопределено, • значение Null (для определения отсутствующего значения в таблицах базы данных, например, при соединении таблиц), • Тип (значения специального типа «Тип» нужны для представления и сравнения типов данных ). Примеры. 1. литерал типа Булево чч=Истина;
(продолжение) 2. литерал типа Число Б=12345. 6789; 3. литерал Null Если Мой. Запрос. Номенклатура = NULL тогда …. . 4. Литералы типа ДАТА - это строка цифр, заключенная в одинарные кавычки вида ‘ГГГГММДДччммсс’ (Г-год, М-месяц, Д-день, ч-часы, м-минуты, с -секунды) Примеры: ‘ 20080506’ ‘ 20080506122000’ ‘ 00010101’ – литерал для даты, соответствующей началу отсчета. В литерале допускается использование различных разделителей Дата(‘ 2003. 23 10: 45: 23’) = “ 2003. 23 10: 45: 23”
(продолжение) 6. Литерал Неопределено – используется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Например, такое значение изначально имеют реквизиты с составным типом значения, например: Если Юр. Лицо = неопределено Тогда … 7. литерал типа строка Ф=“ Моя строка”; Допускаеются многострочные строковые константы. Ффф=“Это |правильная |строка”; 8. Тип – не имеет литералов и возвращается функциями Тип. Знч и Тип. Пример: Если Тип. Знч(Тек. Объект) = Тип("Справочник. Ссылка. Номенклатура") Тогда . . . Конец. Если;
Объявление переменных Переменные обычно создаются автоматически при первом присвоении им значения, но можно объявлять их явно с помощью ключевого слова Перем. Тип переменной определяется по значению, которое она содержит. При помещении в переменную значения другого типа меняется и тип переменной, т. е. в языке поддерживается мягкая типизация. Если переменную модуля объявить с ключевым словом Экспорт, то она будет видна вне модуля. Экспортируемые переменные модуля приложения называются глобальными переменными, потому что они доступны в любом месте программы (кроме общих модулей). Замечание. Чем меньше в вашей программе будет глобальных переменных, тем лучше.