Имя: Пароль:
1C
1С v8
СКД: Цифры вместо расшифровки
,
0 mirrr
 
04.12.11
22:44
Программно делаю вывод отчета на скд. При попытке расшифровать ячейку выдается окно с цифрой.

Настройки =    КомпоновщикНастроек.Настройки;            компоновщикнастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
МакетОформления=ПолучитьМакет("МойМакет");
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, МакетОформления);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
ТабличныйДокумент.Очистить();    
// Инициализируем процессор вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
1 mirrr
 
04.12.11
22:46
можно ли сделать стандартную расшифровку, как по стандартной кнопке "сформировать", не используя обработчик расшифровки "РезультатОбработкаРасшифровки"?
2 fly7
 
04.12.11
23:24
я мутил макет для каждого поля с параметром
3 mirrr
 
05.12.11
00:39
форма управляемая, на клиенте при нажатии на свою кнопку вызывается серверная процедура, из которой идет обращение к процедуре в модуле объекта-отчета. В нем код из (0). Вроде правильно все написано, но выводит цифры в окне вместо расшифровки.
4 Живой Ископаемый
 
05.12.11
00:41
какое число?
5 mirrr
 
05.12.11
01:15
разные, видимо порядковые номера полей.
6 mirrr
 
05.12.11
01:26
так почему (0) не работает?
7 Живой Ископаемый
 
05.12.11
11:48
можешь выложить отчет?
8 mirrr
 
05.12.11
15:26
(7) конфа там нетиповая, выкладываю код:
У упр. формы реквизиты: Результат(таб. документ), ДанныеРасшифровки.

&НаКлиенте
Процедура Сформировать(Команда)
   СформироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()
   ОтчетОбъект=ЭтаФорма.РеквизитФормыВЗначение("Отчет");
   
   Дог=ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
   НачДог=ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение.ДатаНачала;
   КонДог=ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение.ДатаОкончания;
   НачСрок=ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение.ДатаНачала;
   КонСрок=ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение.ДатаОкончания;
   
   Стр1=Новый Структура("Дог,НачДог,КонДог,НачСрок,КонСрок");
   Стр1.Вставить("Дог",Дог);
   Стр1.Вставить("НачДог",НачДог);
   Стр1.Вставить("КонДог",КонДог);
   Стр1.Вставить("НачСрок",НачСрок);
   Стр1.Вставить("КонСрок",КонСрок);    
   
 ОтчетОбъект.СформироватьОтчет(ЭтаФорма.Результат, ЭтаФорма.ДанныеРасшифровки, Стр1);

КонецПроцедуры // СформироватьНаСервере()

В модуле объекта:
Процедура СформироватьОтчет(ТабличныйДокумент, ДанныеРасшифровки, Стр1) Экспорт

<Здесь заполняю ТЗ (ТаблицаРезультат) - внеш. набор данных>

   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ДанныеДС", ТаблицаРезультат);
   
   Настройки =    КомпоновщикНастроек.Настройки;    
//    Настройки =    СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   
   ДанныеРасшифровки1 = Новый ДанныеРасшифровкиКомпоновкиДанных;
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки1);

   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки1);
   
   ТабличныйДокумент.Очистить();    
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   
   ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    

КонецПроцедуры
 
Вообщем перерыл уже весь инет, всякими способами пробовал (и в модуле формы НаСервере делал компоновку), результат один - при 2-ом щелчке - окошко с цифрой. Причем этот же код работает на обычной форме в 8.1, если компоновку делать в модуле формы.
Вообщем, сделал расшифровку только через обработчик события "ОбработкаРасшифровки" у таб. документа "Результат" на форме.
Подскажите, можно как-то стандартную расшифровку сделать при программной компоновке, не используя обработчик расшифровки у таб. документа?
9 PVV65
 
05.12.11
15:29
(8) Ни как не могу понять - что должно появиться (какая расшифровка) при двойном щелчке мышью на цифре?
10 Живой Ископаемый
 
05.12.11
15:31
2(8)нах... не нужен код.. нужна форма - выложи ее, покажу
11 mirrr
 
06.12.11
13:01
через час выложу отчет
12 viktor_vv
 
06.12.11
13:38
(10) А словами можно, хотя бы в общих чертах озвучить. А то у меня только через

СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);

в форме получилось. Но таким макаром, вроде как, внешние наборы данных туда не закинешь.
13 mirrr
 
06.12.11
14:04
выкладываю отчет. Вместо расшифровки выходит цифра.
http://narod.ru/disk/33490284001/ВнешнийОтчет1.erf.html
14 Живой Ископаемый
 
06.12.11
15:03
а... оно еще на УФ... тогда не знаю
15 mirrr
 
06.12.11
15:11
(14) пробовал то же на обыч. форме, результат тот же - цифра, а не расшифровка.
16 Живой Ископаемый
 
06.12.11
15:13
выкладывай файл с обычной формой, покажу
17 mirrr
 
06.12.11
15:15
18 Aprobator
 
