В данной статье вспомним как обрабатывать результаты запроса в вычисляемых полях СКД, а так же сделаем небольшой обзор на новые функции СКД платформы 8.3.20
Введение
Приветствую всех читателей! Под завершение 2022 года, я решил испытать пробу пера и "передать привет здешней уважаемой публики из мира 1С".
Прошу ознакомиться с моей статьей, как я надеюсь, из целого цикла, которая размещена вне известного 1с-ного ресурса. Но, в статье соблюдены все стандарты и оформление этого ресурса.
В материале данной статьи, я предлагаю вспомнить на примерах - возможности использования вычисляемых полей в системе компоновки данных (СКД). Так же, предлагаю рассмотреть несколько новых функции, предлагаемых платформой 1с, начиная с версии 8.3.20 в языке СКД.
Почему выбран этот ресурс и эта тема? На мой взгляд, это чистый эксперимент, в котором я решил выяснить на сколько интересна платформа 1с "вне желтой песочницы" как ее понимаю окружающие и вообще считают ли 1с-ников программистами?
Отмечу, что данный материал не затрагивает полного классического функционала разработки - это чистый "велосипедный" кодинг. В разработке я буду использовать то, что под рукой - это последнюю на данный момент версию платформы 1С:Предприятие 8.3.22.1709 и так называемую 1С:Библиотеку стандартных подсистем 3.1.7.
Итак, хватит со вступлением, и перехожу к рассмотрению работы с вычисляемыми полями в системе компановке данных на практике.
Вычисляемые поля
Вычисляемые поля - это возможность "дорабоатать" таблицу, полученную в запросе своими собственными колонками. Использование вычисляемых полей, думаю, хорошо известно программистам от уровня "пре-миддл" (я не полезу вглубь) . Я бы так сказал, данный метод хорошо избавляет разного вида "неприятностей", когда нужно соединить "несоединяемое" или вычислить "невычисляемое" или просто вынести расчет в "отдельное место" для того, чтобы всем остальным было понятно. Вспомним, что это такое.
Первым шагом, сделаем простейший запрос (входящие данные) на языке запросов 1с. Запрос пусть выглядит вот так:
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка,
_ДемоНоменклатура.СтранаПроисхождения КАК СтранаПроисхождения,
_ДемоНоменклатура.Код КАК Код,
_ДемоНоменклатура.ЦенаЗакуп КАК ЦенаЗакуп,
_ДемоНоменклатура.ЦенаРозн КАК ЦенаРозн
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.ЭтоГруппа = ЛОЖЬ
И _ДемоНоменклатура.ПометкаУдаления = ЛОЖЬ
Кратное пояснение - я взял справочник "ДемоНоменклатуры" и сделал запрос по определенным колонкам.
и в СКД он помещен вот здесь:
Далее, определим, что мы хотим подсчитать для каждой строки таблицы - результата этого запроса. Например, расчет наценки и маржи номенклатуры.
Действуем следующим образом. Создадим в конфигурации собственный общий серверный модуль, где поместим наши функции расчета. Пусть это будет пара функций - РассчитатьНаценку, РассчитатьМаржу:
Функция РассчитатьМаржу(ЦенаЗакуп, ЦенаРозн) Экспорт
Маржа = 0;
Если НЕ ЦенаРозн = 0 Тогда
Маржа = (ЦенаРозн - ЦенаЗакуп)/ЦенаРозн * 100;
КонецЕсли;
Возврат Маржа;
КонецФункции
Функция РассчитатьНаценку(ЦенаЗакуп, ЦенаРозн) Экспорт
Наценка = 0;
Если НЕ ЦенаЗакуп = 0 Тогда
Наценка = (ЦенаРозн - ЦенаЗакуп)/ЦенаЗакуп * 100;
КонецЕсли;
Возврат Наценка;
КонецФункции
Далее, все просто - используем эти функции в расчете закладки - вычисляемые поля, где подставляем функции из общего модуля, выглядит это вот так:
Итоговые ресурсы выглядят вот так:
В итоге, мы получаем вот такой типовой результат:
Мы рассчитали Маржу и Наценку вне отчета, взяв функции из общей конфигурации. Так, предварительно, мы вспомнили о вычисляемых полях, возможности их применения, теперь, предлагаю посмотреть какие новые встроенные функции можно использовать в этих полях в следующем разделе.
Новые функции системы СКД, с версии 1С:Предприятия 8.3.20
В относительно новой версии платформы 1с от релиза 8.3.20- предлагается использовать следующие функции:
СокрЛ(TrimL) – отбросить пробелы слева.
СокрП(TrimR) – отбросить пробелы справа.
СокрЛП(TrimAll) – отбросить пробелы слева и справа.
Лев(Left) – получить первые слева символы строки.
Прав(Right) – получить первые справа символы строки.
СтрНайти(StrFind) – найти подстроку в строке.
ВРег(Upper) – преобразует в верхний регистр.
НРег(Lower) – преобразует в нижний регистр.
СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку.
НСтр(NStr) – получает строку на языке пользователя
В качестве наглядного использования, я сразу покажу на картинке, что данные функции используются так же в вычисляемых полях. Здесь, я использую функции обработки строки - это ВРег(строка) и НРег(строка). Выглядит это вот так:
Ну и результат запроса, получаем вот такой отчет:
Фактически, я мог использовать эти функции во внешнем модуле, но новая платформа позволила мне не выносить их "за кадр" отчета. Перейдем к заключению и сделаем выводы.
Заключение и выводы
Считаю, что достаточно детально рассмотрел (вспомнил) применение вычисляемых полей в системе компоновке данных, а так же затронул новые функции (возможности), "вставленные" в СКД, начиная с версии Платформы 8.3.20., что вызовет интерес у многих читателей статьи.
Также надеюсь, что мой первый опыт публикации на вашем ресурсе будет положительным и полезным для читателей.
Всем спасибо и, надеюсь, до новых встреч!
Комментарии (4)
Naf2000
15.12.2022 19:34То есть для использования в отчёте, который вообще внешний возможно - необходимо создавать функции общего модуля, даже если через расширения.
slimmaster
16.12.2022 12:09Интересно как 1с преобразовывает эти новые функции в sql запрос. Возможно их использование только добавит тормозов. И ничем не лучше вызовов функций из общих модулей.
Alexrook
Тем временем в некоторых конторах - «не, мы переходить с 8.3.18 пока не будем, новые версии нестабильны». Поэтому новые фичи до многих доедут спустя лет 5, а то и 10 ))))
kuza2000
Вполне нормально. Переход на новую версию - это риски, поэтому должны быть веские причины.
Только вчера смотрел версии питона в статистике загузки pypi для популярных библиотек. Лидер с хорошим отрывом - python 3.7, далее (не по порядку) 3.6, 3.8, 3.9. 3.10 болтается где-то в конце.