Имя: Пароль:
1C
 
Реквизит неопределенного типа -> строка. Работа на форме
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 человек?