![]() |
![]() |
![]() |
|
СКД. Сортировка программно. | ☑ | ||
---|---|---|---|---|
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) сори. должен быть один вызов
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить(); у меня добавление процедурой сделано решил как проще выложить и наляпал... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |