Каталог решений - Полезности применения СКД

Описание

 

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

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

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

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

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

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

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

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

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

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

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

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


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


 

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

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

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

 

МОДУЛЬ ФОРМЫ

&НаСервере

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

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

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

 

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

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

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

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

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

 

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

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

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

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


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


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

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

МОДУЛЬ ФОРМЫ

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

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

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

 

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

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

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


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

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

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

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

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

 

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

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

has been added to your cart:
Оформление заказа