Имя: Пароль:
1C
1С v8
СКД. Сортировка программно.
0 Asakra
 
29.09.14
05:28
делаю так:
ЭлементНастройки = СКД.НастройкиПоУмолчанию.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементНастройки.Поле = Новый ПолеКомпоновкиДанных("Товар");

Не сортирует. Подскажите как надо!
1 Cube
 
29.09.14
05:34
(0) А зачем ты лезешь в настройки по-умолчанию? Скорее всего, к тому моменту, когда ты пихаешь свой код, настройки по-умолчанию уже были применены к твоей схеме...
2 Ерепень
 
29.09.14
05:35
а это по возрастанию или по убыванию?
3 Asakra
 
29.09.14
05:37
(1) а куда лезть? отчет программно формируется.. ммм. скорей я некорректно выдрал текст:
Настройки = СКД.НастройкиПоУмолчанию;
ЭлементНастройки = Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементНастройки.Поле = Новый ПолеКомпоновкиДанных("Товар");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
4 Asakra
 
29.09.14
05:37
(2) по умолчанию стоит по возрастанию
5 Asakra
 
29.09.14
05:38
+ (4) когда Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")), 1С сама ставит Использовать = Истина и По Возрастанию
6 Asakra
 
29.09.14
05:44
есть подозрение, что это же поле должно быть тут:
Настройки.Порядок.ДоступныеПоляПорядка.Элементы
как его туда затолкать хз...
7 Cube
 
29.09.14
05:48
(3) Ну дык в "Настройки" же...

ПолеСортировки = КомпоновщикНастроек.Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ПолеСортировки.Поле = Новый ПолеКомпоновкиДанных("Поле1");
8 Asakra
 
29.09.14
05:51
(7) а я не в настройки? не понял...
9 Asakra
 
29.09.14
05:52
(7) поясни, не догоняю.
10 Cube
 
29.09.14
05:57
(9) Где ты переменную "СКД" взял? Давай полный код и задачу опиши.
11 Asakra
 
29.09.14
06:03
(10) СКД = Новый СхемаКомпоновкиДанных;
на выходе должна быть ТЗ, она и получается, только без сортировки. на основании этой ТЗ будет создаваться документ. СКД используется т.к. в отчете настройками рулит пользователь, затем на основании этих настроек заполняется новая схема, которая выдает ТЗ.
p.s. все работает, кроме сортировки.
12 Asakra
 
29.09.14
06:05
(10) весь код нужен?
13 Cube
 
29.09.14
06:11
(12) Нет, в (11) инфы предостаточно.
14 Cube
 
29.09.14
06:19
(11) УФ?
15 Asakra
 
29.09.14
06:19
(14) нет, но отчет на УФ.
16 Cube
 
29.09.14
06:27
(15) Покури в эту сторону:


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

ПолеСортировки = КомпоновщикНастроекКомпоновкиДанных.Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ПолеСортировки.Поле = Новый ПолеКомпоновкиДанных("Поле1");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
17 Asakra
 
29.09.14
06:32
(16) тоже к этому склоняюсь. пойду пробовать.
18 Asakra
 
29.09.14
07:10
Код получился такой:
&НаСервере
Процедура СоздатьДокументНаСервере()
    
    СКД    = Отчеты.Тестовый.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
            
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
    КомпоновщикНастроек.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек.Настройки);
    КомпоновщикНастроек.Настройки.Структура.Очистить();

    ДетальныеЗаписи = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));

    ВыбранныеПоляГруппировки = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

    КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
    ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранныеПоля.Поле            = Новый ПолеКомпоновкиДанных("Товар");
    ВыбранныеПоля.Заголовок        = "Номенклатура";

    КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
    ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранныеПоля.Поле            = Новый ПолеКомпоновкиДанных("Количество");
    ВыбранныеПоля.Заголовок        = "Количество";

    КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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

    Если РезультатОтчета.Количество() > 0 Тогда
        РезультатОтчета.ВыбратьСтроку();
    КонецЕсли;

КонецПроцедуры // СоздатьДокументНаСервере()

&НаКлиенте
Процедура СоздатьДокумент(Команда)
    
    СоздатьДокументНаСервере();
    
КонецПроцедуры // СоздатьДокумент

КомпоновщикНастроек.ПолучитьНастройки() - содержит сортировку из отчета. результат тот же: информация выводиться, НО без сортировки.

может я в (16) не так понял? поправьте, если в что...
19 Asakra
 
29.09.14
07:46
up
20 Cube
 
29.09.14
07:49
(18) А где код, который сортировку делает? Нет его.
21 Asakra
 
29.09.14
07:49
(20) в отчете есть сортировка
22 Asakra
 
