Имя: Пароль:
1C
1С v8
СКД. Добавить вычисляемое поле программно. Тонкий клиент
0 toypaul
 
гуру
18.04.12
10:15
Есть схема данных. При открытии нужно добавить несколько вычисляемых полей (в самой схеме нельзя это сделать). Какие варианты есть чтобы это сделать?

Еще подскажите как правильно менять схему/настройки, чтобы при закрытии отчета не спрашивало о том что изменены настройки? Например, сейчас я добавляю программно выбранные поля и при закрытии отчета спрашивает - сохранять настройки (по-моему так)?
1 Defender aka LINN
 
18.04.12
10:18
1. Почему нельзя в схеме сделать?
2. Ты в курсе ведь, что настройки - они не в схеме, в общем-то, а в соседнем объекте, так ведь?
2 toypaul
 
гуру
18.04.12
10:23
1. в схеме нельзя сделать, потому что набор полей создается по справочнику

2. не понял
3 Defender aka LINN
 
18.04.12
10:25
(2) КомпоновщикНастроек - ни о чем не говорит?
4 toypaul
 
гуру
18.04.12
10:27
(3) ну говори. через него ВЫбранные поля и добавляют. вопрос-то в другом. как заполнять настройки, чтобы при закрытии не спрашивало. хотя это не главное. главное в п.1
5 Defender aka LINN
 
18.04.12
10:39
(4) Через него много что добавляют.
6 toypaul
 
гуру
18.04.12
10:41
ну так как мне вычисляемые поля-то добавить? можно через ПользовательскиеПоля наверное в Настройка у КомпоновщикНастроек. может есть какой-то более правильный или простой способ?
7 Defender aka LINN
 
18.04.12
10:45
(6) Вычисляемые поля - только в схеме. Пользовательские - и там и там. Тебе-то какая принципиальная разница?
8 fly7
 
18.04.12
10:48
мне когда лень городить программное заполнение схемы, я ее делаю в режиме предприятия, сохраняю в xml,
потом этот xml помещаю в макет как двоичные данные
потом в коде сохраняю xml из макета в tmp и подставляю ее в скд ))


   ИмяФайла = ПолучитьИмяВременногоФайла("xml");
   Ссылка = ПоместитьВоВременноеХранилище(ПолучитьМакет("Схема"));
   Результат = ПолучитьФайл(Ссылка, ИмяФайла, Ложь);
   
   Чтение = Новый ЧтениеXML;
   НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
   Чтение.ОткрытьФайл(ИмяФайла);
   Настройки = НовыйСXDTO.ПрочитатьXML(Чтение);
   
   КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроек1.ЗагрузитьНастройки(Настройки);//СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
   КомпоновщикНастроек1.Настройки.ПараметрыДанных.Элементы[0].Значение = ПериодОтчета;
   КомпоновщикНастроек1.Настройки.ПараметрыДанных.Элементы[1].Значение = СписТипыЦен;
9 fly7
 
18.04.12
10:57
(0) можно сделать одно вычисляемое поле, найти в его в xml_е и по аналогии дописать туда руками )) потом загружать эту xml в скд
10 Defender aka LINN
 
18.04.12
10:58
(8) Месье знает толк в извращениях...
11 toypaul
 
гуру
18.04.12
11:07
УстановитьВыражениеДетальныхЗаписей не понимает функции из общего модуля?
12 Defender aka LINN
 
18.04.12
11:10
(11) Вроде нет
13 toypaul
 
гуру
18.04.12
11:12
пля. а выч поле можно
14 Defender aka LINN
 
18.04.12
11:17
(13) Тогда корежь схему при открытии
15 toypaul
 
гуру
18.04.12
11:19
(14) пример есть? у меня управляемая форма ... не все так просто
16 ll13
 
18.04.12
11:51
(14),(15)
Проблема гораздо глубже.
В управляемом приложении основную СКД изменить/заменить НЕЛЬЗЯ.
Встроенный компоновщик работает только с основной СКД, которую изменить/заменить нельзя.
Добавить вычисляемые поля к СКД проблем нет:
ВычисляемоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.ПутьКДанным = "МоеВычисляемоеПоле";
ВычисляемоеПоле.Выражение = "ВыражениеПоля";
Только встроенный компоновщик все равно будет работать с основной СКД, в которой этого поля нет.
Посему единственный вариант создания отчета с динамическим формированием СКД, это не использовать встроенный в отчет компоновщик, а использовать свой и соответственно весь механизм работы писать "руками".
Опыт успешной реализации был, о достаточно трудоемко, посему решайте стоит ли игра свеч.
17 toypaul
 
гуру
18.04.12
11:54
(16) пример есть? может случится, что сделать нужно будет хоть тресни.
18 ll13
 
18.04.12
12:01
(17) К сожалению скинуть целиком не смогу, по причине того, что обработка является закрытым коммерческим решением, но если будут какие-то конкретные вопросы готов ответить, привести примеры в виде отдельных кусков кода.
19 fly7
 
18.04.12
13:10
(17) в предприятии сохрани схему в xml в коде создай из нее динамическую СКД
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.