Имя: Пароль:
1C
1С v8
СКД: как снять защиту с одной колонки в отчете?
0 tenikov
 
10.08.11
17:11
Нужно дать пользователю возможность редактировать только значения только одной колонки отчета, построенного с использованием СКД.
Как это сделать? Подскажите, плз.
1 Икогнито
 
10.08.11
17:18
руками и многими буковками
2 mzelensky
 
10.08.11
17:20
(0) ну, по идее: формируешь отчет и выводишь пользователю, а потом получаешь область колонки и изменяешь нужный параметр.

Я как-то так делал (правда это НЕ СКД):

Область = ТабДок.Область( , 6, , 6); //выделил ВСЮ 6-ю колонку
Область.Видимость=ложь;
3 tenikov
 
10.08.11
17:25
(2) ну так и я могу :)

как в СКД получить область, зная идентификатор колонки отчета?
4 mzelensky
 
10.08.11
17:40
(3) ну так а что мешает так сделать??? или ты не знаешь порядковый номер нужной колонки???
5 tenikov
 
10.08.11
17:43
(4) по условию считается, что не знаю (пользователь может менять порядок либо не выводить эту колонку совсем).
6 mzelensky
 
10.08.11
17:45
(5) что ты там за условия такие выполняешь :) ?

Ну проверяешь поля, которые выводятся в СКД...если среди выводимых есть НУЖНО, то запоминаешь его порядковый номер и потом -> (2)

Ток я не пойму, а как указывается с какой именно колонки защиту снимать??? или снимать нужно все-таки для определенной?
7 tenikov
 
10.08.11
17:54
(6) по условию задачи, которую я сам себе придумал :)

В число полей схемы СКД входит пользовательское поле "Примечание". Пользователь может менять порядок вывода колонок в настройках (стандартный механизм СКД) или не выводить некоторые поля совсем.

Как в случае вывода поля "Примечание" в отчет понять номер его колонки в табличном документе?
8 jump if zero
 
10.08.11
18:18
Процедура СформироватьОтчет()
   Схема=СхемаКомпоновкиДанных;
   
   КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки=КомпоновщикМакета.Выполнить(Схема,КомпоновщикНастроек.Настройки);
   
   ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент ;
   ПроцессорВывода.ОтображатьПроцентВывода=Истина;
   
   ЭлементыФормы.Результат.Очистить();
   
   
   ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
   
   ПроцессорВывода.НачатьВывод();
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   ПроцессорВывода.ЗакончитьВывод();
   
   Область = ЭлементыФормы.Результат.НайтиТекст("Продажа");
   Если ТипЗнч(Область)=Тип("Неопределено") Тогда
       Сообщить("Значение не найдено!");
   Иначе
       
   ИмяОбласти = Область.Имя;
       
   ИмяОбласти2 = СтрЗаменить(ИмяОбласти,"R1","R100");
       
ОбластьБезЗащиты =  ЭлементыФормы.Результат.Область(Область.Имя +":"+ ИмяОбласти2 );
ОбластьБезЗащиты.Защита =Ложь;
       
КонецЕсли;
   
   
КонецПроцедуры
9 tenikov
 
11.08.11
11:35
(8) оно, спасибо. допилил до:

Область = ДокументРезультат.НайтиТекст("Примечание");
Если ТипЗнч(Область)=Тип("Неопределено") Тогда
Иначе
НомерКолонки = Область.Лево;
Область = ДокументРезультат.Область( , НомерКолонки, , НомерКолонки);
Область.Защита = Ложь;
КонецЕсли;