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

Содержание:

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

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

 

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


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


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

   

&НаКлиенте

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


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

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

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

        

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

&НаСервере

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

        

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

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

        

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

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

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

        

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

        

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

        

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


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

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

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

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


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

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

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

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

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

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

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

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


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


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


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


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



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

 

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

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

 

&НаСервере

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

 

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

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

 

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

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

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

     

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

 

      Иначе

 

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

 

      КонецЕсли;

 

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

 

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

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

 

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


&НаСервере

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

 

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

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

 

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


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


&НаКлиенте

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

 

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

 

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

 

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

 

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

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

 

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

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

            Возврат;

      КонецЕсли;

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

      );

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

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

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

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

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

 

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

     

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

 

      КонецЕсли;

 

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


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


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


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


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

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

Наши проекты

ООО «ДАФ Тракс Рус» (DAF Trucks Rus)
ООО «ДАФ Тракс Рус» (DAF Trucks Rus)

Отрасль:
Машиностроение

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

- Осуществлена разработка матрицы прав и ролей для финансового подразделени...

Автоматизация складских операций на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

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

Реализовали разработку уникального модуля «Интернет-магазины» на базе прог...

ООО «ПКП КАБЭЛЕКТРОСНАБ»
ООО «ПКП КАБЭЛЕКТРОСНАБ»

Отрасль:
Производство кабельной продукции

Внедренное типовое решение:
1С:Управление небольшой фирмой 1.6

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

Фирма 1С
Фирма 1С

Отрасль:

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

- Подготовка функциональной модели прикладного решения «1С:Документооборот...

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

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

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

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

АО «Аэроклуб»
АО «Аэроклуб»

Отрасль:
Услуги в области делового туризма

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

Проведение серии интервью с руководством и ключевыми специалистами Разраб...

Внедрение блоков в 1С:Комплексная автоматизация 8
ООО «Больцен Рус»

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

Внедренное типовое решение:
1С:Комплексная автоматизация

- Оперативный учет...

ООО "ОМЗ"
ООО "ОМЗ"

Отрасль:
Металлургическая промышленность, металлообработка

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

Автоматизация бизнес-процессов...

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

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

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

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

Автоматизации учета затрат и расчета себестоимости с использованием конфигурации «Koderline: Управление проектами строительства скважин»
ООО «Буровая сервисная компания «ГРАНД»

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

Внедренное типовое решение:
«Koderline: Управление проектами строительства скважин»

Учет и планирование:
- собственную разработку компании «Кодерлайн» – конф...

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

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

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

Кадровый учет;
Расчет зарплаты;...

ХИТЕК-ГРУП
ХИТЕК-ГРУП

Отрасль:
Продажа парикмахерского инструмента и аксессуаров

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

Документооборот (ECM)
• Делопроизводство
Управление бизнес-процессами и И...

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

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

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

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