1C: вывод картинки в списке формы документа с изменением
Задача: необходимо сделать чтобы при двойном клике по ячейке статуса документа динамически изменялась картинка и соответственно его статус в форме списка документа.
Решение:
Чтобы каждый раз не дергать документ записью состояния, проще всего создать отдельный регистр в котором будет храниться ссылка документ и его текущий статус и перечисления:
Далее форму списка сделаем динамической, и добавим в запрос настройки списка связку с регистром:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
... ВЫБОР КОГДА СК_ГР_Статусы_ДПС.Статус = ЗНАЧЕНИЕ(Перечисление.СК_ГР_СтатусКартинкой.Флажок) ТОГДА 0 КОГДА СК_ГР_Статусы_ДПС.Статус = ЗНАЧЕНИЕ(Перечисление.СК_ГР_СтатусКартинкой.Галочка) ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК СтатусК ИЗ Документ.СК_ЗаявкаНаКУКУ КАК ДокументСК_ЗаявкаНаСК_ЗаявкаНаКУКУ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СК_ГР_Статусы_ДПС КАК СК_ГР_Статусы_ДПС ПО (СК_ГР_Статусы_ДПС.ДокОснование = ДокументСК_ЗаявкаСК_ЗаявкаНаКУКУ .Ссылка) ... |
Для следующего шага необходимо подготовить картинку высотой 32 пикселя, и шириной 32*количество_статусов, например что-то в этом духе:
Далее на форме списка, у колонки «СтатусК», выберем вид «Поле картинки» и в свойство «Картинка значений», загрузим картинку:
Ну и соответственно в событие таблицы «выбор» добавим изменение статуса по двойному клику по столбцу «СтатусК»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
&НаСервере Функция ПолучитьТекущийСтатусДокумента(Регистратор) ТекущийСтатус=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СК_ГР_Статусы_ДПС.Статус КАК Статус |ИЗ | РегистрСведений.СК_ГР_Статусы_ДПС КАК СК_ГР_Статусы_ДПС |ГДЕ | СК_ГР_Статусы_ДПС.ДокОснование = &Регистратор"; Запрос.УстановитьПараметр("Регистратор", Регистратор); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ТекущийСтатус=ВыборкаДетальныеЗаписи.Статус; КонецЦикла; возврат ТекущийСтатус; КонецФункции &НаСервере Процедура ИзменитьСтатусКНаСервере(НомерДок) док=Документы.СК_ЗаявкаНаИсполнениеПлатныхУслуг.НайтиПоНомеру(НомерДок); ТекСтат=ПолучитьТекущийСтатусДокумента(док); если ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка() тогда ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Флажок; иначеесли ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Флажок тогда ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Галочка; иначеесли ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Галочка тогда ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка(); конецесли; МенеджерЗаписи = РегистрыСведений.СК_ГР_Статусы_ДПС.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ДокОснование = док; МенеджерЗаписи.Статус = ТекСтат; МенеджерЗаписи.Записать(); КонецПроцедуры &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) если Поле.Имя="СтатусК" тогда ИзменитьСтатусКНаСервере(Элемент.ТекущиеДанные.Номер); Элементы.Список.Обновить(); СтандартнаяОбработка=ложь; конецесли; КонецПроцедуры |