Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Як користуватися функцією НайтиПоСсылкам          
alex-l1904 Подменю пользователя
сообщение 05.05.23, 9:21
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 66
Спасибо сказали: 11 раз
Рейтинг: 11

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

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

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


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


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

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

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


AnryMc Подменю пользователя
сообщение 05.05.23, 13:11
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 314
Спасибо сказали: 95 раз
Рейтинг: 96.6

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

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

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

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

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

sunion Подменю пользователя
сообщение 05.05.23, 14:19
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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



AnryMc Подменю пользователя
сообщение 05.05.23, 14:29
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 314
Спасибо сказали: 95 раз
Рейтинг: 96.6

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


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


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

Сообщение отредактировал AnryMc - 05.05.23, 14:32

sunion Подменю пользователя
сообщение 05.05.23, 14:40
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 15:25
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!