Создание произвольной таблицы значений на форме в управляемом приложении программным способом

14.08.14

Разработка - Инструментарий разработчика

Как создать произвольную таблицу значений на форме в управляемом приложении программным способом

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

Наименование Файл Версия Размер
ПроизвольнаяТаблицаЗначенийУправляемаяФорма.epf
.epf 6,94Kb
284
.epf 6,94Kb 284 Скачать
Приветствую всех читателям infostart’a. Данная статья будет посвящена вопросу создания произвольной таблицы значений на форме управляемого приложения программным способом.

Особенности задачи.

Каждый, кто программировал в обычном приложении, часто сталкивался с задачей получения произвольной таблицы значений на форме. Под произвольной таблицей значений понимается таблица, количество и тип колонок которой наперед не известно. То есть колонок может быть 3, а может 6, а может 8. В обычном приложении все просто: можно было на форме обработки разместить элемент «ТаблицаЗначений»,и затем передать в этот элемент созданную таблицу значений программным способом. Потом простой командой:


	ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();


получить готовую таблицу значений на форме. Казалось бы, что может быть проще.

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

Решение задачи.

Первое, что мы должны сделать, это определить, как таблица появится на форме. Главное, что никакого элемента формы в обработке создавать не нужно. Мы его создадим программным способом, как и всю таблицу. То есть таблица будет описана, и создаваться в момент открытия формы или с помощью кнопки – это кому как нужно.


Создание таблицы на форме происходит через описание таблицы значений как реквизита:

	
МассивТипаВыбора = Новый Массив;

МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));

ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);

МассивРеквизитов = Новый Массив;

МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаРасписания", ОписаниеТипаВыбора, "", "ТЗН"));
Теперь мы должны создать программную таблицу значений, которая содержит данные. Если таблица значений будет получена из запроса, то все более - менее порядок. Если таблица создается вручную, то значение колонок, которые будут содержать числа или даты могут быть созданы через «ОписаниеТипов». Суть в том, что колонки в таблице значений обязательно должны иметь какой-то тип. Если, например,предполагается, что пользователь будет заполнять данные в этих колонках интерактивно, то нельзя добавлять колонку таблицы значений просто с именем, она должна иметь тип. Имейте ввиду – это очень важно т.к. эти типы мы передадим в таблицу на форме.

Создаем таблицу, которая содержит несколько колонок:

	
КД = Новый КвалификаторыДаты(ЧастиДаты.Время);            

МассивКД = Новый Массив;
МассивКД.Добавить(Тип("Дата"));
ОписаниеТиповВремя = Новый ОписаниеТипов(МассивКД, , ,КД);

	
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("С", ОписаниеТиповВремя);
ТЗ.Колонки.Добавить("До", ОписаниеТиповВремя);
ТЗ.Колонки.Добавить("ФИО");
ТЗ.Колонки.Добавить("Примечание");//ФИО и Примечание - строки


Далее мы заполним нашу программную таблицу ТЗ нужными данными. Получаем таблицу ТЗ, которая содержит необходимые значения и готова к передаче в созданный реквизит формы.

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

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

Вот такая нехитрая комбинация и наша таблица готова.

Далее укажем путь к данным и, например, можем установить ширину колонок:

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

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

Условное оформление, если нам нужно мы также пишем вручную,командное меню – вручную. Обработчики таблицы также пишутся руками. Например,что бы добавить обработчик события таблицы «Выбор»:

	ТаблицаПолейВыбора.УстановитьДействие("Выбор","ТЗНВыбор");

Для обработки данного события в форме процедуры прописывается отдельная процедура:

