![]() |
|
Расшифровка отчета на СКД и открытие другого отчета с заданными параметрами | ☑ | ||
---|---|---|---|---|
0
LivingStar
11.06.19
✎
14:28
|
УТ 11 (11.4.7.150). Отчет "Отличия товары организаций и товары на складах 1.1".
Необходимо по двойному клику на ответе открывать отчет "Ведомость по товарам организации" и "Ведомость по товарам на складах". Пока задача в определении правильной обработке расшифровки. Формирую отчет. Двойное нажатие по полю. Попадаю в процедуру, // &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) ДанныеРасшифровкиКомпоновки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); ПоляРасшифровки = ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля(); СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ПоляРасшифровки); СтруктураОтбора = ПолучитьДанныеРасшифровкиЯчеекСтроки(Элемент, СтруктураОтбора); КонецПроцедуры // Функция ПолучитьРекурсивноСтруктуруОтбора(ТекущееПоле, СтруктураОтбора = Неопределено) Если СтруктураОтбора = Неопределено Тогда СтруктураОтбора = Новый Структура; КонецЕсли; Если ТипЗнч(ТекущееПоле) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда Для Каждого ТекЭл Из ТекущееПоле.ПолучитьПоля() Цикл СтруктураОтбора.Вставить(ТекЭл.Поле, ТекЭл.Значение); КонецЦикла; КонецЕсли; Для Каждого ТекЭл Из ТекущееПоле.ПолучитьРодителей() Цикл ПолучитьРекурсивноСтруктуруОтбора(ТекЭл, СтруктураОтбора); КонецЦикла; Возврат СтруктураОтбора; КонецФункции // Но происходит ошибка {ВнешнийОтчет.ОтличияТоварыОрганизацийИТоварыНаСкладах_1_1.Форма.ФормаОтчета.Форма(8)}: Ошибка при вызове метода контекста (ПолучитьРекурсивноСтруктуруОтбора) СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ПоляРасшифровки); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ЗначенияПолейРасшифровкиКомпоновкиДанных' |
|||
1
LivingStar
11.06.19
✎
14:30
|
(0+) То есть ПоляРасшифровки в функцию ПолучитьРекурсивноСтруктуруОтбора
я должен передавать как элемент массива структур? |
|||
2
LivingStar
11.06.19
✎
14:55
|
Не могу создать массив на клиенте
// &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) ДанныеРасшифровкиКомпоновки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); ПоляРасшифровки = ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля(); // МАС = Новый Массив; оншибка {ВнешнийОтчет.ОтличияТоварыОрганизацийИТоварыНаСкладах_1_1.Форма.ФормаОтчета.Форма(8)}: Ошибка при вызове метода контекста (ПолучитьРекурсивноСтруктуруОтбора) СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ПоляРасшифровки); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ЗначенияПолейРасшифровкиКомпоновкиДанных' |
|||
3
LivingStar
11.06.19
✎
14:59
|
(2) Эта ошибка отпадает.
С этим все норм. Перезапустил 1с. Почему то читался старый код даже после сохранения. |
|||
4
LivingStar
11.06.19
✎
15:01
|
Почему не могу передать массив?
// &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) ДанныеРасшифровкиКомпоновки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); ПоляРасшифровки = ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля(); // МАС = Новый Массив; СТР = Новый Структура; СТР.Вставить("ПоляРасшифровки", ПоляРасшифровки); МАС.Добавить(СТР); // //СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ПоляРасшифровки); СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(МАС); СтруктураОтбора = ПолучитьДанныеРасшифровкиЯчеекСтроки(Элемент, СтруктураОтбора); КонецПроцедуры {ВнешнийОтчет.ОтличияТоварыОрганизацийИТоварыНаСкладах_1_1.Форма.ФормаОтчета.Форма(14)}: Ошибка при вызове метода контекста (ПолучитьРекурсивноСтруктуруОтбора) СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(МАС); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'Value': форма: Элемент имя: {http://v8.1c.ru/8.1/data/core}Value по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ЗначенияПолейРасшифровкиКомпоновкиДанных' |
|||
5
hhhh
11.06.19
✎
15:04
|
(4) ну в ПолучитьПоля() смотрите, что там? похоже не совсем массивы.
|
|||
6
LivingStar
11.06.19
✎
15:15
|
(5) В ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля()
- ЗначенияПолейРасшифровкиКомпоновкиДанных |
|||
7
LivingStar
11.06.19
✎
15:16
|
(6+) Я же их потом ложу в структуру, потом в массив, потом передаю дальше.
|
|||
8
LivingStar
11.06.19
✎
15:17
|
||||
9
LivingStar
11.06.19
✎
15:26
|
Сейчас ломается на строке ТекущееПоле.ПолучитьРодителей()
Подскажите пожалуйста, как быть? {ВнешнийОтчет.ОтличияТоварыОрганизацийИТоварыНаСкладах_1_1.Форма.ФормаОтчета.Форма(28)}: Метод объекта не обнаружен (ПолучитьРодителей) Для Каждого ТекЭл Из ТекущееПоле.ПолучитьРодителей() Цикл // &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) ДанныеРасшифровкиКомпоновки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); ПоляРасшифровки = ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля()[0]; // МАС = Новый Массив; СТР = Новый Структура; СТР.Вставить("ПоляРасшифровки", ПоляРасшифровки); МАС.Добавить(СТР); // //СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ПоляРасшифровки); СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(МАС); СтруктураОтбора = ПолучитьДанныеРасшифровкиЯчеекСтроки(Элемент, СтруктураОтбора); КонецПроцедуры // &НаСервере Функция ПолучитьРекурсивноСтруктуруОтбора(ТекущееПоле, СтруктураОтбора = Неопределено) Если СтруктураОтбора = Неопределено Тогда СтруктураОтбора = Новый Структура; КонецЕсли; Если ТипЗнч(ТекущееПоле) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда Для Каждого ТекЭл Из ТекущееПоле.ПолучитьПоля() Цикл СтруктураОтбора.Вставить(ТекЭл.Поле, ТекЭл.Значение); КонецЦикла; КонецЕсли; Для Каждого ТекЭл Из ТекущееПоле.ПолучитьРодителей() Цикл ПолучитьРекурсивноСтруктуруОтбора(ТекЭл, СтруктураОтбора); КонецЦикла; Возврат СтруктураОтбора; КонецФункции // |
|||
10
LivingStar
11.06.19
✎
15:29
|
Адаптирую код обычных форм под управляемые.
Как получается там будет на месте .ПолучитьРодителей() ? |
|||
11
LivingStar
11.06.19
✎
15:47
|
Никому не знакома проблема?
|
|||
12
LivingStar
11.06.19
✎
17:26
|
Подскажите пожалуйста для управляемых форм как получить данные строки по двойному клику?
|
|||
13
hhhh
11.06.19
✎
21:06
|
(12) там и так прекрасно всё выводится по двойному клику, без всякого кода, понятно, что вы фанат, вы любите херней страдать.
|
|||
14
LivingStar
12.06.19
✎
00:46
|
(13) Мне нужно расшифровать строку отчета СКД другим отчетом. Передав в него параметры строки на которой производится щелчек. Как это сделать?
|
|||
15
hhhh
12.06.19
✎
05:06
|
(14) ну не передавайте значения типа ЗначенияПолейРасшифровкиКомпоновкиДанных
пнондавайте туда обфчные типы. Массивы там, или структуры. |
|||
16
LivingStar
12.06.19
✎
06:05
|
(15) Можно поподробнее? Не совсем понятно.
Мне нужно по щелчке на ячейке открыть другой отчет и передать туда параметры строки текущего отчета. Накачал наработок, только что то ничего не подошло. ( |
|||
17
LivingStar
12.06.19
✎
06:16
|
||||
18
LivingStar
12.06.19
✎
09:47
|
Получилось сделать вот такое решение.
Но это все типовыми механизмами. Как это сделать самому? При двойном клике на ячейку, получать её название. И передавать параметры строки и отчета в другой отчет, открывая его? &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) ПолноеИмяОтчета = "ОтличияТоварыОрганизацийИТоварыНаСкладах_1_3"; КлючТекущегоВарианта = "Отчет.ОтличияТоварыОрганизацийИТоварыНаСкладах_1_3"; МенюОтчетов = Новый Массив; МенюДействий = Новый Массив; // ПараметрыОтчета_1 = Новый Структура; ПараметрыОтчета_1.Вставить("Имя", "ВедомостьПоТоварамОрганизаций"); ПараметрыОтчета_1.Вставить("Заголовок", НСтр("ru = 'Ведомость По Товарам Организаций'")); ПараметрыОтчета_1.Вставить("ИмяОтчета", "Отчет.ВедомостьПоТоварамОрганизаций"); // ПараметрыОтчета_2 = Новый Структура; ПараметрыОтчета_2.Вставить("Имя", "ВедомостьПоТоварамНаСкладах"); ПараметрыОтчета_2.Вставить("Заголовок", НСтр("ru = 'Ведомость По Товарам На Складах'")); ПараметрыОтчета_2.Вставить("ИмяОтчета", "Отчет.ВедомостьПоТоварамНаСкладах"); // ПоляРасшифровки = Новый Массив; ПоляРасшифровки.Добавить("Номенклатура"); ПоляРасшифровки.Добавить("Характеристика"); ПоляРасшифровки.Добавить("Склад"); ПоляРасшифровки.Добавить("ДатаДоступности"); // ПараметрыОтчета_1.Вставить("ПоляРасшифровки", ПоляРасшифровки); ПараметрыОтчета_2.Вставить("ПоляРасшифровки", ПоляРасшифровки); // СписокПараметров = Новый Массив; СписокПараметров.Добавить("ЕдиницыКоличества"); // ПараметрыОтчета_1.Вставить("СписокПараметров", СписокПараметров); ПараметрыОтчета_2.Вставить("СписокПараметров", СписокПараметров); // МенюОтчетов.Добавить(ПараметрыОтчета_1); МенюОтчетов.Добавить(ПараметрыОтчета_2); // Если МенюОтчетов.Количество() > 0 Или МенюДействий.Количество() > 0 Тогда ПараметрыРасшифровки = Новый Структура; ПараметрыРасшифровки.Вставить("МенюОтчетов", МенюОтчетов); ПараметрыРасшифровки.Вставить("МенюДействий", МенюДействий); ПараметрыРасшифровки.Вставить("Расшифровка", Расшифровка); КомпоновкаДанныхКлиент.ОбработкаРасшифровкиСДополнительнымМеню(ЭтаФорма, ПараметрыРасшифровки, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры // Процедура ВывестиЗначениеГруппировки(ТекРасшифровка) МассивРодителей = ОтчетДанныеРасшифровки.Элементы[ТекРасшифровка].ПолучитьРодителей(); Для СчРодителей = 1 По МассивРодителей.Количество() Цикл ПолеРодитель = МассивРодителей[СчРодителей-1]; Если Число(ПолеРодитель.Идентификатор) > 0 Тогда //Получим текущее поле Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда МассивПолей = ПолеРодитель.ПолучитьПоля(); ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля(); КонецЕсли; Для СчПолей = 1 По МассивПолей.Количество() Цикл Поле = МассивПолей[СчПолей-1]; //Выведем значения текущей расшифровки Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение); //Рекурсивный вызов процедуры. РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор; ВывестиЗначениеГруппировки(РасшифровкиВыше); КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетМетаданные = ОтчетОбъект.Метаданные(); НастройкиОтчета = Новый Структура; НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя()); КонецПроцедуры //// |
|||
19
LivingStar
12.06.19
✎
09:48
|
(18) ВывестиЗначениеГруппировки() - лишняя
|
|||
20
LivingStar
12.06.19
✎
10:08
|
Почему я вот тут ничего не получаю? Как нужно?
&НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) // РасшифровкаЗначение = ПолучитьЗначениеРасшифровки(Результат.ТекущаяОбласть.Расшифровка); // // &НаСервере Функция ПолучитьЗначениеРасшифровки(КодРасшифровки) Если КодРасшифровки = Неопределено тогда Возврат Неопределено; КонецЕсли; ДР = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки); КоллекцияПолей = ДР.Элементы[КодРасшифровки].ПолучитьПоля(); Если КоллекцияПолей.Количество() = 0 тогда Возврат Неопределено Иначе Возврат КоллекцияПолей[0].Значение; КонецЕсли; КонецФункции // |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |