Альтернативная иерархия справочника

30.08.22

Разработка - Механизмы типовых конфигураций

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Альтернативная иерархия справочника БСП, БП 3.0:
.erf 6,59Kb
1
1
1 SM
Скачать Купить за 1 850 руб.
Альтернативная иерархия справочника:
.cf 83,86Kb
1
1
1 SM
Скачать Купить за 1 850 руб.

Способ 1

Подходит для типовых конфигураций последних версий, в которых используется БСП (Библиотека стандартных подсистем). Преимущество способа в том, что не требуется доработка конфигурации. Для решения задачи используется подсистема "Свойства" (Дополнительные реквизиты и сведения). Продемонстрирую на примере конфигурации Бухгалтерия предприятия, редакция 3.0 (3.0.115.15). Использовалась версия платформы 1С:Предприятие 8.3 (8.3.17.1851).

 
 К примеру, справочник "Контрагенты" имеет следующую структуру:

 

 
 Отчет, в который выводится этот справочник с иерархией, будет иметь такую-же структуру:

 

 
 А нам нужна другая иерархия в отчете, к примеру такая:

 

Самый простой способ - изменить иерархию самого справочника. Но это не всегда возможно. Поэтому рассмотрим другой способ.

Для реализации необходимо добавить для справочника "Контрагенты" дополнительный реквизит (или дополнительное свойство) с типом значения "Дополнительное значение (иерархия)". В качестве значений создать элементы нашей "Альтернативной" иерархии, и затем присвоить эти значения нужным элементам справочника контрагенты.

Значения дополнительных реквизитов для объектов хранятся в табличной части самих объектов. Дополнительные свойства хранятся в отдельном регистре. В случае, когда справочник содержит большое количество элементов, наверное, будет лучше использовать свойство, чтобы минимизировать нагрузку на базу. С другой стороны, реквизит указывается прямо в карточке контрагента, что на мой взгляд удобнее для пользователя.

Далее будем использовать дополнительный реквизит.

Затем в запросе, на основании которого строится отчет, нужно помимо ссылки на элемент справочника "Контрагенты" выбрать поле со значением дополнительного реквизита, отвечающего за альтернативную иерархию. После чего, это поле нужно использовать в качестве группировки верхнего уровня, в настройках СКД.

 
 Пример создания "альтернативной" иерархии:
 
 Пример запроса к базе данных и настройки СКД:

 

Нужно иметь в виду, что в выборку попадут только те контрагенты, у которых дополнительный реквизит заполнен. Что делать с остальными контрагентами? Возможны 2 варианта.

1. Заполнить значения для всех контрагентов, установить признак "Заполнять обязательно" в форме редактирования дополнительного реквизита. Тогда при добавлении нового контрагента (по крайне мере) в пользовательском режиме система будет контролировать заполнение реквизита.

2. Дописать запрос таким образом, чтобы контрагенты  с незаполненным значением реквизита попадали в одну из "Групп" альтернативной иерархии.

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

 

Как связать получившуюся таблицу альтернативной иерархии с таблицей регистра в котором содержаться показатели для вывода в отчет? Очень просто: левым или внутренним соединением. Левым - в случае если нужно вывести всех контрагентов, даже без показателей. Внутренним - если в отчет должны попасть только те контрагенты, по которым есть показатели.

 
 Пример запроса, в котором происходит соединение альтернативной иерархии с таблицей регистра

 

 
 Дополнительная информация:

Пример отчета прилагается.

 

Способ 2

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

Решение: создаем новый справочник, в котором будет описана иерархия, назовём его например "АльтернативнаяИерархия". 

 
 Пример структуры нового справочника:

В справочник "Контрагенты" добавляем новый реквизит "АльтернативнаяИерархия" с типом значения "СправочникСсылка.АльтернативнаяИерархия". В качестве значений реквизита будут выступать ЭЛЕМЕНТЫ нижних уровней справочника "АльтернативнаяИерархия". 

