|
Реквизит неопределенного типа -> строка. Работа на форме | ☑ | ||
|---|---|---|---|---|
|
0
YF
17.06.08
✎
15:07
|
Есть документ.
В табличной части реквизит: реквМой; в этом реквизите должно содержаться значение любого типа; при начале редактирования строки этому реквизиту назначается тип. Чтобы хранить строку сделал второй реквизит ТЧ: реквМойСтрокой с типом Строка. Т.о. чтобы сохранить строку, нужно занести эту строку именно в реквизит реквМойСтрокой. А как сделать удобной работу пользователя при корректировке? Если расположить оба реквизита на форме, пользователю придется самому выбирать какой из них заполнять - что не гут. Кто еще как-нидь решал такой вопрос? |
|||
|
1
ТелепатБот
гуру
17.06.08
✎
15:07
|
||||
|
2
Ёпрст
гуру
17.06.08
✎
15:08
|
(0) Тупо видимостью колонки.
|
|||
|
3
YF
17.06.08
✎
15:10
|
(2) Дык в разных строка могут быть значения разных типов. Блин, забыл это сказать в (0), сорри
|
|||
|
4
Ёпрст
гуру
17.06.08
✎
15:14
|
(3) Тогда вообще скрой Обе колонки, сделай одну текстовую - в ней и показывай. что хочешь...а при клике на колонке - вводи/редактируй...
|
|||
|
5
Вжескрыылг
17.06.08
✎
15:19
|
(0) 1С-ники уже решили - строка с кнопкой выбора + ПриначалеВыбораЗначения + ОбработкаВыбораЗначения. Хватает на все случаи жизни
|
|||
|
6
Ёпрст
гуру
17.06.08
✎
15:26
|
(5) Факт ... Забыл уже про педальку :(
Еще можно делаать Форма.КолонкаСтроковая.Редактирование(0), если присвоили тип типа справочника, чтоб строку не могли ввести, чтоб токма с педальки выбор был .. |
|||
|
7
YF
17.06.08
✎
15:42
|
(5) Придется хранить еще и строковое представление объекта строкой + при открытии старого документа оно может отличаться от текущего значения в базе: например, сохранили контрагента и его наименование строкой. Потом наименование сменилось, а в документе старое значение отображаетя.
(6) Форма.КолонкаСтроковая.Редактирование(0) действует на всю колонку, поэтому придется использовать ВвестиСтроку() для строк ... |
|||
|
8
Sadovnikov
17.06.08
✎
15:45
|
(7) Зачем "хранить еще и строковое представление объекта строкой"??
|
|||
|
9
Ёпрст
гуру
17.06.08
✎
15:46
|
(8) больше 22 символов видать надоть ...
|
|||
|
10
Вжескрыылг
17.06.08
✎
15:46
|
(6) а если юзеру вздумается сменить тип? тут уж лучше - либо руками набирай, либо на педаль дави.
|
|||
|
11
Ёпрст
гуру
17.06.08
✎
15:46
|
(7) Не угадал, будешь менять в ПриНачалеВыбораЗначения
|
|||
|
12
Sadovnikov
17.06.08
✎
15:48
|
(9) На сколько я понял (7), он в новой колонке хочет показывать текстовое представление объекта, занесенного в скрытую колонку. Так зачем для этого хранить это самое представление в документе?
|
|||
|
13
Ёпрст
гуру
17.06.08
✎
15:48
|
(10) Та не , автор же где-то устанавливает нужный тип, и скорее всего, в зависимости от другово реквизита... вот и будет в ПриНачалеВыбораЗначения делать
Редактирование(0/1) в зависимости от этого типа ... |
|||
|
14
Sadovnikov
17.06.08
✎
15:50
|
(0) А как вообще база/пользователь понять должны, что именно сейчас будет заполняться - строка или объект агрегатного типа? Менюшка будет вываливаться?
|
|||
|
15
Ёпрст
гуру
17.06.08
✎
15:50
|
(12) Ну тогда да.... ХЗ , чего он там хранит :)
|
|||
|
16
YF
17.06.08
✎
15:52
|
(11) Ты про Редактирование(0)? Я сделал в прцедуре при выборе третьего реквизита ТЧ, о нем в (0) не сказано, т.к. он имеет тип - обычный справочник,
При этом запрещается редактирование реквизита во всех строках ... |
|||
|
17
Ёпрст
гуру
17.06.08
✎
15:55
|
(16) Всё равно можно сделать... :)
Хотя бы через формулу Текста на форме ... Строковый тебе реквизит нафига сдался в ТЧ дока ? Из-за (9) ? |
|||
|
18
victuan1
17.06.08
✎
15:55
|
(16) Слушай, автор. Может ты все-таки подробно объяснишь механику своих хотелок. Трудно ведь быть телепатом.
|
|||
|
19
YF
17.06.08
✎
15:58
|
(14) Тип назначается при выборе другого реквизита ТЧ.
Вся проблема в том, что 2 реквизита: реквМой и реквМойСтрокой, а на форме хочется иметь только одну колонку, ведь зверь и понятия не имеет, что у 1С всего 22 см. ... Про педальку не очень понял. Ее можно весить только на реквизит ТЧ, значит этот реквизит нужно будет отображать, а если так, то будет тот реквизит, значение которого (по мнению пользователя) редактируется. Я могу сделать, что нажатием педальки будет выбираться, например значение элемента справочника и записываться в колонку реквМой, которая скрыта. А как зверь узнает, что значение изменилось ...? |
|||
|
20
YF
17.06.08
✎
15:58
|
(17) Конечно из-за (9)
|
|||
|
21
Sadovnikov
17.06.08
✎
16:02
|
(19) Колонка - реквизит неопределенного типа. На скрытом слое - 2 реквизита формы: строка и чего там тебе надо из агрегатных типов. При начале редактирования ячейки - делать один (нужный) из скрытых реквизитов видимым и подгонять его под положение и размер редактируемой ячейки.
За образец взять класс Общие.РедакторТаблицыЗначений. |
|||
|
22
YF
17.06.08
✎
16:03
|
(18) По-пробую исчо раз.
1) В реквизите ТЧ храню некое значение. Типы могут быть различны => рекв. неопределенного типа: реквМой 2) Но строку длинее 22 симв. не сохранишь => нужно как-то вывернуться - придумал второй реквизит - строковый: реквМойСтрокой 3) Но пользователь просто хочет записать туда некое значение и он не должен делать выбор в какой из 2 реквизитов писать, => на форме нуно отобразить вместо этих 2 реквизитов только одну колонку. Вот тут и загвоздка: как сделать, чтобы редактирование значения в этой колонке выполнялось максимально приближенно (для пользователя) к редактированию обычного реквизита ТЧ |
|||
|
23
YF
17.06.08
✎
16:04
|
(21) У меня ТЧ и без ВК ...
|
|||
|
24
Sadovnikov
17.06.08
✎
16:05
|
(23) Почему такое требование - "без ВК"?
|
|||
|
25
Ёпрст
гуру
17.06.08
✎
16:05
|
(19) У тебя 2 реквизита, один строковый, второй неопределенный...
втыкаешь токма строковый , ставишь в свойствах колонки - педалька на ... Ловишь педальку в ПриНачалеВыбораЗначения(), назначаешь тип - выбираешь что надо ...Присваиваешь в ОбработкеВыбораЗначения неопр.реквизиту нужное значение ... в ПриНачалеРедактированияСтроки, ПриРедактированииНовойСтроки(),в ПриНачалеВыбораЗначения делаешь Редактирование(0/1) для этой колонки, в зависимости от типа... чтоб строку не мог ввести, ежели агрегатный объект. |
|||
|
26
YF
17.06.08
✎
16:06
|
+(23) Однако если на скрытом слое обычный реквизит, то его нужно будет двигать поверх ТЧ, я правильно понял?
|
|||
|
27
YF
17.06.08
✎
16:07
|
(24) Не люблю я ВК, хотя не считаю их однозначным злом. Поэтому, если мона без ВК, то лучше без них. Если так не удается, то мона думать и про ВК ...
|
|||
|
28
Sadovnikov
17.06.08
✎
16:08
|
(26) Да, правильно. Формекс с этим прекрасно справляется :)
Ёпрст3 тебе более простое решение подсказал. |
|||
|
29
YF
17.06.08
✎
16:09
|
(25) Прекрасно, но как значение неопр.реквизита будет отображаться на форме, если я там отображаю только строковую колонку? Вот о чем я говорю, при таком способе решения ...
|
|||
|
30
YF
17.06.08
✎
16:10
|
(28) Бли, это же какой гемор точно по пикселям таскать реквизит и менять передавать фокус ... Страшно :-)
|
|||
|
31
Sadovnikov
17.06.08
✎
16:10
|
(29) Поле = СокрЛП(АгрегатныйРеквизит)
:) |
|||
|
32
Ёпрст
гуру
17.06.08
✎
16:11
|
(29) В строковом Реквизите ! Как же еще :))
|
|||
|
33
YF
17.06.08
✎
16:16
|
(32)
1) Т.о. в строковый реквизит пишем, например, наименование выбранного агрегатного - ОК 2) Раз это реквизит документа, то это значение при записи сохранится 3) Открыв документ через некоторое время мы видим только это самое наименование - ОК 4) Пусть прошло еще некоторое время и наименование этого элемента изменилось, и вот мзверь открыл документ и видит, что в строке совсем не тот элемент (он ведь не догадывается что это строковое представление элемента 5-ти летней давности) ... Вот тут-то и есть не гут этого метода ... |
|||
|
34
Sadovnikov
17.06.08
✎
16:18
|
(30) Зачем по пикселам? Есть хороший метод:
УстановитьКоординаты(<?>,,,) СИНТАКСИС: УстановитьКоординаты(<Лево>,<Верх>,<Ширина>,<Высота>) НАЗНАЧЕНИЕ: Устанавливает новые значения для положения и размеров атрибута. Если какой-либо параметр при вызове метода не задан, то данный параметр не изменяется. ПРИМЕР: АтрФормы = СоздатьОбъект("АтрибутФормы"); АтрФормы.УстановитьАтрибут(Форма,3); Высота=0; АтрФормы.ПолучитьКоординаты(,,,Высота); АтрФормы.УстановитьКоординаты(,,,Высота+40); ПАРАМЕТРЫ: <Лево> - Необязательный параметр. Расстояние от левой границы формы до левой границы атрибута. <Верх> - Необязательный параметр. Расстояние от верхней границы формы до верхней границы атрибута. <Ширина> - Необязательный параметр. Ширина атрибута. <Высота> - Необязательный параметр. Высота атрибута. |
|||
|
35
victuan1
17.06.08
✎
16:20
|
(33) "Пусть прошло еще некоторое время и наименование этого элемента изменилось, и вот мзверь открыл документ и видит, что в строке совсем не тот элемент (он ведь не догадывается что это строковое представление элемента 5-ти летней давности) ... Вот тут-то и есть не гут этого метода ..."
Так ты при открытии документа предусмотри перезапись реквизита актуальными данными. |
|||
|
36
Ёпрст
гуру
17.06.08
✎
16:22
|
(33) Влепи еще текстовую колонку ...
Если открыли токма на просмотр - показывай её, остальные скрывай. Если на редактирование - скрывай текст, а строковую колонку перезаполняй актуальными данными. |
|||
|
37
YF
17.06.08
✎
16:22
|
(35) При каждом открытии документа шерстить все строки и перезаписывать? А если в документе 100 строк? А если пользователей хотя бы 10 человек?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |