Имя: Пароль:
1C
1С v8
Программный доступ к элементам формы списка (из общего модуля)
,
0 poddex
 
14.05.15
08:40
Добрый день, уважаемые специалисты и форумчане. Платформа 8.1, файловая база. Необходимо получить программный доступ к Табличному полю в форме списка Документа. Табличное поле никак не связано ни с какими реквизитами, нужно заполнять его на основе данных, отбираемых циклом из документов. Как заполнить, я сообразил, но неожиданно столкнулся с проблемой: не могу получить доступ к элементу формы Табличное Поле в форме списка документа. Что сделал:
1) На форме списка документа создал элемент формы "Таблица значений" и добавил в него руками колонки.
2) В общем модуле (стоит галка "Глобальный" написал следующий код (привожу кусок кода с проблемой)

пПереборДокументов=Документы.докДело.Выбрать();
    пЛентаНапоминаний=Документы.докДело.ПолучитьФормуСписка().ЭлементыФормы.ЛентаНапоминаний;
    Пока пПереборДокументов.Следующий() Цикл.....

Проблема в том, что я не могу загрузить в переменную пЛентаНапоминаний Элемент формы списка ЛентаНапоминаний - выскакивает ошибка "Поле объекта недоступно для чтения". Обращаюсь к объекту вроде верно, в причине ошибки пока сам не могу разобраться. Заранее спасибо за помощь.
1 Fish
 
14.05.15
08:44
(0) А зачем заполнять ТП из общего модуля? Чем модуль формы не угодил?
2 poddex
 
14.05.15
12:01
Замысел таков: приделать код, который срабатывал бы раз в определенное время и заполнял бы таблицу определенными значениями вне зависимости от того, открыта форма или нет (то есть событие формы ПриОткрытии() отпадает).
3 Fish
 
14.05.15
12:03
(2) А какой смысл заполнять ТП, да ещё и не связанное ни с какими реквизитами в неоткрытой форме? Как ты себе это представляешь?
4 poddex
 
14.05.15
12:17
Представляю так: при открытии конфигурации код опрашивает документы и, связываясь с таблицей на форме списка, путем доступа к ее колонкам (колонки же я в таблицу завел), производит заполнение таблицы кое-какими значениями. Форму, получается, надо обязательно открыть? Что-то я не понял из мануала.  Судя по  тому, что напрямую достучаться не получается - или обращение неверное, или неверно представляю.
5 tznimble
 
14.05.15
12:34
(4) Во-первых, добавив ТабличноеПоле и создав колонки Вы уже создали Реквизит Формы (ТаблицуЗначений). И именно его/её Вам надо заполнять.
НО! ЗАЧЕМ заполнять реквизит закрытой формы?
Ссылку на форму Вы не сохраняете, то есть открыть её в заполненном состоянии не сможете.
6 StanleyMarsh
 
14.05.15
12:37
(4) ну ты даешь))
нафига заполнять через форму?) Заполняй обычным способом - получи объект, заполни табличную часть. Форма - это всего лишь интерфейсное отображение реквизитов объекта.
7 poddex
 
14.05.15
12:38
(5) (6) Сейчас попробую.
8 poddex
 
14.05.15
12:43
(6) Дело в том, что Табличное Поле, которое я создал в Форме Списка Документа, я хочу сделать так, чтобы оно не было привязано конкретно к какому-то документу, а просто заполнялось данными из всех документов согласно условию. То есть код просматривает документы и заполняет таблицу данными, взятыми из этих документов. Если я буду получать каждый раз объект, то каждый раз у меня будет очередной документ. Именно поэтому я перебираю все документы, а так как Табличное Поле не привязано к какому-то документу конкретно, то я и обращаюсь к Форме Списка - форма-то одна, значит, и Табличное Поле будет одно. (5) я что-то недопёр, то есть, данные, внесенные в табличное поле таким образом, не сохранятся?
9 poddex
 
14.05.15
12:47
(5) В этой форме собирается нужная информация вне зависимости от того, какие другие формы открыты. Когда открываю эту форму с Табличным полем - данные уже собраны там. То есть, чтобы к открытию формы сбор данных не был бы привязан. Замысел как раз такой.
10 StanleyMarsh
 
14.05.15
12:50
(8) мне кажется ты как то не понятно объясняешь
"не было привязано конкретно к какому-то документу, а просто заполнялось данными из всех документов согласно условию"
это очень похоже на объект журнал документов
11 tznimble
 
14.05.15
12:53
(9) Насколько Вы представляете себе механизмы ООП?
ФормаСписка - объект.
Команда .ПолучитьФорму() - возвращает ссылку на объект
Два-три-четыре последовательных вызова этой команды вернут ссылки НА РАЗНЫЕ объекты.
В Вашем варианте, ссылку на полученный объект Вы не сохраняете. Более того, при выходе из Вашей процедуры эта ссылка будет освобождена, объект в памяти уничтожен вместе с заполненной таблицей.
Именно поэтому заполнение необходимо делать в момент открытия формы. Либо иметь глобальную переменную, в которой Вы сохраните ссылку на заполняемую форму и открывать форму по этой ссылке.
Учтите, стандартная команда интерфейса создает свой объект ФормаСписка с Вашим никак не связанный
12 FIXXXL
 
14.05.15
14:07
Сделай служебный регистрСведений и заполняй его
ну и отображай его же на форме
13 poddex
 
14.05.15
15:28
Всем спасибо. Пока что сделал все на форме ПриОткрытии формы. Насчет регистра - покопаю.
14 poddex
 
15.05.15
15:47
Реализовал по (12) , все получилось даже лучше, чем в моем первом варианте, но тут попутно назрел другой вопрос: ТабличноеПоле с типом данных РегистрСведений не содержит никаких данных, а только отображает список РегистраСведений, который я использовал в качестве Данных Табличного поля. Возникла необходимость обратиться к текущей строке ТабличногоПоля, и тут я и получил

ТекущаяСтрока = Неопределено.
Смотрю в отладчике - данные из регистра в ТекущуюСтроку не падают, но ведь событие ПриВыводеСтроки в том же Табличном поле работает, то есть, как-то данные можно получить (там параметр ДанныеСтроки). Вопрос: есть ли возможность получить данные под курсором в табличном поле? Пока не могу понять, к чему обратиться, чтобы их вытащить.
15 tznimble
 
15.05.15
15:55
(14) ТекущиеДанные Вам в помощь.
Кроме того, ТекущаяСтрока = Неопределено, если ни одна строка не выбрана.
16 poddex
 
15.05.15
16:05
В том-то и дело, что курсор на нужной строке стоит. Получаю данные так:

пТекущаяСтрока=ЭлементыФормы.ЛентаНапоминаний.ТекущиеДанные;
       Сообщить(пТекущаяСтрока.НаименованиеДела)

ТекущаяСтрока, ТекущиеДанные - в отладчике висит "Неопределено". Может, неверно делаю, что обращаюсь через элементы формы?
17 poddex
 
15.05.15
16:19
Все, разобрался. Ошибка затесалась - хотел чего-то не от того Табличного поля))
18 poddex
 
15.05.15
16:20
Всем спасибо за содействие и советы.