Мы сталкиваемся с распространенной и довольно неприятной ситуацией в работе с 1С:ERP, когда при открытии отчетов из общей панели или через механизм "Все функции" перестают корректно передаваться параметры, в частности, свойство ПараметрКоманды оказывается со значением Неопределено. Это приводит к некорректному формированию отчетов, так как отборы по умолчанию устанавливаются с пустыми значениями.
Давайте подробно разберем эту проблему и выясним, почему она возникает, а также рассмотрим возможные пути ее решения.
Представим типовую ситуацию: мы работаем с конфигурацией 1С:ERP Управление предприятием 2 (например, версии 2.5.22.83) на платформе 1С:Предприятие 8.3 (например, версии 8.3.27.1644 или 8.3.27.1719). При открытии отчетов, например, "Ведомость расчетов по финансовым инструментам", мы наблюдаем следующее поведение:
Параметры, передаваемой в форму отчета, свойство ПараметрКоманды содержит корректную ссылку на этот объект. Отчет формируется правильно, с отбором по выбранному договору.ПараметрКоманды в переменной Параметры хоть и существует (то есть Параметры.Свойство("ПараметрКоманды") возвращает Истина), но его значение равно Неопределено.Это приводит к тому, что типовой код, который мы можем увидеть в модулях формы отчета, добавляет отбор с пустым значением. Рассмотрим пример такого кода:
Если Параметры.Свойство("ПараметрКоманды") Тогда
ЭтаФорма.ФормаПараметры.Отбор.Вставить("ПланПроизводства", Параметры.ПараметрКоманды);
// ... другой код инициализации отчета
КонецЕсли;
В этом примере, если Параметры.ПараметрКоманды будет Неопределено, отбор по полю "ПланПроизводства" будет установлен с пустым значением, что, скорее всего, не соответствует нашим ожиданиям и может привести к выводу некорректных данных или к ошибкам выполнения запроса.
Мы тщательно проанализировали типовой код конфигурации и убедились, что в нем нет явной проверки на заполненность значения Параметры.ПараметрКоманды после проверки его наличия. Ранее этот механизм работал корректно, и даже при сравнении кода с предыдущими версиями конфигурации мы не обнаружили существенных изменений, которые могли бы вызвать такое поведение.
Наше расследование и информация из сообщества 1С указывают на то, что основной причиной этой проблемы являются нестабильные версии платформы 1С:Предприятие 8.3.27, в частности, версии 8.3.27.1644 и 8.3.27.1719. Многие пользователи и эксперты отмечают, что релизы платформы выше 8.3.27.1606 содержат ряд недоработок и багов, которые могут проявляться по-разному, включая некорректную передачу параметров при открытии форм и отчетов.
Рассмотрим подробнее известные проблемы этих версий платформы:
ПараметрКоманды, когда команда открытия отчета инициируется из общих списков или глобального интерфейса, в отличие от контекстного вызова из формы объекта.Важно отметить, что сама конфигурация 1С:ERP 2.5.22.83, хотя и содержит обновления стандартных подсистем, не имеет прямых изменений, которые бы явно вызывали описанную проблему с ПараметрКоманды. Это еще раз подтверждает, что источник проблемы находится на уровне платформы.
Учитывая выявленные причины, наиболее эффективным и рекомендуемым решением является откат или переход на более стабильную версию платформы 1С:Предприятие. По опыту многих пользователей, "золотой серединой" в ветке 8.3.27 считается версия 8.3.27.1606. Именно на ней многие проблемы, наблюдаемые в более поздних релизах этой ветки, отсутствуют.
Разберем по шагам, как мы можем реализовать это решение:
ПараметрКоманды теперь передается корректно и отчеты формируются без ошибок. Проверьте также другие ключевые функции системы.Этот подход позволяет устранить корневую причину проблемы, так как мы переходим на версию платформы, в которой, по всей видимости, механизм передачи параметров работает корректно.
Если по каким-либо причинам немедленный откат или переход на другую версию платформы невозможен, мы можем рассмотреть вариант с доработкой кода отчета для более надежной обработки параметра. Это будет временной мерой, которая не устраняет корневую проблему платформы, но позволяет обойти ее на уровне конфигурации.
Мы можем добавить дополнительную проверку на значение Неопределено для ПараметрКоманды. Рассмотрим, как изменить наш типовой пример:
Если Параметры.Свойство("ПараметрКоманды") Тогда
ЗначениеПараметра = Параметры.ПараметрКоманды;
Если ЗначениеПараметра <> Неопределено Тогда
ЭтаФорма.ФормаПараметры.Отбор.Вставить("ПланПроизводства", ЗначениеПараметра);
// ... другой код инициализации отчета
Иначе
// Обработка ситуации, когда ПараметрКоманды Неопределено
// Например, можно установить отбор по умолчанию или вывести сообщение
// ЭтаФорма.ФормаПараметры.Отбор.Удалить("ПланПроизводства"); // Удалить ошибочный отбор
// Сообщить("Параметр команды не передан. Отчет будет сформирован без отбора по плану производства.");
КонецЕсли;
КонецЕсли;
В этом примере мы сначала проверяем наличие свойства ПараметрКоманды, а затем, если оно есть, дополнительно проверяем, не равно ли его значение Неопределено. Только в случае, если значение определено, мы используем его для установки отбора. В противном случае мы можем принять решение, как поступить: например, не устанавливать отбор или вывести информационное сообщение пользователю.
Важный момент: Этот подход требует изменения типовой конфигурации, что может усложнить процесс ее обновления в будущем. Поэтому мы рекомендуем рассматривать его исключительно как временное решение до момента, когда станет возможным обновить или откатить платформу до стабильной версии.
В заключение, проблема некорректной передачи ПараметрКоманды при открытии отчетов из интерфейса 1С:ERP, скорее всего, вызвана нестабильностью используемых версий платформы 1С:Предприятие 8.3.27.1644 и 8.3.27.1719. Мы настоятельно рекомендуем рассмотреть возможность перехода на более стабильную версию платформы, такую как 8.3.27.1606, для устранения этой и других потенциальных проблем.