Имя: Пароль:
1C
1С v8
Отбор СКД в обработке
0 Oz11
 
05.08.14
12:27
приветствую

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

сложность в том что это УФ и я использую реквизит формы обработки "ОтчетОбъект". у этого реквизита формы есть компоновщик настроек, в который я загружаю подготовленную ранее СКД.

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

как видно по коду - в элемент формы "Отчет" загружаются настройки СКД "СхемаКомпоновкиДанных". но пользователь не видит доступных полей отбора при работе в предприятии. (причем в конфигураторе я их вижу в компоновщике настроек).

подскажите, пожалуйста, в чем может быть проблема?
1 Cube
 
05.08.14
12:32
Вот код из рабочей базы:

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

&НаКлиенте
Процедура КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборОчистка(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Если Вопрос("Вы действительно хотите сбросить отбор на настройки по-умолчанию?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
        ЗагрузитьНастройкиКомпоновкиДанныхПоУмолчанию();
    КонецЕсли;
    
КонецПроцедуры //КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборОчистка()

&НаСервере
Процедура ЗагрузитьНастройкиКомпоновкиДанныхПоУмолчанию()
    
    СхемаКомпоновкиДанных = Справочники.Аренда_МакетыПечатныхФорм.ПолучитьМакет("СхемаКомпоновкиДанных_ДоговорыКонтрагентов");
    КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор())));
    КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    Модифицированность = Истина;
    
КонецПроцедуры //ЗагрузитьНастройкиКомпоновкиДанныхПоУмолчанию()
2 Defender aka LINN
 
05.08.14
13:01
(0) Инициализировать надо адресом временного хранилища со схемой компоновки
3 Oz11
 
05.08.14
13:06
(2) жесть. у кого-то есть обоснование именно такой работы инициализатора компоновщика настроек?
4 Defender aka LINN
 
05.08.14
13:07
(3) У БорисГеоргича, вестимо.
5 VikingKosmo
 
05.08.14
13:30
Иначе не взлетит...
6 rincewind
 
05.08.14
15:17
Вот чуть попроще. В макете запрос, вариант отчета с отборами, выбранными полями и проч.

Компоновщик - реквизит обработки, с типом "КомпоновщикНастроекКомпоновкиДанных"


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

Процедура ЗаполнитьНажатие(Элемент)
    
Квитанции.Очистить();

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

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

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

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

Для каждого ТекСтрока из ТаблицаРезультат Цикл
НоваяСтрока=ТабЧастьДобавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока,ТекСтрока);
НоваяСтрока.Пометка = Истина;
КонецЦикла;
        
КонецПроцедуры
7 rincewind
 
05.08.14
15:18
в (6) Квитанции.Очистить(); можно опустить :)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший