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

Содержание:

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

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

 

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


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


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

   

&НаКлиенте

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


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

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

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

        

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

&НаСервере

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

        

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

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

        

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

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

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

        

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

        

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

        

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


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

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

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

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


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

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

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

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

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

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

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

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


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


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


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


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



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

 

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

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

 

&НаСервере

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

 

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

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

 

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

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

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

     

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

 

      Иначе

 

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

 

      КонецЕсли;

 

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

 

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

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

 

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


&НаСервере

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

 

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

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

 

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


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


&НаКлиенте

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

 

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

 

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

 

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

 

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

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

 

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

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

            Возврат;

      КонецЕсли;

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

      );

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

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

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

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

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

 

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

     

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

 

      КонецЕсли;

 

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


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


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


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


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

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

Наши проекты

ООО «ЛИГА-ТРАНС»
ООО «ЛИГА-ТРАНС»

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

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

- Сделано ТЗ по автоматизации учета МСФО: - Разработана карта бюджета доходов и расходов в разрезе управленческого учета - Установлены форм...

ООО «Мир Аксиомы»
ООО «Мир Аксиомы»

Отрасль:
Аудиторские и консалтинговые услуги

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

- Бухгалтерский учет:
Банк и касса
Завершение периода
Нематериальные активы
Расчеты с контрагентами
Регламентированная ...

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

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

Внедренное типовое решение:

- Совместная работа по внедрению разных решений, в том числе «1С:ERP Управление предприятием», «1С:Управление корпоративными финансами»...

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

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

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

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

ООО «Фипар»
ООО «Фипар»

Отрасль:

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

Специалисты «Кодерлайн» внедрили «1С:ERP. Управление предприятием 2» и автоматизировали блоки: продажи, закупки, производство, складская и т...

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

- Взаиморасчеты с поставщиками
- Учет прихода ТМЦ
- Взаиморасчеты с покупателями
- Учет продаж ТМЦ
- Управление складскими ...

Внедрение ПП «1С:Предприятие 8. Аренда и управление недвижимостью на базе "1С:Бухгалтерия 8"» в компании «Бутово Молл»
ООО «Бутово Молл»

Отрасль:
Недвижимость

Внедренное типовое решение:
1С:Аренда и управление недвижимостью на базе «1С:Бухгалтерия 8»

Управление продажами, логистикой и транспортом (SFM, WMS, TMS):
- Оформление заказов покупателей;
- Планирование продаж ...

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

Отрасль:

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

- Подготовка функциональной модели прикладного решения «1С:Документооборот» для сервиса «1С:Облачная карта решений»; - Возможность интеграц...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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