Где в базе встречается справочник или документ (номенклатура, контрагент, договор и т. д.): схема связей по данным с числом записей
Задачи пользователя - Поиск данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Обработка «Схема связей по данным» показывает, где в базе встречается конкретный элемент: товар, контрагент, склад, договор, документ. Элемент стоит в центре схемы. Слева — документы, справочники и регистры, в которых он записан, и сколько раз. Справа — значения его собственных реквизитов: на что ссылается он сам. С любого места можно перейти к его записям, а с любой записи или значения — к их собственной схеме.
Обработка только читает базу и ничего в ней не меняет. БСП ей не нужна.
Зачем это нужно
- Почему элемент не удаляется. Помеченный на удаление товар или контрагент не уходит, потому что на него ещё ссылаются. Схема показывает места, где на него ссылаются, с числом записей, а вкладка записей — конкретные документы, которые держат ссылку. Реквизиты типа «любая ссылка» обработка не проверяет — о них ниже, в «Как считает».
- Где используется товар. В каких документах он стоит, в каких табличных частях, в каких регистрах есть движения и сколько их — одним экраном, без отчётов по каждому виду документа.
- Что сделал документ. Какие регистры он двигает и сколько записей в каждом, кто на него ссылается — например, счёт-фактура, — и что в нём записано: покупатель, договор, склад, товары.
- Путь по цепочке. Товар → накладная, где он стоит → покупатель из этой накладной → договоры покупателя. Каждый шаг — щелчок, кнопка «Назад» возвращает прежний центр.
Как читать схему
«Варочная панель»: слева места по группам, группа «Документы» раскрыта, у каждого документа — сколько строк ссылается на товар. Справа — на что ссылается сам товарСлева от центра — места, где встречается элемент, справа — значения его реквизитов. Места собраны в группы по видам: «Документы», «Справочники», «Регистры», у группы — сумма записей. Если мест немного, видны все сразу. Если с одной стороны их больше двенадцати, группы свёрнуты, и щелчок раскрывает одну из них, не пересчитывая записи заново.
Число у места — сколько записей ссылается на элемент. Для документа это строки: товар, который стоит в одной накладной тремя строками, даёт три записи. Для регистра — записи движений. Чем записей больше, тем толще стрелка, и где элемент встречается чаще всего, видно сразу.
Справа те же группы по видам значений: справочники, документы, перечисления. Значения берутся и из шапки, и из табличных частей. Щелчок по значению делает центром его — так на схеме договора видно, где этот договор ещё используется.
Записи места
Вкладка «Места и записи»: все места по алфавиту — через какой реквизит, сколько записей и документов; ниже — документы, которые двигали регистр, за 2024 год, новые сверхуЩелчок по месту на схеме открывает вторую вкладку и выделяет это место. Верхняя таблица — все места подробно: объект, реквизит, через который он ссылается на элемент, сколько записей и сколько разных документов. Одно место может стоять в таблице дважды: у регистра «Запасы и затраты» товар записан и в номенклатуре, и в корреспондирующей номенклатуре.
Нижняя таблица — сами записи выбранного места, новые сверху. У документа это сами документы, у регистра — документы, которые сделали движения. Над записями в одной строке:
- «Открыть запись» — открывает форму выбранного документа или элемента;
- «Период» — по умолчанию текущий год; стандартный выбор периода 1С, можно задать любые даты или очистить;
- «первые 100» — по умолчанию включена; снятая галка показывает все записи за период.
Двойной щелчок по записи делает центром её: видно, что ещё записано в этом документе и какие регистры он двигал.
Документ в центре
Документ в центре: слева — регистры, которые он двигает, и документы, которые на него ссылаются; справа раскрыты справочники из шапки и табличных частей. Слева список накладных за март с периодомУ документа слева видны его движения — по каждому регистру, сколько записей, — и документы, которые на него ссылаются. Справа — всё, что в нём записано: реквизиты шапки и значения из табличных частей.
Как выбрать элемент
Левая панель — выбор центра. Сверху — дерево видов: справочники, документы, планы видов характеристик, с поиском по названию. Ниже — элементы выбранного вида:
- справочник — деревом групп; группы раскрываются по одной, поэтому большой справочник открывается сразу;
- документы — списком от новых к старым, с датой, отметками «Пров.» и «Удал.» и полем периода;
- поиск — по наименованию, коду или номеру документа.
Двойной щелчок по элементу ставит его в центр схемы. Разделители между частями формы тянутся мышью.
Объекты, табличные части и реквизиты с именем на «Удалить» обработка по умолчанию не показывает ни в списке видов, ни на схеме. Так в типовых конфигурациях помечают то, что скоро уйдёт, хотя данные в них часто остаются. Галка «устаревшие» возвращает их, и схема пересчитывается.
Как считает
Обработка не перебирает базу. Сначала по метаданным она выясняет, в каких таблицах и полях ссылка на тип элемента вообще может стоять, а потом спрашивает эти поля запросом и сразу получает число записей.
Где может стоять ссылка, видно по типам реквизитов. При открытии обработка один раз проходит по справочникам, документам, планам видов характеристик, регистрам и константам. Тип каждого реквизита она раскладывает на составляющие, и Метаданные.НайтиПоТипу возвращает объект, на который реквизит может ссылаться. Для каждой такой связи обработка запоминает таблицу и поле, по которым её потом спросит запросом. У реквизита табличной части таблица — Документ.РасходнаяНакладная.Запасы, у измерения — сам регистр:
&НаСервереБезКонтекста
Процедура ДобавитьСвязиЧасти(Связи, Откуда, Таблица, ОписаниеТипаЧасти, Поле, Через, Регистр)
Типы = ОписаниеТипаЧасти.Типы();
Если Типы.Количество() > 20 Тогда
Возврат;
КонецЕсли;
Для Каждого ТипЧасти Из Типы Цикл
Куда = Метаданные.НайтиПоТипу(ТипЧасти);
Если Куда <> Неопределено Тогда
ДобавитьСвязь(Связи, Откуда, Куда.ПолноеИмя(), Через, Таблица, Поле, Регистр);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Тип шире двадцати — это «любая ссылка» или определяемый тип на всё подряд. Такой реквизит пришлось бы проверять для каждого элемента любого вида, и в связи я его не беру — ссылки через такие реквизиты схема не показывает. Движения документов обработка добавляет отдельно, по ОбъектМД.Движения: у регистра это поле Регистратор. Владельцев справочников — по Владельцы. Таблица связей лежит во временном хранилище формы, и на каждый выбор центра обработка берёт из неё только связи нужного типа.
Дальше по каждой связи нужен ответ «сколько записей ссылается на этот элемент». У ходового справочника в типовой таких связей сотни, поэтому обработка склеивает запросы через ОБЪЕДИНИТЬ ВСЕ пачками по сорок:
&НаСервереБезКонтекста
Функция СчитатьПачку(Нужные, Первая, Последняя, Элемент)
Части = Новый Массив;
Для Номер = Первая По Последняя Цикл
Связь = Нужные[Номер];
// У регистров поля Ссылка нет: объектов не считаем
Части.Добавить("ВЫБРАТЬ " + XMLСтрока(Номер) + " КАК Номер, КОЛИЧЕСТВО(*) КАК Строк, "
+ ?(Связь.Регистр, "0", "КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т.Ссылка)") + " КАК Объектов ИЗ "
+ Связь.Таблица + " КАК Т ГДЕ Т." + Связь.Поле + " = &Элемент");
КонецЦикла;
Запрос = Новый Запрос(СтрСоединить(Части, " ОБЪЕДИНИТЬ ВСЕ "));
Запрос.УстановитьПараметр("Элемент", Элемент);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Условие Т.Поле = &Элемент одно и то же для реквизита шапки, реквизита табличной части и измерения регистра, меняется только таблица. КОЛИЧЕСТВО(*) даёт число записей, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т.Ссылка) — число документов. У регистра поля Ссылка нет, поэтому там ноль.
Записи места обработка выбирает тем же условием. У регистра вместо самой записи она берёт регистратор: запись регистра не открывается, открывается документ, который её сделал. У регистратора есть дата — поле Дата есть у любого документа, и Т.Регистратор.Дата работает без уточнения составного типа. По этой дате работают период и порядок «новые сверху».
На чём проверено
Я проверял на платформе 1С:Предприятие 8.5 (8.5.1.1522) и «Управлении нашей фирмой» 3.0 (3.0.14.143) — в веб-клиенте, на файловой и на серверной базе.
На 8.3 я не проверял. Может, откроется, а может, и нет.
Состав поставки
SkhemaSvyazeyPoDannym.epf— внешняя обработка «Схема связей по данным», только чтение, код открыт.
Проверено на следующих конфигурациях и релизах:
- Управление нашей фирмой, редакция 3.0, релизы 3.0.14.143
Вступайте в нашу телеграмм-группу Инфостарт