|
Как организовать ввод данных. Нужен совет. (Управляемая форма). | ☑ | ||
---|---|---|---|---|
0
vmprog
22.11.11
✎
12:13
|
Здравствуйте.
Необходимо на форме обработки организовать ввод данных в некую таблицу в которой будет фиксированное количество строк, но не фиксированное количество колонок. Из идей пока делать через обычную таблицу значений и потом ее возвращать на форму. Как и куда сохранять данные мне понятно, вот как организовать удобный ввод? Посоветуйте как правильно делать подобное. Реквизит какого типа лучше использовать на форме? |
|||
1
Повелитель
22.11.11
✎
12:19
|
Скажи для чего, может идеи тебе подкинут другие
|
|||
2
Escander
22.11.11
✎
12:27
|
(0) какого типа - зависит от того что будет вводится. Дайте больше данных иначем ни когда не узнаете оптимальный вариант... самое главное а нафига? Кол-во столбцов при создании формы уже известно или меняется в процессе ввода формы?
|
|||
3
Grusswelle
22.11.11
✎
12:27
|
(0) "Перевернуть" таблицу на 90°, чтобы было бы фиксированное кол-во колонок, а пользователь добавлял строки.
|
|||
4
Escander
22.11.11
✎
12:33
|
(0)транспонирования в УФ нет
|
|||
5
bvg
22.11.11
✎
12:47
|
(0)может строки со столбцами пменять местами ?
|
|||
6
vmprog
22.11.11
✎
12:57
|
Строки будут заполняться по количеству элементов справочника.
Столбцы будут по количеству пользователей базы данных. Тип вводимого значения "Число". |
|||
7
vmprog
22.11.11
✎
12:58
|
(5) Строки со столбцами я поменяю местами когда это все сохранять буду в табличную часть.
Весь огород нужен для удобного визуального представления таблички для ввода данных. |
|||
8
Escander
22.11.11
✎
13:03
|
(6) делаешь реквизит объекта типа таблица, ложишь его на форму, при создании на сервере создаёшь сколько нужно строк и столбцов и заполняешь все чем нужно. На клиенте блокируешь работу обработчиков ПередНачаломДобавления и ПередУдалением (Отказ = Истина;) ну вот типа и вся схема.
|
|||
9
vmprog
23.11.11
✎
15:23
|
(8) Сделал так:
Создаю реквизит формы с типом ТаблицаЗначений (колонок нет) Добавляю этот реквизит на форму. НА ФОРМЕ ОН НЕ отображается тк. нет колонок. В модуле добавляю колонки и возвращаю в реквизит формы: [code] &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ТабСФормы = РеквизитФормыВЗначение("ТабВводаДанных"); ТабВвода = Новый ТаблицаЗначений; ТабВвода.Колонки.Добавить("Сотр1"); НоваяСтрока = ТабВвода.Добавить(); НоваяСтрока.Сотр1 = "Иванов"; ЗначениеВРеквизитФормы(ТабВвода, "ТабВводаДанных"); ТабВводаДанных.Загрузить(ТабВвода); Элементы.ТабВводаДанных.АктивизироватьПоУмолчанию = истина; Элементы.ТабВводаДанных.Обновить(); Элементы.ТабВводаДанных.Видимость=Истина; КонецПроцедуры [/code] Проблема в том, что таблица не отображается на форме. Ее вообще нет. |
|||
10
vmprog
23.11.11
✎
16:17
|
люди ну помогите же.
|
|||
11
xReason
23.11.11
✎
16:20
|
Я так понимаю, что изначально на форме есть эта ТЗ "ТабВводаДанных"?
|
|||
12
vmprog
23.11.11
✎
16:33
|
Да, только визуально ее не видно.
|
|||
13
Sergeyspb13
23.11.11
✎
16:46
|
почему сразу не добавляете элементы справочника, а потом уже колонки добивать с юзерами?
|
|||
14
vmprog
23.11.11
✎
16:50
|
(13) не понял.
Надо сначала добавить колонки которые будут соответствовать пользователям, а потом уже добавить строки. Но сейчас проблема вообще заставить отображаться ТЗ которую я заполнил. Вот было же в 7.7 такое понятие как таблица для ввода данных. Почему в 8 нет подобного механизма. |
|||
15
vmprog
23.11.11
✎
17:33
|
heeeelp
|
|||
16
xReason
23.11.11
✎
17:41
|
надо примерно так делать
НовоеПоле = Элементы.Добавить("Поле", Тип("ПолеФормы"), Элементы.Таблица); НовоеПоле.Заголовок = "Поле"; НовоеПоле.ПутьКДанным = "Объект.Таблица.НомерСтроки"; |
|||
17
vmv
23.11.11
✎
19:27
|
просмотр динамических таблиц на УФ вполне реален, на управляемой форме делаем
реквизит таблицазначений, прописывваем в него постоянные реквизиты(номерстроки,...) или не прописываем, создаем таблицу формы как элемент формы и &НаКлиенте Процедура ПросмотрДанныхТзИзХранилища(Команда) мПредопределенныхКолонок = Новый Массив; // Преобразуем имена в верхний регистр для регистронезависимого поиска мПредопределенныхКолонок.Добавить(ВРег("НомерСтроки")); ИмяТаблицыФормы = "СохраненнаяТаблицаВИ"; ЗагрузитьПроизвольнуюТаблицуЗначенийВТаблицуФормы(ИмяТаблицыФормы, мПредопределенныхКолонок); КонецПроцедуры &НаСервере Функция ПолучимОбразТекущейТз() ТзИсточника = Новый ТаблицаЗначений; // ТзИсточника ...код получения динамической Тз откуда угодно Возврат ТзИсточника; КонецФункции &НаСервере Процедура ЗагрузитьПроизвольнуюТаблицуЗначенийВТаблицуФормы(ИмяТаблицыФормы, мПредопределенныхКолонок) Перем ТзИсточника; // Получим образ текущей Тз сохраненный в... хранилище, полученный по аглогитму, выборке и т.д. ТзИсточника = ПолучимОбразТекущейТз(); Если ТзИсточника = Неопределено Тогда Возврат; КонецЕсли; Тф = Элементы[ИмяТаблицыФормы]; // Сформируем массивы реквизитов формы и элементов(колонок) относительно предыдущей загрузки образа Тз источника мУдаляемыхРеквизитов = Новый Массив; мУдаляемыхЭлементов = Новый Массив; Для Каждого ЭлементКолонка Из Тф.ПодчиненныеЭлементы Цикл ЭлементПутьКДанным = ЭлементКолонка.ПутьКДанным; ЭлементКолонкаРеквизитИмя = СтрЗаменить(ЭлементПутьКДанным, (ИмяТаблицыФормы+"."),""); Если мПредопределенныхКолонок.Найти(Врег(ЭлементКолонкаРеквизитИмя)) <> Неопределено Тогда Продолжить; КонецЕсли; мУдаляемыхРеквизитов.Добавить(ЭлементПутьКДанным); мУдаляемыхЭлементов.Добавить(ЭлементКолонка); КонецЦикла; // Удалим динамические реквизиты и элементы(колонки), вернув таблицу формы к исходному виду, когда в ней только предопределенные колонки из формы. Если мУдаляемыхРеквизитов.Количество() Тогда ЭтаФорма.ИзменитьРеквизиты(,мУдаляемыхРеквизитов); Для Каждого ЭлементКолонка Из мУдаляемыхЭлементов Цикл Элементы.Удалить(ЭлементКолонка); КонецЦикла; КонецЕсли; // Сформируем массивы реквизитов формы и элементов(колонок) относительно добавляемых колонок мДобавляемыеРеквизиты = Новый Массив; Для Каждого Колонка Из ТзИсточника.Колонки Цикл Если мПредопределенныхКолонок.Найти(Врег(Колонка.Имя)) <> Неопределено Тогда Продолжить; КонецЕсли; НовыйРеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяТаблицыФормы, Колонка.Заголовок, Ложь); мДобавляемыеРеквизиты.Добавить(НовыйРеквизитФормы); КонецЦикла; // После изменения реквизитов можно использовать новые пути к данным для новых колонок ЭтаФорма.ИзменитьРеквизиты(мДобавляемыеРеквизиты); Для Каждого Колонка Из ТзИсточника.Колонки Цикл Если мПредопределенныхКолонок.Найти(Врег(Колонка.Имя)) <> Неопределено Тогда Продолжить; КонецЕсли; НовыйЭлемент = Элементы.Добавить(ИмяТаблицыФормы + Колонка.Имя, Тип("ПолеФормы"), Тф); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = ИмяТаблицыФормы + "." + Колонка.Имя; КонецЦикла; ЗначениеВРеквизитФормы(ТзИсточника, ИмяТаблицыФормы); // Собственно загрузка образа тз в элемент формы ТзИсточника = 0; // "Убиваем" переменную тз, для устранения конфликтов передач управления КонецПроцедуры Замечание: мастер-деталь хрен получишь, но если жамкать на кнопку команды обновления динамической таблицы то видим совершенно разные таблицы в одной и той же таблице формы. С имена своих преоопределеннных реквизитов(колонок) и самим именем реквизита таблицы поправте и пашет |
|||
18
Escander
23.11.11
✎
19:40
|
(10) как вариант посмотрите (16)
(17) да ну! даже на клюшках делал 3-х уровневый мастер-деталь(3 тарблички: 1 - мастер, 2- показывает записи подчинённые 1, 3-записи подчинённые 2), причём изврата не больше чем у вас с хранилищем. |
|||
19
Escander
23.11.11
✎
19:41
|
+(18) имхо, хранилище это перебор.
|
|||
20
vmv
23.11.11
✎
20:09
|
(18) и при активизации строки в однной таблице(мастере) - динамически грузились данные в другую таблицу формы, речь о тонком клиенте, естественно.
на толстом все просто |
|||
21
Escander
24.11.11
✎
03:56
|
(20) код из 16 не работает?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |