Использование системы компоновки данных не то...
-

Использование системы компоновки данных не только для построения отчетов

0
8565
25.10.2022 Дмитрий Гречушкин

Содержание:

1.       Получение данных динамического списка

2.       Хранение, изменение и получение настройки СКД для внешних объектов метаданных

 

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


1.             Получение данных динамического списка


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

   

&НаКлиенте

Процедура ОбработкаСКД()


         Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();

         Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

         РезультатСКД = РезультатСКДДинамическогоСписка(Схема , Настройки);

        

КонецПроцедуры

&НаСервере

Функция РезультатСКДДинамическогоСписка(Схема, Настройки)

        

         КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();

         МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

        

         ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

         ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

         ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

        

         Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);

        

         Возврат Результат;

        

КонецФункции


Опишем наши действия:

·         В процедуре «Обработка СКД»:

-   Получаем схему компоновки данных, соответствующую данным, которые отображаются в динамическом списке;

-   Получаем настройки компоновки данных, соответствующие данным в динамическом списке. При этом учитывается видимость колонок и установленное значение поиска. Вторым шагом является вызов функции «РезультатСКДДинамическогоСписка» с передачей полученной настройки.


·         В функции «РезультатСКДДинамическогоСписка»:

-   Первым шагом мы создаем объект макета компоновки данных;

-   Вторым шагом производим инициализацию созданного объекта макета компоновки данных переданной настройкой компоновки списка;

-   Третьим шагом создаем объект, выполняющий компоновку данных;

-   Четвертым шагом инициализируем объект, выполняющий компоновку данных объектом макета компоновки данных;

-   Пятым шагом является создание объекта для вывода результата компоновки в таблицу или дерево значений;

-   Шестым шагом выводим весь результат в объект для вывода результата компоновки. При этом автоматически исполняется метод НачатьВывод, перебираются все элементы процессора компоновки и выводятся в результат. После чего исполняется метод ЗакончитьВывод, результат которого возвращается данным методом компоновки.

-   Седьмым шагом передаем полученный результат из функции в точку вызова.   


2.             Хранение, изменение и получение настройки СКД для внешних объектов метаданных


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


Для решения этой задачи мы будем использовать такой объект метаданных как «Константа».


На первом шаге создадим константу «НастройкиОтбораСКД». Вторым шагом создадим общую форму редактирования констант «НастройкиОтборовСКД» и добавим на форму реквизит «КомпоновщикСхемы» как показано на рисунке 1.



Рисунок 1. Общая форма редактирования констант

 

Для корректной работы компоновщика необходимо:

·         Произвести его начальную инициализацию;

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 

      СхемаКомпоновки = ОбъектМетаданных.ПолучитьМакет("СхемаИнциализации");

      АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, ЭтаФорма.УникальныйИдентификатор);

 

      КомпоновщикСхемы.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));

      Настройки = Константы.НастройкиОтбораСКД.Получить().Получить();

      Если Настройки <> Неопределено Тогда

     

            Компоновщик.ЗагрузитьНастройки(Настройки);

 

      Иначе

 

           Компоновщик.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);

 

      КонецЕсли;

 

КонецПроцедуры

 

В процедуре «ПриСозданииНаСервере» в строке: СхемаКомпоновки = ОбъектМетаданных.ПолучитьМакет("СхемаИнциализации");

Необходимо заменить «ОбъектМетаданных» на конкретный объект метаданных, для которого определена система компоновки данных «СхемаИнциализации». Например «РегистрСведений. Штрихкоды».

 

·         Загрузить предыдущие настройки СКД с учетом их наличия.


&НаСервере

Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

 

      НастройкиХранилище = Новый ХранилищеЗначения(КомпоновщикСхемы.ПолучитьНастройки());

      Константы.НастройкиОтбораСКД.Установить(НастройкиХранилище);

 

КонецПроцедуры


И в заключении как использовать внешний механизм настройки СДК. Например, в регистре сведений «Штрихкоды» перед очередной записью нам необходимо производить некоторые проверки с использованием сложной схемы получения данных, которую реализовать средствами запроса 1С корректно не получится. Для этого в процедуре «ПередЗаписью» модуля формы записи регистра сведений в 1С выполним следующие действия:


&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

 

      ПередЗаписьюНаСервере(Отказ, Запись);

 

КонецПроцедуры

 

Процедура ПередЗаписьюНаСервере (Отказ, Знач Запись)

 

      // Таблица результатов проверки

      РезультатПроверки = Новый ТаблицаЗначений;

 

      Настройки = Константы.НастройкиОтбораСКД.Получить().Получить();

      Если Настройки = Неопределено Тогда

            Возврат;

      КонецЕсли;

 

      // Устанавливаем отбор по текущему элементу

      ЭлементыОтбора = Настройки.Отбор.Элементы;

      ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

      ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

      ЭлементОтбора.Использование = Истина;

      ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Штрихкод");

      ЭлементОтбора.ПравоЗначение = Запись.Штрихкод;

 

      // Программно делаем вывод результата в таблицу значений

      КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

      СхемаКомпоновкиДанных = РегистрыСведений. Штрихкоды.ПолучитьМакет("СхемаИнциализации");

      МакетКомпоновки = КомпоновщикМакета.Выполнить(

            СхемаКомпоновкиДанных,

            Настройки,,,

            Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")

      );

      ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

      ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

      ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

      ПроцессорВывода.УстановитьОбъект(РезультатПроверки);

      ПроцессорВывода.Вывести(ПроцессорКомпоновки);

 

      Если РезультатПроверки.Количеств() = 0 Тогда

     

            Отказ = Истина;

 

      КонецЕсли;

 

КонецПроцедуры


Кратко опишем что получилось – в форме записи регистра сведений 1С «Штрихкоды» мы вызываем процедуру обработки записи «ПередЗаписьюНаСервере». В этой процедуре первым шагом инициализирует настройки СКД для схемы «СхемаИнициализации», затем получаем результат выполнения СКД и обрабатываем результат выполнения СКД.


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


Спасибо за внимание уважаемые коллеги.


Специалист компании «Кодерлайн»

Дмитрий Гречушкин

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.