Неуправляемый интерфейс и обновление отображения введенных кодом данных на форме #705205


#0 by beholder13
Доброго времени суток, коллеги. Я окончательно запутался и нуждаюсь в вашей помощи, пишу в надежде ее получить. Имеется ЗиУП 2.5, в который для удобства использования из третьего были перетянуты некоторые объекты на управляемом интерфейсе с тотальным комментированием и переписыванием, но в целом все работает. Сейчас в процессе реализации хотелки достиг вполне себе обыкновенного состояния затыка. Ниже описание непосредственно ситуации. Есть документ с управляемой формой, в нем имеется некая табличная часть (далее ТЧ). На форме имеется реквизит Объект с типом "ДокументОбъект.<ИмяДокумента>". На форму ТЧ положена напрямую, т.е. на форму передается весь документ со своими внутренностями и выбранные поля и таблицы выведены напрямую, тем самым тип таблицы на форме (далее ТаблицаНаФорме) - ДанныеФормыКоллекция. Типовым механизмом в обработчике события ТаблицаНаФорме.ПередНачаломДобавления прописано добавление строки именно в эту таблицу, следующим образом: // Процедура в общем клиентском модуле, вызываемая из обработчика события, Все достаточно просто, обработчик перекрывает механизм платформы, рисует строку в таблице формы и позиционирует на первую ячейку в строке. Мне необходимо вклиниться в этот процесс, заполнив эту строку сразу определенными значениями, ну, допустим, поставить сразу значение в ВтораяКолонка этой строки. Руководствуясь тем, что строка нарисована в реквизите формы, делаю это приблизительно следующим методом: НоваяСтрока = Форма.Объект.ТаблицаНаФорме.Получить(ИдентификаторНовойСтроки); // Тип - ДанныеФормыЭлементКоллекции Значений гораздо больше, там на сервере еще делаются запросы, все это перекручивается, но, по сути, все это утрируется до этих двух строчек. Вставляю я их туда, где в первом листинге указано <...>. Таким образом, в отладчике к моменту выхода из формы в Форма.Объект.ТаблицаНаФорме в последней строке ВтораяКолонка имеет в себе Значение. Более того, внутренние обработчики прекрасно видят это значение и делают свои расчеты на основании него. Но, как уже, думаю, понятно, визуально на форме его не видно. Методы типа Форма.ЗначениеВРеквизитФормы или Форма.Прочитать неактуальны, потому что на сервере, по сути, в реквизите формы значение имеется, но оно не отражено на клиенте. При выборе значения в ячейке ПерваяКолонка строки ячейка ВтораяКолонка очищается, посему вывод достаточно прост - клиентская часть даже не подозревает о том, что там что-то есть, отправляет на сервер пустое значение и, тем самым, переписывает то, что я туда воткнул. Вопрос вполне очевиден - что я делаю не так? =) Надеюсь, описание проблемы достаточно внятное. Заранее благодарю за содействие.
#1 by Жан Пердежон
какая-то каша в : куча лишней инфы, зато самое важное, видимо, сокрыто в <...>, но если пальцем в небо, то:
#2 by beholder13
В <..> сокрыта не несущая в в себе смысла по отношению к задаче раскраска четных и нечетных строк, убрал, чтоб не нагромождать. потому как ДанныеНовойСтроки получено методом Добавить, а НоваяСтрока - методом Получить с идентификатором, полученным напрямую из ДанныеНовойСтроки. То, что данные попадают в нужную строку, говорит о том, что идентификатор верен (в данном случае о совпадает с индексом, вариант использовать индекс приведет к тому же результату). Следовательно, что пнем об сову, что совой об пень. Ниже СП по обоим методам в качестве пруфа. ДанныеФормыКоллекция (FormDataCollection) Добавить (Add) Синтаксис: Добавить Возвращаемое значение: Тип: ДанныеФормыЭлементКоллекции. Описание: Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Синтаксис: Получить(<Индекс>) Параметры: <Индекс> (необязательный) Тип: Число. Расположение элемента в коллекции. Возвращаемое значение: Тип: ДанныеФормыЭлементКоллекции. Описание: Получает элемент по индексу. Работает аналогично оператору [].
#3 by МимохожийОднако
"Форма.ЗначениеВРеквизитФормы или Форма.Прочитать неактуальны". Сумлеваюсь я в этом утверждении
#4 by beholder13
Постараюсь развеять Ваши сомнения. Метод Форма.ЗначениеВРеквизитФормы, очевидно, помещает значение в реквизит формы, и он не актуален по причине того, что я работаю с методами Форма.Объект.ТаблицаНаФорме, что, по сути своей, уже является значением реквизита формы (Форма.Объект и все, что к нему имеет отношение). Любое прямое помещение значения из, например, самого объекта в этот реквизит на выходе из обработчика просто сольет в реквизит все, что там есть, в том числе имеющуюся в объекте ТЧ, в которой новой добавленной строки не существует. Метод Форма.Прочитать приведет к аналогичным последствиям, только при этом он полностью получит из объекта все записанные данные, уничтожив последствия всех изменений на форме с момента последней записи документа, в том числе, добавление новой строки. Записывать документ сразу при создании строки бессмысленно, так как строка еще не заполнена необходимыми значениями, и в записи будет отказано.
#5 by beholder13
И да, в объекте на сервере эта строка, теоретически, должна создасться после завершения выполнения обработчика, при этом в нее должны быть переданы указанные в реквизите формы значения. Так и происходит, но эти значения не отображаются на форме на клиенте, и их существование игнорируется при ручном изменении любого поля в строке. В любом случае, это единственный обработчик добавления новой строки для объекта типа ТаблицаФормы.
#6 by Жан Пердежон
попробую еще раз: из каши в совсем неочевидно, что ты собираешься получить? Назови уже лучше сразу сам документ и форму из ЗУП 3.
#7 by beholder13
Табель это, я выходные туда хочу по производственному календарю добавить, чтобы автоматом проставились при создании новой строки.
#8 by beholder13
Честно говоря, я не совсем понимаю, как так получается, что данные, изменяемые прямо в реквизите формы, который сообщается напрямую с объектом, не отражаются на форме и игнорируются при дальнейшем изменении данных этого реквизита... Скорее всего, я забываю прописать какой-то метод, который бы логически завершил все это действо, но бессмысленно втыкаю и туплю...
#9 by beholder13
Ну или, наоборот, чуть позже происходит очистка =) проблема решена, перенес в другое место, туда, где проставляются непосредственно данные в строке при изменении данных в ПерваяКолонка. Всем спасибо =)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям