Почему после обновления 1С во внешнем отчете стало невозможно выбрать группы номенклатуры и как это исправить?

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

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

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

Выясняем причину: что изменилось в платформе 1С

Для того чтобы понять суть проблемы, нам необходимо заглянуть во внутренние механизмы работы платформы «1С:Предприятие 8.3». У элементов управляемой формы типа «Поле ввода», которые связаны со ссылочными данными (например, со справочником Номенклатура), существует важное свойство — ВыборГруппИЭлементов (в англоязычной версии конфигуратора — ChoiceFoldersAndItems). Это свойство определяет, что именно пользователь может выбрать из открывшейся формы выбора справочника.

Оно может принимать следующие значения:

  1. Группы и элементы — разрешен выбор как конечных элементов, так и папок справочника.
  2. Группы — разрешен выбор только папок (например, для построения иерархических отчетов).
  3. Элементы — разрешен выбор только конечных элементов (непосредственно товаров, услуг и т.д.).
  4. Авто — режим выбора определяется платформой автоматически на основе контекста и режима совместимости конфигурации.

Именно в значении Авто и кроется разгадка проблемы. Проанализируем, как менялась логика работы платформы в зависимости от режима совместимости конфигурации:

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

Как это работает теперь: Начиная с версии платформы 8.3.14 и при повышении режима совместимости конфигурации до актуальных значений, разработчики фирмы «1С» изменили поведение по умолчанию. Теперь значение Авто для большинства стандартных полей ввода жестко трактуется как Элементы. Это сделано для повышения строгости ввода данных, так как в большинстве бизнес-процессов проведение документов или выбор аналитики требует указания конкретного элемента, а не всей группы.

Когда вы обновили типовую конфигурацию «Бухгалтерия предприятия» до последнего релиза, разработчики закономерно подняли режим совместимости конфигурации в свойствах метаданных. Внешний отчет при этом остался прежним (его файл .erf никто не редактировал), однако платформа начала применять к его элементам новые правила интерпретации значения Авто. В результате поле ввода списка значений заблокировало выбор групп.

Способ 1. Интерактивное исправление в конфигураторе (рекомендуемый метод)

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

Разберем этот процесс подробно по шагам:

  1. Запустите систему «1С:Предприятие» в режиме Конфигуратора.
  2. Откройте файл вашего внешнего отчета через меню Файл — Открыть... (выберите ваш файл с расширением .erf).
  3. В открывшемся окне дерева метаданных внешнего отчета найдите раздел Формы и откройте основную форму отчета (двойным кликом мыши).
  4. На панели элементов формы (обычно она располагается в левой верхней части редактора формы) найдите то самое поле ввода, в котором пользователи заполняют список номенклатуры.
  5. Выделите это поле ввода и откройте палитру Свойств (нажав клавишу F4 или выбрав соответствующий пункт в контекстном меню).
  6. В палитре свойств прокрутите список до раздела Использование.
  7. Найдите свойство ВыборГруппИЭлементов. Вы увидите, что там по умолчанию установлено значение Авто.
  8. Измените это значение на Группы и элементы.
  9. Сохраните изменения во внешнем отчете (Ctrl + S).

Теперь запустите отчет в пользовательском режиме «1С:Предприятие». Проверим результат: при заполнении списка значений система снова позволяет беспрепятственно выбирать как отдельные позиции номенклатуры, так и целые папки (группы).

Способ 2. Программное управление выбором групп и элементов

Бывают ситуации, когда поле ввода на форме создается динамически программным путем или когда к форме отчета нет прямого визуального доступа (например, она генерируется автоматически платформой на основе схемы компоновки данных — СКД). В таких случаях нам поможет программное вмешательство с использованием встроенного языка «1С».

Рассмотрим пример, когда нам нужно явно переопределить поведение формы выбора справочника Номенклатура при начале выбора в поле ввода. Для этого мы перехватим стандартное событие начала выбора.

Для реализации этого метода выполните следующие действия в модуле управляемой формы отчета:

Во-первых, назначьте обработчик события НачалоВыбора для вашего поля ввода на форме. Во-вторых, напишите в модуле формы следующий код:


&НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    // Отменяем стандартное открытие формы выбора платформой
    СтандартнаяОбработка = Ложь;
    
    // Формируем структуру параметров для открываемой формы выбора
    ПараметрыВыбора = Новый Структура;
    ПараметрыВыбора.Вставить("РежимВыбора", Истина);
    
    // Явно указываем платформе, что нам разрешен выбор и групп, и элементов
    ПараметрыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы);
    
    // Открываем форму выбора справочника Номенклатура с нашими параметрами
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыВыбора, Элемент);
    
КонецПроцедуры

Проанализируем подробнее, что происходит в данном фрагменте кода. Мы устанавливаем параметр СтандартнаяОбработка в значение Ложь, чтобы предотвратить стандартный механизм платформы, который открыл бы форму выбора с ограничениями по умолчанию. Затем мы создаем структуру ПараметрыВыбора, куда помещаем системный параметр ВыборГруппИЭлементов со значением из системного перечисления ИспользованиеГруппИЭлементов.ГруппыИЭлементы. Метод ОткрытьФорму запускает форму выбора справочника, передавая ей созданную структуру параметров.

Способ 3. Настройка параметров выбора через СКД (без изменения формы)

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

Выясним, как решить проблему выбора групп в параметрах СКД непосредственно в настройках схемы компоновки данных:

  1. Откройте внешний отчет в конфигураторе.
  2. Откройте основную Схему компоновки данных.
  3. Перейдите на вкладку Параметры.
  4. Найдите параметр, отвечающий за фильтрацию по номенклатуре (например, Номенклатура или СписокНоменклатуры).
  5. В таблице параметров найдите колонку Параметры выбора.
  6. Нажмите на кнопку выбора (три точки) в этой колонке.
  7. Добавьте новый параметр выбора: имя параметра — ВыборГруппИЭлементов, значение — выберите тип ИспользованиеГруппИЭлементов и установите его в значение Группы и элементы.
  8. Сохраните отчет.

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

Резюме и рекомендации

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

При разработке новых внешних отчетов и обработок мы рекомендуем всегда явно указывать свойства выбора групп и элементов для ссылочных полей, избегая значения Авто, если бизнес-логика вашего отчета подразумевает работу с иерархией справочников. Это убережет ваши разработки от сбоев при последующих обновлениях программных продуктов линейки «1С:Предприятие».

← На главную