При работе с внешними отчетами и обработками (файлы формата .erf и .epf) разработчики часто сталкиваются с загадочным поведением платформы «1С:Предприятие». Вы копируете отчет, переименовываете файл на диске, открываете оба отчета в одной базе, но при изменении настроек или коэффициентов в первом отчете они автоматически меняются и во втором. Более того, при попытке изменить структуру колонок или реквизитов формы данные и вовсе перестают сохраняться.
В этой статье мы подробно разберем, почему возникает этот конфликт, как устроена система сохранения настроек в обычных формах (на примере конфигурации «Управление торговлей 10.3») и какими способами можно навсегда разделить эти отчеты, чтобы они работали независимо друг от друга.
Для операционной системы Windows файлы Отчет1.erf и Отчет2.erf — это два абсолютно разных объекта. Однако платформа 1С идентифицирует внешние отчеты совершенно иначе. Причиной «склеивания» настроек являются два ключевых фактора:
Имя, которое задается внутри Конфигуратора. Если вы просто скопировали файл через проводник, имя внутри метаданных осталось прежним (например, ОтчетПоКоэффициентам). Именно по этому имени платформа идентифицирует объект при записи его настроек в базу данных (в частности, в системный регистр сведений «Сохраненные настройки»).Рассмотрим подробнее три надежных способа, которые помогут нам уникализировать внешние отчеты и разделить их настройки.
---
Этот метод является самым быстрым, если вам нужно оперативно исправить проблему прямо в файле отчета. Нам понадобится открыть проблемный отчет в режиме Конфигуратора и обновить его структуру.
Выполним следующие шаги:
2 в конец названия). Поле «Синоним» также можно изменить для удобства пользователей.F9).После этой процедуры платформа начнет воспринимать форму как абсолютно новый объект, и настройки перестанут пересекаться с первым отчетом.
---
Этот способ является наиболее надежным, так как при добавлении объекта во внутреннюю метаструктуру конфигурации платформа 1С автоматически пересоздает все внутренние идентификаторы (GUID) для самого отчета, его форм, макетов и реквизитов.
Проанализируем этот процесс по шагам:
Имя на новое уникальное значение.Этот нехитрый прием позволяет полностью «очистить» файл от старых GUID, создавая чистый и независимый внешний отчет.
---
Если предыдущие методы по какой-то причине не помогли или структура отчета слишком сложная, мы можем создать абсолютно новый «чистый» файл отчета и перенести в него все наработки с помощью механизма сравнения и объединения.
Разберем, как это сделать:
---
В сообщении темы автор упомянул еще одну проблему: после переименования столбца в форме отчета значения в нем перестали сохраняться. При вводе данных они визуально отображаются, но после закрытия и повторного открытия формы бесследно исчезают.
Выясним причину этого поведения. В обычных формах (на которых работает «Управление торговлей 10.3») сохранение данных и настроек формы может быть реализовано двумя путями: автоматически и программно.
В свойствах обычной формы есть флаг Сохранять значения, а также список Сохраняемые значения. Если вы переименовали реквизит отчета или колонку табличного поля, то автоматическая привязка в платформе разрывается. Платформа пытается сопоставить сохраненные в базе данные со старым именем колонки, которого в форме больше нет.
Решение:
Сохранять значения активно.Сохраняемые значения и проверьте, стоит ли галочка напротив вашего нового (переименованного) реквизита. Если там указано старое имя или галочка слетела, настройте привязку заново.Очень часто разработчики используют программное сохранение параметров (например, коэффициентов) в структуры настроек, используя методы работы с хранилищем или системными процедурами конфигурации. Посмотрим на пример классической реализации сохранения настроек в модуле формы:
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// Сохранение настроек в структуру
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("СтароеИмяКолонки", ТаблицаКоэффициентов);
СохранитьЗначение("НастройкиОтчетаКоэффициенты", СтруктураНастроек);
КонецПроцедуры
Если имя реквизита или элемента формы было изменено, а в коде остался старый ключ (например, "СтароеИмяКолонки"), то при восстановлении данных платформа просто не сможет сопоставить сохраненную таблицу с новым элементом формы.
Для исправления этой ситуации выполните глобальный поиск по проекту (сочетание клавиш Ctrl + Shift + F) внутри вашего внешнего отчета. Проверьте все вхождения старого названия колонки в модуле формы и модуле объекта и замените их на актуальное имя.
Используя предложенные методики, мы можем гарантировать стабильную, изолированную работу копий внешних отчетов и корректное сохранение пользовательских данных.