Под конец года, я решил разместить еще одну небольшую статейку у вас на ресурсе, где рассмотрю некоторые относительно новые возможности языка запросов 1с. Надеюсь, что данная статья воспримется положительно.
Введение
Всем привет! В данном материале, я решил, что немного отойду от своего основного профиля - практической разработке и изучения возможностей библиотеке стандартных подсистем (БСП) и затрону работу программиста с языком запросов 1с.
Думаю, что материал данной статьи будет полезен всем разработчикам и программистам, а также все желающим, кто хочет разобраться в элементарных запросах платформы и приобщиться к касте 1с-ников). Так же данный материал подойдет как обычная "напоминалка" для программиста
Статья содержит только практические примеры использования вот этих функций языка запросов 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) – размер данных в байтах, которые занимают данные параметра.
Для реализации данных примеров можно использовать типовой конструктор запросов или типовую консоль (из предприятия), 1С: Платформу 8.3.20 и мою любимую конфигурацию "Библиотека стандартных подсистем 3.1" (3.1.7.137), режим совместимости которой я поднял до 8.3.20 (без использования). Условно, я разбил эти функции на 11 групп (по одной или несколько функций близких по смыслу).
Примеры
1.Строка(String):
// с ссылками работать не умеет.
// только с примитивными типами
// ошибки не будет только если применить "Выразить"
ВЫБРАТЬ
Строка(ВЫРАЗИТЬ(_ДемоНоменклатура.Ссылка.Наименование КАК СТРОКА(100))),
Строка(_ДемоНоменклатура.Цена) КАК Цена, // преобразовал число в строку
Строка(ИСТИНА) КАК АА, // преобразовал булево в строку
Строка(ДАТАВРЕМЯ(1,1,1)) Как ТекДата // пробразовал дату
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
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,
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
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
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
4.Окр(Round) и Цел(Int):
// округление или целое число
ВЫБРАТЬ
ОКР(13240.345235, -2) КАК Округление, // 13200
ЦЕЛ(13240.345) КАК Цел1, // 13240
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
5. ДлинаСтроки(StringLength):
// здесь определим длину стоки - длина наименования
ВЫБРАТЬ
ДЛИНАСТРОКИ(_ДемоНоменклатура.Ссылка.Наименование) КАК ДлинаНаименования
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
6. СокрЛ(TrimL), СокрП(TrimR) и СокрЛП(TrimAll):
// запрос убирает пробелы слева, справа, с обеих сторон строки
ВЫБРАТЬ
СокрЛ(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСлева,
СокрП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСправа,
СокрЛП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелы
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
7. Прав(Right) и Лев(Left):
// обрезаем строку и выводим результат
ВЫБРАТЬ
Лев(_ДемоНоменклатура.Ссылка.Наименование,5) КАК Слева5,
Прав(_ДемоНоменклатура.Ссылка.Наименование,10) КАК Справа10
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
8. СтрНайти(StrFind):
ВЫБРАТЬ
СтрНайти(_ДемоНоменклатура.Ссылка.Наименование, "коллекция") КАК Нашли1 // номер символа вхождения
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
9. ВРег(Upper) и НРег(Lower):
// переводим в заглавные или строчные буквы
ВЫБРАТЬ
Врег(_ДемоНоменклатура.Ссылка.Наименование) КАК Заглавными,
Нрег(_ДемоНоменклатура.Ссылка.Наименование) КАК Прописными
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
10. СтрЗаменить(StrReplace):
ВЫБРАТЬ
СтрЗаменить(_ДемоНоменклатура.Ссылка.Наименование, "журнал","газета") КАК Нашли1 // меняем подстроку "журнал" на "газета"
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
11. РазмерХранимыхДанных(StoredDataSize):
ВЫБРАТЬ
РазмерХранимыхДанных(_ДемоНоменклатураПрисоединенныеФайлы.ФайлХранилище) КАК ФайлХранилище // применяю к реквизиту с типом ХранилищеЗначений, хотя можно применить к любому реквизиту (размер в байтах)
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатураПрисоединенныеФайлы КАК _ДемоНоменклатураПрисоединенныеФайлы
ПО _ДемоНоменклатура.ФайлКартинки = _ДемоНоменклатураПрисоединенныеФайлы.Ссылка
Так, ну вроде, все проверено - все работает. При строгой типизации - ошибок в применении не будет.
Выводы статьи
Спасибо за прочтение. В материале представлены практические примеры применения новых функций языка запросов 1с. Эти функции характерны для платформы 1с предприятия версии от 8.3.20. Надеюсь, что вам понравилась данная статья и вы на один шаг приблизились к миру 1С.
Комментарии (8)
fedorro
15.12.2022 19:33-2SIN COS ATAN Pow Sqrt
Интересно когда доработают: СИН, КОС, АТАН, СТЕП, КОР.
echo10
15.12.2022 21:03Когда уже многопоточность будет по типу анонимных методов с захватом параметров или просто отдельных методов, поддержка функций типа Future/Promise, всякие мьютексы, критические секции, когда уже будет правильный DELAY или SLEEP вызовом метода с параметром вместо горожения регламентных заданий или (о чудо) созданием грелки процессора с циклом WHILE, проверяющим текущее время.
*Где в 1С Бухгалтерии, автосалоне, магазинчике, etc итд нужен SIN/COS?
Pastor_01
16.12.2022 09:141С это далеко не только одна Бухгалтерия. Я тригонометрию использовал при расчете расстояния между точками. Теорема Пифагора там уже не прокатывала.
aixx
16.12.2022 07:38Ну раз добавили арктангенс в 1С, то теперь заживем! Они шли к этому последние 10 лет.
Naf2000
Грустно это всё. По сути эти функции есть в практически любом диалекте SQL. И вот наконец 1с сподвиглась их добавить.
В то время как есть linq to sql запросы в 1с создаются строками.
Pastor_01
Чуть-чуть не так. Этим новшествам уже как год. Хотя, да, согласен, хотелось бы пораньше.