06.12.11
15:18
ДанныеРасшифровки - расширение формы отчета. Нефиг их еще раз конструировать.
19 Aprobator
 
06.12.11
15:20
а соррь - управляемые формы опять прогладел (
20 mirrr
 
06.12.11
15:22
(18),(19) если не делать
ДанныеРасшифровкиСКД = Новый ДанныеРасшифровкиКомпоновкиДанных;
а использовать ДанныеРасшифровки - реквизит на форме, то работает, но только на обычной форме. А на управляемой как?
21 Aprobator
 
06.12.11
15:28
(20) не знаю. На управляемых еще не ваял. Цифры то, это он тебе идентификатор расшифровки показывает.
22 mirrr
 
06.12.11
15:30
+(20) т.е. если не создавать ДанныеРасшифровки (ДанныеРасшифровкиСКД = Новый ДанныеРасшифровкиКомпоновкиДанных; ), а использовать ДанныеРасшифровки - расширение формы отчета, то выдает ошибку:
 ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
по причине:
Несоответствие типов (параметр номер '3')

т.е. ДанныеРасшифровки - расширение формы отчета с типом строка.
23 Живой Ископаемый
 
06.12.11
15:30
2(17) в общем у меня такое было, когда я в свойстве формы "РезультатОтчета" не  указал свое поле табличного документа. Но у тебя стоит...
24 Стальная Крыса
 
06.12.11
15:35
25 Aprobator
 
06.12.11
15:35
(23) не тут сложнее. Управляемая форма. Вон СП глянул, так Метод СкомпоноватьРезультат уже другие параметры содержит и есть расширение для формы отчета Расшифровка. Вот только тип у нее нефига не ДанныеРасшифровкиКомпоновкиДанных.
26 mirrr
 
06.12.11
15:38
(24) там такого примера нет, делают через обработчик "РезультатОбработкаРасшифровки".
27 viktor_vv
 
06.12.11
15:45
(23) О, у меня наверное такая фигня была, кинул свое поле табличного документа, а вот про свойство формы не знал.
28 mirrr
 
06.12.11
15:54
с обычной формой понятно: указать в св-ве формы "Результат отчета" поле таб. документа, в коде везде использовать расширение формы отчета "ДанныеРасшифровки".
А в управляемой как?
29 Стальная Крыса
 
06.12.11
16:04
(28) вообще-то посмотрев уроки по ссылке в (25)
я научился делать расшифровку любых своих отчетов в работе тонкого клиента, т.е. в упр.формах
30 mirrr
 
06.12.11
16:07
(29) Я хочу сделать без использования обработчика расшифровки "РезультатОбработкаРасшифровки".
31 Megas
 
06.12.11
16:10
(0) И чё.. тебе выдают цифру расшифровки, дальше надо с ней работать! В книге по СКД , да и в (25) подозреваю пишут что с ними делать =)
32 mirrr
 
06.12.11
16:11
(31) в какой книге по скд?
33 Стальная Крыса
 
06.12.11
16:12
(30) как можно сделать расшифровку без обработчика который за это отвечает ?  :)
34 mirrr
 
06.12.11
16:14
(33) в обычной форме это работает без всяких обработчиков. Есть ДанныеРасшифровки, куда компоновщик макета помещает данные расшифровки
35 Стальная Крыса
 
06.12.11
16:14
ведь в 8.2 Расшифровка это "ИдентификаторРасшифровкиКомпоновкиДанных",
через который из временного хранилища получают уже саму расшифровку и т.д.
36 mirrr
 
06.12.11
16:20
(35) в обычной форме на 8.2 без обработчиков работает при условиях из (28)
37 mirrr
 
06.12.11
16:31
как отчет из (13) можно переделать, чтобы была станд. расшифровка (как по станд. команде "Сформировать") без использования обработчика "РезультатОбработкаРасшифровки" ?
38 mirrr
 
06.12.11
16:55
^
39 Стальная Крыса
 
06.12.11
17:21
никак
ведь нет "стандартной команды" : Расшифровать

Расшифровку можно сделать только в соответствующем обработчике
40 mirrr
 
06.12.11
17:25
(39) я имею ввиду сделать через использование ДанныеРасшифровки - расширение формы отчета.

