В процессе работы с 1С:Управление Торговлей 11.5 (УТ 11.5) пользователи часто сталкиваются с необходимостью управления иерархией справочника Партнеры. Иногда возникает ситуация, когда партнера, ранее перемещенного в подчиненную группу (например, для скрытия помеченных на удаление элементов), требуется вернуть обратно на верхний уровень. Однако стандартные средства, такие как пункт Переместить в группу в контекстном меню или реквизит Родитель в форме элемента, могут быть недоступны. Рассмотрим подробно, почему это происходит и как решить данную задачу.
Основная причина, по которой мы не видим пункт Переместить в группу и не можем интерактивно изменить родителя для элемента справочника Партнеры, кроется в настройке функциональной опции Независимо вести партнеров и контрагентов. Давайте разберем, как эта опция влияет на работу системы:
Понятия "Партнеры" и "Контрагенты":
Влияние функциональной опции:
Если флаг Независимо вести партнеров и контрагентов установлен: Система работает с двумя отдельными справочниками — Партнеры и Контрагенты, которые могут быть связаны в разных соотношениях (один партнер может иметь несколько контрагентов, и наоборот). В этом режиме справочник Партнеры функционирует как полноценный иерархический справочник, и в его контекстном меню (ПКМ) в списке элементов доступна команда Переместить в группу.
Если флаг Независимо вести партнеров и контрагентов снят: Справочники Партнеры и Контрагенты для пользователя фактически объединяются или жестко связываются в соотношении "один к одному". Справочник Контрагенты по своей природе не является иерархическим, и в этом объединенном режиме функционал работы с иерархией для Партнеров (такие как Переместить в группу или реквизит Родитель) становится недоступным в пользовательском интерфейсе. Таким образом, мы не можем интерактивно управлять их подчинением.
Именно отсутствие этой функциональной опции в активном состоянии приводит к тому, что вы не можете найти привычные команды для работы с иерархией партнеров.
Наиболее приближенный к типовому и рекомендуемый способ вернуть партнера на верхний уровень — это временно включить функциональную опцию Независимо вести партнеров и контрагентов. Давайте разберем по шагам, как это сделать:
Переход в раздел настроек:
Активация опции:
Перемещение партнера:
Возврат настройки (по необходимости):
Этот метод является наиболее предпочтительным, так как он использует стандартный функционал конфигурации и не требует внесения изменений в код или структуру метаданных.
Если в вашей организации по каким-либо причинам нежелательно или невозможно временно изменять функциональную опцию Независимо вести партнеров и контрагентов, но при этом требуется постоянный интерактивный доступ к реквизиту Родитель, можно рассмотреть вариант с модификацией формы элемента справочника Партнеры.
Открытие формы элемента в режиме конфигуратора:
Отображение реквизита "Родитель":
Обновление конфигурации базы данных:
Предупреждение: Этот метод является прямым изменением типовой конфигурации. Любые изменения конфигурации требуют квалификации программиста 1С и сопряжены с рисками при дальнейших обновлениях, а также могут потребовать дополнительного сопровождения.
Как мы уже выяснили из исходного обсуждения, один из способов решить проблему, когда стандартный интерфейс не предоставляет нужного функционала, — это использование внешней обработки. Этот метод требует навыков работы с кодом 1С.
Создание внешней обработки:
Пример кода для внешней обработки:
&НаКлиенте
Процедура КомандаПереместитьНаВерхнийУровень(Команда)
// Запрос подтверждения у пользователя
Если Не Вопрос("Вы уверены, что хотите переместить выбранного партнера на верхний уровень?", РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
// Здесь необходимо получить ссылку на нужного партнера.
// В реальной обработке это может быть выбрано пользователем из списка,
// передано параметром или получено другим способом.
// Для примера, представим, что мы передаем GUID партнера.
СтрокаГУИДПартнера = "Ваш_GUID_Партнера_Здесь"; // Например: "a0a0a0a0-b1b1-c2c2-d3d3-e4e4e4e4e4e4"
Если ЗначениеЗаполнено(СтрокаГУИДПартнера) Тогда
Попытка
СсылкаПартнера = Новый УникальныйИдентификатор(СтрокаГУИДПартнера);
Результат = ПереместитьПартнераНаВерхнийУровеньНаСервере(СсылкаПартнера);
Если Результат.Успешно Тогда
Сообщить("Партнер успешно перемещен на верхний уровень: " + Результат.НаименованиеПартнера);
Иначе
Сообщить("Ошибка при перемещении партнера: " + Результат.ОписаниеОшибки);
КонецЕсли;
Исключение
Сообщить("Некорректный GUID партнера или ошибка при получении ссылки: " + ОписаниеОшибки());
КонецИсключения;
Иначе
Сообщить("GUID партнера не указан.");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПереместитьПартнераНаВерхнийУровеньНаСервере(ГУИДПартнера)
Перемещен = Новый Структура("Успешно, ОписаниеОшибки, НаименованиеПартнера", Ложь, "", "");
СсылкаНаОбъект = Справочники.Партнеры.ПолучитьСсылку(ГУИДПартнера);
Если СсылкаНаОбъект.Пустая() Тогда
Перемещен.ОписаниеОшибки = "Партнер с указанным GUID не найден.";
Возврат Перемещен;
КонецЕсли;
Попытка
ОбъектПартнер = СсылкаНаОбъект.ПолучитьОбъект();
Если ОбъектПартнер = Неопределено Тогда
Перемещен.ОписаниеОшибки = "Не удалось получить объект партнера.";
Возврат Перемещен;
КонецЕсли;
Перемещен.НаименованиеПартнера = ОбъектПартнер.Наименование;
ОбъектПартнер.Родитель = Справочники.Партнеры.ПустаяСсылка(); // Устанавливаем пустого родителя
ОбъектПартнер.Записать();
Перемещен.Успешно = Истина;
Исключение
Перемещен.ОписаниеОшибки = "Ошибка при записи партнера: " + ОписаниеОшибки();
КонецПопытки;
Возврат Перемещен;
КонецФункции
Подготовка к использованию:
Важно: Вся информация об иерархии партнеров хранится в регистре сведений ИерархияПартнеров. При изменении реквизита Родитель система автоматически обновляет этот регистр. Прямое редактирование регистра пользователем не предусмотрено, но для программного вмешательства это может быть отправной точкой.
Этот метод также требует доступа к режиму Конфигуратор или наличия прав на запуск внешних обработок с привилегированным режимом.
Изначально задача была в том, чтобы помеченные на удаление партнеры не висели в общем списке. Создание отдельного элемента яя_Удаленные и перемещение туда партнеров является обходным путем. Более типовым и удобным способом для таких целей является использование стандартных механизмов отбора и фильтрации:
Отбор по пометке удаления:
Сохранение настройки:
Такой подход позволяет нам поддерживать чистоту списка без создания дополнительных групп и избегать сложностей с возвращением элементов из них, если функционал иерархии ограничен.
Таким образом, проблема возвращения партнера на верхний уровень в 1С:УТ 11, когда отсутствует кнопка Переместить в группу, в большинстве случаев решается временным включением функциональной опции Независимо вести партнеров и контрагентов. Если этот вариант неприемлем, существуют обходные пути через модификацию конфигурации или использование внешних обработок, однако они требуют большей технической экспертизы.