![]() |
![]() |
![]() |
|
Передачазначения перечисления через список значений в др. форму криво работает | ☑ | ||
---|---|---|---|---|
0
tlg25
25.06.13
✎
11:38
|
Доброго времени суток.
Проблему решила "через одно место", но хотелось бы знать на будущее, как надо сделать(написать) правильно и почему она возникает. Есть 2 формы(управляемые. 8.2), между которыми происходит обмен данными. В первой форме(форма элемента справочника) реквизит типа СписокЗначений, куда я записываю нужные значения из текущей строки табличной части. Во второй форме(произвольная форма этого справочника) параметр типа СписокЗначений(галочка "ключевой параметр" стоит). Вторая форма открывается модально по кнопке с передачей в качестве параметра реквизита типа СписокЗначений. П = Новый Структура("ИмяПараметра", ИмяРеквизита); ОткрытьФормуМодально("Справочник.Пациенты.Форма.ФормаСГМ", П); Среди передаваемых значений есть ссылки на перечисления(значения перечислений). В процедуре ПриСозданииНаСервере во второй форме, когда я просматриваю значение пришедшего параметра в отладчике, то вижу, что тип у него: ссылка на нужное мне перечисление и значение - переданное мной значение, НО когда я пытаюсь напрямую записать этот параметр в реквизит второй формы, который имеет тип ссылку на именно это перечисление, то значение НЕ ЗАПИСЫВАЕТСЯ. То есть код МойРеквизит11 = ЭтаФорма.Параметры.ИмяПараметра[11] НЕ РАБОТАЕТ. Работает только через придуманный мной изврат: Имя11 = СТРОКА(ЭтаФорма.Параметры.ИмяПараметра[11]); Если Имя11 <> "<Пустое значение>" Тогда МойРеквизит11 = Перечисления.МоёПеречисление[Имя11]; КонецЕсли; Точно такая же проблема возникает, когда отдаю через процедуру "Оповестить" данные в первую форму обратно. Подскажите, отчего такое возникает, ведь реквизит и элемент списка значений одного типа? (Ссылки на нужное мне перечисление) Кстати, цифровые значения тоже не передаются просто так. Приходиться писать МойРеквизит9 = СТРОКА(ЭтаФорма.Параметры.ИмяПараметра[11]), хотя и реквизит и элемент списка значений - числа. P.S. В реальном коде реквизиты и параметры имеют другие имена, но дала "абстрактные", чтобы не запутывать терминами предметной области. |
|||
1
Поросенок Петр
25.06.13
✎
11:42
|
Элемент списка значений это не элемент массива.
|
|||
2
Поросенок Петр
25.06.13
✎
11:44
|
Если Имя11 <> "<Пустое значение>" Тогда...
а вот подобные строки нужно считать за мыслепреступление. Булавкой себя коли, когда вдруг захочется такое писать. |
|||
3
Asmody
25.06.13
✎
11:56
|
откуда взялось "магическое число" 11?
|
|||
4
samozvanec
25.06.13
✎
11:58
|
(0)элемент списка содержит в себе значение, представление, пометку, картинку. делая вот так
МойРеквизит11 = ЭтаФорма.Параметры.ИмяПараметра[11] ты пытаешься поместить в реквизит типа перечисление элемент списка значений в этих целях, кстати, удобно использовать структуру. и вопросов как в (3) не будет) |
|||
5
samozvanec
25.06.13
✎
11:59
|
а вот такие названия
П = Новый Структура("ИмяПараметра", ИмяРеквизита); являются поводом для леща |
|||
6
tlg25
25.06.13
✎
11:59
|
(3) Во второй строке опечатка.
Должно быть МойРеквизит9 = СТРОКА(ЭтаФорма.Параметры.ИмяПараметра[9]). 11 - порядковый номер элемента моего параметра. Я передаю 10 числовых параметров, 1-й строковый, а вот дальше (так как нумерация с нуля номер одиннадцатый) и начитаются элементы с типами значения перечисления. |
|||
7
Asmody
25.06.13
✎
12:05
|
а как заполняется ИмяРеквизита?
|
|||
8
tlg25
25.06.13
✎
12:07
|
(5) В реальности имена другие, я ж приписала в постскриптуме.
Чтобы было понятнее. Если важно, то в реальности строчка выглядит как: П = Новый Структура("ЗначенияСГМ", ЗначенияСГМ); Спасибо за написанное в (4). Присмотрелась в отладчике, оказывается тип именно моего элемента какое-то абстрактное "ЭлементСпискаЗначений", а уже если отрыть дерево, то ниже строка с названием "Значение" у которой только тип - ссылка на моё перечисление. Как хитро всё устроено. |
|||
9
hhhh
25.06.13
✎
12:11
|
(8) детский сад.
|
|||
10
tlg25
25.06.13
✎
12:12
|
(7) ИмяРеквизита.Очистить();
НомерСтр = ЭтаФорма.Элементы.Состояние.ТекущаяСтрока; ЗаполнитьСписокСГМ(НомерСтр); &НаСервере Процедура ЗаполнитьСписокСГМ(НомерСтр); ИмяРеквизита.Добавить(Объект.МояТЧ[НомерСтр].НазваниеРеквизитаТЧ1) ИмяРеквизита.Добавить(Объект.МояТЧ[НомерСтр].НазваниеРеквизитаТЧ2); и далее также все интересующие меня реквизиты табличной части. КонецПроцедуры |
|||
11
tlg25
25.06.13
✎
12:14
|
(9) Простите, если Вы гуру, то я только недавно начала плотно работать с 1С и не знаю многих его тонкостей, поэтому и спрашиваю на форуме, чтобы в будущем делать грамотно и знать как "устроено изнутри"
|
|||
12
hhhh
25.06.13
✎
12:16
|
(11) но ведь в (1) вам сразу написали, что список значений - это не массив.
|
|||
13
tlg25
25.06.13
✎
12:18
|
(1) Да, спасибо, мне написали ниже, что там тип оказывается "ЭлементСпискаЗначений", а не тот тип, который мне показывает как тип значения лежащего в этом элементе. А строку написала как заглушку, потому что ни "ЗначениеЗаполнено" ни сравнение с пустой ссылкой моего перечисления 1С не принимал. Теперь понятно почему. Если тип элемента абстрактное "ЭлементСпискаЗначений", не конкретно ссылка на моё пекречисление.
|
|||
14
tlg25
25.06.13
✎
12:25
|
(12) Эта фраза не была мне понятна без развёрнутых пояснений данных ниже. Про то, что тип моего элемента, вовсе те такой, как я думаю. Кому-то достаточно полуслова(потому что он уже знает ответ), мне в данном случае было недостаточно.
|
|||
15
tlg25
25.06.13
✎
12:35
|
Спасибо Всем. Всё оказалось очень просто, надо писать не
ЭтаФорма.Параметры.ИмяПараметра[9], а ЭтаФорма.Параметры.ИмяПараметра[9].Значение! И тогда нормлаьно передаёт-принимается без извратов. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |