Почему два разных внешних отчета в 1С:Бухгалтерия 2.0 показывают одинаковые числа и как это исправить

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке внешних отчетов для платформы «1С:Предприятие 8.2» или «8.3» в режиме обычных форм (как в «Бухгалтерии предприятия 2.0»), разработчики часто сталкиваются с эффектом «залипания» данных. Это происходит, когда мы копируем один отчет, меняем в нем логику или коэффициенты, сохраняем под новым именем, но при запуске видим результаты работы первого отчета. Проанализируем причины этой ситуации и разберем по шагам, как сделать отчеты полностью независимыми друг от друга.

Причина 1: Приоритет версии отчета в справочнике дополнительных обработок

Разберем ситуацию, упомянутую участниками форума как «проблема красной и синей стрелок». В типовых решениях на обычных формах существует механизм регистрации внешних отчетов и обработок в базе данных. Когда мы регистрируем отчет в справочнике, система сохраняет его двоичные данные внутри информационной базы.

Проанализируем логику работы платформы в этот момент: если отчет с определенным внутренним идентификатором или именем уже зарегистрирован в справочнике «Дополнительные отчеты и обработки», система при попытке открыть файл через меню Файл — Открыть может подтянуть версию не из файла на диске, а из внутреннего хранилища базы данных. Это связано с тем, что программа находит совпадение по метаданным и отдает приоритет уже «установленной» версии.

Что необходимо сделать:

  1. Если вы используете справочник дополнительных отчетов, убедитесь, что вы обновили отчет именно внутри базы (нажали на ту самую «красную стрелку» для загрузки новой версии файла в хранилище).
  2. Для тестирования новых версий рекомендуется временно изменять Имя объекта в свойствах метаданных в конфигураторе, чтобы система не путала его с уже зарегистрированным аналогом.

Причина 2: Использование сохраненных настроек СКД

Выясним причину, по которой коэффициенты в отчете остаются старыми, даже если код изменен. В системе компоновки данных (СКД) существует механизм сохранения пользовательских настроек. Эти настройки хранятся в специальном системном хранилище и привязаны к имени отчета.

Когда мы открываем второй отчет, который является копией первого, платформа видит, что структура настроек (параметры, отборы) идентична. Она автоматически подгружает последние использованные настройки из хранилища. Если в первом отчете вы установили определенные коэффициенты, они «перекочуют» во второй отчет просто потому, что система считает их наиболее актуальными для данного пользователя.

Рассмотрим, как принудительно сбросить эти настройки. В форме отчета (или в меню «Все действия») необходимо найти пункт «Установить стандартные настройки». При выполнении этой команды 1С игнорирует данные из хранилища и заново считывает структуру и значения параметров непосредственно из схемы компоновки данных, заложенной в файле .erf.

Причина 3: Конфликт уникальных идентификаторов (UUID)

Посмотрим на проблему глубже, со стороны конфигуратора. Каждый объект в 1С имеет свой внутренний уникальный идентификатор (GUID). Когда мы создаем копию отчета простым копированием файла в Windows или командой Сохранить как... в конфигураторе, этот идентификатор копируется вместе с объектом.

Для платформы два файла с разными именами, но одинаковыми UUID, могут казаться одним и тем же объектом. Это влияет на кэширование временных файлов в папке пользователя AppData\Local\1C. Платформа распаковывает внешний отчет во временную директорию (часто называемую v8xtemp). Если идентификаторы совпадают, система может запустить код из уже распакованного ранее старого отчета.

Как правильно создавать копию отчета:

  1. Вместо простого копирования файла создайте в конфигураторе новый пустой внешний отчет.
  2. Вручную скопируйте в него схему компоновки данных (через экспорт/импорт файла .xml схемы).
  3. Перенесите программный код модулей.
  4. Таким образом, новый отчет получит свой уникальный идентификатор, и конфликтов на уровне кэша не возникнет.

Причина 4: Ключи сохранения настроек в форме

Проанализируем свойства формы отчета. Если у вашего отчета создана основная форма, у нее есть свойства КлючСохраненияПоложенияОкна и КлючСохраненияНастроек. При копировании отчета эти строковые значения остаются одинаковыми. Если они заполнены, 1С будет записывать и считывать настройки окна и параметров в одну и ту же «ячейку» хранилища для обоих отчетов.

Чтобы решить эту проблему, убедитесь, что в свойствах формы эти поля либо пусты (тогда система будет использовать имя отчета для генерации ключа), либо содержат уникальные строки для каждого отчета.

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


Процедура ПриОткрытии()
    КлючСохраненияНастроек = "Версия_2_Коэффициент_А";
КонецПроцедуры

Итоги и рекомендации

Подводя итог, можно сказать, что «одинаковые числа» в двух отчетах — это почти всегда результат работы механизмов оптимизации 1С (кэширование, хранилище настроек). Для того чтобы отчеты работали независимо, придерживайтесь следующего алгоритма:

  1. Всегда меняйте внутреннее Имя объекта в свойствах (в самой верхней строке дерева метаданных конфигуратора).
  2. При первом запуске нового отчета обязательно используйте команду «Установить стандартные настройки».
  3. Если отчет зарегистрирован как дополнительный, обновляйте его через замену файла в справочнике, а не просто переоткрытием через Файл — Открыть.
  4. Очищайте кэш платформы, если поведение отчета кажется нелогичным после внесения изменений в код.

Соблюдение этих правил позволит избежать путаницы в данных и гарантирует, что каждый ваш отчет будет использовать именно те алгоритмы и коэффициенты, которые вы в него заложили.

← На главную