Программный доступ к элементам формы списка (из общего модуля) #742616


#0 by poddex
Добрый день, уважаемые специалисты и форумчане. Платформа 8.1, файловая база. Необходимо получить программный доступ к Табличному полю в форме списка Документа. Табличное поле никак не связано ни с какими реквизитами, нужно заполнять его на основе данных, отбираемых циклом из документов. Как заполнить, я сообразил, но неожиданно столкнулся с проблемой: не могу получить доступ к элементу формы Табличное Поле в форме списка документа. Что сделал: 1) На форме списка документа создал элемент формы "Таблица значений" и добавил в него руками колонки. 2) В общем модуле (стоит галка "Глобальный" написал следующий код (привожу кусок кода с проблемой) пПереборДокументов=Документы.докДело.Выбрать; Проблема в том, что я не могу загрузить в переменную пЛентаНапоминаний Элемент формы списка ЛентаНапоминаний - выскакивает ошибка "Поле объекта недоступно для чтения". Обращаюсь к объекту вроде верно, в причине ошибки пока сам не могу разобраться. Заранее спасибо за помощь.
#1 by Fish
А зачем заполнять ТП из общего модуля? Чем модуль формы не угодил?
#2 by poddex
Замысел таков: приделать код, который срабатывал бы раз в определенное время и заполнял бы таблицу определенными значениями вне зависимости от того, открыта форма или нет (то есть событие формы ПриОткрытии отпадает).
#3 by Fish
А какой смысл заполнять ТП, да ещё и не связанное ни с какими реквизитами в неоткрытой форме? Как ты себе это представляешь?
#4 by poddex
Представляю так: при открытии конфигурации код опрашивает документы и, связываясь с таблицей на форме списка, путем доступа к ее колонкам (колонки же я в таблицу завел), производит заполнение таблицы кое-какими значениями. Форму, получается, надо обязательно открыть? Что-то я не понял из мануала.  Судя по  тому, что напрямую достучаться не получается - или обращение неверное, или неверно представляю.
#5 by tznimble
Во-первых, добавив ТабличноеПоле и создав колонки Вы уже создали Реквизит Формы (ТаблицуЗначений). И именно его/её Вам надо заполнять. НО! ЗАЧЕМ заполнять реквизит закрытой формы? Ссылку на форму Вы не сохраняете, то есть открыть её в заполненном состоянии не сможете.
#6 by StanleyMarsh
ну ты даешь)) нафига заполнять через форму?) Заполняй обычным способом - получи объект, заполни табличную часть. Форма - это всего лишь интерфейсное отображение реквизитов объекта.
#7 by poddex
Сейчас попробую.
#8 by poddex
Дело в том, что Табличное Поле, которое я создал в Форме Списка Документа, я хочу сделать так, чтобы оно не было привязано конкретно к какому-то документу, а просто заполнялось данными из всех документов согласно условию. То есть код просматривает документы и заполняет таблицу данными, взятыми из этих документов. Если я буду получать каждый раз объект, то каждый раз у меня будет очередной документ. Именно поэтому я перебираю все документы, а так как Табличное Поле не привязано к какому-то документу конкретно, то я и обращаюсь к Форме Списка - форма-то одна, значит, и Табличное Поле будет одно. я что-то недопёр, то есть, данные, внесенные в табличное поле таким образом, не сохранятся?
#9 by poddex
В этой форме собирается нужная информация вне зависимости от того, какие другие формы открыты. Когда открываю эту форму с Табличным полем - данные уже собраны там. То есть, чтобы к открытию формы сбор данных не был бы привязан. Замысел как раз такой.
#10 by StanleyMarsh
мне кажется ты как то не понятно объясняешь "не было привязано конкретно к какому-то документу, а просто заполнялось данными из всех документов согласно условию" это очень похоже на объект журнал документов
#11 by tznimble
Насколько Вы представляете себе механизмы ООП? ФормаСписка - объект. Команда .ПолучитьФорму - возвращает ссылку на объект Два-три-четыре последовательных вызова этой команды вернут ссылки НА РАЗНЫЕ объекты. В Вашем варианте, ссылку на полученный объект Вы не сохраняете. Более того, при выходе из Вашей процедуры эта ссылка будет освобождена, объект в памяти уничтожен вместе с заполненной таблицей. Именно поэтому заполнение необходимо делать в момент открытия формы. Либо иметь глобальную переменную, в которой Вы сохраните ссылку на заполняемую форму и открывать форму по этой ссылке. Учтите, стандартная команда интерфейса создает свой объект ФормаСписка с Вашим никак не связанный
#12 by FIXXXL
Сделай служебный регистрСведений и заполняй его ну и отображай его же на форме
#13 by poddex
Всем спасибо. Пока что сделал все на форме ПриОткрытии формы. Насчет регистра - покопаю.
#14 by poddex
Реализовал по , все получилось даже лучше, чем в моем первом варианте, но тут попутно назрел другой вопрос: ТабличноеПоле с типом данных РегистрСведений не содержит никаких данных, а только отображает список РегистраСведений, который я использовал в качестве Данных Табличного поля. Возникла необходимость обратиться к текущей строке ТабличногоПоля, и тут я и получил ТекущаяСтрока = Неопределено. Смотрю в отладчике - данные из регистра в ТекущуюСтроку не падают, но ведь событие ПриВыводеСтроки в том же Табличном поле работает, то есть, как-то данные можно получить (там параметр ДанныеСтроки). Вопрос: есть ли возможность получить данные под курсором в табличном поле? Пока не могу понять, к чему обратиться, чтобы их вытащить.
#15 by tznimble
ТекущиеДанные Вам в помощь. Кроме того, ТекущаяСтрока = Неопределено, если ни одна строка не выбрана.
#16 by poddex
В том-то и дело, что курсор на нужной строке стоит. Получаю данные так: ТекущаяСтрока, ТекущиеДанные - в отладчике висит "Неопределено". Может, неверно делаю, что обращаюсь через элементы формы?
#17 by poddex
Все, разобрался. Ошибка затесалась - хотел чего-то не от того Табличного поля))
#18 by poddex
Всем спасибо за содействие и советы.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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