Добавление реквизита документа в расширении и вывод его в динамическом списке.

1. Alexander-K 23.02.21 21:28 Сейчас в теме
Добрый день!

УТ 11.4, платформа 8.3.18.1289.

Задача:
1. В расширении добавить новый реквизит для документа «Реализация товаров и услуг».
2. В форме «Список документов» обработки «Журнал документов продажи» в динамическом списке включить этот реквизит в список выводимых на форму.

Засада на 2-ом этапе. Данные о документах, попадаемых в динамический список, берутся из регистра сведений «Реестр документов», точнее из поля «Ссылка». В конфигурации это составное поле, а в расширении тип – «ЛюбаяСсылка». Поэтому в конструкторе запросов нельзя развернуть поле «Ссылка» и выбрать нужный реквизит. При попытке вручную добавить в динамический список «Ссылка.МойРеквизит» выходит «Ошибка получения информации набора данных».

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

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

Другое решение, это редактировать режим совместимости конфигурации, но при этом придётся включать возможность изменения конфигурации, чтобы расширить тип реквизита. Решение тоже плохое, т.к. частично теряется суть использования расширений. Этот метод точно работает, проверял. Если расширить типы данных реквизита в расширении, то «плюсик» в конструкторе с перечнем реквизитов объекта появляется.

Если есть опыт или идеи как решить эту задачу, не используя два предыдущих костыля, то буду очень благодарен :)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Alexander-K 23.02.21 21:29 Сейчас в теме
1
Прикрепленные файлы:
3. Alexander-K 23.02.21 21:29 Сейчас в теме
2
Прикрепленные файлы:
4. Alexander-K 23.02.21 21:29 Сейчас в теме
3
Прикрепленные файлы:
5. Alexander-K 23.02.21 21:29 Сейчас в теме
4
Прикрепленные файлы:
6. Alexander-K 24.02.21 09:39 Сейчас в теме
Программный метод работает, но не всегда это удобно...
В моей задаче код выглядит следующим образом:

&НаСервере
Процедура КАС_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	СписокДокументыПродажи.ТекстЗапроса = СтрЗаменить(СписокДокументыПродажи.ТекстЗапроса, "ВЫБРАТЬ", "ВЫБРАТЬ Ссылка.КАС_Проект КАК Проект,");

	НоваяКолонкаТаблицы = Элементы.Добавить("СписокДокументыПродажиПроект", Тип("ПолеФормы"), Элементы.СписокДокументыПродажи);
	НоваяКолонкаТаблицы.ПутьКДанным = "СписокДокументыПродажи.Проект"; 	
	
КонецПроцедуры
Показать
COMPER; user591389_aska_rabota; +2 Ответить
7. vat-74 166 20.12.21 12:52 Сейчас в теме
Под полными правами такой код прокатывает, а если пользователь не полноправный, тогда вываливается в ошибку.


НоваяКолонкаТаблицы.ПутьКДанным = "СписокДокументыПродажи.Проект";
по причине:
Недопустимое значение
8. vat-74 166 20.12.21 14:00 Сейчас в теме
(7) А не, все нормально. Только если сначала в расширение добавить форму, а потом создать реквизит, то в форме он появится только после обновлении формы.
9. 19autumn82 2 07.09.22 18:53 Сейчас в теме
Мне помогла вот эта статья https://infostart.ru/1c/articles/1152528/
Сделал в расширении и немного проще.
ФормуСписка добавляем в расширение.

&НаСервере
//
//
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	Если ЭтотОбъект.ИмяФормы = "Документ.КассоваяСмена.Форма.ФормаСписка" Тогда
		
		ДинСписок = ЭтотОбъект.Список;
		
		ТекстЗапроса = 
		"
		|	ДокументКассоваяСмена.Ссылка,
		|	ДокументКассоваяСмена.Расш1_Реквизит1 КАК Расш1_Реквизит1,";
		
		ДинСписок.ТекстЗапроса = СтрЗаменить(ДинСписок.ТекстЗапроса, "ДокументКассоваяСмена.Ссылка,", ТекстЗапроса);
		
		ПодчиненныйЭлемент                    = ЭтотОбъект.Элементы.Вставить("Расш1_Реквизит1", Тип("ПолеФормы"), ЭтотОбъект.Элементы.Список, ЭтотОбъект.Элементы.ГруппаДата);
		ПодчиненныйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
		ПодчиненныйЭлемент.ПутьКДанным        = "Список.Расш1_Реквизит1";
		ПодчиненныйЭлемент.Вид                = ВидПоляФормы.ПолеФлажка;
		ПодчиненныйЭлемент.КартинкаШапки      = БиблиотекаКартинок.Скрепка;
		ПодчиненныйЭлемент.ШиринаЭлемента     = 1;
		
	КонецЕсли;
	
КонецПроцедуры // Расш1_ПриСозданииНаСервереПосле()
Показать


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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот