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

21.06.13

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

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

Скачать файлы

Наименование Файл Версия Размер
Программный вывод ТЗ на форму
.epf 7,33Kb
324
.epf 7,33Kb 324 Скачать

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

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61794    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54401    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16696    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10735    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9611    151    acces969    31    

118

Модель состояния для MVC

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Algiz 22.06.13 23:42 Сейчас в теме
Код в одну процедуру можно было и без обработки выложить...если уж выкладываете
Ranetka; user1804494; arti4k; v.l.; ixijixi; +5 Ответить
22. v.l. 434 11.07.19 18:18 Сейчас в теме
(1) Школота зоробатывоет.
2. petrov_al 10 24.06.13 09:21 Сейчас в теме
Можно подробнее, алгоритм что вы используете?
3. hiduk 124 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 1403 26.06.13 13:59 Сейчас в теме
Типовое создание элементов/реквизитов управляемой формы.
В чем уникальность публикации? Или просто как визуализация книжек по упр. интерфейсу?
5. hiduk 124 26.06.13 14:39 Сейчас в теме
Уникальности никакой нет, на неё и не претендую. Обработка находится в нужное время, в нужном месте, пользуется спросом. У самого на днях стояла такая задача. Пришлось порыться в интернете, литературы под рукой не было. На инфостарте не нашел.

Особенностью обработки считаю универсальную процедуру, т.к. в инете есть примеры с конкретной структурой.
6. morfeus 07.11.13 05:40 Сейчас в теме
(5) hiduk, Большое спасибо за помощь!!! В 82 из мелочи любят выдумывать сложности. Туда сюда гонять реквизиты и т д. Не понимаю зачем так заморачиваться... Сам не додумался. Большое спасибо! Получилось с вашей помощью !!!!
7. bayce 45 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 104 20.03.14 13:58 Сейчас в теме
Можно ли в добавленной таблице вызвать процедуру ПриАктивацииСтроки и т.п.?
12. hiduk 124 03.04.14 10:42 Сейчас в теме
(10) tolyan_ekb, Можно наверное:) Попробуйте определить переменную ТЗОбработчиковСобытий как ТЗ. Добавить туда строку, колонка ИмяСобытия = "ПриАктивацииСтроки". А в модуле формы определить процедуру с именем "ИмяТаблицы" + "ПриАктивацииСтроки". В общем поройте в этом направлении.
11. AleksSF 222 29.03.14 11:06 Сейчас в теме
Здравствуйте.
А как сделать группы. Ну чтобы при отображении на форме несколько колонов были объединены в Группу колонок.
13. hiduk 124 03.04.14 10:43 Сейчас в теме
(11) AleksSF, Добрый день! Группы сделать можно, но сложно:)
14. AleksSF 222 04.04.14 08:02 Сейчас в теме
(13) hiduk,
Повозился немного и сделал. В принципе не так сложно.
Но я делал для своей конфы, поэтому не доводил ее до универсальности.
Если интересно могу прислать.
16. hiduk 124 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 4252 03.02.16 18:46 Сейчас в теме
Спасибо за обработку, очень удобнов вставлять и юзать. Даже внутрь не лазил процедур, юзал как функцию.

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

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

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

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


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