Нестандартная расшифровка СКД или расшифровка одного отчета СКД при помощи другого отчета СКД установкой пользовательских настроек (в управляемых формах, методика + пример для УТ11)

10.12.12

Разработка - СКД

Если требуется расшифровка одного отчета СКД при помощи другого отчета СКД, можно использовать представленный вариант. Казалось-бы все просто, однако дело усложняется тем, что с одной стороны, нужно предусмотреть разделение функционала между клиентом и сервером, с другой, нет достаточно четкого описания поведения передачи параметров расшифровки. В итоге: все решается "элементарно", но чтобы дойти до этого, лично мне пришлось убить уйму времени, так что экономьте своё ))). Под "нестандартной расшифровкой" имеется ввиду расшифровка данных одного вида отчета - другим видом, отличным от первого (с предварительной установкой нужных параметров и отборов в отчете-расшифровке).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Raschifrovka.zip
.zip 17,78Kb
352
352 Скачать (1 SM) Купить за 1 850 руб.

Обратите внимание, что добавлены еще два варианта реализации подобного функционала:

1. //infostart.ru/public/161994/, в реализации он еще проще, но имеет некоторые ограничения.

2. //infostart.ru/public/165599/, в реализации несколько сложнее, но зато позволяет использовать одновременно как стандартную так и нестандартную расшифровку, кроме того он позволяет устанавливать дополнительные параметры отчета-расшифровки.

Оба эти отчета основаны на текущем.

 

Итак начнем Smile

Предположим, что есть некий отчет, при расшифровке которого нужно использовать другой, отличный от первого отчет, или конкретнее:

При расшифровке отчета «НеликвидыНоменклатуры» хочется использовать отчет «АнализДвиженийТоваровСРезервамиУпак», оба отчета самопальные и внедерены в УТ11 (оба отчета во вложении к теме). Т.е. при клике на ячейке с номенклатурой исходного отчета, должен быть построен отчет-расшифровка уже установленным отбором по этой номенклатуре, до кучи можно установить другие параметры отчета расшифровки (например период и склад)

  1. Прежде всего, чтобы иметь возможность запрограммировать расшифровку нам понадобится ФормаОтчета «НеликвидыНоменклатуры», её необходимо добавить (элементы формы система добавит сама).
  2. Для элемента формы «Результат» в событии «ОбработкаРасшифровки» нужно добавить процедуру, например: «РезультатОбработкаРасшифровки»
  3. В модуле этой формы нужно наполнить процедуру содержимым:

Сначала нужно понять в каком же месте произошло событие, требующее расшифровки  (иначе говоря нужно узнать какую номенклатуру выбрал пользователь), т.к. «РезультатОбработкаРасшифровки» работает на клиенте, тут потребуется вызов серверной функции с передачей в качестве параметра переменной «Расшифровка»

Номенклатура = ПолучитьРасшифровкуНаСервере(Расшифровка, ЭтоГруппа);

Тут передается также переменная ЭтоГруппа – для возврата признака выбранной номенклатуры.

Сама функция:

&НаСервере

Функция ПолучитьРасшифровкуНаСервере(Расшифровка, ЭтоГруппа = Ложь)

               Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //Здесь основная «недокументированная фишка»: Переменная ДанныеРасшифровки не описана в хелпе, также не описано что Данные, нужно получать путем извлечения из временного хранилища,

               Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля(); //Тут получаем поля расшифровки, среди которых находим нужное.

               ПолеНоменклатура = Поля.Найти("Номенклатура");

               Если ПолеНоменклатура = Неопределено Тогда

                               Возврат Неопределено;

               Иначе

                               ЭтоГруппа = ПолеНоменклатура.Значение.ЭтоГруппа;

                               Возврат ПолеНоменклатура.Значение;

               КонецЕсли;

КонецФункции

Далее, в основной процедуре, нужно получить форму отчета, которым будем производить расшифровку:

ФормаДТСР = ПолучитьФорму("Отчет.АнализДвиженийТоваровСРезервамиУпак.Форма");

Получить настройки этого отчета:

Настройки = ФормаДТСР.Отчет.КомпоновщикНастроек.Настройки;

Найти и заполнить нужные параметры и отборы отчета-расшифровки:

ИДНастройкиПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период").ИдентификаторПользовательскойНастройки;  //Идентификатор пользовательской настройки "Период"

//Поиск доступных полей отбора по имени: 

ПолеСклад = Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Склад").Поле;

ПолеНоменклатура = Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Номенклатура").Поле;

//Поиск идентификаторов пользовательских настроек по доступным полям настроек (к сожалению только перебором):   

ИДЭлмОтбораСклад = "";

Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл

Если Элемент.ЛевоеЗначение = ПолеСклад Тогда ИДЭлмОтбораСклад = Элемент.ИдентификаторПользовательскойНастройки;         Прервать; КонецЕсли;

КонецЦикла;

ИДЭлмОтбораНоменклатура = "";

Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл

Если Элемент.ЛевоеЗначение = ПолеНоменклатура Тогда ИДЭлмОтбораНоменклатура = Элемент.ИдентификаторПользовательскойНастройки;     Прервать; КонецЕсли;

КонецЦикла;

//Установка отбора по Номенклатуре, которая была получена в самом начале процедуры: 

Коллекция = ФормаДТСР.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; //Пользовательские настройки

ЭлементОтбораНоменклатуры = Коллекция.Найти(ИДЭлмОтбораНоменклатура);

ЭлементОтбораНоменклатуры.ПравоеЗначение = Номенклатура;

ЭлементОтбораНоменклатуры.Использование = Истина;

ЭлементОтбораНоменклатуры.ВидСравнения = ?(ЭтоГруппа, ВидСравненияКомпоновкиДанных.ВИерархии, ВидСравненияКомпоновкиДанных.Равно);

               

//Установка отбора по Складу (из текущего отчета)

КоллекцияЗдесь = ЭтаФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;

НастройкиЗдесь = ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки;

ПолеСкладЗдесь = НастройкиЗдесь.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Склад").Поле;

ИДЭлмОтбораСкладЗдесь = "";

Для Каждого Элемент Из НастройкиЗдесь.Отбор.Элементы Цикл

Если Элемент.ЛевоеЗначение = ПолеСкладЗдесь Тогда ИДЭлмОтбораСкладЗдесь = Элемент.ИдентификаторПользовательскойНастройки;         Прервать; КонецЕсли;

КонецЦикла;

ЭлементОтбораСкладЗдесь = КоллекцияЗдесь.Найти(ИДЭлмОтбораСкладЗдесь);

ЭлементОтбораСклад = Коллекция.Найти(ИДЭлмОтбораСклад);

ЭлементОтбораСклад.ПравоеЗначение = ЭлементОтбораСкладЗдесь.ПравоеЗначение;

ЭлементОтбораСклад.Использование = ЭлементОтбораСкладЗдесь.Использование;

ЭлементОтбораСклад.ВидСравнения = ЭлементОтбораСкладЗдесь.ВидСравнения;

ИДНастройкиПериодЗдесь = НастройкиЗдесь.ПараметрыДанных.Элементы.Найти("Интервал").ИдентификаторПользовательскойНастройки;

КонецПериодаЗдесь = КоллекцияЗдесь.Найти(ИДНастройкиПериодЗдесь).Значение.ДатаОкончания;

//Установка параметра Период

Коллекция.Найти(ИДНастройкиПериод).Значение = Новый СтандартныйПериод(ДобавитьМесяц(КонецПериодаЗдесь, -12),КонецПериодаЗдесь);

Для заполнения параметров отчета снова придется вызвать серверную функцию:

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

Текст функции:

&НаСервере

Функция ОбработатьРасшифровкуНаСервере(Знач ОтчетХ, Знач РезультатХ, Знач ДанныеРасшифровкиХ, Знач ИДФормы)

                ОтчетОбъект = ДанныеФормыВЗначение(ОтчетХ, Тип("ОтчетОбъект.АнализДвиженийТоваровСРезервамиУпак")); //Для компоновки результата

                РезультатХ.Очистить();

                ОтчетОбъект.СкомпоноватьРезультат(РезультатХ, ДанныеРасшифровкиХ);                                  //Собственно формирование отчета

                АдресДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиХ, ИДФормы);             //тоже "недокументированная фишка", Запоминаем расшифровку (с ИД формы). Это необходимо, чтобы у отчета расшифровки в свою очередь тоже была расшифровка, но уже стандартная, ИДФормы - нужен, чтобы эта стандартная расшифровка сработала не один раз, а до тех пор пока существует указанная форма.

                Возврат Новый Структура("Результат,ДанныеРасшифровки", РезультатХ, АдресДанныеРасшифровки);         //Возвращаем результат и Адрес расшифровки, чтобы отчет-расшифровку тоже можно было расшифровать, но уже стандартной расшифровкой. Обратим внимание на то, что на клиенте извлечение из временного хранилища НЕ ПРОИЗВОДИТСЯ, система сама извлечет Данные Расшифровки, по мере необходимости.

КонецФункции

Далее, в основной процедуре, заполняем форму отчета-расшифровки и выводим его на экран:

                ФормаДТСР.Результат = СтруктураВозврата.Результат;

                ФормаДТСР.ДанныеРасшифровки = СтруктураВозврата.ДанныеРасшифровки;

                ФормаДТСР.Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;  //Избавление от надписи. "Отчет не сформирован, бла, бла, бла"

                ФормаДТСР.Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;

                ФормаДТСР.Открыть();

Коротко поясню что здесь делается:

      1. Получаем Номенклатуру, по которой пользователь произвел клик (вызов серверной функции "ПолучитьРасшифровкуНаСервере") 
      2. Получаем ФормуДТСР - отчета-расшифровки, по имени в метаданных
      3. Получаем Настройки ФормыДТСР (формы отчета расшифровки)
      4. По идентификаторам заполняем пользовательские настройки ФормыДТСР (формы отчета расшифровки), Номенклатуру - из п.1., Склад - из настроек исходного отчета, Период - отталкиваясь от Периода исходного отчета
      5. Производим формирование отчета расшифровки (вызов серверной функции "ОбработатьРасшифровкуНаСервере")
      6. Заполнение ФормыДТСР (формы отчета расшифровки) параметрами, которые вернула функция п.5
      7. Легкое наведение "лоска", и отображение заполненной  ФормыДТСР  (формы отчета расшифровки) 

Это собственно все. Все оказалось просто. Реализация во вложении, но комментариев в реализации значительно меньше )).

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159428    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    6996    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10804    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    8017    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. andrei.k 12.09.12 08:25 Сейчас в теме
Помещение во временное хранилище обработок и отчетов это, конечно, не "недокументированная фишка", но в данном воплощении несомненно плюс. Да и, кстати, с Днем программиста!
3. mxm2 1268 12.09.12 08:40 Сейчас в теме
(1) andrei.k, "Помещение во временное хранилище обработок и отчетов" - именно, что не отчетов, а данных расшифровки... как говорится это "две большие разницы, или четыре маленькие" (с); причем, если внимательно отсмотреть код, то увидите что часть работы по помещению расшифровки во временное хранилище и извлечению из него система "делает сама".

Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); //Здесь основная «недокументированная фишка»,
"ДанныеРасшифровки" - это в хелпе не описано...

АдресДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиХ, ИДФормы); //тоже "недокументированная фишка", Запоминаем расшифровку (с ИД формы)
До этого вообще долго доходил методом проб и ошибок, причем обратите внимание, что на клиентской строне нет извлечения из временного хранилища, т.к. это делает сама СКД, и еще: если здесь убрать ИДФормы, то все будет работать, но расшифровка будет успешно получена только 1 раз... а на второй - ошибка...

Вас тоже с 256 днем с начала года ).
wowik; purgin; dutlovva; bogdan_sukonnov; +4 Ответить
5. andrei.k 12.09.12 09:03 Сейчас в теме
(3) у меня никаких претензий к вам нет, здесь видно, что проведена большая работа. Я к тому, что у Временного хранилища тип произвольный, а значит что туда можно пихать все что угодно, помимо картинок я туда помещал обработки, но для других целей. Здесь же идея гениальная.
7. mxm2 1268 12.09.12 09:51 Сейчас в теме
(5) andrei.k, "у меня никаких претензий к вам нет" - дело не в этом, а в понимании кода.

"Здесь же идея гениальная.", если Вы про то помещение во временное хранилище данных расшифровки, то эта идея, от 1С... по мне так ничего идея, но в том то и подвох, что она недокуметирована и доходить до нее приходится через отладчик...
22. ksai 20.09.12 12:36 Сейчас в теме
(3)
"ДанныеРасшифровки" - это в хелпе не описано...

Интересно, существует ли вообще в природе адекватное полное описание всех возможностей СКД?
Среди официальной литературы 1С ничего подобного не встречал. :( Может кому-то больше повезло в этих поисках?
P.S. Книгу Хрусталевой не вспоминать, там только основы.
user1023595; +1 Ответить
2. mxm2 1268 12.09.12 08:26 Сейчас в теме
один из отчетов: "Неликвиды" уже засветился на "инфостарте": http://infostart.ru/public/137723/ (правда без расшифровки), по сути - это модификация того отчета, но с заострением внимания на программинге расшифровки.
4. RustIG 1747 12.09.12 09:01 Сейчас в теме
(0) я хотел бы уточнить смысл, потому что не сталкивался с таким: вы описываете такую ситуацию, что сначала формируется один отчет, в другом окне формируется второй отчет, из второго отчета вызывается расшифровка, но расшифровка настроена так, что используется заданный отбор первого отчета. Правильно я понимаю вас?
8. mxm2 1268 12.09.12 09:55 Сейчас в теме
(4) Rustig, "что используется заданный отбор первого отчета" - ага Плюс отбор по номенклатуре той ячейки, по которой произвели клик в форме первого отчета.
9. RustIG 1747 12.09.12 10:13 Сейчас в теме
(8) Насколько я понял из кода, отбор конкретно привязан к Складу, Номенклатуре, Периоду. Нельзя ли решить эту задачу через глобальные переменные: глСклад, глНомен, глПериод. Переменные задаются при формировании первого отчета, затем используются при формировании любых других отчетов. Или в вашей задаче заложен подводный камень, который я не вижу? Заранее спасибо за совместное обсуждение проблематики. С уважением, Рустем
10. mxm2 1268 12.09.12 10:33 Сейчас в теме
(9) Rustig, через глобальные - можно, но это:
1. в том числе потребует изменения в команде или форме отчета расшифровки
2. требует хранения этих переменных, доступных как на сервере так и на клиенте
3. менее универсально, т.к. возможно потребуется расширение списка переменных, скажем если потребуется отбор по Сегменту или Подразделению...
4. а если пользователь сначала открыл расшифровку по одной номенклатуре, а затем, не закрывая этой расшифровки, по другой?

Вижу смысл развития данной методики в виде создания универсального модуля для передачи параметров пользовательской настройки от отчета к отчету чтобы вместо:

ПолеСкладЗдесь = НастройкиЗдесь.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Склад").Поле;
ИДЭлмОтбораСкладЗдесь = "";
Для Каждого Элемент Из НастройкиЗдесь.Отбор.Элементы Цикл
Если Элемент.ЛевоеЗначение = ПолеСкладЗдесь Тогда ИДЭлмОтбораСкладЗдесь = Элемент.ИдентификаторПользовательскойНастройки; Прервать; КонецЕсли;
КонецЦикла;
ЭлементОтбораСкладЗдесь = КоллекцияЗдесь.Найти(ИДЭлмОтбораСкладЗдесь);
ЭлементОтбораСклад = Коллекция.Найти(ИДЭлмОтбораСклад);
ЭлементОтбораСклад.ПравоеЗначение = ЭлементОтбораСкладЗдесь.ПравоеЗначение;
ЭлементОтбораСклад.Использование = ЭлементОтбораСкладЗдесь.Использование;
ЭлементОтбораСклад.ВидСравнения = ЭлементОтбораСкладЗдесь.ВидСравнения;


Использовать, например:

УстановитьОтборПоОбразцу(КомпоновщикНастроек, "Склад", КомпоновщикНастроекЗдесь, "Склад")

Ну и для отбора по полю, в котором кликнули - тоже отдельную функцию. типа:

УстановитьОтборПо(КомпоновщикНастроек, "Номенклатура", Номенклатура)
27. mxm2 1268 11.12.12 10:05 Сейчас в теме
(9) Rustig, http://infostart.ru/public/165599/ - реализовано более наглядное заполнение параметров отчета-расшифровки.

(24) chemezov, http://infostart.ru/public/165599/ - еще "красивее".

(23) alexware, http://infostart.ru/public/165599/ - еще пара "ответов", которые сам долго искал.

(22) ksai, http://infostart.ru/public/165599/ - некое расширение возможностей, текущего отчета.

(21) DanDem, http://infostart.ru/public/165599/ - возможно Вам тоже поможет.

(6) w-divin, http://infostart.ru/public/165599/ - более "продвинутая" версия.

Это сообщение напоминает спам ))), но, надеюсь, будет полезно.
6. w-divin 12.09.12 09:46 Сейчас в теме
вот уж действительно огромное спасибо. экономия моего времени оказалась колоссальная ))) все откладывал реализацию подобной расшифровки. Оказалось не зря. Огромнейшее спасибо...
11. bmwx5 12.09.12 11:50 Сейчас в теме
практически типовой подход к Расшифровке на СКД, почти так же освещен в видео уроке Гилева "Расшифровка в отчетах на СКД". Пробежал по коду еще раз уложил в голове, видео урок все же советую
12. mxm2 1268 12.09.12 12:20 Сейчас в теме
(11) bmwx5, когда-то натыкался на это видео, но до конца у меня не получилось реализовать по видео. В частности "ДанныеРасшифровки", видимо там освещено, но не помню точно. Когда встала проблема расшифровки - видео не нашел, вот и пришлось изобретать велосипед. А потом выяснилось, что люди, в частности те с которыми я общаюсь, тоже не вполне знают эту тему. Вот и решил причесать и выложить. Подход действительно типовой. К стати ссылка на "живое" видео у Вас есть? Зашлите по-возможности.
14. bmwx5 12.09.12 16:37 Сейчас в теме
13. DoctorRoza 12.09.12 13:39 Сейчас в теме
Спасибо, нужное решение серьезной задачи!
15. jekapankin 12.09.12 21:48 Сейчас в теме
16. DanDem 17.09.12 05:39 Сейчас в теме
У меня такой вопрос.
Например если пользователь кликает не на "Номенклатуру", а на какой-нибудь показатель в отчете. Как в этом случае получить "Номенклатуру" что бы построить "свой отчет"(расшифровку этого показателя)
Вроде в статье я не нашел ответ на этот вопрос.
17. mxm2 1268 17.09.12 08:21 Сейчас в теме
(16) DanDem, в коде обработки расшифровки есть такие строки
Номенклатура = ПолучитьРасшифровкуНаСервере(Расшифровка, ЭтоГруппа);
Если Номенклатура = Неопределено Тогда Возврат; КонецЕсли;
СтандартнаяОбрабтка = Ложь;


Для упрощения восприятия я их не описал в тексте статьи, однако в отчете они есть;

Суть этих строк в том, что если в поле расшифровки содержится значение, отличное по типу от Номенклатуры, то отработает Стандартная расшифровка.

Теперь конкретно про Ваш вопрос:
Если, предполагается нестандартная расшифровка по другому показателю (т.е. при клике пользователя на другом поле), то его аналогичным образом можно "вытащить" из расшифровки.
18. DanDem 17.09.12 08:42 Сейчас в теме
(17) Суть этих строк я понял. Спасибо.
У меня как раз проблема "вытащить из расшифровки" необходимую информацию.
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

В Данные я не нахожу необходимой информации(либо не знаю как искать). Меня интересует схема извлечения необходимых данных.
20. mxm2 1268 17.09.12 08:50 Сейчас в теме
(18) DanDem, пробуйте через отладчик,
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
Эта строка вернет таблицу всех доступных расшифровок, в этой таблице можно искать по ИД. связи между расшифровками установить не удалось, возможно, её нет;
21. DanDem 17.09.12 10:14 Сейчас в теме
(20) ээээ... тупо стал лазить по строкам таблицы и на второй попытке (Элемент[10] :)) наткнулся на необходимое.
Попробовал организовать поиск по таблице через цикл - не получилось ничего хорошего. По ИД замечательно было бы. Как получить ИД не понятно.
mxm2,пасибо за наставления.
19. mxm2 1268 17.09.12 08:45 Сейчас в теме
(16) DanDem, "Как в этом случае получить "Номенклатуру" что бы построить "свой отчет"(расшифровку этого показателя)" - по-видимому в для этого случая нужно специальным образом фомировать расшифровку первого отчета, возможно, через макет, навскидку решить эту задачу у меня не получилось.
28. Spacer 363 04.01.13 19:34 Сейчас в теме
(16) DanDem, Возможно вам поможет мой код.
Я использую собственную функцию получения данных расшифровки, отличную от описанной в данной статье.

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

&НаСервере
Функция ПолучитьДанныеРасшифровки(Расшифровка, СтруктураДанных, ОбъектРасшифровки=Неопределено)

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


Пояснения:
ОбъектРасшифровки - это значение расшифровки колонки отчета на которой был произведен клик;
СтруктураДанных - структура в которой вы описываете состав данных которые вы хотите извлечь из расшифровки;
ЗначениеРасшифровки - структура содержащая данные извлеченные из расшифровки.