&НаКлиенте
Процедура ТЗНВыбор(ТЗ, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
//команды обработчика

КонецПроцедуры

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

	&НаКлиенте

Ну, и последнее что хотелось добавить, что после всех этих действий обязательно не забываем передать готовую таблицу в реквизит формы:

	ЗначениеВРеквизитФормы(ТЗ, "ТаблицаРасписания");

Вот что имеем в результате:

А вот обработка события "Выбор":


Послесловие.

Надеюсь, статья окажет помощь тем программистам 1С, которые начинают создавать таблицы на форме программным способом.

Вы можете скачать обработку, которая программным способом создает таблицу значения и выводит на управляемую форму с комментариями,которые помогут Вам создавать свои таблицы.

Таблица значений ТаблицаЗначений Программное создание ТаблицыЗначений УправляемаяФорма 1С 8.2 управляемая форма

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    117287    638    389    

690

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    6551    13    4    

35

PowerTools

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

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

3600 руб.

14.01.2013    176593    1064    0    

840

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    2784    4    1    

28

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    98682    238    97    

292

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27705    3    10    

13

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23301    15    15    

31

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

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

1800 руб.

21.02.2023    6380    4    34    

16
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. seermak 665 14.08.14 13:37 Сейчас в теме
(0) Все просто - формируем через СКД нужные данные и выгружаем их реквизит формы "табличный документ" Расшифровку передаем через временное хранилище. Если надо предусмотреть параметры колонок или еще что-то делаем это в СКД
2. profiprog1c 247 14.08.14 18:56 Сейчас в теме
(1) seermak,
Это все да, а если Ваша таблица должна получится путем сложных вычислений. Например Запрос - Обработка запроса - Еще Запрос - Обработка запроса, совмещение и расчет данных программно, тогда как?
3. seermak 665 14.08.14 19:47 Сейчас в теме
(2) Вы еще про перебор справочников вспомните) Все Ваши "Запрос - Обработка запроса - Еще Запрос - Обработка запроса" (если Вам нравится туда-сюда)загоняете в таблицу и используете, как внешние данные СКД
4. profiprog1c 247 14.08.14 21:12 Сейчас в теме
(3) seermak, Ну при чем тут перебор справочника. Я так понял, что Вы привыкли получать таблицы значений одним запросом. А я Вам говорю о том, что есть таблицы которые получаются вычислениями вне запросов и при чем тут СКД? И кстати, по поводу перебора справочника, иногда выгоднее сделать перебор, чем делать запрос.
5. Yashazz 4692 18.08.14 16:24 Сейчас в теме
А ещё можно посмотреть, как эта задача давным-давно решена в УТ11 и БП3, и не изобретать велосипед.
Статья неплохая, но опоздала года на полтора.
6. profiprog1c 247 18.08.14 22:30 Сейчас в теме
(5) Yashazz, С таким успехом можно все везде посмотреть. Статья предназначена для тех, кто столкнулся с такой задачей и не хочет где-то искать, а хочет сразу готовое. Каждому свое.
prosto_username; oninfostart; Raskad; mikki_1C; baracuda; user591389_aska_rabota; gamletspb; гвость; user659168_xec8787; clareon; abasovit; memb3r; Dmitri93; mip128; kamsky93; Andreyyy; Shishant; CeHbKA; stone_evil; u_n_k_n_o_w_n; jaroslav.h; Templ; link_l; kitaevay; Veduin; mammadov.zaur.77; +26 Ответить
7. mammadov.zaur.77 31.12.14 17:26 Сейчас в теме
profiprog1c
Спосибо.
Мне очень помогло.
А как Избавится от командного панеля.
Например я хочу импортиромат из .тхт.
В этом случе мне не нужно Командный панел таблицы.
Заране спосибо.
test_mode; +1 Ответить
8. profiprog1c 247 02.01.15 22:27 Сейчас в теме
(7) mammadov.zaur.77,

В процедуре СформироватьТаблицуЗначений()
В коде, где создаем объект "ТаблицаПолейВыбора" размещаем строку:

ТаблицаПолейВыбора.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

Командная панель будет не видна на форме после этого.
гвость; gigapevt; mammadov.zaur.77; +3 Ответить
9. Cyberhawk 135 17.01.15 10:07 Сейчас в теме
У формы стоит АвтоматическоеСохранениеДанныхВНастройках = Истина.
Вопрос: можно ли программно создать реквизит с галочкой "Сохранение"? Не путать со свойством "Сохраняемые данные", Я веду речь о галочке в таблице реквизитов формы в конструкторе (приложил картинку).
Просто хочется, чтобы значения программно добавляемых реквизитов сохранялись средствами платформы при закрытии формы (ну, восстанавливать их придется уже самому, это понятно), не хочется писать это самостоятельно. Не нашел такой возможности ни в конструкторе, ни через точку.
Прикрепленные файлы:
10. Cyberhawk 135 17.01.15 19:20 Сейчас в теме
+(9) в общем, средствами платформы сохранять значения программно созданных реквизитов нельзя.
Решение следующее: при открытии / перед закрытием / где удобно взводить свойство формы
СохраняемыеВНастройкахДанныеМодифицированы = Истина;

