Как вернуть партнера на верхний уровень в 1С:УТ 11, если кнопка "Переместить в группу" отсутствует?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с 1С:Управление Торговлей 11.5 (УТ 11.5) пользователи часто сталкиваются с необходимостью управления иерархией справочника Партнеры. Иногда возникает ситуация, когда партнера, ранее перемещенного в подчиненную группу (например, для скрытия помеченных на удаление элементов), требуется вернуть обратно на верхний уровень. Однако стандартные средства, такие как пункт Переместить в группу в контекстном меню или реквизит Родитель в форме элемента, могут быть недоступны. Рассмотрим подробно, почему это происходит и как решить данную задачу.

Выясняем причину: Влияние функциональной опции "Независимо вести партнеров и контрагентов"

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

  1. Понятия "Партнеры" и "Контрагенты":

    • Справочник Партнеры в УТ 11 — это управленческий объект. Он позволяет нам агрегировать всех участников наших бизнес-взаимодействий (клиентов, поставщиков, конкурентов) и, что важно для нашей задачи, имеет возможность строить иерархию (группировать партнеров, например, по холдингам или сетям).
    • Справочник Контрагенты, в свою очередь, предназначен для регламентированного учета. В нем хранятся юридически значимые данные: ИНН, КПП, банковские реквизиты, юридические адреса и прочая информация, необходимая для оформления документов и ведения бухгалтерского и налогового учета.
  2. Влияние функциональной опции:

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

    • Если флаг Независимо вести партнеров и контрагентов снят: Справочники Партнеры и Контрагенты для пользователя фактически объединяются или жестко связываются в соотношении "один к одному". Справочник Контрагенты по своей природе не является иерархическим, и в этом объединенном режиме функционал работы с иерархией для Партнеров (такие как Переместить в группу или реквизит Родитель) становится недоступным в пользовательском интерфейсе. Таким образом, мы не можем интерактивно управлять их подчинением.

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

Решение 1: Временное включение функциональной опции (Типовой способ)

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

  1. Переход в раздел настроек:

    • Перейдите в раздел НСИ и администрирование.
    • Далее выберите Настройка НСИ и разделов.
    • Откройте подраздел CRM и маркетинг.
  2. Активация опции:

    • Найдите пункт Независимо вести партнеров и контрагентов и установите напротив него флажок.
    • Система может запросить подтверждение или выполнить некоторые фоновые операции. Дождитесь их завершения.
  3. Перемещение партнера:

    • После активации опции откройте справочник Партнеры.
    • Найдите партнера, которого необходимо вернуть на верхний уровень.
    • Выделите его и нажмите правую кнопку мыши. В контекстном меню теперь должен появиться пункт Переместить в группу.
    • Выберите этот пункт. Откроется окно выбора группы.
    • В этом окне выберите самый верхний элемент — обычно это корневая группа справочника, которая может называться Партнеры или просто не иметь имени. Это и будет верхний уровень.
    • Подтвердите перемещение.
  4. Возврат настройки (по необходимости):

    • Если в вашей организации не требуется вести партнеров и контрагентов раздельно, вы можете вернуться в раздел НСИ и администрирование -> Настройка НСИ и разделов -> CRM и маркетинг и снять флажок Независимо вести партнеров и контрагентов.
    • Важно учитывать, что изменение этой опции влияет на логику работы с данными, поэтому если она была выключена по какой-либо причине, убедитесь, что ее временное включение не нарушит других бизнес-процессов.

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

Решение 2: Модификация конфигурации (Доработка для постоянного доступа)

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

  1. Открытие формы элемента в режиме конфигуратора:

    • Специалист или программист 1С должен открыть конфигурацию в режиме Конфигуратор.
    • Найти справочник Партнеры в дереве метаданных.
    • Открыть форму элемента этого справочника.
  2. Отображение реквизита "Родитель":

    • В форме элемента, скорее всего, реквизит Родитель существует, но его видимость установлена в Ложь или он управляется через программный код, который скрывает его при определенной настройке функциональных опций.
    • Вам необходимо сделать этот реквизит видимым. Для этого нужно найти элемент формы, связанный с реквизитом Родитель, и установить для него свойство Видимость в Истина или скорректировать условия его программного управления.
  3. Обновление конфигурации базы данных:

    • После внесения изменений в форму необходимо обновить конфигурацию базы данных.

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

Решение 3: Использование внешней обработки (Программный подход)

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

  1. Создание внешней обработки:

    • Специалист или программист может создать внешнюю обработку, которая будет иметь доступ к объекту Справочник.Партнеры.
    • В этой обработке необходимо будет получить ссылку на нужного партнера и программно очистить его реквизит Родитель.
  2. Пример кода для внешней обработки:

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

    • В такой обработке мы сначала получаем объект партнера по его ссылке (или другому идентификатору).
    • Затем программно присваиваем реквизиту Родитель значение Справочники.Партнеры.ПустаяСсылка().
    • После этого записываем объект.

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

Этот метод также требует доступа к режиму Конфигуратор или наличия прав на запуск внешних обработок с привилегированным режимом.

Дополнительный совет: Как правильно скрывать помеченные на удаление партнеры

Изначально задача была в том, чтобы помеченные на удаление партнеры не висели в общем списке. Создание отдельного элемента яя_Удаленные и перемещение туда партнеров является обходным путем. Более типовым и удобным способом для таких целей является использование стандартных механизмов отбора и фильтрации:

  1. Отбор по пометке удаления:

    • Откройте список справочника Партнеры.
    • Нажмите на кнопку Еще (или Все действия), затем выберите Настроить список....
    • В открывшемся окне перейдите на вкладку Отбор.
    • Добавьте новый элемент отбора. В качестве поля выберите ПометкаУдаления.
    • В качестве вида сравнения выберите Равно.
    • В качестве значения установите Ложь.
    • Примените настройку. Теперь в списке будут отображаться только те партнеры, которые не помечены на удаление.
  2. Сохранение настройки:

    • После настройки списка вы можете сохранить ее как пользовательскую настройку, чтобы при каждом открытии справочника отбор применялся автоматически.

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

Таким образом, проблема возвращения партнера на верхний уровень в 1С:УТ 11, когда отсутствует кнопка Переместить в группу, в большинстве случаев решается временным включением функциональной опции Независимо вести партнеров и контрагентов. Если этот вариант неприемлем, существуют обходные пути через модификацию конфигурации или использование внешних обработок, однако они требуют большей технической экспертизы.

← На главную