Таким образом, вы можете получить значение "Номенклатура", щелкнув на любой другой колонке,
например на колонке "Серия".
JinAir7460; VarNiko; newvideo; purgin; smit1c; dutlovva; Vanchez; CyberCerber; invertercant; ioanGR; Silverghoust; Харьковец; Algiz; h00k; kutuzov-2007; +15 Ответить
29. TitanLuchs 413 30.01.13 17:49 Сейчас в теме
(28) Отлично, как раз то что искал. Вариант ТС работает отлично, но не позволяет вытащить номенклатуру при клике на другую колонку.
30. TitanLuchs 413 30.01.13 17:54 Сейчас в теме
(28) И даже работает! Спасибо тебе, добрый фей, ты сэкономил мне лишний час времени!!!
35. mxm2 1268 31.01.13 10:31 Сейчас в теме
(30) TitanLuchs, (32) Leon99, http://infostart.ru/public/165599/ - тут тоже самое с выбором вариантов.
47. newvideo 20.02.20 11:25 Сейчас в теме
(28) Спасибо, помогло при извлечении данных по группировкам кликнутой ячейки и название колонки
48. newvideo 20.02.20 12:35 Сейчас в теме
(28) а как получить значение ячейки ресурса, Поле.Значение возвращает null??
52. N_K_S 44 18.10.24 11:42 Сейчас в теме
(28)
Немного доработал функцию, что бы была возможность искать значение полей расположенных в одной группировке.
&НаСервере
Функция ПолучитьДанныеРасшифровки(Расшифровка, СтруктураДанных)

	Данные = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
    ОбъектРасшифровки = Данные.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;

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

			Если ЗначениеЗаполнено(ЭлементДанных.Значение) Тогда 
				Продолжить;
			КонецЕсли;
			
			Родитель = Данные.Элементы[Расшифровка];
	        Пока Истина Цикл
	            МассивРодителей = Родитель.ПолучитьРодителей();
	            Если МассивРодителей.Количество() = 0 Тогда
	                Прервать;
	            КонецЕсли;
	            Родитель = Родитель.ПолучитьРодителей()[0];
	            Если ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
	                Если ЭлементДанных.Значение = Неопределено Тогда
	                    Поле = Родитель.ПолучитьПоля().Найти(ЭлементДанных.Ключ);
	                Иначе
	                    Поле = Родитель.ПолучитьПоля().Найти(ЭлементДанных.Значение);
	                КонецЕсли; 
	                Если Поле <> Неопределено Тогда
	                    СтруктураДанных.Вставить(ЭлементДанных.Ключ, Поле.Значение);
	                    Прервать;
	                КонецЕсли;
	            КонецЕсли;
	        КонецЦикла;
	    
	    КонецЦикла; 
	КонецЕсли; 
    
    Возврат СтруктураДанных;
    
КонецФункции 
Показать
23. alexware 01.10.12 05:10 Сейчас в теме
Скачал демонстрационные файлы. Спасибо. Нашел ответы на свои вопросы. До этого по этой теме читал только Хрусталеву. Там по расшифровке нужного для себя материала не нашел.
24. chemezov 48 22.11.12 09:34 Сейчас в теме
Понравилось, работает :)
25. mxm2 1268 22.11.12 10:24 Сейчас в теме
43. Cyberhawk 135 04.12.14 13:09 Сейчас в теме
Воспользовался данной методикой в УТ 11.1.6.26 под платформой 8.3.4.496 для рашифровки в типовой отчет, у которого не создана ни одна форма.
Изменения, которые пришлось внести в код автора публикации:
  • 1
    Вместо
    ФормаДТСР.Результат

    теперь
    ФормаДТСР.ОтчетТабличныйДокумент

  • 2
    Вместо
    ФормаДТСР.ДанныеРасшифровки

    теперь
    ФормаДТСР.ОтчетДанныеРасшифровки

  • 3
    Вместо
    ФормаДТСР.Элементы.Результат

    теперь
    ФормаДТСР.Элементы.РезультатИБыстрыеНастройки.ПодчиненныеЭлементы.ОтчетТабличныйДокумент

P.S. И почему-то (для озвученного примера в УТ 11.1.6.26) не заработал более простой способ из (25).
wmonref1; +1 Ответить
26. arian89 26.11.12 12:04 Сейчас в теме
31. Leon99 30.01.13 19:00 Сейчас в теме
32. Leon99 30.01.13 19:00 Сейчас в теме
33. Leon99 30.01.13 19:01 Сейчас в теме
я и не думал, что на инф. такие отзывчивые люди)
34. Leon99 30.01.13 19:01 Сейчас в теме
36. viktorinka777 11.02.14 15:56 Сейчас в теме
А есть подобная статья по обычному приложению?)
40. NittenRenegade 110 17.09.14 13:29 Сейчас в теме
(36) viktorinka777, тоже столкнулся с сабжем. Видимо, в случае неуправляемого приложения "незадокументированная фишка" не работает. Что внушает некоторые опасения от использования её и в УФ. А ну как новая версия платформы изменит своё поведение?
41. mxm2 1268 17.09.14 15:37 Сейчас в теме
(40) NittenRenegade, в неуправляемом все значительно проще, причем расшифровка подробно описана в стандартных желтых книжечках от 1С
42. NittenRenegade 110 17.09.14 14:01 Сейчас в теме
(41) похоже уже нашел и даже использовал:
ЗначенияПолейРасшифровки = ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля().Найти("Контрагент");
	Если ЗначенияПолейРасшифровки <> Неопределено Тогда
		
		Контрагент = ЗначенияПолейРасшифровки.Значение;
		
	КонецЕсли;


Учился я уже по УФ, так что не уверен что в моих желтых книжечках это было.
37. alex_shkut 63 19.02.14 16:07 Сейчас в теме
Кто может подсказать?
Пробую данный код (или одну из его модификаций)
База файловая, все отборы добавлены заранее в схему.
Все отборы и параметры заполняются программно перед компоновкой.
Свойство ИдентификаторПользовательскойНастройки у отборов всегда "" т.е. пустая строка.
Код:
ИДНастройкиПериодЗдесь = НастройкиЗдесь.ПараметрыДанных.Элементы.Найти("Интервал").ИдентификаторПользовательскойНастройки;
не работает...
38. mxm2 1268 19.02.14 16:29 Сейчас в теме
(37) alex_shkut, в текущей СКД (из которой производится расшифровка) есть параметр "Интервал" (он доступен в качестве пользовательских настроек)?
39. jills2001 27.03.14 10:52 Сейчас в теме
Коллеги, большое спасибо за подробную статью. Очень помогла понять принцип работы расшифровки в управляемом приложении, и сильно сэкономила время на изучение и реализацию данной темы.
44. Alligator84 74 25.08.17 11:07 Сейчас в теме
Доброго дня!
Большое спасибо автору и всем участникам.
Разработка действительно дельная.
У меня возникла одна проблема: в отчете, который выводится как расшифровка отсутствует стандартное поведение если пытаться вызвать стандартную расшифровку данного отчета. Описание ошибки: значение данных расшифровки отсутствует либо имеет неправильный тип
Кто сталкивался и решил данную проблему?
49. serega_ivchenko 28.04.20 14:19 Сейчас в теме
(44) Удалось побороть ошибку "значение данных расшифровки отсутствует либо имеет неправильный тип"?
45. akim2040 47 21.05.18 08:32 Сейчас в теме
Что бы не плодить кучу внешних отчетов, хочу вместо двух сделать 1, со вложенными схемами. Вот только не понял как обратиться к этой самой вложенной схеме для расшифровки?
46. Cерый 26 03.10.19 17:04 Сейчас в теме
В ОФ при компоновке (СкомпоноватьРезультат) во второй параметр процедура возвращает переменную, в которую будет записана информация расшифровки, достаточно в отчет расшифровки передать эту переменную и присвоить ее значение переменной ДанныеРасшифровки, это описано в Синтакс-помощнике, необязательно временными хранилищами ...
50. AndrewM 05.09.22 11:04 Сейчас в теме
У метода Получить() объекта ЭлементыРасшифровкиКомпоновкиДанных нет никаких параметров, в него нельзя подставить Расшифровку. Изменился синтаксис метода в новых версиях платформы? Или я что-то не так делаю? Моя платформа: 8.3.18.1520
Прикрепленные файлы:
51. AndrewM 05.09.22 11:37 Сейчас в теме
(50) отбой, мой косяк, мешала расшифровка, которую я задал через макет СКД
Оставьте свое сообщение