Запрос в таком решении может быть довольно простым. Достаточно выбрать подходящую виртуальную таблицу регистра, выбрать поле контрагент, новый реквизит контрагента "АльтернативнаяИерархия" и необходимые ресурсы.

 
 Пример текста запроса:

В настройках отчета первой группировкой будет наш новый реквизит "АльтернативнаяИерархия", второй - контрагент. Ну и про ресурсы нужно не забыть.

 
 Настройки отчета и выходная форма:

Пример отчета в составе простой конфигурации прилагается.

 

иерархия справочник Дополнительное значение реквизит НаборыДополнительныхРеквизитовИСведений ДополнительныеРеквизитыИСведения ЗначенияСвойствОбъектовИерархия ДополнительныеРеквизиты Контрагенты

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    914    Vidz    0    

6

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    724    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    3116    Serg2000mr    29    

100

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    799    tango    5    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    681    tango    5    

4

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    988    tango    0    

2

Ценообразование, анализ цен Механизмы типовых конфигураций Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    996    tango    12    

2
Отзывы
1. MonteCriZto 114 14.12.23 08:20 Сейчас в теме
Делал раньше чуть проще
Добавлял в запрос поле текстового типа - "Тип отчета"
в самом запросе, его заполнял в зависимости от пакета..
Например: "1_Управленческие"
Однако, поступила заявка на отчет, с расшифровкой до Регистратора) и мой метод, начал давать сбои ).
Воспользовался вашим методом, все отлично работает - Спасибо!
з.ы.
Не совсем понял зачем вы по ГДЕ.. фильтруете
Я собрал все необходимые данные, выкинул в отдельный пакет (ГотОтчБезИерархии)
Затем левым соединением добавил в гот. отчет поля иерархии

ВЫБРАТЬ
	ГотОтчБезИерархии.Подразделения КАК Подразделения,
	ГотОтчБезИерархии.СтатьиЗатрат КАК СтатьиЗатрат,
	ГотОтчБезИерархии.Сумма КАК Сумма,
	ГотОтчБезИерархии.Регистратор КАК Регистратор,
	ПодразделенияОрганизацийДополнительныеРеквизиты.Значение КАК АльтернативнаяИерархия
ИЗ
	ГотОтчБезИерархии КАК ГотОтчБезИерархии
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
		ПО ГотОтчБезИерархии.Подразделения = ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка
			И (ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство.Наименование = "АльтернативнаяИерархия")
Показать
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. MonteCriZto 114 14.12.23 08:20 Сейчас в теме
Делал раньше чуть проще
Добавлял в запрос поле текстового типа - "Тип отчета"
в самом запросе, его заполнял в зависимости от пакета..
Например: "1_Управленческие"
Однако, поступила заявка на отчет, с расшифровкой до Регистратора) и мой метод, начал давать сбои ).
Воспользовался вашим методом, все отлично работает - Спасибо!
з.ы.
Не совсем понял зачем вы по ГДЕ.. фильтруете
Я собрал все необходимые данные, выкинул в отдельный пакет (ГотОтчБезИерархии)
Затем левым соединением добавил в гот. отчет поля иерархии

ВЫБРАТЬ
	ГотОтчБезИерархии.Подразделения КАК Подразделения,
	ГотОтчБезИерархии.СтатьиЗатрат КАК СтатьиЗатрат,
	ГотОтчБезИерархии.Сумма КАК Сумма,
	ГотОтчБезИерархии.Регистратор КАК Регистратор,
	ПодразделенияОрганизацийДополнительныеРеквизиты.Значение КАК АльтернативнаяИерархия
ИЗ
	ГотОтчБезИерархии КАК ГотОтчБезИерархии
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
		ПО ГотОтчБезИерархии.Подразделения = ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка
			И (ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство.Наименование = "АльтернативнаяИерархия")
Показать
Оставьте свое сообщение