Таблицы на управляемых формах: создание, расширение, управление.

10.01.17

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

Как вывести результат запроса в таблицу на управляемую форму, ведь здесь нет метода "СоздатьКолонки()"? Как добавить поле ввода в табличную часть документа, если нет желания менять документ? Разбираемся...

Добрый день!

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

поехали!

Итак, унас есть форма и запрос, результат которого выгружен в таблицу. Например, так:

Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Банки");
Таблица = Запрос.Выполнить().Выгрузить();

Выведем таблицу на управляемую форму

Наша основная задача номер РАЗ - вывести результат запроса на управляемую форму.

Для этого нам нужно:

  1. Создать реквизит типа "ТаблицаЗначений".
  2. Создать реквизиты с типом значения, соответствующим типу колонки таблицы, для каждой колонки, подчиненные таблице.
  3. Создать элемент формы типа "ТаблицаФормы" для таблицы.
  4. Создать элементы формы для колонок типа "ПолеФормы".

Таким образом код у нас будет такой:

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

	// добавим реквизиты на форму
	ИзменитьРеквизиты(Реквизиты);

	// добавим элементы формы
	Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));
	Таб.ПутьКДанным = "ТаблицаНаФорме";

	// запретим менять положение строк и сами строки, отключим командную панель
	Таб.ИзменятьСоставСтрок = Ложь;
	Таб.ИзменятьПорядокСтрок = Ложь;
	Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

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

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

Здесь мы создаем реквизиты, содержащие таблицу и колонки таблицы. Далее создаем элементы и прописываем для них путь к реквизитам формы. Т.е. у нас всегда создается и реквизит формы, который хранит значение, и элемент формы, который это значение отображает. В этом вся суть. При этом если Вы хотите создать группу формы, то реквизит формы вам не нужен - достаточно создать элемент формы типа "ГруппаФормы", после чего в поле "Вид" прописать соответствующтий вид элемента (Группа, Закладка, ...).

Данный код выводит на управляемую форму результат запроса. Но если вдруг в результате запроса у Вас будут элементы, типы которых не могут быть выведены на форму, то 1С будет ругаться. К таким элементам относятся хранилища значений, уникальные идентификаторы и, на сколько я знаю, другие таблицы значений (т.е. при выборке табличных частей у нас возникнут проблемы). Это нужно учитывать при создании реквизитов. При этом, если реквизит таблицы имеет тип "ТаблицаЗначений", то для его тоже нужно будет создать колонки. Также следует иметь ввиду, что имена элементов формы должны быть уникальными, при этом имена реквизитов должны быть уникальны внутри своих родителей (т.е. может существовать две разные таблицы с одинаковыми наименованиями колонок, но в пределах одной таблицы имена колонок должны отличаться).

Добавим колонку в таблицу документа

Теперь давайте посмотрим, как можно расширить уже имеющуюся таблицу формы.

Допустим, мы хотим добавить колонку в таблицу выданных авансов авансового отчета как-нибудь так:

Для этого просто напишем в процедуре ПриСозданииНаСервере такой вот код:

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

Следует, однако, иметь ввиду, что заполнять данную колонку придется при каждом открытии документа, а данные для нее сохранять в отдельном хранилище, например, регистре сведений с документом и номером строки в качестве измернеий, и значением в ресурсе.

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

См. также

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

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

2400 руб.

29.06.2020    18675    26    6    

41

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

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

1500 руб.

06.10.2020    10080    7    7    

10

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

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

20.08.2024    15535    mrXoxot    43    

119

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

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

27.05.2024    6719    smielka    37    

99

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

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

27.12.2023    14316    872    elcoan    47    

117

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

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

2 стартмани

10.04.2023    11719    162    acces969    31    

123

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

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

1 стартмани

05.07.2022    5393    kalyaka    6    

33

Работа с интерфейсом Программист Пользователь Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Ещё с времен платформы 8.3.13 можно изменять цвет стилей интерфейса главного окна. Данное расширение позволит вам выбрать из подготовленных десятка стилей на свой вкус.

1 стартмани

01.07.2022    24287    391    rpgshnik    68    

97
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mars207 27 11.01.17 13:31 Сейчас в теме
Я бы еще добавил динамическое изменение таблицы в процессе работы. Имею в виду проверку наличия реквизита и элемента, возможность удаления лишних колонок. Например, показать движения по месяцам в зависимости от указанного количества месяцев. А то как-то жиденько…
user1804494; Lena272; kraynev-navi; +3 Ответить
2. starik-2005 3082 11.01.17 14:10 Сейчас в теме
(1) справедливо, но задача была показать, как в принципе это делать. А уж обращать внимание на второй параметр метода "ИзменитьРеквизиты()" - это дело для самостоятельного изучения. Но, как показала практика, лучше полностью сносить таблицу и создавать новую, чем заморачиваться изменениями колонок - пользы чуть, а геморроя - масса.
lvictor58; _DaFNa_; user1804494; AnryMc; a0212; Sanario; KidMo; +7 Ответить
3. kraynev-navi 681 12.01.17 13:39 Сейчас в теме
поддерживаю (1). Приведенный код обильно присутствует на всем известных форумах.
Если бы сделали всеобъемлющее руководство, привели нюансы с какими багами предстоит встретиться на разных платформах, про удаление и т.д.
А так... В чем новость?
4. starik-2005 3082 12.01.17 15:19 Сейчас в теме
(3) по поводу "обильности" что-то не замечал, а по поводу изменений - это лишь одна из манипуляций с данными формы. Я в последнее время отказался от создания на форме таблиц - формирую их динамически. Для того, чтобы знать, какие элементы нужно удалить, просто делаю на форме список значений, в который добавляю созданные реквизиты и связанные с ними элементы (идентификаторы). Дальше при необходимости просто удаляю все созданные элементы/реквизиты и создаю заново. Ничего тут "такого" в плане нюансов нет.
artichoke; KidMo; +2 Ответить
5. fomix 33 13.01.17 10:22 Сейчас в теме
Можете пояснить на словах "просто делаю на форме список значений, в который добавляю созданные реквизиты и связанные с ними элементы (идентификаторы). Дальше при необходимости просто удаляю все созданные элементы/реквизиты и создаю заново.".
Желательно с кодом. Заранее спасибо!
6. starik-2005 3082 13.01.17 11:59 Сейчас в теме
(5) а что конкретно непонятно? В вышеуказанный код добавляете "СписокЗанченийСРеквизитами.Добавить(Колонка.Имя, Реквизит.Имя)", а перед этим можете вызвать функцию, которая пробежится по элементам списка, удалит элементы "Элементы.Удалить(Элементы.Найти(ЭлементСписка.Представление))", добавит в массив реквизитов для удаления имя реквизита (именно имя, а не реквизит) и вызовет функцию "ИзменитьРеквизиты(, УдаляемыеРеквизиты)". Все же просто.
artichoke; +1 Ответить
7. fomix 33 17.01.17 14:04 Сейчас в теме
(6) Фигня получается, если делать как написали!
Зачем использовать конструкцию "ИзменитьРеквизиты(, УдаляемыеРеквизиты)", если выше элемент с формы уже удален строкой: "Элементы.Удалить(Элементы.Найти(ЭлементСписка.Представление))"?!
Тогда и "СписокЗначенийСРеквизитами" не нужен.
Может не так понял...
8. starik-2005 3082 17.01.17 16:37 Сейчас в теме
(7) понял действительно не так.Не стоит путать реквизиты формы и элементы формы. Через "Элементы.Удалить()" удаляется элемент формы, а через ИзменитьРеквизиты добавляются и удаляются... что?.. правильно - реквизиты формы, которые ни разу не элементы формы.
Alex17; maxst22; +2 Ответить
9. fomix 33 28.01.17 11:36 Сейчас в теме
(8) Получается, что список удаляемых Колонок нужно готовить во время или после создания реквизитов (таблицы и колонок), но до добавления элементов формы. Т.е. подставлять в вашем коде так:

