Имя: Пароль:
1C
 
Разработка отбора на СКД в обработке
0 falselight
 
20.03.18
09:11
Подскажите пожалуйста если кто с этим сталкивался.
Мне нужно разработать на обработке отбор с использованием скд.
Я создаю макет СКД с текстом запроса.
Потом следует создать реквизит с типом КомпоновщикНастроекКомпоновкиДанных. Но потом я не могу его перенести на форму. А в подобном описании этого пишут что нужно привязать его к таблице значений.
Мне нужно что бы на форме выводились данные в скд с возможностью
делать отборы на поля.
Как тут будет Основная форма и Форма настроек?
1 Lexey_
 
20.03.18
09:14
(0) "Но потом я не могу его перенести на форму", можешь, но только по частям
2 falselight
 
20.03.18
10:18
Суть задачи такая. На форму вывести результат запроса в таблицу значений.
Для редактирования некоторых полей и обновления их в
объектах 1с.
Мне нужно это сделать в обработке через СКД.
Подскажите какие будут действия в теории?
1. Есть макет с запросом СКД.
3 Mankubus
 
20.03.18
10:21
2. Позвать программиста
3. profit
http://catalog.mista.ru/public/400647/
4 falselight
 
20.03.18
10:23
(3) Мне на управляемой форме нужно.
5 chelentano
 
20.03.18
10:33
Добавляешь реквизит формы с типом "КомпоновщикНастроекКомпоновкиДанных"

На формы тащишь из компоновщика "ПользовательскиеНастройки" или "Настройки.Отбор"

При создании на сервере пишешь:

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

Есть макет СКД, но туда я просто добавил запрос и все.
Может нужно вывод делать так же?

Такую процедуру внес в модуле, -

//
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
       ОО     = РеквизитФормыВЗначение("Объект"); //Для внешних обработок реквизиты получаем так
       СКД    = ОО.ПолучитьМакет("ВыводКорректировка");
       URLСКД = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор());
       ОО.ОтборКонтрагентов.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД));
       НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;
       ОО.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
       ЗначениеВРеквизитФормы(ОО, "Объект"); //Для внешних обработок реквизиты сохраняем так
КонецПроцедуры
//
7 falselight
 
20.03.18
10:40
Буду править сейчас, вижу недочеты.
8 falselight
 
20.03.18
10:45
Делаю отбор выбор поля, там пусто.
Не пойму что не так.
Процедуру привел к виду, -

//
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СхемаКомпоновки           = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ВыводКорректировка");
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СхемаКомпоновки, Новый УникальныйИдентификатор);
    ИсточникНастроек          = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);      
КонецПроцедуры
//
9 falselight
 
20.03.18
10:49
(5) гДЕ ЧТО ПОТОМ ДОЛЖНО ПОЯВИТЬСЯ?
10 chelentano
 
20.03.18
10:53
11 falselight
 
20.03.18
10:55
Такой запрос вставлен в скд

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Наименование,
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Упаковка КАК Упаковка,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Упаковка.Вес, 0) КАК УпаковкаВес,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Упаковка.Числитель, 0) КАК Вес1Шт,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.ДлинаЗнаменатель КАК ВесПогонногоМетра,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.ДлинаЧислитель КАК Длина,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
12 falselight
 
20.03.18
11:16
Эта часть запустилась.
Дело в том что процедура при создании на сервере,
не была увязана. Нужно выбирать её для создания из списка!!!
13 FIXXXL
 
20.03.18
11:17
(11) может тебе проще сделать дин.список по твоему запросу и с ним играться? его и редактировать легче
14 falselight
 
20.03.18
11:20
(13) Да может быть. Я учусь.
15 falselight
 
20.03.18
11:46
&НаСервере
Процедура СФОРМИРОВАТЬ_ТЧНаСервере()
    СКД                 = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МАКЕТ_ВыводКорректировка");
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета   = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки     = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));  
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТЗ              = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТЗ);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры


Поставил точку останова на последней строке, но в ТЗ пусто. Почему может быть не отбирать? Сам запрос в макете не выдает?
16 falselight
 
20.03.18
11:56
Иду далее. Не там точку останова ставил!
17 falselight
 
20.03.18
12:14
(15) По этому коду формируется таблица значений с данными.
Но если ставлю фильтр на форме, он не отрабатывает, то
есть не фильтрует. Где что то может быть не увязанно?