Имя: Пароль:
1C
1С v8
СКД из динсписка
,
0 ДенисЧ
 
29.11.19
11:13
Что-то я торможу или?
Есть динамический список (произвольный запрос).
Примитивный до мычания:

выбрать Ссылка КАК Документ, Дата КАК ДатаДокумента, Номер КАК НомерДокумента
ИЗ Документ.ЗаказПокупателя


В настройках списка все три поля отмечены как "использовать всегда".
На форму выведены все три поля. Но у поля Документ видимость снята.

Далее делаю

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

И в результате, в таблице Результат вижу только дату и номер. Если видимость документа включаю - вижу всё.

И вопрос: как мне программно и в какое место мне влезть в настройки или схему, чтобы увидеть все поля вне зависимости от настройки видимости?
1 vicof
 
29.11.19
11:16
ПолучитьИсполняемыеНастройкиКомпоновкиДанных()
Возвращаемое значение:

Тип: НастройкиКомпоновкиДанных.

Описание:

Возвращает настройки компоновки, соответствующие данным, которые отображаются в динамическом списке, связанном с таблицей.
При этом учитывается видимость колонок и установленное значение поиска.
2 ДенисЧ
 
29.11.19
11:21
(1) В каком конкретно? Я просмотел в отладчике все поля этой настройки, нигде не увидел списка полей, кроме как в доступных
3 vicof
 
29.11.19
11:23
(2) не понял вопрос
4 toypaul
 
гуру
29.11.19
11:27
добавить в НастройкиПользователя.Выбор наверное. если его там нет
5 ДенисЧ
 
29.11.19
11:29
(3) Я не нашёл ни одного реквизита настроек, где были бы перечислены поля НомерДокумента, ДатаДокумента.
(4) Так там вообще пусто, но в результате запроса поля есть.
6 D_E_S_131
 
29.11.19
11:39
Возможно у ссылки надо отключить не "Видимость", а "Пользовательская видимость".
7 ДенисЧ
 
29.11.19
11:41
(6) Не помогло (
8 vicof
 
29.11.19
11:43
Значит перед исполнением запроса включить видимость у всех колонок, после вернуть обратно))
9 ДенисЧ
 
29.11.19
11:45
(8) Ну хорошо, а где? Лезть в настройки списка? И он мне перерисовываться туда-сюда будет?
10 vicof
 
29.11.19
11:46
Элементы.Список.Дата.Видимость = Истина;
11 vicof
 
29.11.19
11:46
и так далее
12 ДенисЧ
 
29.11.19
11:49
(10) Неа. Не срабатывает. Если что - я всё это делаю на сервере. И сделав так:

Элементы.Документ.Видимость = Истина;
    НастройкиПользователя = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

ничего не меняет.
13 sqr4
 
29.11.19
11:57
ПолучитьИсполняемуюСхемуКомпоновкиДанных() вот тут в схеме какой запрос?
14 ДенисЧ
 
29.11.19
11:58
Сделал вот так

    Для Каждого поле Из НастройкиПользователя.Выбор.ДоступныеПоляВыбора.Элементы Цикл
        поле1 = НастройкиПользователя.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ЗаполнитьЗначенияСвойств(поле1, поле);
    КонецЦикла;


Всё равно нету (( Хотя в НастройкиПользователя.Выбор.Элементы есть всё, что нужно.

А видимость перещёлкивать - по возвращении с сервера список пересчитывается (
15 ДенисЧ
 
29.11.19
11:59
(13) Строго по тем колонкам, которые видны на форме... То есть нужного мне нет. Вот и вопрос - как его переформировать
16 Андроны едут
 
29.11.19
11:59
(15) попробуй так КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное);
17 ДенисЧ
 
29.11.19
12:05
(16) И что мне это даст? Сбросит все настройки моего списка? Тем более видимость поля задана в конфигураторе, а не пользователем, поэтому сброс настроек её видимость не восстановит
18 sqr4
 
29.11.19
12:08
(15) ну т.е ты сначала делаешь видимость в истину, затем получаешь схему верно?
Попробуй делать это на клиенте, я про видимость и после этого обновить динамический список и только после этого получать схему и настройки
19 Андроны едут
 
29.11.19
12:09
(17) мне иногда помогает в сложных случаях работы с компоновщиком. А почему сам не знаю. СКД для нас всех черный ящик.
20 ДенисЧ
 
29.11.19
12:16
(18) Мне так нельзя. Пользователь себе настроил список, как ему надо, а я его настройки буду сбрасывать? Не вариант вообще.
21 sqr4
 
29.11.19
12:19
(20) ну после отработки получения схемы все вернуть обратно
22 ДенисЧ
 
29.11.19
12:23
(21) Ага. И подмигивать списком пользователю. Меня неправильно поймут (тут в основном женщины, причём замужние...)
23 sqr4
 
29.11.19
12:52
(22) ну тогда только дополнять скд нужными полями, как я понимаю
24 ДенисЧ
 
29.11.19
12:55
(23) Тут посмотрел...
И в настройках и в схеме все поля есть... А всё равно не выводится. Не пойму, где видимость изменить...
25 toypaul
 
гуру
29.11.19
12:57
(14) чортова магия. ну посмотри еще в Структура что ли
26 ДенисЧ
 
29.11.19
12:59
(25) там только идентификатор, представление и режим отображения. куда смотреть? ))
27 toypaul
 
гуру
29.11.19
12:59
конечно есть еще вероятность, что этого поля вообще в схеме нет. тогда сначала его надо в схему добавить.
28 ДенисЧ
 
29.11.19
13:00
о! Точно, это же коллекция )))
Сейчас буду покопать...
29 toypaul
 
гуру
29.11.19
13:01
(25) в структуре должен быть один элемент, у которого вероятно заполнен Выбор. еще надо проверить ДоступныеПоляВыбора. если твоего поля там нет, то хоть завыводить - оно в отчете не появится. этот список заполняется из схемы.
30 ДенисЧ
 
29.11.19
13:40
Во, нашёл вариант, кривой правда, но пока сработал.


    выбор = НастройкиПользователя.Структура[0].Выбор;
    Для Каждого поле из выбор.ДоступныеПоляВыбора.Элементы Цикл
        Если поле.Заголовок = "Системные поля" ИЛИ поле.Заголовок = "Параметры" Тогда
            Продолжить;
        КонецЕсли;
        поле1 = Неопределено;
        фл = Ложь;
        Для Каждого поле1 из выбор.Элементы Цикл
            Если поле1.поле = поле.поле Тогда
                фл = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Не фл Тогда
            поле1 = выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
            ЗаполнитьЗначенияСвойств(поле1, поле);
            поле1.Заголовок = "";
        КонецЕсли;
    КонецЦикла;
Программист всегда исправляет последнюю ошибку.