|
СКД: программная установка ограничения доступности полей | ☑ | ||
---|---|---|---|---|
0
serzh44
18.10.13
✎
18:17
|
Предположим, есть код программного построения отчета в СКД:
//1. создаем схему компоновки данных СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; //1.1 определяем источник данных для схемы //для наших целей - текущая ИБ Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); Источник.Имя = "ЛокальнаяБаза"; Источник.СтрокаСоединения = ""; Источник.ТипИсточникаДанных = "Local"; //1.2 определяем набор данных НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "Продажи"; НаборДанных.ИсточникДанных = "ЛокальнаяБаза"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Ложь; НаборДанных.Запрос = ( "ВЫБРАТЬ | 1 КАК Колонка1, | 2 КАК Колонка2" ); //1.2.1 добавляем поля ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеНабораДанных.Поле = "Колонка1"; ПолеНабораДанных.ПутьКДанным = "Колонка1"; ПолеНабораДанных.Поле = "Колонка2"; ПолеНабораДанных.ПутьКДанным = "Колонка2"; ПолеНабораДанных.ОграничениеИспользования.Группировка = Истина; ПолеНабораДанных.ОграничениеИспользования.Поле = Истина; ПолеНабораДанных.ОграничениеИспользования.Порядок = Истина; ПолеНабораДанных.ОграничениеИспользования.Условие = Истина; ПолеНабораДанных.ОграничениеИспользованияРеквизитов.Группировка = Истина; ПолеНабораДанных.ОграничениеИспользованияРеквизитов.Поле = Истина; ПолеНабораДанных.ОграничениеИспользованияРеквизитов.Порядок = Истина; ПолеНабораДанных.ОграничениеИспользованияРеквизитов.Условие = Истина; //2. создаем настройки для схемы НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //2.1 определяем структуру //2.1.1 добавляем группировку "Номенклатура" Группировка = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ПолеГруппировки.Использование = Истина; ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Колонка1"); //2.2 определим выбранные поля ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = "Колонка1"; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Колонка1"); //3. компонуем КомпНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпНастроек.ЗагрузитьНастройки(НастройкиКомпоновкиДанных); НастройкиКомпоновкиДанных = КомпНастроек.ПолучитьНастройки(); //4. готовим макет КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных); //5. исполняем макет ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет); ПроцессорКомпоновки.Сбросить(); //6. выводим результат ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ТабДок = Новый ТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДок); ПроцессорВывода.НачатьВывод(); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Пока ЭлементРезультата <> Неопределено Цикл ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); ТабДок.Показать(); |
|||
1
serzh44
18.10.13
✎
18:21
|
Мне нужно программно установить ограничение использования для поля набора данных. В коде выше, ограничения использования устанавливаются для поля "Колонка2". Но если выполнить код, то будет выдана ошибка - не найдена "Колонка1". Хотя свойство АвтоЗаполнениеДоступныхПолей набора данных установлено в "Ложь" и поля набора данных добавлены.
Вообще путем проб и ошибок удалось установить, что 1с никак не реагирует на поля, добавленные программно в набор данных. А если АвтоЗаполнениеДоступныхПолей установлено в "Истина", то поля отсутствуют в наборе данных и установить ограничение использования нельзя. Зачем мне это? Мне нужно добавить поля в набор данных, которые будут использоваться в вычисляемых полях, но сами поля набора данных пользователь не должен видеть. |
|||
2
fisher
18.10.13
✎
18:59
|
Программно так не создавал, но если интерактивно отключаешь автозаполнение полей, то СКД вычитывает их список и настройки из фигурных скобок запроса. Может, и тут надо бы с ними пошаманить?
|
|||
3
serzh44
18.10.13
✎
22:39
|
Фигурные скобки тоже пробовал, тогда поля не заполняютя в наборе данных и изменить ограничение использования нельзя. Вооще пребрал уже все возможные варианты и еще раз пришел к выводу, что программное заполнение полей набора данных ни на что не влияет. Косяк платформы или я не так делаю?
|
|||
4
serzh44
19.10.13
✎
20:26
|
up
|
|||
5
serzh44
20.10.13
✎
10:32
|
Ни у кого нет мыслей?
|
|||
6
serzh44
20.10.13
✎
20:03
|
Up
|
|||
7
serzh44
22.10.13
✎
19:05
|
Up
|
|||
8
serzh44
23.10.13
✎
13:45
|
Up
|
|||
9
serzh44
25.10.13
✎
16:15
|
Up
|
|||
10
serzh44
02.11.13
✎
17:43
|
Up
|
|||
11
serzh44
07.11.13
✎
11:03
|
Up
|
|||
12
Зойч
07.11.13
✎
11:12
|
>>Мне нужно добавить поля в набор данных, которые будут использоваться в вычисляемых полях, но сами поля набора данных пользователь не должен видеть
Так нельзя в принципе |
|||
13
serzh44
10.11.13
✎
13:01
|
Почему нельзя? Если ограничение доступности включено, то в вычисляемых полях использовать можно, но пользователь полей не увидит.
|
|||
14
serzh44
10.11.13
✎
13:16
|
Наконец-то получилось)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |