При разработке внешних отчетов для платформы «1С:Предприятие 8.2» или «8.3» в режиме обычных форм (как в «Бухгалтерии предприятия 2.0»), разработчики часто сталкиваются с эффектом «залипания» данных. Это происходит, когда мы копируем один отчет, меняем в нем логику или коэффициенты, сохраняем под новым именем, но при запуске видим результаты работы первого отчета. Проанализируем причины этой ситуации и разберем по шагам, как сделать отчеты полностью независимыми друг от друга.
Разберем ситуацию, упомянутую участниками форума как «проблема красной и синей стрелок». В типовых решениях на обычных формах существует механизм регистрации внешних отчетов и обработок в базе данных. Когда мы регистрируем отчет в справочнике, система сохраняет его двоичные данные внутри информационной базы.
Проанализируем логику работы платформы в этот момент: если отчет с определенным внутренним идентификатором или именем уже зарегистрирован в справочнике «Дополнительные отчеты и обработки», система при попытке открыть файл через меню Файл — Открыть может подтянуть версию не из файла на диске, а из внутреннего хранилища базы данных. Это связано с тем, что программа находит совпадение по метаданным и отдает приоритет уже «установленной» версии.
Что необходимо сделать:
Имя объекта в свойствах метаданных в конфигураторе, чтобы система не путала его с уже зарегистрированным аналогом.Выясним причину, по которой коэффициенты в отчете остаются старыми, даже если код изменен. В системе компоновки данных (СКД) существует механизм сохранения пользовательских настроек. Эти настройки хранятся в специальном системном хранилище и привязаны к имени отчета.
Когда мы открываем второй отчет, который является копией первого, платформа видит, что структура настроек (параметры, отборы) идентична. Она автоматически подгружает последние использованные настройки из хранилища. Если в первом отчете вы установили определенные коэффициенты, они «перекочуют» во второй отчет просто потому, что система считает их наиболее актуальными для данного пользователя.
Рассмотрим, как принудительно сбросить эти настройки. В форме отчета (или в меню «Все действия») необходимо найти пункт «Установить стандартные настройки». При выполнении этой команды 1С игнорирует данные из хранилища и заново считывает структуру и значения параметров непосредственно из схемы компоновки данных, заложенной в файле .erf.
Посмотрим на проблему глубже, со стороны конфигуратора. Каждый объект в 1С имеет свой внутренний уникальный идентификатор (GUID). Когда мы создаем копию отчета простым копированием файла в Windows или командой Сохранить как... в конфигураторе, этот идентификатор копируется вместе с объектом.
Для платформы два файла с разными именами, но одинаковыми UUID, могут казаться одним и тем же объектом. Это влияет на кэширование временных файлов в папке пользователя AppData\Local\1C. Платформа распаковывает внешний отчет во временную директорию (часто называемую v8xtemp). Если идентификаторы совпадают, система может запустить код из уже распакованного ранее старого отчета.
Как правильно создавать копию отчета:
.xml схемы).Проанализируем свойства формы отчета. Если у вашего отчета создана основная форма, у нее есть свойства КлючСохраненияПоложенияОкна и КлючСохраненияНастроек. При копировании отчета эти строковые значения остаются одинаковыми. Если они заполнены, 1С будет записывать и считывать настройки окна и параметров в одну и ту же «ячейку» хранилища для обоих отчетов.
Чтобы решить эту проблему, убедитесь, что в свойствах формы эти поля либо пусты (тогда система будет использовать имя отчета для генерации ключа), либо содержат уникальные строки для каждого отчета.
Например, в модуле формы можно программно управлять ключом сохранения настроек, чтобы он зависел от версии отчета:
Процедура ПриОткрытии()
КлючСохраненияНастроек = "Версия_2_Коэффициент_А";
КонецПроцедуры
Подводя итог, можно сказать, что «одинаковые числа» в двух отчетах — это почти всегда результат работы механизмов оптимизации 1С (кэширование, хранилище настроек). Для того чтобы отчеты работали независимо, придерживайтесь следующего алгоритма:
Файл — Открыть.Соблюдение этих правил позволит избежать путаницы в данных и гарантирует, что каждый ваш отчет будет использовать именно те алгоритмы и коэффициенты, которые вы в него заложили.