Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Расшифровка в отчете на базе СКД, который формируется программно          
Рейтинг 5 V
Vofka Подменю пользователя
сообщение 22.04.14, 20:17
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Я когда-то писал заметку (тиц) по расшифровке в СКД. Сейчас я дополню то, что писал и напишу немного нового.

В двух словах о проблеме. Есть макет типа "схема компоновки данных". Там программно заполняются параметры и компонуется отчет. Но в результате даже у ссылочных полей не работает расшифровка. Как сделать что бы заработало - читайте далее.

Отчет формируется по нажатию кнопки кодом типа такого:

    НастройкиСКД = КомпоновщикНастроек.Настройки;
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    ДанныеРасшифровкиОтчета = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    НастройкиСКД.ПараметрыДанных.Элементы.Найти("Номенклатура").Значение = Справочники.Номенклатура.НайтиПоКоду("1"); // заполняем какие-то параметры

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

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


Пояснения по коду:
ДанныеРасшифровкиОтчета - это переменная модуля формы отчета (то, что объявляется через ключевое слово Перем).
ЭлементыФормы.Результат - Результат это имя табличного документа куда выводится отчет.

Остальное вроде вопросов вызывать не должно.

Вариант 1.

На табличном документе идет в обработчики событий и делаем обработчик на событие ОбработкаРасшифровки. Процедура обработчик будет иметь вид похожий на это:

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

    МассивДоступныхДействий = Новый Массив;
    МассивДоступныхДействий.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);

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


Результат работы этого когда: двойной клик на любой ячейке ссылочного типа производит открытие этого элемента. Будь то документ, элемент справочника или ещё что-нибудь.

Вариант 2.

Все так же идем в обработчики события поля табличного документа и устанавливаем обработчик на ОбработкаРасшифровки:

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

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


Тут полчаем информацию о том куда пользователь счелкнул. Зная это мы можем получить значение, которое находится в расшифровке. Дальше с ним можем делать что угодно. В этом примере результат не отличается от варианта 1, т.к. и в том и в том случае мы просто хотим открыть значения каких-то ссылок. Но если бы, например, мы получали текст или число, которое нужно было как-то хитро обработать, то в варианте №2 мы можем это сделать.

Вместо выводов: если вы хотите открывать ссылочные типы, тогда какой вариант использовать - дело ваше. Преимущество первого над вторым, я вижу, только в компактности и универсальности кода. Как насчет быстродействия, например, я не мерял. Но если же вам нужно получить результат расшифровки и как-то его обработать дополнительно - вы можете воспользоваться вариантом №2.

Как-то так smile.gif .

Сообщение отредактировал Vofka - 22.04.14, 20:20

Спасибо сказали: NewLifeMan,

gavlexx Подменю пользователя
сообщение 07.11.16, 18:52
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ 22.04.14, 21:17 * ,

Это отлично работает в обычной форме.
А в управляемой не получается совместить в одной процедуре получение макета и переменную ДанныеРасшифровкиОтчета. Ведь эта переменная должна быть объявлена в модуле формы как клиентская, а не серверная. А "Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)" нужно выполнять на сервере и обратно на клиент его не получается передать.

Как программно работать с расшифровкой в СКД на управляемых формах?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 21:15
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!