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

Содержание:

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

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

 

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


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


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

   

&НаКлиенте

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


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

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

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

        

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

&НаСервере

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

        

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

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

        

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

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

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

        

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

        

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

        

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


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

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

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

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


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

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

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

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

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

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

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

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


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


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


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


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



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

 

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

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

 

&НаСервере

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

 

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

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

 

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

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

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

     

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

 

      Иначе

 

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

 

      КонецЕсли;

 

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

 

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

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

 

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


&НаСервере

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

 

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

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

 

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


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


&НаКлиенте

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

 

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

 

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

 

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

 

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

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

 

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

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

            Возврат;

      КонецЕсли;

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

      );

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

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

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

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

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

 

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

     

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

 

      КонецЕсли;

 

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


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


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


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


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

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

Наши проекты

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

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

- Бухгалтерский учет
- Расчет зарплаты и кадровый учет
- Налоговый учет ...

Разработка функциональных требований к информсистеме на базе «1С:Управление холдингом 8»
ФГУП «СВЯЗЬ-безопасность»

Отрасль:
Охранные услуги

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

- Зафиксировали процессы по блокам бухгалтерского, налогового учета, казнач...

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

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

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

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

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

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

Бухгалтерский учет;
Расчет зарплаты и кадровый учет;...

ООО «Экслтрейд»
ООО «Экслтрейд»

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

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

Оформление заказов поставщикам Оптовая торговля Торговые операции ...

Автоматизация контроля исполнительской дисциплины на базе ПП «1С:Документооборот 8 ПРОФ»
ООО «ФСК Лидер»

Отрасль:
Строительство и девелопмент

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

- Делопроизводство;
- Учет и хранение документов;
- Учет и контроль исполне...

ООО «Иви.ру»
ООО «Иви.ру»

Отрасль:
Медиаиндустрия

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

Подсистема казначейства
Модуль бюджетного контроля по ДДС ...

Автоматизации бизнес-процессов учета и планирования на базе «1С:ERP Управление предприятием 2.0»
ООО «Буровая сервисная компания «ГРАНД»

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

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

- Создание полноценной управленческой системы взамен существующих
- Внедр...

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

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

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

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

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

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

Различная отраслевая специфика:
- Переработка давальческого сырья
- Уче...

ООО "ТК "Сытый Дом-НН"
ООО "ТК "Сытый Дом-НН"

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

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

Взаиморасчеты с покупателями
Оптовая торговля
Управление складскими за...

ООО "Эскорт-Центр"
ООО "Эскорт-Центр"

Отрасль:
Профессиональные услуги

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

- Сквозной учет затрат по объектам
- Бухгалтерский учет
- Расчет зарплаты...

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

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

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

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