Имя: Пароль:
1C
1С v8
УФ список колонок ТЧ на клиенте
,
0 ssugarov
 
19.01.15
13:04
Как получить список колонок табличной части в управляемой форме без обращения на сервер?
1 polosov
 
19.01.15
13:05
ТаблицаФормы (FormTable)
ПодчиненныеЭлементы (ChildItems)
Использование:

Только чтение.
Описание:

Тип: ЭлементыФормы.
Дочерние элементы таблицы: группы и поля.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
2 ssugarov
 
19.01.15
13:08
(1) Иии... я получаю список полей формы. Не пойдёт.
3 polosov
 
19.01.15
13:09
(2) А ты прям колонки ТЧ хотел?
4 ssugarov
 
19.01.15
13:10
(3) Угу
5 hhhh
 
19.01.15
13:11
(4) колонок ТЧ нет на клиенте. Просто нет. Нигде.
6 ssugarov
 
19.01.15
13:13
(5) Ок, поправка, наверное, я не совсем корректно написал - нужен список не колонок, а ИМЁН колонок
7 ssugarov
 
19.01.15
14:13
Ап
8 Aceforg
 
19.01.15
14:31
В (1) ответили же
9 Адский плющ
 
19.01.15
14:39
Если колонки не создаются динамически, то очень просто:

ИменаКолонок = "Номенклатура, Цена, Количество, Сумма";

Не обязательно вычислять то, что зашито в решение.
10 Адский плющ
 
19.01.15
14:41
Ну и вопрос не совсем точный. Колонки ТЧ и коллекция полей таблицы отображающей ТЧ в УФ это две большие разницы.
11 ssugarov
 
19.01.15
14:53
(8) Нет, по свойству ПодчиненныеЭлементы можно получить имена элементов формы, а нужны имена колонок ТЧ

(9) Состав колонок будет изменяться, каждый раз переписывать при этом код не с руки, особенно в отсутствие автора

(10) Хорошо, перефразирую до элементарного: можно ли получить список имён свойств, которые содержит свойство таблицы формы "ТекущиеДанные"?
12 Адский плющ
 
19.01.15
15:06
(11) Нельзя. Затруднительно даже на сервере - ведь поля, для которых не включено обязательное использование попадают в коллекцию текущих данных только если есть ссылающиеся на них элементы формы.

А можно вопрос, нахрена?
13 Адский плющ
 
19.01.15
15:12
Походу я с ДС путаю.
14 ssugarov
 
19.01.15
15:15
(12) Тех, которые выведены на форму, достаточно - в ТекущиеДанные они и выводятся

Нужно при начале редактирования строки сохранить её данные в структуру и перед окончанием редактирования при определенных обстоятельствах заполнить строку из этой структуры. Так вот - ключами структуры должны быть имена колонок.
15 ssugarov
 
19.01.15
15:36
Только давайте без обходных путей - как и через какие отверстия удалить гланды я и сам могу понапридумывать, меня интересует именно топик. Рабочий вариант уже есть, но он работает через вызов сервера, что некрасиво.
16 DrZombi
 
гуру
19.01.15
15:37
(6) Почему так страшно это получить на сервере? :)
17 DrZombi
 
гуру
19.01.15
15:39
(11) >>> одержит свойство таблицы формы "ТекущиеДанные"

Зачем тебе ограничивать?
Пиши сразу "ТвояТаблицаНаФорме.Выгрузить()"
18 DrZombi
 
гуру
19.01.15
15:41
(15) >>>меня интересует именно топик

Нет любезный, тебя как раз интересуют Гланды через Ректальный канал :)
19 DrZombi
 
гуру
19.01.15
15:42
(15) >>>> но он работает через вызов сервера, что некрасиво

Отсутствие Красоты то в чем?
20 ssugarov
 
19.01.15
15:46
(16) Потому, что таблицей пользуются все сотрудники, в том числе через веб-клиенты
(17) Выгрузить() на клиенте не работает
(18) Называй как хочешь, а лучше что-нибудь по теме скажи, людям через оффтоп листать неудобно
21 Адский плющ
 
19.01.15
15:51
Какой-то велосипед. Пользователь по ESC может отменить редактирование и всё встанет обратно.
22 Адский плющ
 
19.01.15
15:53
Вообще редактирование ТЧ это геморойный и стрессовый момент для пользователя. Всякие проверки в момент редактирования только бесят. А кто "отказ" в "перед окончанием редактирования" придумал, тому надо вообще колено прострелить.
23 ssugarov
 
19.01.15
15:56
(21) Если редактировалась только одна ячейка, да. А если пользователь перешёл на другую ячейку этой же строки, событие не сработает, и данные останутся.
(22) Вот эту-то проблему я и решаю.
24 ssugarov
 
20.01.15
12:45
Ап
25 polosov
 
20.01.15
13:14
(24) ТАк тебе все еще имена нужны?
26 polosov
 
20.01.15
13:22
+(25)

    Для Каждого ПолеФ Из Элементы.Таблица1.ПодчиненныеЭлементы Цикл
        Сообщить(ПолеФ.Имя);
        
    КонецЦикла;

Только Имя будет в формате ИмяТЧИмяРеквизитаТЧ
27 ssugarov
 
20.01.15
13:44
(26) Рукалицо...
28 polosov
 
20.01.15
13:45
(27) Тыж хотел имя колонки. Что не так?
29 ssugarov
 
20.01.15
13:46
(28) Это имя элемента формы
30 polosov
 
20.01.15
13:49
(29) Так ты на сервер за данными собрался?
31 polosov
 
20.01.15
13:49
+(30) вроде же страдал что на сервере тебя побьют
32 ssugarov
 
20.01.15
14:00
(31) В том-то и фишка, что не собрался - перечитай ещё раз тему
33 polosov
 
20.01.15
14:02
(32) Ну вот тебе сохранение текущей строки не зная наименование полей.



    СтруктураПолей = Новый Структура;
    
    
    Для Каждого ПолеФ Из Элементы.Таблица1.ПодчиненныеЭлементы Цикл
        
       СтруктураПолей.Вставить(Сред(ПолеФ.Имя,СтрДлина(Элементы.Таблица1.Имя)+1,СтрДлина(ПолеФ.Имя)));        
      
   КонецЦикла;
  
   ЗаполнитьЗначенияСвойств(СтруктураПолей, Элементы.Отливки.ТекущиеДанные);
34 ssugarov
 
20.01.15
14:06
(33) У элемента формы имя может быть совершенно произвольное, такой вариант не пойдёт
35 polosov
 
20.01.15
14:11
(34) Тебе то не все ли равно?
У тебя задача вернуть на место данные (или приписать свои) после выполнения некоторых условий.
Текущие имена колонок на форме у тебя в структуре.
Что тебе еще надо?
36 polosov
 
20.01.15
14:13
+(35)Или ты таки опять на сервер собрался за реальными колонками?
37 ssugarov
 
20.01.15
14:15
(35) Мне надо, чтобы в этой структуре и в свойстве ТекущиеДанные ключи ВСЕГДА совпадали. Твой вариант этого не обеспечивает.
(36) Не собрался. Вот честно, не собрался. Точно. Можешь поверить.
38 polosov
 
20.01.15
14:25
(37) Придумай вариант когда не будет совпадать. Я с ходу что-то не могу.
39 ssugarov
 
20.01.15
14:30
(38) Сходу - программеру понадобилось переименовать колонку ТЧ, а имя элемента формы переименовать забыл. Или наоборот.
40 polosov
 
20.01.15
14:31
(39) И что?
Ты же на сервер ходить не хочешь. Ты свои непотребства на клиенте делаешь.
41 ssugarov
 
20.01.15
14:33
(40) И всё. Значит, эта колонка не заполнится.
42 ssugarov
 
21.01.15
14:05
Ап
43 polosov
 
21.01.15
15:23
(42) Похоже без вызова сервера никак.
44 Адский плющ
 
21.01.15
15:32
Храни список имен колонок в СЗ, заполняй в ПриСоздании, ну и там где они меняются если есть такое.
45 ssugarov
 
28.01.15
17:55
(44) Так и сделал, но всё же интересно - в свойстве "ТекущиеДанные" ключи же откуда-то берутся
46 SUA
 
28.01.15
18:27
(11)"Состав колонок будет изменяться" - значит в этом месте состав колонок известен, там и запомнили

а берутся они отсюда
УправляемаяФорма (ManagedForm)
ИзменитьРеквизиты (ChangeAttributes)
ПолучитьРеквизиты (GetAttributes)

на клиенте уже отрисованная форма которая в курсе своих полей но не знает ничего "в метаданных" о себе (хотя на клиенте тип(реквизитформы) могли бы и реализовать)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн