|
Реквизит справочника типа Хранилище значения | ☑ | ||
---|---|---|---|---|
0
247tsm
08.11.14
✎
22:32
|
Вопрос для знатоков 1С81 простой.
Есть справочник с реквизитом ЦветТ типа хранилище значения. Я пытаюсь записать в него цвет текста но не получается. Я делаю так: Процедура Кнопка5Нажатие(Элемент) Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Диалог.Цвет; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Если ЦветТ<>Неопределено Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = ЦветТ; КонецЕсли; КонецПроцедуры Но в отладчике вижу что при открытии формы ЦветТ=Неопределено. Почему? Реквизиты типа Хранилище значения особые и работать с ними нужно по особому? Как мне изменить текст модуля чтобы всё работало? |
|||
1
wertyu
08.11.14
✎
22:35
|
только через Новый
|
|||
2
wertyu
08.11.14
✎
22:36
|
ты можешь выбрать Красный, Зелёный, Синий, но там ещё есть вид цвета
|
|||
3
wertyu
08.11.14
✎
22:40
|
+ всё, что надо определять через Новый (конструктор), надо так и определять
|
|||
4
247tsm
08.11.14
✎
22:41
|
Конечно, для хранения цвета можно использовать реквизит типа строка:
Реквизит1 = ЗначениеВСтрокуВнутр(ЦветТ); а при открытии: Если ЗначениеЗаполнено(Реквизит1) Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = ЗначениеИзСтрокиВнутр(Реквизит1); КонецЕсли; Но, наверно, проще использовать реквизит типа Хранилище значения без всяких функций, преобразований? |
|||
5
247tsm
08.11.14
✎
22:42
|
(1) Я не совсем понял. Что "только через Новый". Ведь для определения цвета я использую
Диалог = Новый ДиалогВыбораЦвета; |
|||
6
247tsm
08.11.14
✎
22:43
|
(3) А как это будет в коде?
|
|||
7
wertyu
08.11.14
✎
22:43
|
Функция ПолучитьСтатьиБюджетирования(Бюджет) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СтатьиБюджета.Ссылка КАК Ссылка, | СтатьиБюджета.Шрифт, | СтатьиБюджета.ЦветФона |ИЗ | Справочник.СтатьиБюджета КАК СтатьиБюджета |ГДЕ | СтатьиБюджета.Владелец = &Бюджет | И СтатьиБюджета.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("Бюджет", Бюджет); Результат = Запрос.Выполнить(); ТаблицаСтатейБюджетирования = Результат.Выгрузить(); Возврат ТаблицаСтатейБюджетирования; КонецФункции // ПолучитьСтатьиБюджетирования() |
|||
8
wertyu
08.11.14
✎
22:44
|
ТаблицаСтатейБюджетирования = ПолучитьСтатьиБюджетирования(Бюджет);
Настройки.УсловноеОформление.Элементы.Очистить(); Для Каждого СтрокаТаблицаСтатейБюджетирования Из ТаблицаСтатейБюджетирования Цикл Шрифт0 = ЗначениеИзСтрокиВнутр(СтрокаТаблицаСтатейБюджетирования.Шрифт); ЦветФона0 = ЗначениеИзСтрокиВнутр(СтрокаТаблицаСтатейБюджетирования.ЦветФона); НовыйЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить(); НовыйОтбор = НовыйЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статья"); НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовыйОтбор.ПравоеЗначение = СтрокаТаблицаСтатейБюджетирования.Ссылка; ШрифтОформление = НовыйЭлементОформления.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Шрифт")); ЦветФонаОформление = НовыйЭлементОформления.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона")); УдалитьЭлементОформления = Истина; Если Не ШрифтОформление.Значение = Шрифт0 Тогда ШрифтОформление.Значение = Шрифт0; ШрифтОформление.Использование = Истина; УдалитьЭлементОформления = Ложь; КонецЕсли; Если Не ЦветФона0 = Новый Цвет(255, 255, 255) Тогда ЦветФонаОформление.Значение = ЦветФона0; ЦветФонаОформление.Использование = Истина; УдалитьЭлементОформления = Ложь; КонецЕсли; Если УдалитьЭлементОформления Тогда Настройки.УсловноеОформление.Элементы.Удалить(НовыйЭлементОформления); КонецЕсли; КонецЦикла; |
|||
9
wertyu
08.11.14
✎
22:48
|
ТабДок.Область(НС + 1, НК, НС + 1, НК).ГраницаСнизу =
Новый Линия(ТабДок.Область(НС, НК, НС, НК).ГраницаСнизу.ТипЛинии, ТабДок.Область(НС, НК, НС, НК).ГраницаСнизу.Толщина, ТабДок.Область(НС, НК, НС, НК).ГраницаСнизу.Отступ); |
|||
10
wertyu
08.11.14
✎
22:48
|
это примерно тоже самое
|
|||
11
247tsm
08.11.14
✎
22:51
|
(8) Из примера я понял, что реквизиты справочника СтрокаТаблицаСтатейБюджетирования.Шрифт типа строка и СтрокаТаблицаСтатейБюджетирования.ЦветФона тоже типа строка.
А у меня же типа Хранилище значения. Пример со строкой я уже и сам привёл. Меня интересует, можно ли делать проще, используя реквизит типа Хранилище значения и как обычный реквизит его сохранять, а затем считывать? |
|||
12
wertyu
08.11.14
✎
22:51
|
ну т.е. и ГраницаСнизу надо присваивать значения только через конструктор, понятно?
|
|||
13
wertyu
08.11.14
✎
22:53
|
(11) в Скд можно приваивать готовое, иначе только через конструктор
|
|||
14
247tsm
08.11.14
✎
22:54
|
(12) У меня не записывается значение в реквизит типа Хранилище значения, поэтому до присваивания далеко.
|
|||
15
wertyu
08.11.14
✎
22:54
|
и надо платформу поменять на 82 минимум
|
|||
16
wertyu
08.11.14
✎
22:57
|
(14) я тебе пытался показать, что не надо хранить само значение, если не получается потом извлечь, а можно хранить его составляющие
|
|||
17
Chameleon1980
08.11.14
✎
22:59
|
а у хз есть метод получить вроде
|
|||
18
247tsm
08.11.14
✎
23:00
|
(13) + (15) У меня речь не идет ни про СКД, ни про конструктор. У меня 1С81, где есть реквизиты типа Хранилище значения.
У меня просто форма справочника, на ней кнопка для выбора цвета текста и его записи в реквизит типа хранилище значения. Это не работает. Вот я и прошу подсказать, почему, где ошибка в приведённом мной коде? (16) Но я знаю, как можно выкрутиться, используя реквизит типа строка и функцию ЗначениеВСтрокуВнутр(). Но я хочу понять, почему нельзя напрямую пользоваться реквизитом типа Хранилище значения? |
|||
19
Chameleon1980
08.11.14
✎
23:00
|
ХранилищеЗначения.Получить (ValueStorage.Get)
ХранилищеЗначения (ValueStorage) Получить (Get) Синтаксис: Получить() Возвращаемое значение: Тип: Произвольный. Значение, содержащееся в хранилище. Описание: Получает из хранилища сохраненное в нем значение. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: МояКартинка = ХранилищеКартинки.Получить(); |
|||
20
Chameleon1980
08.11.14
✎
23:03
|
ну и при сохранении чтото типа
Хранилище=Новый ХранилищеЗначения(ЗначениеВСтрокуВнутр(ЗдесьВашиДАнные)) |
|||
21
wertyu
08.11.14
✎
23:04
|
(18) да можно, только через конструктор, что тут непонятно?
|
|||
22
wertyu
08.11.14
✎
23:04
|
Новый - это конструктор
|
|||
23
247tsm
08.11.14
✎
23:05
|
(20) Если использовать функцию ЗначениеВСтрокуВнутр(), то зачем использовать для цвета реквизит типа Хранилище значения? Проще использовать реквизит типа строка!
|
|||
24
Chameleon1980
08.11.14
✎
23:10
|
да по быстрому просто выдернул кусок из старого отчета
у меня там просто тз сохранялась |
|||
25
Chameleon1980
08.11.14
✎
23:11
|
так то просто уж точно что хочешь (практически) сохранишь
|
|||
26
247tsm
08.11.14
✎
23:14
|
(25) А можешь подправить текст процедур из (0), чтобы всё получилось?
|
|||
27
Chameleon1980
08.11.14
✎
23:17
|
Процедура Кнопка5Нажатие(Элемент)
Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Новый ХранилищеЗначения(ЗначениеВСтрокуВнутр(Диалог.Цвет)); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Если ЦветТ<>Неопределено Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = ЦветТ.Получить(); КонецЕсли; КонецПроцедуры может так? |
|||
28
Chameleon1980
08.11.14
✎
23:19
|
даже
Процедура ПриОткрытии() _Цвет=ЦветТ.Получить(); Если _Цвет<>Неопределено Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = _Цвет; КонецЕсли; КонецПроцедуры вот так наверное |
|||
29
247tsm
08.11.14
✎
23:22
|
(27) Нет, в отладчике вижу, что ЦветТ=Неопределено
|
|||
30
247tsm
08.11.14
✎
23:24
|
(28) На строку
_Цвет=ЦветТ.Получить(); дает Значение не является значением объектного типа (Получить) |
|||
31
247tsm
08.11.14
✎
23:27
|
(27) И всё же, зачем использовать функцию ЗначениеВСтрокуВнутр()?
В этом случае не нужен реквизит типа Хранилище значения!!! А просто нужен просто типа строка. |
|||
32
Chameleon1980
08.11.14
✎
23:33
|
ЗначениеВСтрокуВнутр чтобы, например тз (таб. зн.) сохранять
ЦветТ - реквизит справочника типа ХЗ (хран. зн.) ??? |
|||
33
Chameleon1980
08.11.14
✎
23:35
|
скажите мне тип значения ЦветТ
|
|||
34
247tsm
08.11.14
✎
23:37
|
(32) да, и по-моему, здесь функция ЗначениеВСтрокуВнутр() не нужна, либо если использовать эту функцию, то не нужен тип реквизита Хранилище значения, а нужен тип строка.
Но я хочу добиться работы с типом Хранилище значения. |
|||
35
247tsm
08.11.14
✎
23:38
|
(33) ЦветТ = Диалог.Цвет
|
|||
36
247tsm
08.11.14
✎
23:41
|
(33) Уточняю: в справочнике есть реквизит ЦветТ с типом Хранилище значения. Я в него хочу записать Диалог.Цвет
|
|||
37
Chameleon1980
08.11.14
✎
23:41
|
а как тогда называется реквизит у которого тип хз (хр.зн.) ???
капеч. мы даже не там запнулись. |
|||
38
247tsm
08.11.14
✎
23:42
|
(33) в (0) описана задача ;)
|
|||
39
247tsm
08.11.14
✎
23:43
|
(37) ???
У реквизита ЦветТ тип Хранилище значения. Я в него хочу записать Диалог.Цвет |
|||
40
Chameleon1980
08.11.14
✎
23:44
|
а что угадывать буду
просто скажите как у вас называется Реквизит справочника типа Хранилище значения имя его |
|||
41
247tsm
08.11.14
✎
23:44
|
(40) ЦветТ
|
|||
42
Chameleon1980
08.11.14
✎
23:45
|
он бы не ругался как в 30 т.к. у Хран. зн. есть метод Получить() который "Получает из хранилища сохраненное в нем значение" (C) СП
|
|||
43
Chameleon1980
08.11.14
✎
23:46
|
где-то вы врете уважаемый
|
|||
44
247tsm
08.11.14
✎
23:47
|
(43) Хорошо, смотрю в конфу ещё раз ;)
|
|||
45
247tsm
08.11.14
✎
23:51
|
Реквизит ЦветТ, тип - ХранилищеЗначения.
У меня процедура: Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Новый ХранилищеЗначения(Диалог.Цвет); КонецЕсли; Процедура ПриОткрытии() _Цвет=ЦветТ.Получить(); Если _Цвет<>Неопределено Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = _Цвет; КонецЕсли; КонецПроцедуры При открытии формы ругается: {Справочник.Меню.Форма.ФормаЭлемента1(16)}: Значение не является значением объектного типа (Получить) _Цвет=ЦветТ.Получить(); |
|||
46
247tsm
08.11.14
✎
23:52
|
(43) Так что я не вру ;)
|
|||
47
247tsm
08.11.14
✎
23:55
|
Более того, в отладчике я вижу, что после строки:
ЦветТ = Новый ХранилищеЗначения(Диалог.Цвет); значение ЦветТ.Получить() - это значение выбранного цвета. Но ... это значение или "теряется" или я его не могу прочитать при открытии формы справочника. |
|||
48
Chameleon1980
09.11.14
✎
00:09
|
а после
Процедура Кнопка5Нажатие(Элемент) Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Диалог.Цвет; КонецЕсли; КонецПроцедуры объект чей реквизит сохраняется? ну и проверьте перед _Цвет=ЦветТ.Получить(); типзначения(ЦветТ) что за конфа? большая? может кинете куданить? А то что-то надоело чуть в темноте ходить |
|||
49
247tsm
09.11.14
✎
00:16
|
(48) в отладчике ЦветТ имеет значение цвета, выбранного в Диалог.Цвет
А при открытии ЦветТ имеет значение Неопределено! Поэтому и получить значение не удается. |
|||
50
Chameleon1980
09.11.14
✎
00:19
|
пилят
как зовут реквизита справочника (какогото) в который мы хотим сохранить значение у которого тип хран.зн. ???????????????????????????? |
|||
51
247tsm
09.11.14
✎
00:23
|
Справочник Меню.
Реквизит ЦветТ, тип - Хранилище значения |
|||
52
247tsm
09.11.14
✎
00:25
|
(50) Я в этот реквизит ЦветТ хочу сохранить цвет, а не "значение у которого тип хран.зн."
|
|||
53
Chameleon1980
09.11.14
✎
00:27
|
конфа большая.
просто конфа - без данных. а то мы видать на ночь глядя ходим вокруг да около |
|||
54
Chameleon1980
09.11.14
✎
00:27
|
большая???
|
|||
55
247tsm
09.11.14
✎
00:33
|
(50) Да, большая.
Но, по-моему, в (0) я всё описал достаточно ясно и максимально подробно, с текстом процедур. Вот последний вариант процедур: Процедура Кнопка5Нажатие(Элемент) Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Новый ХранилищеЗначения(Диалог.Цвет); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Если ЦветТ<>Неопределено Тогда ЭтаФорма.ЭлементыФормы.текстRO.ЦветТекстаПоля = ЦветТ.Получить(); КонецЕсли; КонецПроцедуры Но почему-то при открытии ЦветТ=Неопределено. Вот в этом и вопрос. |
|||
56
Chameleon1980
09.11.14
✎
00:44
|
счас не ругается на получить?
|
|||
57
Chameleon1980
09.11.14
✎
00:44
|
Процедура Кнопка5Нажатие(Элемент)
Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Новый ХранилищеЗначения(Диалог.Цвет); КонецЕсли; КонецПроцедуры а вот тут сам справочник сохранить? |
|||
58
247tsm
09.11.14
✎
00:49
|
(56) Так до получить() не доходит.
|
|||
59
Chameleon1980
09.11.14
✎
00:55
|
уьрать Если ЦветТ<>Неопределено Тогда
и после Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ЦветТ = Новый ХранилищеЗначения(Диалог.Цвет); КонецЕсли; сохранить справочник |
|||
60
Chameleon1980
09.11.14
✎
00:57
|
сохраните конфу в файл и выложьте куданить
мне данные не нужны |
|||
61
Chameleon1980
09.11.14
✎
00:59
|
или есть TeamViewer ?
в почту номер с паролем если что Nickolay_Mulko собака Mail.ru |
|||
62
247tsm
09.11.14
✎
01:15
|
(61) Отправил
|
|||
63
Chameleon1980
09.11.14
✎
01:16
|
под какую платформу?
|
|||
64
Chameleon1980
09.11.14
✎
01:16
|
все вижу
|
|||
65
247tsm
09.11.14
✎
01:17
|
(63) 1С:Предприятие 8.1 (8.1.15.14)
|
|||
66
Chameleon1980
09.11.14
✎
01:33
|
пля странно. я походу сплю
Тут видимо проблема в том что присваеваем значения реквизиту прямо в форме элемента. Но почему. Пипец |
|||
67
Chameleon1980
09.11.14
✎
01:49
|
ну поправить то я поправил
тока почему диалог выбора цвета возращает в аттрибут цвет всегда 0,0,0 не обращал внимания? |
|||
68
Chameleon1980
09.11.14
✎
01:50
|
плин точно сплю все норм
счас пришлю |
|||
69
Chameleon1980
09.11.14
✎
01:57
|
ушло
|
|||
70
247tsm
09.11.14
✎
01:58
|
(69) получил, смотрю
|
|||
71
Chameleon1980
09.11.14
✎
02:06
|
я наверное спать - пяты час пошел
|
|||
72
247tsm
09.11.14
✎
02:12
|
(71) ОК
|
|||
73
247tsm
09.11.14
✎
02:12
|
(71) У нас только второй час пошел. ;)
|
|||
74
247tsm
09.11.14
✎
02:13
|
(71) Да, работает, буду разбираться и сравнивать с моей "стряпниной".
|
|||
75
247tsm
09.11.14
✎
02:26
|
Очень странно.
Я заменил твои реквизиты ЦветТекста, ЦветФона и Шрифт на аналогичные по типу свои ЦветТ, ФонТ и ШрифтТ. Подправил в процедурах и... работать перестало!? Заменил обратно и... заработало!? Все - и твои и мои реквизиты в справочнике присутствуют одновременно. Они отличаются только названиями (по крайней мере визуально). Наверно, какой-то глюк в конфе или... |
|||
76
247tsm
09.11.14
✎
02:29
|
Всё, тоже пошёл спать.
|
|||
77
Chameleon1980
09.11.14
✎
02:30
|
хз
:) може какая казявка в свойствах закралась |
|||
78
247tsm
09.11.14
✎
02:36
|
(77) В свойствах, вроде, визуально всё одинаковое, кроме имён реквизитов.
|
|||
79
247tsm
09.11.14
✎
02:38
|
(77) Что-то, наверняка, есть. Или, на самом деле, глюк конфы - почему-то для моих реквизитов в Хранилище значений поиск не находит значения.
|
|||
80
247tsm
09.11.14
✎
02:49
|
Всё, нашёл. ;)
У меня были реквизиты формы с такими же именами, что и мои реквизиты справочника: ЦветТ, ФонТ и ШрифтТ. Я их, очевидно, добавил во время своих "экспериментов". Убрал реквизиты формы и заработало и с моими реквизитами справочника. |
|||
81
Chameleon1980
09.11.14
✎
02:49
|
:)
|
|||
82
Chameleon1980
09.11.14
✎
02:54
|
не понял где:?
|
|||
83
247tsm
09.11.14
✎
02:57
|
(82) В реквизитах формы.
При редактировании формы у тебя есть вкладки: Диалог, Модуль и Реквизиты. Вот на вкладке Реквизиты у меня и были эти реквизиты формы, совпадающие по именам с реквизитами справочника. |
|||
84
247tsm
09.11.14
✎
02:58
|
А вообще, мне кажется, что такие значения, как цвет, шрифт гораздо проще хранить в реквизитах типа строка, используя функции ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр().
Кода получается меньше. |
|||
85
Chameleon1980
09.11.14
✎
10:16
|
а вообще, сейчас, сидя в ванной, я вспомнил что цвет вообще одним числом хранить нужно/можно/лучше
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |