Имя: Пароль:
1C
 
СКД ошибка расшифровки
0 kavonline
 
09.02.11
16:45
При программном формировании отчета:
СхемаКомпоновкиДанных = Отчеты.АналитикаДвиженийНоменклатуры.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
Результат = Элементы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

выдает ошибку ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
по причине:
Несоответствие типов (параметр номер '3')
не пойму в чем мой косяк, помогите плз.
иначе расшифровка в отчете не работает
1 kavonline
 
09.02.11
17:36
Если перед ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки) вывести
ТипЗнч(ДанныеРасшифровки) то получим Строка. Помогите плз, в чем косяк может быть? Уже весь инет облазил.
2 kavonline
 
10.02.11
13:22
У реквизита формы отчета ДанныеРасшифровки стоит тип Строка, видимо дело в этом. Подскажите плз какой должен быть тип?
3 Megas
 
10.02.11
13:29
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Закоменть строчку
4 kavonline
 
10.02.11
13:38
Ну если закоментить то тим Строка (это же реквизит формы) и ошибка ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки) т.к. ДанныеРасшифровки неправильный тип. Если например сделать
ДанныеРасшифровки1=Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки1);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки1);
то ошибки нет но при клике по ячейке отчета выскакивает окошко с цифрой, видимо какой то идентификатор.
5 Megas
 
10.02.11
13:54
(4) У реквизита формы?
Удали его нафиг.. тыж создаёшь новый !
6 Megas
 
10.02.11
13:54
(5) к (2)
7 kavonline
 
10.02.11
14:11
Ну тогда ошибок нет, но по щелчку вылетает окошко с какой то цифиркой, как ее обработать подскажите плз.
8 Megas
 
10.02.11
14:26
Это и есть расшифровка.
   

Если Расшифровка <> Неопределено  тогда
       ИндексРасшифровки = Число(Расшифровка);
       ОбработкаРасшифорки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

       ЭлементРасшифровкиДанных = ДанныеРасшифровки.Элементы[ИндексРасшифровки];
       ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
       Если ЭлементРасшифровкиДанныхПоля.Поле = "Контрагент" тогда
           ОбработкаРасшифорки.ОткрытьЗначение(ЭлементРасшифровкиДанных.Идентификатор,Новый ПолеКомпоновкиДанных(ЭлементРасшифровкиДанныхПоля.Поле));
       КонецЕсли;
   иначеЕсли Область.Текст = "Контрагент" или  Область.Текст = "Город" или Область.Текст = "Тип цен" тогда
       Если  Область.Текст = "Контрагент" тогда
           ПолеПорядка = "Контрагент";
       ИначеЕсли Область.Текст = "Город" тогда
           ПолеПорядка = "Город";
       ИначеЕсли Область.Текст = "Тип цен" тогда
           ПолеПорядка = "ТипЦен";
       КонецЕсли;
       ПолеПорядка = Новый ПолеКомпоновкиДанных(ПолеПорядка);
       
       КомпоновщикНастроек.Настройки.Порядок.Элементы.Очистить();
       
       ЭлементПорядка                     =  КомпоновщикНастроек.Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
       ЭлементПорядка.Использование     = истина;
       ЭлементПорядка.Поле             = ПолеПорядка;
       ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
                                                                                           
       Сформировать();
   КонецЕсли;
   

Как простенький пример, а так почитай в книжке Про СКД
9 Megas
 
10.02.11
14:27
ИндексРасшифровки = Число(Расшифровка);
       ОбработкаРасшифорки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

       ЭлементРасшифровкиДанных = ДанныеРасшифровки.Элементы[ИндексРасшифровки];
       ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
       Если ЭлементРасшифровкиДанныхПоля.Поле = "Контрагент" тогда
           ОбработкаРасшифорки.ОткрытьЗначение(ЭлементРасшифровкиДанных.Идентификатор,Новый ПолеКомпоновкиДанных(ЭлементРасшифровкиДанныхПоля.Поле));
       КонецЕсли;


Ещё можно не ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
а ЭлементРасшифровкиДанных.ПолучитьРодителя() //так вроде

В общем смотри в отладчике
10 Megas
 
10.02.11
14:29
Пишется это в Событии "Выбор" или "ОбработкаРасшифровку" у Табличного дркумента
11 Megas
 
10.02.11
14:33
в (8) я просто сморю куда кликнул , и если в шапку то сортировку делаю, а если по контрагенту то открываю справочник.

Это тупо и топорно, а так по клеточке используя
ЭлементРасшифровкиДанных.ПолучитьПоля() и Получая родителей можно получить любые данные ячейки (строка , колонка.)
12 kavonline
 
10.02.11
14:36
Да, спс за пример, но ДанныеРасшифровки недоступно т.к. реквизит формы я грохнул, как теперь его предеть в процедуру РезультатОбработкаРасшифровки()
13 Megas
 
10.02.11
14:44
(12) мм.. а попробуй ещё не писать

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

или объяви его вне процедур

тоесть
перем ДанныеРасшифровки
...
..
всякие функции
и в конце

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
14 kavonline
 
10.02.11
14:52
Ну так не будет работать, а вот в ПриСозданииНаСервере() проходит. Я пытаюсь сделать так
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
РезультатОбработкаРасшифровкиНаСервере(Расшифровка);
КонецПроцедуры

&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка)
ТипЗнч(ДанныеРасшифровки) // выдает Неопределено
КонецПроцедуры    
Может надо через ВременноеХранилище перекидывать?

Кстати, все это реализуется в модуле формы
15 Megas
 
10.02.11
14:55
Чёто то мутиш =)
Кстати я 8.2 не знаю...
16 kavonline
 
10.02.11
15:00
да уж, приколол :)
17 kavonline
 
10.02.11
16:48
Я домучал вопрос, если кому интересно то описываю свое решение:
1. Реализуется все в модуле формы отчета
2. Реквизит формы ДанныеРасшифровки (Строка) переименовал в АдресДанныхРасшифровки.
3. Процедура СформироватьОтчетНаСервере()
СхемаКомпоновкиДанных = Отчеты.АналитикаДвиженийНоменклатуры.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);
Результат = Элементы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
4. Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПолучитьАдресСКД());
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(АдресДанныхРасшифровки,ИсточникДоступныхНастроек);
Результ = Неопределено;
Параметр = Неопределено;
ДоступныеДействия = Новый Массив;
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
ОбработкаРасшифровки.ВыбратьДействие(Расшифровка,Результ,Параметр,ДоступныеДействия);
ОткрытьЗначение(Параметр);
5. Функция ПолучитьАдресСКД() (на сервере)
СхемаКомпДанных = Отчеты.АналитикаДвиженийНоменклатуры.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
АдресСКД = ПоместитьВоВременноеХранилище(СхемаКомпДанных);
Возврат АдресСКД;
Если кто то порекомендует лучший вариант буду благодарен