При обновлении платформы 1С:Предприятие до определенных релизов ветки 8.3.18 (особенно 8.3.18.1208) разработчики часто сталкиваются с неприятной ситуацией: в отчетах, использующих вложенные схемы компоновки данных, внезапно «отваливаются» связи параметров. Визуально это проявляется в виде красного крестика на закладке «Вложенные схемы», а попытка перевыбрать параметры вручную помогает лишь до первого сохранения — после закрытия и открытия схемы настройки снова сбрасываются. Рассмотрим подробно, почему это происходит и какими способами можно восстановить работоспособность отчетов.
Проанализируем ситуацию с технической точки зрения. Данная проблема не связана с ошибками в коде вашей конфигурации или некорректными действиями разработчика. Это регрессионная ошибка платформы, официально зарегистрированная под номером 000099959 (также упоминается как 10227181).
Суть ошибки заключается в некорректной работе механизмов сериализации XML-структуры схемы компоновки данных. Когда вы настраиваете связь параметров между основной и вложенной схемой, платформа должна записать уникальные идентификаторы этих параметров в метаданные отчета. В проблемных релизах механизм сопоставления имен и идентификаторов нарушен: при сохранении схемы 1С просто «забывает» записать установленные связи, либо записывает их так, что при следующем чтении они считаются невалидными. Именно поэтому мы видим красный крестик — признак того, что ссылка на параметр вложенной схемы потеряна.
Поскольку проблема носит системный характер, самым надежным и правильным способом будет переход на исправленный релиз платформы. Разберем, какие версии являются стабильными в этом отношении:
После обновления платформы рекомендуется выполнить следующие действия:
Если в силу организационных причин оперативное обновление платформы невозможно, мы можем обойти ошибку визуального редактора с помощью программного кода. Суть метода заключается в том, чтобы перехватить процесс компоновки и принудительно передать значения из основной схемы во вложенную, минуя «сломанный» механизм автоматических связей.
Разберем, как это реализовать в модуле объекта отчета. Нам потребуется обработчик события ПриКомпоновкеРезультата. Рассмотрим пример кода:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Отключаем стандартную обработку, чтобы управлять процессом вручную
СтандартнаяОбработка = Ложь;
// Получаем настройки отчета
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Создаем макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
// Инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Важный нюанс: при программной инициализации ПроцессорКомпоновкиДанных с установленным флагом Истина (возможность использования внешних функций), платформа иногда более корректно обрабатывает вложенные наборы данных. Однако в самых тяжелых случаях может потребоваться обращение к коллекции Настройки.ПараметрыДанных и явная передача значений в структуру вложенного отчета через обход элементов макета.
В некоторых ситуациях, если вложенная схема не является слишком сложной, имеет смысл рассмотреть вариант объединения схем. Проанализируем структуру отчета: если вложенная схема используется только для того, чтобы вывести дополнительные данные по определенному условию, попробуем перенести ее логику в основную схему в виде дополнительного набора данных (запроса или объекта).
Посмотрим на последовательность действий:
Этот путь более трудоемкий, но он гарантирует стабильную работу отчета на любой версии платформы, так как механизм связей наборов данных внутри одной схемы работает гораздо надежнее, чем механизм вложенных схем.
Если вы обновили платформу, но красный крестик не исчезает, попробуйте следующее:
<nestedSchema>. Проверьте, заполнены ли в нем связи <parameterLink>. Если они пусты, значит, платформа все еще некорректно сохраняет данные.Подводя итог, можно сказать, что ситуация со «сломанными» связями — это типичный пример того, как критическая ошибка в одном из релизов платформы может парализовать работу сложных отчетов. Наиболее эффективным и стратегически верным решением остается плановое обновление платформы 1С до актуальных и стабильных сборок.