Обработчики событий ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления
Область применения: управляемое приложение, мобильное приложение.
1. С помощью данных обработчиков модуля менеджера объекта можно переопределить представление объекта информационной базы, которое выводится в полях форм и в списках.
Пример реализации:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
Поля.Добавить(«Наименование»);
Поля.Добавить(«Дата»);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Наименование = ?(ПустаяСтрока(Данные.Наименование), НСтр(«ru = ‘Без описания'»), Данные.Наименование);
Дата = Формат(Данные.Дата, ?(ПолучитьФункциональнуюОпцию(«ИспользоватьДатуИВремяВСрокахЗадач»), «ДЛФ=DT», «ДЛФ=D»));
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(«ru = ‘%1 от %2′»), Наименование, Дата);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
2. Обработчики вызываются при любой необходимости получения представления какого-либо объекта информационной базы. Поэтому избыточные данные или неправильный выбор данных для формирования представления могут привести к существенному замедлению работы системы.
Также не следует выполнять в этих обработчиках запросы или получение объектов информационной базы (в том числе, запрещены обращения к реквизитам объектов ссылочных типов через точку, что приводит к чтению всего объекта целиком из базы данных). Также нежелательно использовать получение представления и реквизитов ссылок.
3. Обработчики могут быть также вызваны, в том числе, при записи и удалении объекта в режиме обмена данными. Представление объекта при этом запрашивается для формирования записи в журнал регистрации. Поэтому к ним предъявляются те же требования, что и к логике регистрации объектов — см. п. 1.2 Разработка планов обмена с отборами.
Эти требования также справедливы при разработке планов обмена для синхронизации с другими программами (не РИБ, по правилам конвертации) с помощью подсистемы «Обмен данными» Библиотеки стандартных подсистем.
Например, недопустимо обращаться к предопределенным элементам, которые еще могли быть не загружены в базу или, наоборот, уже удалены в ходе обмена данными:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Данные.ВидОбразования = Справочники.ВидыОбразованияФизическихЛиц.ПослевузовскоеОбразование Тогда
Представление = НСтр(«ru = ‘Послевузовское образование'»);
Иначе
.
4. При реализации обработчиков следует также учитывать требования о поддержке толстого клиента, управляемое приложение, клиент-сервер.
Источник
1С Произвольное представление документа
Для документа Реализация товаров и услуг необходимо сделать произвольное представление документа в зависимости от вида, который указал пользователь.
Задача
Для документа Реализация товаров и услуг организовать формирование представления документа в зависимости от значения реквизита Вид:
- Товары — «Реализация товаров » + + » от » + ;
- Услуги — «Акт выполненных работ » + + » от » + .
Решение
Для реализации воспользуемся двумя событиями, описанными в модуле менеджера документа:
ОбработкаПолученияПолейПредставления() — Определяет состав полей для формирования представления. По умолчанию содержит Дата и Номер, если необходимо определить свой состав полей, то необходимо переменной СтандартнаяОбработка присвоить значение Ложь, при этом Дата и Номер в состав полей не войдут — необходимо добавить самому.
ОбработкаПолученияПредставления() — Определяет само представление, если переменной СтандартнаяОбработка присвоить значение Ложь, то будет выполняться произвольный алгоритм формирования представления. Данные описанные в обработчике ОбработкаПолученияПолейПредставления(), будут преданны структурой Данные.
Источник
Обработка событий в менеджере не получается
«Управление торговлей», редакция 10.3 (10.3.14.3)
В модуле менеджера справочника вставляется код
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) экспорт
Сообщить(«Привет!»);
конецпроцедуры
и ничего не происходит при открытии справочника,выборе, быстром выборе. Может вне менеджера нужно что-то проставить?
Возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода ПолучитьДанныеВыбора.
Что такое СП? Мне нужно сузить справочник по данным из вызывающей формы. Справочник ОГРОМНЫЙ, но суженый список включает несколько 2-3 позиции, поэтому ставлю галочку БыстрыйВыбор. Только и без галочки не отрабатывается.
При отладке в ОбработкаПолученияДанныхВыбора не заходит, СтандартнаяОбработка=Ложь игнорируется.
(10) Свойства формы -> тип формы.
У тебя, очевидно, обычная.
Что лежит в параметрах — go СП.
Если конечная цель — обеспечить выбор из 2-3 позиций, готовь эти позиции и выбирай, используя, например, кнопку выбора из списка и свойство СписокВыбора.
Зачем примерчик, если все равно работать не будет? Ну дело твое, у меня, к сожалению, нет готового примера.
Если «в одном месте», можно еще накладывать отбор в форме выбора твоего справочника. Будет, конечно, отдельное окно, а не выпадающий список.
Где-то попадалась информация, что какие-то проблемы с отбором решались созданием дополнительной формы списка выбора. Я так, понимаю, что проблема в том, не генерируется нужное событие. Может это событие можно сгенерировать искусственно — обработчик же есть где прописать, просто к нему надо как-то подобраться (и что-то правильно передать).
А управляемую форму можно создать УТ10 или это фишка УТ11?
Да, фигня какая пресложная получается. Спасибо не бросаешь меня в муках.
Последний вопрос: я так понимаю, у тебя УТ11? Работает? Наш начальник отдела говорит, что с нее все бегут на УТ10. Врет наверное.
Источник
1С. Произвольное представление документа
Для документа Реализация товаров и услуг необходимо сделать произвольное представление документа в зависимости от вида, который указал пользователь.
Задача
Для документа Реализация товаров и услуг организовать формирование представления документа в зависимости от значения реквизита Вид:
- Товары — «Реализация товаров » + + » от » + ;
- Услуги — «Акт выполненных работ » + + » от » + .
Решение
Для реализации воспользуемся двумя событиями, описанными в модуле менеджера документа:
ОбработкаПолученияПолейПредставления() — Определяет состав полей для формирования представления. По умолчанию содержит Дата и Номер, если необходимо определить свой состав полей, то необходимо переменной СтандартнаяОбработка присвоить значение Ложь, при этом Дата и Номер в состав полей не войдут — необходимо добавить самому.
ОбработкаПолученияПредставления() — Определяет само представление, если переменной СтандартнаяОбработка присвоить значение Ложь, то будет выполняться произвольный алгоритм формирования представления. Данные описанные в обработчике ОбработкаПолученияПолейПредставления(), будут преданны структурой Данные.
Теперь пишем код по задаче:
И результат работы написанного кода, для документов с видом «Услуги»:
Источник
Переопределение представления ссылочного значения
Приветствую, коллеги! Хочу сразу оговориться данная статья не претендует на оригинальность и написана в первую очередь для новичков (либо кто подзабыл), в которой я хотел бы наиболее подробно описать все способы решения такой задачи, как переопределение представления ссылочного значения. Естественно речь идет об управляемых формах (не знаю насколько об этом уместно говорить в 2020), я такой статьи на ИС не нашел (может плохо искал) и решил восполнить данный пробел.
Итак, постараюсь разбить способы реализации в формате кейсов:
Кейс 1 «Переопределение представления в рамках всей БД»
Заказчик: — Сделайте, чтобы валюта выводилась вместе с кодом
Программист: — Везде? Во всех списках, формах и т.д.?
Данный способ изменяет представление ссылки абсолютно везде, где отображается наша ссылка т.е. действует в рамках всей БД.
Представление объекта по умолчанию настраивается на вкладке «Данные», раздел «Основное представление».
По умолчанию как мы видим, мы можем выбрать только Код или Наименование.
Открываем МодульМенеджера и создаем в нем процедуры ОбработкаПолученияПредставления
Если открыть отладку то мы увидим примерно следующую картину:
Переменная Данные представляет собой структуру, в которой находится Ссылка на объект и Поле основного представления.
Все, что нам необходимо сделать, это отключить стандартную обработку и сформировать необходимое представление. У нас уже есть значение реквизита Наименование, а Код мы можем вытянуть по ссылке, но подождите, так лучше не делать т.к. обращение к реквизиту через точку негативно сказывается на производительности, поэтому предварительно нам необходимо включить Код в поля представления. Для этого создаем процедуру ОбработкаПолученияПолейПредставления и добавляем необходимые поля.
В итоге весь модуль будет выглядеть примерно так:
И еще раз повторюсь, теперь ссылка на валюту будет отображаться так везде, и в списках, и в формах, и даже в запросе, при условии, что мы выбираем именно Представление:
Кстати для тех, кто дорабатывает типовые логичнее создать отдельную подписку на событие, где в качестве источника указать менеджер объекта и прописать соответствующие процедуры.
Кейс 2 «Переопределение представления в отчетах на СКД»
Заказчик: — Напишите вместо «Расход товара» — «Накладная» и время уберите у документа, оно мне не нужно
Программист: — Только в этом отчете?
В случае СКД разработчику предоставляются огромные возможности по оформлению полей и в данном случае все решается буквально одной настройкой. В схеме для необходимого поля используем настройку «Выражение представления»:
Указываем выражение: «Накладная » + Регистратор.Номер + » от » + Формат(Регистратор.Дата, «ДФ=dd.MM.yyyy»)
Кейс 3 «Переопределение представления в динамическом списке»
Заказчик: — Сделайте, чтобы в списке документов в наименовании склада в скобках отображался Регион
Программист: — Может Вам лучше сделать отдельную колонку?
Заказчик: — Нет, хочу в наименовании!
Установим произвольный запрос динамического списка и дополним полем «Регион»:
Всем известно, что 1С оптимизирует получение данных и исключает из запроса поля по отсутствующим колонкам, поэтому у поле Регион установим флаг «Использовать всегда»:
Создадим процедуру СписокПриПолученииДанныхНаСервере
Из справки: Обработчик события вызывается на сервере после получения данных динамическим списком, доступен, начиная с версии 8.3.10.
И пропишем туда примерное такой код:
Если не принципиально выводить в (скобках) то можно сделать следующим образом. (в моём примере номенклатура и ее код)
Через «Изменить форму» добавляем реквизит код, отключаем у колонки свойство отображать заголовок , добавляем группу колонок, у группы ставим группировка = в ячейке.
Теперь у нас в одной колонке отображается Номенклатура и код через запятую, быстро и без правок в конфигураторе.
Кейс 4 «Переопределение представления в таблице с источником данных табличная часть, таблица значений, дерево значений»
Заказчик: — Уберите из колонки «Счет» наименование документа и так же понятно, что это счет, оставьте только номер и дату
Программист: — Не вопрос
Нам требуется сохранить всю функциональность (выбор, очистка и т.д.), поэтому добавим дополнительную колонку, назовем ее СчетПредставление с типом Строка:
Напишем код, который будет заполнять данную колонку, нужным нам представлением, необходимо отработать открытие существующего документа, а также событие изменения ссылки, в итоге имеем примерно следующий код:
Наконец, настраиваем УсловноеОформление формы, примерно так:
Надеюсь, что статья окажется хоть кому-нибудь полезной, всем спасибо за внимание!
Источник