1C: вывод картинки в списке формы документа с изменением

Задача: необходимо сделать чтобы при двойном клике по ячейке статуса документа динамически изменялась картинка и соответственно его статус в форме списка документа.

Решение:

Чтобы каждый раз не дергать документ записью состояния, проще всего создать отдельный регистр в котором будет храниться ссылка документ и его текущий статус и перечисления:

Далее форму списка сделаем динамической, и добавим в запрос настройки списка связку с регистром:

...
	ВЫБОР
		КОГДА СК_ГР_Статусы_ДПС.Статус = ЗНАЧЕНИЕ(Перечисление.СК_ГР_СтатусКартинкой.Флажок)
			ТОГДА 0
		КОГДА СК_ГР_Статусы_ДПС.Статус = ЗНАЧЕНИЕ(Перечисление.СК_ГР_СтатусКартинкой.Галочка)
			ТОГДА 1
		ИНАЧЕ 2
	КОНЕЦ КАК СтатусК
ИЗ
	Документ.СК_ЗаявкаНаКУКУ КАК ДокументСК_ЗаявкаНаСК_ЗаявкаНаКУКУ 
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СК_ГР_Статусы_ДПС КАК СК_ГР_Статусы_ДПС
		ПО (СК_ГР_Статусы_ДПС.ДокОснование = ДокументСК_ЗаявкаСК_ЗаявкаНаКУКУ .Ссылка)
...

Для следующего шага необходимо подготовить картинку высотой 32 пикселя, и шириной 32*количество_статусов, например что-то в этом духе:

Далее на форме списка, у колонки «СтатусК», выберем вид «Поле картинки» и в свойство «Картинка значений», загрузим картинку:

Ну и соответственно в событие таблицы «выбор» добавим изменение статуса по двойному клику по столбцу «СтатусК»:

&НаСервере
Функция ПолучитьТекущийСтатусДокумента(Регистратор) 
	ТекущийСтатус=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка();
	Запрос = Новый Запрос;	
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СК_ГР_Статусы_ДПС.Статус КАК Статус
		|ИЗ
		|	РегистрСведений.СК_ГР_Статусы_ДПС КАК СК_ГР_Статусы_ДПС
		|ГДЕ
		|	СК_ГР_Статусы_ДПС.ДокОснование = &Регистратор";
	
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ТекущийСтатус=ВыборкаДетальныеЗаписи.Статус;
	КонецЦикла;

	возврат ТекущийСтатус;
КонецФункции	

&НаСервере
Процедура ИзменитьСтатусКНаСервере(НомерДок)
	док=Документы.СК_ЗаявкаНаИсполнениеПлатныхУслуг.НайтиПоНомеру(НомерДок);
	ТекСтат=ПолучитьТекущийСтатусДокумента(док);
	если ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка() тогда
		ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Флажок;
	иначеесли ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Флажок тогда
		ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Галочка;
	иначеесли ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.Галочка тогда
		ТекСтат=Перечисления.СК_ГР_СтатусКартинкой.ПустаяСсылка();
	конецесли;
	
	МенеджерЗаписи = РегистрыСведений.СК_ГР_Статусы_ДПС.СоздатьМенеджерЗаписи(); 
	МенеджерЗаписи.ДокОснование = док; 
	МенеджерЗаписи.Статус = ТекСтат; 
	МенеджерЗаписи.Записать();   	
	
КонецПроцедуры


&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	если Поле.Имя="СтатусК" тогда 
		ИзменитьСтатусКНаСервере(Элемент.ТекущиеДанные.Номер);
		Элементы.Список.Обновить(); 
		СтандартнаяОбработка=ложь;
	конецесли;	
КонецПроцедуры