Отсутствует отображение для типа 'РеквизитФормы'

1. Scar_rus 09.02.24 10:17 Сейчас в теме
Была поставлена задача сделать так, чтоб в таблице на форме по нажатию кнопки могло появляется N необходимых колонок, где N равно количеству строк в табличной части выбранного элемента справочника, при этом колонки должны заполниться из указной эксель таблицы.

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

В голову не пришло ни чего лучше кроме как передать реквизит создаваемой колонки на клиент через структуру. И передавать массив со списком колонок, собственно по нему и проходиться и через него соединять данные эксельки с полями таблицы на форме. Но при отладке вылезла ошибка "Отсутствует отображение для типа 'РеквизитФормы'" и что сделать чтоб исправить ее я не очень понимаю.

Если мое решение слишком заумное и есть вариант проще, буду рад услышать.

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

	Для каждого Цена из ТЗ Цикл
		НовыйРеквизит = Новый РеквизитФормы("Цена" + Цена.НазваниеЦены, ОписаниеТиповДляРеквизита, "Таблица", Цена.НазваниеЦены, Истина);                                                           				  	
		ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);  
		Результат.Вставить(Цена.НазваниеЦены,НовыйРеквизит);
	КонецЦикла;
	ИзменитьРеквизиты(ДобавляемыеРеквизиты); 
	
	Для каждого Цена из ТЗ Цикл
		НовыйЭлемент = Элементы.Добавить(Цена.НазваниеЦены, Тип("ПолеФормы"), Элементы.Таблица);
		НовыйЭлемент.ПутьКДанным = "Таблица.Цена" + Цена.НазваниеЦены;
		НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;	
		НовыйЭлемент.КнопкаОчистки = Истина;	
	КонецЦикла;
	
	Результат.Вставить("НачалоСтрокНоменклатуры",ТЗ[0].НачалоСтрокНоменклатуры);
	Результат.Вставить("КолонкаНаименования",ТЗ[0].КолонкаНаименования);
	Результат.Вставить("КолонкаКодаАртикула",ТЗ[0].КолонкаКодаАртикула);
	
	МассивЦен = ПреобразоватьТаблицуЗначенийВМассивСтруктур(ТЗ);
	Результат.Вставить("МассивЦен",МассивЦен);
	
	Возврат Результат;
КонецФункции   



&НаКлиенте
Процедура ОткрытьФайлExcel(Команда)
	
		
	//Чтоб не кидать лишнего, убрал отсюда создание COMОбъекта и подсчет КоличествоСтрок эксельки
	 
	ПараметрыКолонок = ОткрытьФайлExcelНаСервере(); 
		
	Для НомерСтроки = ПараметрыКолонок.НачалоСтрокНоменклатуры По КоличествоСтрок Цикл
		НоваяНом = Таблица.Добавить(); 	
		НоваяНом.НаименованиеФайл = Excel.Cells(НомерСтроки, ПараметрыКолонок.КолонкаНаименования).Text; 
		НоваяНом.АртикулКодФайл = Excel.Cells(НомерСтроки, ПараметрыКолонок.КолонкаКодаАртикула).Text;
		//Здесь должен быть код заполнения цен НоваяНом или заполнения всей колонки, но то как я не могу передать 
                //все необходимые данные я еще до этого не дошел
	КонецЦикла; 
	
	
	Excel.DisplayAlerts = 0; 
	Excel.Quit();
	Excel.DisplayAlerts = 1;
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 09.02.24 10:57 Сейчас в теме
(1)
Результат = Новый Структура;

...
НовыйРеквизит = Новый РеквизитФормы("Цена" + Цена.НазваниеЦены, ОписаниеТиповДляРеквизита, "Таблица", Цена.НазваниеЦены, Истина);
...
Результат.Вставить(Цена.НазваниеЦены,НовыйРеквизит);
... Возврат Результат;

РеквизитФормы существует только на сервере. Его нельзя передавать на клиент.
Ошибка про это.
3. Scar_rus 09.02.24 11:04 Сейчас в теме
(2) А как мне тогда найти созданные колонки?
4. spacecraft 09.02.24 11:27 Сейчас в теме
(3) Смотря что нужно.
Есть имя. Первый параметр конструктора РеквизитФормы это имя реквизита.
Есть ПутьКРеквизиту. Вот его и можно передавать.
5. soft_wind 09.02.24 11:35 Сейчас в теме
возьмите уже существующую обработку загрузки данных из Екселя
ЗагрузкаДанныхИзТабличногоДокумента_УФ
она как раз произвольное количество колонок может обрабатывать
(но опять же если сможете с ней разобраться, как она работает)
6. Scar_rus 09.02.24 13:33 Сейчас в теме
(5)
ЗагрузкаДанныхИзТабличногоДокумента_УФ

Я видел его, но мне нужно выводить в Таблицу Значений на форме, а не в ТабличныйДокумент
Оставьте свое сообщение

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