|
Определить ТаблицуЗначений, связанную с ТаблицейФормы | ☑ | ||
---|---|---|---|---|
0
zelenprog
07.07.23
✎
14:20
|
Добрый день!
У объекта внешней обработки есть несколько реквизитов типа ТаблицаЗначений. На форме есть несколько страниц (вкладки), на каждой странице - ТаблицаФормы, связанная с соответствующей ТаблицейЗначений. Также на форме есть поле ввода и кнопка, при нажатии на которую должно быть выполнено действие с выделенной строкой в таблице на текущей странице. Обычно, когда последний щелчок мыши был на таблице, то при нажатии на кнопку текущую строку можно получить такой командой: "ЭтаФорма.ТекущийЭлемент.ТекущиеДанные". Однако, если перед нажатием на кнопку перейти в поле ввода, то возникает проблема. "ЭтаФорма.ТекущийЭлемент" - уже ссылается на поле ввода. Хотя выделенная строка в таблице есть. Можно получить ТаблицуФормы вот так:
Но у этой таблицы значения свойств "ТекущаяСтрока" и "ТекущиеДанные" имеют значение "Неопределено". Как получить выделенную строку? Подскажите, пожалуйста. |
|||
1
azernot
07.07.23
✎
14:23
|
(0) ЭлементыФормы.ТаСамаяТаблицаФормы.ТекущаяСтрока
Ну или ЭлементыФормы.ТаСамаяТаблицаФормы.ВыделенныеСтроки |
|||
2
azernot
07.07.23
✎
14:25
|
Т.е. задача сводится к тому, чтобы определить, какое именно табличное поле сейчас нужно обработать А это можно определить, например, проверив, какая сейчас текущая страница у группы формы типа "страницы".. Ну или любым другим способом.
|
|||
3
Жан Пердежон
07.07.23
✎
14:27
|
ТекущиеДанные
ТекущаяСтрока ВыделенныеСтроки Если Неопределено - скорее всего что-то не так делаешь. Цикл - убери, лучше определять имя элемента-таблицы по имени страницы. |
|||
4
Admin_Net_1C
07.07.23
✎
14:29
|
(1) скорее всего, раз активный элемент уже не таблица на форме, а поле ввода, то поэтому у таблицы на форме "ТекущаяСтрока" и "ТекущиеДанные" = Неопределено. Вижу только вариант: в событии ПриАктивизацииСтроки запоминать значения из ТекущиеДанные таблицы и далее уже использовать их, когда сменили фокус на поле ввода
|
|||
5
azernot
07.07.23
✎
14:42
|
(4) Нет. Текущая строка (текущие данные) в табличном поле, если она хотя бы один раз была выбрана, потом никуда не денется, даже если активный элемент формы поменяется.
Очень легко в этом убедиться через отладчик. В форме, где несколько табличных полей, в каждом выделить разные строки, а потом остановиться на любом месте, по любой кнопке. В коллекции "Элементы" у всех элементов типа "ТаблицаФормы" будет заполнено свойство ТекущаяСТрока и ТекущиеДанные |
|||
6
zelenprog
07.07.23
✎
15:34
|
(3) >> лучше определять имя элемента-таблицы по имени страницы
Это как? Жестко в коде забить имена? Если (ИмяСтраницы = "СтрГрузополучатели") Тогда ИмяТаблицы = "ТабГрузополучатели"; ИначеЕсли (ИмяСтраницы = "СтрКонтрагенты") Тогда ИмяТаблицы = "ТабКонтрагенты"; КонецЕсли; |
|||
7
zelenprog
07.07.23
✎
15:37
|
(5) Ваша правда.
Мне почему-то первый раз в отладчике показалось, что в такой ситуации "ТекущаяСтрока" и "ТекущиеДанные" имели значение "Неопределено". А сейчас проверил еще раз - действительно у всех элементов "ТаблицаФормы" свойство "ТекущаяСтрока" и "ТекущиеДанные" заполнены как положено. Спасибо. Видимо, в первый раз я что-то не так сделал. |
|||
8
zelenprog
07.07.23
✎
15:50
|
А можно ли по ссылке на "ТаблицуФормы" получить ссылку на связанную с ней "(ТаблицуЗначений)"?
Точнее, в отладчике тип этой "(ТаблицыЗначений)" отображается как "ДанныеФормыКоллекция". Как бы ее "вытащить"? |
|||
9
azernot
07.07.23
✎
15:58
|
(6) Вам виднее, как лучше. Например, у вас это может быть
ИмяТаблицы = СтрЗаменить(ИмяСтраницы, "Стр", "Таб"); (8) Непонятно что вам надо и зачем. Таблица формы - элемент формы для отображения "табличных" данных. И это может быть табличная часть, динамический список, произвольный реквизит формы типа "ТаблицаЗначений" и т.п. При этом, это именно "ДанныеФормыКоллекция". Потому как на клиенте "ТаблицаЗначений" недоступна |
|||
10
zelenprog
07.07.23
✎
16:18
|
(9) Это внешняя обработка по обработке контрагентов.
Есть несколько ТаблицЗначений, которые отображаются на разных вкладках (страницах). Каждая строка этих ТаблицЗначений - это информация о контрагентах, которая загружена из внешнего файла. Все контрагенты (точнее загруженная информация о контрагентах) условно разделены на "категории". Каждая "категория" отображается на своей странице. Поэтому и понадобилось сделать несколько страниц и несколько Таблиц. Нужно сделать следующее. Нажимаем на кнопку, выполняем некоторые действия с контрагентами в базе в соответствии с выделенной строкой в ТаблицеФормы на текущей странице. После выполнения действия нужно изменить ТаблицуФормы. Например, нажимаем кнопку "Удалить". По текущей странице определяем имя ТаблицыФормы. Из этой ТаблицыФормы берем номер строки (ТекущаяСтрока). Как-то эту информацию надо передать на сервер, чтобы процедура на сервере "поняла" с какой строкой и с какой "ТаблицейЗначений" надо работать. Затем процедура на сервере берет по номеру текущей строки в "связанной" ТаблицеЗначений нужные данные. Затем находит по этим данным контрагента в базе и удаляет его из базы. Затем нужно удалить соответствующую строку из "ТаблицыЗначений". Ну и в итоге обновить "ТаблицуФормы". Получается, что как-то нужно установить связь между ТаблицейФормы, и связанной с ней ТаблицейЗначений. Иначе сервер не поймет с какой таблицей работать. |
|||
11
azernot
07.07.23
✎
16:26
|
(10) Ну так и передавайте на сервер имя этой таблицы. Я по-прежнему не понимаю, в чём проблема.
Очевидно, что для чего-то же у вас организованы РАЗНЫЕ таблицы, а значит в них хранятся РАЗНЫЕ данные и обрабатывать их надо по-разному. Вот и сделайте процедуру маршрутизации, которая по имени таблицы, имени команды понимает, что нужно сделать и с чем, и далее уже вызывает соответствующий обработчик. А если данные у вас одинаковые, то вам не нужны разные таблицы. Вы вполне можете обойтись одной, но на разных страницах отображать по-разному отобранные данные. Например отбор по "категории". |
|||
12
Мультук
гуру
07.07.23
✎
16:39
|
(10)
Затем процедура на сервере берет по номеру текущей строки в "связанной" ТаблицеЗначений нужные данные. -/- "Преждевременная оптимизация -- корень всех зол" (с) Вы изобретаете какой-то велосипед с квадратными колёсами. Сколько строк и столбцов в вашей неведомой таблице ? И я так понял, всё это ради "одноразовой обработки" P.S. Вы пытаетесь удалить дубли контрагентов ? В УТ, ЕРП, КА -- уже есть встроенная обработка. В ней же можно посмотреть "а как это делает" 1С |
|||
13
lubitelxml
07.07.23
✎
16:40
|
(0) цепляйся к текущей странице, как уже подсказали выше, можно реквизит формы добавить, и ПриСменеСтраницы (ну или как там событие называется) присваивай имя нужной тебе ТЧ, и далее обрабатывай
|
|||
14
Жан Пердежон
07.07.23
✎
16:43
|
(6)
Как из строк "СтраницаТаблица1", "СтраницаТаблица2", "СтраницаТаблица3" получить "Таблица1", "Таблица2", "Таблица3"? Это не то, что программист должен спрашивать) |
|||
15
zelenprog
07.07.23
✎
17:04
|
(11) >> Ну так и передавайте на сервер имя этой таблицы. Я по-прежнему не понимаю, в чём проблема.
(14) >> Как из строк "СтраницаТаблица1", "СтраницаТаблица2", "СтраницаТаблица3" >> получить "Таблица1", "Таблица2", "Таблица3"? Хм... Ну я думал, что можно обойтись без строк. Я думал, что можно как-то тип такого: ТекущиеДанные.РодительТаблицаФормы.СвязаннаяТаблицаЗначений. А пользуясь строками, на сервере придется писать что-то типа:
Ну как-то это не красиво что-ли. |
|||
16
zelenprog
07.07.23
✎
17:09
|
(12)
>> Сколько строк и столбцов в вашей неведомой таблице ? Это продолжение нашего "теоретического" обсуждения. Давайте продолжим в той теме, в которой мы это начинали обсуждать: Обработка выбора в ТаблицеФормы - открыть элемент справочника Вы там так и не ответили. >> Вы изобретаете какой-то велосипед с квадратными колёсами. >> И я так понял, всё это ради "одноразовой обработки" Возможно. Просто я не знаю как сделать по другому. "Я пока только учусь". |
|||
17
azernot
07.07.23
✎
17:15
|
(15) >Я думал, что можно как-то тип такого: ТекущиеДанные.РодительТаблицаФормы.СвязаннаяТаблицаЗначений.
Ну, допустим у элемента формы есть "ПутьКДанным", там хранится имя нужной вам таблицы. |
|||
18
dmt
07.07.23
✎
17:23
|
(15) обычно так и делают, как тебе и написали:
лТЗ = Объект["ТЗ" + пИмяТЗ] |
|||
19
Жан Пердежон
07.07.23
✎
17:31
|
(15) если давать имена элементам и реквизитам рандомно, то другого варианта не будет;
если придерживаться каких-то правил - это потом можно в коде использовать |
|||
20
zelenprog
09.07.23
✎
06:34
|
(17), (18)
Скомбинировал "ПутьКДанным" и обращение к реквизиту через "Объект[пИмяТЗ]". Работает! Спасибо! Получилась вот такая функция:
Но свойство "ПутьКДанным" доступно только на сервере. &НаКлиенте эта функция не сработает, &НаКлиенте придется делать с помощью строк. И еще попалась интересная статья на похожую тему: https://infostart.ru/1c/articles/1116586/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |