Имя: Пароль:
1C
 
Таблица значений тип Отбор как установить доступные поля
,
0 assest
 
04.10.18
14:04
Есть обработка, не отчет
Я на форму добавил Табличное поле с типом Отбор
Есть реквизит с типом ПоляНастройки
При открытии добавляю в поляНастройки новый элемент, номенклатура
Устанавливаю доступные поля для ТабПоле "отбор"
Но в форме при добавлении нового отбора список доступных полей пуст.
Хотя если программно запросить доступные поля, то там есть номенклатура

//------------------------------------------------------------
Массив = новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Номенклатура");
ОписТипов = Новый ОписаниТипов(Массив);

ПоляНастройки.Добавить("Номенклатура","Номенклатура",ОписТипов);
Отборы.УстановитьДоступныеПоля(ПоляНастройки);
//-----------------------------------------------------------
После этого если запросить программно доступные поля, то там есть номенклатура, а если на форме добавить строку в отборы, то там пусто

Как добавить поля?
1 assest
 
04.10.18
14:14
Совсем ни у кого нет идей?
2 assest
 
04.10.18
14:27
А такой вопрос
Колонка табличного поле, как сделать так чтобы при открытии мне давался выбор метаданных по номенклатуре, чтобы можно было указать, например, "Номенклатура.Ссылка.Код"
3 Михаил Козлов
 
04.10.18
14:52
(2) Сформируйте список реквизитов справочника и выбирайте.
Может быть имеет смысл сформулировать задачу содержательно?
4 Михаил Козлов
 
04.10.18
15:02
Может Вам подойдет.
Заводите реквизит ПостроительОтчета. На форму помещаете табличное поле с источником - Построитель.Отбор.
В ПриОткрытии (или ПередОткрытием) инициализируете его запросом к справочнику Номенклатура.
Тогда будут доступны отборы по реквизитам номенклатуры.

Примерно так:

Функция ТекстЗапроса()    
    Текст = "ВЫБРАТЬ
    |    ИСТИНА КАК флаг,
    |    остатки.Номенклатура КАК Номенклатура,
    |    ЕСТЬNULL(ШК.Штрихкод,"""") КАК Штрихкод,
    |    остатки.Номенклатура.Наименование КАК Наименование,
    |    ЕСТЬNULL(ценыРозница.Цена,0) КАК Розница,
    |    ЕСТЬNULL(ценыРРЦ.Цена,0) КАК РРЦ,    
    |    остатки.КоличествоОстаток КАК остаток
    |{ВЫБРАТЬ
    |    остатки.Номенклатура.* КАК Номенклатура,
    |    остатки.Склад КАК Склад,
    |    остатки.Номенклатура.Бренд КАК Бренд
    |}
    |ИЗ РегистрНакопления.СвободныеОстатки.Остатки(, ) КАК остатки
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &Розница) КАК ценыРозница
    |ПО остатки.Номенклатура = ценыРозница.Номенклатура
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &РРЦ) КАК ценыРРЦ
    |ПО остатки.Номенклатура = ценыРРЦ.Номенклатура
    |ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |    ШК.Владелец КАК Номенклатура,
    |    МАКСИМУМ(ШК.Штрихкод) КАК Штрихкод
    |ИЗ РегистрСведений.Штрихкоды КАК ШК
    |СГРУППИРОВАТЬ ПО ШК.Владелец
    |) КАК ШК
    |ПО остатки.Номенклатура = ШК.Номенклатура
    |{ГДЕ
    |    остатки.Номенклатура.* КАК Номенклатура,
    |    остатки.Склад КАК Склад,
    |    остатки.Номенклатура.Бренд КАК Бренд
    |}
    |УПОРЯДОЧИТЬ ПО Наименование";
    Возврат Текст;
КонецФункции

Процедура УстановитьНачальныеНастройки()
    построитель.Текст = ТекстЗапроса();
    построитель.Отбор.Добавить("Номенклатура", "Номенклатура");
    построитель.Отбор.Добавить("Склад", "Склад");
    построитель.Отбор.Добавить("Бренд", "Бренд");
КонецПроцедуры
5 assest
 
04.10.18
15:09
У меня не отчет и построителя нет.
Задача такая,
Пользователь отбирает номенклатуру, я по ней собираю обороты и создаю по списку заказ.
Мне нужно сохранять отбор, чтобы порльзователь например выбрал папку товары и исключил папку образцы, и в следующий раз восстановив отбор можно было  поймать новые позиции. Пользователь должен иметь возможность использовать все виды сравнения и комбинации отборов
6 Михаил Козлов
 
04.10.18
16:05
(5) (4) этому не мешает: получите из из построителя результат (список номенклатуры по установленным отборам или сразу обороты - как запрос напишите) и создавайте заказ.
Чтобы сохранить настройки я делал так:
- завел реквизит отборПостроителя типа Отбор и
Процедура ПередСохранениемЗначений(Отказ)    
    отборПостроителя = Построитель.Отбор;    
КонецПроцедуры

Процедура ПослеВосстановленияЗначений()
    ДЛЯ каждого эл ИЗ отборПостроителя Цикл
        элОтбораВСписке = Построитель.Отбор.Найти(эл.Имя);
        Если элОтбораВСписке<>НЕОПРЕДЕЛЕНО Тогда
            элОтбораВСписке.Использование = эл.Использование;
            элОтбораВСписке.ВидСравнения = эл.ВидСравнения;
            элОтбораВСписке.Значение = эл.Значение;
            //полнитьЗначенияСвойств(элОтбораВСписке, эл);
        КонецЕсли;            
    КонецЦикла;    
КонецПроцедуры

К сожалению, в таком варианте не получается сохранить два отбора по одному полю, например, Номенклатура.
7 youalex
 
04.10.18
16:23
(0)     ПолеНастройки =  ДоступныеПоля.Добавить("Справочник1", "Справочник1", Новый ОписаниеТипов("СправочникСсылка.Справочник1"));

ПолеНастройки.Отбор = Истина; //!!!
8 Михаил Козлов
 
04.10.18
17:21
(0) Что Вы потом с этим отбором собираетесь делать?
Программист всегда исправляет последнюю ошибку.