// добавим реквизиты на форму
ИзменитьРеквизиты(Реквизиты, _УдаляемыеРеквизиты_); !?
10. starik-2005 3082 30.01.17 22:35 Сейчас в теме
(9) тут как раз проблема одна: метод "ИзменитьРеквизиты" в первом параметре принимает созданные реквизиты (массив), чтобы они "приаттачились" к форме (не совсем, конечно, ясно, зачем 1С делает так - но это их дело), а вот во втором параметре - массив имен реквизитов, которые нужно удалить. Объясняют они это просто - если нужно поменять что-то на форме в плане реквизитов, то удаляем и добавляем одной командой. При том сначала реквизиты удаляются, потом добавляются (на сколько я помню). Но если в новых реквизитах есть реквизит с именем старого? При создании нового реквизита уже произойдет обломс - реквизит не создастся. Поэтому проще гораздо сначала удалить все реквизиты (просто дернув метод с массивом имен ранее созданных реквизитов, которые были сохранены в списке значений, например), потом удаляем все элементы формы (колонки нашей ТЗ), потом создаем новые реквизиты, добавляем их в список значений, потом создаем элементы формы (колонки нашей новой ТЗ). Так гораздо проще и нет шансов наступить на грабли.
11. Yashazz 4788 10.02.17 13:55 Сейчас в теме
Я фигею. Стопицотая публикация на тему, которую можно уже смотреть в БСП и таскать оттуда; которую давно разжевали в методичках и на куче ресурсов. Нет, ажиотаж зашкаливает... неужели столько новичков, которые эти азы не знают?

При эдаком тренде скоро Сообщить("Hello, world") будет "выбором экспертов" на ИС...

Ну и по сути.
1. Если задача "номер РАЗ" это вывести результаты - поместите на форму поле табличного документа и вывалите всё туда, хоть через построитель отчёта, хоть через СКД. Возни меньше на порядок.
2. Если уж упомянули про добавление подчинённых реквизитов к объектам "ДанныеФормыКоллекция", связанным с объектами БД, особенно с основным реквизитом формы, то уж распишите нормально, когда этот кэш сбрасывается и когда нет. И как сериализуется, и как передаётся, итд. А то, знаете, фраза "заполнять данную колонку придется при каждом открытии документа" это далеко-о-о не всё, что придётся делать)))
artichoke; collider; koks17v; v.l.; PolinkaKMS; nbeliaev; +6 Ответить
12. starik-2005 3082 11.02.17 20:50 Сейчас в теме
(11)
Ну и по сути.
1. Если задача "номер РАЗ" это вывести результаты - поместите на форму поле табличного документа и вывалите всё туда, хоть через построитель отчёта, хоть через СКД. Возни меньше на порядок.
2. Если уж упомянули про добавление подчинённых реквизитов к объектам "ДанныеФормыКоллекция", связанным с объектами БД, особенно с основным реквизитом формы, то уж распишите нормально, когда этот кэш сбрасывается и когда нет. И как сериализуется, и как передаётся, итд. А то, знаете, фраза "заполнять данную колонку придется при каждом открытии документа" это далеко-о-о не всё, что придётся делать)))

Ух-ты, мы вышли из бухты (с)
1. Да, возни меньше, но: а) не на порядок; б) СКД и построитель, конечно, посредством обработки событий табличного документа тоже редактируемы, но возни с этим, как Вы сами сказали, на тот самый порядок больше...
2. Всегда "этот кеш сбрасывается", ничего не надо сериализовать, с передачей и так кому надо - разберутся. А коли что не поняли - спросите, подскажем!

3. Да, азы - это главное. Войти в АТ где-то к тридцати пяти все хотят, а рыться в архивах лениво. Именно по этому (и я об том уже не раз говорил, возможно даже Вам лично) народ такие статьи крайне любит, а авторов холит и лелеет.

4. Завидуйте молча.
user1804494; +1 Ответить
15. fomix 33 15.02.17 19:12 Сейчас в теме
(11) И откуда столько желчи?! По моему мнению здесь площадка для обмена опытом, а не закрытый клуб "знатоков" 1С.
S_D_M; _DaFNa_; user1804494; starik-2005; Filkkore; Tolpinski; Team leader; dreamcreal; +8 1 Ответить
13. Yashazz 4788 13.02.17 18:01 Сейчас в теме
1. "редактируемы" в постановке задачи не было) Формулируйте точнее)
2. Теперь не понял - это статья с разжёвыванием для начинающих, или заметки профи? Или просто подлянка из серии "дальше сами разбирайтесь"?
3. Ага. Статьи из серии "hello world". Кстати, что такое "АТ"?
4. Я не завидую, я огорчён: спрос рождает предложение; такими темпами мы рискуем превратить ИС в песочницу для студентов, а на то и других ресурсов полно, вот хоть devtrain.

