Странности при смене кассы в УНФ 3

При изменении кассы ККМ появляется надпись «для пробития чеков необходимо указать физическое лицо 1с»:

Оказалось, что положение ответственного в шапке или табличной части определяется по реквизиту чека ПоложениеОтветственный:

Определить как заполняется ПоложениеОтветственный при смене кассы удалось через замер производительности, в процедуре КассаККМПриИзмененииНаСервере формы документа ЧекККМ:

	Если Объект.ПоложениеОтветственный <> ПоложениеРеквизитаНаФормеВШапке 
		И Объект.КассаККМ.ИсточникФИОКассираВЧеке = Перечисления.ИсточникиФИОКассираВЧекеККМ.Ответственный Тогда		
		Объект.ПоложениеОтветственный = ПоложениеРеквизитаНаФормеВШапке;
		Объект.Ответственный = ЗаполнениеОбъектовУНФ.ЗначениеДляШапки(Объект.Запасы, "Ответственный");	
		ЗаполнениеОбъектовУНФ.ЗаполнитьТаблицуПоШапке(Объект,"Запасы", "Ответственный", "ПоложениеОтветственный");
		УстановитьВидимостьОтПользовательскихНастроек();
	КонецЕсли;
	НоменклатураВДокументахСервер.ОбновитьНастройкиФормыВыбораНоменклатурыПриИзмененииРеквизита(ЭтотОбъект,
		"ЧекККМ", "Запасы", НастройкиФормыВыбораНоменклатуры);
	
	ТребуетсяПроверкаКассираПриСменеОтветственного = ТребуетсяПроверкаКассираПриСменеОтветственного();
	УстановитьВидимостьПредупрежденияОКассире();

Кстати, эта логика продублирована и в этой функции:

Конечно, проще всего было бы отключить эту логику через изменение и контроль, но я не люблю такое. Поэтому сделал иначе:


&НаКлиенте
&Вместо("КассаККМПриИзменении")
Процедура видс_КассаККМПриИзменении(Элемент)    
	

	//Сохраняем ответственного
	ПредПоложениеОтветственный = Объект.ПоложениеОтветственный;
	М = Новый Массив();
	Для Каждого Строка ИЗ Объект.Запасы Цикл
		М.Добавить(Строка.Ответственный);
	КонецЦикла;

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


	Сч = 0;
	Для Каждого Строка ИЗ Объект.Запасы Цикл   
		Если Сч < М.Количество() Тогда
			Строка.Ответственный = М[Сч]; 
		КонецЕсли;
		Сч = Сч + 1;
	КонецЦикла;              
	

КонецПроцедуры

Среда: УНФ 3.0.13.374 Объем: 1 час