Программный вывод таблицы значений на управляемую форму 8.2

21.06.13

Разработка - Работа с интерфейсом

Обработка демонстрирует пример вывода таблицы значений с произвольной структурой на управляемую форму 8.2. Вывод таблицы реализован в виде отдельной процедуры, в которую таблица значений передается в качестве параметра. Это позволяет встроить её в общий модуль, и удобно использовать при необходимости.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Программный вывод ТЗ на форму
.epf 7,33Kb
324
324
1 SM
Скачать Купить за 1 850 руб.

Внешняя обработка. Таблица значений добавлена в реквизиты и элементы формы (для размещения на форме в нужном месте). Структура таблицы не определена (колонок нет). Вывод осуществляется одной процедурой, в качестве параметра в которую передаётся таблица значений. Дополнительно можно для созданной таблицы определить обработчики событий.

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    17678    24    6    

38

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    5467    smielka    37    

96

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    12512    789    elcoan    47    

110

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10697    158    acces969    31    

120

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4630    kalyaka    6    

32

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9387    1    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Algiz 22.06.13 23:42 Сейчас в теме
Код в одну процедуру можно было и без обработки выложить...если уж выкладываете
Ranetka; user1804494; arti4k; v.l.; ixijixi; +5 Ответить
22. v.l. 435 11.07.19 18:18 Сейчас в теме
(1) Школота зоробатывоет.
2. petrov_al 10 24.06.13 09:21 Сейчас в теме
Можно подробнее, алгоритм что вы используете?
3. hiduk 125 24.06.13 10:29 Сейчас в теме
(2) petrov_al,

&НаСервере
Процедура ВывестиТаблицуНаФорму(УФ,ИмяТЗНаФорме,ТЗ, ТЗОбработчиковСобытий = Неопределено) Экспорт
	
	// СОЗДАНИЕ РЕКВИЗИТОВ ФОРМЫ
	МассивДобавляемыхРеквизитов = Новый Массив; 
	
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяТЗНаФорме ,Колонка.Заголовок));	
	КонецЦикла; 
	
	МассивУдаляемыхРеквизитов = УФ.ПолучитьРеквизиты(ИмяТЗНаФорме);
	МассивИменУдаляемыхРеквизитов = Новый Массив;
	
	Для каждого Элемент Из МассивУдаляемыхРеквизитов Цикл
		МассивИменУдаляемыхРеквизитов.Добавить(ИмяТЗНаФорме + "." + Элемент.Имя);
	КонецЦикла; 
	
	УФ.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивИменУдаляемыхРеквизитов); 
	
	// СОЗДАНИЕ ЭЛЕМЕНТОВ ФОРМЫ
	Для каждого Элемент Из МассивУдаляемыхРеквизитов Цикл
		УдаляемыйЭлемент = УФ.Элементы.Найти(ИмяТЗНаФорме + Элемент.Имя);
		УФ.Элементы.Удалить(УдаляемыйЭлемент);
	КонецЦикла; 
	
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		НоваяКолонка = УФ.Элементы.Добавить(ИмяТЗНаФорме + Колонка.Имя, Тип("ПолеФормы"), УФ.Элементы[ИмяТЗНаФорме]); 
		НоваяКолонка.Заголовок = Колонка.Заголовок; 
		НоваяКолонка.ПутьКДанным = ИмяТЗНаФорме + "." + Колонка.Имя;
		НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода; 
		НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;    
	КонецЦикла; 	
	
	УФ[ИмяТЗНаФорме].Загрузить(ТЗ);
	
	// Привязка обработчиков событий
	Если ТЗОбработчиковСобытий = Неопределено Тогда
		Возврат;
	КонецЕсли;	
	
	Для Каждого Строка Из ТЗОбработчиковСобытий Цикл
		УФ.Элементы[Строка.ИмяЭлемента].УстановитьДействие(Строка.ИмяСобытия, Строка.ИмяЭлемента + Строка.ИмяСобытия); 
	КонецЦикла;	
	
КонецПроцедуры
Показать
user1988332; ПодводныйТ; uchenik; chemezov; user717534; Alex1c; JinAir7460; LuxVeritatis; Stref75; Alien_job; ilialin; aparinp; as-lubava; user774630; igormiro; tinkerbell; purgin; lost-s0u1; jura_t_vega; Annita; абв-вба; dusha0020; balbesinka; Lena272; gigapevt; tolyan_ekb; Styvi; Ulfhedhinn; KRJ; acanta; ikar-nikolay; dour-dead; Evmil; pchelkatoo; petrov_al; +35 Ответить
15. Crush 22.05.14 10:19 Сейчас в теме
Спасибо! Программно добавил колонки в тз и долго мучился с выводом их на форму. Постоянно была Ошибка при установке значения атрибута контекста (ПутьКДанным) по причине: Недопустимое значение.

Оказалось что перед добавлением элементов формы нужно еще реквизиты формы добавить (ИзменитьРеквизиты).

Если бы в коде (3) была проверка на ПрограммноСозданныйРеквизит да и еще для внешней обработки, то юзал бы Ваш код "as is":)
4. nixel 1423 26.06.13 13:59 Сейчас в теме
Типовое создание элементов/реквизитов управляемой формы.
В чем уникальность публикации? Или просто как визуализация книжек по упр. интерфейсу?
5. hiduk 125 26.06.13 14:39 Сейчас в теме
Уникальности никакой нет, на неё и не претендую. Обработка находится в нужное время, в нужном месте, пользуется спросом. У самого на днях стояла такая задача. Пришлось порыться в интернете, литературы под рукой не было. На инфостарте не нашел.

Особенностью обработки считаю универсальную процедуру, т.к. в инете есть примеры с конкретной структурой.
6. morfeus 07.11.13 05:40 Сейчас в теме
(5) hiduk, Большое спасибо за помощь!!! В 82 из мелочи любят выдумывать сложности. Туда сюда гонять реквизиты и т д. Не понимаю зачем так заморачиваться... Сам не додумался. Большое спасибо! Получилось с вашей помощью !!!!
7. bayce 46 05.01.14 15:01 Сейчас в теме
Код очень универсальный получился.
Очень удобно.
8. Styvi 6 06.02.14 12:43 Сейчас в теме
Спасибо за готовое решение...
Скопировал код, буду использовать в ближайшее время - ибо пока обходился без заполнения таблиц на УФ...
9. prodines 107 10.02.14 11:38 Сейчас в теме
Я пробовал вышеуказанный код - у меня не работало удаление таблицы значений из управляемой формы. В итоге сделал свою модификацию:

Удаление таблицы значений из управляемой формы

Удалять реквизиты таблицы значений нет нужды - достаточно удалить саму таблицу значений.

&НаСервере
Процедура УдалитьТЗ(УФ, НомерТЗ="1") Экспорт
	
	ИмяТаблицы = "МояТаблицаЗначений";
	
	ИмяТЗНаФорме = ИмяТаблицы + НомерТЗ;
	// Если удаляемая таблица значений действительно присутствует на данной управляемой форме
	Если НЕ УФ.Элементы.Найти(ИмяТЗНаФорме) = Неопределено Тогда
		// Сначала удалим реквизит "Таблица значений" из УФ
		МассивИменУдаляемыхРеквизитов = Новый Массив;
		
		МассивИменУдаляемыхРеквизитов.Добавить(ИмяТЗНаФорме);
		
		УФ.ИзменитьРеквизиты(,МассивИменУдаляемыхРеквизитов);
		
		УдаляемыйЭлемент = УФ.Элементы.Найти(ИмяТЗНаФорме);
		
		Если НЕ УдаляемыйЭлемент = Неопределено Тогда
			// Теперь удалим элемент формы, который служил для визуального отображения
                        // удалённого реквизита УФ "Таблица значений"
			УФ.Элементы.Удалить(УдаляемыйЭлемент);
		
		КонецЕсли;
				
	КонецЕсли;
	
КонецПроцедуры
Показать


Ну и до кучи - процедура вывода таблицы значений на управляемую форму:

&НаСервере
Процедура _ПечатьТЗ_УФ(ТЗ, Форма, НомерТЗ="1") Экспорт
//http://bilbo.com.ua/tablitsa-znacheniy-v-upravlyaemoy-forme.html	

