Данная статья является расширенным и более глубоко проработанным материалом, опубликованном ранее на других порталах и телеграмм канале автора. Материал обобщает практику применения "вычисляемых полей" как внешними функциями, так и встроенными функциями СКД.
Введение
Всем привет! В материале данной статьи, я решил вспомнить на примерах - возможности использования вычисляемых полей в системе компоновки данных (СКД). Также предлагаю рассмотреть, какие новые функции, предлагает платформа 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- система компоновки данных предлагает использовать следующие дополнительные функции:
СокрЛ(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
а также:
Оценка производительности с помощью БСП
Система контроля ведения учета [БСП]
Базовые принципы работы с регламентными заданиями подсистем БСП
Основные возможности работы с файлами в типовой конфигурации на БСП
Шаблоны сообщений пользователю - подсистема БСП
Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов
Также вы можете поддержать автора любым возможным способом.
В свою очередь, я постараюсь, чтобы на канале выходили новые и качественные статьи, а главное - чтобы они были понятны и примеры в них - просты к применению.
На моем телеграмм канале я выкладываю свои обработки и расширения разного профиля и для разных задач. Можете присоединяться.
Всем спасибо за прочтение данной статьи.