Как реализовать выбор группы контрагентов при подборе в документе «Установка скидок номенклатуры» в УТ 10.3?

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

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

Проанализируем причинно-следственные связи этой проблемы и рассмотрим практические способы ее решения.

Выясним причину технического ограничения

Ограничение обусловлено архитектурой типовой конфигурации и платформы 1С:

  1. Тип данных реквизита: В табличной части документа реквизит Контрагент ограничен типом данных, принимающим только элементы (ссылки на конечных контрагентов), а не группы. Попытка записать ссылку на группу вызовет ошибку или несовпадение типов.
  2. Алгоритмы ценообразования: В документах продажи (Заказ покупателя, Реализация товаров и услуг) типовые запросы скидок ищут точное совпадение контрагента (Контрагент = &Контрагент). Если бы в документ записалась группа, скидка не применилась бы автоматически к подчиненным элементам при оформлении документов продаж, так как проверка иерархического вхождения по умолчанию не выполняется.
  3. Поведение формы подбора: Даже при установке свойства ПараметрВыборГруппИЭлементов в значение ИспользованиеГруппИЭлементов.ГруппыИЭлементы двойной клик по папке разворачивает ее дерево, а не выбирает саму группу.

Способ 1. Разворачивание выбранной группы в элементы (программная доработка)

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

Рассмотрим алгоритм реализации через обработчик события ОбработкаВыбора формы документа или формы подбора:

  1. Перехватываем выбранное значение из формы подбора.
  2. Проверяем, является ли выбранный объект группой с помощью свойства ЭтоГруппа.
  3. Если выбрана группа, выполняем запрос для поиска всех элементов, входящих в нее.
  4. Заполняем табличную часть полученным списком конечных контрагентов.

Разберем пример кода запроса для получения контрагентов из группы:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	Контрагенты.Ссылка В ИЕРАРХИИ(&Родитель)
    |	И НЕ Контрагенты.ЭтоГруппа
    |	И НЕ Контрагенты.ПометкаУдаления";

Запрос.УстановитьПараметр("Родитель", ВыбраннаяГруппа);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    НоваяСтрока = ТабличнаяЧастьКонтрагенты.Добавить();
    НоваяСтрока.Контрагент = Выборка.Контрагент;
КонецЦикла;

Такой подход полностью сохраняет штатную логику расчета скидок и не требует переработки типовых механизмов проведения документов.

Способ 2. Подключение внешней обработки заполнения табличной части

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

Проанализируем пошаговый порядок действий:

  1. Создаем внешнюю обработку и подключаем ее к конфигурации через стандартное меню Сервис -> Дополнительные внешние обработки -> Внешние обработки заполнения табличных частей.
  2. В форме внешней обработки добавляем поле ввода для выбора группы справочника Контрагенты с типом СправочникСсылка.Контрагенты.
  3. По кнопке «Заполнить» выгружаем подчиненные элементы выбранной группы в табличную часть документа Установка скидок номенклатуры.

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

← На главную