Посты с тэгами "Компоновщик настроек"

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

1 отзывFavoriteLoadingВ закладки

Нюансы при работе из СКД на программном уровне.

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

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

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

Далее

Параметр программно в 8.2

Отзывов (5)FavoriteLoadingВ закладки

Всем привет!  Хочется начать цикл статей по 8.2. Не факт что все будет хорошо со свободным временем, но попробуем.

Одно из первых, с чем довелось столкнуться: программная установка параметра. В 8.1 все было достаточно прозрачно.

Всем привет!  Хочется начать цикл статей по 8.2. Не факт что все будет хорошо со свободным временем, но попробуем. Одно из первых, с чем довелось столкнуться: программная установка параметра. В 8.1 все было достаточно прозрачно. В 8.2 все несколько сложнее. Пока приведу просто код, без анализа. Анализ будет позже (когда сам разберусь :)). ИдНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьИдентификаторПоОбъекту (Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных("ИмяПараметра"))); ПараметрСКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдНастройки); ПараметрСКД.Использование = Истина;...

Далее

Параметр – список значений с пустым значением

Отзывов (2)FavoriteLoadingВ закладки

Нашёл такие грабли – когда делаешь параметр списком значений, СКД зачем-то сама в этот список вставляет строку с пустым значением.
Я этот параметр передаю в запрос, и если тип параметра является иерархическим справочником, это пустое значение похоже отбирает любого родителя в иерархии, и как следствие, все значения справочника. Кстати, такой же косяк можно увидеть в отборах, если сделать вид сравнения “в группе из списка” и в список добавить строку с пустым значением.
А так как юзер тупо заполняет этот список подбором, то ему по фигу, что там какие-то пустые значения. Объяснять, что пустых значения в списке надо удалять – бесполезно. Виноват-то программист!
Нашёл, как это лечить, может кому-то пригодится.

Нашёл такие грабли – когда делаешь параметр списком значений, СКД зачем-то сама в этот список вставляет строку с пустым значением. Я этот параметр передаю в запрос, и если тип параметра является иерархическим справочником, это пустое значение похоже отбирает любого родителя в иерархии, и как следствие, все значения справочника. Кстати, такой же косяк можно увидеть в отборах, если сделать вид сравнения “в группе из списка” и в список добавить строку с пустым значением. А так как юзер тупо заполняет этот список подбором, то ему по фигу, что там какие-то пустые значения. Объяснять, что пустых значения в списке надо удалять – бесполезно. Виноват-то программист! Нашёл, как это лечить, может кому-то пригодится....

Далее

Программный вывод отчета

Отзывов (9)FavoriteLoadingВ закладки

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

//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                                        Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
                                                   ДанныеРасшифровки);

//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();

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

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

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

Далее

Как изменить отбор программно

Ваш отзывFavoriteLoadingВ закладки

Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:

КомпоновщикНастроек.Настройки.Отбор.Элементы

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

Приведу пример универсальной функции для изменения отбор компоновки данных:

Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция: КомпоновщикНастроек.Настройки.Отбор.Элементы в отличие от аналогичной коллекции параметров, не имеет метода Найти(). Можно конечно изменять отбор “в лоб”, т.е. по индексу, но это не есть хорошо. Самый оптимальный вариант, обходить все поля отбора в цикле. Приведу пример универсальной функции для изменения отбор компоновки данных: //Ищет отбор в компоновщике настроек по параметрам, заданным через //"СоответствиеПоискаОтбора", и заменяет //на отбор с параметрами, указанными в "СоответствиеНовогоОтбора" Процедура ИзменитьОтбор(ЭлементСтруктуры, СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных")  Тогда Отбор = ЭлементСтруктуры.Настройки.Отбор; Иначе Отбор = ЭлементСтруктуры; КонецЕсли; Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение); Иначе нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"]; КонецЕсли; Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда нВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Иначе нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"]; КонецЕсли; Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда нИспользование = Истина; Иначе нИспользование = СоответствиеНовогоОтбора["Использование"]; КонецЕсли; нЗначение = СоответствиеНовогоОтбора["Значение"]; ТолькоПоЛевомуЗначению = Ложь; Если СоответствиеПоискаОтбора = Неопределено Тогда ТолькоПоЛевомуЗначению = Истина; КонецЕсли; сЛевоеЗначение = СоответствиеПоискаОтбора.Получить("ЛевоеЗначение"); Если сЛевоеЗначение = Неопределено Тогда сЛевоеЗначение = нПоле; КонецЕсли; сВидСравнения = СоответствиеПоискаОтбора.Получить("ВидСравнения"); Если ВидСравнения = Неопределено Тогда сВидСравнения = ВидСравнения; КонецЕсли; сИспользование = СоответствиеПоискаОтбора.Получить("Использование"); Если сИспользование = Неопределено Тогда сИспользование = нИспользование; КонецЕсли; Для каждого ЭлементОтбора Из Отбор.Элементы Цикл Если ТолькоПоЛевомуЗначению Тогда НайденныйОтбор = ЭлементОтбора; Прервать; Иначе Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение) И (ЭлементОтбора.ВидСравнения = сВидСравнения) И (ЭлементОтбора.Использование = сИспользование) Тогда НайденныйОтбор = ЭлементОтбора; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если НайденныйОтбор <> Неопределено Тогда НайденныйОтбор.ЛевоеЗначение = нПоле; НайденныйОтбор.Использование = нИспользование; НайденныйОтбор.ВидСравнения = нВидСравнения; НайденныйОтбор.ПравоеЗначение = нЗначение; КонецЕсли; КонецПроцедуры Пример вызова процедуры: СоответствиеПоискаОтбора = Новый Соответствие; СоответствиеПоискаОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("Наименование")); СоответствиеПоискаОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Содержит); СоответствиеПоискаОтбора.Вставить("Использование",Истина); СоответствиеНовогоОтбора = Новый Соответствие; СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("Наименование")); СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Содержит); СоответствиеНовогоОтбора.Вставить("Использование",Истина); СоответствиеНовогоОтбора.Вставить("Значение","бла-бла-бла"); ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);...

Далее
Страница 1 из 212

Авторизация

Логин:
Пароль:
Регистрация

Архивы

Закладки

  • Your favorites will be here.