В конфигурации «Управление торговлей», редакция 10.3 при работе с документом Установка скидок номенклатуры на закладке «Получение скидки (Контрагенты)» стандартный механизм подбора рассчитан на выбор конкретных элементов справочника. При попытке выбрать папку (группу контрагентов) пользователи сталкиваются с тем, что система разворачивает иерархию вместо того, чтобы перенести группу в табличную часть.
Проанализируем причинно-следственные связи этой проблемы и рассмотрим практические способы ее решения.
Ограничение обусловлено архитектурой типовой конфигурации и платформы 1С:
Контрагент ограничен типом данных, принимающим только элементы (ссылки на конечных контрагентов), а не группы. Попытка записать ссылку на группу вызовет ошибку или несовпадение типов.Заказ покупателя, Реализация товаров и услуг) типовые запросы скидок ищут точное совпадение контрагента (Контрагент = &Контрагент). Если бы в документ записалась группа, скидка не применилась бы автоматически к подчиненным элементам при оформлении документов продаж, так как проверка иерархического вхождения по умолчанию не выполняется.ПараметрВыборГруппИЭлементов в значение ИспользованиеГруппИЭлементов.ГруппыИЭлементы двойной клик по папке разворачивает ее дерево, а не выбирает саму группу.Рекомендуемый подход заключается в следующем: пользователь выбирает группу в форме подбора, но в табличную часть документа переносится не сама папка, а все подчиненные элементы этой группы.
Рассмотрим алгоритм реализации через обработчик события ОбработкаВыбора формы документа или формы подбора:
ЭтоГруппа.Разберем пример кода запроса для получения контрагентов из группы:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка В ИЕРАРХИИ(&Родитель)
| И НЕ Контрагенты.ЭтоГруппа
| И НЕ Контрагенты.ПометкаУдаления";
Запрос.УстановитьПараметр("Родитель", ВыбраннаяГруппа);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТабличнаяЧастьКонтрагенты.Добавить();
НоваяСтрока.Контрагент = Выборка.Контрагент;
КонецЦикла;
Такой подход полностью сохраняет штатную логику расчета скидок и не требует переработки типовых механизмов проведения документов.
Если требуется решить задачу без изменения конфигурации (в режиме «1С:Предприятие»), оптимальным вариантом является создание внешней обработки заполнения табличных частей.
Проанализируем пошаговый порядок действий:
Сервис -> Дополнительные внешние обработки -> Внешние обработки заполнения табличных частей.Контрагенты с типом СправочникСсылка.Контрагенты.Установка скидок номенклатуры.Этот метод позволяет добавлять контрагентов группами без снятия конфигурации с поддержки и избыточных модификаций формы подбора.