Каждый разработчик и администратор систем на платформе «1С:Предприятие» рано или поздно сталкивается с ситуацией, когда после очередного планового обновления конфигурации (например, «1С:Бухгалтерия предприятия, редакция 3.0») внешние отчеты или обработки, которые годами работали без нареканий, внезапно начинают вести себя некорректно. Одной из типичных проблем является внезапная невозможность выбора групп (папок) справочников в полях ввода или в списках значений на форме отчета. Вместо привычного добавления папки система блокирует действие и выдает предупреждение: «Выберите элемент, а не группу».
В этой статье мы подробно разберем, почему возникает эта ошибка, как изменения в платформе влияют на работу внешних отчетов и какими способами можно быстро вернуть прежнюю функциональность вашим отчетам и обработкам.
Для того чтобы понять суть проблемы, нам необходимо заглянуть во внутренние механизмы работы платформы «1С:Предприятие 8.3». У элементов управляемой формы типа «Поле ввода», которые связаны со ссылочными данными (например, со справочником Номенклатура), существует важное свойство — ВыборГруппИЭлементов (в англоязычной версии конфигуратора — ChoiceFoldersAndItems). Это свойство определяет, что именно пользователь может выбрать из открывшейся формы выбора справочника.
Оно может принимать следующие значения:
Именно в значении Авто и кроется разгадка проблемы. Проанализируем, как менялась логика работы платформы в зависимости от режима совместимости конфигурации:
Как это работало раньше: В старых версиях платформы и в конфигурациях с включенным устаревшим режимом совместимости (до версии 8.3.14) значение Авто для полей ввода со списком значений или ссылочным типом интерпретировалось платформой как Группы и элементы. Пользователи могли свободно выбирать папки номенклатуры, и это считалось стандартным поведением системы.
Как это работает теперь: Начиная с версии платформы 8.3.14 и при повышении режима совместимости конфигурации до актуальных значений, разработчики фирмы «1С» изменили поведение по умолчанию. Теперь значение Авто для большинства стандартных полей ввода жестко трактуется как Элементы. Это сделано для повышения строгости ввода данных, так как в большинстве бизнес-процессов проведение документов или выбор аналитики требует указания конкретного элемента, а не всей группы.
Когда вы обновили типовую конфигурацию «Бухгалтерия предприятия» до последнего релиза, разработчики закономерно подняли режим совместимости конфигурации в свойствах метаданных. Внешний отчет при этом остался прежним (его файл .erf никто не редактировал), однако платформа начала применять к его элементам новые правила интерпретации значения Авто. В результате поле ввода списка значений заблокировало выбор групп.
Если у вас есть доступ к конфигуратору и исходному файлу внешнего отчета, этот способ является самым быстрым и надежным. Нам не потребуется писать сложный код — достаточно изменить одно свойство в визуальном редакторе форм.
Разберем этот процесс подробно по шагам:
Файл — Открыть... (выберите ваш файл с расширением .erf).Формы и откройте основную форму отчета (двойным кликом мыши).F4 или выбрав соответствующий пункт в контекстном меню).Использование.ВыборГруппИЭлементов. Вы увидите, что там по умолчанию установлено значение Авто.Группы и элементы.Ctrl + S).Теперь запустите отчет в пользовательском режиме «1С:Предприятие». Проверим результат: при заполнении списка значений система снова позволяет беспрепятственно выбирать как отдельные позиции номенклатуры, так и целые папки (группы).
Бывают ситуации, когда поле ввода на форме создается динамически программным путем или когда к форме отчета нет прямого визуального доступа (например, она генерируется автоматически платформой на основе схемы компоновки данных — СКД). В таких случаях нам поможет программное вмешательство с использованием встроенного языка «1С».
Рассмотрим пример, когда нам нужно явно переопределить поведение формы выбора справочника Номенклатура при начале выбора в поле ввода. Для этого мы перехватим стандартное событие начала выбора.
Для реализации этого метода выполните следующие действия в модуле управляемой формы отчета:
Во-первых, назначьте обработчик события НачалоВыбора для вашего поля ввода на форме. Во-вторых, напишите в модуле формы следующий код:
&НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Отменяем стандартное открытие формы выбора платформой
СтандартнаяОбработка = Ложь;
// Формируем структуру параметров для открываемой формы выбора
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("РежимВыбора", Истина);
// Явно указываем платформе, что нам разрешен выбор и групп, и элементов
ПараметрыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы);
// Открываем форму выбора справочника Номенклатура с нашими параметрами
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыВыбора, Элемент);
КонецПроцедуры
Проанализируем подробнее, что происходит в данном фрагменте кода. Мы устанавливаем параметр СтандартнаяОбработка в значение Ложь, чтобы предотвратить стандартный механизм платформы, который открыл бы форму выбора с ограничениями по умолчанию. Затем мы создаем структуру ПараметрыВыбора, куда помещаем системный параметр ВыборГруппИЭлементов со значением из системного перечисления ИспользованиеГруппИЭлементов.ГруппыИЭлементы. Метод ОткрытьФорму запускает форму выбора справочника, передавая ей созданную структуру параметров.
Часто внешние отчеты строятся исключительно на базе Схемы компоновки данных (СКД), и у них вообще нет собственной управляемой формы (используется стандартная автогенерируемая форма отчета). В этом случае изменять свойства элементов интерактивно на форме или писать код в модуле формы невозможно, так как формы физически нет в проекте внешнего отчета.
Выясним, как решить проблему выбора групп в параметрах СКД непосредственно в настройках схемы компоновки данных:
Параметры.Номенклатура или СписокНоменклатуры).Параметры выбора.ВыборГруппИЭлементов, значение — выберите тип ИспользованиеГруппИЭлементов и установите его в значение Группы и элементы.Этот метод изящен тем, что он не требует создания кастомных форм и написания программного кода на встроенном языке. Платформа при автоматической генерации формы отчета сама считает эти настройки из схемы компоновки данных и применит их к сгенерированному полю ввода списка значений.
Подводя итоги нашего анализа, отметим, что подобные «неожиданные» изменения в поведении старых отчетов после обновлений — это естественный процесс эволюции платформы 1С. Повышение режима совместимости конфигураций направлено на улучшение производительности, безопасности и стандартизации интерфейса, однако оно требует своевременного аудита и доработки внешних модулей.
При разработке новых внешних отчетов и обработок мы рекомендуем всегда явно указывать свойства выбора групп и элементов для ссылочных полей, избегая значения Авто, если бизнес-логика вашего отчета подразумевает работу с иерархией справочников. Это убережет ваши разработки от сбоев при последующих обновлениях программных продуктов линейки «1С:Предприятие».