При работе со справочниками в платформе 1С:Предприятие 7.7 пользователи нередко сталкиваются с ситуацией: в многоуровневом справочнике (например, Подразделения) успешно создаются новые папки (группы), однако штатный пункт контекстного или главного меню «Действия – Перенести в другую группу» остается серым и неактивным. Включение режима вывода списка по группам (иерархического просмотра) не решает проблему.
Разберем детально технические причины такого поведения платформы 1С 7.7 и рассмотрим несколько способов исправления ситуации.
В платформе 1С:Предприятие 7.7 доступность команды «Перенести в другую группу» напрямую привязана к составу элементов управления диалога формы списка:
Подразделения часто спроектирована в виде единой таблицы (элемент Список). Если на форме отсутствует специализированный элемент управления «СписокГрупп» (дерево папок), платформа блокирует стандартный пункт переноса, поскольку встроенному механизму некуда позиционировать выбор целевой папки.Рассмотрим штатный способ решения проблемы, который делает интерфейс справочника удобным и включает стандартную функциональность платформы.
Разберем процесс настройки по шагам:
Подразделения.После добавления дерева групп пункт «Перенести в другую группу» станет активным. Теперь достаточно выделить элемент в правой таблице, выбрать пункт переноса и указать целевую группу в левой панели либо выполнить перемещение.
Важное замечание: Перемещение элементов по иерархии и изменение структуры справочника Подразделения не нарушает бухгалтерские итоги и проводки. В проводках операции связываются с уникальным внутренним идентификатором элемента, а не с его положением в дереве. Однако это повлияет на детализацию отчетов (например, оборотно-сальдовой ведомости), если в них настроена группировка по иерархии подразделений.
Если вносить изменения в конфигурацию нежелательно (например, конфигурация находится на поддержке или закрыта от изменений), можно воспользоваться универсальной обработкой подбора и обработки объектов либо написать простую внешнюю обработку (файл .ert).
Посмотрим на пример кода, с помощью которого можно программно сменить группу (родителя) для элемента:
Процедура ПеренестиЭлемент(ВыбЭлемент, ВыбНоваяГруппа)
Спр = СоздатьОбъект("Справочник.Подразделения");
Если Спр.НайтиЭлемент(ВыбЭлемент) = 1 Тогда
Спр.Родитель = ВыбНоваяГруппа;
Попытка
Спр.Записать();
Сообщить("Элемент " + Спр.Наименование + " успешно перенесен в группу " + ВыбНоваяГруппа.Наименование);
Исключение
Предупреждение("Не удалось записать элемент: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Проанализируем работу этого алгоритма: при установке атрибута Родитель платформа автоматически проверяет допустимость перемещения (например, уровень вложенности, не превышающий установленный в метаданных лимит, и отсутствие циклических ссылок). Если в справочнике включен контроль уникальности кодов «В пределах подчинения», перед записью необходимо убедиться, что в целевой папке нет элемента с совпадающим кодом.
Если дерево групп на форме отсутствует, но перенести элемент требуется без изменения конфигурации, выполним следующие действия:
При организации многоуровневой структуры в 1С 7.7 рекомендуется придерживаться правила: на одном и том же уровне иерархии желательно хранить либо только группы, либо только элементы. Смешивание папок и элементов на одном уровне усложняет визуальный поиск и может приводить к ошибкам пользователей при выборе подразделений в первичные документы.