25.10.2022 Дмитрий Гречушкин 8645
Использование системы компоновки данных не то...

Содержание:

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

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

 

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


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


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

   

&НаКлиенте

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


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

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

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

        

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

&НаСервере

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

        

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

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

        

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

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

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

        

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

        

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

        

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


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

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

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

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


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

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

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

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

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

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

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

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


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


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


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


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



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

 

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

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

 

&НаСервере

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

 

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

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

 

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

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

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

     

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

 

      Иначе

 

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

 

      КонецЕсли;

 

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

 

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

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

 

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


&НаСервере

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

 

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

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

 

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


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


&НаКлиенте

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

 

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

 

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

 

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

 

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

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

 

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

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

            Возврат;

      КонецЕсли;

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

      );

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

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

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

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

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

 

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

     

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

 

      КонецЕсли;

 

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


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


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


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


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

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

Наши проекты

ООО "СЖД"
ООО "СЖД"

Отрасль:
Торговля, склад, логистика, транспорт

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Расчет зарплаты
Подбор кадров
Кадровый учет
Анализ кадрового состава...

Внедрение «1С:Бухгалтерия 8 ПРОФ» в компании «Мостехника»
ООО «Мостехника»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

Документооборот (ECM):
- Учет рабочего времени;
Управление персоналом и ка...

Доработка конфигурации Заказчика «1С:Управление строительной организацией»
ЗАО «Стройтрансгаз»

Отрасль:
Проектирование

Внедренное типовое решение:
1С:Управление строительной организацией

Взаиморасчеты с поставщиками;
- Оформление заказов поставщикам;
- Склад ...

Внедрение «1С:Зарплата и управление персоналом 8 КОРП» в компании «ПБК»
ООО «Партнер Бухгалтер Консультант»

Отрасль:
Бухгалтерские услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Интеграция продукта с базой данных оперативного учета Axapta;
- Доработка фу...

ООО «Стейдж Энтертейнмент Россия»
ООО «Стейдж Энтертейнмент Россия»

Отрасль:
Театральная деятельность

Внедренное типовое решение:
Платформа 1С:Предприятие 8

Реализован процесс трансформации данных бухгалтерского учета по РСБУ в дан...

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО Фирма «Бисер»
ООО фирма «Бисер»

Отрасль:
Производство

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Финансы, управленческий учет, мониторинг показателей:
- Налоговый учет...

ООО ХДМ Рус
ООО ХДМ Рус

Отрасль:
Торговля

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

Бухгалтерский учет Банк и касса Расчеты с контрагентами Торговые операции ...

Московский филиал ООО «Авиакомпания «Икар»
Московский филиал ООО «Авиакомпания «Икар»

Отрасль:
Авиаперевозки

Внедренное типовое решение:
1С:Зарплата и управление персоналом

Управление персоналом и кадровый учет (HRM) Кадровый учет Расчет зарплаты Рег...

Автоматизация системы учета продаж газа на базе «1С:ERP Управление предприятием 2.0»
ООО «Эйр Продактс Газ»

Отрасль:
Производство промышленных газов

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

- Расчеты с контрагентами;
- Производственные операции;
- Управление скла...

ООО «ТейблТок»
ООО «ТейблТок»

Отрасль:
Общественное питание и рестораны

Внедренное типовое решение:
1С:Управление торговлей

Оформление заказов поставщикам Оформление заказов покупателей Управление ...

1с-РАРУС МСК
1с-РАРУС МСК

Отрасль:
Разработка компьютерного программного обеспечения

Внедренное типовое решение:
1С:Управление корпоративными финансами

- Финансово-бухгалтерский блок
- Казначейство ...

 ЗАО "Инвестгеосервис" -ДО
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:Документооборот КОРП

- Работа с файлами;
- Делопроизводство;
- Процессы движения документов; ...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение