Сравнение значений с использованием СКД

27.04.26

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Сравнение значений с использованием СКД
.epf 7,42Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

 

 

Для решения лучше всего подойдёт тип ВидСравненияКомпоновкиДанных. Элемент этого типа может отображаться на форме и предопределённых видов сравнения достаточно много. Но как написать функцию, которая на вход получит 2 значения, способ сравнения и вернёт результат? Поиск и AI предлагают решения незамысловатые - сесть и написать длинную простыню Если ТипЗнч() = Тип() Тогда... Это долго и есть риск не учесть какой-нибудь вариант. Нужно использовать СКД и уже написанные там способы сравнения.

В результате получилась такая функция:

&НаСервереБезКонтекста
Функция Сравнить(ЛевоеЗначение, ВидСравнения, ПравоеЗначение)
    
    СКД = Новый СхемаКомпоновкиДанных;
    
    ИсточникДанных = СКД.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    
    НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "НаборДанных1";
    НаборДанных.ИмяОбъекта = "ТаблицаДанных";
    НаборДанных.ИсточникДанных = "ИсточникДанных1";
    
    ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанных.Поле = "ЛевоеЗначение";
    ПолеНабораДанных.ПутьКДанным = "ЛевоеЗначение";
    
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД);
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
    
    Группировка = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Группировка.Использование = Истина;
    ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеГруппировки.Использование = Истина;
    ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("ЛевоеЗначение");
    АвтоВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоВыбранноеПоле.Использование = Истина;
    
    ЭлементОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЛевоеЗначение");
    ЭлементОтбора.ВидСравнения = ВидСравнения;
    ЭлементОтбора.ПравоеЗначение = ПравоеЗначение;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    Типы = Новый Массив;
    Типы.Добавить(ТипЗнч(ЛевоеЗначение));
    
    ЛеваяТаблица = Новый ТаблицаЗначений;
    ЛеваяТаблица.Колонки.Добавить("ЛевоеЗначение", Новый ОписаниеТипов(Типы));
    СтрокаЛевойТаблицы = ЛеваяТаблица.Добавить();
    СтрокаЛевойТаблицы.ЛевоеЗначение = ЛевоеЗначение;
    
    ВнешниеНаборы = Новый Структура("ТаблицаДанных", ЛеваяТаблица);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
    
    Результат = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    Возврат Результат.Количество() > 0;
    
КонецФункции

Этот же код можно использовать как пример полностью программной работы с СКД без макетов.

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

Обработка с примером использования прилагается.

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.26.110

Вступайте в нашу телеграмм-группу Инфостарт

сравнение значений СКД ВидСравненияКомпоновкиДанных

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    256776    1418    421    

1161

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    19076    ovetgana    112    

112

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

27.02.2025    16579    ovetgana    50    

93

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    57707    dimanich70    85    

174

СКД WEB-интеграция Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

2 стартмани

11.12.2023    16565    30    John_d    30    

129

Инструментарий разработчика СКД Программист 1С:Предприятие 8 Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    11679    20    kalyaka    5    

98

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    25447    YA_418728146    8    

175
Для отправки сообщения требуется регистрация/авторизация