УдалитьТЗ(Форма, НомерТЗ); //моё добавление

//Имеем исходную таблицу значений с именем "ТЗ"
//Добавляем реквизит формы
ИмяТЗ = "МояТаблицаЗначений" + НомерТЗ;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяТЗ, Новый ОписаниеТипов("ТаблицаЗначений"), "", ИмяТЗ));

Для Каждого Колонка Из ТЗ.Колонки Цикл
	МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяТЗ, Колонка.Заголовок)); 
КонецЦикла;

Форма.ИзменитьРеквизиты(МассивРеквизитов);

//Помещаем Элементы на форму 
Таблица = Форма.Элементы.Добавить(ИмяТЗ, Тип("ТаблицаФормы")); 
Таблица.ПутьКДанным = ИмяТЗ; 
Таблица.Отображение = ОтображениеТаблицы.Список; 

Для Каждого Колонка Из ТЗ.Колонки Цикл

	НовыйЭлемент = Форма.Элементы.Добавить(ИмяТЗ + "_" + Колонка.Имя, Тип("ПолеФормы"), Таблица); 
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; 
	НовыйЭлемент.ПутьКДанным = ИмяТЗ + "." + Колонка.Имя;

КонецЦикла;

//переносим таблицу значений на форму 
Форма.ЗначениеВРеквизитФормы(ТЗ,ИмяТЗ);
	
КонецПроцедуры
Показать
user1804494; v.l.; detro; lost-s0u1; Steelvan; Valerich; jobkostya1c_ERP; mangy; Styvi; +9 Ответить
23. marat.coolls 28.08.19 15:11 Сейчас в теме
(9)
&НаСервере
Процедура УдалитьТЗ(УФ, НомерТЗ="1") Экспорт

ИмяТаблицы = "МояТаблицаЗначений";

ИмяТЗНаФорме = ИмяТаблицы + НомерТЗ;
// Если удаляемая таблица значений действительно присутствует на данной управляемой форме
Если НЕ УФ.Элементы.Найти(ИмяТЗНаФорме) = Неопределено Тогда
// Сначала удалим реквизит "Таблица значений" из УФ
МассивИменУдаляемыхРеквизитов = Новый Массив;

МассивИменУдаляемыхРеквизитов.Добавить(ИмяТЗНаФорме);

УФ.ИзменитьРеквизиты(,МассивИменУдаляемыхРеквизитов);

УдаляемыйЭлемент = УФ.Элементы.Найти(ИмяТЗНаФорме);

Если НЕ УдаляемыйЭлемент = Неопределено Тогда
// Теперь удалим элемент формы, который служил для визуального отображения
// удалённого реквизита УФ "Таблица значений"
УФ.Элементы.Удалить(УдаляемыйЭлемент);

КонецЕсли;

КонецЕсли;

КонецПроцедуры
Показать







СПАСИБО ОГРОМНОЕ
10. tolyan_ekb 105 20.03.14 13:58 Сейчас в теме
Можно ли в добавленной таблице вызвать процедуру ПриАктивацииСтроки и т.п.?
12. hiduk 125 03.04.14 10:42 Сейчас в теме
(10) tolyan_ekb, Можно наверное:) Попробуйте определить переменную ТЗОбработчиковСобытий как ТЗ. Добавить туда строку, колонка ИмяСобытия = "ПриАктивацииСтроки". А в модуле формы определить процедуру с именем "ИмяТаблицы" + "ПриАктивацииСтроки". В общем поройте в этом направлении.
11. AleksSF 224 29.03.14 11:06 Сейчас в теме
Здравствуйте.
А как сделать группы. Ну чтобы при отображении на форме несколько колонов были объединены в Группу колонок.
13. hiduk 125 03.04.14 10:43 Сейчас в теме
(11) AleksSF, Добрый день! Группы сделать можно, но сложно:)
14. AleksSF 224 04.04.14 08:02 Сейчас в теме
(13) hiduk,
Повозился немного и сделал. В принципе не так сложно.
Но я делал для своей конфы, поэтому не доводил ее до универсальности.
Если интересно могу прислать.
16. hiduk 125 18.07.14 11:46 Сейчас в теме
Раз уж используете данный материал, стоит заглянуть и сюда: http://infostart.ru/public/171514/. Там больше примеров. Но они сложнее для понимания.
17. пользователь 19.01.15 16:39
Сообщение было скрыто модератором.
...
18. prodines 107 21.04.15 15:54 Сейчас в теме
Я немного подправил код вывода ТЗ: ранее он позволял вывести на управляемую форму только одну таблицу значений. Либо нужно было удалять сначала одноимённую ТЗ. Теперь ничего удалять не надо, и можно выводить на форму сколько угодно ТЗ, причём процедура принимает только один параметр - саму таблицу значений и ничего лишнего:

&НаСервере
	Процедура ВывестиТЗНаФорму(ТЗ)
		
		ИсходноеИмяТЗ = "МояТаблицаЗначений";
		
		МаксНомерТЗ = 0;
		
		МассивРеквизитов = ПолучитьРеквизиты();		
		
		Для каждого Реквизит Из МассивРеквизитов Цикл
			
			Если Лев(Реквизит.Имя, СтрДлина(ИсходноеИмяТЗ)) = ИсходноеИмяТЗ Тогда
				
				СтрНомер = Прав(Реквизит.Имя, СтрДлина(Реквизит.Имя) - СтрДлина(ИсходноеИмяТЗ));				
				
				Номер = Число(СтрНомер);
				
				Если Номер > МаксНомерТЗ Тогда
					
					МаксНомерТЗ = Номер;
				
				КонецЕсли; 
			
			КонецЕсли; 			
		
		КонецЦикла; 
		
		ИмяТЗ = ИсходноеИмяТЗ + Строка(МаксНомерТЗ+1);
		
		//Имеем исходную таблицу значений с именем "ТЗ"
		//Добавляем реквизит формы
		МассивРеквизитов = Новый Массив;
		МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяТЗ, Новый ОписаниеТипов("ТаблицаЗначений"), "", ИмяТЗ));
		
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяТЗ, Колонка.Заголовок)); 
		КонецЦикла;
		
		ИзменитьРеквизиты(МассивРеквизитов);
		
		//Помещаем Элементы на форму 
		Таблица = Элементы.Добавить(ИмяТЗ, Тип("ТаблицаФормы")); 
		Таблица.ПутьКДанным = ИмяТЗ; 
		Таблица.Отображение = ОтображениеТаблицы.Список;		
		
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			
			НовыйЭлемент = Элементы.Добавить(ИмяТЗ + "_" + Колонка.Имя, Тип("ПолеФормы"), Таблица); 
			НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; 
			НовыйЭлемент.ПутьКДанным = ИмяТЗ + "." + Колонка.Имя;
			
		КонецЦикла;
		
		//переносим таблицу значений на форму 
		ЗначениеВРеквизитФормы(ТЗ,ИмяТЗ);
		
	КонецПроцедуры
Показать


Но ещё интереснее было бы печатать таблицу значений в независимый табличный документ. Как бы это сделать?
maxchaos; Undred; timeforlive; +3 Ответить
19. fixin 4262 03.02.16 18:46 Сейчас в теме
Спасибо за обработку, очень удобнов вставлять и юзать. Даже внутрь не лазил процедур, юзал как функцию.

Если у таблицы тип содержит массив, не выводится.

Пришлось сделать проверку, ну и потом добавление колонок в попытке-исключении.

	Для Каждого Колонка Из ТЗ.Колонки Цикл
		Если Колонка.ТипЗначения.СодержитТип(Тип("Массив")) Тогда
			Продолжить;
		КонецЕсли;
		МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяТЗНаФорме ,Колонка.Заголовок));	
	КонецЦикла; 

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


paybaseme; +1 Ответить
20. tinkerbell 24.09.17 15:08 Сейчас в теме
Спасибо за открытый код в комментариях! Даже скачивать не пришлось))
user1804494; +1 Ответить
21. starik-2005 3062 24.09.17 17:28 Сейчас в теме
Оставьте свое сообщение