Необрабатываемый тип параметр расшифровки
Работа с расшифровкой в табличном документе
Для чего используется расшифровка и как ей пользоваться
Для того чтобы воспользоваться расшифровкой, пользователю необходимо навести курсор мыши на нужную ячейку. Если для данной ячейки существует расшифровка, то при этом должен измениться вид курсора. Расшифровка может быть вызвана при помощи двойного щелчка левой кнопкой мыши, либо при помощи клавиши Enter. Дальнейшее действие по обработке расшифровки будет зависеть от того, какая расшифровка была предусмотрена в программе.
Получение расшифровки возможно только в том случае, если табличный документ находится в режиме «Только просмотр» или в режиме защиты. В остальных случаях при двойном щелчке мыши табличный документ будет переходить в режим редактирования содержимого ячейки.
Заполнение расшифровки
Расшифровка представляет собой значение, которое присвоено свойству «Расшифровка» области ячеек табличного документа или рисунку табличного документа. Заполнить данное свойство можно одним из следующих способов:
1. Непосредственно присвоив данному свойству значение.
Этот способ может быть удобным в том случае, если табличный документ заполняется при помощи встроенного языка без использования макета и построителя отчета.
Пример:
В данном примере расшифровка устанавливается первой ячейке первой строки поля табличного документа.
2. Использовать параметр расшифровки и метод «Вывести».
Часто табличный документ заполняется при помощи макета и метода табличного документа «Вывести». В таком случае в ячейке макета можно указать свойство «Параметр расшифровки». При вызове метода «Вывести», этот параметр будет использован для заполнения значения свойства расшифровки.
Пример:
Отчет выводится при помощи макета. В некоторой ячейке области «Запись» табличного документа содержится параметр расшифровки «Номенклатура». Результатом выполнения следующего кода будет помещение в данную ячейку значения переменной Номенклатура.
Отметим, что с параметром расшифровки работа ведется также как и с обычными параметрами, размещенными в ячейках макета.
В случае если необходимо поместить в значение расшифровки несколько значений, следует поместить нужные значения в коллекцию, после чего поместить коллекцию в расшифровку.
Пример того, как это можно сделать, воспользовавшись объектом Структура:
Аналогично выполняется заполнение расшифровки рисунка табличного документа.
Обратите внимание на свойство «ИспользованиеРасшифровки» ячейки табличного документа. Это свойство указывает, для какой области будет возможно вызвать расшифровку. Если данное свойство имеет значение «Ячейка», обработка расшифровки будет выполняться только для этой ячейки. Если «Строка», то расшифровка будет обрабатываться для всей строки, в которой расположена данная ячейка. Если же данное свойство имеет значение «Без обработки», то расшифровка для данной ячейке не будет обрабатываться вовсе, даже если ячейка будет содержать значение расшифровки.
Обработка расшифровки
После того, как расшифровка заполнена, следует позаботиться об ее обработке.
Если табличный документ открыт в отдельном окне, никаких действий по обработке расшифровки выполнить нельзя. В этом случае расшифровка будет работать в соответствии со своим поведением по умолчанию – то есть, будет открыто значение расшифровки. Для ссылочных типов будет открыта основная форма объекта, для других типов будет отображена строка, представляющая значение расшифровки.
Если табличный документ отображается в поле табличного документа, возможно переопределение поведения расшифровки. Для этого нужно создать обработчик события ОбработкаРасшифровки поля табличного документа. Это событие будет вызываться при каждой попытке пользователя вызвать расшифровку. В обработчик события будет передано поле табличного документа, для которого вызвана расшифровка, значение расшифровки и флаг стандартной обработки расшифровки. Если стандартная обработка расшифровки не нужна, следует присвоить флагу СтандартнаяОбработка значение «Ложь».
Пример:
В тексте обработчика события можно выполнить любые действия по обработке расшифровки. Например, запустить на исполнение некоторый отчет, передав ему в качестве параметра значение расшифровки.
Использование параметра расшифровки в макете
Доброго времени суток!
По двойному щелчку на ячейке с расшифровкой можно вызвать свою процедуру. Для реализации этого следует выполнить несколько условий:
1)Вывод табличного документа должен осуществляться в объект ПолеТабличногоДокумента;
2)Должно быть присвоено значение свойству ячейки ПараметрРасшифровки, например, РасшифровкаКонтрагента.
3)Параметру расшифровки РасшифровкаКонтрагента присваивается заполненный при формировании табличного документа нужными значениями СписокЗначений или чаще Структура. В частности, может передаваться имя стандартного отчета конфигурации и параметров, которые нужно задать в форме отчета, например, период дат, номер счета и т.д. А потом этот отчет вызывается как процедура.
4)Для объекта ПолеТабличногоДокумента свойство ТолькоПросмотр нужно установить в значение Истина.
5)Код пользовательской процедуры помещается в процедуру
ПолеТабличногоДокумента1ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка), и первой строкой в ней должна быть такая:
СтандартнаяОбработка = Ложь;
Приведу небольшой примерчик, открывающий для «щелкнутого» контрагента подчиненный справочник.
Процедура КнопкаСформироватьНажатие(Кнопка)
Контрагенты = Справочники.Контрагенты;
Выборка = Контрагенты.Выбрать();
Таб = ЭлементыФормы.ПолеТабличногоДокумента1;
Макет = ПолучитьМакет(«Макет»);
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа = Ложь Тогда
Область = Макет.ПолучитьОбласть(«Строка»);
Область.Параметры.Контрагент = Выборка.Наименование;
.
СтруктураРасшифровки = Новый Структура;
СтруктураРасшифровки.Вставить(«Контрагент»,Выборка.Ссылка);
СтруктураРасшифровки.Вставить(«. «. );
.
Область.Параметры.РасшифровкаКонтрагента = СтруктураРасшифровки;
ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(Область);
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.ПолеТабличногоДокумента1.ТолькоПросмотр = Истина;
КонецПроцедуры
Процедура ПолеТабличногоДокумента1ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Договоры = Справочники.Договоры.ПолучитьФормуСписка();
Договоры.ПараметрОтборПоВладельцу = Расшифровка.Контрагент;
Договоры.Открыть();
КонецПроцедуры
Программирование в 1С для всех
Разберем ещё один вопрос, который часто возникает у начинающих программистов при разработке печатных форм с применением табличных документов. Иногда, возникают случаи, когда в табличном документе необходимо использовать расшифровку: сделать так, чтобы при двойном клике на ячейку печатной формы выходила какая-либо информация. В этой статье я расскажу о двух простых способах применения расшифровки в табличном документе. В первом случае, мы будем просто открывать основную форму элемента справочника при двойном клике мышкой по ячейке с названием этого справочника. Во втором случае, мы будем выводить строку с номером и датой документа при двойном клике по ячейке в шапке, где эта информация отображается.
Расшифровка в табличном документе это возможность вывести дополнительную информацию по двойному клику мышки на какую-либо ячейку документа. Если событие расшифровки специально как-то не обрабатывается (а обрабатывать расшифровку можно только тогда, когда мы выводим табличный документ на форме, а не в отдельном окне), то может быть отработано два варианта: или будет открыта основная форма объекта, если мы имеем дело с ссылочным типом, или просто выйдет строка для всех остальных типов. Поскольку в нашем примере, табличный документ открывается в отдельном окне, а не где-то на управляемой форме, то в расшифровку мы будем передавать или ссылочный тип, или какую-нибудь строку.
Для этой статьи я использую макет табличного документа, сделанный ранее.
Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД
Как известно, подключаемый внешний отчет, если не указывать свою форму отчета, будет использовать общую формуОтчета из конфигурации,
Всем она хороша,но вот добавить свою расшифровку в такой отчет как я думал затруднительно, но разработчики позаботились и об этом.
Ниже предоставлен код который можно добавить в расширение либо в сам общий модуль «ОтчетыКлиентПереопределяемый», Он снабжен комментариями поэтому понять сто к чему можно будет из кода.
Все тестировалось на 1С ERP 2.2.4
Специальные предложения
(3)Ну собственно там, идет обработка того что в коде приведено, они ищет в отчете поля, сравнивает с тем что прописали вы, в случае удачного сосоставления он добавляет пункт меню в расшифровку стандартную и обраьотчик
Обновление 27.09.18 18:20
См. также
Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)
27.01.2016 84516 Serginio 113
Взаимодействие с api Честный знак (Молочная продукция)
Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.
30.08.2021 1006 user5300 32
Изменение расшифровки макета СКД до компоновки
Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.
12.07.2021 2231 Yashazz 6
В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.
21.06.2021 4103 quazare 4
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо
28.12.2020 8276 comol 31
Чтение CSV (быстрое)
Почему то из гугла до сих пор нет ссылки на код процедуры быстро читающей csv. Загрузка из файла CSV c помощью ADODB.Connection провайдера Microsoft.Jet.OLEDB.
31.03.2021 1434 kuzyara 4
Последний раз про срез последних (на каждую дату в запросе)
Срез последних на каждую дату в запросе. Известные факты о задаче: часто встречается на испытаниях соискателей на работу программистом 1с, постоянно провоцирует споры об оптимальном решении. В данном тексте приводятся замеры производительности различных вариантов решения задачи.
15.02.2021 9631 randomus 47
Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя
14.12.2020 19984 SizovE 2
Универсальные функции с примерами использования Промо
26.02.2016 42995 unichkin 47
11.12.2020 975 SizovE 6
Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)
30.11.2020 5569 SizovE 4
Выгрузка HTML описаний с картинками (Base64) товаров на сайт/интернет-магазин/B2B, разберем регулярное выражение получения тега body, ПолучитьHTML, ФорматированныйДокумент
Расшифровки при программном формировании отчета на СКД
Сабж. Надо программно сформировать отчет на СКД.
Ок, лезем на любой ресурс, коих полно, копируем код, правим под свои нужды и вуаля! Отчет работает, только при попытке расшифровать выскакивает какое то окошко с цифрами 🙁 Что делать?
Решение
На самом деле в этом окошке нам сообщается идентификатор расшифровки компоновки данных. Имея этот идентификато и данные расшифровки, мы можем сделать все, что душе угодно.
Рассмотрю случай формирования СКД из обработки (см. в скрепке). Добавил макет СКД, на форму вывел два реквизита «Контрагент» и «ТабДок». Важно иметь доступ к данным расшифровки при обработке расшифровки табличного документа, поэтому добавим переменную, которую будет перебрасывать в процедуру программного формирования отчета. Ну и опишем саму процедуру обработки расшифровки.
Обработка расшифровки открывает значение, но вы можете прописать любое действие.
Скачать файлы
Специальные предложения
На УФ надо положить «Данные расшифровки» во временное хранилище. Далее:
Если ТипЗнч(Структура.Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Структура.Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;
На форму добавить реквизит «ДанныеРасшифровки» с типом «Строка»
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
Если Контрагент.Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;
// Создаем СКД. Устанавливаем параметры
СхемаКД = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»);
ПараметрКД = Настройки.ПараметрыДанных.Элементы.Найти(«Контрагент»);
ПараметрКД.Значение = Контрагент;
// Создаем Макет КД
КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКомпоновкиДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, Настройки, ДанныеРасшифровкиКомпоновкиДанных);
// Создаем Процесор КД
ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
ПроцессорКД.Инициализировать(МакетКД,, ДанныеРасшифровкиКомпоновкиДанных);
// Выводим
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных);
&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Данные = Сервер(Расшифровка);
ОткрытьЗначение(Данные);
&НаСервере
Функция Сервер(Расшифровка)
Если ТипЗнч(Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;