Обработка результатов запроса произвольными вычисляемыми полями. Обзор некоторых новых функций СКД

07.02.23

Разработка - Запросы

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

 

Данная статья является расширенным и более глубоко проработанным материалом, опубликованном ранее на других порталах и телеграмм канале автора. Материал обобщает практику применения "вычисляемых полей" как внешними функциями, так и встроенными функциями СКД.

 

Введение

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

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

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

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

Отмечу, что данный материал не касается запросов в "чистом виде". Это - именно обработка набора данных в вычисляемых полях - инструментарий компоновщика настроек

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

 

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

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

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

Первым шагом, сделаем простейший запрос (входящие данные) на языке запросов 1с. Запрос пусть выглядит вот так (напомню, что я работаю в БСП, поэтому, справочник "номенклатура" содержит цену):

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

 

 

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

 

Рис.1 Простейший запрос в "Набор данных".

 

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

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

 

 

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

 

 

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

 

Рис.2 Дополнительные поля - через расчет внешних функций.

 

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

 

Рис.3 Итоговые ресурсы в компоновке данных.

 

Далее, стандартно собираем отчет:

 

Рис.4. Сборка полей для итогового отчета.

 

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

 

Рис.5. Отчет - результат. Дополнительные расчетные ресурсы - "Маржа" и "Наценка".

 

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

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

 

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

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

 
 Относительно новые функции СКД от релиза 8.3.20

 

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

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

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

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

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

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

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

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

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

Рассмотрим каждую функцию в примерах использования.

 

1. СокрЛ(TrimL), СокрП(TrimR), СокрЛП(TrimAll)  – отбросить пробелы слева, справа, с обеих сторон

Здесь и далее я возьму простейший набор данных, формируемый вот таким кодом запроса:

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

 

В "вычисляемых полях", я прописываю следующее:

 

Рис.6. Убрать пробелы с обеих сторон.

 

И получаю вот такой результат компоновки (дополнительные колонки "Наименование Лево", "Наименование Право", "Наименование Лево-Право" сформированы вычисляемыми полями:

 

Рис.7. Здесь выводится результат применения СокрЛ, СокрП и СокрЛП.

 

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

Код выполнения в запросе такой:

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

В "вычисляемых полях" это выглядит вот так:

 

Рис.8. "Взять" первые 5 символов слева или справа от "Наименования"

 

Результат выполнения:

 

Рис.9. Обрезка ЛЕВ и ПРАВ по 5 символов - результат выполнения запроса.

 

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

Запрос с СтрНайти:

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

Код использования в вычисляемых полях (без запроса через набор данных):

 

Рис.10. Найти вхождение первого символа.

 

Результат запроса (показывает номер символа вхождения):

 

Рис.11. Вхождение 16 - позиция.

 

4. ВРег(Upper), НРег(Lower) – преобразует в верхний или нижний регистр.

Нижний и верхний регистр:

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

Можно сразу перенести в "Вычисляемые поля" без использования в запросе

 

Рис.12. Верхний и нижний регистр.

 

Результат выполнения через СКД или запрос:

 

Рис.13. Применение ВРЕГ и НРЕГ - Получаем строку наименования - в верхнем и нижним регистрах.

 

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

Заменить вхождение:

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

Вариант через "Вычисляемые поля"

 

Рис.14. Замена - новое "вычисляемое поле" после обработки набора данных (запроса).

 

Результат выполнения через СКД или запрос:

 

Рис.15. Применение СтрЗаменить. - "ЭТО ЗАМЕНИТЬ" - строка замены, меняем везде "Магазин 15".

 

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

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

Перейдем к заключениям и сделаем выводы.

 

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

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

Статья будет полезна всем, кто хочет повысить свой "скилл" понимания СКД, применения новых методов компоновки, их практического использования.

Если вам понравилась статья, вы можете так же обратить внимание на вот эти материалы:

Базовые приемы работы с кластером 1С при помощи БСП

Типовые методы конфигурации "Зарплата и управление персоналом", которые пригодятся каждому ЗУП программисту и не только

Готовые типовые возможности программной работы с конфигурацией Бухгалтерия 3.0. Часть 1

а также:

Оценка производительности с помощью БСП

Система контроля ведения учета [БСП]

Базовые принципы работы с регламентными заданиями подсистем БСП

Основные возможности работы с файлами в типовой конфигурации на БСП

Шаблоны сообщений пользователю - подсистема БСП

Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов

Также вы можете поддержать автора любым возможным способом.

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

На моем телеграмм канале я выкладываю свои обработки и расширения разного профиля и для разных задач. Можете присоединяться.

Всем спасибо за прочтение данной статьи.

скд вычисляемые поля практика программирования новые функции СКД

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159334    872    399    

861

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5158    XilDen    36    

80

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10798    23    John_d    25    

124

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    19313    skovpin_sa    15    

105

СКД Программист Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    6601    KVIKS    15    

82

Запросы HighLoad оптимизация Программист Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    28150    Филин    37    

118

СКД Программист Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    9668    echo77    6    

81
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. butters 10.02.23 13:15 Сейчас в теме
эти же функции в запросах появились, что выглядит более интересным
2. quazare 3800 10.02.23 14:33 Сейчас в теме
И в запросах и в компоновщике. Не путать одно с другим
3. ovasiliev 6 12.02.23 15:19 Сейчас в теме
Я одного не пойму: зачем все пытаются поднять совместимость конфигурации, если новые функции запросов работают на уровне платформы и им на эту совместимость глубоко плевать?
4. quazare 3800 12.02.23 16:34 Сейчас в теме
(3) по факту - уровень совместимости конфигурации - это как бы «расширение языка 1с для работы»…
5. ovasiliev 6 12.02.23 17:02 Сейчас в теме
(4) Общие слова. Уровень совместимости конфигурации на что-то влияет, на что-то нет. Влияет на методы, связанные со структурой базы данных. А в данном случае добавленные функции с ней не связаны. Данные из базы получаются как обычно, а потом идёт постобработка платформой.
Попробуйте использовать их без изменения режима совместимости.
markw; triviumfan; +2 Ответить
6. user1146461 15.02.23 09:38 Сейчас в теме
(5) но вот прикол от 1С, функция СтрНайти работает с режима совместимости 8.3.6, а вот в запросе прекрасно отрабатывает хоть на 8.2
7. ovasiliev 6 15.02.23 11:06 Сейчас в теме
(6) Это, как говорится, другое. Хорошая иллюстрация того, насколько в разной плоскости лежат запросы и объектные методы. И что не надо пользоваться объектными методами во всех случаях, когда можно заменить их на запрос.
8. leosoft 166 04.12.23 13:49 Сейчас в теме
> На моем телеграмм канале я выкладываю свои обработки и расширения разного профиля и для разных задач. Можете присоединяться

Здравствуйте! А ссылочку на телеграмм где взять?
Оставьте свое сообщение