Тогда обработчик ПриСохраненииДанныхВНастройкахНаСервере() будет гарантированно вызван при закрытии формы - там и сохранять в настройках можно все, что душе угодно (вручную).
e.kogan; eeeio; +2 Ответить
11. пользователь 19.01.15 16:39
Сообщение было скрыто модератором.
...
12. denxp2009 23.04.15 09:32 Сейчас в теме
Автору огромное спасибо!!! Статья пошла в избранное :)
13. AndreykO 6 27.04.15 11:51 Сейчас в теме
Интересная технология. Вот только у меня одна из колонок типа "ЛюбаяСсылка" и не взлетает...((
14. profiprog1c 247 27.04.15 17:12 Сейчас в теме
(13) AndreykO,

В статье я отмечал, что колонка таблицы значений должна иметь явный, конкретный тип, а вот "ЛюбаяСсылка" не является конкретным типом.
mammadov.zaur.77; +1 Ответить
15. platon_ 10 30.04.15 11:54 Сейчас в теме
Интересная статья, хотелось бы ещё посмотреть создание таблицы с числами, и возможностью последующего вывода итога в подвал.
16. kitaevay 37 15.05.15 19:41 Сейчас в теме
Пример рабочего кода на тему, на основе примера выше, ТЗ выгружается по результату запроса, Колонки автоматически создаются из колонок ТЗ
Таблица на форме при этом получает колонку с флажком и остальные колонки нормально типизированы

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

		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЛОЖЬ КАК Выб,
		|	СегментыНоменклатуры.Ссылка КАК Сегмент
		|ИЗ
		|	Справочник.СегментыНоменклатуры КАК СегментыНоменклатуры
		|ГДЕ
		|	НЕ СегментыНоменклатуры.ПометкаУдаления
		|
		|УПОРЯДОЧИТЬ ПО
		|	СегментыНоменклатуры.Наименование";
		
		РезультатЗапроса = Запрос.Выполнить();
		ТЗ = РезультатЗапроса.Выгрузить();
		
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			ТипыЗначений = Новый Массив;
			Для каждого тТип из Колонка.ТипЗначения.Типы() Цикл
				Если тТип <> Тип("Null") Тогда
					ТипыЗначений.Добавить(тТип);
				КонецЕсли;
			КонецЦикла;
			МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(ТипыЗначений), ИмяТЗ));
		КонецЦикла;

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

		Для Каждого Колонка Из ТЗ.Колонки Цикл
			НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица);
			НовыйЭлемент.ПутьКДанным = ИмяТЗ + "." + Колонка.Имя;
			Если Колонка.Имя = "Выб" Тогда
				НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
			Иначе
				НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
				НовыйЭлемент.КнопкаОчистки = Ложь;
				НовыйЭлемент.КнопкаВыбора = Ложь;
				НовыйЭлемент.РедактированиеТекста = Ложь;
				НовыйЭлемент.КнопкаОткрытия = Истина;
			КонецЕсли;
		КонецЦикла;
		
		ЭтаФорма.ЗначениеВРеквизитФормы(ТЗ, ИмяТЗ);
Показать
imaster; Fruktoved; peter; eufes; OscarTT; artichoke; starik80; kaljro; arisgeser; SergeySol-82; kabanoff; user721122; acanta; MezhduProchim; SmArtist; Olenevod; JohnSilver; cuter; elvira17; Silenser; surr; semario; jaroslav.h; test_mode; dour-dead; +25 Ответить
17. profiprog1c 247 10.06.15 14:21 Сейчас в теме
(16) kitaevay,

Не вводите никого в заблуждение, вы типы присваиваете каждой колонке. И логично, что если вы из запроса грузите данные в ТЗ, то колонки ТЗ будут типизированы, а если они не типизированы вы им пытаетесь присвоить тип. А в моем примере речь шла о колонах в ТЗ, которые создаются руками.
18. Yashazz 4692 16.06.15 15:07 Сейчас в теме
(17) да можно и не типизировать. Вы тут поднагнали пурги, мол, обязательно... Может, в старых релизах и было обязательно, да только всё меняется)

Начиная с 8.3.5, реквизит формы, в т.ч. подреквизит табчасти ("колонка реквизита"), неважно, таблица ли значений или дерево, добавлена ли кодом или в конфигураторе - прекрасно может иметь тип "Произвольный". Делается очень просто:

Функция ПолучитьПустоеОписаниеТипов() Экспорт
	мТипов=Новый Массив;
	квЧисла=Новый КвалификаторыЧисла(0,0);
	квСтроки=Новый КвалификаторыСтроки(0);
	квДаты=Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
	Возврат Новый ОписаниеТипов(мТипов,квЧисла,квСтроки,квДаты);
КонецФункции

МойРеквизит=Новый РеквизитФормы("МойТест",ПолучитьПустоеОписаниеТипов());
Показать


Именно таким образом можно сделать динамически реквизит, в т.ч. колонку таблицы значений, которая будет вести себя как имеющая "Произвольный" тип. Только что проверено на 8.3.6.2014

Так что не зря я ворчал, публикация не вполне точна в своих утверждениях.
19. profiprog1c 247 16.06.15 17:22 Сейчас в теме
(18) Yashazz,

А где у вас в вашем куске кода Произвольный тип???
От того что вы свою функцию назвали ПолучитьПустоеОписаниеТипов(), она пустой не стала.
В вашем коде я вижу мультитип, число, строка, дата - это да, но пустого в упор не заметил.
20. Yashazz 4692 17.06.15 11:18 Сейчас в теме
(19) Повторяю - именно такое описание типов и даёт эффект работы с реквизитом, как будто он произвольного типа. Собственно, в понятиях 1С именно приведённое мной описание типов и есть произвольный тип. Вы создайте на форме реквизит произвольного типа и посмотрите на него, хоть в отладчике, хоть как. Всё просто.
21. profiprog1c 247 17.06.15 11:29 Сейчас в теме
(20) Yashazz,

Причем тут эффект работы, не играйте словами. Вы колонку тоже задаете как параметр.
В обычном приложении можно создать было колонку:
ТЗ.Колонки.Добавить("Контрагент") и все - колонка готова.
В вашем примере такое есть? Нету.
И в моем примере идет параметризация и в вашем примере тоже. Только в моем, я задаю конкретный тип, а вы мультитип, все по сути одно и тоже, без разницы.
22. Yashazz 4692 17.06.15 12:56 Сейчас в теме
(21) а, так вы о том, чтобы вообще ничего не писать... Тогда пардон, неверно вас понял. Я всего лишь к тому, что эффект одинаковый - что ничего писать не надо, что мой вариант писать надо - в итоге результат тот же. А мы ведь на результат работаем, верно?
23. profiprog1c 247 17.06.15 16:39 Сейчас в теме
(22) Yashazz,

Результат верен, но неверна терминология.
Я в статье пишу, что в управляемом приложении как в обычном приложении просто задать колонку не получится.
А нужно ее параметризировать, по сути описать. Присвоить колонке пустышку, просто имя, без параметра, как в обычном приложении, нельзя.
Если 8.3.6 есть возможность задать мультипараметр в колонку, да без проблем, но его тоже надо задать, сам он не появляется.
Это все вопросы вкуса программирования конкретного программиста, но пустышку задать нельзя, как это было в обычном.
31. kitaevay 37 14.03.17 17:47 Сейчас в теме
(17) Я не знаю о каком заблуждении идет речь, в моём описание всё по существу, я не обещаю большего, чем есть в предложенном коде. Есть некоторый минимум знаний, который необходим, чтобы воспользоваться моим кодом, который подразумевает, что заблуждения тут маловероятны, а если они вдруг случились, то это поправимо типизацией колонки при добавлении оной вручную ;-)

PS я поставил вам лайк, т.к. ваша публикация мне помогла и указал это в своём комментарии, не вижу причин для мелочной ревности. Peace Love Heaviness.
24. Novichok777 23 10.07.15 11:25 Сейчас в теме
Все хорошо, но код на 8.3.6.2014 выдает ошибку в строке "НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);" (а у (16) в строке "НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица);".

Ошибка одна и та же: Недопустимое значение параметров!

Убил не один час, чтобы понять в каком параметре ошибка. Ответ как всегда прост.
В первом параметре НЕЛЬЗЯ указывать одно и тоже имя с реквизитом. Т.е. вот так если записать "НовыйЭлемент = Элементы.Добавить(ИмяТЗ + Колонка.Имя, Тип("ПолеФормы"), эТаблица); ", то все Ок.

Удачи. Спасибо за статью.
SergeySol-82; kabanoff; aswar-nm-ru; DarkAn; +4 Ответить
25. profiprog1c 247 14.07.15 12:42 Сейчас в теме
(24) Novichok777,

Моя обработка, по созданию произвольной таблицы, которую можно скачать, работает и в 8.3.6.2100, проверял.
А вот то, что тут комментаторы пишут и какие-то куски кода лепят в том же (16), я это не тестирую, и оно да, может не работать.
29. aswar-nm-ru 17.08.16 12:42 Сейчас в теме
(24), подтверждаю, имена д.б. уникальными. Имя ТЗ лучше всегда добавлять в данном случае.
27. jaroslav.h 180 09.01.16 21:57 Сейчас в теме
(16) kitaevay, ну, мужик! ну благодарю! То, что надо!
kitaevay; +1 Ответить
30. elvira17 15.02.17 08:04 Сейчас в теме
(16) Спасибо огромное! Все работает! Платформа 8.3.8.2167
kitaevay; +1 Ответить
44. Kindman1980 81 28.04.21 23:06 Сейчас в теме
(16) спасибо, забрал себе ваш код, модифицировал под выгрузку движений любого регистра любого документа.
kitaevay; +1 Ответить
26. andrewrocker 1 06.01.16 21:42 Сейчас в теме
Коллеги,

Требуется создать таблицу значений с неясным количеством колонок. Т.е. делаю запрос, по запросу определяю список покупателей, создаю количество колонок с названием списка покупателей. Посмотрите, что я делаю не так:

Процедура ЗаполнитьКолонки(Элемент)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОптовыеЗаказчики.Заказчик,
| ОптовыеЗаказчики.ФормироватьСводныйЗаказ
|ИЗ
| РегистрСведений.ОптовыеЗаказчики КАК ОптовыеЗаказчики
|ГДЕ
| ОптовыеЗаказчики.ФормироватьСводныйЗаказ = ИСТИНА"
;

Результат = Запрос.Выполнить();
Обход = Результат.Выбрать();

Пока Обход.Следующий() Цикл
Таб.Колонки.Добавить(Обход.Заказчик,,Обход.Заказчик,50);
КонецЦикла;

КонецПроцедуры

В результате виртуальная таблица создается, но на форме данные не обновляются. На форме ничего не меняется, колонки не создаются.
28. zels 171 03.08.16 19:03 Сейчас в теме
Интересно, как сделать, чтобы по клику на заголовке колонки таблица сортировалась по этой колонке.
32. papche 598 13.01.18 19:45 Сейчас в теме
Спасибо! Я в восторге))
33. virtex3 20 21.06.18 18:50 Сейчас в теме
Кто-нибудь, напишете как в подвале итоговую сумму вывести, пожалуйста
34. dolter 119 07.05.19 12:48 Сейчас в теме
(33) Ну, если еще не поздно )
Элементы.ТабличнаяЧасть1.Подвал = Истина;
Элементы.ТабличнаяЧасть1Б.ПутьКДаннымПодвала = "Объект.ТабличнаяЧасть1.ИтогБ";
35. user1226970 19.06.19 16:07 Сейчас в теме
Пардон,только учусь у меня при написании кода ,выходит ошибка {ВнешняяОбработка.ВыгрузкаПрайсаXML.Форма.Форма.Форма(195)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(МассивРеквизитов);
по причине:
Неуникальное имя реквизита. Имя: "ТаблицаРеквизитов"

Что делаю не так?
36. sidelev08 06.09.19 17:23 Сейчас в теме
(35) По всей видимость у вас на форме уже есть реквизит с таким наименованием.
Либо вы пытаетесь повторно выполнить команду вывода таблицы значений на форму, предварительно не удалив уже существующую, которую создали после первого вызова вывода таблицы.
37. umberto_nobile 5 13.03.20 10:34 Сейчас в теме
там в тексте есть конструкция:
ИзменитьРеквизиты(МассивРеквизитов);


это предполагает то, что таблица будет создаваться только среди реквизитов верхнего уровня.
для решения моей задачи необходимо создавать несколько таблиц, чтобы каждая была на своей странице.
есть ли какое-то решение для такого случая?
38. Slypower 2 27.03.20 14:01 Сейчас в теме
(37)
Получилось решить задачу? У меня в цикле при создании колонок на форме уже, падает с ошибкой
Ошибка при вызове метода контекста (Добавить)
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица);
по причине:
Недопустимое значение параметров


Не могу побороть никак
39. ixijixi 1747 26.06.20 09:16 Сейчас в теме
(38) 2 варианта - либо имена неуникальные (элемент Колонка.Имя уже есть на форме), либо элемента эТаблица не существует.
40. twozero 11.10.20 23:14 Сейчас в теме
(33) Отображение итогов в подвале табличном поле для обычной формы
	элементыФормы.ТабличноеПоле1.Подвал = Истина;
	элементыФормы.ТабличноеПоле1.колонки.Сумма.ОтображатьИтогиВПодвале = Истина;
	элементыФормы.ТабличноеПоле1.колонки.Сумма.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Право;
41. Andreich88 19.01.21 03:11 Сейчас в теме
Всем здравствуйте.
Только изучаю 1С. Подскажите где ошибка: создал таблицу значений через реквизит формы, генератором случайных чисел заполнил массив, далее пытаюсь перенести массив в таблицу значений. Код выполняется без ошибок, но таблица остается пустой. Где и что не так?
Спасибо.
&НаСервере
Процедура Команда1НаСервере(МассивСЧ)
	
	//Создаем таблицу значений
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Значение");
	
	//Добавляем сторки в Таблицу значений
		
	Для Индекс = 0 По МассивСЧ.ВГраница() Цикл
		ТЗ.Добавить();
	КонецЦикла;
		
	ТЗ.ЗагрузитьКолонку(МассивСЧ,"Значение");
	
	//резултат
	
	ТЗизМассиваСЧ = ТЗ;
	
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	МассивСЧ = Новый Массив(14);
	//Генератор случайных чисел
	ГСЧ = Новый ГенераторСлучайныхЧисел();
  
	//Заполняем массив случайными числами
	Для Сч=0 По 13 Цикл 
    МассивСЧ[Сч] = ГСЧ.СлучайноеЧисло(0,9);    
КонецЦикла;

	Команда1НаСервере(МассивСЧ);
КонецПроцедуры
Показать
42. Andreich88 19.01.21 03:44 Сейчас в теме
43. inf012 12.02.21 10:44 Сейчас в теме
Есть ТЗ. На форме программно добавляю реквизит и колонки, далее создаю элемент формы и элементы для колонок.
Типы значений колонок заданы и для исходной ТЗ и при создании реквизитов для колонок также тип указан.

Но при отображении на экране полученной ТЗ я не могу редактировать содержимое ячеек, и, соответственно, если в ячейке ссылочный тип, то не могу открыть значение из ячейки (кликтуть в ячейку и потом через кнопку открыть (квадратики)) перейти к значению

Все как у вас делаю, как заставить ТФ (ТЗ) вести себя нормально?
45. user887784 19.02.22 07:16 Сейчас в теме
Отличная статья. Спасибо.

Кто может подсказать, а как-то можно потом в этой таблице сделать группировкк/транспонирование по дате ?

Т.е.у меня есть ТаблицаЗначений формата;
Дата, номенклатура, объем
01.01.2021, номенклатура1, 55
02.01.2021, номенклатура1, 56
03.01.2021, номенклатура1, 52
01.01.2021, номенклатура2, 57
02.01.2021, номенклатура2, 59
03.01.2021, номенклатура2, 50

А на форму нужно вывести примерно так ещё и доступное к изменению/сохранению
_________________01.01.2022 02.01.2022 и т.д
номенклатура1. 55. 56
номенклатура2. 57. 59
46. PrutskihKA 1 31.07.22 12:58 Сейчас в теме
ДеревоЗначений в помощь
47. maksa2005 526 22.02.24 14:15 Сейчас в теме
Оставьте свое сообщение