Настройки =    ОтчетОбъект.КомпоновщикНастроек.Настройки;        
ОтчетОбъект.компоновщикнастроек.ЗагрузитьНастройки(ОтчетОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
41 Стальная Крыса
 
06.12.11
17:29
ну так все и делается через ДанныеРасшифровки - ведь это по сути данные всего отчета целиком
42 mirrr
 
06.12.11
17:42
(41) так зачем надо делать обработчик, если без него в обычной форме это работает. Достаточно написать:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

Если это специфика упр. форм, что если этот код будет &НаСервере
, то он работать не будет (цифра вместо расшифровки), то так и напишите. А для обыч. формы он работает без обработчика.
43 viktor_vv
 
06.12.11
17:50
Вроде получилось. У меня там правда отчет чисто для проверки. Примерно так.

В форме

&НаСервере
Процедура СформироватьотчетСервер()
   ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
   ОтчетОбъект.Сформироватьотчет(Результат,УникальныйИдентификатор,ДанныеРасшифровки);
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
   
   СформироватьотчетСервер();
КонецПроцедуры

В модуле отчета.

Процедура СформироватьОтчет(лТаб,пИдентФормы,пДанныеРасшифровки)  Экспорт
ОсновнаяСхема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных") ;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   //НастройкиКомпоновкиДанных = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
   НастройкиКомпоновкиДанных = ОсновнаяСхема.НастройкиПоУмолчанию;
   
   
   ДанныеРасшифровкиКомпоновки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   //Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,пИдентФормы);
   
   МакетКомпоновки = КомпоновщикМакета.Выполнить(ОсновнаяСхема, НастройкиКомпоновкиДанных,ДанныеРасшифровкиКомпоновки);
   //Создадим и инициализируем процессор компоновки
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровкиКомпоновки, Истина);    
       //Создадим и инициализируем процессор вывода результата
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(лТаб);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   
   Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,пИдентФормы);
   пДанныеРасшифровки = Адрес ;
КонецПроцедуры    

Попробуй у себя.
44 viktor_vv
 
06.12.11
17:56
По крайней мере появляется стандартное меню, у меня просто результат отчета строка с пустой ссылкой.
45 mirrr
 
06.12.11
18:04
(44) написал то же, только &НаСервере, а не в модуле отчета. По старому-выводит цифру
46 viktor_vv
 
06.12.11
18:07
Ну не знаю, у меня работает, может я где лоханулся. Но без


   Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,пИдентФормы);
   пДанныеРасшифровки = Адрес ;

Тоже выводило цифру, теперь нормально выводит меню.
47 mirrr
 
06.12.11
18:11
(46) а &НаСервере не пробовал написать этот код?
48 viktor_vv
 
06.12.11
18:12
И в форме &НаСервере работает.

&НаСервере
Процедура СформироватьотчетСервер()
   ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
   //ОтчетОбъект.Сформироватьотчет(Результат,УникальныйИдентификатор,ДанныеРасшифровки);
   ОсновнаяСхема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных") ;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   //НастройкиКомпоновкиДанных = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
   НастройкиКомпоновкиДанных = ОсновнаяСхема.НастройкиПоУмолчанию;
   
   ПараметрСсылка = НастройкиКомпоновкиДанных.ПараметрыДанных.Элементы.Найти("Ссылка") ;
   ПараметрСсылка.Использование = Истина ;
   ПараметрСсылка.Значение = ОтчетОбъект.СсылкаНаОбъект ;
   
   ДанныеРасшифровкиКомпоновки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   //Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,пИдентФормы);
   
   МакетКомпоновки = КомпоновщикМакета.Выполнить(ОсновнаяСхема, НастройкиКомпоновкиДанных,ДанныеРасшифровкиКомпоновки);
   //Создадим и инициализируем процессор компоновки
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровкиКомпоновки, Истина);    
       //Создадим и инициализируем процессор вывода результата
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(Результат);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   
   Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,УникальныйИдентификатор);
   ДанныеРасшифровки = Адрес ;    
   
КонецПроцедуры
49 viktor_vv
 
06.12.11
18:13
Коментирую

// Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновки,УникальныйИдентификатор);
//    ДанныеРасшифровки = Адрес ;    

Выводит цифры.
50 mirrr
 
06.12.11
18:19
да, непонятно как-то. Код из (48) вставил - то же самое. Можете отчет скинуть?
51 viktor_vv
 
06.12.11
18:22
Из (13) ? Просто на работе нету конф под управляемые формы. Только пробная для обучения. Дома могу попробовать, вроде была УТ 11.
52 mirrr
 
06.12.11
18:24
(51) отчет Ваш, который работает, из (48), можете скинуть? Т.к. у меня тот же код, а результат прежний.
53 viktor_vv
 
06.12.11
18:28
В (13) добавил.

   ПроцессорВывода.УстановитьДокумент(ЭтаФорма.Результат);
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);  

   // Добавил
   Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиСКД,УникальныйИдентификатор);
   ДанныеРасшифровки = Адрес ;    

Все работает.
54 viktor_vv
 
06.12.11
18:30
Кроме этих двух строк ничего не добавлял. Платформа 8.2.13.219 .
55 mirrr
 
06.12.11
18:33
(54) да, действительно, скачал заново, добавил. Работает.
Я видимо чего-то упустил.
56 viktor_vv
 
06.12.11
18:53
Спасибо (35) , натолкнул на мысль :).
57 badboychik
 
29.12.11
08:17
Функция ПолучитьЗначениеРасшифровки(РАсшифровка)
   Поля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
   Возврат ?(Поля.КОличество()=0,Неопределено,Поля[0].Значение);
КонецФункции

"Расшифровка" - цифра, а на выходе уже будет например "СправочникСсылка.Номенклатура"