Имя: Пароль:
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) По этому коду формируется таблица значений с данными.
Но если ставлю фильтр на форме, он не отрабатывает, то
есть не фильтрует. Где что то может быть не увязанно?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн