Удаление необходимых записей в регистре сведений по объекту номенклатуры

1. Kroll17 20.12.23 16:24 Сейчас в теме
Доброго времени суток, подскажите, пожалуйста, каким образом можно узнать кол-во ссылок, на которое ссылается объект номенклатуры. То есть мне необходимо удалить объекты номенклатуры, но все они ссылаются на элемент в регистре сведений "Код товаров SKU", естественно, некоторые объекты ссылаются и на другие объекты.
Мне бы хотелось узнать, как я могу получить список всех ссылок, на которые ссылается объект номенклатуры, если он 1 И это ссылка на Регистр Сведений кодов SKU, то код можно удалить.
Вообще такой алгоритм имеет место быть? Или есть способ гораздо проще.
Конфа: Розница 2.3.10.61
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. independ 1551 20.12.23 21:20 Сейчас в теме
(1) номенклатура (ном) имеет информационную ценность (актуальность), только если по ней (ном) есть движение (поступление, продажи, оприходование, списание, реализация), т.е. достаточно проверить наличие ном в регистре накопления ТоварыНаСкладах. То что ном присутствует в установках цен, штрихкодах, сегментах номенклатур и проч.местах, но отсутствует в движении сообщает, что эта ном не нужна, и ее можно удалить.
Также можно проверить текущий остаток, если он равен 0 и последняя операция движения (например) имеет дату годичной давности, то эта ном неактуальная
2. Raskad 10 20.12.23 16:41 Сейчас в теме
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
3. DENSKR 16 20.12.23 18:17 Сейчас в теме
(2) А где ты список ссылок возьмешь?
5. Kroll17 20.12.23 18:19 Сейчас в теме
(3)Список ссылок я запросом выбрал
6. DENSKR 16 20.12.23 18:26 Сейчас в теме
7. Kroll17 20.12.23 18:27 Сейчас в теме
(6)Ну просто выбрал все ссылки номенклатуры из нужной мне группы номенклатуры, потом закинул в массив и через него пробовал, но конца операции не дожидался, так как очень долго
8. DENSKR 16 20.12.23 18:32 Сейчас в теме
(7)
А как попробовал? Есть что показать?
10. Kroll17 20.12.23 18:40 Сейчас в теме
(8)И если столько ссылок он будет получать от каждого объекта, то можно неделю результата запроса ждать
4. Kroll17 20.12.23 18:19 Сейчас в теме
(2)Попробовал с одной номенклатурой, это очень долго по времени, имеет ли смысл и можно ли так реализовать, чтобы я исключил все объекты кроме кода sku и, например, поступления, просто нужно минимизировать кол-во ссылок, которые функция будет возвращать, а то это, повторюсь, невероятно долго будет для 4 тысяч объектов номенклатуры
9. Kroll17 20.12.23 18:39 Сейчас в теме
Ну соответственно вот код для одной номенклатуры:
МассивСсылок = Новый Массив();
МассивСсылок.Добавить(Номенклатура);
ТабСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого Ссылка из ТабСсылок Цикл
	   Сообщить ("" + СокрЛП(Ссылка[0]) + "  " + СокрЛП(Ссылка[1]));
КонецЦикла;

И на скрине результат ТабСсылок = НайтиПоСсылкам(МассивСсылок);
Прикрепленные файлы:
11. DENSKR 16 20.12.23 18:50 Сейчас в теме
(9) То есть исходя из задачи, нужно сначала написать запрос на получение ссылок на номенклатуру по которой нет ссылок, кроме ссылок на "Код товаров SKU"?
12. Kroll17 20.12.23 18:55 Сейчас в теме
(11)Ну да, вся суть именно в этом, потому что полностью очищать регистр, а потом по правилам обмена его заполнять не вариант, так как я не знаю о наличие, например, подвисших отчётов на эваторе, то есть при выгрузке туда будут ошибки. А этот код есть у каждой позиции номенклатуры, даже у группы. Вот у меня и возник вопрос путём такой реализации в вопросе
13. DENSKR 16 20.12.23 19:35 Сейчас в теме
(12) что то типа

СписИмен = Новый СписокЗначений;
СписИмен.Добавить("Документы");
СписИмен.Добавить("Справочники");
СписИмен.Добавить("РегистрыСведений");
Исключить = "РегистрСведений.КодыСКУ";

МассивИсключений = Новый Массив;
Для Каждого Мет из СписИмен Цикл
    Имя = Мет.Значение;
    Для Каждого ВидМета из Метаданные[Имя] Цикл
        Если ВидМета.Имя = Исключить Тогда Продолжить
        Иначе
        МассивИсключений.Добавить(ВидМета.Имя);
        КонецЕсли;
    Конеццикла;
КонецЦикла;


НайтиПоСсылкам(МассивНоменклатуры, , , МассивИсключений)
Показать


Додумывай.
15. user779438 21.12.23 12:17 Сейчас в теме
Зачем изобретать велосипед? В СП все есть:
НайтиПоСсылкам (FindByRef)
Синтаксис:
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
.......
<ИсключитьОбъекты> (необязательный)
Тип: Массив.
В качестве элементов массива могут выступать:
Объект метаданных,
Строка – полное имя объекта метаданных.
Свойство позволяет явно указать объекты метаданных, которые следует исключить из области поиска ссылок на объекты.
Допустимые значения:
Неопределено
Пустой массив (нет объектов, которые необходимо дополнительно включить в область поиска).
Массив объектов метаданных.
Показать
16. n_mezentsev 57 21.12.23 12:18 Сейчас в теме
Тоже плотно занимался подобной задачей, но там структура базы была попроще (обошелся запросами), зато элементов справочника на пару порядков больше, а так - что угнетает в НайтиПоСсылкам, так это то, что она не останавливается при обнаружении первых ссылок, ищет дальше по ВСЕМУ дереву метаданных. Поэтому нужно сделать что? Правильно - обходить дерево метаданных вручную в цикле и при первых ссылках переходить к следующей позиции номенклатуры, а эту запомнить.
В общем набросал небольшую обработку, которая составляет список документов и справочников, использующих в реквизитах и табличных частях Номенклатуру, и "просеивает" весь список номенклатуры через этот список (3 параметр функции ВключитьОбъекты), попутно ранжируя его, чтобы зря не искать в редко используемых документах и справочниках. Регистры сведений и Накопления не добавлял, но это также не сложно. В итоге получается такая картинка:
Прикрепленные файлы:
ПоискИсчезающейНоменклатуры.epf
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот