Здравствуйте.
1С:Предприятие 8.2 (8.2.19.130) "Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.14.01)
Поставлена задача добавить функционал раскраски строк в списке документа по складам связанным с пользователем, чтобы можно было настраивать каким цветом выделять, и какой склад для каждого пользователя.
Создал справочник в котором есть реквизит, пользователь, склад, цвет.
Цвет пока просто строка и не используется.
Как можно к реквизиту цвет прикрепить кнопку для выбора цвета из палитры и как можно хранить выбор в реквизите?
Благодарю.
ДиалогВыбораЦвета (ColorChooseDialog)
podcast @ Сегодня, 15:07
,
Это я сделал первым делом, но к сожалению не нашел такой тип.
ВыборЦвета = Новый ДиалогВыбораЦвета;
Если ВыборЦвета.Выбрать() Тогда
ВыбранныйЦвет = ВыборЦвета.Цвет;
Спр.ЦветПользователя = Новый ХранилищеЗначения(ВыбранныйЦвет);
Спр.Записать();
КонецЕсли;
Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.ЦветФона = ДанныеСтроки.Ссылка.ЦветПользователя.Получить();
КонецПроцедуры
Flexy @ Вчера, 16:53
,
Я правильно понимаю данный реквизит должен быть типа ХранилищеЗначенй?
Установка цвета строки производится ПриПолученииДанных
Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СкладКомпании.Код = СкладКод Тогда
ОформлениеСтроки.ЦветФона = ЦветСтрок; //делал так WebЦвета.БледноБирюзовый;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СкладКод = Выборка.КодСклада;
ЦветСтрок.ЦветФона = Выборка.Цвет.Получить(); // Так правильно будет получать значение из ХЗ?
КонецЦикла;
Все получилось как и хотел.
Добавил следующий код в форму списка документа РеализацияТоваров
Перем СкладКод, ЦветСтрок;
...
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
...
Попытка
Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СкладКомпании.Код = СкладКод Тогда
ОформлениеСтроки.ЦветФона = ЦветСтрок;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
КонецПроцедуры //СписокПриПолученииДанных()
...
Процедура ПриОткрытии()
...
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
СпрТекПольз = Справочники.Пользователи.НайтиПоКоду(ТекПользователь.Имя);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НастройкиПользователей.Пользователь,
| НастройкиПользователей.Назначение,
| НастройкиПользователей.Склад,
| НастройкиПользователей.Цвет,
| НастройкиПользователей.Склад.Код КАК КодСклада
|ИЗ
| Справочник.НастройкиПользователей КАК НастройкиПользователей
|ГДЕ
| НастройкиПользователей.Пользователь = &Пользователь";
Запрос.УстановитьПараметр("Пользователь", СпрТекПольз);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СкладКод = Выборка.КодСклада;
ЦветСтрок = Выборка.Цвет.Получить();
КонецЦикла;
КонецПроцедуры // ПриОткрытии()
Процедура кнВыбратьЦветНажатие(Элемент)
Диалог = Новый ДиалогВыбораЦвета;
Если Диалог.Выбрать() Тогда
ВыбранныйЦвет = Диалог.Цвет;
Цвет = Новый ХранилищеЗначения(ВыбранныйЦвет);
ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = ВыбранныйЦвет; //подсвечиваем чтобы пользователь мог видеть как выглядит
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
ЭлементыФормы.ПримерЦвета.Значение = "Это пример отображения";
Попытка
ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = Цвет.Получить(); // чтобы было видно какой цвет установлен
Исключение
КонецПопытки;
КонецПроцедуры
logist @ 03.03.17, 10:35
,
По Пока-Если понял свою ошибку и учел.
А "Попытка" использую как страховку от вылета ошибки, если вдруг реквизит Цвет (ХранилищеЗначений) будет не заполнен, а то пользователи шибко пугливые на ошибки .
Цвет = Цвет.Получить();
Если Не Цвет = Неопределено Тогда
ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = Цвет;
КонецЕсли
При работе с данным методом хранения цвета, иногда, у некоторых пользователей возникает такая ситуация, перестает "подкрашивать" строки в списках, хотя в справочнике, где хранятся настройки все на месте.
Помогает только чистка кэша у пользователя.
Подскажите пожалуйста, как такую неприятность можно исправить, или это никак поправить нельзя?
Учитывая что платформа 8.2, списал бы это на неё, потому, что она хранит пользовательские настройки в файлах, и возможно окрашивание не происходит потому что по какой-то причине не прочитался файл. Плюс - это Рарус, а там могут быть какие-то свои приколы, например при открытии формы выполняется какая-то внешняя компонента, которая, при каких-то условиях, чхала на вашу раскраску
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua