Объектно-ориентированное программирование и моделирование
База курса:
Цель курса:
Мы даем вам профессию и готовим к реальной работе
Орг-вопросы
3. Проверьте чтобы вы были записаны тут, допишите свои почтовые ящики (которые вы читаете):
2022.intervolga.ru/imit_2022
Выбрать лист группы, найти ФИО, проверить почту, получить номер темы ЛР
4. Для сдачи лабораторных работ заведите приватный репозиторий на github:
Добавьте antonov@intervolga.ru как collaborator к вашему репозиторию:
Внесите адрес репозитория напротив своей фамилии в таблицу
Если вы все сделали верно, в колонке “Приватный” автоматически загорится слово приватный
Правила ведения репозитория
Советы
ПОД ВОПРОСОМ!!!
Лекция 7: Базовые типы
Выражения и операции
Функции работы со значениями различных типов данных
Цикл лекций по основам программирования на платформе 1С:Предприятие 8.3
Основы языка 1С
Основы языка 1С
Встроенный язык системы "1С:Предприятие 8" предназначен для описания алгоритмов функционирования прикладной задачи, например, реализации расчета суммы в документах:
Основы языка 1С
Встроенный язык представляет собой предметно-ориентированный язык программирования
Во-первых, встроенный язык системы "1С:Предприятие 8" является двуязычным. Почти все зарезервированные слова, имена типов значений, свойств, методов и событий имеют два имени: русское и английское.
Исключение составляют слова, не имеющие аналогов в русском языке. Можно одновременно использовать в тексте алгоритма русские и английские слова.
Во-вторых, при написании алгоритмов регистр букв не имеет значения.
Начнем с базовых типов данных.
Базовые типы данных. Литерал
Введем понятие “литерал”.
Литерал - представление значения некоторых типов данных в программном коде.
Базовые типы данных.
NULL - значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных, например при соединении таблиц
Неопределено - значение данного типа применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному типу данных
Подробнее далее на примерах
Тип данных “Строка”
Строка в 1С:Предприятие – это базовый тип данных, представленный в виде строки в формате unicode. Тип «строка» доступна для работы в тонком клиенте, веб-клиенте, на сервере, толстом клиенте, внешнем соединении, мобильном приложении (клиент/сервер). Тип «строка» может быть передан между клиентом и сервером
Строка всегда обрамляется кавычками. Пример строковой константы:
Сообщение.Текст = “Присутствуют незаполненные данные”;
Т.е. строка “Присутствуют незаполненные данные” присваивается реквизиту Текст объекта Сообщение. Все, что обрамлено в кавычки, считается строкой.
Тип данных “Строка”. Многострочные строки
Строка может состоять из любых символов. Строки могут быть многострочными. При этом каждую новую строку необходимо определять в кавычки. Например:
Текст = “Неверно заполнен реквизит”
“Проведение документа невозможно”;
Точка с запятой ставится только в конце последней строки.
Между фрагментами текста, представляющими отдельные строки многострочной строки, не должно встречаться никаких символов, за исключением: пробелов, символов перевода строки и строк комментариев.
Допускается использование комментариев в строке с текстом:
Тип данных “Строка”. Многострочные строки
Существует еще один способ – весь текст обрамлять только в одни кавычки, но каждая новая строка должна начинаться с вертикальной полосы.
Такой синтаксис наиболее часто используется в типовых конфигурациях. В частности, в языке запросов. Например:
Запрос.Текст =
“ВЫБРАТЬ
| Сотрудники.Наименование КАК Сотрудник,
| Сотрудники.ДатаРождения КАК ДатаРождения
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| НЕ Сотрудники.ЭтоГруппа”;
В данном варианте допускается использование строк комментариев, но только в отдельных строках
Тип данных “Строка”. Определение кавычки
Для определения кавычки (“) в строковом значение необходимо задать двойную кавычку. Например:
Тип данных “Строка”. Конкатенация
Следует отметить, что для строк определена операция сложения. Это не арифметическая операция, ее называют операцией конкатенации.
Т.е. нужно объединить, например, две строки, при этом между строками ставится знак сложения «+»:
Текст = “Неверно заполнен реквизит” + “Проведение документа невозможно”;
Таким образом, происходит склеивание строк. Операция конкатенации, естественно, применима и для большего количества строк. Другие операции (вычитание, умножение, деление) для строк не допустимы.
Тип данных “Строка”. Функции
Над строками возможны различные операции преобразования строк, определение нескольких первых левых символов, определение нескольких крайних правых символов, поиск подстроки внутри строки и т.д.
Все эти функции доступны в любом месте конфигурации.
В синтакс-помощнике они находятся в разделе Общее описание встроенного языка – Встроенные функции – Функции работы со значениями типа Строка.
Тип данных “Число”.
Тип Число представляет собой число с фиксированной точкой, произвольной точности. Числовыми могут быть переменные модулей и реквизиты объектов базы данных. Для числового реквизита длина целой части не может превышать 32 символов. Точность дробной части не более10 цифр.
Когда описывается переменная и присваивается ей числовое значение, то нигде не фиксируется ее разрядность. Тем не менее, для переменных тоже существуют ограничения.
В синтаксис-помощнике сказано, что максимально допустимая разрядность для числа – это 38 знаков. Такое ограничение не препятствует решению любых экономических задач, т.е. любую денежную величину можно описать с помощью этих чисел.
Тип данных “Число”. Функции
Операции, применимые для чисел:
Если говорить о точности числовых значений, что касается реквизитов базы данных, то здесь присутствуют естественные ограничения.
Но что касается переменных, то здесь есть особенность. На самом деле, в переменных можно оперировать очень большими числами, но в информационную базу будут сохраняться значения с длиной целой части не больше 32 знаков.
Тип данных “ДатаВремя”.
Значение данного типа всегда содержит дату и время.
Значение даты и времени определяется в диапазоне
от: 01 января 0001 года 0 часов 0 минут 0 секунд
до: 31 декабря 9999 года 23 часа 59 минут 59 секунд
Значение представляет собой набор цифр, заключенных в одинарные кавычки вида
'ГГГГММДДччммсс', где:�ГГГГ - четыре цифры года;
MM - две цифры даты;
ДД - две цифры дня;
чч - две цифры часа (в 24-часовом формате)
мм - две цифры минут;
сс - две цифры секунд.
Тип данных “ДатаВремя”.
Для удобства восприятия в литерале допускается использование различных разделителей, например, "/", "\", "-", ":", " ":
В системе 1С:Предприятие 8 возможно определение литерала без времени.
В таком случае значение времени в памяти
будет: 0 часов 0 минут 0 секунд.
Для определения значения только для времени необходимо указывать значение даты в
литерале 00010101 и необходимое время.
Тип данных “ДатаВремя”.
Наиболее удобный формат
Тип данных “Булево”.
Что касается типа данных Булево, то здесь существует только два значения Истина и Ложь, которые могут быть получены различными способами.
Можно, например, использовать операции сравнения чисел или дат. В итоге будет получаться некое булевское значение, которое в дальнейшем наиболее часто используется в условных операторах и в операторах цикла.
Значения могут определяться как русскоязычными литералами (Истина, Ложь)
так и англоязычными (True, False)
Тип данных Неопределено.
Значение данного типа означает пустое значение с незаданным типом. Тип данных Неопределено – это не пустое значение какого-либо реквизита.
Например, если реквизит справочника имеет в качестве типа данных ссылку на какой-либо другой справочник, то пустое значение этого реквизита не будет равно Неопределено.
Данный тип (Неопределено) появляется, во-первых, если у нас есть некая переменная и она не инициализировна (тип данных не определен).
Второй пример: тип данных Неопределено возвращают многие функции встроенного языка, если действие не может быть выполнено.
Например, поиск элемента справочника по наименованию в том случае, если у какого-либо справочника нет такого наименования элемента. Метод НайтиПоНаименованию будет возвращать значение Неопределено.
Тип данных Неопределено.
Значение может определяться как русскоязычным литералом (Неопределено), так и англоязычным (Undefined).
Если в информационной базе есть реквизит с составным типом данных, то пустое значение данного реквизита будет равно Неопределено.
Но если тип данных будет не составным, то пустое значение будет соответствовать пустому значению данного типа (для даты – это первая секунда первого часа первого дня первого месяца первого года).
Тип данных NULL.
Значение данного типа означает пустое значение с незаданным типом в базе данных. Используется исключительно для определения отсутствующего значения при работе с базой данных, например, при соединении таблиц.
Именно отсутствующие записи во второй таблице и заполняются значением типа NULL. Т.е. это некое отсутствующее значение.
В дальнейшем, при обработке получившегося результата это нужно учитывать, так как NULL – это не ноль, а соответствующий тип данных.
Для того, чтобы значение обработать, нужно NULL привести к какому-либо обычному типу данных, который можно выводить или использовать в арифметических операциях.
Значение может определяться только в англоязычном варианте.
Тип данных Тип.
Основное применение этого типа данных заключается в том, чтобы сравнить значение некой переменной или реквизита базы данных с конкретным типом.
Т.е. в алгоритме нужно понять, какой тип у данного объекта.
Примечательно, что этот тип данных не имеет литерала. Мы не можем его написать, как например, NULL или Неопределено, но мы можем получить значение этого типа с помощью двух функций Тип() и ТипЗнч().
В эту функцию передается тот объект, для которого требуется получить тип данных.
В качестве возвращаемого значения эта функция возвращает именно тип типа тип.
В дальнейшем следует его сравнить с каким-либо интересующим типом. Например:
Если ТипЗнч(Элемент) = Тип (“СправочникСсылка.Номенклатура”) Тогда
Сообщить(“Это товар”);
КонецЕсли;
Выражения и операции
ОПЕРАЦИЯ–базовое действие, которое может выполнять программа для обработки значений в оперативной памяти компьютера.
ВЫРАЖЕНИЕ–последовательность операций и значений, используемая для обработки данных с целью получения требуемого результата. Количество операций и значений в одном выражении не имеет ограничений. Однако следует учитывать что, слишком длинные выражения трудно воспринимаются при анализе текста разработчиком.
Выражения и операции
В зависимости от операций и значений выражения можно разделить на три группы:
Математические (арифметические) операции
Математические (арифметические) операции:
сложение (Оп1 + Оп2)
вычитание (Оп1 - Оп2)
умножение (Оп1 * Оп2)
деление (Оп1 / Оп2)
остаток от деления (Оп1 % Оп2)
унарный минус (-Оп1)
Арифметические операции имеют один или два операнда, в зависимости от типа которых, операция имеет ту или иную семантику. Тот или иной семантический вариант операции определяется по первому операнду. В случае несовпадения типа второго операнда с требуемым, значение преобразуется к требуемому типу в соответствии с правилами преобразования типов или появляться состояние ошибки выполнения.
Операции "Умножение", “Деление”, “Остаток от деления” - доступны только для числовых значений и результат вычисления всегда число
Математические (арифметические) операции
Операции "Сложение" и “Вычитание” для чисел, дат и строк:
1. Сложение даты с числом. Число определяет количество добавляемых секунд.
Результатом будет значение типа ДАТА
2. Сложение строк (конкатенация). используется для того, чтобы присоединить одну строку к другой. Длина результирующей строки равна сумме длин соединяемых строк
3. Сложение строки с числом. Результат - СТРОКА
Математические (арифметические) операции
4. Сложение числа со строкой. Результат - ЧИСЛО (но не всегда)
5. Вычисление разности дат в секундах. Результатом будет числовое значение, определяющее количество секунд
Решение:
Логические операции
Логическое выражение можно представить как вопрос пользователя системе, на который надо дать однозначный ответ: "Да" или "Нет". Логические операции являются основой логических выражений.
больше: (Оп1 > Оп2)
больше или равно: (Оп1 >= Оп2)
меньше: (Оп1 < Оп2)
меньше или равно: (Оп1 <= Оп2)
равно: (Оп1 = Оп2)
не равно: (Оп1 <> Оп2)
Логические операции могут использоваться совместно с арифметическими операциями.
У арифметических операций приоритет перед логическими операциями.
Логические операции
Логические операции со строками
В данном примере результат объясняется сортировкой по алфавиту в порядке возрастания. Буква "Д" следует после буквы "А", поэтому "Д" больше "А". И система отвечает нам однозначно значением типа булево - Истина (Да).
Сравнение строковых значений может использоваться совместно с операцией конкатенации:
Логические операции с датами.
По логике сортировки по возрастанию более поздняя дата является большей. При сравнении значений типа ДАТА допустимо использование арифметических выражений.
Булевы операции
Булевы операции – используются по отношению к значениям типа БУЛЕВО. Поддерживаются следующие виды булевых операций:
И (AND) конъюнкция (булево И)
ИЛИ (OR) дизъюнкция (булево ИЛИ)
НЕ (NOT) логическое отрицание (булево отрицание НЕ)
Булевы выражения вычисляются слева направо. Для того чтобы избежать неоднозначности и управлять последовательностью операндов, следует применять круглые скобки.
Уровни старшинства булевых операций:
Булевы операции
Операция "И" (AND) - в логическом выражении является механизмом проверки соблюдения всех условий одновременно.
Если количество и цена больше нуля вычислить сумму…
Операция "ИЛИ" (OR) - используется для проверки соблюдения хотя бы одного условия.
Если количество или цена больше нуля вычислить сумму:
Булевы операции
Операция "НЕ" (NOT) – преобразует значения булево из Истины в Ложь и наоборот:
Реализация логического выражения: "Пять не меньше Трех" будет выглядеть следующим образом:
Функции работы с различными типами данных
Функция (процедура) - заранее разработанный алгоритм, который можно использовать для получения какого-либо результата, например:
Функции работы с различными типами данных
Для упрощения решения подобных задач разработчики платформы создали алгоритмы, представленные функциями (процедурами) работы со значениями, описание которых можно найти в Синтакс-помощнике Конфигуратора:
Функции работы с различными типами данных
Процедуры и функции повышают читаемость программного кода. Гораздо проще посмотреть, что выполняет данный код, особенно, если вызовы процедур имеют осмысленные названия.
В итоге облегчается сопровождение прикладного решения.
Следует отметить, что начинающие разработчики иногда для названия процедуры или функции пытаются использовать зарезервированное слово Выполнить.
Зарезервированные слова использовать для этих целей нельзя, и, естественно, в этом случае система будет сообщать об ошибке.
Отличие процедуры от функции
Функция, в отличии от процедуры, может иметь возвращаемое значение. В теле функции для того, чтобы вернуть значение, нужно использовать оператор Возврат и указать то значение, которое будет возвращаться.
Процедура, в отличии от функции, не может иметь возвращаемое значение. Она просто вызывается и выполняет какие-то действия.
Если функция не будет иметь ключевого слова Возврат, то она вернет несуществующее значение, т.е. значение типа данных Неопределено. Вместе с тем, ключевое слово Возврат можно использовать и в процедуре, но в этом случае возвращаемое значение не указывается, а само ключевое слово будет означать: прекратить выполнение процедуры.
Процедура или функция начинает описываться со слова Процедура (Функция). Далее следует Имя процедуры (функции). После имени обязательно указываются круглые скобки. Внутри скобок могут находиться описываемые параметры.
Функции работы с различными типами данных
Функции работы с различными типами данных
СоклП
СокрЛП
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Функции работы с различными типами данных
Работа с переменными и оператор присваивания
При решении задачи обработки данных значения могут определяться как явно в тексте алгоритма, так и запрашиваться у пользователя через соответствующие интерфейсные механизмы или вычисляться различными способами. Для случаев, когда значение не может определяться явно в выражении, вместо значения используется термин, определяющий смысл подставляемого значения, например:
"1С:Предприятие " + РедакцияПлатформы
В данном примере есть постоянная величина строковое значение "1С:Предприятие " и термин РедакцияПлатформы - переменная.
Переменная - ячейка в оперативной памяти компьютера, занимаемая на время выполнения программного кода, несущая в себе какую-либо информацию заданного типа.
Работа с переменными и оператор присваивания
Описывать переменные можно двумя способами:
неявный способ (упоминание в левой части оператора присваивания описывает данную переменную, нет предварительного описания переменной со словом Перем, т.е. нет специального раздела описания переменных);
явное описание переменных (Перем КонтрольныеДанные;). Явное описание переменных используется, например, если предполагается последующая передача этой переменной в функцию.
Работа с переменными и оператор присваивания
Для названия переменных используется классическое описание идентификатора. Идентификатор состоит из букв, цифр и знаков подчеркивания. Начинаться идентификатор должен либо с буквы, либо со знака подчеркивания.
При этом название переменной должно отображать смысл данной переменной. Названия переменных из одной буквы (типа А, В, С) являются плохими примерами. Они не отражают суть переменных.
Примеры правильного названия переменных: Счетчик (увеличивающаяся переменная для цикла), Контрагент. Если имя переменной содержит несколько слов, то каждое новое слово, для наглядности, следует начинать с большой буквы.
В названии переменных нельзя использовать зарезервированные слова, такие как Процедура, Функция, Цикл, КонецЦикла и т.д. (эти конструкции выделяются в программном модуле красным цветом).
Зарезервированные слова – это операторы встроенного языка. См. Синтакс-помощник.
Следует отметить, что типы данных к зарезервированным словам не относятся (например, Массив, Булево, Истина, Ложь). Система такие имена переменных воспримет корректно.
Для написания программного кода регистр не имеет никакого значения. Например, слово Процедура можно писать как с большой, так и с маленькой буквы. Большие и маленькие буквы можно чередовать внутри слова.
Работа с переменными и оператор присваивания
В конце каждой команды необходимо ставить “;”.
После последней команды “;” можно не ставить.
Обработки по теме
Задавайте вопросы.
Антонов Виталий Михайлович,
руководитель направления 1С-проектов
ИА ИНТЕРВОЛГА
вертикальная оцифровка бизнеса