Почему ломаются связи параметров основной и вложенной схем СКД и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выясним причину: баг платформы 000099959

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

Суть ошибки заключается в некорректной работе механизмов сериализации XML-структуры схемы компоновки данных. Когда вы настраиваете связь параметров между основной и вложенной схемой, платформа должна записать уникальные идентификаторы этих параметров в метаданные отчета. В проблемных релизах механизм сопоставления имен и идентификаторов нарушен: при сохранении схемы 1С просто «забывает» записать установленные связи, либо записывает их так, что при следующем чтении они считаются невалидными. Именно поэтому мы видим красный крестик — признак того, что ссылка на параметр вложенной схемы потеряна.

Способ 1. Обновление платформы (Рекомендуемое решение)

Поскольку проблема носит системный характер, самым надежным и правильным способом будет переход на исправленный релиз платформы. Разберем, какие версии являются стабильными в этом отношении:

  1. Если вы используете ветку 8.3.18, необходимо обновиться до версии 8.3.18.1289 или выше.
  2. Если есть возможность перехода на более современные ветки, проблема полностью устранена в релизах 8.3.19.1150, 8.3.20.1549 и всех последующих (8.3.21, 8.3.22 и т.д.).

После обновления платформы рекомендуется выполнить следующие действия:

Способ 2. Программная установка параметров вложенной схемы

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

Разберем, как это реализовать в модуле объекта отчета. Нам потребуется обработчик события ПриКомпоновкеРезультата. Рассмотрим пример кода:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	// Отключаем стандартную обработку, чтобы управлять процессом вручную
	СтандартнаяОбработка = Ложь;
	
	// Получаем настройки отчета
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	// Создаем макет компоновки
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	// Инициализируем процессор компоновки
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	// Выводим результат в табличный документ
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Важный нюанс: при программной инициализации ПроцессорКомпоновкиДанных с установленным флагом Истина (возможность использования внешних функций), платформа иногда более корректно обрабатывает вложенные наборы данных. Однако в самых тяжелых случаях может потребоваться обращение к коллекции Настройки.ПараметрыДанных и явная передача значений в структуру вложенного отчета через обход элементов макета.

Способ 3. Изменение архитектуры схемы (Отказ от вложенности)

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

Посмотрим на последовательность действий:

  1. Перенесите текст запроса из вложенной схемы во второй набор данных основной схемы.
  2. На закладке «Связи наборов данных» настройте соединение между первым и вторым набором по ключевым полям.
  3. Параметры, которые ранее передавались во вложенную схему, теперь будут использоваться непосредственно в условиях запроса нового набора данных или в параметрах всей схемы.

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

Дополнительные рекомендации по диагностике

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

  1. Выгрузите схему компоновки в XML-файл.
  2. Откройте файл текстовым редактором и найдите узел <nestedSchema>. Проверьте, заполнены ли в нем связи <parameterLink>. Если они пусты, значит, платформа все еще некорректно сохраняет данные.
  3. Попробуйте временно сбросить режим совместимости конфигурации до версии 8.3.14. В ряде случаев это заставляет платформу использовать старые алгоритмы сериализации, в которых данный баг отсутствовал. Однако помните, что изменение режима совместимости — это серьезный шаг, требующий полного тестирования всей системы.

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

← На главную