Введение
Всем привет! Я решил немного отвлечься от изучения и описания функционала Библиотеки стандартных подсистем и решил затронуть возможности встроенного языка.
Думаю, что немного опоздал с материалом для этой статьи "Практическая шпаргалка по новым возможностям языка запросов 1С" - но все-таки решил разобрать на практических примерах новые возможности языка запросов 1С. Хотя этим возможностям уже примерно пару лет - они появились в версии 1С: Предприятия 8.3.20.
Кроме того, здесь на портале есть пара-тройка публикаций, затрагивающих данный вопрос. Но, тем не менее, материал данной статьи будет полезен всем разработчикам и программистам, а также все желающим, кто хочет разобраться в элементарных запросах платформы. В крайнем случае, статья подойдет даже в качестве некой простейшей "напоминалки".
В данном материале вы найдете практические примеры использования вот этих функций языка запросов 1С:
-
Строка(String) – преобразует в строку.
-
Sin, Cos, Tan, ASin, ACos, ATan - тригонометрические функции (в радианах)
-
Exp - вычисляет результат возведения основания натурального логарифма (числа e) в степень
-
Log - натуральный логарифм числа.
-
Log10 - десятичный логарифм числа.
-
Pow - возведение в степень.
-
Sqrt – квадратный корень.
-
Окр(Round) - округляет число до нужной разрядности
-
Цел(Int) - вычисляет целую часть числа, полностью отсекая дробную часть.
-
ДлинаСтроки(StringLength) – длина строки.
-
СокрЛ(TrimL) – отбрасывает пробелы слева.
-
СокрП(TrimR) – отбрасывает пробелы справа.
-
СокрЛП(TrimAll) – отбрасывает пробелы слева и справа.
-
Лев(Left) – получает первые слева символы строки.
-
Прав(Right) – получает первые справа символы строки.
-
СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра).
-
ВРег(Upper) – преобразует символы строки в верхний регистр.
-
НРег(Lower) – преобразует символы строки в нижний регистр.
-
СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).
-
РазмерХранимыхДанных(StoredDataSize) – размер данных в байтах, которые занимают данные параметра.
Я буду использовать только типовую консоль запросов, Платформу 8.3.20.1674 и демо-конфигурацию "Библиотека стандартных подсистем 3.1" (3.1.7.137), режим совместимости которой я поднял до 8.3.20 (без использования). Надеюсь, что данные примеры будут вам полезны в дальнейшем.
Так же отмечу, что для реализации данных примеров вы можете использовать любую типовую или самописную конфигурацию, если в поднимите в ней режим совместимости до 8.3.20 или выше. Никакого отношения к стандартам разработки этот материал не имеет отношения.
Переходим к практическим примерам использования функций на примере простых запросов. Условно, я разбил эти функции на 11 групп (по одной или несколько функций близких по смыслу).
Практические примеры использования:
1. Функция Строка(String) :
// с ссылками работать не умеет.
// только с примитивными типами
// ошибки не будет только если применить "Выразить"
ВЫБРАТЬ
Строка(ВЫРАЗИТЬ(_ДемоНоменклатура.Ссылка.Наименование КАК СТРОКА(100))),
Строка(_ДемоНоменклатура.Цена) КАК Цена, // преобразовал число в строку
Строка(ИСТИНА) КАК АА, // преобразовал булево в строку
Строка(ДАТАВРЕМЯ(1,1,1)) Как ТекДата // пробразовал дату
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
2. Функции Sin, Cos, Tan, ASin, ACos, ATan :
Тригонометрические функции для типа "число".
// тригонометрические функции работают исключительно с примитивным типом "число"
ВЫБРАТЬ
SIN(1) КАК Син1,
COS(1) КАК Кос2,
TAN(1) КАК Тан3,
ASIN(1) КАК АСин1,
ACOS(0) КАК АКос2,
ATAN(1) КАК АТан3,
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
3. Функции Exp, Log, Log10, Pow и Sqrt :
Математические функции.
// данные математические функции в запросе работают только с типом "число"
ВЫБРАТЬ
Exp(1) КАК Exp1, //2.7
Log(2.718) КАК Log1, //0.9999
Log10(10) КАК Log101, // 1
Pow(3,2) КАК Pow1, // 9
Sqrt(9) КАК Sqrt1, // 3
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
4. Функции Окр(Round) и Цел(Int) :
Округляет по правилу и возвращает целое значение числа.
// округление или целое число
ВЫБРАТЬ
ОКР(13240.345235, -2) КАК Округление, // 13200
ЦЕЛ(13240.345) КАК Цел1, // 13240
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
5. Функция ДлинаСтроки(StringLength) :
Возвращает длину строки.
// здесь определим длину стоки - длина наименования
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
ДЛИНАСТРОКИ(_ДемоНоменклатура.Ссылка.Наименование) КАК ДлинаНаименования,
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
6. Функции СокрЛ(TrimL), СокрП(TrimR) и СокрЛП(TrimAll) :
Убирает пробелы слева, справа или с обеих сторон.
// запрос убирает пробелы слева, справа, с обеих сторон строки
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
СокрЛ(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСлева,
СокрП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСправа,
СокрЛП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелы,
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
7. Функции Прав(Right) и Лев(Left) :
Возвращает "обрезанную" подстроку слева или справа на количество символов.
// обрезаем строку и выводим результат
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
Лев(_ДемоНоменклатура.Ссылка.Наименование,5) КАК Слева5,
Прав(_ДемоНоменклатура.Ссылка.Наименование,10) КАК Справа10,
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
8. Функция СтрНайти(StrFind) :
Возвращает номер позиции символа вхождения.
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
СтрНайти(_ДемоНоменклатура.Ссылка.Наименование, "коллекция") КАК Нашли1, // номер символа вхождения
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
9. Функции ВРег(Upper) и НРег(Lower) :
Переводит в верхний и нижний регистры.
// переводим в заглавные или строчные буквы
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
Врег(_ДемоНоменклатура.Ссылка.Наименование) КАК Заглавными,
Нрег(_ДемоНоменклатура.Ссылка.Наименование) КАК Прописными,
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
10. Функция СтрЗаменить(StrReplace) :
Ищет подстроку вхождения и меняет ее на другую подстроку.
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
СтрЗаменить(_ДемоНоменклатура.Ссылка.Наименование, "журнал","газета") КАК Нашли1, // меняем подстроку "журнал" на "газета"
_ДемоНоменклатура.Цена КАК Цена1
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.Цена > 0
11. Функция РазмерХранимыхДанных(StoredDataSize) :
Данная функция возвращает размер хранимых данных в байтах.
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
РазмерХранимыхДанных(_ДемоНоменклатураПрисоединенныеФайлы.ФайлХранилище) КАК ФайлХранилище, // применяю к реквизиту с типом ХранилищеЗначений, хотя можно применить к любому реквизиту (размер в байтах)
_ДемоНоменклатураПрисоединенныеФайлы.Размер КАК Размер
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатураПрисоединенныеФайлы КАК _ДемоНоменклатураПрисоединенныеФайлы
ПО _ДемоНоменклатура.ФайлКартинки = _ДемоНоменклатураПрисоединенныеФайлы.Ссылка
ГДЕ
_ДемоНоменклатура.Цена > 0
Так, ну вроде, все проверено - все работает. Примеры приведены и все они рабочие. Как видно все эти функции "перетянуты" из языка платформы в язык запросов 1С.
При строгой типизации - ошибок в применении не будет.
Как говориться - смотри и применяй в своих "самописках" ). Перейдем к заключению и сделаем выводам по материалам, представленным в этой статье.
Выводы статьи
В материале представлены практические примеры применения новых функций языка запросов 1с. Эти функции характерны для платформы 1с предприятия версии от 8.3.20. Предполагаю уже, что данная статья не вносит какие-либо "новшества" в разработку, а представлена только в качестве базовой шпаргалки, помогающей вам использовать новые возможности в разработке и программировании (чтобы все не держать в голове).
Отмечу, что отличный и правильный запрос - это уже решение вашей задачи. По опыту - это самое оптимальное решение.
Так же, я хотел затронуть момент применения данных функций в "типовых" конфигурациях. Например, возьмем последний релиз 1С Бухгалтерии 3 (на момент написания статьи - ноябрь 2022 - это 3.0.123.26). Режим совместимости этой версии конфигурации до сих пор 8.3.17., т.е. здесь, спустя пару лет, и в помине нет применения данных функций. Когда они появятся - вопрос открытый?
Еще один момент, в комментариях можете написать, кто что думает, по этому поводу - типовая Бухгалтерия 3.0.123.26 в режиме 8.3.17, а требуют самую новую платформу от последних чисел.
Как обычно, в конце своего материала я прошу обратить внимание на другие мои полезные статьи, посвященные методам разработки в 1С, а также функционалу библиотеки стандартных подсистем.
Наиболее интересные из них и полезные для вас - это:
Базовые принципы работы с регламентными заданиями подсистем БСП
Основные возможности работы с файлами в типовой конфигурации на БСП
Система контроля ведения учета [БСП]
Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов
Шаблоны сообщений пользователю - подсистема БСП
Оценка производительности с помощью БСП
В заключение статьи напишу:
Для тех, кого интересуют мои статьи по программированию и мои разработки (платные и бесплатные), а также развитие темы типового программирования, вы всегда можете связаться со мой через личный профиль, а так же мой телеграмм-канал (здесь указывать нельзя).
Любая поддержка по развитию канала и профиля приветствуется и повлечет за собой более качественные, сложные и интересные материалы для вашей профессиональной деятельности на портале и в других форматах. Также я готов к любому взаимовыгодному сотрудничеству в разных форматах профессионального взаимодействия.
Спасибо за прочтение данной статьи и оценку материала. Всем привет и пока.