Версия для печати темы (https://pro1c.org.ua/index.php?s=2d567fab735b98fc2678f4e6b55b1c60&showtopic=67243)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Як користуватися функцією НайтиПоСсылкам

Автор: alex-l1904 05.05.23, 9:21

Доброго дня,
підкажіть як користуватися функцією НайтиПоСсылкам,
треба аналізувати чи можна видаляти помічений на видалення документ.

Функция УдалитьОдинВидДокумента(ТекИмяДока,ДатаНач,ДатаКон)
    
    КолвоУд = 0;
    
    Имя = ТекИмяДока;
    
    Запрос = Новый Запрос("Выбрать Док.ссылка КАК Ссылка Из Документ."+Имя+" КАК Док ГДЕ Док.ПометкаУдаления И Док.Дата МЕЖДУ &ДатаН И &ДатаК");
    
    Запрос.УстановитьПараметр("ДатаН",ДатаНач);
    Запрос.УстановитьПараметр("ДатаК",КонецДня(ДатаКон));

    ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
    
    Пока ВыборкаЗапроса.Следующий() Цикл
        
        
        
                Если ПроверкаВозможностиУдаления(ВыборкаЗапроса.Ссылка) Тогда
          
                      ТекОб =  ВыборкаЗапроса.Ссылка.ПолучитьОбъект();
                     ТекОб.удалить();
              
                  КонецЕсли;
        
        КолвоУд = КолвоУд + 1;


    КонецЦикла;
    
    Если КолвоУд > 0 Тогда
         Сообщить("Видалено "+Имя +" " +Строка(КолвоУд));
    КонецЕсли;
    
    Возврат КолвоУд
КонецФункции


допоможіть з кодом для ПроверкаВозможностиУдаления(ТекДокумент)

В СП
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)

Возвращаемое значение:
Тип: ТаблицаЗначений.
Возвращает ссылки на найденные объекты в виде ТаблицаЗначений.
Первая колонка - исходная ссылка.
Вторая колонка - ссылка на объект, если найденная ссылка соответствует объектной таблице, или значение, олицетворяющее запись необъектной таблицы.
Третья колонка - объект метаданных, которому соответствуют данные, в которых найдена ссылка.


Автор: AnryMc 05.05.23, 13:11

alex-l1904 @ Сегодня, 9:21 * ,

Несколько лет назад "тра...ся" с этой функцией несколько недель... На Инфостарте - большое обсуждение было...

Уже подробностей не помню, но кажется: хоть в СП пишут что 2, 3 и 4 параметры необязательные, но если использовать хотя бы один из них нужно объявлять ВСЕ... И не в самой функции...

Но так и не смог заставить её работать как мне нужно

Примерно так работало:

    МассивИскомого = НОВЫЙ Массив;
    МассивИскомого.Добавить(Объект.ЧтоИщем.Ссылка);
    
    МассивГдеИщем = Новый Массив;
    МассивГдеНеИщем = Новый Массив;
    
    Для Каждого текГдеИщем Из Объект.ГдеИщем Цикл
        
        Если  текГдеИщем.Использовать Тогда
            
            МассивГдеИщем.Добавить(Метаданные.НайтиПоПолномуИмени(текГдеИщем.ПолныйТип));        //Тип(СтрЗаменить(текГдеИщем.ПолныйТип,"ы.", "Ссылка."))
            
        КонецЕсли;                                                                                  //Метаданные.НайтиПоПолномуИмени(текГдеИщем.ПолныйТип)
        
    КонецЦикла;
    
    Для Каждого текГдеНеИщем Из Объект.ГдеНеИщем Цикл
        
        Если текГдеНеИщем.Использовать Тогда
            
            МассивГдеНеИщем.Добавить(текГдеНеИщем.ПолныйТип);
            
        КонецЕсли;
        
    КонецЦикла;
    
    МассивСсылок = НайтиПоСсылкам(МассивИскомого, Новый Массив, МассивГдеИщем, МассивГдеНеИщем);
    
    Для Каждого текНайденный Из МассивСсылок Цикл
        
        нсн = Объект.ЧтоНашли.Добавить();
        
        Попытка
        нсн.НайденнаяСсылка = текНайденный.Данные.Ссылка;
    Исключение
        нсн.НайденнаяСсылка = текНайденный.Данные;
    КонецПопытки;
    
    нсн.ТипНайденного = ТипЗнч(текНайденный.Данные);
        
    КонецЦикла;

Автор: sunion 05.05.23, 14:19

AnryMc @ Сегодня, 14:11 * ,
Так а в чем там проблема?

Вот этот код работает и возвращает массив объектов с которым связан "док"

Для Каждого док Из ТаблицаДокументов Цикл
        Массив = Новый Массив;
        Массив.Добавить(док.Документ);    
        ТабСсылок = НайтиПоСсылкам(Массив);
        Если ТабСсылок.Количество() > 0 Тогда
            док.Связан =Истина;
        КонецЕсли;    
    КонецЦикла;



Автор: AnryMc 05.05.23, 14:29

Цитата(sunion @ 05.05.23, 14:19) *
Так а в чем там проблема?


Цитата(AnryMc @ 05.05.23, 13:11) *
хоть в СП пишут что 2, 3 и 4 параметры необязательные, но если использовать хотя бы один из них нужно объявлять ВСЕ...


Если в приведенном коде убрать любой из параметров (2,3,4) - не работает или работает неправильно, во всяком случае так было на релизе примерно 5-ти летней давности...

Автор: sunion 05.05.23, 14:40

AnryMc @ Сегодня, 15:29 * ,
То есть, вам нужно задействовать необязательные параметры. Просто вы описали задачу. как необходимость удаления файла и проверки с чем он связан. Но оставшиеся параметры решают более конкретные задачи.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua