В типовой конфигурации «Управление производственным предприятием» (УПП) пользователи и разработчики часто сталкиваются с ситуацией, когда отчет «Товары на складах» при повторном открытии не восстанавливает сохраненные группировки, отборы или колонки. Более того, при открытии детализации (расшифровки двойным кликом мыши) настройки могут самопроизвольно сбиваться или перезаписывать основной вариант отчета. Разберем внутреннее устройство данного отчета, выясним причины такого поведения и рассмотрим практические способы настройки и администрирования.
В пользовательском интерфейсе отчет может называться «Товары на складах», однако в дереве метаданных конфигурации он расположен как отчет ВедомостьТоварыНаСкладах. Данный отчет разработан на базе типового механизма Построителя отчета и использует функционал общего объекта УниверсальныйОтчет.
В модуле объекта отчета процедура формирования обычно выглядит следующим образом:
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
// Перед формированием отчета можно установить необходимые параметры универсального отчета
УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент,,, ЭтотОбъект);
КонецПроцедуры
Пользовательские настройки отчетов на базе построителя являются индивидуальными для каждого пользователя информационной базы. Все варианты настроек физически сохраняются в регистре сведений СохраненныеНастройки. Загрузка настроек при открытии формы управляется логикой типового общего модуля УниверсальныеМеханизмы и событиями формы отчета.
Посмотрим на фрагмент кода инициализации настроек при открытии формы:
Если Объект.мВосстанавливатьНастройкиПриОткрытии Тогда
Если ЗначениеЗаполнено(глЗначениеПеременной("глТекущийПользователь")) И Не ЗначениеЗаполнено(Объект.ДатаНач) Тогда
Объект.ДатаНач = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяДатаНачалаОтчетов");
КонецЕсли;
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", ?(ИмяОбъекта = Неопределено, Строка(Отчет), ИмяОбъекта));
Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
ПреобразоватьФормат(СтруктураНастройки.СохраненнаяНастройка);
Объект.мТекущаяНастройка = СтруктураНастройки;
Отчет.ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
ВосстановитьПараметрыПечати(Объект, Отчет, Форма, СтруктураНастройки.СохраненнаяНастройка);
Иначе
Отчет.УстановитьНачальныеНастройки();
КонецЕсли;
Объект.ВосстановитьДополнительныеНастройки(Объект, Отчет, ИмяОбъекта);
КонецЕсли;
Проанализируем основные причины некорректного поведения отчета:
СохраненныеНастройки. В итоге при следующем запуске отчета пользователь видит структуру отчета расшифровки вместо базового вида.ОбработкаРасшифровкиУниверсальногоОтчета для дочернего окна программно устанавливается признак мВосстанавливатьНастройкиПриОткрытии = Ложь. Это сделано специально, чтобы контекстный отбор ячейки не заменялся общей сохраненной настройкой:
Процедура ОбработкаРасшифровкиУниверсальногоОтчета(Расшифровка, Отчет, ДополнительныеПараметры = Неопределено) Экспорт
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
...
УниверсальныйОтчетРасшифровка.мВосстанавливатьНастройкиПриОткрытии = Ложь;
...
Иначе
ОткрытьЗначение(Расшифровка);
КонецЕсли;
КонецПроцедуры
Рассмотрим по шагам, как исправить ситуацию в пользовательском и административном режимах.
ВедомостьТоварыНаСкладах («Товары на складах») из главного меню, а не через окно расшифровки.Если настройки конкретного пользователя ведут себя непредсказуемо, выполним ревизию регистра:
Отчет.ВедомостьТоварыНаСкладах.Если требуется передать проверенную конфигурацию отчета от одного сотрудника другим, воспользуемся стандартным сервисным инструментом:
Ведомость по товарам на складах.