Здравствуйте. 1С:Предприятие 8.2 (8.2.19.130) "Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.14.01)
Поставлена задача добавить функционал раскраски строк в списке документа по складам связанным с пользователем, чтобы можно было настраивать каким цветом выделять, и какой склад для каждого пользователя.
Создал справочник в котором есть реквизит, пользователь, склад, цвет. Цвет пока просто строка и не используется. Как можно к реквизиту цвет прикрепить кнопку для выбора цвета из палитры и как можно хранить выбор в реквизите?
Выбор в типе ХранилищеЗначения будет достаточно или потребуются дополнительные операции по созданию метаданных?
Пишем в реквизит выбранный цвет:
ВыборЦвета = Новый ДиалогВыбораЦвета; Если ВыборЦвета.Выбрать() Тогда ВыбранныйЦвет = ВыборЦвета.Цвет; Спр.ЦветПользователя = Новый ХранилищеЗначения(ВыбранныйЦвет); Спр.Записать(); КонецЕсли;
Flexy @ Вчера, 16:53
, Я правильно понимаю данный реквизит должен быть типа ХранилищеЗначенй?
Установка цвета строки производится ПриПолученииДанных
Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СкладКомпании.Код = СкладКод Тогда ОформлениеСтроки.ЦветФона = ЦветСтрок; //делал так WebЦвета.БледноБирюзовый; КонецЕсли;
Считываю данные по пользователю в процедуре ПриОткрытии
Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл СкладКод = Выборка.КодСклада; ЦветСтрок.ЦветФона = Выборка.Цвет.Получить(); // Так правильно будет получать значение из ХЗ? КонецЦикла;
Все получилось как и хотел. Добавил следующий код в форму списка документа РеализацияТоваров
Перем СкладКод, ЦветСтрок; ... Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок) Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл ... Попытка Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СкладКомпании.Код = СкладКод Тогда ОформлениеСтроки.ЦветФона = ЦветСтрок; КонецЕсли; Исключение КонецПопытки; КонецЦикла; КонецПроцедуры //СписокПриПолученииДанных()
... Процедура ПриОткрытии() ... ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); СпрТекПольз = Справочники.Пользователи.НайтиПоКоду(ТекПользователь.Имя); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НастройкиПользователей.Пользователь, | НастройкиПользователей.Назначение, | НастройкиПользователей.Склад, | НастройкиПользователей.Цвет, | НастройкиПользователей.Склад.Код КАК КодСклада |ИЗ | Справочник.НастройкиПользователей КАК НастройкиПользователей |ГДЕ | НастройкиПользователей.Пользователь = &Пользователь"; Запрос.УстановитьПараметр("Пользователь", СпрТекПольз); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл СкладКод = Выборка.КодСклада; ЦветСтрок = Выборка.Цвет.Получить(); КонецЦикла; КонецПроцедуры // ПриОткрытии()
В справочнике настроек форма элемента так
Процедура кнВыбратьЦветНажатие(Элемент) Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ВыбранныйЦвет = Диалог.Цвет; Цвет = Новый ХранилищеЗначения(ВыбранныйЦвет); ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = ВыбранныйЦвет; //подсвечиваем чтобы пользователь мог видеть как выглядит КонецЕсли; КонецПроцедуры
Процедура ПриОткрытии() ЭлементыФормы.ПримерЦвета.Значение = "Это пример отображения"; Попытка ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = Цвет.Получить(); // чтобы было видно какой цвет установлен Исключение КонецПопытки; КонецПроцедуры
logist @ 03.03.17, 10:35
, По Пока-Если понял свою ошибку и учел.
А "Попытка" использую как страховку от вылета ошибки, если вдруг реквизит Цвет (ХранилищеЗначений) будет не заполнен, а то пользователи шибко пугливые на ошибки .
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(bizisoft @ 07.03.17, 10:06)
А "Попытка" использую как страховку от вылета ошибки, если вдруг реквизит Цвет (ХранилищеЗначений) будет не заполнен, а то пользователи шибко пугливые на ошибки
В таком случае надо проверять реквизит на заполненность, дело в том, что если реквизит не будет заполнен то попытка не вызовет исключение а вернет Неопределено.
Цвет = Цвет.Получить(); Если Не Цвет = Неопределено Тогда ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = Цвет; КонецЕсли
Так же и при оформлении строки, обыграйте условие так, что бы не использовать попытку, при большом списке это будет очень нагружать систему.
Личные бесплатные консультации не даю, для этого есть форум!
При работе с данным методом хранения цвета, иногда, у некоторых пользователей возникает такая ситуация, перестает "подкрашивать" строки в списках, хотя в справочнике, где хранятся настройки все на месте. Помогает только чистка кэша у пользователя.
Подскажите пожалуйста, как такую неприятность можно исправить, или это никак поправить нельзя?
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Учитывая что платформа 8.2, списал бы это на неё, потому, что она хранит пользовательские настройки в файлах, и возможно окрашивание не происходит потому что по какой-то причине не прочитался файл. Плюс - это Рарус, а там могут быть какие-то свои приколы, например при открытии формы выполняется какая-то внешняя компонента, которая, при каких-то условиях, чхала на вашу раскраску
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 331 раз
Рейтинг: 0
- это Рарус
как же часто я слышал объяснение багов этой фразой =))
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!