В данной статье вспомним как обрабатывать результаты запроса в вычисляемых полях СКД, а так же сделаем небольшой обзор на новые функции СКД платформы 8.3.20

Введение

Приветствую всех читателей! Под завершение 2022 года, я решил испытать пробу пера и "передать привет здешней уважаемой публики из мира 1С".

Прошу ознакомиться с моей статьей, как я надеюсь, из целого цикла, которая размещена вне известного 1с-ного ресурса. Но, в статье соблюдены все стандарты и оформление этого ресурса.

В материале данной статьи, я предлагаю вспомнить на примерах - возможности использования вычисляемых полей в системе компоновки данных (СКД). Так же, предлагаю рассмотреть несколько новых функции, предлагаемых платформой 1с, начиная с версии 8.3.20 в языке СКД.

Почему выбран этот ресурс и эта тема? На мой взгляд, это чистый эксперимент, в котором я решил выяснить на сколько интересна платформа 1с "вне желтой песочницы" как ее понимаю окружающие и вообще считают ли 1с-ников программистами?

Отмечу, что данный материал не затрагивает полного классического функционала разработки - это чистый "велосипедный" кодинг. В разработке я буду использовать то, что под рукой - это последнюю на данный момент версию платформы 1С:Предприятие 8.3.22.1709 и так называемую 1С:Библиотеку стандартных подсистем 3.1.7.

Итак, хватит со вступлением, и перехожу к рассмотрению работы с вычисляемыми полями в системе компановке данных на практике.

Вычисляемые поля

Вычисляемые поля - это возможность "дорабоатать" таблицу, полученную в запросе своими собственными колонками. Использование вычисляемых полей, думаю, хорошо известно программистам от уровня "пре-миддл" (я не полезу вглубь) . Я бы так сказал, данный метод хорошо избавляет разного вида "неприятностей", когда нужно соединить "несоединяемое" или вычислить "невычисляемое" или просто вынести расчет в "отдельное место" для того, чтобы всем остальным было понятно. Вспомним, что это такое.

Первым шагом, сделаем простейший запрос (входящие данные) на языке запросов 1с. Запрос пусть выглядит вот так:

ВЫБРАТЬ
	_ДемоНоменклатура.Ссылка КАК Ссылка,
	_ДемоНоменклатура.СтранаПроисхождения КАК СтранаПроисхождения,
	_ДемоНоменклатура.Код КАК Код,
	_ДемоНоменклатура.ЦенаЗакуп КАК ЦенаЗакуп,
	_ДемоНоменклатура.ЦенаРозн КАК ЦенаРозн
ИЗ
	Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
	_ДемоНоменклатура.ЭтоГруппа = ЛОЖЬ
	И _ДемоНоменклатура.ПометкаУдаления = ЛОЖЬ

Кратное пояснение - я взял справочник "ДемоНоменклатуры" и сделал запрос по определенным колонкам.

и в СКД он помещен вот здесь:

Рис.1 Набор данных СКД с источником  "ЗАПРОС"
Рис.1 Набор данных СКД с источником "ЗАПРОС"

Далее, определим, что мы хотим подсчитать для каждой строки таблицы - результата этого запроса. Например, расчет наценки и маржи номенклатуры.

Действуем следующим образом. Создадим в конфигурации собственный общий серверный модуль, где поместим наши функции расчета. Пусть это будет пара функций - РассчитатьНаценку, РассчитатьМаржу:

Функция РассчитатьМаржу(ЦенаЗакуп, ЦенаРозн) Экспорт
	
	Маржа = 0;
	
	Если НЕ ЦенаРозн = 0 Тогда
		Маржа = (ЦенаРозн - ЦенаЗакуп)/ЦенаРозн * 100;
	КонецЕсли;	
	
	Возврат Маржа;
	
КонецФункции
 
 
Функция РассчитатьНаценку(ЦенаЗакуп, ЦенаРозн) Экспорт
	
	Наценка = 0;
	
	Если НЕ ЦенаЗакуп = 0 Тогда
		Наценка = (ЦенаРозн - ЦенаЗакуп)/ЦенаЗакуп * 100;
	КонецЕсли;
	
	Возврат Наценка;
	
