УФ: программное создание/удаление таблицы формы #587253


#0 by AAlexandra
Помогите, пожалуйста, разобраться: 1)Не получается программно удалить таблицу на форме. Создаю так: Удаляю так: Если создание-удаление делать в одной процедуре (что бессмысленно), код отрабатывает без ошибок. Если разнести по разным процедурам - на удалении 1с-ка просто вылетает без объявления войны. 8( Что делаю не так? 2) На форме есть реквизит типа Динамический список. Визуально в конструкторе формы я вижу доступные поля таблицы. Как получить этот же список в коде программно?
#1 by jsmith82
читай в книге разработка управляемого интерфейса попробуй сначала получить реквизит через метод
#2 by jsmith82
Синтаксис: ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
#3 by AAlexandra
читала, создание таблицы на форме делала по ней.. Про удаление ничего не нашла. Что значит "получить реквизит через метод"? я не реквизит формы программно добавляю, а элемент формы. И именно его, саму ТаблицуФормы, не получается удалить. Реквизит формы (который динамический список) создан в конструкторе формы, его я в данный момент не трогаю.
#4 by jsmith82
сорри, не вник, щас попробую у себя сделать
#5 by Ochkarito
1. Посмотри, что в переменной Элементы передается, в другой процедуре. 2. Возможно некорректный синтаксис метода добавить ЭлементыФормы.Добавить(<Тип>, <Имя>, <Видимость>, <ПоместитьНа>)
#6 by vmv
разве не создаст РЕКВИЗИТ формы? лепет, что де я создаю всего-лищь ЭЛЕМЕНТ формы, ей невнятен - она создаст и элемент и реквизит. посему ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>) нужно использовать и при создании и при удалении
#7 by vmv
я так удаляю, колонки тоже нужно
#8 by AAlexandra
Элементы - там все элементы формы, смотрела в отладчике. Ошибка вот на этой строке: Элементы["МояНоваяТаблица"] в отладчике отображается корректно, Тип ТаблицаФормы. ВсеЭлементыФормы (FormAllItems) Добавить (Add) Синтаксис: на форме уже есть реквизит с именем ДокументыНаСкладе. Второй такой же не создается, это бы привело к ошибке. Удалить хочу только элемент формы, реквизит не трогать.. спасибо, сейчас попробую..
#9 by AAlexandra
Так ты удаляешь только колонки, сама ТаблицаДанных остается.. Правда, на форме она пользователю не видна, раз колонок на ней нету. А хотелось бы и таблицу тоже удалить.
#10 by AAlexandra
ТаблицаДанных => ТаблицаФормы
#11 by AAlexandra
Удаление: ТаблицаФормы    = Элементы["МояНоваяТаблица"]; Колонки нормально удаляются, сама ТаблицаФормы - нет. Повторюсь, если создание и удаление таблицы формы происходит в ОДНОЙ процедуре (т.е. между ними нет обновления отображения, как я понимаю), код ошибки не вызывает.
#12 by vmv
таблицу формы нужно удалить точно также ЭтаФорма.ИзменитьРеквизиты(,мУдаляемыхРеквизитов); ЭтаФорма.ИзменитьРеквизиты(,мУдаляемыхРеквизитов); но на этапе удаления реквизита таблицы в мУдаляемыхРеквизитов должен быть один элемент реквизит формы типа "ТаблицаФормы" полсе первого оператора у элемента формы "уйдет" путь к данным и он станет невидим, но элемент без пути тоже надо удалить, как-то так
#13 by mozzga
делайте через ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
#14 by vmv
тогда форма не перерерисовывается на сервере - в памяти пришло, в памяти ушло
#15 by AAlexandra
, а если мне не нужно удалять РЕКВИЗИТ с формы? Хотя программное создание и удаление реквизита меня вполне устроит =) РЕЗЮМЕ: Ошибка не возникает, если реквизит также создавать программно и удалять ПЕРЕД удалением самой таблицы данных. Причем вручную удалять колонки не обязательно, при удалении ТаблицыФормы они удаляются сами. Если кому интересно, работающий код: Создание: Удаление: jsmith82, Ochkarito, vmv, mozzga - спасибо всем БОЛЬШОЕ! =) *без особой надежды* А как на счет того, чтобы программно получить список доступных колонок из динамического списка? Есть варианты?
#16 by vmv
доступных слишком расплывчато. в элементе формы(колонке) есть свойство доступность - его получить лекго если колонка видима, с видимостью все сложнее, там роли подцепляются и прочее, но елси она видима, то видима - при открытии все можно прочитать по отборам тоже не сложно типа так
#17 by AAlexandra
Не совсем о том.. я хочу программно добавить на форму реквизит типа ДинамическийСписок, установить ему программно источник данных: основную таблицу / запрос. И потом программно отрисовать на форме таблицу со всеми колонками, которые получаются в запросе / есть в основной таблице. Может как-то просто можно получить список колонок из реквизита формы - Динамического списка?
#18 by vmv
Элементы.Список.ПодчиненныеЭлементы разве не выдает вам коллекцию колонок дин. списка на клиенте со всей палитрой свойств?) Правда есть подводный каменнь, если Элементы.Список.ПодчиненныеЭлементы содержат в себе группы колонок, то эти группы нужно знать иобходить тоже или написать функцию которая пудет делать обход Элементы.Список.ПодчиненныеЭлементы запригивать в группы и собирать в массив только элементы колонки - это более практично и универсально, тогда можно группировать колонки на форме как хзочешь и этой функцияей их полечать, даже не помня имена групп.
#19 by AAlexandra
Элементы.Список.ПодчиненныеЭлементы.Количество = 0 в моем случае. вот их-то (колонки) я и хочу его заполнить..
#20 by vmv
вы не создали реквизиты(колонки) в блоке кода, а лишь элементы(колонки) РеквизитТаблЗначений = ЭтаФорма["_ДокументыНаСкладе"]; надо примерно так добавить реквизиты-колонки, а потом реквизиты-элементы, при удалении аналогично. Я ни разу не пробовал создавать элементы формы без связанных с ними реквитами формы. Колонка таблицы формы - это такой же реквизит фырмы как и обычный, только вложенный. А элемент - это просто мусор на форме, если он не связан с реквизитом, допускаю только существование флажка без связи с реквизитом для управленния чем-либо на форме, пока она живет. // Сформируем массивы реквизитов формы и элементов(колонок) относительно добавляемых колонок
#21 by vmv
РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяТаблицыФормы << третий параметр очень важен и легко ошибиться, если не прочесть СП)
#22 by vmv
+ и только после создание реквизиов-колонок имеет смысл создавать элементы-колонки, т.к. у нас уже будут программно созданные пути и связи списка данных с реквизитами-колонками. поправить дле своей таблицы(дин. списка)
#23 by AAlexandra
мой вопрос сводится к тому, как получить "ТзИсточника.Колонки", если ТзИсточника имеет тип "Динамический список". И далее 2 варианта источника данных для него: 2) Произвольный запрос. Программно я реквизиты-колонки не создавала, указания основной таблицы (или запроса) было достаточно, чтобы они создались платформой автоматически. В режиме конструктора формы, когда добавляю новый реквизит-динамический список, реквизиты-колонки же у меня создаются автоматически, и я их визуально вижу в конструкторе формы, могу перетащить на поле формы - получатся элементы-колонки.. Можно ли, не создавая ПРОГРАММНО реквизиты-колонки, получить их список, как я его вижу в конструкторе формы?
#24 by vmv
ИмяТаблицыФормы + Колонка.Имя - неприниципально, можно писать и Колонка.Имя, просто при удалении/добавление нужно четко разделять реквизиты/элементы колонки и понимать какие там имена(идентичные с именами колонок списка или на форме к элементам-колонкам мы прилепили префикс) усе, полный разклад по динамике таблицы формы, осталось только для себя заточить
#25 by vmv
нельзя, по крайней мере как я сказал, элементы формы(колонки, просто элементы) без привязки к реквизитам формы - по моему мнению просто мусор на форме. Все же просто при динамическом создании 1. добавляем реквизиты-колонки, ибо они рождают пути 2. добавлем элементы-колонки с четкой связью с этими реквизитами и таблицей владельцем при динамическом удалении 1. удаляем элементы-колонки 2. удаляем реквизиты-колонки 2. удаляем обновляем таблицу формы
#26 by vmv
+ или если реквизиты-колонки уже родились, то вы их правильно не связяли с элементами-колонками. см. последний блок кода. Ситуация нонсенс, если все связи срослись)
#27 by Гот
Я делал через доступные поля отбора. Через ж, конечно, может кто подскажет, как сделать лучше? Вот пример полностью &НаСервере
#28 by Гот
Вот, если без лишнего кода...
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С