Хотелка: Представление поля агрегатного типа, вдогонку формулам ТаблицыЗначений

Автор Пиит, 26 марта 2024, 10:14

« назад - далее »

Пиит

В поле агрегатного типа Справочник, как известно, может выводится либо код, либо наименование элемента, а возможно ли обмануть форму и вывести произвольный текст?
Добавить в АтрибутФормы условный реквизит Представление, куда можно будет установить формулу/шаблон для отображения пользовательского представления элемента?

АЛьФ

Можно сделать предопределенную процедуру ПриПолученииПредставленияОбъекта(). Если придумать что делать с тормозами. Сейчас первое что приходит в голову - сделать аналогично отсечению в ПриПолученииСистемнойКомандыГлавнымОкном. Как-то так:

Процедура ПриПолученииПредставленияОбъекта(Объект, Представление, Отсекать)
    Если ТипЗначенияСтр(Объект) = "Справочник" Тогда
        Если Объект.Вид() = "Номенклатура" Тогда
            Представление = "(" + СокрЛП(Объект.Актикул) + ") " + СокрЛП(Объект.Наименование);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    Отсекать = 1; // для объектов этого тип.вид больше в процедуру не заходит
КонецПроцедуры

Либо обратный вариант - задавать предварительно явно какие тип.вид отправляются в процедуру.
Как-то так:

глСервис.ДобавитьФункциюПредставления("Справочник.Номенклатура", "глПолучитьПредставлениеНоменклатуры");
глСервис.ДобавитьФункциюПредставления("Документ.Реализация", "глПолучитьПредставлениеРеализации");
И в глобальнике:
Функция глПолучитьПредставлениеНоменклатуры(Объект)
    Возврат "(" + СокрЛП(Объект.Актикул) + ") " + СокрЛП(Объект.Наименование);
КонецФункции

Функция глПолучитьПредставлениеРеализации(Объект)
    Возврат "" + СокрЛП(Объект.НомерДок) + " от " + Объект.ДатаДок + " :: " + Объект.Контрагент;
КонецФункции

Так вижу...

Пиит

Цитата: АЛьФ от 26 марта 2024, 11:08Можно сделать предопределенную процедуру ПриПолученииПредставленияОбъекта()...
...
Либо обратный вариант - задавать предварительно явно какие тип.вид отправляются в процедуру.
...
Так вижу...

Второй вариант более фундаментальный, это как ПланРаскраскиПоУмолчанию, установил и забыл.

Однако, возможно, для отдельных форм, кому-то пригодилось бы и событие.

Кстати, а ПланРаскраскиПоУмолчанию возможно таким образом установить отдельно для Справочников, Журналов и т.д.? Статусы элементов (помечен на удаление и тд) и документов (проведен и тд) отличаются, и раскраски требует отдельной для каждого типа мн.части.



АЛьФ

Цитата: Титович Эдуард от 26 марта 2024, 11:31Кстати, а ПланРаскраскиПоУмолчанию возможно таким образом установить отдельно для Справочников, Журналов и т.д.? Статусы элементов (помечен на удаление и тд) и документов (проведен и тд) отличаются, и раскраски требует отдельной для каждого типа мн.части.

Нет. Это слишком сильно нагрузить все таблицы. Уж очень всяких ненужных проверок каждый раз, даже там, где они не нужны.

АЛьФ

По этому функционалу будет фича. 1С ведет какой-то кэш представлений объектов. Сейчас  делаю справочники. Если открыть форму списка справочника или иным способом обратиться к получению представления, а потом вызвать метод установки собственной функции, то элементы, для которых было уже получено представление, в нашу функцию не попадают.
Кэш сбрасывается при записи элемента.

Фича отменяется, нашел сброс кэша.

Пиит

Цитата: АЛьФ от 02 апреля 2024, 21:03По этому функционалу будет фича. 1С ведет какой-то кэш представлений объектов.

Помните такой фокус?

НачатьТранзакцию();
Спр.Новый();
Спр.Наименование = "Привет, я - призрак элемента";
Спр.Записать();
РекивизитНаФорме = Спр.ТекущийЭлемент();
ОтменитьТранзакцию();

Форма для собственого поля элемента точно кэширует данные, причем вместе с его реквизитами, а вот про поле в списке я даже не подумал.
В принципе, если заранее ПриНачалеРаботыСистемы установленное представление для вида будет работать, этого вполне достаточно для работы.

Пиит


АЛьФ


Пиит


Пиит


АЛьФ

Цитата: item от 02 апреля 2024, 23:05
Цитата: АЛьФ от 02 апреля 2024, 22:46Качай тестовую сборку.
АЛьФ, без обид, версия 198 уже была, и даже 199 была в прошлый раз


У тестовой сборки я версию не меняю. Сейчас идёт 198. Уйдет в качестве релиза эта, тестовая будет 199.
Если это путает, могу тестовую сборку как-то отдельно помечать.

Пиит

Цитата: АЛьФ от 02 апреля 2024, 23:18Если это путает, могу тестовую сборку как-то отдельно помечать.
Не, не нужно, не знал просто.
Это нечто!

Злоп

Сервис.УстановитьФункциюПредставления("Справочник.Товары", "глПредставлениеТовара"); // круть!
представление будет работать норм
  • - в ТЗ
  • - в ТЧ документов
  • - в формах списков журналов/справочников
  • - в СЗ
.. есть какие-то ограничения где не будет работать такое представление?
.
если где-то в коде будет типа
СтрокаДляВыводаВОтчет = ""+СсылкаИлиОбъект; // будет новое представление или штатное?

Пиит

Ведь уже начал сочинение, чего добру пропадать.)

Реализация произвольных представлений позволит не только информативно отобразить известные сложные составные элементы, такие как ПартииТоваров, Договоры и др. Возможности гораздо шире.

Имитирую в своих конфигурациях собственные типы данных, а именно вложенные структуры. Платформа не позволяется описывать свои типы и тем более структуры, но если очень хочется, то и не грех. Например, известную конструкцию Счет, Субконто1,.., СубконтоХ, которая набила уже оскомину за годы, по возможности заменяю ссылкой на справочник "Корреспонденции" соответсвующей структуры, и ПриНачалеВыбораЗначения этой ссылки открываю не список справочника на выбор, а форму для ввода полей структуры, в которой реализованы те самые постылые Счет, Субконто1,.., СубконтоХ, процедуры ПриВыбореСчета, ПриВыбореСубконто и всё такое. Результатом же ввода является ссылка на составной элемент вида Корреспонденция, созданный либо найденный по уникальному идентификатору структуры как суммы идентификаторов ее составляющих. Таким образом я избавляюсь от множественного повторения популярной конструкции в десятках документов и справочников, появляется возможность использовать такую структуру в константах и истории, что как изместно, невозможно стандартными средствами системы из-за неопределенного вида Субконто, и кроме того, проводить реорганизацию корреспонденций в следствии изменения состава и порядка субконто в плане счетов.
Схема рабочая, но есть слабое звено - отсутствует представление для такого элемента-структуры. Записывать в наименование через разделитель представления агрегатных составляющих есть полная глупость, и в общем случае решения этого вопроса не... было до сегодняшнего дня.

Пиит

Цитата: Злоп от 02 апреля 2024, 23:28если где-то в коде будет типа
СтрокаДляВыводаВОтчет = ""+СсылкаИлиОбъект; // будет новое представление или штатное?

Охренеть, оно Спр.ТекущийЭлемент() выводит с указанным представлением!

Шайтан, не иначе )
А еще говорят, ФОРМекс