p.s. к сведению: в разных релизах 1С методы преобразования данных формы в значение и обратно очень по-разному обходятся с "добавленными" реквизитами, а уж КопироватьДанныеФормы чего творил, аж страшно было. Особенно 8.3.7 этим отличается.
14. starik-2005 3082 14.02.17 11:47 Сейчас в теме
1. Ну а зачем еще нужны ТЗ на форме?
2. Так не стесняйся - спроси прямо.
3. АТ - это типа АйТи. Я считал, что все это песенку слышали. Не?
4. Огорчайтесь молча - это ж должно было подавить Вашу ранимую психику. Поплакаться в жилетку - это полезно бывает.

пысы: преобразования данных формы в значения и обратно работают прямо у тех, у кого руки из нужного места растут. У иных могут быть проблемы - но это руки, хотя вина 1С тут тоже есть - не может толком обучить своих специалистов по платформе.
user1804494; +1 Ответить
16. Yashazz 4788 18.02.17 19:43 Сейчас в теме
(14)
Огорчайтесь молча - это ж должно было подавить Вашу ранимую психику. Поплакаться в жилетку - это полезно бывает.
А вот переходить на личности не надо, за это можно и администрации ресурса пожаловаться на публичное оскорбление.

Поясню для понимающих: последний год я нахожу внятные ответы на свои вопросы где угодно, только не на ИС. Потому что ИС подобными публикациями всё более напоминает песочницу. Давайте я выложу, например, как динамически подключается условное оформление. Это ооочень сложная штука, конечно, и у большинства нет возможности глянуть реализацию БСП, так что будет бешеный спрос))) А потом через пару лет возникнет действительно серьёзный вопрос, и мне не придётся даже надеяться найти ответ на ИС. Так, что ли?

Ладно, оффтопим. А вот по теме публикации могу одно сказать: неполно, очень неполно и не совсем точно.
17. fomix 33 22.02.17 18:00 Сейчас в теме
(16) Давайте я выложу, например, как динамически подключается условное оформление. Это ооочень сложная штука, конечно, и у большинства нет возможности глянуть реализацию БСП, так что будет бешеный спрос)))

А ДАВАЙТЕ, МЫ ТОЛЬКО ЗА!
user1804494; +1 Ответить
18. starik-2005 3082 23.02.17 12:09 Сейчас в теме
(16)
А вот по теме публикации могу одно сказать: неполно, очень неполно и не совсем точно.
Я всегда был за конкретику и конструктивную критику. Но то, что пишите Вы - это, увы и ах, нытье. Не нойте - и люди к Вам потянутся.

ЗЫ: Я уже давно не ищу что-либо на Инфостарте - я тут пишу. Некоторые простые вещи пишу потому, что у коллег возникают вопросы, я пытаюсь получить требуемый им результат и то, что у меня получается, выкладываю. Заметьте, я все, что мне надо, всегда в дебаггере нахожу, но не все же такие. Вот для тех, кому лень рыться в дебаггере, я и пишу свои статейки (последние две по крайней мере, остальные куда сложнее).

Если же посмотреть на Ваши статьи, то можно таких вот велосипедов кучу найти. И то, что у них рейтинг ниже плинтуса - это не моя вина. А есть и хорошие статьи - и это тоже не моя заслуга, так ведь? Ну вот и не нойте тут, а трудитесь.
_DaFNa_; user1804494; +2 Ответить
19. Yashazz 4788 23.02.17 16:10 Сейчас в теме
(18)
Если же посмотреть на Ваши статьи, то можно таких вот велосипедов кучу найти.
Очередной некрасивый приёмчик. Очередной переход на личности. Подобная реакция характеризует Вас определённым образом, да.

Я сделал замечания по статье, а Вы (вероятно, не найдя достойного ответа) всё норовите на личность перейти. Ай-ай.

Если бы я гнался за рейтингом, я бы ещё лет семь назад вывалил бы кучу своих наработок и айда. Мои публикации в основном вынужденные, либо life-эмоции. Желай я рейтинга, я б их, наверное, в "лайф" не вносил, верно?))) Так это не статьи, это именно заметочки с личной позицией, навроде того срача про асинхронность или передачу клиент-сервер.

Я вообще не понимаю, зачем делать обучающие статьи, если есть ИТС, дев-трейн и тому подобное, я вообще не понимаю, с какой радости я должен делиться тем, что сам изучил и потратил своё время, с кем-то ещё. Чтобы пионеры халявили и не умели сами? Нетушки, мне потом такие сотрудники не будут нужны. Единственный раз, когда я сделал такую статью, грешен, это когда про XPath - сам себе антисклерозник соорудил, примерно как Трактор в своё время. Ну хотите, её тоже во вне-рейтинговую перекину?

Если человек сам, носом, ползком по шпалам, не пролопатит некую тему - раз, два, десять, - он так и останется "одинэснегом", а не программистом-разработчиком. Спрашивают тут на собеседовании у одного: как будете решать такую задачу. А он мне и говорит: "на инфостарте скачаю". Вот и нафига, спрашивается, поощрять лень?
21. starik-2005 3082 23.02.17 19:06 Сейчас в теме
(19)
Если человек сам, носом, ползком по шпалам, не пролопатит некую тему - раз, два, десять, - он так и останется "одинэснегом", а не программистом-разработчиком. Спрашивают тут на собеседовании у одного: как будете решать такую задачу. А он мне и говорит: "на инфостарте скачаю". Вот и нафига, спрашивается, поощрять лень?
Вот поэтому я и пишу обычно псевдокод, чтобы просто так не скопипастить было. Вы тоже так делаете? А кто тут ныл сначала о "дай код":
Если уж упомянули про добавление подчинённых реквизитов к объектам "ДанныеФормыКоллекция", связанным с объектами БД, особенно с основным реквизитом формы, то уж распишите нормально, когда этот кэш сбрасывается и когда нет. И как сериализуется, и как передаётся, итд. А то, знаете, фраза "заполнять данную колонку придется при каждом открытии документа" это далеко-о-о не всё, что придётся делать)))
а потом сетовал о песочнице:
Я не завидую, я огорчён: спрос рождает предложение; такими темпами мы рискуем превратить ИС в песочницу для студентов, а на то и других ресурсов полно, вот хоть devtrain.

Вы уж определитесь, что хотите.
user1804494; +1 Ответить
20. Yashazz 4788 23.02.17 16:26 Сейчас в теме
Собственно, потому у таких публикаций и столь высокий рейтинг, что это позволяет делать бездумный копипаст и вообще поменьше напрягаться. И мне не кажется, что поощрять подобный подход - правильно.
22. softberry 2 10.12.18 05:56 Сейчас в теме
Автору спасибо! Сделал немного более универсально. Выходила ошибка при добавлении более одной таблицы на форму. Поэтому добавил параметр ПостфиксИмениКолонки. Если более 1 таблицы на форме, то его нужно заполнять любым символом, например, "_1"
Процедура СоздатьТаблицуНаФорме(ТаблицаИсточник, ИмяТаблицыНаФорме, ПостфиксИмениКолонки = "")
	// добавим таблицу: сначала саму таблицу, потом колонку.
	Реквизиты = Новый Массив;
	Реквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицыНаФорме, Новый ОписаниеТипов("ТаблицаЗначений")));
	Для Каждого Ст ИЗ ТаблицаИсточник.Колонки Цикл
		Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, ИмяТаблицыНаФорме));
	КонецЦикла;

	// добавим реквизиты на форму
	ИзменитьРеквизиты(Реквизиты);

	// добавим элементы формы
	Таб = Элементы.Добавить(ИмяТаблицыНаФорме, Тип("ТаблицаФормы"));
	Таб.ПутьКДанным = ИмяТаблицыНаФорме;

	// запретим менять положение строк и сами строки, отключим командную панель
	Таб.ИзменятьСоставСтрок = Ложь;
	Таб.ИзменятьПорядокСтрок = Ложь;
	Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

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

	// заполним таблицу
	ЗначениеВРеквизитФормы(ТаблицаИсточник, ИмяТаблицыНаФорме);
КонецПроцедуры
Показать
Auser777; +1 Ответить
23. worker-good 03.07.19 12:14 Сейчас в теме
(22)
Процедура СоздатьТаблицуНаФорме(ТаблицаИсточник, ИмяТаблицыНаФорме, ПостфиксИмениКолонки = "")
// добавим таблицу: сначала саму таблицу, потом колонку.
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицыНаФорме, Новый ОписаниеТипов("ТаблицаЗначений")));
Для Каждого Ст ИЗ ТаблицаИсточник.Колонки Цикл
Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, ИмяТаблицыНаФорме));
КонецЦикла;

// добавим реквизиты на форму
ИзменитьРеквизиты(Реквизиты);

// добавим элементы формы
Таб = Элементы.Добавить(ИмяТаблицыНаФорме, Тип("ТаблицаФормы"));
Таб.ПутьКДанным = ИмяТаблицыНаФорме;

// запретим менять положение строк и сами строки, отключим командную панель
Таб.ИзменятьСоставСтрок = Ложь;
Таб.ИзменятьПорядокСтрок = Ложь;
Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

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

// заполним таблицу
ЗначениеВРеквизитФормы(ТаблицаИсточник, ИмяТаблицыНаФорме);
КонецПроцедуры
Показать


Не работает твой код
24. Auser777 02.10.19 14:36 Сейчас в теме
(23) Код работает, не выдумывайте, только что проверил
25. кольщик 23.11.19 11:16 Сейчас в теме
А если таблица значений уже есть на форме и ее не нужно создавать, какая часть кода остается?
26. starik-2005 3082 23.11.19 15:28 Сейчас в теме
(25) которая создает подчиненный табличной части реквизит-колонку и элемент, связанный с ней, на форме...
27. gupbhk1 11.04.20 16:10 Сейчас в теме
Ошибка
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(249)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(Реквизиты);
по причине:

Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
28. starik-2005 3082 11.04.20 17:21 Сейчас в теме
(27)
Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
Ну так назовите его уникально )))
29. gupbhk1 11.04.20 21:14 Сейчас в теме
(28) Хорошо, это победил. Но что Вы скажите на ошибку снизу?


// добавим элементы формы
	Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));
	Таб.ПутьКДанным = "ТаблицаНаФорме";




{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(253)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
Таб.ПутьКДанным = "ТаблицаНаФорме";
по причине:
Недопустимое значение
Недопустимое значение
30. denisros 12.04.20 21:57 Сейчас в теме
(29) А вы уверены, что созданная вами таблица значений или ТЧ формы, как реквизит этой формы, называется "ТаблицаНаФорме"?
Т.е. есть элементы формы, которые вы создаёте в:
Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));

А есть реквизиты формы, на который вы ссылаетесь:
Таб.ПутьКДанным = "ТаблицаНаФорме";

Т.о. в этот момент должен существовать реквизит формы "ТаблицаНаФорме"
31. Bespechnii_kot 16.10.20 12:35 Сейчас в теме
Благодарю за код, уже работает)
32. hiduk 126 11.12.20 11:22 Сейчас в теме
33. prusal 11.02.22 21:28 Сейчас в теме
34. Grigorop 10.05.22 16:33 Сейчас в теме
У меня при написании кода


&НаСервере
Процедура СоздатьНаСервере()

// Создаём и заполняем таблицу значений
	
	ТипМагазин = Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций");
	ТипЧисло = Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой));
	ТипДата = Новый ОписаниеТипов("Дата",,,, Новый КвалификаторыДаты(ЧастиДаты.Дата));
	
	Цель = Новый ТаблицаЗначений;
	Цель.Колонки.Добавить("Магазины", ТипМагазин, "Название магазина");
	Цель.Колонки.Добавить("Показатель", ТипЧисло, "Сумма");
	Цель.Колонки.Добавить("ДатаСобытия", ТипДата, "Дата события");
	
	
	Добавление = Цель.Добавить();
	Добавление.Магазины = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("iBox Галерея", Истина);
	Добавление.Показатель = 3500;
	Добавление.ДатаСобытия = Дата('20220401');
	
	// Создаём таблицу на форме
	
	ТФ = Новый ОписаниеТипов("ТаблицаФормы");
	
	РеквизитыТаблицы = Новый Массив;
	// В массив добавляется РеквизитФормы, в котором создаётся сам реквизит с типом "ТаблицаФормы"
	РеквизитыТаблицы.Добавить(Новый РеквизитФормы("ТаблицаНаПробнойФорме", ТФ));
	// Далее необходимо добавить в тот же массив параметры этой таблицы
	Для каждого К Из Цель.Колонки Цикл
		РеквизитыТаблицы.Добавить(Новый РеквизитФормы(К.Имя, К.ТипЗначения, "ТаблицаНаПробнойФорме", К.Имя));
	КонецЦикла;
	
	ИзменитьРеквизиты(РеквизитыТаблицы);

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

&НаКлиенте
Процедура Создать()
	СоздатьНаСервере();
КонецПроцедуры

Показать


уже вылазит следующая ошибка.

{ВнешнийОтчет.ТренировкаДобавленияСтолбцовВТаблицуНаФорме.Форма.Хиндзё.Форма(33)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(РеквизитыТаблицы);
по причине:
Недопустимый тип реквизита. Имя: "ТаблицаНаПробнойФорме"


Вроде сделал всё калькой с примера автора статьи, но не пойму, в чём дело. :(
35. starik-2005 3082 10.05.22 17:04 Сейчас в теме
(34)
в чём дело
Ну как бы это не таблица формы, а таблица значений. Как обычно путаете реквизиты формы и элементы формы, а это разные вещи.
36. Grigorop 11.05.22 12:32 Сейчас в теме
(35) Спасибо за сообщение!
Я не понимаю, что я путаю. Я сначала создал таблицу значений. Затем накидал туда данные в одну строчку.
А вот после я, перебирая столбцы ТЗ, сообщаю их параметры массиву, как показано у Вас в примере.
И вот команда ИзменитьРеквизиты() у меня возвращает описанную выше ошибку.

Вроде бы код тот же, сделан под кальку
37. starik-2005 3082 11.05.22 14:44 Сейчас в теме
(36)
Вроде бы код тот же, сделан под кальку
В коде ошибка. Сами найдите ее.
38. Grigorop 15.05.22 12:55 Сейчас в теме
(37) Да, действительно. В моём коде из-за моей невнимательности имелась ошибка! Исправил
 ТФ = Новый ОписаниеТипов("ТаблицаФормы");

на
 ТФ = Новый ОписаниеТипов("ТаблицаЗначений");

и всё понеслось!

Спасибо за очень полезную статью!!! По работе очень нужно!
39. AnPet 3 13.07.23 13:12 Сейчас в теме
Спасибо, получилось прикрутить для вывода товаров с B2B.
Но нет сортировки когда щелкаешь по колонкам. Это особенность этого объекта иди нужно еще что-то дописывать?
40. starik-2005 3082 13.07.23 20:25 Сейчас в теме
(39) Особенность. Сортировать, щелкая по колонкам, можно в динамическом списке. Он мутится чуть сложнее, но тоже где-то так. Источником для списка можете почти что угодно использовать, что в базе в виде таблицы лежит.
41. AnPet 3 13.07.23 23:41 Сейчас в теме
(40) Да просто вывел на командную панель стандартные кнопки сортировки. Для моей задачи вполне себе )
42. starik-2005 3082 15.07.23 10:52 Сейчас в теме
(41) Кстати, на новой работе появилась потребность сделать, как на последнем скрине из статьи. Ну за давностью лет забвл, полез в гугл, моя статья на втором месте, на первом месте неудобочитаемое нечто с какого-то ресурса на многобукв. Отсюда взял код создания реквизитов и элементов, оттуда взял код условного оформления. Не зря писал )))
43. AnPet 3 15.07.23 15:39 Сейчас в теме
(42) Да так часто в жизни бывает - сам себе лучший помощник ))
Из-за обилия информации я недавно стал прямо в коде вставлять ссылки на статьи и свои обширные комментарии
по новым для меня и интересным решениям )
Оставьте свое сообщение