Удаление необходимых записей в регистре сведений по объекту номенклатуры
Доброго времени суток, подскажите, пожалуйста, каким образом можно узнать кол-во ссылок, на которое ссылается объект номенклатуры. То есть мне необходимо удалить объекты номенклатуры, но все они ссылаются на элемент в регистре сведений "Код товаров SKU", естественно, некоторые объекты ссылаются и на другие объекты.
Мне бы хотелось узнать, как я могу получить список всех ссылок, на которые ссылается объект номенклатуры, если он 1 И это ссылка на Регистр Сведений кодов SKU, то код можно удалить.
Вообще такой алгоритм имеет место быть? Или есть способ гораздо проще.
Конфа: Розница 2.3.10.61
Мне бы хотелось узнать, как я могу получить список всех ссылок, на которые ссылается объект номенклатуры, если он 1 И это ссылка на Регистр Сведений кодов SKU, то код можно удалить.
Вообще такой алгоритм имеет место быть? Или есть способ гораздо проще.
Конфа: Розница 2.3.10.61
По теме из базы знаний
- Быстрый поиск дублей в 1С с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Регистры сведений 1С. Как это устроено.
- 1С Характеристики номенклатуры. Переход на учёт по характеристикам для УТ, УНФ, Розница, КА
- Версионирование справочников, документов и регистров сведений на SQL-сервере
- Инструментарий для анализа и редактирования регистров 1С (Управляемые формы)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) номенклатура (ном) имеет информационную ценность (актуальность), только если по ней (ном) есть движение (поступление, продажи, оприходование, списание, реализация), т.е. достаточно проверить наличие ном в регистре накопления ТоварыНаСкладах. То что ном присутствует в установках цен, штрихкодах, сегментах номенклатур и проч.местах, но отсутствует в движении сообщает, что эта ном не нужна, и ее можно удалить.
Также можно проверить текущий остаток, если он равен 0 и последняя операция движения (например) имеет дату годичной давности, то эта ном неактуальная
Также можно проверить текущий остаток, если он равен 0 и последняя операция движения (например) имеет дату годичной давности, то эта ном неактуальная
(2)Попробовал с одной номенклатурой, это очень долго по времени, имеет ли смысл и можно ли так реализовать, чтобы я исключил все объекты кроме кода sku и, например, поступления, просто нужно минимизировать кол-во ссылок, которые функция будет возвращать, а то это, повторюсь, невероятно долго будет для 4 тысяч объектов номенклатуры
Ну соответственно вот код для одной номенклатуры:
И на скрине результат ТабСсылок = НайтиПоСсылкам(МассивСсылок);
МассивСсылок = Новый Массив();
МассивСсылок.Добавить(Номенклатура);
ТабСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого Ссылка из ТабСсылок Цикл
Сообщить ("" + СокрЛП(Ссылка[0]) + " " + СокрЛП(Ссылка[1]));
КонецЦикла;
И на скрине результат ТабСсылок = НайтиПоСсылкам(МассивСсылок);
Прикрепленные файлы:
(11)Ну да, вся суть именно в этом, потому что полностью очищать регистр, а потом по правилам обмена его заполнять не вариант, так как я не знаю о наличие, например, подвисших отчётов на эваторе, то есть при выгрузке туда будут ошибки. А этот код есть у каждой позиции номенклатуры, даже у группы. Вот у меня и возник вопрос путём такой реализации в вопросе
(12) что то типа
Додумывай.
СписИмен = Новый СписокЗначений;
СписИмен.Добавить("Документы");
СписИмен.Добавить("Справочники");
СписИмен.Добавить("РегистрыСведений");
Исключить = "РегистрСведений.КодыСКУ";
МассивИсключений = Новый Массив;
Для Каждого Мет из СписИмен Цикл
Имя = Мет.Значение;
Для Каждого ВидМета из Метаданные[Имя] Цикл
Если ВидМета.Имя = Исключить Тогда Продолжить
Иначе
МассивИсключений.Добавить(ВидМета.Имя);
КонецЕсли;
Конеццикла;
КонецЦикла;
НайтиПоСсылкам(МассивНоменклатуры, , , МассивИсключений)
ПоказатьДодумывай.
Зачем изобретать велосипед? В СП все есть:
НайтиПоСсылкам (FindByRef)
Синтаксис:
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
.......
<ИсключитьОбъекты> (необязательный)
Тип: Массив.
В качестве элементов массива могут выступать:
Объект метаданных,
Строка – полное имя объекта метаданных.
Свойство позволяет явно указать объекты метаданных, которые следует исключить из области поиска ссылок на объекты.
Допустимые значения:
Неопределено
Пустой массив (нет объектов, которые необходимо дополнительно включить в область поиска).
Массив объектов метаданных.
ПоказатьСинтаксис:
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
.......
<ИсключитьОбъекты> (необязательный)
Тип: Массив.
В качестве элементов массива могут выступать:
Объект метаданных,
Строка – полное имя объекта метаданных.
Свойство позволяет явно указать объекты метаданных, которые следует исключить из области поиска ссылок на объекты.
Допустимые значения:
Неопределено
Пустой массив (нет объектов, которые необходимо дополнительно включить в область поиска).
Массив объектов метаданных.
Тоже плотно занимался подобной задачей, но там структура базы была попроще (обошелся запросами), зато элементов справочника на пару порядков больше, а так - что угнетает в НайтиПоСсылкам, так это то, что она не останавливается при обнаружении первых ссылок, ищет дальше по ВСЕМУ дереву метаданных. Поэтому нужно сделать что? Правильно - обходить дерево метаданных вручную в цикле и при первых ссылках переходить к следующей позиции номенклатуры, а эту запомнить.
В общем набросал небольшую обработку, которая составляет список документов и справочников, использующих в реквизитах и табличных частях Номенклатуру, и "просеивает" весь список номенклатуры через этот список (3 параметр функции ВключитьОбъекты), попутно ранжируя его, чтобы зря не искать в редко используемых документах и справочниках. Регистры сведений и Накопления не добавлял, но это также не сложно. В итоге получается такая картинка:
В общем набросал небольшую обработку, которая составляет список документов и справочников, использующих в реквизитах и табличных частях Номенклатуру, и "просеивает" весь список номенклатуры через этот список (3 параметр функции ВключитьОбъекты), попутно ранжируя его, чтобы зря не искать в редко используемых документах и справочниках. Регистры сведений и Накопления не добавлял, но это также не сложно. В итоге получается такая картинка:
Прикрепленные файлы:
ПоискИсчезающейНоменклатуры.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот