- •Лекция №7. Виды программных модулей. Выражения и операторы. Процедуры и функции
- •Программный модуль
- •Виды программных модулей
- •Структура программного модуля
- •Контекст выполнения программного модуля
- •Передача локального контекста программного модуля в качестве параметра
- •Выражения и операторы. Процедуры и функции. Выражения
- •Операции
- •Массивы
- •Встроенные функции для разных типов данных
- •Управляющие операторы и конструкции
- •Пользовательские процедуры и функции
- •Контрольные вопросы
- •Литература
Встроенные функции для разных типов данных
Математические функции
Приведенные в таблице 4 математические функции применяются с числовыми типами данных. Они имеют в качестве аргументов числовые выражения и возвращают (если при их исполнении не возникло ошибки) некоторое число.
Таблица 4 Математические функции
Функция |
Что возвращает |
результат = Окр(число,[числоЗнаков],[способ]); |
Округленное значение параметра число. Параметр числоЗнаков, если он присутствует, задает число знаков дробной части результата. Значение по умолчанию - 0. Параметр способ, если он вычисляется со значением 1, устанавливает, что число вида 1 . 5 округляется до числа 2 или округляется до числа 1 в противном случае. Значение по умолчанию - 0 |
результат = Цел(число); |
Целую часть параметра число |
минЗначение = Мин(число1, [число2],..., [числоN); |
Минимальное значение своих параметров. Может иметь только один параметр - число! |
максЗначение = Макс(чнсло1, [число2],..., [числоN); |
Максимальное значение своих параметров. Может иметь только один параметр - число1 |
результат = Лог10(число); |
Десятичный логарифм аргумента число или нуль, если аргумент меньше нуля. Возникнет завершающая ошибка, если аргумент равен нулю |
результат - Лог(число); |
Натуральный логарифм аргумента число или нуль, если аргумент меньше нуля. Возникнет завершающая ошибка, если аргумент равен нулю |
Примеры:
Сообщить(Окр(2.45,1,1)); // 2.5
Сообщить(Окр(2.45, 1, 0)); // 2.4
Сообщить(Окр(2.597)); // 3
Сообщить(Цел(2.9)); // 2
Сообщить(Мин(-2.9,-5,12)); // -5
Функции для символьных данных
Приводятся в таблице 5. Параметры, имя которых содержит слово строка или текст, являются символьными выражениями, а имеющие слово число - числовыми. Используются целые части числовых параметров, если они являются нецелыми числами.
Таблица 5 Функции для строк
функция |
Что возвращает |
|
длина = СтрДлина(строка); |
Длину параметра строка |
|
флаг = ПустаяСтрока(строка); |
Число 1, если строка имеет нулевую длину или состоит из одних пробелов, или 0 -в противном случае |
|
новаяСтрока = СокрЛ(строка); |
Строку, получаемую в результате удаления ведущих пробелов в аргументе строка |
|
новаяСтрока = СокрП(строка); |
Строку, получаемую в результате удаления завершающих пробелов в аргументе строка |
|
новаяСтрока = СокрЛП(строка); |
Строку, получаемую в результате удаления ведущих и завершающих пробелов в аргументе строка |
|
подстрока = Лев(строка, число); |
Строку, содержащую первые число символов параметра строка или всю строку строка, если число => СтрДлина(строка). Если число <=0, то возвращается строка нулевой длины |
|
подстрока = Прав(строка, число); |
Строку, содержащую последние число символов параметра строка или всю строку строка, если число > СтрДлина(строка). Если число < 0, то возвращается строка нулевой длины |
|
подстрока = Сред(строка, число1, [число 2]); |
Строку, содержащую подстроку параметра строка, начинающуюся с символа под номером число 1 длиной число2. Если параметр число2 опущен, возвращается подстрока, начинающаяся с символа под номером число1 длиной до конца строки. Если число1 > СтрДлина(строка) или число2 < 0, то возвращается строка нулевой длины. Если параметр число1 < 0, то он принимается равным единице |
|
позиция = Найти(строка, подстрока); |
Позицию, с которой подстрока начинается в параметре строка, или нуль, если подстрока не найдена в первом параметре |
|
новаяСтрока = СтрЗаменить (строка, подстрока1, подстрока2); |
Строку, в которой все вхождения параметра подстрока 1 в параметр строка заменены на параметр подстрока2 |
|
кол = СтрЧислоВхождений(строка, подстрока); |
Число вхождений параметра подстрока в параметр строка |
|
кол = СтрКоличествоСтрок {текст); |
Число строк в тексте текст. Строки в тексте разделены символом РазделительСтрок (см. разд. 2.3) |
|
стр = СтрПолучитьСтроку(текст, номерСтроки); |
Строку параметра текст, имеющую номер номерСтроки. Если номерСтроки < 0 или номерСтроки больше числа строк в тексте, то возвращается строка нулевой длины |
|
новаяСтрока = Врег(строка); |
Строку, в которой все символы параметра строка преобразованы в верхний регистр |
|
новаяСтрока - Нрег(строка); |
Строку, в которой все символы параметра строка преобразованы в нижний регистр |
|
новаяСтрока = OemToAnsi (строка); |
Строку, в которой OEM-коды символов параметра строка преобразованы в ANSI-коды |
|
новаяСтрока = AnsiToOem (строка); |
Строку, в которой ANSI-коды символов параметра строка преобразованы в ОЕМ-коды |
|
символ = Симв(кодСимвола); |
Символ, код которого равен значению параметра кодСимвола |
|
код = КодСимв(строка); |
Код первого символа параметра строка |
|
Функции для дат и времени
1С, как и полагается программе бухгалтерского назначения, хранит много различных Дат, для управления которыми и доступа к которым используются приводимые в табл.6 функции. Параметры, имя которых содержит слово дата, - это выражения типа Дата. Параметр вариант может быть либо датой, либо выражением символьного типа. Прочие параметры - это числовые выражения. Большинство функций, если они получают в качестве параметра несуществующую дату, например '33.10.01', возвращают пустое значение типа Дата. Например:
Сообщить(НачМесяца('33.10.01')); //Напечатает . .
Таблица 6 Функции для ДАТ
Функция |
Что возвращает |
|
тДата = ТекущаяДата(); новаяДата = ДобавитьМесяц (дата, числоМесяцев); |
Текущую (системную) дату. Дату, получаемую в результате прибавления к значению параметра дата заданного вторым параметром числа месяцев. Значение параметра числоМесяцев может быть меньше нуля |
|
нМесяца = НачМесяца(дата); |
Дату начала месяца, которому принадлежит дата |
|
кМесяца = КонМесяца(дата); |
Дату конца месяца, которому принадлежит дата |
|
нКвартала = НачКвартала(дата); |
Дату начала квартала, которому принадлежит дата |
|
кКвартала = КонКвартала(дата); |
Дату конца квартала, которому принадлежит дата |
|
нГода = НачГода(дата); |
Дату начала года, которому принадлежит дата |
|
кГода = КонГода(дата); |
Дату конца года, которому принадлежит дата |
|
нНедели = НачНедели(дата); |
Дату начала недели, которой принадлежит дата |
|
кНедели - КонНедели(дата); |
Дату конца недели, которой принадлежит дата |
|
ДатаТек = РабочаяДата ([рДата], [режимСмены]); |
Устанавливает/возвращает рабочую дату, то есть дату, используемую при формировании документов и проводок в текущем сеансе. Параметр режимСмены применяется при смене рабочей даты на значение параметра рДата и установки режима смены рабочей даты в полночь. Причем если режимСмены задается равным числу
Если параметр режимСмены не задан, то при вызове функции РабочаяДата сохраняются заданные в системе установки режима смены. Если новое значение даты - это несуществующая дата, то рабочая дата не меняется. Рабочую дату можно также изменить, воспользовавшись в 1С:Предприятии пунктами меню Сервис- Параметры и выбрав в появившемся окне закладку Общие (см. рис. 2.1). По умолчанию рабочая и текущие даты совпадают |
|
год = ДатаГод(дата); |
Числовое значение года, которому принадлежит дата |
|
месяц = ДатаМесяц(дата); |
Номер месяца, которому принадлежит дата |
|
число = ДатаЧисло(дата); |
Номер дня месяца, заданного параметром дата |
|
неделя = НомерНеделиГода(дата); |
Номер недели года, которой принадлежит дата |
|
деньГода = НомерДняГода(дата); |
Номер дня года, заданного параметром дата |
|
деньНедели = НомерДняНедели(дата); |
Номер дня недели, заданного параметром дата (нумерация дней начинается с понедельника) |
|
период = ПериодСтр(датаНачПериода, датаКонПериода); |
Символьное представление периода, границы которого задаются значениями параметров функции. Если период - это месяц, квартал, полугодие или год, то выводится соответствующее название периода, например 1 Полугодие 2002 г. |
|
нИнтервала = НачалоСтандартногоИнтервала ([вариант]); |
Устанавливает/возвращает вариант задания начала стандартного интервала отображения журнала документов. Параметр вариант, если он имеет тип Дата, задает дату начала интервала журнала документов. Если параметр - это символьное выражение, то оно должно вычисляться со следующими значениями: "День", "Месяц", "Квартал", "Год". Если параметр опущен или содержит неверное значение, имеющаяся в системе установка сохраняется. Начало стандартного интервала можно задать в 1С:Предприятии, обратившись к пунктам меню Сервис - Параметры и выбрав в появившемся окне закладку Журналы (рис. 2.3) |
|
кИнтервала = КонецСтандартногоИнтервала ([вариант]); |
Устанавливает/возвращает вариант задания конца стандартного интервала отображения журнала документов. Параметр вариант имеет тот же, что и для предшествующей функции, смысл с той разницей, что задает конец стандартного интервала |
|
время = ТекущееВремя([час], [мин], [сек]); |
Строку, отображающую текущее (системное) время. Если заданы параметры час, мин и сек, то функция запишет в них числовые значения соответственно часа, минут и секунд текущего времени |
|
флаг = ВвестиПериод(нПер, кПер, заг) |
Единицу, если в выведенном диалоге (рис. 2.4) задания даты начала (нПер) и даты конца (кПер) периода нажата кнопка ОК, или нуль, если нажата кнопка Отмена, или клавиша Esc, или кнопка, закрывающая окно диалога. Символьный параметр заг задает заголовок диалогового окна |
|
Функции преобразования типов данных
Как мы видели, в выражениях, с операндами разных типов данных преобразования типов выполняются автоматически. При этом тип выражения определяется типом его первого операнда. Используя такое свойстве выражений 1С, можно решать вопросы преобразования типов данных, такие, как преобразования «число – строка», «дата – число» и обратные. Покажем это на примерах.
Пример. Преобразования "число - строка" и "строка - число".
перем а, б, стр;
а =123.45;
// Преобразование "число - строка". Переменная стр имеет символьный тип, поскольку
// первый операнд выражения "" + а - это строка
стр = "" + а; // В результате имеем стр = "123.45"
стр = стр + "67"; // Имеем: стр = "123.4567"
// Преобразование " строка - число ". Переменная б имеет числовой тип, поскольку
// первый операнд выражения 0 + стр - это число
б=0+стр; // Имеем: б=123.4567
Сообщить(ТипЗначенияСтр(стр)); // Напечатает Строка
Сообщить(ТипЗначенияСтр(б)); // Напечатает Число
Некоторые преобразования типов данных можно выполнять, применяя приведенные в таблице 7 встроенные преобразовывающие функции.
Таблица 7 Функции преобразования типов данных
Функция |
Что делает |
стр = Строка(параметр); |
Преобразовывает значение выражения параметр в строку. Выражение может быть датой или иметь числовой или символьный тип. В последнем случае преобразований не выполняется |
чис = Число(параметр); |
Преобразовывает значение выражения параметр в число. Выражение может быть датой или иметь символьный или числовой тип. В последнем случае преобразований не выполняется |
Вариант 1: дат = Дата(параметр); Вариант 2: дат = Дата(год, месяц, число); |
В первом варианте функция преобразовывает значение выражения параметр в значение типа Дата. Выражение может быть числовым, символьным или типа Дата. В первом случае значение выражения трактуется как число дней от Рождества Христова и преобразовывается в соответствующую дату, во втором случае строка преобразовывается в дату, в третьем преобразований не выполняется. Во втором варианте функция преобразовывает дату, заданную числовыми выражениями год, месяц, число, в значение типа Дата. Причем для задания значения параметра год используются все цифры, а не две последние |
Форматирование данных
Представление данных при их выводе на различные носители можно изменять, применяя встроенную функцию Формат, имеющую следующий синтаксис:
представлениеЗначения = Формат(значение, форматнаяСтрока);
Функция Формат, получив значение, преобразовывает его в соответствии с правилами, заданными символьным параметром форматнаяСтрока, и возвращает результат в виде строки с отформатированными данными.
Пример. Выводится число -123.45 на поле длиной в 9 символов. В четырех последних символах поля отображаются знаки числа, стоящие после десятичной точки.
Сообщить(Формат(-123.45, "Ч9.4")); // Напечатает -123.4500
Форматная строка может начинаться с символов Ч, С или Д, если форматируются соответственно числовые, символьные данные или даты. Если тип данных не соответствует, употребленному символу, то до форматирования будет выполнено соответствующее преобразование типов, например
Сообщить(Формат("21-я строка", "Ч5.2")); // Напечатает 21.00
Форматирование числовых данных
Параметр форматнаяСтрока при форматировании числовых данных в общем случае имеет следующий вид:
"Ч[3][0][Д][.Т][Р1][Р2][>С]"
Появляющиеся в форматной строке обозначения имеют следующий смысл:
3 - заполнитель ведущих пробелов, присутствующих в строке-результате функции Формат. Если на месте заполнителя указать (0), то ведущие пробелы заменяются на нули;
0 - флаг вывода пустого поля, когда форматируемое значение равно нулю;
Д - длина результирующей строки в символах;
Т - число знаков после десятичной точки (точность);
Р1 - символ, отделяющий целую часть числа от нецелой. По умолчанию в качестве разделителя Р1 используется точка;
Р2 - символ, разделяющий триады. (Триада - это тройка последовательных чисел в целой части числа. Например, число 1234567 при форматировании с разделением на триады, когда на месте Р2 стоит символ ', примет вид 1'234'567.) По умолчанию триады не разделяются;
С - размер правого сдвига форматируемого значения. В результате сдвига удаляются С правых символов целой части форматируемого числа.
Примеры:
Сообщить(Формат(1234567.89,"Ч(0)20.4")); // Напечатает 000000001234567.8900
Сообщить(Формат(1234567.89,"Ч14.4,_")); // Напечатает 1_234_567,8900
Сообщить(Формат(123456000, "Ч(0)14>3")); // Напечатает 00000000123456
Если длина результирующей строки недостаточна для представления значения, то на месте результата напечатаются девятки и заданные разделители, например
Сообщить(Формат(1234567.89, "Ч8.2,_")); // Напечатает 9_999,99
Функция Формат выполнит преобразование "число - строка" без форматирования, если форматная строка не содержит компонентов Д и/или .Т или не имеет вид "ЧП[Д][С]", например
пред = Формат(21, "ЧМ"); // Вернет 21
Форматирование символьных данных
Форматная строка при форматировании символьных данных имеет вид "С[Д]", где Д - длина результирующей строки. Если Д больше длины форматируемой строки, то последняя дополняется пробелами справа, если меньше, то в результате сохраняются первые Д символов. Например:
Сообщить(СтрДлина(Формат("ААББВВ","С10"))); // Напечатает 10
Сообщить(Формат("ААББВВ", "С2")); // Напечатает АА
Форматируемая строка не изменяется, если компонент Д форматной строки отсутствует или на его месте стоит не число. Например:
Сообщить(Формат("ААББВВ", "С"))); // Напечатает ААББВВ
Сообщить(Формат("ААББВВ", "СК")); // Напечатает ААББВВ
Форматирование дат
При форматировании дат форматная строка начинается с буквы Д. Варианты задания форматной строки приведены в таблице 8. В ее последнем столбце приводятся результаты форматирования дат 21.12.01 и 05.12.01.
Таблица 8 Форматные строки для ДАТ
Форматная строка |
Вид результата |
Примеры |
"ДДДММГГ" |
ДД.ММ.ГГ |
21.12.01 |
"ДДДММГГГГ" |
ДД.ММ.ГГГГ |
21.12.2001 |
"ДДДММММГГГГ" |
ДД месяц прописью ГГГГ г. |
5 Декабря 2001 г. |
"Д(0)ДДММММГГГГ" |
ДД месяц прописью ГГГГ г., если в дне две цифры ОД месяц прописью ГГГГ г., если в дне одна цифра |
21 Декабря 2001 г.
05 Декабря 2001 г. |
"ДММММГГГГ" |
Месяц прописью ГГГГ г. |
Декабрь 2001 г. |
"ДММММГГ" |
Месяц прописью ГГ г. |
Декабрь 01г. |
"ДММММ" |
Месяц прописью |
Декабрь |
"ДККККГГГГ" |
Номер квартала ГГГГ г. |
4 Квартал 2001 г. |
"ДККККГГ" |
Номер квартала ГГ г. |
4 Квартал 01 г. |
"ДКККК" |
Номер квартала. |
4 Квартал |
"ДГГГММДД" |
ГГГММДЦ |
20011205 |
"ДНННН" |
Название дня недели даты; по умолчанию берется из секции WeekDay файла 1CV7.SPL |
Среда |
Представление даты не изменяется, если форматная строка не отвечает приведенным в таблице 8 требованиям.
