Под конец года, я решил разместить еще одну небольшую статейку у вас на ресурсе, где рассмотрю некоторые относительно новые возможности языка запросов 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С.
