Имя: Пароль:
1C
1С v8
СКД
,
0 star_nox
 
09.01.14
10:37
Доброе утро!
Подскажите, пожалуйста, никак не могу разобраться.
Какой алгоритм программного добавления поля в отчет?
В зависимости от изменения флажка нужно выводить еще одно поле или не выводить.

Нашла вот такой алгоритм
Поле1 = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле1.Поле = "Номенклатура";
Поле1.ПутьКДанным = "Номенклатура";
Поле1.Заголовок = "Номенклатура";

Вставляю его в процедуру при изменении, если флажок = истина.
Но ничего не происходит.
Точнее, только в настройках в СКД это поле появляется, но не отображается на экране.

Подскажите, пожалуйста
1 Aprobator
 
09.01.14
11:01
Лениво в СП лезти. Навскидку - Использование.
2 Aprobator
 
09.01.14
11:02
Хотя, структуру вывода данных СКД и набор данных каким боком связаны то вообще?
3 Aprobator
 
09.01.14
11:05
В общем - тебе, чтобы СКД показало это поле - добавить его еще и в структуру вывода данных. Последняя закладка СКД. Выбранные поля и т.п..
4 star_nox
 
09.01.14
11:10
(3) , проблема в том, что когда я его (поле) заношу в структуру вывода, оно всегда выдается. когда удаляю - не выдается.
не подскажите, как-то по-другому проблему с изменением флажка - выводом новой колонки решить можно?
5 Aprobator
 
09.01.14
11:13
(4) занеси его в структуру вывода сразу. И управляй только его использованием по ситуации и все.
6 star_nox
 
09.01.14
11:28
(5), Вы можете подсказать, где можно посмотреть про это Использование? Весь синтакс-помощник пересмотрела на СКД не могу найти...или не там ищу?
7 Aprobator
 
09.01.14
11:46
(6) ВыбранноеПолеКомпоновкиДанных.
8 star_nox
 
09.01.14
11:48
(7), спасибо. поняла. буду разбираться
9 Aprobator
 
09.01.14
11:48
удачи
10 __Amator__
 
09.01.14
12:10
в СКД укажи как должно все выводится полностью,
а в модуле отчета в процедуре ПриКомпоновкеРезультата

СтандартнаяОбработка = Ложь;

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

//далее стандартный вывод скд:
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ДокументРезультат.Очистить();
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
11 star_nox
 
09.01.14
12:23
(10), спасибо большое! сейчас попробую!
12 Aprobator
 
09.01.14
12:28
(10) ужас. Чему ты людей учишь? Из всего кода только:

// если на первом уровне

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

и то с определенными допущениями.
13 Aprobator
 
09.01.14
12:28
+(12) остальное нафиг не надо.
14 __Amator__
 
09.01.14
12:31
интересно почему?
(сам поучусь)
15 Aprobator
 
09.01.14
12:33
(14) стандартный вывод сам все отработает. Эта процедура в принципе и сделана для того, что в ней можно переде формированием отчета на СКД воздействовать на его настройки.
16 Aprobator
 
09.01.14
12:36
да и стандартный вывод на СКД (это так на будущее) уже давно делается при помощи метода СкомпоноватьРезультат.
17 __Amator__
 
09.01.14
12:37
согласен
18 __Amator__
 
09.01.14
12:38
да и ошибочка есть:
Если текВыбор.Поле = ПолеСуммаПлан Тогда
должно быть:
Если текВыбор.Поле = ПолеСуммаФакт Тогда
но это опечатка
19 Aprobator
 
09.01.14
12:44
поиск поля вроде тоже можно чуток попроще сделать, хотя помгу и ошибаться. сейчас СП гляну.
20 Aprobator
 
09.01.14
12:46
чуть попозже выложу. Если найду. Сейчас комп немного занят. Хочу посмотреть в СП НайтиПоИдентификатору.
21 __Amator__
 
09.01.14
12:47
просвети... а то я рекурсию с перебором юзаю
22 Aprobator
 
09.01.14
13:01
Теоретически можно перебор заменить на:

ПолеСуммаФакт = Новый ПолеКомпоновкиДанных("СуммаФакт");
ИдентификаторПоля = ПолучитьИдентификаторПоОбъекту(ПолеСуммаФакт);
ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.ПолучитьОбъектПоИдентификатору(ИдентификаторПоля);
[/1]
Но надо тестить - могу ошибаться.
23 __Amator__
 
09.01.14
13:14
нет... наврят поиск можно сделать по другому...
поле может быть на разных уровнях вложенности (в отчете) поэтому для сложных отчетов придется юзать рекурсию
24 __Amator__
 
09.01.14
13:15
если найдешь способ проще сообщи, интересно