|   |   | 
| 
 | Программное добавление доступных полей выбора СКД | ☑ | ||
|---|---|---|---|---|
| 0
    
        1stypen 09.08.11✎ 17:22 | 
        нашел такую тему, но её так видимо и не решили
  v8: Как добавить Вычисляемое поле СКД на Тонком Клиенте? v8: Как добавить Вычисляемое поле СКД на Тонком Клиенте? У меня подобная проблема. Делаю отчет на СКД. В качестве набора данных есть внешний объект. Поля не описаны, т.к. формируются динамически. ПриКомпоновкеРезультата в модуле отчета формирую этот внешний источник(обычная таблица) - добавляю его колонки как поля в СКД, в выбор настройкиКД тоже их добавляю - инициализирую отчет - выводится всё отлично НО эти поля не попадают в доступные для выбора - в итоге пользователь не может их добавить никуда, т.к. не видит их при изменении варианта. И так же не видно что этим колонкам сопаставлено поле СКД - красный крестик вводится. Хотя все данные выводятся правильные Подскажите, пожалуйста, как добавить эти поля в доступные для выбора. Програмно эта коллекция только на чтение, а при формировании таблицы консткрукции {} использовать бесполезно | |||
| 1
    
        1stypen 09.08.11✎ 17:44 | 
        код такой
  Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоляВнешнегоИсточника = СхемаКомпоновкиДанных.НаборыДанных.ВидыОпераций_Выбранные.Поля; ТабСвойствОЗ = ПолучитьТабСвойствОЗ(); ТабСвойствОЗ.Колонки.Добавить("ПутьКДанным",Новый ОписаниеТипов("Строка",)); н=0; Для Каждого стрСвОз Из ТабСвойствОЗ Цикл тПоле = "а"+Строка(н); стрСвОз.ПутьКДанным = тПоле; ньюПоле = ПоляВнешнегоИсточника.Найти(тПоле); Если ньюПоле = Неопределено Тогда ньюПоле = ПоляВнешнегоИсточника.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ньюПоле.Поле = тПоле; ньюПоле.ПутьКДанным = тПоле; КонецЕсли; ньюПоле.Заголовок = стрСвОз.СвойствоНаименование; ньюПоле.ТипЗначения = стрСвОз.СвойствоТипЗначения; ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = стрСвОз.СвойствоНаименование; ВыбранноеПоле.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(тПоле); н=н+1; КонецЦикла; ВидыОпераций_Выбранные = ПолучитьТабЗначенийСвойствОЗ(ПоляВнешнегоИсточника,ТабСвойствОЗ); ВнешниеНаборыДанных = Новый Структура(); ВнешниеНаборыДанных.Вставить("ВидыОпераций_Выбранные", ВидыОпераций_Выбранные); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры | |||
| 2
    
        Паучог 09.08.11✎ 17:55 | 
        (0) А может быть нужно 
  КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Перед тем как в него добавлять выбранные поля? | |||
| 3
    
        1stypen 09.08.11✎ 18:38 | 
        При инициализации в компоновщик настроек в доступные полях добавляются эти поля. Но при изменении варианта пользователь их не видит всё равно. Я даже пытался делать свой компановщик настроек - не помогало. Может компоновать надо как то по хитрому
  Наверное нужно было задавать вопрос "чтобы пользователь видел", а в настройке в доступных поля выбора они есть, если в отладчике смотреть. | |||
| 4
    
        1stypen 09.08.11✎ 18:45 | 
        ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
  ВыбранноеПоле.Заголовок = стрСвОз.СвойствоНаименование; ВыбранноеПоле.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(тПоле); это делать не обязательно - это я чтоб хоть увидеть эти данные - главное чтоб юзер их смог выбрать потом в настройке варианта | |||
| 5
    
        GANR 09.08.11✎ 18:50 | 
        Прямого ответа у меня нет. Даю подсказку, как отладить СКД:
  #Если ТолстыйКлиентУправляемоеПриложение Тогда Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных(АдресСКД)); Конструктор.Редактировать(ЭтаФорма); #КонецЕсли Потом открытую схему копируем в консоль и правим, в консоли можно посмотреть как схема исправленная "ручками" выглядит в окнах отладчика. Только так и можно отладить отчеты на СКД. Как по-другому - не представляю. | |||
| 6
    
        1stypen 09.08.11✎ 18:58 | 
        у меня управляемое приложение - только тонкий клиент - нет толстого клиента(     | |||
| 7
    
        GANR 10.08.11✎ 10:21 | 
        (6) Так отлаживать, вроде, можно в разных режимах ??? Добейся чтоб был толстый ))). Эта штука (5) только под толстым и работает.     | |||
| 8
    
        1stypen 10.08.11✎ 10:35 | 
        Дык вить пользователи будут поля то выбирать, а у них тонкий)
  будем искать( | |||
| 9
    
        GANR 10.08.11✎ 11:58 | 
        (8)Толстый клиент нужен исключительно для отладки. Отладил - и работай себе под тонким когда всё налажено.     | |||
| 10
    
        1stypen 10.08.11✎ 13:21 | 
        Конструктор тоже результатов не дал - он тоже не показывает те поля, которые я добавил руками - он показывает только те поля, которые были обозначены в СКД изначально     | |||
| 11
    
        GANR 10.08.11✎ 14:37 | 
        (10) Вероятно, программа в коде затерла настройки, которые были внесены руками и переформировала всё заново. С свойстве "Структура", вроде отображаются настройки, добавленные руками.     | |||
| 12
    
        GANR 10.08.11✎ 14:48 | 
        ЛЮБОЕ действие с СКД, которое можно выполнить руками, можно выполнить и программно     | |||
| 13
    
        1stypen 10.08.11✎ 15:18 | 
        "ЛЮБОЕ действие с СКД, которое можно выполнить руками, можно выполнить и программно" - это бесспорно.
  Но пользователь пока руками то ничего не делал))) ПриКомпоновкеРезультата() програмно эти поля внесены как в СКД, потом после инициализации настроек эти поля попали так и в доступные поля для выбора. Я в отладчике их вижу везде. После КомпоновщикМакета.Выполнить - они есть После ПроцессорКомпоновкиДанных.Инициализировать - они есть После ПроцессорВывода.Вывести - они тоже есть А когда пользователь редактирует вариант - их нет. Где они перетерлись програмно? | |||
| 14
    
        GANR 15.08.11✎ 17:02 | 
        (13) А вот так можно ещё и настройки сохранить
  #Если ТолстыйКлиентУправляемоеПриложение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных(АдресСКД)); Конструктор.Редактировать(ЭтаФорма); ПолноеИмяФайла = "C:\Documents and Settings\Руслан_Ганеев\Рабочий стол\NKD_Save.xml"; Настройки = Компоновщик.Настройки; НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл(ПолноеИмяФайла); Запись.ЗаписатьОбъявлениеXML(); НовыйСXDTO.ЗаписатьXML(Запись, Настройки, НазначениеТипаXML.Явное, ФормаXML.Элемент); Запись.Закрыть(); #КонецЕсли | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |