Почему не сохраняются или сбрасываются настройки отчета «Товары на складах» в 1С:УПП?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

В типовой конфигурации «Управление производственным предприятием» (УПП) пользователи и разработчики часто сталкиваются с ситуацией, когда отчет «Товары на складах» при повторном открытии не восстанавливает сохраненные группировки, отборы или колонки. Более того, при открытии детализации (расшифровки двойным кликом мыши) настройки могут самопроизвольно сбиваться или перезаписывать основной вариант отчета. Разберем внутреннее устройство данного отчета, выясним причины такого поведения и рассмотрим практические способы настройки и администрирования.

Где находится отчет в конфигураторе и на чем он построен

В пользовательском интерфейсе отчет может называться «Товары на складах», однако в дереве метаданных конфигурации он расположен как отчет ВедомостьТоварыНаСкладах. Данный отчет разработан на базе типового механизма Построителя отчета и использует функционал общего объекта УниверсальныйОтчет.

В модуле объекта отчета процедура формирования обычно выглядит следующим образом:


Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    
    // Перед формированием отчета можно установить необходимые параметры универсального отчета
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент,,, ЭтотОбъект);

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

Как работает механизм сохранения и восстановления настроек

Пользовательские настройки отчетов на базе построителя являются индивидуальными для каждого пользователя информационной базы. Все варианты настроек физически сохраняются в регистре сведений СохраненныеНастройки. Загрузка настроек при открытии формы управляется логикой типового общего модуля УниверсальныеМеханизмы и событиями формы отчета.

Посмотрим на фрагмент кода инициализации настроек при открытии формы:


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

КонецЕсли;

Почему настройки не загружаются при открытии или сбиваются расшифровкой

Проанализируем основные причины некорректного поведения отчета:

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

Способы решения и настройки отчета

Рассмотрим по шагам, как исправить ситуацию в пользовательском и административном режимах.

Способ 1. Настройка параметров сохранения в пользовательском режиме

  1. Откроем отчет ВедомостьТоварыНаСкладах («Товары на складах») из главного меню, а не через окно расшифровки.
  2. Настроим нужные группировки строк, колонок, отборы и показатели.
  3. В окне управления настройками нажмем кнопку «Сохранить настройку...», укажем понятное наименование и обязательно установим флаг «Использовать при открытии».
  4. Снимем флаг «Сохранять автоматически при закрытии», чтобы случайные изменения и окна детализации не затирали рабочую схему.

Способ 2. Очистка и ручная правка регистра сведений

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

  1. Перейдем в главное меню: Операции → Регистр сведений → Сохраненные настройки.
  2. Установим отбор по пользователю и объекту Отчет.ВедомостьТоварыНаСкладах.
  3. Удалим лишние, поврежденные или устаревшие строки.
  4. Убедимся, что признак «Использовать при открытии» установлен только для одной, актуальной записи.

Способ 3. Перенос настроек между пользователями

Если требуется передать проверенную конфигурацию отчета от одного сотрудника другим, воспользуемся стандартным сервисным инструментом:

  1. Откроем обработку «Копирование настроек пользователей» (доступна в интерфейсе администратора).
  2. Выберем исходного пользователя (источник эталонной настройки).
  3. В дереве объектов отметим отчет Ведомость по товарам на складах.
  4. Выберем список целевых пользователей и выполним копирование.
← На главную