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

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

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

Конечно, проще всего было бы отключить эту логику через изменение и контроль, но я не люблю такое. Поэтому сделал иначе:
&НаКлиенте &Вместо("КассаККМПриИзменении") Процедура видс_КассаККМПриИзменении(Элемент) //Сохраняем ответственного ПредПоложениеОтветственный = Объект.ПоложениеОтветственный; М = Новый Массив(); Для Каждого Строка ИЗ Объект.Запасы Цикл М.Добавить(Строка.Ответственный); КонецЦикла; ПродолжитьВызов(Элемент); //Восстанавливаем ответственного //Скопировано из процедуры КассаККМПриИзмененииНаСервере Объект.ПоложениеОтветственный = ПредПоложениеОтветственный; УстановитьВидимостьОтПользовательскихНастроек(); ТребуетсяПроверкаКассираПриСменеОтветственного = ложь; //Вместо ТребуетсяПроверкаКассираПриСменеОтветственного(); УстановитьВидимостьПредупрежденияОКассире(); ОбщегоНазначенияКлиентСервер.УдалитьСтатусИлиВажноеСообщение(ЭтотОбъект, "ПроблемаСКассиром"); //Вызываю принудительно Сч = 0; Для Каждого Строка ИЗ Объект.Запасы Цикл Если Сч < М.Количество() Тогда Строка.Ответственный = М[Сч]; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецПроцедуры
Среда: УНФ 3.0.13.374 Объем: 1 час
