Полезности применения СКД

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

Начну из самой задачи.
Необходима была обработка по выгрузке документов и справочников, с определенными условиями, которые пользователь по необходимости сможет задавать на форме. Также результатируящая таблица, должна иметь возможность определять флагами, что будет выгружено в файл экспорта. ( в моем случае это текстовый документ с строгой структурой).

Все как бы просто и можно пойти старым дедовским методом через славно известный и нашумевший “УниверсаныйОтчет”, но это нам неподходит, так как предоставленная конфигурация на управляемых формах, а именно УТ11. Вспомнив некие уроки и статьи и пошастав дополнительно по форумах приступил к решению данной задачи. Было взято за основу сделать с помощью СКД.

Для этого создаем реквизит “КомпоновщикНастроекПродаж” тип которого “КомпоновщикНастроекКомпоновкиДанных”.

Помещаем на форму:

“КомпоновщикНастроекПродажНастройкиПараметрыДанных” путь к данным “КомпоновщикНастроекПродаж.Настройки.ПараметрыДанных” (пользователь сможет указать период документов).

“КомпоновщикНастроекПродажНастройкиОтбор” путь к данным “КомпоновщикНастроекПродаж.Настройки.Отбор” (пользователь сможет указать поля отбора).

Создаем макет с типом СКД имя которого “Продажи”. Через конструктор запросов описываем запрос к документу “РеализацияТоваров”.

Мягкое наложение фильтра на период документов:

{ГДЕ
(РеализацияТоваровУслуг.Дата >= &ДатаНач),
(РеализацияТоваровУслуг.Дата <= &ДатаКон)}

Добавляем в запрос поле Выгружать со значением “ИСТИНА” так как на выходе пользователю должны быть предложены все объекты на выгрузку. Можно это поле и в запросе не добавлять, а воспользоватся закладкой (Вычисляемые поля) и там указать Путь к данным “Выгружать” с выражением “ИСТИНА”, оба решения будут правильными.

На закладке СКД (Параметры) для удобства периода, поля ДатаНач и ДатаКон делаем не доступными пользователю и добавляем новое поле Период с типом “СтандартныйПериод” и делаем его доступным для выбора пользователю в параметрах данных. Выражениями поля ДатаНач и ДатаКон прописываем (&Период.ДатаНачала) и (&Период.ДатаОкончания) для каждого соответственно свое.


ВАЖНО! Не называйте поля в условие на период документов “ДатаНачала” и “ДатаОкончания” это зарезервированые поля самой системой СКД и она это понимает совершенно по другому, для чистоты эксперимента можете перепроверить.


 

Создаем настройку выводу пользователю, это будет вывод в линейном виде. И здесь очень важен порядок вывода полей. Необходимо выбрать лишь те поля которые информативно пользователю нужны.  (почему важно опишу ниже).

Работа над макетом СКД готова.

Далее необходимо програмно подключить настройки компоновки к нашей схеме “Продажи”.

 

МОДУЛЬ ФОРМЫ

&НаСервере

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

УстановитьНачальныеНастройкиВыгрузки();

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

 

&НаСервере
Процедура УстановитьНачальныеНастройкиВыгрузки()

ЭтотОбъект = РеквизитФормыВЗначение(“Объект”);

СхемаКомпоновкиПродажи = ЭтотОбъект.ПолучитьСхемуПродажи();

//ПРОДАЖИ
АдресСхемыПродаж = ПоместитьВоВременноеХранилище(СхемаКомпоновкиПродажи, УникальныйИдентификатор);
КомпоновщикНастроекПродаж.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыПродаж));
КомпоновщикНастроекПродаж.ЗагрузитьНастройки(СхемаКомпоновкиПродажи.НастройкиПоУмолчанию);

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

МОДУЛЬ ОБЪЕКТА

Функция ПолучитьСхемуПродажи() Экспорт
Возврат ПолучитьМакет(“Продажи”);
КонецФункции

При открытии обработки в предприятии настройки будут привязаны к нашей схеме “Продажи” и подтверждением этого станет доступность параметров данных периода и поля в Отборе.

Далее, добавляем реквизит “РезультатПродажи” с типом данных “ТаблицаЗначений”. А теперь очень важно в точной последовательности добавлять колонки ТЗ и с одинаковыми именами, а также с типизацией поля, что указана в схеме СКД в выбранных полях.


ВАЖНО. При не соблюдении этого правила, данные будут некорректно отображены или не выведены вовсе. Это правило только необходимо, если результат СКД необходимо поместить в ТЗ которую должен видеть пользователь. К табличному документу данное правило не имеет смысла.


Помещаем таблицу на форму, здесь порядок отображения колонок можно видоизменять.

Добавляем команду “ОтобразитьПродажи” и обработку данного действия.

МОДУЛЬ ФОРМЫ

&НаКлиенте
Процедура ОтобразитьПродажи(Команда)

ПрочитатьДанныеПоПродажам();

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

 

&НаСервере
Процедура ПрочитатьДанныеПоПродажам()

ЭтотОбъект = РеквизитФормыВЗначение(“Объект”);
СхемаКомпоновкиПродажи = ЭтотОбъект.ПолучитьСхемуПродажи();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиПродажи,КомпоновщикНастроекПродаж.ПолучитьНастройки(),,,Тип(“ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений”));
//важный параметр, так как будет воспроизведена ошибка. По умолчанию параметр для табличного документа.
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет);

ТЗРезультат = РеквизитФормыВЗначение(“РезультатПродажи”,Тип(“ТаблицаЗначений”));
ТЗРезультат.Очистить();

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ПроцессорВывода.УстановитьОбъект(ТЗРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки,Истина);

ЗначениеВДанныеФормы(ТЗРезультат,РезультатПродажи);

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

Уже не буду писать саму выгрузку в файл так как это не имеет отношения к СКД.

Что я хотел сказать этой статьей. Только то, что с помощью мелких хитростей СКД можно манипулировать данными и без огромного кода и домороченных реквизитов по отборам и т.д.

Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
also
12 лет назад

Спасибо за статью. Получилась очень красивая и функциональная обработка. А главное без километровых простыней кода.

sergserg
sergserg
12 лет назад

Супер! Почему я раньше не догадался использовать СКД для таких целей. Спасибо.