Даты и строки в 1С (10 из 100 дней)
Строки
В коде на встроенном языке строки ограничиваются двойными кавычками:
Для строк определена единственная операция - конкатенация
Правила применения операторов
- Поведение оператора сложения зависит от того, какой тип данных находится слева от знака "+"
- Система постарается привести тип правой части к типу левой:
Для строковых значений, хранящихся в ИБ, - например, реквизитов справочников - требуется определить максимальную длину.
Обработка строк - это одна из наиболее частых задач в программировании
- Вычисление длины строки
- Получение части строки - фрагмента
- Поиск в строке
- Дробление на части и склеивание из частей
- Шаблонизированные сообщения и многое другое
Для работы со строками в 1С есть набор системных функций и объектов.
Например:
- "СтрДлина()" возвращает длину строки числом
- ВРег, НРег и ТРег - приводят строки к верхнему, нижнему и специальному регистру
- Специальный регистр - первая буква каждого слова строки заглавная, остальные - строчные
Операция равенства сравнивает строки буквально. Отличаются большие и маленькие буквы.
Иногда нужно сравнить текст вообще, независимо от того, каким регистром его написал пользователь
Для этого приводят строку к одному из регистром и потом уже сравнивают:
Удаление незначащих символом: СокрЛП (), СокрЛ (), СокрП () - отсекают незначащие символы по краям
Подстрока
Подстроки - это фрагменты строк
Их можно получить при помощи специальных команд: Лев(), Прав(), Сред()
Можно также проверить, начинается ли строка с определенной последовательности и заканчивается ли на неё: СтрНачинаетсяС(); СтрЗаканчиваетсяНа();
Если необходимо проверить строку не с начала или конца, а в принципе узнать, встречается ли в ней подстрока, удобно использовать СтрНайти()
Подстрока часто используется при последовательном разборе с учетом разделителей:
1. Ищем позицию разделителя СтрНайти
2. Берем фрагмент до него Лев
3. Берем фрагмент после него Сред
Получим следующий код:
Выведется: Слово до нашего параметра и После параметра
Если стоит задача заменить все вхождения подстроки в строки, удобно использовать функцию СтрЗаменить ()
Шаблоны строк
Для сборки длинных сложных строк вместо конкантенации (сложение строк) рекомендуется использовать функцию СтрШаблон (). Она создает строку подставляя в нее значения вместо подстрок %1-%10.
Это не так сильно нагружает систему и работает быстрее.
Строка, символы и коды символов
Строка - это последовательность символов. Каждый символ кодируется числом при помощи таблицы кодировки, например ASCII
Для получения кода конкретного символа можно воспользоваться функциями
- КодСимвола() - функция вернет код первого символа строки, переданного в неё
- Символ() - функция, наоборот, возвращает символ, соответствующий переданному числу
Слияние и разделение строк
- СтрРазделить () - делит строку на подстроки по разделителям
- Результат - массив подстрок
Для обратного преобразования массива к строке используется СтрСоединить ()
Тип "Даты"
Определение дат
Дата - точка на оси времени
- Минимальная дата, она же "пустая дата", - 01.01.0001 00:00:00
- Максимальная дата - конец времен по версии 1С - 31.12.3999 23:59:59
Компонента времени - часы, минуты, секунды - может для кратности опускаться. Тогда считается, что время - 00:00:00
Дату можно задать с помощью литерала в одинарных кавычках
Любые нецифровые символы системой игнорируются, поэтому допускается использовать разделить для читабельности
Второй и наиболее часто используемый способ задания дат - функция Дата
Порядок её аргументов такой же, как для литерала дат:
Пустая дата в 1С - 1 января 1 года, или:
Однако более читабельно для проверки на "пустоту" использовать значение метод ЗначениеЗаполнено
Даты могут хранится в трех вариантах:
- Дата и время
- Дата
- Время
Но это имеет значение только для хранения в ИБ
Функция для дат:
- ТекущаяДата() - возвращает текущую дату и время
- Год(), Месяц(), День(), Час(), Минута(), Секунда() - выделяют часть даты в виде числа:
Посмотрим на практике работу с датами:
1. Пропишем разные способы вывода дат в обработчике
2. Запустим платформу и выполнение алгоритма, и увидим, что выводится
Для определения границ периодов служат пары функций:
- НачалоГода() и КонецГода()
- НачалоМесяца() и КонецМесяца()
- НачалоДня() и КонецДня() и т.д.
Конечная дата возвращается с точностью до секунд - 23:59:59
Для определения количества дней в текущем месяце можно привести дату к концу месяца и получить из неё день
Также по дате можно определить день недели или номер дня в году:
Посмотрим на практике:
1. Создадим обработчик
2. Пропишем следующий код
3. Запустим алгоритм и увидим, как оно работает
Операции над датами
- Для дат определены операции сложения и вычитания
- Разность между двумя датами - время между ними в секундах:
- Чтобы сдвинуть дату, нужно прибавить или отнять нужное число секунд:
Поскольку календарь неравномерный: 30 или 31 день в месяце - добавлением секунд сложно попасть в дату в другом месяце.
Существует специальная функция для сдвига с учетом календаря:
На этом все! Встретимся уже завтра с разбором темы "Условий"