29.09.14
07:50
+ КомпоновщикНастроек.ПолучитьНастройки() - содержит сортировку из отчета
23 Cube
 
29.09.14
07:50
(18) И ещё не совсем понятен смысл этой строки:

КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
24 Cube
 
29.09.14
07:51
(22) То есть, хочешь сказать, что КомпоновщикНастроек.ПолучитьНастройки().Порядок.Элементы.Количество() не равно 0?
25 Asakra
 
29.09.14
07:51
(23) загружаются настройки пользователя. отборы например.
26 Asakra
 
29.09.14
07:52
(24) да
27 Cube
 
29.09.14
07:52
(25) Ну и выбранные поля... А зачем тогда выше ты эти выбранные поля меняешь?
28 Asakra
 
29.09.14
07:54
(27) потому что нужно две колонки товар и количество, а в отчете их больше, да и пользователь будет свои добавлять
29 Cube
 
29.09.14
07:55
(26) Ну, тогда, смотри, какие поля в сортировке указаны...
30 Asakra
 
29.09.14
07:57
31 Cube
 
29.09.14
07:57
(28) Ты тут где-то прошляпился, т.к. по коду (18) у тебя должна остаться только поле "Количество", если не грузить пользовательские настройки...
32 Asakra
 
29.09.14
07:57
33 Cube
 
29.09.14
07:57
(30) Нужно просто ссылку без тегов: http://i6.pixs.ru/thumbs/9/2/4/Sortirovka_3309803_14033924.jpg
34 Asakra
 
29.09.14
07:59
(31) в ТЗ две колонки
35 Cube
 
29.09.14
07:59
(32) А может у тебя сортировка ещё и в группировках настроена?
36 Cube
 
29.09.14
08:00
(34) Это потому что в пользовательских настройках их две. Сделает пользователь 10 колонок - в ТЗ тоже будет 10.
37 Asakra
 
29.09.14
08:01
(35) неа нету
38 Asakra
 
29.09.14
08:01
(36) их в отчете по умолчанию больше, чем 2
39 Asakra
 
29.09.14
08:04
сортировка не работает после сноса группировок. если группировки не трогать, то сортировка работает. как быть?
40 Asakra
 
29.09.14
08:04
мож группировку не так ставлю?
41 Asakra
 
29.09.14
08:05
ДетальныеЗаписи = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
42 Asakra
 
29.09.14
08:42
если в (18) убрать:  КомпоновщикНастроек.Настройки.Структура.Очистить();

то получается интересная картина.
в ТЗ есть две колонки "Товар" во вложенных группировках и "Товар1" без группировок. но колонка "товар" отсортирована, а колонка "товар1" нет.

если в (18) убрать:
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
    ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранныеПоля.Поле            = Новый ПолеКомпоновкиДанных("Товар");
    ВыбранныеПоля.Заголовок        = "Номенклатура";

    КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
    ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранныеПоля.Поле            = Новый ПолеКомпоновкиДанных("Количество");
    ВыбранныеПоля.Заголовок        = "Количество";

то в ТЗ все равно есть "Товар" и "Товар1".
если все как в (18), то есть только колонка "Товар", но сортировки нет.

хелп!!!

как убрать группировки, но оставить сортировку?
43 Asakra
 
29.09.14
09:06
УРЯ!!!
Cube, секс за наводку. надо было добавить:
ДетальныеЗаписи.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
44 Asakra
 
29.09.14
09:18
если кому-то пригодиться, сейчас код выглядит так:
СКД    = Отчеты.Тестовый.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
КомпоновщикНастроек.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек.Настройки);
КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);

Настройки = КомпоновщикНастроек.Настройки;

// Удалим все группировки
Настройки.Структура.Очистить();

// Добавим группировку
ДетальныеЗаписи = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

// Добавим выбранные поля (колонки ТЗ, без ресурсов)
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Поле      = Новый ПолеКомпоновкиДанных("Товар");
ВыбранныеПоля.Заголовок = "Номенклатура";

КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Поле      = Новый ПолеКомпоновкиДанных("Количество");
ВыбранныеПоля.Заголовок = "Количество";

// Уберем итоги
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВертикальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет);

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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

Если РезультатОтчета.Количество() > 0 Тогда
    РезультатОтчета.ВыбратьСтроку();
КонецЕсли;

еще раз, спасибо, Cube!
45 Cube
 
29.09.14
09:46
И всё же, где-то ты тут напарился:

...
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
...

КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
...
46 Asakra
 
29.09.14
09:57
(45) сори. должен быть один вызов
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить();
у меня добавление процедурой сделано решил как проще выложить и наляпал...
Программист всегда исправляет последнюю ошибку.