КонецФункции

Далее, все просто - используем эти функции в расчете закладки - вычисляемые поля, где подставляем функции из общего модуля, выглядит это вот так:

Рис.2 Раздел "Вычисляемые поля" в СКД
Рис.2 Раздел "Вычисляемые поля" в СКД

Итоговые ресурсы выглядят вот так:

Рис.3 Раздел "Ресурсы" в СКД
Рис.3 Раздел "Ресурсы" в СКД

В итоге, мы получаем вот такой типовой результат:

Рис.3 Отчет в СКД, где колонки "Маржа" и "Наценка" добавлены через расчет вычисляемых полей
Рис.3 Отчет в СКД, где колонки "Маржа" и "Наценка" добавлены через расчет вычисляемых полей

Мы рассчитали Маржу и Наценку вне отчета, взяв функции из общей конфигурации. Так, предварительно, мы вспомнили о вычисляемых полях, возможности их применения, теперь, предлагаю посмотреть какие новые встроенные функции можно использовать в этих полях в следующем разделе.

Новые функции системы СКД, с версии 1С:Предприятия 8.3.20

В относительно новой версии платформы 1с от релиза 8.3.20- предлагается использовать следующие функции:

СокрЛ(TrimL) – отбросить пробелы слева.

СокрП(TrimR) – отбросить пробелы справа.

СокрЛП(TrimAll) – отбросить пробелы слева и справа.

Лев(Left) – получить первые слева символы строки.

Прав(Right) – получить первые справа символы строки.

СтрНайти(StrFind) – найти подстроку в строке.

ВРег(Upper) – преобразует в верхний регистр.

НРег(Lower) – преобразует в нижний регистр.

СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку.

НСтр(NStr) – получает строку на языке пользователя

В качестве наглядного использования, я сразу покажу на картинке, что данные функции используются так же в вычисляемых полях. Здесь, я использую функции обработки строки - это ВРег(строка) и НРег(строка). Выглядит это вот так:

Рис.4 Новые функции работы со строками в вычисляемых полях
Рис.4 Новые функции работы со строками в вычисляемых полях

Ну и результат запроса, получаем вот такой отчет:

Рис.5 Две новые колонки, одна со строчными буквами, другая с заглавными
Рис.5 Две новые колонки, одна со строчными буквами, другая с заглавными

Фактически, я мог использовать эти функции во внешнем модуле, но новая платформа позволила мне не выносить их "за кадр" отчета. Перейдем к заключению и сделаем выводы.

Заключение и выводы

Считаю, что достаточно детально рассмотрел (вспомнил) применение вычисляемых полей в системе компоновке данных, а так же затронул новые функции (возможности), "вставленные" в СКД, начиная с версии Платформы 8.3.20., что вызовет интерес у многих читателей статьи.

Также надеюсь, что мой первый опыт публикации на вашем ресурсе будет положительным и полезным для читателей.

Всем спасибо и, надеюсь, до новых встреч!

Комментарии (4)


  1. Alexrook
    14.12.2022 21:39
    +3

    несколько новых функции, предлагаемых платформой 1с, начиная с версии 8.3.20 в языке СКД

    Тем временем в некоторых конторах - «не, мы переходить с 8.3.18 пока не будем, новые версии нестабильны». Поэтому новые фичи до многих доедут спустя лет 5, а то и 10 ))))


    1. kuza2000
      15.12.2022 08:24

      Вполне нормально. Переход на новую версию - это риски, поэтому должны быть веские причины.

      Только вчера смотрел версии питона в статистике загузки pypi для популярных библиотек. Лидер с хорошим отрывом - python 3.7, далее (не по порядку) 3.6, 3.8, 3.9. 3.10 болтается где-то в конце.


  1. Naf2000
    15.12.2022 19:34

    То есть для использования в отчёте, который вообще внешний возможно - необходимо создавать функции общего модуля, даже если через расширения.


  1. slimmaster
    16.12.2022 12:09

    Интересно как 1с преобразовывает эти новые функции в sql запрос. Возможно их использование только добавит тормозов. И ничем не лучше вызовов функций из общих модулей.